Эх сурвалжийг харах

Merge branch 'branding' into bring-branding-to-master

# Conflicts:
#	.drone.yml
#	build.gradle
#	src/main/java/com/owncloud/android/services/SyncedFolderJobService.java
#	src/main/java/com/owncloud/android/services/observer/SyncedFolderObserver.java
#	src/main/java/com/owncloud/android/utils/RecursiveFileObserver.java
Mario Danic 8 жил өмнө
parent
commit
0ffb67c506
100 өөрчлөгдсөн 527 нэмэгдсэн , 146 устгасан
  1. 7 4
      .drone.yml
  2. 1 0
      .gitignore
  3. 12 3
      SETUP.md
  4. 74 76
      build.gradle
  5. 0 27
      src/com/owncloud/android/ui/fragment/AuthenticatorAccountDetailsFragment.java
  6. 0 27
      src/com/owncloud/android/ui/fragment/AuthenticatorGetStartedFragment.java
  7. 30 0
      src/custom/AndroidManifest.xml
  8. 35 0
      src/custom/google-services.json
  9. 50 0
      src/custom/java/com/owncloud/android/CustomApp.java
  10. 6 5
      src/custom/res/layout/drawer.xml
  11. 103 0
      src/custom/res/values/setup.xml
  12. 35 0
      src/generic/google-services.json
  13. 1 1
      src/main/AndroidManifest.xml
  14. 0 0
      src/main/java/com/afollestad/sectionedrecyclerview/SectionedRecyclerViewAdapter.java
  15. 0 2
      src/main/java/com/owncloud/android/MainApp.java
  16. 0 0
      src/main/java/com/owncloud/android/authentication/AccountAuthenticator.java
  17. 0 0
      src/main/java/com/owncloud/android/authentication/AccountAuthenticatorActivity.java
  18. 0 0
      src/main/java/com/owncloud/android/authentication/AccountAuthenticatorService.java
  19. 0 0
      src/main/java/com/owncloud/android/authentication/AccountUtils.java
  20. 0 0
      src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java
  21. 0 0
      src/main/java/com/owncloud/android/authentication/AuthenticatorAsyncTask.java
  22. 0 0
      src/main/java/com/owncloud/android/authentication/LoginUrlInfo.java
  23. 0 0
      src/main/java/com/owncloud/android/authentication/OAuth2Constants.java
  24. 0 0
      src/main/java/com/owncloud/android/authentication/PassCodeManager.java
  25. 0 0
      src/main/java/com/owncloud/android/authentication/SsoWebViewClient.java
  26. 0 0
      src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java
  27. 0 0
      src/main/java/com/owncloud/android/datamodel/MediaFolder.java
  28. 0 0
      src/main/java/com/owncloud/android/datamodel/MediaProvider.java
  29. 0 0
      src/main/java/com/owncloud/android/datamodel/OCFile.java
  30. 0 0
      src/main/java/com/owncloud/android/datamodel/SyncedFolder.java
  31. 0 0
      src/main/java/com/owncloud/android/datamodel/SyncedFolderDisplayItem.java
  32. 0 0
      src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.java
  33. 0 0
      src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java
  34. 0 0
      src/main/java/com/owncloud/android/datamodel/UploadsStorageManager.java
  35. 0 0
      src/main/java/com/owncloud/android/datastorage/DataStorageProvider.java
  36. 0 0
      src/main/java/com/owncloud/android/datastorage/StoragePoint.java
  37. 0 0
      src/main/java/com/owncloud/android/datastorage/UniqueStorageList.java
  38. 0 0
      src/main/java/com/owncloud/android/datastorage/providers/AbstractCommandLineStoragePoint.java
  39. 0 0
      src/main/java/com/owncloud/android/datastorage/providers/AbstractStoragePointProvider.java
  40. 0 0
      src/main/java/com/owncloud/android/datastorage/providers/EnvironmentStoragePointProvider.java
  41. 0 0
      src/main/java/com/owncloud/android/datastorage/providers/HardcodedStoragePointProvider.java
  42. 0 0
      src/main/java/com/owncloud/android/datastorage/providers/IStoragePointProvider.java
  43. 0 0
      src/main/java/com/owncloud/android/datastorage/providers/MountCommandStoragePointProvider.java
  44. 0 0
      src/main/java/com/owncloud/android/datastorage/providers/SystemDefaultStoragePointProvider.java
  45. 0 0
      src/main/java/com/owncloud/android/datastorage/providers/VDCStoragePointProvider.java
  46. 0 0
      src/main/java/com/owncloud/android/db/OCUpload.java
  47. 0 0
      src/main/java/com/owncloud/android/db/PreferenceManager.java
  48. 0 0
      src/main/java/com/owncloud/android/db/ProviderMeta.java
  49. 0 0
      src/main/java/com/owncloud/android/db/UploadResult.java
  50. 0 0
      src/main/java/com/owncloud/android/features/FeatureList.java
  51. 0 0
      src/main/java/com/owncloud/android/files/BootupBroadcastReceiver.java
  52. 0 0
      src/main/java/com/owncloud/android/files/FileMenuFilter.java
  53. 0 0
      src/main/java/com/owncloud/android/files/InstantUploadBroadcastReceiver.java
  54. 0 0
      src/main/java/com/owncloud/android/files/services/ConnectivityActionReceiver.java
  55. 0 0
      src/main/java/com/owncloud/android/files/services/FileDownloader.java
  56. 0 0
      src/main/java/com/owncloud/android/files/services/FileUploader.java
  57. 0 0
      src/main/java/com/owncloud/android/files/services/IndexedForest.java
  58. 0 0
      src/main/java/com/owncloud/android/media/MediaControlView.java
  59. 0 0
      src/main/java/com/owncloud/android/media/MediaService.java
  60. 0 0
      src/main/java/com/owncloud/android/media/MediaServiceBinder.java
  61. 0 0
      src/main/java/com/owncloud/android/operations/CheckCurrentCredentialsOperation.java
  62. 0 0
      src/main/java/com/owncloud/android/operations/CopyFileOperation.java
  63. 0 0
      src/main/java/com/owncloud/android/operations/CreateFolderOperation.java
  64. 0 0
      src/main/java/com/owncloud/android/operations/CreateShareViaLinkOperation.java
  65. 0 0
      src/main/java/com/owncloud/android/operations/CreateShareWithShareeOperation.java
  66. 0 0
      src/main/java/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java
  67. 0 0
      src/main/java/com/owncloud/android/operations/DownloadFileOperation.java
  68. 0 0
      src/main/java/com/owncloud/android/operations/GetCapabilitiesOperarion.java
  69. 0 0
      src/main/java/com/owncloud/android/operations/GetServerInfoOperation.java
  70. 0 0
      src/main/java/com/owncloud/android/operations/GetSharesForFileOperation.java
  71. 0 0
      src/main/java/com/owncloud/android/operations/GetUserProfileOperation.java
  72. 0 0
      src/main/java/com/owncloud/android/operations/MoveFileOperation.java
  73. 0 0
      src/main/java/com/owncloud/android/operations/OAuth2GetAccessToken.java
  74. 0 0
      src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java
  75. 0 0
      src/main/java/com/owncloud/android/operations/RemoveFileOperation.java
  76. 0 0
      src/main/java/com/owncloud/android/operations/RenameFileOperation.java
  77. 0 0
      src/main/java/com/owncloud/android/operations/SynchronizeFileOperation.java
  78. 0 0
      src/main/java/com/owncloud/android/operations/SynchronizeFolderOperation.java
  79. 0 0
      src/main/java/com/owncloud/android/operations/UnshareOperation.java
  80. 0 0
      src/main/java/com/owncloud/android/operations/UpdateOCVersionOperation.java
  81. 0 0
      src/main/java/com/owncloud/android/operations/UpdateSharePermissionsOperation.java
  82. 0 0
      src/main/java/com/owncloud/android/operations/UpdateShareViaLinkOperation.java
  83. 0 0
      src/main/java/com/owncloud/android/operations/UploadFileOperation.java
  84. 0 0
      src/main/java/com/owncloud/android/operations/common/SyncOperation.java
  85. 0 0
      src/main/java/com/owncloud/android/providers/FileContentProvider.java
  86. 2 1
      src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java
  87. 0 0
      src/main/java/com/owncloud/android/services/AdvancedFileAlterationListener.java
  88. 0 0
      src/main/java/com/owncloud/android/services/AutoUploadJob.java
  89. 0 0
      src/main/java/com/owncloud/android/services/NCJobCreator.java
  90. 0 0
      src/main/java/com/owncloud/android/services/OperationsService.java
  91. 0 0
      src/main/java/com/owncloud/android/services/ShutdownReceiver.java
  92. 0 0
      src/main/java/com/owncloud/android/services/SyncFolderHandler.java
  93. 93 0
      src/main/java/com/owncloud/android/services/SyncedFolderJobService.java
  94. 0 0
      src/main/java/com/owncloud/android/services/observer/AdvancedFileAlterationObserver.java
  95. 0 0
      src/main/java/com/owncloud/android/services/observer/FileObserverService.java
  96. 0 0
      src/main/java/com/owncloud/android/services/observer/FolderObserver.java
  97. 78 0
      src/main/java/com/owncloud/android/services/observer/SyncedFolderObserver.java
  98. 0 0
      src/main/java/com/owncloud/android/services/observer/SyncedFolderObserverService.java
  99. 0 0
      src/main/java/com/owncloud/android/syncadapter/AbstractOwnCloudSyncAdapter.java
  100. 0 0
      src/main/java/com/owncloud/android/syncadapter/FileSyncAdapter.java

+ 7 - 4
.drone.yml

@@ -1,6 +1,6 @@
 pipeline:
 pipeline:
   test:
   test:
-    image: nextcloudci/android:android-14
+    image: nextcloudci/android:android-15
     commands:
     commands:
       - echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI -c 20M
       - echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI -c 20M
       - emulator -avd test -no-window &
       - emulator -avd test -no-window &
@@ -8,12 +8,15 @@ pipeline:
       # build app and assemble APK, in debug mode
       # build app and assemble APK, in debug mode
       - ./gradlew assembleDebug
       - ./gradlew assembleDebug
       # run all the local unit tests of app module
       # run all the local unit tests of app module
-      - ./gradlew :testDebug
+      - ./gradlew :testGenericDebugUnitTest
+      - ./gradlew :testCustomDebugUnitTest
       # run all the instrumented tests of app module - DISABLED until we get an stable setup for Espresso in Travis
       # run all the instrumented tests of app module - DISABLED until we get an stable setup for Espresso in Travis
       # - ./gradlew connectedDebugAndroidTest --info
       # - ./gradlew connectedDebugAndroidTest --info
       # install app, then assemble and install instrumented tests of app module
       # install app, then assemble and install instrumented tests of app module
-      - ./gradlew :installDebug
-      - ./gradlew :installDebugAndroidTest
+      - ./gradlew :installGenericDebug
+      - ./gradlew :installCustomDebug
+      - ./gradlew :installGenericDebugAndroidTest
+      - ./gradlew :installCustomDebugAndroidTest
       # run sample instrumented unit test
       # run sample instrumented unit test
       # TODO fails because test runner is not available
       # TODO fails because test runner is not available
       #- adb shell am instrument -w -e debug false -e class com.owncloud.android.datamodel.OCFileUnitTest com.owncloud.android.test/android.support.test.runner.AndroidJUnitRunner
       #- adb shell am instrument -w -e debug false -e class com.owncloud.android.datamodel.OCFileUnitTest com.owncloud.android.test/android.support.test.runner.AndroidJUnitRunner

+ 1 - 0
.gitignore

@@ -33,3 +33,4 @@ tests/proguard-project.txt
 *.iml
 *.iml
 build
 build
 /gradle.properties
 /gradle.properties
+

+ 12 - 3
SETUP.md

@@ -28,7 +28,7 @@ For other software dependencies check the details in the section corresponding t
 
 
 You will need [git][1] to access to the different versions of the Nextcloud's source code. The source code is hosted in Github and may be read by anybody without needing a Github account. You will need a Github account if you want to contribute to the development of the app with your own code.
 You will need [git][1] to access to the different versions of the Nextcloud's source code. The source code is hosted in Github and may be read by anybody without needing a Github account. You will need a Github account if you want to contribute to the development of the app with your own code.
 
 
-Next steps will assume you have a Github account and that you will get the code from your own fork. 
+Next steps will assume you have a Github account and that you will get the code from your own fork.
 
 
 * In a web browser, go to https://github.com/nextcloud/android, and click the 'Fork' button near the top right corner.
 * In a web browser, go to https://github.com/nextcloud/android, and click the 'Fork' button near the top right corner.
 * Open a terminal and go on with the next steps in it.
 * Open a terminal and go on with the next steps in it.
@@ -63,11 +63,20 @@ To set up the project in Android Studio follow the next steps:
 * Run the 'clean' and 'build' tasks using the Gradle wrapper provided
 * Run the 'clean' and 'build' tasks using the Gradle wrapper provided
     - Windows: ```gradlew.bat clean build```
     - Windows: ```gradlew.bat clean build```
     - Mac OS/Linux: ```./gradlew clean build```
     - Mac OS/Linux: ```./gradlew clean build```
-	
+
 The first time the Gradle wrapper is called, the correct Gradle version will be downloaded automatically. An Internet connection is needed for it works.
 The first time the Gradle wrapper is called, the correct Gradle version will be downloaded automatically. An Internet connection is needed for it works.
-	
+
 The generated APK file is saved in android/build/outputs/apk as android-debug.apk
 The generated APK file is saved in android/build/outputs/apk as android-debug.apk
 
 
+### 4. App flavours
+
+The app is currently equipped to be built with two flavours:
+* generic - the regular build, released as a Nextcloud Android app on the Play store
+* custom - a customized build, to be used by people who need features we can't or
+  won't include into the traditional build (like Firebase Analytics)
+
+When building the *generic*, you will *not* get the dependencies imposed by the *custom*
+build.
 
 
 [0]: https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md
 [0]: https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md
 [1]: https://git-scm.com/
 [1]: https://git-scm.com/

+ 74 - 76
build.gradle

@@ -14,6 +14,7 @@ buildscript {
     }
     }
     dependencies {
     dependencies {
         classpath 'com.android.tools.build:gradle:2.2.3'
         classpath 'com.android.tools.build:gradle:2.2.3'
+        classpath 'com.google.gms:google-services:3.0.0'
     }
     }
 }
 }
 
 
@@ -40,54 +41,6 @@ repositories {
     }
     }
 }
 }
 
 
-dependencies {
-    /// dependencies for app building
-    compile name: 'touch-image-view'
-    compile 'com.android.support:multidex:1.0.1'
-
-    compile 'com.github.nextcloud:android-library:1.0.13'
-    compile "com.android.support:support-v4:${supportLibraryVersion}"
-    compile "com.android.support:design:${supportLibraryVersion}"
-    compile 'com.jakewharton:disklrucache:2.0.2'
-    compile "com.android.support:appcompat-v7:${supportLibraryVersion}"
-    compile 'com.getbase:floatingactionbutton:1.10.1'
-    compile 'com.google.code.findbugs:annotations:2.0.1'
-    compile group: 'commons-io', name: 'commons-io', version: '2.4'
-    compile 'com.google.android.gms:play-services:10.2.0'
-    compile 'com.github.evernote:android-job:v1.1.7'
-
-    /// dependencies for local unit tests
-    testCompile 'junit:junit:4.12'
-    testCompile 'org.mockito:mockito-core:1.10.19'
-
-    /// dependencies for instrumented tests
-    // JUnit4 Rules
-    androidTestCompile 'com.android.support.test:rules:0.5'
-
-    // Android JUnit Runner
-    androidTestCompile 'com.android.support.test:runner:0.5'
-
-    // Android Annotation Support
-    androidTestCompile "com.android.support:support-annotations:${supportLibraryVersion}"
-
-    // Espresso core
-    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
-
-    // UIAutomator - for cross-app UI tests, and to grant screen is turned on in Espresso tests
-    androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
-    // fix conflict in dependencies; see http://g.co/androidstudio/app-test-app-conflict for details
-    androidTestCompile "com.android.support:support-annotations:${supportLibraryVersion}"
-
-
-}
-
-tasks.withType(Test) {
-    /// increased logging for tests
-    testLogging {
-        events "passed", "skipped", "failed"
-    }
-}
-
 android {
 android {
     lintOptions {
     lintOptions {
         abortOnError true
         abortOnError true
@@ -112,40 +65,33 @@ android {
         testInstrumentationRunnerArgument "TEST_SERVER_URL", "\"$System.env.OCTEST_SERVER_BASE_URL\""
         testInstrumentationRunnerArgument "TEST_SERVER_URL", "\"$System.env.OCTEST_SERVER_BASE_URL\""
 
 
         multiDexEnabled true
         multiDexEnabled true
-        applicationId "com.nextcloud.client"
-    }
 
 
-    // adapt structure from Eclipse to Gradle/Android Studio expectations;
-    // see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure
-    sourceSets {
-        main {
-            manifest.srcFile 'AndroidManifest.xml'
-            java.srcDirs = ['src']
-            resources.srcDirs = ['src']
-            aidl.srcDirs = ['src']
-            renderscript.srcDirs = ['src']
-            res.srcDirs = ['res']
-            assets.srcDirs = ['assets']
-        }
+        // adapt structure from Eclipse to Gradle/Android Studio expectations;
+        // see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure
 
 
+        productFlavors {
+            generic {
+                applicationId 'com.nextcloud.client'
+            }
+
+            custom {
+                // structure is:
+                // domain tld
+                // domain name
+                // .client
+                applicationId 'com.custom.client'
+            }
+        }
 
 
-        // move whole local unit tests structure as a whole from src/test/* to test/*
-        test.setRoot('test')
+        configurations {
+            customCompile
+        }
+    }
 
 
-        // move whole instrumented tests structure as a whole from src/androidTest/* to androidTest/*
-        androidTest.setRoot('androidTest')
 
 
+    // adapt structure from Eclipse to Gradle/Android Studio expectations;
+    // see http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Configuring-the-Structure
 
 
-        // Move the build types to build-types/<type>
-        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
-        // This moves them out of them default location under src/<type>/... which would
-        // conflict with src/ being used by the main source set.
-        // Adding new build types or product flavors should be accompanied
-        // by a similar customization.
-        debug.setRoot('build-types/debug')
-        release.setRoot('build-types/release')
-    }
-	
     dexOptions {
     dexOptions {
         // Skip pre-dexing when running on Travis CI or when disabled via -Dpre-dex=false.
         // Skip pre-dexing when running on Travis CI or when disabled via -Dpre-dex=false.
         preDexLibraries = preDexEnabled && !travisBuild
         preDexLibraries = preDexEnabled && !travisBuild
@@ -163,6 +109,7 @@ android {
     packagingOptions {
     packagingOptions {
         exclude 'META-INF/LICENSE.txt'
         exclude 'META-INF/LICENSE.txt'
     }
     }
+
     task checkstyle(type: Checkstyle) {
     task checkstyle(type: Checkstyle) {
         configFile = file("${rootProject.projectDir}/checkstyle.xml")
         configFile = file("${rootProject.projectDir}/checkstyle.xml")
         configProperties.checkstyleSuppressionsPath = file("${project.rootDir}/config/quality/checkstyle/suppressions.xml").absolutePath
         configProperties.checkstyleSuppressionsPath = file("${project.rootDir}/config/quality/checkstyle/suppressions.xml").absolutePath
@@ -215,3 +162,54 @@ android {
     check.dependsOn 'checkstyle', 'findbugs', 'pmd', 'lint'
     check.dependsOn 'checkstyle', 'findbugs', 'pmd', 'lint'
 
 
 }
 }
+
+dependencies {
+    /// dependencies for app building
+    compile name: 'touch-image-view'
+    compile 'com.android.support:multidex:1.0.1'
+
+    compile 'com.github.nextcloud:android-library:1.0.11'
+    compile "com.android.support:support-v4:${supportLibraryVersion}"
+    compile "com.android.support:design:${supportLibraryVersion}"
+    compile 'com.jakewharton:disklrucache:2.0.2'
+    compile "com.android.support:appcompat-v7:${supportLibraryVersion}"
+    compile 'com.getbase:floatingactionbutton:1.10.1'
+    compile 'com.google.code.findbugs:annotations:2.0.1'
+    compile group: 'commons-io', name: 'commons-io', version: '2.4'
+    compile 'com.google.android.gms:play-services:10.2.0'
+    compile 'com.github.evernote:android-job:v1.1.7'
+
+    customCompile 'com.google.firebase:firebase-core:10.2.0'
+
+    /// dependencies for local unit tests
+    testCompile 'junit:junit:4.12'
+    testCompile 'org.mockito:mockito-core:1.10.19'
+
+    /// dependencies for instrumented tests
+    // JUnit4 Rules
+    androidTestCompile 'com.android.support.test:rules:0.5'
+
+    // Android JUnit Runner
+    androidTestCompile 'com.android.support.test:runner:0.5'
+
+    // Android Annotation Support
+    androidTestCompile "com.android.support:support-annotations:${supportLibraryVersion}"
+
+    // Espresso core
+    androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.2'
+
+    // UIAutomator - for cross-app UI tests, and to grant screen is turned on in Espresso tests
+    //androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'
+    // fix conflict in dependencies; see http://g.co/androidstudio/app-test-app-conflict for details
+    //androidTestCompile "com.android.support:support-annotations:${supportLibraryVersion}"
+
+}
+
+tasks.withType(Test) {
+    /// increased logging for tests
+    testLogging {
+        events "passed", "skipped", "failed"
+    }
+}
+
+apply plugin: 'com.google.gms.google-services'

+ 0 - 27
src/com/owncloud/android/ui/fragment/AuthenticatorAccountDetailsFragment.java

@@ -1,27 +0,0 @@
-/**
- *   ownCloud Android client application
- *
- *   Copyright (C) 2012 Bartek Przybylski
- *   Copyright (C) 2015 ownCloud Inc.
- *
- *   This program is free software: you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License version 2,
- *   as published by the Free Software Foundation.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-package com.owncloud.android.ui.fragment;
-
-import android.support.v4.app.Fragment;
-
-public class AuthenticatorAccountDetailsFragment extends Fragment {
-
-}

+ 0 - 27
src/com/owncloud/android/ui/fragment/AuthenticatorGetStartedFragment.java

@@ -1,27 +0,0 @@
-/**
- *   ownCloud Android client application
- *
- *   Copyright (C) 2012 Bartek Przybylski
- *   Copyright (C) 2015 ownCloud Inc.
- *
- *   This program is free software: you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License version 2,
- *   as published by the Free Software Foundation.
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
- *
- */
-
-package com.owncloud.android.ui.fragment;
-
-import android.support.v4.app.Fragment;
-
-public class AuthenticatorGetStartedFragment extends Fragment {
-
-}

+ 30 - 0
src/custom/AndroidManifest.xml

@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2017  Mario Danic
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU Affero General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU Affero General Public License for more details.
+
+  You should have received a copy of the GNU Affero General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          xmlns:tools="http://schemas.android.com/tools">
+
+
+    <application
+        android:name="com.owncloud.android.CustomApp"
+        tools:replace="android:name">
+
+    </application>
+
+</manifest>

+ 35 - 0
src/custom/google-services.json

@@ -0,0 +1,35 @@
+{
+  "project_info": {
+    "project_number": "",
+    "project_id": ""
+  },
+  "client": [
+    {
+      "client_info": {
+        "mobilesdk_app_id": "",
+        "android_client_info": {
+          "package_name": "com.custom.client"
+        }
+      },
+      "oauth_client": [],
+      "api_key": [
+        {
+          "current_key": ""
+        }
+      ],
+      "services": {
+        "analytics_service": {
+          "status": 1
+        },
+        "appinvite_service": {
+          "status": 1,
+          "other_platform_oauth_client": []
+        },
+        "ads_service": {
+          "status": 1
+        }
+      }
+    }
+  ],
+  "configuration_version": "1"
+}

+ 50 - 0
src/custom/java/com/owncloud/android/CustomApp.java

@@ -0,0 +1,50 @@
+/**
+ * Nextcloud Android client application
+ *
+ * @author Mario Danic
+ * Copyright (C) 2017 Mario Danic
+ * Copyright (C) 2017 Nextcloud GmbH
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.owncloud.android;
+
+import com.google.firebase.analytics.FirebaseAnalytics;
+
+/**
+ * Custom App class for custom builds
+ */
+
+public class CustomApp extends MainApp {
+
+    private FirebaseAnalytics firebaseAnalytics;
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+
+        firebaseAnalytics = FirebaseAnalytics.getInstance(this);
+    }
+
+    private FirebaseAnalytics getFirebaseAnalyticsInstance() {
+        /*
+        In order for Firebase Analytics to work, you also need to
+        put a proper google-services.json in src/custom folder
+
+        If that file is flawed, nothing will be sent to Firebase
+         */
+        return firebaseAnalytics;
+    }
+
+}

+ 6 - 5
res/layout/drawer.xml → src/custom/res/layout/drawer.xml

@@ -46,6 +46,12 @@
             android:paddingTop="@dimen/standard_half_padding"
             android:paddingTop="@dimen/standard_half_padding"
             android:visibility="gone">
             android:visibility="gone">
 
 
+            <TextView
+                android:id="@+id/drawer_quota_text"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/drawer_quota"/>
+
             <ProgressBar
             <ProgressBar
                 android:id="@+id/drawer_quota_ProgressBar"
                 android:id="@+id/drawer_quota_ProgressBar"
                 style="?android:attr/progressBarStyleHorizontal"
                 style="?android:attr/progressBarStyleHorizontal"
@@ -56,11 +62,6 @@
                 android:text="@string/drawer_quota"
                 android:text="@string/drawer_quota"
                 />
                 />
 
 
-            <TextView
-                android:id="@+id/drawer_quota_text"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:text="@string/drawer_quota"/>
         </LinearLayout>
         </LinearLayout>
 
 
     </android.support.design.widget.NavigationView>
     </android.support.design.widget.NavigationView>

+ 103 - 0
src/custom/res/values/setup.xml

@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <!-- Beta indicator -->
+    <bool name="is_beta">false</bool>
+
+    <!-- App name  and other strings-->
+    <string name="app_name">Nextcloud</string>
+    <string name="account_type">nextcloud</string>	<!-- better if was a domain name; but changing it now would require migrate accounts when the app is updated -->
+    <string name="authority">com.custom.client.provider</string>	<!-- better if was the app package with ".provider" appended ; it identifies the provider -->
+    <string name="users_and_groups_search_authority">com.custom.client.provider.UsersAndGroupsSearch</string>
+    <string name="document_provider_authority">com.custom.provider.Documents</string>
+    <string name="file_provider_authority">com.custom.provider.Files</string>
+    <string name ="db_file">nextcloud.db</string>
+    <string name ="db_name">nextcloud</string>
+    <string name ="data_folder">nextcloud</string>
+    <string name ="log_name">nextcloud</string>
+    <string name ="default_display_name_for_root_folder">Nextcloud</string>
+    <string name ="user_agent">Mozilla/5.0 (Android) ownCloud-android/%1$s</string>
+    
+    <!-- URLs and flags related -->
+    <string name="server_url"></string>
+    <bool name="show_server_url_input">true</bool>
+    <bool name="show_welcome_link">false</bool>
+	<string name="welcome_link_url">"https://nextcloud.com/providers"</string>
+	<string name="share_api_link"></string>
+    
+    <!-- Flags to setup the authentication methods available in the app -->
+    <string name="auth_method_oauth2">off</string>
+    <string name="auth_method_saml_web_sso">off</string>
+    
+    <!-- Flags to enable/disable some features -->
+    <string name = "send_files_to_other_apps">on</string>
+    <bool name = "share_via_link_feature">true</bool>
+    <bool name = "share_with_users_feature">true</bool>
+
+    <!-- Colors -->
+    <color name="login_text_color">@color/white</color>
+    <color name="login_text_hint_color">#7fC0E3</color>
+    <color name="login_background_color">#FFFFFF</color>
+    <color name="login_logo_background_color">#FFFFFF</color>
+    <color name="background_color">#FFFFFF</color>
+    <color name="actionbar_start_color">#0082c9</color>
+    <color name="actionbar_end_color">#0082c9</color>
+    <color name="primary_button_background_color">@color/owncloud_blue_accent</color>
+    <color name="primary_button_text_color">@color/white</color>
+    <color name="secondary_button_background_color">#D6D7D7</color>
+    <color name="secondary_button_text_color">@color/black</color>
+    <color name="drawer_header_color">@color/owncloud_blue_accent</color>
+
+    <!-- Button -->
+    <color name="button_text_color">#000000</color>
+
+    <!-- Multiselect backgrounds -->
+    <color name="action_mode_background">#757575</color>
+    <color name="action_mode_status_bar_background">#616161</color>
+    <color name="selected_item_background">#ECECEC</color>
+
+    <!-- Multiaccount support -->
+    <bool name="multiaccount_support">true</bool>
+
+    <!-- Drawer options -->
+    <bool name="recently_added_enabled">true</bool>
+    <bool name="recently_modified_enabled">true</bool>
+    <bool name="shared_enabled">true</bool>
+    <bool name="videos_enabled">true</bool>
+
+    <!-- Bottom toolbar -->
+    <bool name="bottom_toolbar_enabled">true</bool>
+
+    <!-- Help, imprint and feedback -->
+    <bool name="calendar_contacts_enabled">true</bool>
+    <bool name="help_enabled">true</bool>
+    <bool name="imprint_enabled">false</bool> 
+    <bool name="recommend_enabled">true</bool>
+    <bool name="feedback_enabled">true</bool>
+    <bool name="logger_enabled">false</bool>
+    <string name="url_help">https://help.nextcloud.com/c/feature</string>
+    <string name="url_imprint"></string>
+    <string name="mail_recommend">"mailto:"</string>
+    <string name="mail_feedback">"mailto:android@nextcloud.com"</string>
+    <string name="url_app_download">"https://play.google.com/store/apps/details?id=com.nextcloud.client"</string>
+    <string name="url_server_install">https://nextcloud.com/install</string>
+
+    <!--Destination mail for sending log files -->
+    <string name="mail_logger"></string>
+
+    <!-- Participate links -->
+    <string name="fdroid_beta_link" translatable="false">https://f-droid.org/repository/browse/?fdid=com.nextcloud.android.beta</string>
+    <string name="beta_apk_link" translatable="false">https://github.com/nextcloud/android/raw/beta/apks/latest.apk</string>
+    <string name="play_store_register_beta" translatable="false">https://play.google.com/apps/testing/com.nextcloud.client</string>
+    <string name="fdroid_link" translatable="false">https://f-droid.org/repository/browse/?fdid=com.nextcloud.client</string>
+    <string name="irc_weblink" translatable="false">http://webchat.freenode.net?channels=nextcloud-mobile</string>
+    <string name="help_link" translatable="false">https://help.nextcloud.com/c/clients/android</string>
+    <string name="translation_link" translatable="false">https://www.transifex.com/nextcloud/nextcloud/android/</string>
+    <string name="contributing_link" translatable="false">https://github.com/nextcloud/android/blob/master/CONTRIBUTING.md</string>
+    <string name="report_issue_link" translatable="false">https://github.com/nextcloud/android/issues</string>
+
+    <!-- login data links -->
+    <string name="login_data_own_scheme" translatable="false">cloud</string>
+
+</resources>
+
+

+ 35 - 0
src/generic/google-services.json

@@ -0,0 +1,35 @@
+{
+  "project_info": {
+    "project_number": "",
+    "project_id": ""
+  },
+  "client": [
+    {
+      "client_info": {
+        "mobilesdk_app_id": "",
+        "android_client_info": {
+          "package_name": "com.nextcloud.client"
+        }
+      },
+      "oauth_client": [],
+      "api_key": [
+        {
+          "current_key": ""
+        }
+      ],
+      "services": {
+        "analytics_service": {
+          "status": 1
+        },
+        "appinvite_service": {
+          "status": 1,
+          "other_platform_oauth_client": []
+        },
+        "ads_service": {
+          "status": 1
+        }
+      }
+    }
+  ],
+  "configuration_version": "1"
+}

+ 1 - 1
AndroidManifest.xml → src/main/AndroidManifest.xml

@@ -140,7 +140,7 @@
 
 
         <provider
         <provider
             android:name=".providers.UsersAndGroupsSearchProvider"
             android:name=".providers.UsersAndGroupsSearchProvider"
-            android:authorities="com.nextcloud.android.providers.UsersAndGroupsSearchProvider"
+            android:authorities="@string/users_and_groups_search_authority"
             android:enabled="true"
             android:enabled="true"
             android:exported="false"
             android:exported="false"
             android:label="@string/search_users_and_groups_hint" />
             android:label="@string/search_users_and_groups_hint" />

+ 0 - 0
src/com/afollestad/sectionedrecyclerview/SectionedRecyclerViewAdapter.java → src/main/java/com/afollestad/sectionedrecyclerview/SectionedRecyclerViewAdapter.java


+ 0 - 2
src/com/owncloud/android/MainApp.java → src/main/java/com/owncloud/android/MainApp.java

@@ -52,8 +52,6 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
 
 
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-
 
 
 /**
 /**
  * Main Application of the project
  * Main Application of the project

+ 0 - 0
src/com/owncloud/android/authentication/AccountAuthenticator.java → src/main/java/com/owncloud/android/authentication/AccountAuthenticator.java


+ 0 - 0
src/com/owncloud/android/authentication/AccountAuthenticatorActivity.java → src/main/java/com/owncloud/android/authentication/AccountAuthenticatorActivity.java


+ 0 - 0
src/com/owncloud/android/authentication/AccountAuthenticatorService.java → src/main/java/com/owncloud/android/authentication/AccountAuthenticatorService.java


+ 0 - 0
src/com/owncloud/android/authentication/AccountUtils.java → src/main/java/com/owncloud/android/authentication/AccountUtils.java


+ 0 - 0
src/com/owncloud/android/authentication/AuthenticatorActivity.java → src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java


+ 0 - 0
src/com/owncloud/android/authentication/AuthenticatorAsyncTask.java → src/main/java/com/owncloud/android/authentication/AuthenticatorAsyncTask.java


+ 0 - 0
src/com/owncloud/android/authentication/LoginUrlInfo.java → src/main/java/com/owncloud/android/authentication/LoginUrlInfo.java


+ 0 - 0
src/com/owncloud/android/authentication/OAuth2Constants.java → src/main/java/com/owncloud/android/authentication/OAuth2Constants.java


+ 0 - 0
src/com/owncloud/android/authentication/PassCodeManager.java → src/main/java/com/owncloud/android/authentication/PassCodeManager.java


+ 0 - 0
src/com/owncloud/android/authentication/SsoWebViewClient.java → src/main/java/com/owncloud/android/authentication/SsoWebViewClient.java


+ 0 - 0
src/com/owncloud/android/datamodel/FileDataStorageManager.java → src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java


+ 0 - 0
src/com/owncloud/android/datamodel/MediaFolder.java → src/main/java/com/owncloud/android/datamodel/MediaFolder.java


+ 0 - 0
src/com/owncloud/android/datamodel/MediaProvider.java → src/main/java/com/owncloud/android/datamodel/MediaProvider.java


+ 0 - 0
src/com/owncloud/android/datamodel/OCFile.java → src/main/java/com/owncloud/android/datamodel/OCFile.java


+ 0 - 0
src/com/owncloud/android/datamodel/SyncedFolder.java → src/main/java/com/owncloud/android/datamodel/SyncedFolder.java


+ 0 - 0
src/com/owncloud/android/datamodel/SyncedFolderDisplayItem.java → src/main/java/com/owncloud/android/datamodel/SyncedFolderDisplayItem.java


+ 0 - 0
src/com/owncloud/android/datamodel/SyncedFolderProvider.java → src/main/java/com/owncloud/android/datamodel/SyncedFolderProvider.java


+ 0 - 0
src/com/owncloud/android/datamodel/ThumbnailsCacheManager.java → src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java


+ 0 - 0
src/com/owncloud/android/datamodel/UploadsStorageManager.java → src/main/java/com/owncloud/android/datamodel/UploadsStorageManager.java


+ 0 - 0
src/com/owncloud/android/datastorage/DataStorageProvider.java → src/main/java/com/owncloud/android/datastorage/DataStorageProvider.java


+ 0 - 0
src/com/owncloud/android/datastorage/StoragePoint.java → src/main/java/com/owncloud/android/datastorage/StoragePoint.java


+ 0 - 0
src/com/owncloud/android/datastorage/UniqueStorageList.java → src/main/java/com/owncloud/android/datastorage/UniqueStorageList.java


+ 0 - 0
src/com/owncloud/android/datastorage/providers/AbstractCommandLineStoragePoint.java → src/main/java/com/owncloud/android/datastorage/providers/AbstractCommandLineStoragePoint.java


+ 0 - 0
src/com/owncloud/android/datastorage/providers/AbstractStoragePointProvider.java → src/main/java/com/owncloud/android/datastorage/providers/AbstractStoragePointProvider.java


+ 0 - 0
src/com/owncloud/android/datastorage/providers/EnvironmentStoragePointProvider.java → src/main/java/com/owncloud/android/datastorage/providers/EnvironmentStoragePointProvider.java


+ 0 - 0
src/com/owncloud/android/datastorage/providers/HardcodedStoragePointProvider.java → src/main/java/com/owncloud/android/datastorage/providers/HardcodedStoragePointProvider.java


+ 0 - 0
src/com/owncloud/android/datastorage/providers/IStoragePointProvider.java → src/main/java/com/owncloud/android/datastorage/providers/IStoragePointProvider.java


+ 0 - 0
src/com/owncloud/android/datastorage/providers/MountCommandStoragePointProvider.java → src/main/java/com/owncloud/android/datastorage/providers/MountCommandStoragePointProvider.java


+ 0 - 0
src/com/owncloud/android/datastorage/providers/SystemDefaultStoragePointProvider.java → src/main/java/com/owncloud/android/datastorage/providers/SystemDefaultStoragePointProvider.java


+ 0 - 0
src/com/owncloud/android/datastorage/providers/VDCStoragePointProvider.java → src/main/java/com/owncloud/android/datastorage/providers/VDCStoragePointProvider.java


+ 0 - 0
src/com/owncloud/android/db/OCUpload.java → src/main/java/com/owncloud/android/db/OCUpload.java


+ 0 - 0
src/com/owncloud/android/db/PreferenceManager.java → src/main/java/com/owncloud/android/db/PreferenceManager.java


+ 0 - 0
src/com/owncloud/android/db/ProviderMeta.java → src/main/java/com/owncloud/android/db/ProviderMeta.java


+ 0 - 0
src/com/owncloud/android/db/UploadResult.java → src/main/java/com/owncloud/android/db/UploadResult.java


+ 0 - 0
src/com/owncloud/android/features/FeatureList.java → src/main/java/com/owncloud/android/features/FeatureList.java


+ 0 - 0
src/com/owncloud/android/files/BootupBroadcastReceiver.java → src/main/java/com/owncloud/android/files/BootupBroadcastReceiver.java


+ 0 - 0
src/com/owncloud/android/files/FileMenuFilter.java → src/main/java/com/owncloud/android/files/FileMenuFilter.java


+ 0 - 0
src/com/owncloud/android/files/InstantUploadBroadcastReceiver.java → src/main/java/com/owncloud/android/files/InstantUploadBroadcastReceiver.java


+ 0 - 0
src/com/owncloud/android/files/services/ConnectivityActionReceiver.java → src/main/java/com/owncloud/android/files/services/ConnectivityActionReceiver.java


+ 0 - 0
src/com/owncloud/android/files/services/FileDownloader.java → src/main/java/com/owncloud/android/files/services/FileDownloader.java


+ 0 - 0
src/com/owncloud/android/files/services/FileUploader.java → src/main/java/com/owncloud/android/files/services/FileUploader.java


+ 0 - 0
src/com/owncloud/android/files/services/IndexedForest.java → src/main/java/com/owncloud/android/files/services/IndexedForest.java


+ 0 - 0
src/com/owncloud/android/media/MediaControlView.java → src/main/java/com/owncloud/android/media/MediaControlView.java


+ 0 - 0
src/com/owncloud/android/media/MediaService.java → src/main/java/com/owncloud/android/media/MediaService.java


+ 0 - 0
src/com/owncloud/android/media/MediaServiceBinder.java → src/main/java/com/owncloud/android/media/MediaServiceBinder.java


+ 0 - 0
src/com/owncloud/android/operations/CheckCurrentCredentialsOperation.java → src/main/java/com/owncloud/android/operations/CheckCurrentCredentialsOperation.java


+ 0 - 0
src/com/owncloud/android/operations/CopyFileOperation.java → src/main/java/com/owncloud/android/operations/CopyFileOperation.java


+ 0 - 0
src/com/owncloud/android/operations/CreateFolderOperation.java → src/main/java/com/owncloud/android/operations/CreateFolderOperation.java


+ 0 - 0
src/com/owncloud/android/operations/CreateShareViaLinkOperation.java → src/main/java/com/owncloud/android/operations/CreateShareViaLinkOperation.java


+ 0 - 0
src/com/owncloud/android/operations/CreateShareWithShareeOperation.java → src/main/java/com/owncloud/android/operations/CreateShareWithShareeOperation.java


+ 0 - 0
src/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java → src/main/java/com/owncloud/android/operations/DetectAuthenticationMethodOperation.java


+ 0 - 0
src/com/owncloud/android/operations/DownloadFileOperation.java → src/main/java/com/owncloud/android/operations/DownloadFileOperation.java


+ 0 - 0
src/com/owncloud/android/operations/GetCapabilitiesOperarion.java → src/main/java/com/owncloud/android/operations/GetCapabilitiesOperarion.java


+ 0 - 0
src/com/owncloud/android/operations/GetServerInfoOperation.java → src/main/java/com/owncloud/android/operations/GetServerInfoOperation.java


+ 0 - 0
src/com/owncloud/android/operations/GetSharesForFileOperation.java → src/main/java/com/owncloud/android/operations/GetSharesForFileOperation.java


+ 0 - 0
src/com/owncloud/android/operations/GetUserProfileOperation.java → src/main/java/com/owncloud/android/operations/GetUserProfileOperation.java


+ 0 - 0
src/com/owncloud/android/operations/MoveFileOperation.java → src/main/java/com/owncloud/android/operations/MoveFileOperation.java


+ 0 - 0
src/com/owncloud/android/operations/OAuth2GetAccessToken.java → src/main/java/com/owncloud/android/operations/OAuth2GetAccessToken.java


+ 0 - 0
src/com/owncloud/android/operations/RefreshFolderOperation.java → src/main/java/com/owncloud/android/operations/RefreshFolderOperation.java


+ 0 - 0
src/com/owncloud/android/operations/RemoveFileOperation.java → src/main/java/com/owncloud/android/operations/RemoveFileOperation.java


+ 0 - 0
src/com/owncloud/android/operations/RenameFileOperation.java → src/main/java/com/owncloud/android/operations/RenameFileOperation.java


+ 0 - 0
src/com/owncloud/android/operations/SynchronizeFileOperation.java → src/main/java/com/owncloud/android/operations/SynchronizeFileOperation.java


+ 0 - 0
src/com/owncloud/android/operations/SynchronizeFolderOperation.java → src/main/java/com/owncloud/android/operations/SynchronizeFolderOperation.java


+ 0 - 0
src/com/owncloud/android/operations/UnshareOperation.java → src/main/java/com/owncloud/android/operations/UnshareOperation.java


+ 0 - 0
src/com/owncloud/android/operations/UpdateOCVersionOperation.java → src/main/java/com/owncloud/android/operations/UpdateOCVersionOperation.java


+ 0 - 0
src/com/owncloud/android/operations/UpdateSharePermissionsOperation.java → src/main/java/com/owncloud/android/operations/UpdateSharePermissionsOperation.java


+ 0 - 0
src/com/owncloud/android/operations/UpdateShareViaLinkOperation.java → src/main/java/com/owncloud/android/operations/UpdateShareViaLinkOperation.java


+ 0 - 0
src/com/owncloud/android/operations/UploadFileOperation.java → src/main/java/com/owncloud/android/operations/UploadFileOperation.java


+ 0 - 0
src/com/owncloud/android/operations/common/SyncOperation.java → src/main/java/com/owncloud/android/operations/common/SyncOperation.java


+ 0 - 0
src/com/owncloud/android/providers/FileContentProvider.java → src/main/java/com/owncloud/android/providers/FileContentProvider.java


+ 2 - 1
src/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java → src/main/java/com/owncloud/android/providers/UsersAndGroupsSearchProvider.java

@@ -72,7 +72,7 @@ public class UsersAndGroupsSearchProvider extends ContentProvider {
     private static final int RESULTS_PER_PAGE = 50;
     private static final int RESULTS_PER_PAGE = 50;
     private static final int REQUESTED_PAGE = 1;
     private static final int REQUESTED_PAGE = 1;
 
 
-    public static final String AUTHORITY = "com.nextcloud.android.providers.UsersAndGroupsSearchProvider";
+    public static String AUTHORITY;
     public static final String ACTION_SHARE_WITH = AUTHORITY + ".action.SHARE_WITH";
     public static final String ACTION_SHARE_WITH = AUTHORITY + ".action.SHARE_WITH";
 
 
     public static final String CONTENT = "content";
     public static final String CONTENT = "content";
@@ -106,6 +106,7 @@ public class UsersAndGroupsSearchProvider extends ContentProvider {
 
 
     @Override
     @Override
     public boolean onCreate() {
     public boolean onCreate() {
+        AUTHORITY = getContext().getResources().getString(R.string.users_and_groups_search_authority);
         mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
         mUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
         mUriMatcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH);
         mUriMatcher.addURI(AUTHORITY, SearchManager.SUGGEST_URI_PATH_QUERY + "/*", SEARCH);
         return true;
         return true;

+ 0 - 0
src/com/owncloud/android/services/AdvancedFileAlterationListener.java → src/main/java/com/owncloud/android/services/AdvancedFileAlterationListener.java


+ 0 - 0
src/com/owncloud/android/services/AutoUploadJob.java → src/main/java/com/owncloud/android/services/AutoUploadJob.java


+ 0 - 0
src/com/owncloud/android/services/NCJobCreator.java → src/main/java/com/owncloud/android/services/NCJobCreator.java


+ 0 - 0
src/com/owncloud/android/services/OperationsService.java → src/main/java/com/owncloud/android/services/OperationsService.java


+ 0 - 0
src/com/owncloud/android/services/ShutdownReceiver.java → src/main/java/com/owncloud/android/services/ShutdownReceiver.java


+ 0 - 0
src/com/owncloud/android/services/SyncFolderHandler.java → src/main/java/com/owncloud/android/services/SyncFolderHandler.java


+ 93 - 0
src/main/java/com/owncloud/android/services/SyncedFolderJobService.java

@@ -0,0 +1,93 @@
+/**
+ *   Nextcloud Android client application
+ *
+ *   @author Tobias Kaminsky
+ *   Copyright (C) 2016 Tobias Kaminsky
+ *   Copyright (C) 2016 Nextcloud
+ *
+ *   This program is free software; you can redistribute it and/or
+ *   modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ *   License as published by the Free Software Foundation; either
+ *   version 3 of the License, or any later version.
+ *
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ *   You should have received a copy of the GNU Affero General Public
+ *   License along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.owncloud.android.services;
+
+import android.accounts.Account;
+import android.annotation.TargetApi;
+import android.app.job.JobParameters;
+import android.app.job.JobService;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Build;
+import android.os.PersistableBundle;
+
+import com.owncloud.android.MainApp;
+import com.owncloud.android.authentication.AccountUtils;
+import com.owncloud.android.files.services.FileUploader;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.operations.UploadFileOperation;
+import com.owncloud.android.utils.FileStorageUtils;
+import com.owncloud.android.utils.MimeTypeUtil;
+
+import java.io.File;
+
+@TargetApi(Build.VERSION_CODES.LOLLIPOP)
+public class SyncedFolderJobService extends JobService {
+    private static final String TAG = "SyncedFolderJobService";
+
+    public static final String LOCAL_PATH = "filePath";
+    public static final String REMOTE_PATH = "remotePath";
+    public static final String ACCOUNT = "account";
+    public static final String UPLOAD_BEHAVIOUR = "uploadBehaviour";
+
+    @Override
+    public int onStartCommand(Intent intent, int flags, int startId) {
+        return START_REDELIVER_INTENT;
+    }
+
+    @Override
+    public boolean onStartJob(JobParameters params) {
+        Context context = MainApp.getAppContext();
+        PersistableBundle bundle = params.getExtras();
+        String filePath = bundle.getString(LOCAL_PATH);
+        String remotePath = bundle.getString(REMOTE_PATH);
+        Account account = AccountUtils.getOwnCloudAccountByName(context, bundle.getString(ACCOUNT));
+        Integer uploadBehaviour = bundle.getInt(UPLOAD_BEHAVIOUR);
+
+        Log_OC.d(TAG, "startJob: " + params.getJobId() + ", filePath: " + filePath);
+
+        File file = new File(filePath);
+
+        // File can be deleted between job generation and job execution. If file does not exist, just ignore it
+        if (file.exists()) {
+            String mimeType = MimeTypeUtil.getBestMimeTypeByFilename(file.getAbsolutePath());
+
+            FileUploader.UploadRequester requester = new FileUploader.UploadRequester();
+            requester.uploadNewFile(
+                    context,
+                    account,
+                    filePath,
+                    remotePath,
+                    uploadBehaviour,
+                    mimeType,
+                    true,           // create parent folder if not existent
+                    UploadFileOperation.CREATED_AS_INSTANT_PICTURE
+            );
+        }
+        return false;
+    }
+
+    @Override
+    public boolean onStopJob(JobParameters params) {
+        return false;
+    }
+}

+ 0 - 0
src/com/owncloud/android/services/observer/AdvancedFileAlterationObserver.java → src/main/java/com/owncloud/android/services/observer/AdvancedFileAlterationObserver.java


+ 0 - 0
src/com/owncloud/android/services/observer/FileObserverService.java → src/main/java/com/owncloud/android/services/observer/FileObserverService.java


+ 0 - 0
src/com/owncloud/android/services/observer/FolderObserver.java → src/main/java/com/owncloud/android/services/observer/FolderObserver.java


+ 78 - 0
src/main/java/com/owncloud/android/services/observer/SyncedFolderObserver.java

@@ -0,0 +1,78 @@
+package com.owncloud.android.services.observer;
+
+import android.annotation.TargetApi;
+import android.app.job.JobInfo;
+import android.app.job.JobScheduler;
+import android.content.ComponentName;
+import android.content.Context;
+import android.os.Build;
+import android.os.FileObserver;
+import android.os.PersistableBundle;
+import android.util.Log;
+
+import com.owncloud.android.MainApp;
+import com.owncloud.android.datamodel.SyncedFolder;
+import com.owncloud.android.lib.common.utils.Log_OC;
+import com.owncloud.android.services.SyncedFolderJobService;
+import com.owncloud.android.utils.FileStorageUtils;
+import com.owncloud.android.utils.RecursiveFileObserver;
+
+import java.io.File;
+import java.util.Date;
+
+class SyncedFolderObserver extends RecursiveFileObserver {
+
+    private Context context;
+
+    public static final String TAG = "SyncedFolderObserver";
+    private SyncedFolder syncedFolder;
+
+
+    public SyncedFolderObserver(SyncedFolder syncedFolder) {
+        super(syncedFolder.getLocalPath(), FileObserver.CREATE + FileObserver.MOVED_TO);
+
+        context = MainApp.getAppContext();
+        this.syncedFolder = syncedFolder;
+        Log_OC.d("SyncedFolderObserver", "Started watching: " + syncedFolder.getLocalPath());
+    }
+
+
+    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
+    @Override
+    public void onEvent(int event, String path) {
+        Log.d(TAG, "Event: " + event + " Path: " + path);
+
+        File temp = new File(path);
+
+        // do not upload "null"-files, test if file exists and is a real file
+        if (!temp.getName().equalsIgnoreCase("null") && temp.isFile() && !temp.getName().endsWith(".tmp")) {
+            PersistableBundle bundle = new PersistableBundle();
+            // TODO extract
+            bundle.putString(SyncedFolderJobService.LOCAL_PATH, path);
+            bundle.putString(SyncedFolderJobService.REMOTE_PATH, FileStorageUtils.getInstantUploadFilePath(
+                                                                 syncedFolder.getRemotePath(), temp.getName(),
+                                                                 new Date().getTime(),
+                                                                 syncedFolder.getSubfolderByDate()));
+            bundle.putString(SyncedFolderJobService.ACCOUNT, syncedFolder.getAccount());
+            bundle.putInt(SyncedFolderJobService.UPLOAD_BEHAVIOUR, syncedFolder.getUploadAction());
+
+            JobScheduler js = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
+
+            Long date = new Date().getTime();
+            JobInfo job = new JobInfo.Builder(
+                    date.intValue(),
+                    new ComponentName(context, SyncedFolderJobService.class))
+                    .setRequiresCharging(syncedFolder.getChargingOnly())
+                    .setMinimumLatency(10000)
+                    .setRequiredNetworkType(syncedFolder.getWifiOnly() ? JobInfo.NETWORK_TYPE_UNMETERED : JobInfo.NETWORK_TYPE_ANY)
+                    .setExtras(bundle)
+                    .setPersisted(true)
+                    .build();
+
+            Integer result = js.schedule(job);
+            if (result <= 0) {
+                Log_OC.d(TAG, "Job failed to start: " + result);
+            }
+        }
+    }
+}

+ 0 - 0
src/com/owncloud/android/services/observer/SyncedFolderObserverService.java → src/main/java/com/owncloud/android/services/observer/SyncedFolderObserverService.java


+ 0 - 0
src/com/owncloud/android/syncadapter/AbstractOwnCloudSyncAdapter.java → src/main/java/com/owncloud/android/syncadapter/AbstractOwnCloudSyncAdapter.java


+ 0 - 0
src/com/owncloud/android/syncadapter/FileSyncAdapter.java → src/main/java/com/owncloud/android/syncadapter/FileSyncAdapter.java


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно