Explorar o código

Merge branch 'master' into feature/ui-revamp/manage-accounts-activity

Kilian Périsset %!s(int64=5) %!d(string=hai) anos
pai
achega
ac35fb0b56
Modificáronse 100 ficheiros con 1625 adicións e 785 borrados
  1. 6 3
      build.gradle
  2. BIN=BIN
      screenshots/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png
  3. 1 1
      scripts/analysis/findbugs-results.txt
  4. 1 1
      scripts/analysis/lint-results.txt
  5. 4 1
      src/androidTest/java/com/nextcloud/client/RetryTestRule.kt
  6. 29 10
      src/androidTest/java/com/owncloud/android/UploadIT.java
  7. 7 14
      src/androidTest/java/com/owncloud/android/files/services/FileUploaderIT.kt
  8. 7 9
      src/androidTest/java/com/owncloud/android/ui/fragment/OCFileListFragmentIT.kt
  9. 1 0
      src/generic/fastlane/metadata/android/ar-AR/short_description.txt
  10. 1 0
      src/generic/fastlane/metadata/android/ar-AR/title.txt
  11. 43 0
      src/main/java/com/nextcloud/client/device/BatteryStatus.kt
  12. 2 2
      src/main/java/com/nextcloud/client/device/DeviceModule.kt
  13. 3 3
      src/main/java/com/nextcloud/client/device/PowerManagementService.kt
  14. 21 12
      src/main/java/com/nextcloud/client/device/PowerManagementServiceImpl.kt
  15. 2 0
      src/main/java/com/nextcloud/client/di/ComponentsModule.java
  16. 1 0
      src/main/java/com/nextcloud/client/jobs/AccountRemovalWork.kt
  17. 1 0
      src/main/java/com/nextcloud/client/jobs/BackgroundJobFactory.kt
  18. 1 0
      src/main/java/com/nextcloud/client/jobs/ContactsImportWork.kt
  19. 2 0
      src/main/java/com/nextcloud/client/jobs/NotificationWork.kt
  20. 40 0
      src/main/java/com/nextcloud/client/network/Connectivity.kt
  21. 20 5
      src/main/java/com/nextcloud/client/network/ConnectivityService.java
  22. 23 51
      src/main/java/com/nextcloud/client/network/ConnectivityServiceImpl.java
  23. 1 1
      src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java
  24. 22 2
      src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java
  25. 13 11
      src/main/java/com/owncloud/android/files/services/FileUploader.java
  26. 15 15
      src/main/java/com/owncloud/android/operations/UploadFileOperation.java
  27. 1 1
      src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java
  28. 9 5
      src/main/java/com/owncloud/android/ui/activity/FileActivity.java
  29. 5 10
      src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java
  30. 4 8
      src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.java
  31. 2 2
      src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.java
  32. 4 10
      src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java
  33. 1 4
      src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java
  34. 0 1
      src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.java
  35. 4 9
      src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java
  36. 2 56
      src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java
  37. 83 3
      src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java
  38. 2 3
      src/main/java/com/owncloud/android/ui/adapter/UserListAdapter.java
  39. 88 0
      src/main/java/com/owncloud/android/ui/dialog/AccountRemovalConfirmationDialog.java
  40. 6 0
      src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java
  41. 2 2
      src/main/java/com/owncloud/android/ui/fragment/FileDetailActivitiesFragment.java
  42. 74 8
      src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java
  43. 2 4
      src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java
  44. 5 8
      src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.java
  45. 12 0
      src/main/java/com/owncloud/android/utils/DisplayUtils.java
  46. 13 7
      src/main/java/com/owncloud/android/utils/FileSortOrder.java
  47. 2 4
      src/main/java/com/owncloud/android/utils/FilesSyncHelper.java
  48. 2 4
      src/main/java/com/owncloud/android/utils/ReceiversHelper.java
  49. 19 17
      src/main/res/drawable/account_circle_white.xml
  50. 19 17
      src/main/res/drawable/all_files.xml
  51. 7 10
      src/main/res/drawable/arrow_right.xml
  52. 24 12
      src/main/res/drawable/favorite.xml
  53. 24 3
      src/main/res/drawable/file_application.xml
  54. 24 3
      src/main/res/drawable/file_calendar.xml
  55. 24 8
      src/main/res/drawable/file_code.xml
  56. 20 0
      src/main/res/drawable/file_doc.xml
  57. 4 3
      src/main/res/drawable/file_image.xml
  58. 24 3
      src/main/res/drawable/file_movie.xml
  59. 24 5
      src/main/res/drawable/folder.xml
  60. 22 15
      src/main/res/drawable/ic_account_plus.xml
  61. 1 1
      src/main/res/drawable/ic_activity.xml
  62. 0 6
      src/main/res/drawable/ic_activity_light_grey.xml
  63. 24 10
      src/main/res/drawable/ic_delete.xml
  64. 19 13
      src/main/res/drawable/ic_dots_vertical.xml
  65. 9 0
      src/main/res/drawable/ic_keyboard_arrow_down.xml
  66. 23 5
      src/main/res/drawable/ic_list_empty_folder.xml
  67. 23 3
      src/main/res/drawable/ic_list_empty_image.xml
  68. 23 4
      src/main/res/drawable/ic_list_empty_recent.xml
  69. 23 5
      src/main/res/drawable/ic_list_empty_shared.xml
  70. 23 3
      src/main/res/drawable/ic_list_empty_video.xml
  71. 4 22
      src/main/res/drawable/ic_notification.xml
  72. 0 5
      src/main/res/drawable/ic_notification_light_grey.xml
  73. 19 17
      src/main/res/drawable/ic_ok.xml
  74. 22 2
      src/main/res/drawable/ic_people.xml
  75. 19 19
      src/main/res/drawable/ic_send.xml
  76. 24 7
      src/main/res/drawable/ic_settings.xml
  77. 24 3
      src/main/res/drawable/ic_share.xml
  78. 24 8
      src/main/res/drawable/ic_show.xml
  79. 28 5
      src/main/res/drawable/ic_unshared.xml
  80. 24 10
      src/main/res/drawable/ic_user.xml
  81. 0 23
      src/main/res/drawable/ic_view.xml
  82. 19 17
      src/main/res/drawable/ic_warning.xml
  83. 24 7
      src/main/res/drawable/image_32dp.xml
  84. 19 17
      src/main/res/drawable/nav_contacts.xml
  85. 19 19
      src/main/res/drawable/nav_favorites.xml
  86. 19 17
      src/main/res/drawable/nav_logout.xml
  87. 24 3
      src/main/res/drawable/nav_notifications.xml
  88. 24 3
      src/main/res/drawable/nav_photos.xml
  89. 24 4
      src/main/res/drawable/nav_recently.xml
  90. 19 17
      src/main/res/drawable/nav_settings.xml
  91. 24 11
      src/main/res/drawable/nav_shared.xml
  92. 19 17
      src/main/res/drawable/nav_synced_folders.xml
  93. 24 10
      src/main/res/drawable/nav_trashbin.xml
  94. 24 3
      src/main/res/drawable/nav_videos.xml
  95. 19 17
      src/main/res/drawable/no_network.xml
  96. 24 26
      src/main/res/layout/files.xml
  97. 24 6
      src/main/res/layout/grid_image.xml
  98. 20 7
      src/main/res/layout/grid_item.xml
  99. 9 10
      src/main/res/layout/grid_sync_item.xml
  100. 66 17
      src/main/res/layout/list_fragment.xml

+ 6 - 3
build.gradle

@@ -119,7 +119,8 @@ android {
             'IconMissingDensityFolder',
             'IconDensities',
             'GoogleAppIndexingWarning',
-            'MissingDefaultResource'
+            'MissingDefaultResource',
+            'InvalidPeriodicWorkRequestInterval' // crashes due to a bug in lint itself
     }
 
     dexOptions {
@@ -305,7 +306,6 @@ dependencies {
     implementation 'com.github.albfernandez:juniversalchardet:2.0.3' // need this version for Android <7
     compileOnly 'com.google.code.findbugs:annotations:2.0.1'
     implementation 'commons-io:commons-io:2.6'
-    implementation 'com.github.tobiaskaminsky:android-job:v1.2.6.1' // 'com.github.evernote:android-job:v1.2.5'
     implementation 'com.jakewharton:butterknife:10.2.1'
     kapt 'com.jakewharton:butterknife-compiler:10.2.1'
     implementation 'org.greenrobot:eventbus:3.2.0'
@@ -315,7 +315,7 @@ dependencies {
     implementation 'com.google.code.gson:gson:2.8.6'
     implementation 'com.afollestad:sectioned-recyclerview:0.5.0'
     implementation 'com.github.chrisbanes:PhotoView:2.3.0'
-    implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.19'
+    implementation 'pl.droidsonroids.gif:android-gif-drawable:1.2.20'
     implementation 'com.github.tobiaskaminsky:qrcodescanner:0.1.2.2' // 'com.github.blikoon:QRCodeScanner:0.1.2'
     implementation 'com.google.android:flexbox:2.0.1'
     implementation 'org.parceler:parceler-api:1.1.13'
@@ -341,6 +341,9 @@ dependencies {
     ktlint "com.pinterest:ktlint:0.36.0"
     implementation 'org.conscrypt:conscrypt-android:2.4.0'
 
+    // Shimmer animation
+    implementation 'com.elyeproj.libraries:loaderviewlibrary:2.0.0'
+
     // dependencies for markdown rendering
     implementation "io.noties.markwon:core:$markwonVersion"
     implementation "io.noties.markwon:ext-strikethrough:$markwonVersion"

BIN=BIN
screenshots/com.owncloud.android.ui.preview.PreviewTextFileFragmentTest_displaySimpleTextFile.png


+ 1 - 1
scripts/analysis/findbugs-results.txt

@@ -1 +1 @@
-374
+373

+ 1 - 1
scripts/analysis/lint-results.txt

@@ -1,2 +1,2 @@
 DO NOT TOUCH; GENERATED BY DRONE
-      <span class="mdl-layout-title">Lint Report: 1 error and 94 warnings</span>
+      <span class="mdl-layout-title">Lint Report: 94 warnings</span>

+ 4 - 1
src/androidTest/java/com/nextcloud/client/RetryTestRule.kt

@@ -32,12 +32,15 @@ import org.junit.runners.model.Statement
  */
 class RetryTestRule(val retryCount: Int = 5) : TestRule {
 
-    private val TAG = RetryTestRule::class.java.simpleName
+    companion object {
+        private val TAG = RetryTestRule::class.java.simpleName
+    }
 
     override fun apply(base: Statement, description: Description): Statement {
         return statement(base, description)
     }
 
+    @Suppress("TooGenericExceptionCaught") // and this exactly what we want here
     private fun statement(base: Statement, description: Description): Statement {
         return object : Statement() {
 

+ 29 - 10
src/androidTest/java/com/owncloud/android/UploadIT.java

@@ -1,11 +1,33 @@
+/*
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2020 Tobias Kaminsky
+ * Copyright (C) 2020 Nextcloud GmbH
+ * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
+ *
+ * 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 android.content.ContentResolver;
 
-import com.evernote.android.job.JobRequest;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.account.UserAccountManagerImpl;
+import com.nextcloud.client.device.BatteryStatus;
 import com.nextcloud.client.device.PowerManagementService;
+import com.nextcloud.client.network.Connectivity;
 import com.nextcloud.client.network.ConnectivityService;
 import com.owncloud.android.datamodel.UploadsStorageManager;
 import com.owncloud.android.db.OCUpload;
@@ -15,6 +37,7 @@ import com.owncloud.android.operations.RemoveFileOperation;
 import com.owncloud.android.operations.UploadFileOperation;
 import com.owncloud.android.utils.FileStorageUtils;
 
+import org.jetbrains.annotations.NotNull;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -39,13 +62,8 @@ public class UploadIT extends AbstractIT {
         }
 
         @Override
-        public boolean isOnlineWithWifi() {
-            return true;
-        }
-
-        @Override
-        public JobRequest.NetworkType getActiveNetworkType() {
-            return JobRequest.NetworkType.ANY;
+        public Connectivity getConnectivity() {
+            return Connectivity.CONNECTED_WIFI;
         }
     };
 
@@ -60,9 +78,10 @@ public class UploadIT extends AbstractIT {
             return false;
         }
 
+        @NotNull
         @Override
-        public boolean isBatteryCharging() {
-            return false;
+        public BatteryStatus getBattery() {
+            return new BatteryStatus(false, 0);
         }
     };
 

+ 7 - 14
src/androidTest/java/com/owncloud/android/files/services/FileUploaderIT.kt

@@ -5,6 +5,7 @@
  * @author Tobias Kaminsky
  * Copyright (C) 2020 Tobias Kaminsky
  * Copyright (C) 2020 Nextcloud GmbH
+ * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
  *
  * 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
@@ -21,10 +22,11 @@
  */
 package com.owncloud.android.files.services
 
-import com.evernote.android.job.JobRequest
 import com.nextcloud.client.account.UserAccountManager
 import com.nextcloud.client.account.UserAccountManagerImpl
+import com.nextcloud.client.device.BatteryStatus
 import com.nextcloud.client.device.PowerManagementService
+import com.nextcloud.client.network.Connectivity
 import com.nextcloud.client.network.ConnectivityService
 import com.owncloud.android.AbstractIT
 import com.owncloud.android.datamodel.OCFile
@@ -45,17 +47,8 @@ class FileUploaderIT : AbstractIT() {
     var uploadsStorageManager: UploadsStorageManager? = null
 
     val connectivityServiceMock: ConnectivityService = object : ConnectivityService {
-        override fun isInternetWalled(): Boolean {
-            return false
-        }
-
-        override fun isOnlineWithWifi(): Boolean {
-            return true
-        }
-
-        override fun getActiveNetworkType(): JobRequest.NetworkType {
-            return JobRequest.NetworkType.ANY
-        }
+        override fun isInternetWalled(): Boolean = false
+        override fun getConnectivity(): Connectivity = Connectivity.CONNECTED_WIFI
     }
 
     private val powerManagementServiceMock: PowerManagementService = object : PowerManagementService {
@@ -65,8 +58,8 @@ class FileUploaderIT : AbstractIT() {
         override val isPowerSavingExclusionAvailable: Boolean
             get() = false
 
-        override val isBatteryCharging: Boolean
-            get() = false
+        override val battery: BatteryStatus
+            get() = BatteryStatus()
     }
 
     @Before

+ 7 - 9
src/androidTest/java/com/owncloud/android/ui/fragment/OCFileListFragmentIT.kt

@@ -5,6 +5,7 @@
  * @author Tobias Kaminsky
  * Copyright (C) 2020 Tobias Kaminsky
  * Copyright (C) 2020 Nextcloud GmbH
+ * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
  *
  * 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
@@ -26,10 +27,11 @@ import androidx.test.core.app.ActivityScenario
 import androidx.test.espresso.intent.rule.IntentsTestRule
 import androidx.test.platform.app.InstrumentationRegistry
 import androidx.test.rule.GrantPermissionRule
-import com.evernote.android.job.JobRequest
 import com.facebook.testing.screenshot.Screenshot
 import com.nextcloud.client.account.UserAccountManagerImpl
+import com.nextcloud.client.device.BatteryStatus
 import com.nextcloud.client.device.PowerManagementService
+import com.nextcloud.client.network.Connectivity
 import com.nextcloud.client.network.ConnectivityService
 import com.nextcloud.client.preferences.AppPreferences
 import com.nextcloud.client.preferences.AppPreferencesImpl
@@ -71,12 +73,8 @@ class OCFileListFragmentIT : AbstractIT() {
             return false
         }
 
-        override fun isOnlineWithWifi(): Boolean {
-            return true
-        }
-
-        override fun getActiveNetworkType(): JobRequest.NetworkType {
-            return JobRequest.NetworkType.ANY
+        override fun getConnectivity(): Connectivity {
+            return Connectivity.CONNECTED_WIFI
         }
     }
 
@@ -87,8 +85,8 @@ class OCFileListFragmentIT : AbstractIT() {
         override val isPowerSavingExclusionAvailable: Boolean
             get() = false
 
-        override val isBatteryCharging: Boolean
-            get() = false
+        override val battery: BatteryStatus
+            get() = BatteryStatus()
     }
 
     @Test

+ 1 - 0
src/generic/fastlane/metadata/android/ar-AR/short_description.txt

@@ -0,0 +1 @@
+منصة إنتاجية ذاتية الاستضافة تبقيك متحكمًا

+ 1 - 0
src/generic/fastlane/metadata/android/ar-AR/title.txt

@@ -0,0 +1 @@
+Nextcloud

+ 43 - 0
src/main/java/com/nextcloud/client/device/BatteryStatus.kt

@@ -0,0 +1,43 @@
+/*
+ * Nextcloud Android client application
+ *
+ * @author Chris Narkiewicz
+ * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
+ *
+ * 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.nextcloud.client.device
+
+/**
+ * This class exposes battery status information
+ * in platform-independent way.
+ *
+ * @param isCharging true if device battery is charging
+ * @param level Battery level, from 0 to 100%
+ *
+ * @see [android.os.BatteryManager]
+ */
+data class BatteryStatus(val isCharging: Boolean = false, val level: Int = 0) {
+
+    companion object {
+        const val BATTERY_FULL = 100
+    }
+
+    /**
+     * True if battery is fully loaded, false otherwise.
+     * Some dodgy devices can report battery charging
+     * status as "battery full".
+     */
+    val isFull: Boolean get() = level >= BATTERY_FULL
+}

+ 2 - 2
src/main/java/com/nextcloud/client/device/DeviceModule.kt

@@ -4,7 +4,7 @@
  * @author Chris Narkiewicz
  * @author Tobias Kaminsky
  *
- * Copyright (C) 2019 Chris Narkiewicz <hello@ezaquarii.com>
+ * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
  * Copyright (C) 2019 Tobias Kaminsky
  * Copyright (C) 2019 Nextcloud GmbH
  *
@@ -38,7 +38,7 @@ class DeviceModule {
         val platformPowerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
         return PowerManagementServiceImpl(
             context = context,
-            powerManager = platformPowerManager,
+            platformPowerManager = platformPowerManager,
             deviceInfo = DeviceInfo(),
             preferences = preferences
         )

+ 3 - 3
src/main/java/com/nextcloud/client/device/PowerManagementService.kt

@@ -3,7 +3,7 @@
  *
  * @author Chris Narkiewicz
  *
- * Copyright (C) 2019 Chris Narkiewicz <hello@ezaquarii.com>
+ * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -45,7 +45,7 @@ interface PowerManagementService {
     val isPowerSavingExclusionAvailable: Boolean
 
     /**
-     * Checks if battery is charging using any hardware supported means.
+     * Checks current battery status using platform [android.os.BatteryManager]
      */
-    val isBatteryCharging: Boolean
+    val battery: BatteryStatus
 }

+ 21 - 12
src/main/java/com/nextcloud/client/device/PowerManagementServiceImpl.kt

@@ -3,7 +3,7 @@
  *
  * @author Chris Narkiewicz
  *
- * Copyright (C) 2019 Chris Narkiewicz <hello@ezaquarii.com>
+ * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -33,7 +33,7 @@ import com.nextcloud.client.preferences.AppPreferencesImpl
 
 internal class PowerManagementServiceImpl(
     private val context: Context,
-    private val powerManager: PowerManager,
+    private val platformPowerManager: PowerManager,
     private val preferences: AppPreferences,
     private val deviceInfo: DeviceInfo = DeviceInfo()
 ) : PowerManagementService {
@@ -62,7 +62,7 @@ internal class PowerManagementServiceImpl(
 
             @TargetApi(Build.VERSION_CODES.LOLLIPOP)
             if (deviceInfo.apiLevel >= Build.VERSION_CODES.LOLLIPOP) {
-                return powerManager.isPowerSaveMode
+                return platformPowerManager.isPowerSaveMode
             }
             // For older versions, we just say that device is not in power save mode
             return false
@@ -71,16 +71,25 @@ internal class PowerManagementServiceImpl(
     override val isPowerSavingExclusionAvailable: Boolean
         get() = deviceInfo.vendor in OVERLY_AGGRESSIVE_POWER_SAVING_VENDORS
 
-    override val isBatteryCharging: Boolean
+    @Suppress("MagicNumber") // 100% is 100, we're not doing Cobol
+    override val battery: BatteryStatus
         get() {
             val intent: Intent? = context.registerReceiver(null, IntentFilter(Intent.ACTION_BATTERY_CHANGED))
-            val plugged = intent?.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) ?: 0
-            return when {
-                plugged == BatteryManager.BATTERY_PLUGGED_USB -> true
-                plugged == BatteryManager.BATTERY_PLUGGED_AC -> true
-                deviceInfo.apiLevel >= Build.VERSION_CODES.JELLY_BEAN_MR1 &&
-                    plugged == BatteryManager.BATTERY_PLUGGED_WIRELESS -> true
-                else -> false
-            }
+            val isCharging = intent?.let {
+                val plugged = it.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0)
+                when {
+                    plugged == BatteryManager.BATTERY_PLUGGED_USB -> true
+                    plugged == BatteryManager.BATTERY_PLUGGED_AC -> true
+                    deviceInfo.apiLevel >= Build.VERSION_CODES.JELLY_BEAN_MR1 &&
+                        plugged == BatteryManager.BATTERY_PLUGGED_WIRELESS -> true
+                    else -> false
+                }
+            } ?: false
+            val level = intent?.let { it ->
+                val level: Int = it.getIntExtra(BatteryManager.EXTRA_LEVEL, -1)
+                val scale: Int = it.getIntExtra(BatteryManager.EXTRA_SCALE, -1)
+                (level * 100 / scale.toFloat()).toInt()
+            } ?: 0
+            return BatteryStatus(isCharging, level)
         }
 }

+ 2 - 0
src/main/java/com/nextcloud/client/di/ComponentsModule.java

@@ -63,6 +63,7 @@ import com.owncloud.android.ui.activity.TextEditorWebView;
 import com.owncloud.android.ui.activity.UploadFilesActivity;
 import com.owncloud.android.ui.activity.UploadListActivity;
 import com.owncloud.android.ui.activity.UserInfoActivity;
+import com.owncloud.android.ui.dialog.AccountRemovalConfirmationDialog;
 import com.owncloud.android.ui.dialog.ChooseRichDocumentsTemplateDialogFragment;
 import com.owncloud.android.ui.dialog.ChooseTemplateDialogFragment;
 import com.owncloud.android.ui.dialog.MultipleAccountsDialog;
@@ -138,6 +139,7 @@ abstract class ComponentsModule {
     @ContributesAndroidInjector abstract FileDetailActivitiesFragment fileDetailActivitiesFragment();
     @ContributesAndroidInjector abstract FileDetailSharingFragment fileDetailSharingFragment();
     @ContributesAndroidInjector abstract ChooseTemplateDialogFragment chooseTemplateDialogFragment();
+    @ContributesAndroidInjector abstract AccountRemovalConfirmationDialog accountRemovalConfirmationDialog();
 
     @ContributesAndroidInjector abstract ChooseRichDocumentsTemplateDialogFragment chooseRichDocumentsTemplateDialogFragment();
     @ContributesAndroidInjector abstract ContactsBackupFragment contactsBackupFragment();

+ 1 - 0
src/main/java/com/nextcloud/client/jobs/AccountRemovalWork.kt

@@ -61,6 +61,7 @@ import java.util.ArrayList
 /**
  * Removes account and all local files
  */
+@Suppress("LongParameterList") // legacy code
 class AccountRemovalWork(
     private val context: Context,
     params: WorkerParameters,

+ 1 - 0
src/main/java/com/nextcloud/client/jobs/BackgroundJobFactory.kt

@@ -63,6 +63,7 @@ class BackgroundJobFactory @Inject constructor(
     private val eventBus: EventBus
 ) : WorkerFactory() {
 
+    @Suppress("ComplexMethod") // it's just a trivial dispatch
     override fun createWorker(
         context: Context,
         workerClassName: String,

+ 1 - 0
src/main/java/com/nextcloud/client/jobs/ContactsImportWork.kt

@@ -55,6 +55,7 @@ class ContactsImportWork(
         const val SELECTED_CONTACTS_INDICES = "selected_contacts_indices"
     }
 
+    @Suppress("ComplexMethod", "NestedBlockDepth") // legacy code
     override fun doWork(): Result {
         val vCardFilePath = inputData.getString(VCARD_FILE_PATH) ?: ""
         val contactsAccountName = inputData.getString(ACCOUNT_NAME)

+ 2 - 0
src/main/java/com/nextcloud/client/jobs/NotificationWork.kt

@@ -129,6 +129,7 @@ class NotificationWork constructor(
         return Result.success()
     }
 
+    @Suppress("LongMethod") // legacy code
     private fun sendNotification(notification: Notification, user: User) {
         val randomId = SecureRandom()
         val file = notification.subjectRichParameters["file"]
@@ -237,6 +238,7 @@ class NotificationWork constructor(
             this.accountManager = accountManager
         }
 
+        @Suppress("ComplexMethod") // legacy code
         override fun onReceive(context: Context, intent: Intent) {
             AndroidInjection.inject(this, context)
             val numericNotificationId = intent.getIntExtra(NUMERIC_NOTIFICATION_ID, 0)

+ 40 - 0
src/main/java/com/nextcloud/client/network/Connectivity.kt

@@ -0,0 +1,40 @@
+/*
+ * Nextcloud Android client application
+ *
+ * @author Chris Narkiewicz
+ * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
+ *
+ * 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.nextcloud.client.network
+
+data class Connectivity(
+    val isConnected: Boolean = false,
+    val isMetered: Boolean = false,
+    val isWifi: Boolean = false,
+    val isServerAvailable: Boolean? = null
+) {
+    companion object {
+        @JvmField
+        val DISCONNECTED = Connectivity()
+
+        @JvmField
+        val CONNECTED_WIFI = Connectivity(
+            isConnected = true,
+            isMetered = false,
+            isWifi = true,
+            isServerAvailable = true
+        )
+    }
+}

+ 20 - 5
src/main/java/com/nextcloud/client/network/ConnectivityService.java

@@ -2,7 +2,7 @@
  * Nextcloud Android client application
  *
  * @author Chris Narkiewicz
- * Copyright (C) 2019 Chris Narkiewicz <hello@ezaquarii.com>
+ * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
  *
  * 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
@@ -20,10 +20,25 @@
 
 package com.nextcloud.client.network;
 
-import com.evernote.android.job.JobRequest;
-
+/**
+ * This service provides information about current network connectivity
+ * and server reachableity.
+ */
 public interface ConnectivityService {
+
+    /**
+     * Check if server is accessible by issuing HTTP status check request.
+     * Since this call involves network traffic, it should not be called
+     * on a main thread.
+     *
+     * @return True if server is unreachable, false otherwise
+     */
     boolean isInternetWalled();
-    boolean isOnlineWithWifi();
-    JobRequest.NetworkType getActiveNetworkType();
+
+    /**
+     * Get current network connectivity status.
+     *
+     * @return Network connectivity status in platform-agnostic format
+     */
+    Connectivity getConnectivity();
 }

+ 23 - 51
src/main/java/com/nextcloud/client/network/ConnectivityServiceImpl.java

@@ -23,7 +23,6 @@ package com.nextcloud.client.network;
 import android.net.ConnectivityManager;
 import android.net.NetworkInfo;
 
-import com.evernote.android.job.JobRequest;
 import com.nextcloud.client.account.Server;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.logger.Logger;
@@ -43,7 +42,7 @@ class ConnectivityServiceImpl implements ConnectivityService {
 
     private final static String TAG = ConnectivityServiceImpl.class.getName();
 
-    private final ConnectivityManager connectivityManager;
+    private final ConnectivityManager platformConnectivityManager;
     private final UserAccountManager accountManager;
     private final ClientFactory clientFactory;
     private final GetRequestBuilder requestBuilder;
@@ -56,12 +55,12 @@ class ConnectivityServiceImpl implements ConnectivityService {
         }
     }
 
-    ConnectivityServiceImpl(ConnectivityManager connectivityManager,
+    ConnectivityServiceImpl(ConnectivityManager platformConnectivityManager,
                             UserAccountManager accountManager,
                             ClientFactory clientFactory,
                             GetRequestBuilder requestBuilder,
                             Logger logger) {
-        this.connectivityManager = connectivityManager;
+        this.platformConnectivityManager = platformConnectivityManager;
         this.accountManager = accountManager;
         this.clientFactory = clientFactory;
         this.requestBuilder = requestBuilder;
@@ -70,7 +69,8 @@ class ConnectivityServiceImpl implements ConnectivityService {
 
     @Override
     public boolean isInternetWalled() {
-        if (isOnlineWithWifi()) {
+        Connectivity c = getConnectivity();
+        if (c.isConnected() && c.isWifi()) {
 
             GetMethod get = null;
             try {
@@ -116,65 +116,37 @@ class ConnectivityServiceImpl implements ConnectivityService {
                 }
             }
         } else {
-            return getActiveNetworkType() == JobRequest.NetworkType.ANY;
+            return !getConnectivity().isConnected();
         }
 
         return true;
     }
 
     @Override
-    public boolean isOnlineWithWifi() {
-        try {
-            NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
-
-            if (activeNetwork.isConnectedOrConnecting()) {
-                switch (activeNetwork.getType()) {
-                    case ConnectivityManager.TYPE_VPN:
-                        // check if any other network is wifi
-                        for (NetworkInfo networkInfo : connectivityManager.getAllNetworkInfo()) {
-                            if (networkInfo.isConnectedOrConnecting() &&
-                                networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
-                                return true;
-                            }
-                        }
-                        return false;
-
-                    case ConnectivityManager.TYPE_WIFI:
-                        return true;
-
-                    default:
-                        return false;
-                }
-            } else {
-                return false;
-            }
-        } catch (NullPointerException exception) {
-            return false;
-        }
-    }
-
-    @Override
-    public JobRequest.NetworkType getActiveNetworkType() {
+    public Connectivity getConnectivity() {
         NetworkInfo networkInfo;
         try {
-            networkInfo = connectivityManager.getActiveNetworkInfo();
+            networkInfo = platformConnectivityManager.getActiveNetworkInfo();
         } catch (Throwable t) {
-            return JobRequest.NetworkType.ANY;
-        }
-
-        if (networkInfo == null || !networkInfo.isConnectedOrConnecting()) {
-            return JobRequest.NetworkType.ANY;
+            networkInfo = null; // no network available or no information (permission denied?)
         }
 
-        boolean metered = ConnectivityManagerCompat.isActiveNetworkMetered(connectivityManager);
-        if (!metered) {
-            return JobRequest.NetworkType.UNMETERED;
+        if (networkInfo != null) {
+            boolean isConnected = networkInfo.isConnectedOrConnecting();
+            boolean isMetered = ConnectivityManagerCompat.isActiveNetworkMetered(platformConnectivityManager);
+            boolean isWifi = networkInfo.getType() == ConnectivityManager.TYPE_WIFI || isAnyOtherNetworkWifi();
+            return new Connectivity(isConnected, isMetered, isWifi, null);
+        } else {
+            return Connectivity.DISCONNECTED;
         }
+    }
 
-        if (networkInfo.isRoaming()) {
-            return JobRequest.NetworkType.CONNECTED;
-        } else {
-            return JobRequest.NetworkType.NOT_ROAMING;
+    private boolean isAnyOtherNetworkWifi() {
+        for (NetworkInfo networkInfo : platformConnectivityManager.getAllNetworkInfo()) {
+            if (networkInfo.isConnectedOrConnecting() && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
+                return true;
+            }
         }
+        return false;
     }
 }

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

@@ -1111,7 +1111,7 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
     }
 
     private void showViewPasswordButton() {
-        int drawable = R.drawable.ic_view;
+        int drawable = R.drawable.ic_show;
         if (isPasswordVisible()) {
             drawable = R.drawable.ic_hide;
         }

+ 22 - 2
src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java

@@ -428,6 +428,7 @@ public final class ThumbnailsCacheManager {
         private FileDataStorageManager mStorageManager;
         private GetMethod getMethod;
         private boolean roundedCorners = false;
+        private Listener mListener;
 
         public ThumbnailGenerationTask(ImageView imageView, FileDataStorageManager storageManager, Account account)
                 throws IllegalArgumentException {
@@ -479,7 +480,7 @@ public final class ThumbnailsCacheManager {
         @Override
         protected Bitmap doInBackground(ThumbnailGenerationTaskObject... params) {
             Bitmap thumbnail = null;
-
+            boolean isError = false;
             try {
                 if (mAccount != null) {
                     OwnCloudAccount ocAccount = new OwnCloudAccount(
@@ -514,9 +515,15 @@ public final class ThumbnailsCacheManager {
 
             } catch(OutOfMemoryError oome) {
                 Log_OC.e(TAG, "Out of memory");
+                isError = true;
             } catch (Throwable t) {
                 // the app should never break due to a problem with thumbnails
                 Log_OC.e(TAG, "Generation of thumbnail for " + mFile + " failed", t);
+                isError = true;
+            } finally {
+                if (isError && mListener != null){
+                    mListener.onError();
+                }
             }
 
             return thumbnail;
@@ -545,11 +552,19 @@ public final class ThumbnailsCacheManager {
                 }
             }
 
+            if (mListener !=null){
+                mListener.onSuccess();
+            }
+
             if (mAsyncTasks != null) {
                 mAsyncTasks.remove(this);
             }
         }
 
+        public void setListener(Listener listener){
+            mListener = listener;
+        }
+
         private Bitmap doThumbnailFromOCFileInBackground() {
             Bitmap thumbnail;
             ServerFileInterface file = (ServerFileInterface) mFile;
@@ -658,7 +673,7 @@ public final class ThumbnailsCacheManager {
          *
          * @return int
          */
-        private int getThumbnailDimension() {
+        public int getThumbnailDimension() {
             // Converts dp to pixel
             Resources r = MainApp.getAppContext().getResources();
             Double d = Math.pow(2, Math.floor(Math.log(r.getDimension(R.dimen.file_icon_size_grid)) / Math.log(2)));
@@ -696,6 +711,11 @@ public final class ThumbnailsCacheManager {
             return thumbnail;
         }
 
+        public interface Listener{
+            void onSuccess();
+            void onError();
+        }
+
     }
 
     public static class MediaThumbnailGenerationTask extends AsyncTask<Object, Void, Bitmap> {

+ 13 - 11
src/main/java/com/owncloud/android/files/services/FileUploader.java

@@ -9,7 +9,7 @@
  *
  *  Copyright (C) 2012 Bartek Przybylski
  *  Copyright (C) 2012-2016 ownCloud Inc.
- *  Copyright (C) 2019 Chris Narkiewicz <hello@ezaquarii.com>
+ *  Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
  *
  *  This program is free software: you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License version 2,
@@ -47,10 +47,10 @@ import android.os.Parcelable;
 import android.os.Process;
 import android.util.Pair;
 
-import com.evernote.android.job.JobRequest;
-import com.evernote.android.job.util.Device;
 import com.nextcloud.client.account.UserAccountManager;
+import com.nextcloud.client.device.BatteryStatus;
 import com.nextcloud.client.device.PowerManagementService;
+import com.nextcloud.client.network.Connectivity;
 import com.nextcloud.client.network.ConnectivityService;
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
@@ -1007,11 +1007,12 @@ public class FileUploader extends Service
         boolean resultMatch;
         boolean accountMatch;
 
-        boolean gotNetwork = connectivityService.getActiveNetworkType() != JobRequest.NetworkType.ANY &&
-            !connectivityService.isInternetWalled();
-        boolean gotWifi = gotNetwork && Device.getNetworkType(context).equals(JobRequest.NetworkType.UNMETERED);
-        boolean charging = Device.getBatteryStatus(context).isCharging();
-        boolean isPowerSaving = powerManagementService.isPowerSavingEnabled();
+        final Connectivity connectivity = connectivityService.getConnectivity();
+        final boolean gotNetwork = connectivity.isConnected() && !connectivityService.isInternetWalled();
+        final boolean gotWifi = connectivity.isWifi();
+        final BatteryStatus batteryStatus = powerManagementService.getBattery();
+        final boolean charging = batteryStatus.isCharging() || batteryStatus.isFull();
+        final boolean isPowerSaving = powerManagementService.isPowerSavingEnabled();
 
         for (OCUpload failedUpload : failedUploads) {
             accountMatch = account == null || account.name.equals(failedUpload.getAccountName());
@@ -1027,7 +1028,7 @@ public class FileUploader extends Service
                         uploadsStorageManager.updateUpload(failedUpload);
                     }
                 } else {
-                    charging = charging || Device.getBatteryStatus(context).getBatteryPercent() == 1;
+
                     if (!isPowerSaving && gotNetwork && canUploadBeRetried(failedUpload, gotWifi, charging)) {
                         retryUpload(context, currentAccount, failedUpload);
                     }
@@ -1286,9 +1287,10 @@ public class FileUploader extends Service
             Context context = MainApp.getAppContext();
             if (context != null) {
                 ResultCode cancelReason = null;
-                if (mCurrentUpload.isWifiRequired() && !Device.getNetworkType(context).equals(JobRequest.NetworkType.UNMETERED)) {
+                Connectivity connectivity = connectivityService.getConnectivity();
+                if (mCurrentUpload.isWifiRequired() && connectivity.isWifi()) {
                     cancelReason = ResultCode.DELAYED_FOR_WIFI;
-                } else if (mCurrentUpload.isChargingRequired() && !Device.getBatteryStatus(context).isCharging()) {
+                } else if (mCurrentUpload.isChargingRequired() && !powerManagementService.getBattery().isCharging()) {
                     cancelReason = ResultCode.DELAYED_FOR_CHARGING;
                 } else if (!mCurrentUpload.isIgnoringPowerSaveMode() && powerManagementService.isPowerSavingEnabled()) {
                     cancelReason = ResultCode.DELAYED_IN_POWER_SAVE_MODE;

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

@@ -4,7 +4,7 @@
  * @author David A. Velasco
  * @author Chris Narkiewicz
  * Copyright (C) 2016 ownCloud GmbH.
- * Copyright (C) 2019 Chris Narkiewicz <hello@ezaquarii.com>
+ * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2,
@@ -29,10 +29,10 @@ import android.os.Build;
 import android.text.TextUtils;
 import android.util.Log;
 
-import com.evernote.android.job.JobRequest;
-import com.evernote.android.job.util.Device;
 import com.google.gson.reflect.TypeToken;
+import com.nextcloud.client.device.BatteryStatus;
 import com.nextcloud.client.device.PowerManagementService;
+import com.nextcloud.client.network.Connectivity;
 import com.nextcloud.client.network.ConnectivityService;
 import com.owncloud.android.datamodel.ArbitraryDataProvider;
 import com.owncloud.android.datamodel.DecryptedFolderMetadata;
@@ -144,11 +144,11 @@ public class UploadFileOperation extends SyncOperation {
 
     private RequestEntity mEntity;
 
-    final private Account mAccount;
-    final private OCUpload mUpload;
-    final private UploadsStorageManager uploadsStorageManager;
-    final private ConnectivityService connectivityService;
-    final private PowerManagementService powerManagementService;
+    private final Account mAccount;
+    private final OCUpload mUpload;
+    private final UploadsStorageManager uploadsStorageManager;
+    private final ConnectivityService connectivityService;
+    private final PowerManagementService powerManagementService;
 
     private boolean encryptedAncestor;
 
@@ -594,7 +594,7 @@ public class UploadFileOperation extends SyncOperation {
 
             /// perform the upload
             if (size > ChunkedFileUploadRemoteOperation.CHUNK_SIZE_MOBILE) {
-                boolean onWifiConnection = connectivityService.isOnlineWithWifi();
+                boolean onWifiConnection = connectivityService.getConnectivity().isWifi();
 
                 mUploadOperation = new ChunkedFileUploadRemoteOperation(encryptedTempFile.getAbsolutePath(),
                                                                         mFile.getParentRemotePath() + encryptedFileName,
@@ -718,20 +718,20 @@ public class UploadFileOperation extends SyncOperation {
         RemoteOperationResult remoteOperationResult = null;
 
         // check that internet is not behind walled garden
-        if (Device.getNetworkType(mContext).equals(JobRequest.NetworkType.ANY) ||
-                connectivityService.isInternetWalled()) {
+        if (!connectivityService.getConnectivity().isConnected() || connectivityService.isInternetWalled()) {
             remoteOperationResult =  new RemoteOperationResult(ResultCode.NO_NETWORK_CONNECTION);
         }
 
         // check that connectivity conditions are met and delays the upload otherwise
-        if (mOnWifiOnly && !Device.getNetworkType(mContext).equals(JobRequest.NetworkType.UNMETERED)) {
+        Connectivity connectivity = connectivityService.getConnectivity();
+        if (mOnWifiOnly && connectivity.isWifi()) {
             Log_OC.d(TAG, "Upload delayed until WiFi is available: " + getRemotePath());
             remoteOperationResult = new RemoteOperationResult(ResultCode.DELAYED_FOR_WIFI);
         }
 
         // check if charging conditions are met and delays the upload otherwise
-        if (mWhileChargingOnly && !Device.getBatteryStatus(mContext).isCharging()
-                && Device.getBatteryStatus(mContext).getBatteryPercent() < 1) {
+        final BatteryStatus battery = powerManagementService.getBattery();
+        if (mWhileChargingOnly && battery.isCharging()) {
             Log_OC.d(TAG, "Upload delayed until the device is charging: " + getRemotePath());
             remoteOperationResult =  new RemoteOperationResult(ResultCode.DELAYED_FOR_CHARGING);
         }
@@ -827,7 +827,7 @@ public class UploadFileOperation extends SyncOperation {
 
             // perform the upload
             if (size > ChunkedFileUploadRemoteOperation.CHUNK_SIZE_MOBILE) {
-                boolean onWifiConnection = connectivityService.isOnlineWithWifi();
+                boolean onWifiConnection = connectivityService.getConnectivity().isWifi();
 
                 mUploadOperation = new ChunkedFileUploadRemoteOperation(mFile.getStoragePath(),
                                                                         mFile.getRemotePath(), mFile.getMimeType(),

+ 1 - 1
src/main/java/com/owncloud/android/ui/activities/ActivitiesActivity.java

@@ -157,7 +157,7 @@ public class ActivitiesActivity extends FileActivity implements ActivityListInte
      * sets up the UI elements and loads all activity items.
      */
     private void setupContent() {
-        emptyContentIcon.setImageResource(R.drawable.ic_activity_light_grey);
+        emptyContentIcon.setImageResource(R.drawable.ic_activity);
         emptyContentProgressBar.getIndeterminateDrawable().setColorFilter(ThemeUtils.primaryAccentColor(this),
                                                                           PorterDuff.Mode.SRC_IN);
 

+ 9 - 5
src/main/java/com/owncloud/android/ui/activity/FileActivity.java

@@ -36,7 +36,6 @@ import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.IBinder;
-import android.view.View;
 
 import com.google.android.material.snackbar.Snackbar;
 import com.nextcloud.client.account.UserAccountManager;
@@ -615,7 +614,7 @@ public abstract class FileActivity extends DrawerActivity
         dialog.show(getSupportFragmentManager(), DIALOG_CERT_NOT_SAVED);
     }
 
-    public void checkForNewDevVersionNecessary(View view, Context context) {
+    public void checkForNewDevVersionNecessary(Context context) {
         if (getResources().getBoolean(R.bool.dev_version_direct_download_enabled)) {
             ArbitraryDataProvider arbitraryDataProvider = new ArbitraryDataProvider(getContentResolver());
             int count = arbitraryDataProvider.getIntegerValue(FilesSyncHelper.GLOBAL, APP_OPENED_COUNT);
@@ -628,7 +627,7 @@ public abstract class FileActivity extends DrawerActivity
 
     @Override
     public void returnVersion(Integer latestVersion) {
-        showDevSnackbar(this, latestVersion, false);
+        showDevSnackbar(this, latestVersion, false, true);
     }
 
     public static void checkForNewDevVersion(LoadingVersionNumberTask.VersionDevInterface callback, Context context) {
@@ -637,7 +636,10 @@ public abstract class FileActivity extends DrawerActivity
         loadTask.execute(url);
     }
 
-    public static void showDevSnackbar(Activity activity, Integer latestVersion, boolean openDirectly) {
+    public static void showDevSnackbar(Activity activity,
+                                       Integer latestVersion,
+                                       boolean openDirectly,
+                                       boolean inBackground) {
         Integer currentVersion = -1;
         try {
             currentVersion = activity.getPackageManager().getPackageInfo(activity.getPackageName(), 0).versionCode;
@@ -665,7 +667,9 @@ public abstract class FileActivity extends DrawerActivity
                         }).show();
             }
         } else {
-            DisplayUtils.showSnackMessage(activity, R.string.dev_version_no_new_version_available, Snackbar.LENGTH_LONG);
+            if (!inBackground) {
+                DisplayUtils.showSnackMessage(activity, R.string.dev_version_no_new_version_available, Snackbar.LENGTH_LONG);
+            }
         }
     }
 

+ 5 - 10
src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -152,6 +152,7 @@ import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
 
 import static com.owncloud.android.datamodel.OCFile.PATH_SEPARATOR;
+import static com.owncloud.android.utils.DisplayUtils.openSortingOrderDialogFragment;
 
 /**
  * Displays, what files the user has available in his ownCloud. This is the main view.
@@ -868,14 +869,8 @@ public class FileDisplayActivity extends FileActivity
                 break;
             }
             case R.id.action_sort: {
-                FragmentManager fm = getSupportFragmentManager();
-                FragmentTransaction ft = fm.beginTransaction();
-                ft.addToBackStack(null);
-
-                SortingOrderDialogFragment mSortingOrderDialogFragment = SortingOrderDialogFragment.newInstance(
-                    preferences.getSortOrderByFolder(getListOfFilesFragment().getCurrentFile()));
-                mSortingOrderDialogFragment.show(ft, SortingOrderDialogFragment.SORTING_ORDER_FRAGMENT);
-
+                openSortingOrderDialogFragment(getSupportFragmentManager(),
+                                               preferences.getSortOrderByFolder(getListOfFilesFragment().getCurrentFile()));
                 break;
             }
             case R.id.action_switch_view: {
@@ -2611,14 +2606,14 @@ public class FileDisplayActivity extends FileActivity
         }
 
         EventBus.getDefault().post(new TokenPushEvent());
-        checkForNewDevVersionNecessary(findViewById(R.id.root_layout), getApplicationContext());
+        checkForNewDevVersionNecessary(getApplicationContext());
     }
 
     @Override
     protected void onRestart() {
         super.onRestart();
 
-        checkForNewDevVersionNecessary(findViewById(R.id.root_layout), getApplicationContext());
+        checkForNewDevVersionNecessary(getApplicationContext());
     }
 
     public void setSearchQuery(String query) {

+ 4 - 8
src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.java

@@ -72,6 +72,8 @@ import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
 
+import static com.owncloud.android.utils.DisplayUtils.openSortingOrderDialogFragment;
+
 public class FolderPickerActivity extends FileActivity implements FileFragment.ContainerActivity,
     OnClickListener,
     OnEnforceableRefreshListener,
@@ -324,14 +326,8 @@ public class FolderPickerActivity extends FileActivity implements FileFragment.C
                 break;
             }
             case R.id.action_sort: {
-                FragmentManager fm = getSupportFragmentManager();
-                FragmentTransaction ft = fm.beginTransaction();
-                ft.addToBackStack(null);
-
-                SortingOrderDialogFragment mSortingOrderDialogFragment = SortingOrderDialogFragment.newInstance(
-                    preferences.getSortOrderByFolder(getListOfFilesFragment().getCurrentFile()));
-                mSortingOrderDialogFragment.show(ft, SortingOrderDialogFragment.SORTING_ORDER_FRAGMENT);
-
+                openSortingOrderDialogFragment(getSupportFragmentManager(),
+                                               preferences.getSortOrderByFolder(getListOfFilesFragment().getCurrentFile()));
                 break;
             }
             default:

+ 2 - 2
src/main/java/com/owncloud/android/ui/activity/NotificationsActivity.java

@@ -236,7 +236,7 @@ public class NotificationsActivity extends FileActivity implements Notifications
      * sets up the UI elements and loads all notification items.
      */
     private void setupContent() {
-        emptyContentIcon.setImageResource(R.drawable.ic_notification_light_grey);
+        emptyContentIcon.setImageResource(R.drawable.ic_notification);
         emptyContentProgressBar.getIndeterminateDrawable().setColorFilter(ThemeUtils.primaryAccentColor(this),
                 PorterDuff.Mode.SRC_IN);
         setLoadingMessage();
@@ -350,7 +350,7 @@ public class NotificationsActivity extends FileActivity implements Notifications
             emptyContentMessage.setVisibility(View.VISIBLE);
 
             emptyContentProgressBar.setVisibility(View.GONE);
-            emptyContentIcon.setImageResource(R.drawable.ic_notification_light_grey);
+            emptyContentIcon.setImageResource(R.drawable.ic_notification);
             emptyContentIcon.setVisibility(View.VISIBLE);
         }
     }

+ 4 - 10
src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java

@@ -39,7 +39,6 @@ import android.content.res.Resources.NotFoundException;
 import android.graphics.Color;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
@@ -124,6 +123,8 @@ import androidx.core.view.MenuItemCompat;
 import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.FragmentManager;
 
+import static com.owncloud.android.utils.DisplayUtils.openSortingOrderDialogFragment;
+
 /**
  * This can be used to upload things to an ownCloud instance.
  */
@@ -775,11 +776,6 @@ public class ReceiveExternalFilesActivity extends FileActivity
                 btnChooseFolder.setBackgroundTintList(ColorStateList.valueOf(Color.GRAY));
             }
 
-            if (getSupportActionBar() != null) {
-                getSupportActionBar().setBackgroundDrawable(new ColorDrawable(
-                        ThemeUtils.primaryColor(getAccount(), false, this)));
-            }
-
             ThemeUtils.colorStatusBar(this);
 
             ThemeUtils.tintBackButton(actionBar, this);
@@ -1058,10 +1054,8 @@ public class ReceiveExternalFilesActivity extends FileActivity
                 showAccountChooserDialog();
                 break;
             case R.id.action_sort:
-                SortingOrderDialogFragment mSortingOrderDialogFragment = SortingOrderDialogFragment.newInstance(
-                    preferences.getSortOrderByFolder(mFile));
-                mSortingOrderDialogFragment.show(getSupportFragmentManager(),
-                        SortingOrderDialogFragment.SORTING_ORDER_FRAGMENT);
+                openSortingOrderDialogFragment(getSupportFragmentManager(),
+                                               preferences.getSortOrderByFolder(mFile));
                 break;
             default:
                 retval = super.onOptionsItemSelected(item);

+ 1 - 4
src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java

@@ -32,7 +32,6 @@ import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Configuration;
 import android.graphics.drawable.ColorDrawable;
-import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Build;
 import android.os.Bundle;
@@ -48,7 +47,6 @@ import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.Window;
 import android.webkit.URLUtil;
 
 import com.nextcloud.client.account.User;
@@ -89,7 +87,6 @@ import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBar;
 import androidx.appcompat.app.AlertDialog;
 import androidx.appcompat.app.AppCompatDelegate;
-import androidx.core.content.res.ResourcesCompat;
 
 /**
  * An Activity that allows the user to change the application's settings.
@@ -1016,6 +1013,6 @@ public class SettingsActivity extends ThemedPreferenceActivity
 
     @Override
     public void returnVersion(Integer latestVersion) {
-        FileActivity.showDevSnackbar(this, latestVersion, true);
+        FileActivity.showDevSnackbar(this, latestVersion, true, false);
     }
 }

+ 0 - 1
src/main/java/com/owncloud/android/ui/activity/SyncedFoldersActivity.java

@@ -70,7 +70,6 @@ import com.owncloud.android.ui.decoration.MediaGridItemDecoration;
 import com.owncloud.android.ui.dialog.SyncedFolderPreferencesDialogFragment;
 import com.owncloud.android.ui.dialog.parcel.SyncedFolderParcelable;
 import com.owncloud.android.utils.DisplayUtils;
-import com.owncloud.android.utils.FilesSyncHelper;
 import com.owncloud.android.utils.PermissionUtil;
 import com.owncloud.android.utils.ThemeUtils;
 

+ 4 - 9
src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java

@@ -74,6 +74,8 @@ import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
 
+import static com.owncloud.android.utils.DisplayUtils.openSortingOrderDialogFragment;
+
 /**
  * Displays local files and let the user choose what of them wants to upload
  * to the current ownCloud account.
@@ -83,7 +85,6 @@ public class UploadFilesActivity extends FileActivity implements
     OnClickListener, ConfirmationDialogFragmentListener, SortingOrderDialogFragment.OnSortingOrderListener,
     CheckAvailableSpaceTask.CheckAvailableSpaceListener, StoragePathAdapter.StoragePathAdapterListener, Injectable {
 
-    private static final String SORT_ORDER_DIALOG_TAG = "SORT_ORDER_DIALOG";
     private static final int SINGLE_DIR = 1;
 
     private ArrayAdapter<String> mDirectories;
@@ -296,14 +297,8 @@ public class UploadFilesActivity extends FileActivity implements
                 break;
             }
             case R.id.action_sort: {
-                FragmentManager fm = getSupportFragmentManager();
-                FragmentTransaction ft = fm.beginTransaction();
-                ft.addToBackStack(null);
-
-                SortingOrderDialogFragment mSortingOrderDialogFragment = SortingOrderDialogFragment.newInstance(
-                    preferences.getSortOrderByType(FileSortOrder.Type.uploadFilesView));
-                mSortingOrderDialogFragment.show(ft, SORT_ORDER_DIALOG_TAG);
-
+                openSortingOrderDialogFragment(getSupportFragmentManager(),
+                                               preferences.getSortOrderByType(FileSortOrder.Type.uploadFilesView));
                 break;
             }
             case R.id.action_switch_view: {

+ 2 - 56
src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java

@@ -27,8 +27,6 @@
 
 package com.owncloud.android.ui.activity;
 
-import android.accounts.Account;
-import android.app.Dialog;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
@@ -52,7 +50,6 @@ import com.bumptech.glide.request.animation.GlideAnimation;
 import com.bumptech.glide.request.target.SimpleTarget;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.di.Injectable;
-import com.nextcloud.client.jobs.BackgroundJobManager;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.owncloud.android.R;
 import com.owncloud.android.lib.common.UserInfo;
@@ -60,6 +57,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperation;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.users.GetUserInfoRemoteOperation;
+import com.owncloud.android.ui.dialog.AccountRemovalConfirmationDialog;
 import com.owncloud.android.ui.events.TokenPushEvent;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.PushUtils;
@@ -77,12 +75,9 @@ import javax.inject.Inject;
 import androidx.annotation.ColorInt;
 import androidx.annotation.DrawableRes;
 import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
 import androidx.annotation.StringRes;
 import androidx.appcompat.app.ActionBar;
-import androidx.appcompat.app.AlertDialog;
 import androidx.core.graphics.drawable.DrawableCompat;
-import androidx.fragment.app.DialogFragment;
 import androidx.fragment.app.FragmentManager;
 import androidx.recyclerview.widget.RecyclerView;
 import butterknife.BindString;
@@ -324,60 +319,11 @@ public class UserInfoActivity extends FileActivity implements Injectable {
     }
 
     public static void openAccountRemovalConfirmationDialog(User user, FragmentManager fragmentManager) {
-        UserInfoActivity.AccountRemovalConfirmationDialog dialog =
-            UserInfoActivity.AccountRemovalConfirmationDialog.newInstance(user);
+        AccountRemovalConfirmationDialog dialog = AccountRemovalConfirmationDialog.newInstance(user);
         dialog.show(fragmentManager, "dialog");
     }
 
-    public static class AccountRemovalConfirmationDialog extends DialogFragment {
 
-        @Inject BackgroundJobManager backgroundJobManager;
-        private Account account;
-
-        public static UserInfoActivity.AccountRemovalConfirmationDialog newInstance(User user) {
-            Bundle bundle = new Bundle();
-            bundle.putParcelable(KEY_ACCOUNT, user.toPlatformAccount());
-
-            UserInfoActivity.AccountRemovalConfirmationDialog dialog = new
-                    UserInfoActivity.AccountRemovalConfirmationDialog();
-            dialog.setArguments(bundle);
-
-            return dialog;
-        }
-
-        @Override
-        public void onCreate(@Nullable Bundle savedInstanceState) {
-            super.onCreate(savedInstanceState);
-            account = getArguments().getParcelable(KEY_ACCOUNT);
-        }
-
-        @Override
-        public void onStart() {
-            super.onStart();
-
-            int color = ThemeUtils.primaryAccentColor(getActivity());
-
-            AlertDialog alertDialog = (AlertDialog) getDialog();
-
-            alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(color);
-            alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(color);
-        }
-
-        @NonNull
-        @Override
-        public Dialog onCreateDialog(Bundle savedInstanceState) {
-            return new AlertDialog.Builder(getActivity(), R.style.Theme_ownCloud_Dialog)
-                    .setTitle(R.string.delete_account)
-                    .setMessage(getResources().getString(R.string.delete_account_warning, account.name))
-                    .setIcon(R.drawable.ic_warning)
-                    .setPositiveButton(R.string.common_ok,
-                            (dialogInterface, i) -> {
-                                backgroundJobManager.startAccountRemovalJob(account.name, false);
-                            })
-                    .setNegativeButton(R.string.common_cancel, null)
-                    .create();
-        }
-    }
 
     private void fetchAndSetData() {
         Thread t = new Thread(() -> {

+ 83 - 3
src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java

@@ -41,6 +41,7 @@ import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Filter;
+import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.ProgressBar;
@@ -49,6 +50,7 @@ import android.widget.TextView;
 
 import com.bumptech.glide.Glide;
 import com.bumptech.glide.request.target.BitmapImageViewTarget;
+import com.elyeproj.loaderviewlibrary.LoaderImageView;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.preferences.AppPreferences;
@@ -93,6 +95,7 @@ import java.util.Set;
 import java.util.Vector;
 
 import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
 import androidx.core.graphics.drawable.RoundedBitmapDrawable;
 import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory;
 import androidx.recyclerview.widget.RecyclerView;
@@ -201,7 +204,13 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
     }
 
     public int getItemPosition(OCFile file) {
-        return mFiles.indexOf(file);
+        int position = mFiles.indexOf(file);
+
+        if (shouldShowHeader()) {
+            position = position + 1;
+        }
+
+        return position;
     }
 
     public void setFavoriteAttributeForItemID(String fileId, boolean favorite) {
@@ -358,7 +367,8 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                          mStorageManager,
                          asyncTasks,
                          gridView,
-                         activity);
+                         activity,
+                         gridViewHolder.shimmerThumbnail);
 
             if (highlightedItem != null && file.getFileId() == highlightedItem.getFileId()) {
                 gridViewHolder.itemLayout.setBackgroundColor(activity.getResources()
@@ -604,6 +614,17 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                                     List<ThumbnailsCacheManager.ThumbnailGenerationTask> asyncTasks,
                                     boolean gridView,
                                     Context context) {
+        setThumbnail(file, thumbnailView, user, storageManager, asyncTasks, gridView, context, null);
+    }
+
+    private static void setThumbnail(OCFile file,
+                                    ImageView thumbnailView,
+                                    User user,
+                                    FileDataStorageManager storageManager,
+                                    List<ThumbnailsCacheManager.ThumbnailGenerationTask> asyncTasks,
+                                    boolean gridView,
+                                    Context context,
+                                    LoaderImageView shimmerThumbnail) {
         if (file.isFolder()) {
             thumbnailView.setImageDrawable(MimeTypeUtil
                                                .getFolderTypeIcon(file.isSharedWithMe() || file.isSharedWithSharee(),
@@ -637,7 +658,6 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                                                                                    user.toPlatformAccount(),
                                                                                    asyncTasks,
                                                                                    !gridView);
-
                             if (thumbnail == null) {
                                 thumbnail = BitmapUtils.drawableToBitmap(
                                     MimeTypeUtil.getFileTypeIcon(file.getMimeType(),
@@ -648,6 +668,26 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                             final ThumbnailsCacheManager.AsyncThumbnailDrawable asyncDrawable =
                                 new ThumbnailsCacheManager.AsyncThumbnailDrawable(context.getResources(),
                                                                                   thumbnail, task);
+
+                            if (shimmerThumbnail != null && shimmerThumbnail.getVisibility() == View.GONE) {
+                                if (gridView) {
+                                    configShimmerGridImageSize(shimmerThumbnail, task.getThumbnailDimension());
+                                }
+                                startShimmer(shimmerThumbnail, thumbnailView);
+                            }
+
+                            task.setListener(new ThumbnailsCacheManager.ThumbnailGenerationTask.Listener() {
+                                @Override
+                                public void onSuccess() {
+                                    stopShimmer(shimmerThumbnail, thumbnailView);
+                                }
+
+                                @Override
+                                public void onError() {
+                                    stopShimmer(shimmerThumbnail, thumbnailView);
+                                }
+                            });
+
                             thumbnailView.setImageDrawable(asyncDrawable);
                             asyncTasks.add(task);
                             task.execute(new ThumbnailsCacheManager.ThumbnailGenerationTaskObject(file,
@@ -670,6 +710,39 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
         }
     }
 
+    @Override
+    public void onViewAttachedToWindow(@NonNull RecyclerView.ViewHolder holder) {
+        if (holder instanceof OCFileListGridImageViewHolder) {
+            LoaderImageView thumbnailShimmer = ((OCFileListGridImageViewHolder) holder).shimmerThumbnail;
+            if (thumbnailShimmer.getVisibility() == View.VISIBLE){
+                thumbnailShimmer.setImageResource(R.drawable.background);
+                thumbnailShimmer.resetLoader();
+            }
+        }
+    }
+
+    private static void startShimmer(LoaderImageView thumbnailShimmer, ImageView thumbnailView) {
+        thumbnailShimmer.setImageResource(R.drawable.background);
+        thumbnailShimmer.resetLoader();
+        thumbnailView.setVisibility(View.GONE);
+        thumbnailShimmer.setVisibility(View.VISIBLE);
+    }
+
+    private static void stopShimmer(@Nullable LoaderImageView thumbnailShimmer, ImageView thumbnailView) {
+        if (thumbnailShimmer != null){
+            thumbnailShimmer.setVisibility(View.GONE);
+            thumbnailView.setVisibility(View.VISIBLE);
+        }
+    }
+
+    private static void configShimmerGridImageSize(LoaderImageView thumbnailShimmer, int size){
+        FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT,size);
+        FrameLayout.LayoutParams targetLayoutParams = (FrameLayout.LayoutParams) thumbnailShimmer.getLayoutParams();
+        params.setMargins(targetLayoutParams.leftMargin, targetLayoutParams.topMargin,
+                          targetLayoutParams.rightMargin, targetLayoutParams.bottomMargin);
+        thumbnailShimmer.setLayoutParams(params);
+    }
+
     private String getFooterText() {
         int filesCount = 0;
         int foldersCount = 0;
@@ -727,6 +800,10 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
         return !TextUtils.isEmpty(currentDirectory.getRichWorkspace());
     }
 
+    public boolean isHeader(OCFile file) {
+        return VIEWTYPE_HEADER == getItemViewType(getItemPosition(file));
+    }
+
     @Override
     public int getItemViewType(int position) {
         if (shouldShowHeader()) {
@@ -1187,6 +1264,9 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
         @BindView(R.id.thumbnail)
         public ImageView thumbnail;
 
+        @BindView(R.id.thumbnail_shimmer)
+        public LoaderImageView shimmerThumbnail;
+
         @BindView(R.id.favorite_action)
         public ImageView favorite;
 

+ 2 - 3
src/main/java/com/owncloud/android/ui/adapter/UserListAdapter.java

@@ -26,7 +26,6 @@
 
 package com.owncloud.android.ui.adapter;
 
-import android.accounts.Account;
 import android.graphics.Paint;
 import android.graphics.drawable.Drawable;
 import android.view.LayoutInflater;
@@ -183,8 +182,8 @@ public class UserListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolde
      * @param user the account
      */
     private void setCurrentlyActiveState(AccountViewHolderItem viewHolder, User user) {
-        Account currentAccount = accountManager.getCurrentAccount();
-        if (currentAccount != null && currentAccount.name.equals(user.getAccountName())) {
+        User currentUser = accountManager.getUser();
+        if (currentUser.nameEquals(user)) {
             viewHolder.checkViewItem.setVisibility(View.VISIBLE);
         } else {
             viewHolder.checkViewItem.setVisibility(View.INVISIBLE);

+ 88 - 0
src/main/java/com/owncloud/android/ui/dialog/AccountRemovalConfirmationDialog.java

@@ -0,0 +1,88 @@
+/*
+ *
+ * Nextcloud Android client application
+ *
+ * @author Tobias Kaminsky
+ * Copyright (C) 2020 Tobias Kaminsky
+ * Copyright (C) 2020 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 <https://www.gnu.org/licenses/>.
+ */
+
+package com.owncloud.android.ui.dialog;
+
+import android.app.Dialog;
+import android.os.Bundle;
+
+import com.nextcloud.client.account.User;
+import com.nextcloud.client.di.Injectable;
+import com.nextcloud.client.jobs.BackgroundJobManager;
+import com.owncloud.android.R;
+import com.owncloud.android.utils.ThemeUtils;
+
+import javax.inject.Inject;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.appcompat.app.AlertDialog;
+import androidx.fragment.app.DialogFragment;
+
+public class AccountRemovalConfirmationDialog extends DialogFragment implements Injectable {
+    private static final String KEY_USER = "USER";
+
+    @Inject BackgroundJobManager backgroundJobManager;
+    private User user;
+
+    public static AccountRemovalConfirmationDialog newInstance(User user) {
+        Bundle bundle = new Bundle();
+        bundle.putParcelable(KEY_USER, user);
+
+        AccountRemovalConfirmationDialog dialog = new AccountRemovalConfirmationDialog();
+        dialog.setArguments(bundle);
+
+        return dialog;
+    }
+
+    @Override
+    public void onCreate(@Nullable Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        user = getArguments().getParcelable(KEY_USER);
+    }
+
+    @Override
+    public void onStart() {
+        super.onStart();
+
+        int color = ThemeUtils.primaryAccentColor(getActivity());
+
+        AlertDialog alertDialog = (AlertDialog) getDialog();
+
+        alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setTextColor(color);
+        alertDialog.getButton(AlertDialog.BUTTON_NEGATIVE).setTextColor(color);
+    }
+
+    @NonNull
+    @Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        return new AlertDialog.Builder(requireActivity(), R.style.Theme_ownCloud_Dialog)
+            .setTitle(R.string.delete_account)
+            .setMessage(getResources().getString(R.string.delete_account_warning, user.getAccountName()))
+            .setIcon(R.drawable.ic_warning)
+            .setPositiveButton(R.string.common_ok,
+                               (dialogInterface, i) -> backgroundJobManager.startAccountRemovalJob(user.getAccountName(),
+                                                                                                   false))
+            .setNegativeButton(R.string.common_cancel, null)
+            .create();
+    }
+}

+ 6 - 0
src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java

@@ -54,6 +54,7 @@ import android.widget.LinearLayout;
 import android.widget.ProgressBar;
 import android.widget.TextView;
 
+import com.google.android.material.button.MaterialButton;
 import com.google.android.material.floatingactionbutton.FloatingActionButton;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.di.Injectable;
@@ -118,6 +119,8 @@ public class ExtendedListFragment extends Fragment implements
     @Inject UserAccountManager accountManager;
     private ScaleGestureDetector mScaleGestureDetector;
     protected SwipeRefreshLayout mRefreshListLayout;
+    protected MaterialButton mSortButton;
+    protected MaterialButton mSwitchGridViewButton;
     protected LinearLayout mEmptyListContainer;
     protected TextView mEmptyListMessage;
     protected TextView mEmptyListHeadline;
@@ -374,6 +377,9 @@ public class ExtendedListFragment extends Fragment implements
         ThemeUtils.colorSwipeRefreshLayout(getContext(), mRefreshListLayout);
         mRefreshListLayout.setOnRefreshListener(this);
 
+        mSortButton = v.findViewById(R.id.sort_button);
+        mSwitchGridViewButton = v.findViewById(R.id.switch_grid_view_button);
+
         mFabMain = v.findViewById(R.id.fab_main);
         ThemeUtils.tintFloatingActionButton(mFabMain, R.drawable.ic_plus, getContext());
 

+ 2 - 2
src/main/java/com/owncloud/android/ui/fragment/FileDetailActivitiesFragment.java

@@ -254,7 +254,7 @@ public class FileDetailActivitiesFragment extends Fragment implements
 
         emptyContentProgressBar.getIndeterminateDrawable().setColorFilter(ThemeUtils.primaryAccentColor(getContext()),
                 PorterDuff.Mode.SRC_IN);
-        emptyContentIcon.setImageDrawable(getResources().getDrawable(R.drawable.ic_activity_light_grey));
+        emptyContentIcon.setImageDrawable(getResources().getDrawable(R.drawable.ic_activity));
 
         adapter = new ActivityAndVersionListAdapter(getContext(),
                                                     accountManager,
@@ -414,7 +414,7 @@ public class FileDetailActivitiesFragment extends Fragment implements
 
     private void setEmptyContent(String headline, String message) {
         if (emptyContentContainer != null && emptyContentMessage != null) {
-            emptyContentIcon.setImageDrawable(requireContext().getResources().getDrawable(R.drawable.ic_activity_light_grey));
+            emptyContentIcon.setImageDrawable(requireContext().getResources().getDrawable(R.drawable.ic_activity));
             emptyContentHeadline.setText(headline);
             emptyContentMessage.setText(message);
 

+ 74 - 8
src/main/java/com/owncloud/android/ui/fragment/OCFileListFragment.java

@@ -28,6 +28,7 @@ import android.accounts.Account;
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
+import android.graphics.drawable.Drawable;
 import android.os.AsyncTask;
 import android.os.Build;
 import android.os.Bundle;
@@ -120,6 +121,7 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.StringRes;
 import androidx.appcompat.app.ActionBar;
+import androidx.core.content.ContextCompat;
 import androidx.drawerlayout.widget.DrawerLayout;
 import androidx.fragment.app.FragmentActivity;
 import androidx.recyclerview.widget.GridLayoutManager;
@@ -128,6 +130,13 @@ import androidx.recyclerview.widget.RecyclerView;
 import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
 
 import static com.owncloud.android.datamodel.OCFile.ROOT_PATH;
+import static com.owncloud.android.utils.DisplayUtils.openSortingOrderDialogFragment;
+import static com.owncloud.android.utils.FileSortOrder.sort_a_to_z_id;
+import static com.owncloud.android.utils.FileSortOrder.sort_big_to_small_id;
+import static com.owncloud.android.utils.FileSortOrder.sort_new_to_old_id;
+import static com.owncloud.android.utils.FileSortOrder.sort_old_to_new_id;
+import static com.owncloud.android.utils.FileSortOrder.sort_small_to_big_id;
+import static com.owncloud.android.utils.FileSortOrder.sort_z_to_a_id;
 
 /**
  * A Fragment that lists all files and folders in a given path.
@@ -352,9 +361,17 @@ public class OCFileListFragment extends ExtendedListFragment implements
         }
         prepareCurrentSearch(searchEvent);
 
-        if (isGridViewPreferred(getCurrentFile())) {
-            switchToGridView();
-        }
+        mSortButton.setOnClickListener(v -> openSortingOrderDialogFragment(requireFragmentManager(),
+                                                                           preferences.getSortOrderByFolder(mFile)));
+
+        mSwitchGridViewButton.setOnClickListener(v -> {
+            if (isGridEnabled()) {
+                setListAsPreferred();
+            } else {
+                setGridAsPreferred();
+            }
+            setGridSwitchButton();
+        });
 
         setTitle();
 
@@ -528,7 +545,9 @@ public class OCFileListFragment extends ExtendedListFragment implements
 
     @Override
     public void onHeaderClicked() {
-        ((FileDisplayActivity) mContainerActivity).startRichWorkspacePreview(getCurrentFile());
+        if (!getAdapter().isMultiSelect()) {
+            ((FileDisplayActivity) mContainerActivity).startRichWorkspacePreview(getCurrentFile());
+        }
     }
 
     @Override
@@ -745,12 +764,11 @@ public class OCFileListFragment extends ExtendedListFragment implements
 
     @Override
     public void onPrepareOptionsMenu(@NonNull Menu menu) {
-        Menu mMenu = menu;
 
         if (mOriginalMenuItems.size() == 0) {
-            mOriginalMenuItems.add(mMenu.findItem(R.id.action_switch_view));
-            mOriginalMenuItems.add(mMenu.findItem(R.id.action_sort));
-            mOriginalMenuItems.add(mMenu.findItem(R.id.action_search));
+            mOriginalMenuItems.add(menu.findItem(R.id.action_switch_view));
+            mOriginalMenuItems.add(menu.findItem(R.id.action_sort));
+            mOriginalMenuItems.add(menu.findItem(R.id.action_search));
         }
 
         changeGridIcon(menu);   // this is enough if the option stays out of the action bar
@@ -763,6 +781,7 @@ public class OCFileListFragment extends ExtendedListFragment implements
                 menu.add(menuItemOrig.getGroupId(), menuItemOrig.getItemId(), menuItemOrig.getOrder(),
                          menuItemOrig.getTitle());
             }
+            mSortButton.setVisibility(View.VISIBLE);
 
         } else if (menuItemAddRemoveValue == MenuItemAddRemove.ADD_GRID_AND_SORT) {
             if (menu.findItem(R.id.action_switch_view) == null) {
@@ -770,12 +789,14 @@ public class OCFileListFragment extends ExtendedListFragment implements
                 menu.add(menuItemOrig.getGroupId(), menuItemOrig.getItemId(), menuItemOrig.getOrder(),
                          menuItemOrig.getTitle());
             }
+            mSwitchGridViewButton.setVisibility(View.VISIBLE);
 
             if (menu.findItem(R.id.action_sort) == null) {
                 menuItemOrig = mOriginalMenuItems.get(1);
                 menu.add(menuItemOrig.getGroupId(), menuItemOrig.getItemId(), menuItemOrig.getOrder(),
                          menuItemOrig.getTitle());
             }
+            mSortButton.setVisibility(View.VISIBLE);
         } else if (menuItemAddRemoveValue == MenuItemAddRemove.REMOVE_SEARCH) {
             menu.removeItem(R.id.action_search);
         } else if (menuItemAddRemoveValue == MenuItemAddRemove.ADD_GRID_AND_SORT_WITH_SEARCH) {
@@ -784,12 +805,14 @@ public class OCFileListFragment extends ExtendedListFragment implements
                 menu.add(menuItemOrig.getGroupId(), menuItemOrig.getItemId(), menuItemOrig.getOrder(),
                          menuItemOrig.getTitle());
             }
+            mSwitchGridViewButton.setVisibility(View.VISIBLE);
 
             if (menu.findItem(R.id.action_sort) == null) {
                 menuItemOrig = mOriginalMenuItems.get(1);
                 menu.add(menuItemOrig.getGroupId(), menuItemOrig.getItemId(), menuItemOrig.getOrder(),
                          menuItemOrig.getTitle());
             }
+            mSortButton.setVisibility(View.VISIBLE);
 
             if (menu.findItem(R.id.action_search) == null) {
                 menuItemOrig = mOriginalMenuItems.get(2);
@@ -799,10 +822,13 @@ public class OCFileListFragment extends ExtendedListFragment implements
         } else if (menuItemAddRemoveValue == MenuItemAddRemove.REMOVE_SORT) {
             menu.removeItem(R.id.action_sort);
             menu.removeItem(R.id.action_search);
+            mSortButton.setVisibility(View.GONE);
         } else if (menuItemAddRemoveValue == MenuItemAddRemove.REMOVE_GRID_AND_SORT) {
             menu.removeItem(R.id.action_sort);
             menu.removeItem(R.id.action_switch_view);
             menu.removeItem(R.id.action_search);
+            mSortButton.setVisibility(View.GONE);
+            mSwitchGridViewButton.setVisibility(View.GONE);
         }
     }
 
@@ -1270,6 +1296,9 @@ public class OCFileListFragment extends ExtendedListFragment implements
             switchToListView();
         }
 
+        setSortButton(preferences.getSortOrderByFolder(mFile));
+        setGridSwitchButton();
+
         if (mHideFab) {
             setFabVisible(false);
         } else {
@@ -1291,9 +1320,46 @@ public class OCFileListFragment extends ExtendedListFragment implements
 
 
     public void sortFiles(FileSortOrder sortOrder) {
+        setSortButton(sortOrder);
         mAdapter.setSortOrder(mFile, sortOrder);
     }
 
+    private void setSortButton(FileSortOrder sortOrder) {
+        int nameId;
+        switch (sortOrder.name) {
+            case sort_z_to_a_id:
+                nameId = R.string.menu_item_sort_by_name_z_a;
+                break;
+            case sort_new_to_old_id:
+                nameId = R.string.menu_item_sort_by_date_newest_first;
+                break;
+            case sort_old_to_new_id:
+                nameId = R.string.menu_item_sort_by_date_oldest_first;
+                break;
+            case sort_big_to_small_id:
+                nameId = R.string.menu_item_sort_by_size_biggest_first;
+                break;
+            case sort_small_to_big_id:
+                nameId = R.string.menu_item_sort_by_size_smallest_first;
+                break;
+            case sort_a_to_z_id:
+            default:
+                nameId = R.string.menu_item_sort_by_name_a_z;
+                break;
+        }
+        mSortButton.setText(getString(nameId));
+    }
+
+    private void setGridSwitchButton() {
+        if (isGridEnabled()) {
+            mSwitchGridViewButton.setContentDescription(getString(R.string.action_switch_list_view));
+            mSwitchGridViewButton.setIcon(ContextCompat.getDrawable(requireContext(), R.drawable.ic_view_list));
+        } else {
+            mSwitchGridViewButton.setContentDescription(getString(R.string.action_switch_grid_view));
+            mSwitchGridViewButton.setIcon(ContextCompat.getDrawable(requireContext(), R.drawable.ic_view_module));
+        }
+    }
+
     /**
      * Determines if user set folder to grid or list view. If folder is not set itself,
      * it finds a parent that is set (at least root is set).

+ 2 - 4
src/main/java/com/owncloud/android/ui/helpers/FileOperationsHelper.java

@@ -9,7 +9,7 @@
  *
  * Copyright (C) 2015 ownCloud Inc.
  * Copyright (C) 2018 Andy Scherzinger
- * Copyright (C) 2019 Chris Narkiewicz <hello@ezaquarii.com>
+ * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2,
@@ -45,7 +45,6 @@ import android.util.Log;
 import android.view.View;
 import android.webkit.MimeTypeMap;
 
-import com.evernote.android.job.JobRequest;
 import com.nextcloud.client.account.CurrentAccountProvider;
 import com.nextcloud.client.account.User;
 import com.nextcloud.client.network.ConnectivityService;
@@ -219,8 +218,7 @@ public class FileOperationsHelper {
             }
 
             // if offline or walled garden, show old version with warning
-            if (connectivityService.getActiveNetworkType() == JobRequest.NetworkType.ANY ||
-                    connectivityService.isInternetWalled()) {
+            if (!connectivityService.getConnectivity().isConnected() || connectivityService.isInternetWalled()) {
                 DisplayUtils.showSnackMessage(fileActivity, R.string.file_not_synced);
                 EventBus.getDefault().post(new SyncEventFinished(intent));
 

+ 5 - 8
src/main/java/com/owncloud/android/ui/trashbin/TrashbinActivity.java

@@ -63,6 +63,8 @@ import butterknife.BindView;
 import butterknife.ButterKnife;
 import butterknife.Unbinder;
 
+import static com.owncloud.android.utils.DisplayUtils.openSortingOrderDialogFragment;
+
 /**
  * Presenting trashbin data, received from presenter
  */
@@ -177,14 +179,9 @@ public class TrashbinActivity extends FileActivity implements
                 }
                 break;
             case R.id.action_sort: {
-                FragmentManager fm = getSupportFragmentManager();
-                FragmentTransaction ft = fm.beginTransaction();
-                ft.addToBackStack(null);
-
-                SortingOrderDialogFragment mSortingOrderDialogFragment = SortingOrderDialogFragment.newInstance(
-                    preferences.getSortOrderByType(FileSortOrder.Type.trashBinView, FileSortOrder.sort_new_to_old));
-                mSortingOrderDialogFragment.show(ft, SortingOrderDialogFragment.SORTING_ORDER_FRAGMENT);
-
+                openSortingOrderDialogFragment(getSupportFragmentManager(),
+                                               preferences.getSortOrderByType(FileSortOrder.Type.trashBinView,
+                                                                              FileSortOrder.sort_new_to_old));
                 break;
             }
             case R.id.action_empty_trashbin:

+ 12 - 0
src/main/java/com/owncloud/android/utils/DisplayUtils.java

@@ -69,6 +69,7 @@ import com.owncloud.android.lib.common.OwnCloudAccount;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.ui.TextDrawable;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
+import com.owncloud.android.ui.dialog.SortingOrderDialogFragment;
 import com.owncloud.android.ui.events.SearchEvent;
 import com.owncloud.android.ui.fragment.OCFileListFragment;
 import com.owncloud.android.utils.glide.CustomGlideUriLoader;
@@ -97,6 +98,10 @@ import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
 import androidx.annotation.StringRes;
 import androidx.appcompat.widget.AppCompatDrawableManager;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
+import static com.owncloud.android.ui.dialog.SortingOrderDialogFragment.SORTING_ORDER_FRAGMENT;
 
 /**
  * A helper class for UI/display related operations.
@@ -740,4 +745,11 @@ public final class DisplayUtils {
         Toast.makeText(activity, errorMessage, Toast.LENGTH_LONG).show();
         activity.finish();
     }
+
+    static public void openSortingOrderDialogFragment(FragmentManager supportFragmentManager, FileSortOrder sortOrder) {
+        FragmentTransaction fragmentTransaction = supportFragmentManager.beginTransaction();
+        fragmentTransaction.addToBackStack(null);
+
+        SortingOrderDialogFragment.newInstance(sortOrder).show(fragmentTransaction, SORTING_ORDER_FRAGMENT);
+    }
 }

+ 13 - 7
src/main/java/com/owncloud/android/utils/FileSortOrder.java

@@ -34,18 +34,24 @@ import java.util.Map;
  */
 
 public class FileSortOrder {
-    public static final FileSortOrder sort_a_to_z = new FileSortOrderByName("sort_a_to_z", true);
-    public static final FileSortOrder sort_z_to_a = new FileSortOrderByName("sort_z_to_a", false);
-    public static final FileSortOrder sort_old_to_new = new FileSortOrderByDate("sort_old_to_new", true);
-    public static final FileSortOrder sort_new_to_old = new FileSortOrderByDate("sort_new_to_old", false);
-    public static final FileSortOrder sort_small_to_big = new FileSortOrderBySize("sort_small_to_big", true);
-    public static final FileSortOrder sort_big_to_small = new FileSortOrderBySize("sort_big_to_small", false);
+    public static final String sort_a_to_z_id = "sort_a_to_z";
+    public static final String sort_z_to_a_id = "sort_z_to_a";
+    public static final String sort_old_to_new_id = "sort_old_to_new";
+    public static final String sort_new_to_old_id = "sort_new_to_old";
+    public static final String sort_small_to_big_id = "sort_small_to_big";
+    public static final String sort_big_to_small_id = "sort_big_to_small";
+
+    public static final FileSortOrder sort_a_to_z = new FileSortOrderByName(sort_a_to_z_id, true);
+    public static final FileSortOrder sort_z_to_a = new FileSortOrderByName(sort_z_to_a_id, false);
+    public static final FileSortOrder sort_old_to_new = new FileSortOrderByDate(sort_old_to_new_id, true);
+    public static final FileSortOrder sort_new_to_old = new FileSortOrderByDate(sort_new_to_old_id, false);
+    public static final FileSortOrder sort_small_to_big = new FileSortOrderBySize(sort_small_to_big_id, true);
+    public static final FileSortOrder sort_big_to_small = new FileSortOrderBySize(sort_big_to_small_id, false);
 
     public static final Map<String, FileSortOrder> sortOrders;
 
     public enum Type {
         trashBinView, localFileListView, uploadFilesView
-
     }
     static {
         sortOrders = new HashMap<>();

+ 2 - 4
src/main/java/com/owncloud/android/utils/FilesSyncHelper.java

@@ -6,7 +6,7 @@
  *
  * Copyright (C) 2017 Mario Danic
  * Copyright (C) 2017 Nextcloud
- * Copyright (C) 2019 Chris Narkiewicz <hello@ezaquarii.com>
+ * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -31,7 +31,6 @@ import android.net.Uri;
 import android.os.Build;
 import android.provider.MediaStore;
 
-import com.evernote.android.job.JobRequest;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.core.Clock;
 import com.nextcloud.client.device.PowerManagementService;
@@ -205,8 +204,7 @@ public final class FilesSyncHelper {
         }
 
         new Thread(() -> {
-            if (connectivityService.getActiveNetworkType() != JobRequest.NetworkType.ANY &&
-                    !connectivityService.isInternetWalled()) {
+            if (connectivityService.getConnectivity().isConnected() && !connectivityService.isInternetWalled()) {
                 FileUploader.retryFailedUploads(
                     context,
                     null,

+ 2 - 4
src/main/java/com/owncloud/android/utils/ReceiversHelper.java

@@ -5,7 +5,7 @@
  * @author Chris Narkiewicz
  * Copyright (C) 2017 Mario Danic
  * Copyright (C) 2017 Nextcloud
- * Copyright (C) 2019 Chris Narkiewicz <hello@ezaquarii.com>
+ * Copyright (C) 2020 Chris Narkiewicz <hello@ezaquarii.com>
  *
  * This program is free software; you can redistribute it and/or
  * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -27,8 +27,6 @@ import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
 
-import com.evernote.android.job.JobRequest;
-import com.evernote.android.job.util.Device;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.device.PowerManagementService;
 import com.nextcloud.client.network.ConnectivityService;
@@ -57,7 +55,7 @@ public final class ReceiversHelper {
         BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
             @Override
             public void onReceive(Context context, Intent intent) {
-                if (!Device.getNetworkType(context).equals(JobRequest.NetworkType.ANY)) {
+                if (connectivityService.getConnectivity().isConnected()) {
                     FilesSyncHelper.restartJobsIfNeeded(uploadsStorageManager,
                                                         accountManager,
                                                         connectivityService,

+ 19 - 17
src/main/res/drawable/account_circle_white.xml

@@ -1,23 +1,25 @@
 <!--
-    @author Google LLC
-    Copyright (C) 2018 Google LLC
+  Nextcloud Android client application
 
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
+  Copyright (C) 2020 Nextcloud.
 
-    http://www.apache.org/licenses/LICENSE-2.0
+  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.
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+  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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#FFF" android:pathData="M12,19.2C9.5,19.2 7.29,17.92 6,16C6.03,14 10,12.9 12,12.9C14,12.9 17.97,14 18,16C16.71,17.92 14.5,19.2 12,19.2M12,5A3,3 0 0,1 15,8A3,3 0 0,1 12,11A3,3 0 0,1 9,8A3,3 0 0,1 12,5M12,2A10,10 0 0,0 2,12A10,10 0 0,0 12,22A10,10 0 0,0 22,12C22,6.47 17.5,2 12,2Z" />
+<vector android:height="24dp" android:tint="#FFFFFF"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/>
 </vector>

+ 19 - 17
src/main/res/drawable/all_files.xml

@@ -1,23 +1,25 @@
 <!--
-    @author Google LLC
-    Copyright (C) 2019 Google LLC
+  Nextcloud Android client application
 
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
+  Copyright (C) 2020 Nextcloud.
 
-    http://www.apache.org/licenses/LICENSE-2.0
+  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.
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+  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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#757575" android:pathData="M10,4H4C2.89,4 2,4.89 2,6V18A2,2 0 0,0 4,20H20A2,2 0 0,0 22,18V8C22,6.89 21.1,6 20,6H12L10,4Z" />
+<vector android:height="24dp" android:tint="#333333"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M10,4H4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8c0,-1.1 -0.9,-2 -2,-2h-8l-2,-2z"/>
 </vector>

+ 7 - 10
src/main/res/drawable/arrow_right.xml

@@ -1,8 +1,7 @@
 <!--
   Nextcloud Android client application
 
-  Copyright (C) 2016 Andy Scherzinger
-  Copyright (C) 2016 Nextcloud.
+  Copyright (C) 2020 Nextcloud.
 
   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
@@ -16,13 +15,11 @@
 
   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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:height="24dp"
-        android:width="24dp"
-        android:viewportWidth="24"
-        android:viewportHeight="24">
-    <path
-        android:fillColor="#ffffff"
-        android:pathData="M4,11V13H16L10.5,18.5L11.92,19.92L19.84,12L11.92,4.08L10.5,5.5L16,11H4Z"/>
+<vector android:height="24dp" android:tint="#FFFFFF"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M12,4l-1.41,1.41L16.17,11H4v2h12.17l-5.58,5.59L12,20l8,-8z"/>
 </vector>

+ 24 - 12
src/main/res/drawable/favorite.xml

@@ -1,13 +1,25 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="16dp"
-        android:height="16dp"
-        android:viewportWidth="16"
-        android:viewportHeight="16">
-
-    <path
-        android:fillColor="#ffcc00"
-        android:strokeColor="#ffffff"
-        android:strokeWidth="0.46367699"
-        android:pathData="M 7.9999993,1.0934068 10.040178,6.0083827 15.418832,6.4256921 11.245738,9.9032694 12.636769,15.003716 7.9999993,12.128919 3.3632295,15.003716 4.7542604,9.9032694 0.5811676,6.4256921 5.9598206,6.0083827 Z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#F7CD46"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
 </vector>

+ 24 - 3
src/main/res/drawable/file_application.xml

@@ -1,4 +1,25 @@
-<vector android:height="72dp" android:viewportHeight="16"
-    android:viewportWidth="16" android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#969696" android:pathData="m6.94,0.5c-0.24,0 -0.44,0.2 -0.44,0.44v1.26c-0.5,0.14 -1.05,0.35 -1.53,0.65l-0.91,-0.91c-0.16,-0.18 -0.46,-0.19 -0.62,0l-1.5,1.5c-0.18,0.17 -0.18,0.46 0,0.62l0.91,0.91c-0.284,0.48 -0.5,1 -0.65,1.53h-1.26c-0.24,0 -0.44,0.2 -0.44,0.44v2.12c0,0.25 0.19,0.44 0.44,0.44h1.26c0.14,0.54 0.36,1.05 0.65,1.53l-0.91,0.91c-0.18,0.17 -0.18,0.45 0,0.62l1.5,1.5c0.18,0.18 0.46,0.18 0.62,0l0.91,-0.91c0.48,0.285 1,0.5 1.53,0.65v1.26c0,0.25 0.2,0.44 0.44,0.44h2.12c0.24,0 0.45,-0.2 0.44,-0.44v-1.26c0.54,-0.14 1.05,-0.36 1.53,-0.65l0.91,0.91c0.17,0.18 0.45,0.18 0.62,0l1.5,-1.5c0.18,-0.17 0.18,-0.45 0,-0.62l-0.91,-0.91c0.29,-0.48 0.5,-1 0.65,-1.53h1.26c0.24,0 0.45,-0.2 0.44,-0.44v-2.12c0,-0.24 -0.2,-0.44 -0.44,-0.44h-1.26c-0.14,-0.54 -0.36,-1.05 -0.65,-1.53l0.91,-0.91c0.18,-0.17 0.18,-0.45 0,-0.62l-1.5,-1.5c-0.17,-0.18 -0.45,-0.18 -0.62,0l-0.91,0.91c-0.48,-0.29 -1,-0.5 -1.53,-0.65v-1.26c0,-0.24 -0.2,-0.44 -0.44,-0.44h-2.12zM8,4.5a3.5,3.5 0,0 1,3.5 3.5,3.5 3.5,0 0,1 -3.5,3.5 3.5,3.5 0,0 1,-3.5 -3.5,3.5 3.5,0 0,1 3.5,-3.5z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#969696"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M19.1,12.9a2.8,2.8 0,0 0,0.1 -0.9,2.8 2.8,0 0,0 -0.1,-0.9l2.1,-1.6a0.7,0.7 0,0 0,0.1 -0.6L19.4,5.5a0.7,0.7 0,0 0,-0.6 -0.2l-2.4,1a6.5,6.5 0,0 0,-1.6 -0.9l-0.4,-2.6a0.5,0.5 0,0 0,-0.5 -0.4H10.1a0.5,0.5 0,0 0,-0.5 0.4L9.3,5.4a5.6,5.6 0,0 0,-1.7 0.9l-2.4,-1a0.4,0.4 0,0 0,-0.5 0.2l-2,3.4c-0.1,0.2 0,0.4 0.2,0.6l2,1.6a2.8,2.8 0,0 0,-0.1 0.9,2.8 2.8,0 0,0 0.1,0.9L2.8,14.5a0.7,0.7 0,0 0,-0.1 0.6l1.9,3.4a0.7,0.7 0,0 0,0.6 0.2l2.4,-1a6.5,6.5 0,0 0,1.6 0.9l0.4,2.6a0.5,0.5 0,0 0,0.5 0.4h3.8a0.5,0.5 0,0 0,0.5 -0.4l0.3,-2.6a5.6,5.6 0,0 0,1.7 -0.9l2.4,1a0.4,0.4 0,0 0,0.5 -0.2l2,-3.4c0.1,-0.2 0,-0.4 -0.2,-0.6ZM12,15.6A3.6,3.6 0,1 1,15.6 12,3.6 3.6,0 0,1 12,15.6Z"/>
 </vector>

+ 24 - 3
src/main/res/drawable/file_calendar.xml

@@ -1,4 +1,25 @@
-<vector android:height="72dp" android:viewportHeight="16"
-    android:viewportWidth="16" android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#969696" android:pathData="m4,1c-0.5,0 -1,0.5 -1,1v2c0,0.5 0.5,1 1,1s1,-0.5 1,-1v-2c0,-0.5 -0.5,-1 -1,-1zM12,1c-0.5,0 -1,0.5 -1,1v2c0,0.5 0.5,1 1,1s1,-0.5 1,-1v-2c0,-0.5 -0.5,-1 -1,-1zM5.5,3v1c0,0.831 -0.5,1.5 -1.5,1.5s-1.5,-0.5 -1.5,-1.5v-0.9375c-0.8841,0.227 -1.5,1.0247 -1.5,1.9375v8c0,1.108 0.892,2 2,2h10c1.108,0 2,-0.892 2,-2v-8c0,-0.9128 -0.6159,-1.7105 -1.5,-1.9375v0.9375c0,0.831 -0.5,1.5 -1.5,1.5s-1.5,-0.5 -1.5,-1.5v-1zM13,8v5h-10v-5z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#969696"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M9,11L7,11v2h2v-2zM13,11h-2v2h2v-2zM17,11h-2v2h2v-2zM19,4h-1L18,2h-2v2L8,4L8,2L6,2v2L5,4c-1.11,0 -1.99,0.9 -1.99,2L3,20c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,6c0,-1.1 -0.9,-2 -2,-2zM19,20L5,20L5,9h14v11z"/>
 </vector>

+ 24 - 8
src/main/res/drawable/file_code.xml

@@ -1,9 +1,25 @@
-<vector android:height="72dp" android:viewportHeight="16"
-    android:viewportWidth="16" android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#00000000"
-        android:pathData="m6.3,3.714 l-4.3716,4.286 4.3716,4.286"
-        android:strokeColor="#969696" android:strokeWidth="2"/>
-    <path android:fillColor="#00000000"
-        android:pathData="m9.7,12.286 l4.372,-4.286 -4.372,-4.286"
-        android:strokeColor="#969696" android:strokeWidth="2"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#969696"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M9.4,16.6L4.8,12l4.6,-4.6L8,6l-6,6 6,6 1.4,-1.4zM14.6,16.6l4.6,-4.6 -4.6,-4.6L16,6l6,6 -6,6 -1.4,-1.4z"/>
 </vector>

+ 20 - 0
src/main/res/drawable/file_doc.xml

@@ -1,3 +1,23 @@
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
 <vector android:height="72dp" android:viewportHeight="16"
     android:viewportWidth="16" android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
     <path android:fillColor="#49abea" android:pathData="m2.5,1c-0.28,0 -0.5,0.22 -0.5,0.5v13c0,0.28 0.22,0.5 0.5,0.5h11c0.28,0 0.5,-0.22 0.5,-0.5v-10.5l-3,-3h-8.5zM4,3h6v1h-6v-1zM4,6h5v1h-5v-1zM4,9h8v1h-8v-1zM4,12h4v1h-4v-1z"/>

+ 4 - 3
src/main/res/drawable/file_image.xml

@@ -1,4 +1,5 @@
-<vector android:height="72dp" android:viewportHeight="16"
-    android:viewportWidth="16" android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#969696" android:pathData="m1.5,2c-0.2,0 -0.5,0.3 -0.5,0.5v11c0,0.2 0.3,0.5 0.5,0.5h13c0.2,0 0.5,-0.3 0.5,-0.5v-11c0,-0.2 -0.3,-0.5 -0.5,-0.5zM2,3h12v5l-1,-1 -3,4 -3,-3 -4,4h-1zM4.5,4c-0.83,0 -1.5,0.67 -1.5,1.5s0.67,1.5 1.5,1.5 1.5,-0.67 1.5,-1.5 -0.67,-1.5 -1.5,-1.5z"/>
+<vector android:height="24dp" android:tint="#969696"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M21,19V5c0,-1.1 -0.9,-2 -2,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2zM8.5,13.5l2.5,3.01L14.5,12l4.5,6H5l3.5,-4.5z"/>
 </vector>

+ 24 - 3
src/main/res/drawable/file_movie.xml

@@ -1,4 +1,25 @@
-<vector android:height="72dp" android:viewportHeight="16"
-    android:viewportWidth="16" android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#969696" android:pathData="m1.5,2c-0.2,0.05 -0.5,0.29 -0.5,0.5v11c0,0.23 0.274,0.5 0.5,0.5h13c0.34,0 0.5,-0.26 0.5,-0.5v-11c0,-0.34 -0.249,-0.5 -0.5,-0.5zM2,3h12v10h-12zM5,5v6l6,-3z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#969696"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M21,3L3,3c-1.11,0 -2,0.89 -2,2v12c0,1.1 0.89,2 2,2h5v2h8v-2h5c1.1,0 1.99,-0.9 1.99,-2L23,5c0,-1.11 -0.9,-2 -2,-2zM21,17L3,17L3,5h18v12zM16,11l-7,4L9,7z"/>
 </vector>

+ 24 - 5
src/main/res/drawable/folder.xml

@@ -1,6 +1,25 @@
-<vector android:height="72dp" android:viewportHeight="17.066668"
-    android:viewportWidth="17.066668" android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillAlpha="1" android:fillColor="#0082c9"
-        android:fillType="evenOdd"
-        android:pathData="m1.5541,2.1301c-0.2667,0 -0.4907,0.224 -0.4907,0.4907v11.8187c0,0.2773 0.2155,0.4907 0.4907,0.4907H15.5061c0.2752,0 0.4907,-0.2133 0.4907,-0.4907V4.7573c0,-0.2667 -0.224,-0.4939 -0.4907,-0.4939H8.5301L6.3968,2.1301Z" android:strokeWidth="1.06666672"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#3781C3"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M10,4H4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8c0,-1.1 -0.9,-2 -2,-2h-8l-2,-2z"/>
 </vector>

+ 22 - 15
src/main/res/drawable/ic_account_plus.xml

@@ -1,23 +1,30 @@
 <!--
-    @author Google LLC
-    Copyright (C) 2018 Google LLC
+  Nextcloud Android client application
 
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
+  Copyright (C) 2020 Nextcloud.
 
-    http://www.apache.org/licenses/LICENSE-2.0
+  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.
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+  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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
     android:width="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#757575" android:pathData="M15,14C12.33,14 7,15.33 7,18V20H23V18C23,15.33 17.67,14 15,14M6,10V7H4V10H1V12H4V15H6V12H9V10M15,12A4,4 0 0,0 19,8A4,4 0 0,0 15,4A4,4 0 0,0 11,8A4,4 0 0,0 15,12Z" />
+    android:height="24dp"
+    android:tint="#666666"
+    android:viewportWidth="24.0"
+    android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M15,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM6,10L6,7L4,7v3L1,10v2h3v3h2v-3h3v-2L6,10zM15,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z" />
 </vector>

+ 1 - 1
src/main/res/drawable/ic_activity.xml

@@ -6,7 +6,7 @@
         android:viewportHeight="32">
 
     <path
-        android:fillColor="#757575"
+        android:fillColor="#333333"
         android:strokeWidth="0.96784461"
         android:pathData="M 16,1.9491526 6,18.810169 H 17 L 16,30.050847 26,13.189831 H 15 Z"/>
 </vector>

+ 0 - 6
src/main/res/drawable/ic_activity_light_grey.xml

@@ -1,6 +0,0 @@
-<vector android:alpha="0.5" android:height="72dp"
-    android:viewportHeight="32" android:viewportWidth="32"
-    android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#FF969696"
-        android:pathData="M16,1.9492 L6,18.8102H17L16,30.0508 26,13.1898H15Z"/>
-</vector>

+ 24 - 10
src/main/res/drawable/ic_delete.xml

@@ -1,11 +1,25 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="16dp"
-        android:height="16dp"
-        android:viewportWidth="16"
-        android:viewportHeight="16">
-
-    <path
-        android:fillColor="#c4c4c4"
-        android:pathData="M6.5,1 L6,2 L3,2 C2.446,2,2,2.446,2,3 L2,4 L14,4 L14,3 C14,2.446,13.554,2,13,2 L10,2 L9.5,1 Z M3,5 L3.875,14 C3.935,14.55,4.448,15,5,15 L11,15 C11.552,15,12.064,14.55,12.125,14 L13,5 Z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#C4C4C4"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
 </vector>

+ 19 - 13
src/main/res/drawable/ic_dots_vertical.xml

@@ -1,23 +1,29 @@
 <!--
-    @author Google LLC
-    Copyright (C) 2018 Google LLC
+  Nextcloud Android client application
 
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
+  Copyright (C) 2020 Nextcloud.
 
-    http://www.apache.org/licenses/LICENSE-2.0
+  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.
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+  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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
     android:width="24dp"
+    android:height="24dp"
     android:viewportWidth="24"
     android:viewportHeight="24">
-    <path android:fillColor="#757575" android:pathData="M12,16A2,2 0 0,1 14,18A2,2 0 0,1 12,20A2,2 0 0,1 10,18A2,2 0 0,1 12,16M12,10A2,2 0 0,1 14,12A2,2 0 0,1 12,14A2,2 0 0,1 10,12A2,2 0 0,1 12,10M12,4A2,2 0 0,1 14,6A2,2 0 0,1 12,8A2,2 0 0,1 10,6A2,2 0 0,1 12,4Z" />
+  <path
+      android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"
+      android:fillColor="#666666"/>
 </vector>

+ 9 - 0
src/main/res/drawable/ic_keyboard_arrow_down.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M7.41,7.84L12,12.42l4.59,-4.58L18,9.25l-6,6 -6,-6z"/>
+</vector>

+ 23 - 5
src/main/res/drawable/ic_list_empty_folder.xml

@@ -1,7 +1,25 @@
-<vector android:alpha="0.5" android:height="72dp"
-    android:viewportHeight="17.066668" android:viewportWidth="17.066668"
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="72dp" android:tint="#17597D"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
     android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillAlpha="1" android:fillColor="#FF0082c9"
-        android:fillType="evenOdd"
-        android:pathData="m1.5541,2.1301c-0.2667,0 -0.4907,0.224 -0.4907,0.4907v11.8187c0,0.2773 0.2155,0.4907 0.4907,0.4907H15.5061c0.2752,0 0.4907,-0.2133 0.4907,-0.4907V4.7573c0,-0.2667 -0.224,-0.4939 -0.4907,-0.4939H8.5301L6.3968,2.1301Z" android:strokeWidth="1.06666672"/>
+    <path android:fillColor="#FF000000" android:pathData="M10,4H4c-1.1,0 -1.99,0.9 -1.99,2L2,18c0,1.1 0.9,2 2,2h16c1.1,0 2,-0.9 2,-2V8c0,-1.1 -0.9,-2 -2,-2h-8l-2,-2z"/>
 </vector>

+ 23 - 3
src/main/res/drawable/ic_list_empty_image.xml

@@ -1,5 +1,25 @@
-<vector android:alpha="0.5" android:height="72dp"
-    android:viewportHeight="16" android:viewportWidth="16"
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="72dp" android:tint="#626364"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
     android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#FF969696" android:pathData="m1.5,2c-0.2,0 -0.5,0.3 -0.5,0.5v11c0,0.2 0.3,0.5 0.5,0.5h13c0.2,0 0.5,-0.3 0.5,-0.5v-11c0,-0.2 -0.3,-0.5 -0.5,-0.5zM2,3h12v5l-1,-1 -3,4 -3,-3 -4,4h-1zM4.5,4c-0.83,0 -1.5,0.67 -1.5,1.5s0.67,1.5 1.5,1.5 1.5,-0.67 1.5,-1.5 -0.67,-1.5 -1.5,-1.5z"/>
+    <path android:fillColor="#FF000000" android:pathData="M21,19V5c0,-1.1 -0.9,-2 -2,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2zM8.5,13.5l2.5,3.01L14.5,12l4.5,6H5l3.5,-4.5z"/>
 </vector>

+ 23 - 4
src/main/res/drawable/ic_list_empty_recent.xml

@@ -1,6 +1,25 @@
-<vector android:alpha="0.5" android:height="72dp"
-    android:viewportHeight="16" android:viewportWidth="16"
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="72dp" android:tint="#626364"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
     android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillAlpha="1" android:fillColor="#FF969696"
-        android:pathData="M8,0.5424C3.8927,0.5424 0.5424,3.8927 0.5424,8c0,4.1073 3.3503,7.4576 7.4576,7.4576 4.1073,0 7.4576,-3.3503 7.4576,-7.4576C15.4576,3.8927 12.1073,0.5424 8,0.5424ZM8,2.4068c3.1005,0 5.5932,2.4927 5.5932,5.5932 0,3.1005 -2.4927,5.5932 -5.5932,5.5932C4.8995,13.5932 2.4068,11.1005 2.4068,8 2.4068,4.8995 4.8995,2.4068 8,2.4068ZM7.5898,3.2756A0.5752,0.5752 0,0 0,7.0258 3.847L6.2316,7.986V8C6.061,8.7038 6.5458,8.9322 7.0864,9.2603h0.0047L9.8858,10.7332C10.4946,11.2012 11.1975,10.2895 10.5887,9.8197L8.9322,8.0093V8L8.1771,3.8517A0.5752,0.5752 0,0 0,7.5898 3.2756Z" android:strokeWidth="0.93220341"/>
+    <path android:fillColor="#FF000000" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8zM12.5,7H11v6l5.25,3.15 0.75,-1.23 -4.5,-2.67z"/>
 </vector>

+ 23 - 5
src/main/res/drawable/ic_list_empty_shared.xml

@@ -1,7 +1,25 @@
-<vector android:alpha="0.5" android:height="72dp"
-    android:viewportHeight="16" android:viewportWidth="16"
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="72dp" android:tint="#626364"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
     android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillAlpha="0.8" android:fillColor="#FF969696"
-        android:pathData="M12.228,1a2.457,2.457 0,0 0,-2.46 2.454c0,0.075 0.01,0.15 0.016,0.224L5.05,6.092a2.445,2.445 0,0 0,-1.596 -0.586A2.453,2.453 0,0 0,1 7.96a2.453,2.453 0,0 0,2.454 2.455,2.45 2.45,0 0,0 1.46,-0.477l4.865,2.474c-0.004,0.044 -0.01,0.09 -0.01,0.134a2.457,2.457 0,1 0,0.804 -1.818l-4.696,-2.4c0.02,-0.123 0.035,-0.25 0.035,-0.378 0,-0.072 -0.01,-0.144 -0.015,-0.214l4.74,-2.414A2.457,2.457 0,1 0,12.228 0.99z"
-        android:strokeAlpha="0.8" android:strokeColor="#ffffff" android:strokeWidth="0.2"/>
+    <path android:fillColor="#FF000000" android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
 </vector>

+ 23 - 3
src/main/res/drawable/ic_list_empty_video.xml

@@ -1,5 +1,25 @@
-<vector android:alpha="0.5" android:height="72dp"
-    android:viewportHeight="16" android:viewportWidth="16"
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="72dp" android:tint="#626364"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
     android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#FF969696" android:pathData="m1.5,2c-0.2,0.05 -0.5,0.29 -0.5,0.5v11c0,0.23 0.274,0.5 0.5,0.5h13c0.34,0 0.5,-0.26 0.5,-0.5v-11c0,-0.34 -0.249,-0.5 -0.5,-0.5zM2,3h12v10h-12zM5,5v6l6,-3z"/>
+    <path android:fillColor="#FF000000" android:pathData="M21,3L3,3c-1.11,0 -2,0.89 -2,2v12c0,1.1 0.89,2 2,2h5v2h8v-2h5c1.1,0 1.99,-0.9 1.99,-2L23,5c0,-1.11 -0.9,-2 -2,-2zM21,17L3,17L3,5h18v12zM16,11l-7,4L9,7z"/>
 </vector>

+ 4 - 22
src/main/res/drawable/ic_notification.xml

@@ -1,23 +1,5 @@
-<!--
-    @author Google LLC
-    Copyright (C) 2018 Google LLC
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:viewportHeight="16"
-    android:viewportWidth="16"
-    android:width="24dp">
-    <path android:fillColor="#757575" android:fillType="nonZero" android:pathData="M8,2C7.448,2 7,2.448 7,3C7,3.047 7.021,3.087 7.027,3.133C5.291,3.569 4,5.128 4,7L4,9L3,10L3,11L13,11L13,10L12,9L12,7C12,5.128 10.709,3.569 8.973,3.133C8.979,3.087 9,3.047 9,3C9,2.448 8.552,2 8,2ZM6,12C6,13.105 6.895,14 8,14C9.105,14 10,13.105 10,12L6,12Z"/>
+<vector android:height="24dp" android:tint="#333333"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z"/>
 </vector>

+ 0 - 5
src/main/res/drawable/ic_notification_light_grey.xml

@@ -1,5 +0,0 @@
-<vector android:alpha="0.5" android:height="72dp"
-    android:viewportHeight="16" android:viewportWidth="16"
-    android:width="72dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#FF969696" android:pathData="M8,2C7.448,2 7,2.448 7,3C7,3.047 7.021,3.087 7.027,3.133C5.291,3.569 4,5.128 4,7L4,9L3,10L3,11L13,11L13,10L12,9L12,7C12,5.128 10.709,3.569 8.973,3.133C8.979,3.087 9,3.047 9,3C9,2.448 8.552,2 8,2ZM6,12C6,13.105 6.895,14 8,14C9.105,14 10,13.105 10,12L6,12Z"/>
-</vector>

+ 19 - 17
src/main/res/drawable/ic_ok.xml

@@ -1,23 +1,25 @@
 <!--
-    @author Google LLC
-    Copyright (C) 2018 Google LLC
+  Nextcloud Android client application
 
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
+  Copyright (C) 2020 Nextcloud.
 
-    http://www.apache.org/licenses/LICENSE-2.0
+  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.
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+  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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#FFFFFF" android:pathData="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z" />
+<vector android:height="24dp" android:tint="#FFFFFF"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
 </vector>

+ 22 - 2
src/main/res/drawable/ic_people.xml

@@ -1,8 +1,28 @@
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="24dp"
         android:height="24dp"
-        android:viewportWidth="24"
-        android:viewportHeight="24">
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
     <path
         android:fillColor="#FF000000"
         android:pathData="M16,11c1.66,0 2.99,-1.34 2.99,-3S17.66,5 16,5c-1.66,0 -3,1.34 -3,3s1.34,3 3,3zM8,11c1.66,0 2.99,-1.34 2.99,-3S9.66,5 8,5C6.34,5 5,6.34 5,8s1.34,3 3,3zM8,13c-2.33,0 -7,1.17 -7,3.5L1,19h14v-2.5c0,-2.33 -4.67,-3.5 -7,-3.5zM16,13c-0.29,0 -0.62,0.02 -0.97,0.05 1.16,0.84 1.97,1.97 1.97,3.45L17,19h6v-2.5c0,-2.33 -4.67,-3.5 -7,-3.5z"/>

+ 19 - 19
src/main/res/drawable/ic_send.xml

@@ -1,25 +1,25 @@
 <!--
-    @author Google LLC
-    Copyright (C) 2018 Google LLC
+  Nextcloud Android client application
 
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
+  Copyright (C) 2020 Nextcloud.
 
-    http://www.apache.org/licenses/LICENSE-2.0
+  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.
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+  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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
-    android:height="24dp"
-    android:viewportHeight="24"
-    android:viewportWidth="24">
-    <path
-        android:fillColor="#757575"
-        android:pathData="M2,21L23,12L2,3V10L17,12L2,14V21Z" />
+<vector android:height="24dp" android:tint="#666666"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M2.01,21L23,12 2.01,3 2,10l15,2 -15,2z"/>
 </vector>

+ 24 - 7
src/main/res/drawable/ic_settings.xml

@@ -1,8 +1,25 @@
-<!-- drawable/settings.xml -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#757575" android:pathData="M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z" />
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#666666"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M19.1,12.9a2.8,2.8 0,0 0,0.1 -0.9,2.8 2.8,0 0,0 -0.1,-0.9l2.1,-1.6a0.7,0.7 0,0 0,0.1 -0.6L19.4,5.5a0.7,0.7 0,0 0,-0.6 -0.2l-2.4,1a6.5,6.5 0,0 0,-1.6 -0.9l-0.4,-2.6a0.5,0.5 0,0 0,-0.5 -0.4H10.1a0.5,0.5 0,0 0,-0.5 0.4L9.3,5.4a5.6,5.6 0,0 0,-1.7 0.9l-2.4,-1a0.4,0.4 0,0 0,-0.5 0.2l-2,3.4c-0.1,0.2 0,0.4 0.2,0.6l2,1.6a2.8,2.8 0,0 0,-0.1 0.9,2.8 2.8,0 0,0 0.1,0.9L2.8,14.5a0.7,0.7 0,0 0,-0.1 0.6l1.9,3.4a0.7,0.7 0,0 0,0.6 0.2l2.4,-1a6.5,6.5 0,0 0,1.6 0.9l0.4,2.6a0.5,0.5 0,0 0,0.5 0.4h3.8a0.5,0.5 0,0 0,0.5 -0.4l0.3,-2.6a5.6,5.6 0,0 0,1.7 -0.9l2.4,1a0.4,0.4 0,0 0,0.5 -0.2l2,-3.4c0.1,-0.2 0,-0.4 -0.2,-0.6ZM12,15.6A3.6,3.6 0,1 1,15.6 12,3.6 3.6,0 0,1 12,15.6Z"/>
 </vector>

+ 24 - 3
src/main/res/drawable/ic_share.xml

@@ -1,4 +1,25 @@
-<vector android:height="24dp" android:viewportHeight="24.0"
-    android:viewportWidth="24.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#FFFFFF" android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#FFFFFF"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
 </vector>

+ 24 - 8
src/main/res/drawable/ic_show.xml

@@ -1,9 +1,25 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="24dp"
-        android:height="24dp"
-        android:viewportWidth="24.0"
-        android:viewportHeight="24.0">
-    <path
-        android:fillColor="#FFFFFFFF"
-        android:pathData="M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#FFFFFF"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z"/>
 </vector>

+ 28 - 5
src/main/res/drawable/ic_unshared.xml

@@ -1,6 +1,29 @@
-<vector android:alpha="0.5" android:height="16dp"
-    android:viewportHeight="16" android:viewportWidth="16"
-    android:width="16dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#FF969696"
-        android:pathData="M12.228,1a2.457,2.457 0,0 0,-2.46 2.454c0,0.075 0.01,0.15 0.016,0.224L5.05,6.092a2.445,2.445 0,0 0,-1.596 -0.586A2.453,2.453 0,0 0,1 7.96a2.453,2.453 0,0 0,2.454 2.455,2.45 2.45,0 0,0 1.46,-0.477l4.865,2.474c-0.004,0.044 -0.01,0.09 -0.01,0.134a2.457,2.457 0,1 0,0.804 -1.818l-4.696,-2.4c0.02,-0.123 0.035,-0.25 0.035,-0.378 0,-0.072 -0.01,-0.144 -0.015,-0.214l4.74,-2.414A2.457,2.457 0,1 0,12.228 0.99z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector
+    android:height="20dp"
+    android:width="20dp"
+    android:viewportHeight="24.0"
+    android:viewportWidth="24.0"
+    android:tint="#666666"
+    xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
 </vector>

+ 24 - 10
src/main/res/drawable/ic_user.xml

@@ -1,11 +1,25 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="16dp"
-        android:height="16dp"
-        android:viewportWidth="16"
-        android:viewportHeight="16">
-
-    <path
-        android:fillColor="#757575"
-        android:pathData="M5 3.8c0 1.4 0.1 2.4 0.8 3.5 0.2 0.286 0.5 0.35 0.7 0.6 0.135 0.5 0.24 0.98 0.1 1.5-1.275 0.45-2.49 1-3.6 1.6-0.85 0.6-0.785 0.31-1 2.3-0.16 1.59 3.5 1.7 6 1.7s6.163-0.1 6-1.7c-0.215-2-0.23-1.71-1-2.3-1.1-0.654-2.45-1.167-3.6-1.6-0.15-0.56-0.04-0.973 0.1-1.5 0.235-0.25 0.5-0.363 0.7-0.6 0.69-0.885 0.8-2.425 0.8-3.5 0-1.59-1.43-2.8-3-2.8-1.75 0-3 1.43-3 2.8z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#666666"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
 </vector>

+ 0 - 23
src/main/res/drawable/ic_view.xml

@@ -1,23 +0,0 @@
-<!--
-    @author Google LLC
-    Copyright (C) 2018 Google LLC
-
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#FFF" android:pathData="M12,9A3,3 0 0,0 9,12A3,3 0 0,0 12,15A3,3 0 0,0 15,12A3,3 0 0,0 12,9M12,17A5,5 0 0,1 7,12A5,5 0 0,1 12,7A5,5 0 0,1 17,12A5,5 0 0,1 12,17M12,4.5C7,4.5 2.73,7.61 1,12C2.73,16.39 7,19.5 12,19.5C17,19.5 21.27,16.39 23,12C21.27,7.61 17,4.5 12,4.5Z" />
-</vector>

+ 19 - 17
src/main/res/drawable/ic_warning.xml

@@ -1,23 +1,25 @@
 <!--
-    @author Google LLC
-    Copyright (C) 2018 Google LLC
+  Nextcloud Android client application
 
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
+  Copyright (C) 2020 Nextcloud.
 
-    http://www.apache.org/licenses/LICENSE-2.0
+  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.
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+  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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#757575" android:pathData="M13,14H11V10H13M13,18H11V16H13M1,21H23L12,2L1,21Z" />
+<vector android:height="24dp" android:tint="#666666"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M1,21h22L12,2 1,21zM13,18h-2v-2h2v2zM13,14h-2v-4h2v4z"/>
 </vector>

+ 24 - 7
src/main/res/drawable/image_32dp.xml

@@ -1,8 +1,25 @@
-<!-- drawable/image.xml -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="32dp"
-    android:width="32dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#757575" android:pathData="M8.5,13.5L11,16.5L14.5,12L19,18H5M21,19V5C21,3.89 20.1,3 19,3H5A2,2 0 0,0 3,5V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19Z" />
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="32dp" android:tint="#666666"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="32dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M21,19V5c0,-1.1 -0.9,-2 -2,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2zM8.5,13.5l2.5,3.01L14.5,12l4.5,6H5l3.5,-4.5z"/>
 </vector>

+ 19 - 17
src/main/res/drawable/nav_contacts.xml

@@ -1,23 +1,25 @@
 <!--
-    @author Cody
-    Copyright (C) 2018 Cody
+  Nextcloud Android client application
 
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
+  Copyright (C) 2020 Nextcloud.
 
-    http://www.apache.org/licenses/LICENSE-2.0
+  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.
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+  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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#757575" android:pathData="M12,4A4,4 0 0,1 16,8A4,4 0 0,1 12,12A4,4 0 0,1 8,8A4,4 0 0,1 12,4M12,14C16.42,14 20,15.79 20,18V20H4V18C4,15.79 7.58,14 12,14Z" />
+<vector android:height="24dp" android:tint="#757575"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M12,12c2.21,0 4,-1.79 4,-4s-1.79,-4 -4,-4 -4,1.79 -4,4 1.79,4 4,4zM12,14c-2.67,0 -8,1.34 -8,4v2h16v-2c0,-2.66 -5.33,-4 -8,-4z"/>
 </vector>

+ 19 - 19
src/main/res/drawable/nav_favorites.xml

@@ -1,25 +1,25 @@
 <!--
-    @author Google LLC
-    Copyright (C) 2018 Google LLC
+  Nextcloud Android client application
 
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
+  Copyright (C) 2020 Nextcloud.
 
-    http://www.apache.org/licenses/LICENSE-2.0
+  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.
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+  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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="24dp"
-    android:height="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-  <path
-      android:fillColor="#757575"
-      android:pathData="M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z"/>
+<vector android:height="24dp" android:tint="#757575"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/>
 </vector>

+ 19 - 17
src/main/res/drawable/nav_logout.xml

@@ -1,23 +1,25 @@
 <!--
-    @author Austin Andrews
-    Copyright (C) 2018 Austin Andrews
+  Nextcloud Android client application
 
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
+  Copyright (C) 2020 Nextcloud.
 
-    http://www.apache.org/licenses/LICENSE-2.0
+  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.
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+  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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#757575" android:pathData="M19,3H5C3.89,3 3,3.89 3,5V9H5V5H19V19H5V15H3V19A2,2 0 0,0 5,21H19A2,2 0 0,0 21,19V5C21,3.89 20.1,3 19,3M10.08,15.58L11.5,17L16.5,12L11.5,7L10.08,8.41L12.67,11H3V13H12.67L10.08,15.58Z" />
+<vector android:height="24dp" android:tint="#757575"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M10.09,15.59L11.5,17l5,-5 -5,-5 -1.41,1.41L12.67,11H3v2h9.67l-2.58,2.59zM19,3H5c-1.11,0 -2,0.9 -2,2v4h2V5h14v14H5v-4H3v4c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z"/>
 </vector>

+ 24 - 3
src/main/res/drawable/nav_notifications.xml

@@ -1,4 +1,25 @@
-<vector android:height="24dp" android:viewportHeight="16"
-    android:viewportWidth="16" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillColor="#757575" android:fillType="nonZero" android:pathData="M8,2C7.448,2 7,2.448 7,3C7,3.047 7.021,3.087 7.027,3.133C5.291,3.569 4,5.128 4,7L4,9L3,10L3,11L13,11L13,10L12,9L12,7C12,5.128 10.709,3.569 8.973,3.133C8.979,3.087 9,3.047 9,3C9,2.448 8.552,2 8,2ZM6,12C6,13.105 6.895,14 8,14C9.105,14 10,13.105 10,12L6,12Z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#757575"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4c0,1.1 0.89,2 2,2zM18,16v-5c0,-3.07 -1.64,-5.64 -4.5,-6.32L13.5,4c0,-0.83 -0.67,-1.5 -1.5,-1.5s-1.5,0.67 -1.5,1.5v0.68C7.63,5.36 6,7.92 6,11v5l-2,2v1h16v-1l-2,-2z"/>
 </vector>

+ 24 - 3
src/main/res/drawable/nav_photos.xml

@@ -1,4 +1,25 @@
-<vector android:height="24dp" android:viewportHeight="16"
-    android:viewportWidth="16" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillAlpha="1" android:fillColor="#757575" android:pathData="M1.344,2A0.445,0.445 0,0 0,1 2.438v11.124c0,0.23 0.212,0.44 0.438,0.44h13.125a0.457,0.457 0,0 0,0.437 -0.44L15,2.61c0,-0.337 -0.264,-0.61 -0.515,-0.61zM2,3h12v5l-1,-1 -3,4 -3,-3 -4,4L2,12zM4.5,4a1.5,1.5 0,1 0,0 3,1.5 1.5,0 0,0 0,-3z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#757575"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M21,19V5c0,-1.1 -0.9,-2 -2,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2zM8.5,13.5l2.5,3.01L14.5,12l4.5,6H5l3.5,-4.5z"/>
 </vector>

+ 24 - 4
src/main/res/drawable/nav_recently.xml

@@ -1,5 +1,25 @@
-<vector android:height="24dp" android:viewportHeight="16"
-    android:viewportWidth="16" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillAlpha="1" android:fillColor="#757575"
-        android:pathData="M8,0.5424C3.8927,0.5424 0.5424,3.8927 0.5424,8c0,4.1073 3.3503,7.4576 7.4576,7.4576 4.1073,0 7.4576,-3.3503 7.4576,-7.4576C15.4576,3.8927 12.1073,0.5424 8,0.5424ZM8,2.4068c3.1005,0 5.5932,2.4927 5.5932,5.5932 0,3.1005 -2.4927,5.5932 -5.5932,5.5932C4.8995,13.5932 2.4068,11.1005 2.4068,8 2.4068,4.8995 4.8995,2.4068 8,2.4068ZM7.5898,3.2756A0.5752,0.5752 0,0 0,7.0258 3.847L6.2316,7.986V8C6.061,8.7038 6.5458,8.9322 7.0864,9.2603h0.0047L9.8858,10.7332C10.4946,11.2012 11.1975,10.2895 10.5887,9.8197L8.9322,8.0093V8L8.1771,3.8517A0.5752,0.5752 0,0 0,7.5898 3.2756Z" android:strokeWidth="0.93220341"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#757575"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM12,20c-4.42,0 -8,-3.58 -8,-8s3.58,-8 8,-8 8,3.58 8,8 -3.58,8 -8,8zM12.5,7H11v6l5.25,3.15 0.75,-1.23 -4.5,-2.67z"/>
 </vector>

+ 19 - 17
src/main/res/drawable/nav_settings.xml

@@ -1,23 +1,25 @@
 <!--
-    @author Google LLC
-    Copyright (C) 2018 Google LLC
+  Nextcloud Android client application
 
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
+  Copyright (C) 2020 Nextcloud.
 
-    http://www.apache.org/licenses/LICENSE-2.0
+  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.
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+  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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#757575" android:pathData="M12,15.5A3.5,3.5 0 0,1 8.5,12A3.5,3.5 0 0,1 12,8.5A3.5,3.5 0 0,1 15.5,12A3.5,3.5 0 0,1 12,15.5M19.43,12.97C19.47,12.65 19.5,12.33 19.5,12C19.5,11.67 19.47,11.34 19.43,11L21.54,9.37C21.73,9.22 21.78,8.95 21.66,8.73L19.66,5.27C19.54,5.05 19.27,4.96 19.05,5.05L16.56,6.05C16.04,5.66 15.5,5.32 14.87,5.07L14.5,2.42C14.46,2.18 14.25,2 14,2H10C9.75,2 9.54,2.18 9.5,2.42L9.13,5.07C8.5,5.32 7.96,5.66 7.44,6.05L4.95,5.05C4.73,4.96 4.46,5.05 4.34,5.27L2.34,8.73C2.21,8.95 2.27,9.22 2.46,9.37L4.57,11C4.53,11.34 4.5,11.67 4.5,12C4.5,12.33 4.53,12.65 4.57,12.97L2.46,14.63C2.27,14.78 2.21,15.05 2.34,15.27L4.34,18.73C4.46,18.95 4.73,19.03 4.95,18.95L7.44,17.94C7.96,18.34 8.5,18.68 9.13,18.93L9.5,21.58C9.54,21.82 9.75,22 10,22H14C14.25,22 14.46,21.82 14.5,21.58L14.87,18.93C15.5,18.67 16.04,18.34 16.56,17.94L19.05,18.95C19.27,19.03 19.54,18.95 19.66,18.73L21.66,15.27C21.78,15.05 21.73,14.78 21.54,14.63L19.43,12.97Z" />
+<vector android:height="24dp" android:tint="#757575"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M19.1,12.9a2.8,2.8 0,0 0,0.1 -0.9,2.8 2.8,0 0,0 -0.1,-0.9l2.1,-1.6a0.7,0.7 0,0 0,0.1 -0.6L19.4,5.5a0.7,0.7 0,0 0,-0.6 -0.2l-2.4,1a6.5,6.5 0,0 0,-1.6 -0.9l-0.4,-2.6a0.5,0.5 0,0 0,-0.5 -0.4H10.1a0.5,0.5 0,0 0,-0.5 0.4L9.3,5.4a5.6,5.6 0,0 0,-1.7 0.9l-2.4,-1a0.4,0.4 0,0 0,-0.5 0.2l-2,3.4c-0.1,0.2 0,0.4 0.2,0.6l2,1.6a2.8,2.8 0,0 0,-0.1 0.9,2.8 2.8,0 0,0 0.1,0.9L2.8,14.5a0.7,0.7 0,0 0,-0.1 0.6l1.9,3.4a0.7,0.7 0,0 0,0.6 0.2l2.4,-1a6.5,6.5 0,0 0,1.6 0.9l0.4,2.6a0.5,0.5 0,0 0,0.5 0.4h3.8a0.5,0.5 0,0 0,0.5 -0.4l0.3,-2.6a5.6,5.6 0,0 0,1.7 -0.9l2.4,1a0.4,0.4 0,0 0,0.5 -0.2l2,-3.4c0.1,-0.2 0,-0.4 -0.2,-0.6ZM12,15.6A3.6,3.6 0,1 1,15.6 12,3.6 3.6,0 0,1 12,15.6Z"/>
 </vector>

+ 24 - 11
src/main/res/drawable/nav_shared.xml

@@ -1,12 +1,25 @@
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="16dp"
-        android:height="16dp"
-        android:viewportWidth="16.0"
-        android:viewportHeight="16.0">
-    <path
-        android:fillColor="#FF757575"
-        android:strokeColor="#FFFFFFFF"
-        android:strokeWidth="0.2"
-        android:strokeMiterLimit="4"
-        android:pathData="M12.228 1a2.457 2.457 0 0 0-2.46 2.454c0 0.075 0.01 0.15 0.016 0.224L5.05 6.092a2.445 2.445 0 0 0-1.596-0.586A2.453 2.453 0 0 0 1 7.96a2.453 2.453 0 0 0 2.454 2.455 2.45 2.45 0 0 0 1.46-0.477l4.865 2.474c-0.004 0.044-0.01 0.09-0.01 0.134a2.457 2.457 0 1 0 0.804-1.818l-4.696-2.4c 0.02-0.123 0.035-0.25 0.035-0.378 0-0.072-0.01-0.144-0.015-0.214l4.74-2.414A2.457 2.457 0 1 0 12.228 0.99z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#757575"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
 </vector>

+ 19 - 17
src/main/res/drawable/nav_synced_folders.xml

@@ -1,23 +1,25 @@
 <!--
-    @author Google LLC
-    Copyright (C) 2018 Google LLC
+  Nextcloud Android client application
 
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
+  Copyright (C) 2020 Nextcloud.
 
-    http://www.apache.org/licenses/LICENSE-2.0
+  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.
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+  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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#757575" android:pathData="M14,13V17H10V13H7L12,8L17,13M19.35,10.03C18.67,6.59 15.64,4 12,4C9.11,4 6.6,5.64 5.35,8.03C2.34,8.36 0,10.9 0,14A6,6 0 0,0 6,20H19A5,5 0 0,0 24,15C24,12.36 21.95,10.22 19.35,10.03Z" />
+<vector android:height="24dp" android:tint="#757575"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M19.35,10.04C18.67,6.59 15.64,4 12,4 9.11,4 6.6,5.64 5.35,8.04 2.34,8.36 0,10.91 0,14c0,3.31 2.69,6 6,6h13c2.76,0 5,-2.24 5,-5 0,-2.64 -2.05,-4.78 -4.65,-4.96zM14,13v4h-4v-4H7l5,-5 5,5h-3z"/>
 </vector>

+ 24 - 10
src/main/res/drawable/nav_trashbin.xml

@@ -1,11 +1,25 @@
-<?xml version="1.0" encoding="utf-8"?>
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-        android:width="16dp"
-        android:height="16dp"
-        android:viewportWidth="16"
-        android:viewportHeight="16">
-
-    <path
-        android:fillColor="#6f6f6f"
-        android:pathData="M6.5,1 L6,2 L3,2 C2.446,2,2,2.446,2,3 L2,4 L14,4 L14,3 C14,2.446,13.554,2,13,2 L10,2 L9.5,1 Z M3,5 L3.875,14 C3.935,14.55,4.448,15,5,15 L11,15 C11.552,15,12.064,14.55,12.125,14 L13,5 Z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#757575"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
 </vector>

+ 24 - 3
src/main/res/drawable/nav_videos.xml

@@ -1,4 +1,25 @@
-<vector android:height="24dp" android:viewportHeight="16"
-    android:viewportWidth="16" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
-    <path android:fillAlpha="1" android:fillColor="#757575" android:pathData="M1.344,2A0.445,0.445 0,0 0,1 2.438v11.124c0,0.23 0.212,0.44 0.438,0.44h13.124a0.457,0.457 0,0 0,0.438 -0.44L15,2.61c0,-0.336 -0.265,-0.61 -0.516,-0.61zM2,3h12v10L2,13zM5,5v6l6,-3z"/>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2020 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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
+-->
+<vector android:height="24dp" android:tint="#757575"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M21,3L3,3c-1.11,0 -2,0.89 -2,2v12c0,1.1 0.89,2 2,2h5v2h8v-2h5c1.1,0 1.99,-0.9 1.99,-2L23,5c0,-1.11 -0.9,-2 -2,-2zM21,17L3,17L3,5h18v12zM16,11l-7,4L9,7z"/>
 </vector>

+ 19 - 17
src/main/res/drawable/no_network.xml

@@ -1,23 +1,25 @@
 <!--
-    @author Cody
-    Copyright (C) 2018 Cody
+  Nextcloud Android client application
 
-    Licensed under the Apache License, Version 2.0 (the "License");
-    you may not use this file except in compliance with the License.
-    You may obtain a copy of the License at
+  Copyright (C) 2020 Nextcloud.
 
-    http://www.apache.org/licenses/LICENSE-2.0
+  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.
 
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
+  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/>.
+
+  Icon provided by Android Material Library in Apache License 2.0
 -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:height="24dp"
-    android:width="24dp"
-    android:viewportWidth="24"
-    android:viewportHeight="24">
-    <path android:fillColor="#FFFFFF" android:pathData="M19,17H21V9H19M19,21H21V19H19M1,21H17V7H21V1" />
+<vector android:height="24dp" android:tint="#FFFFFF"
+    android:viewportHeight="24.0" android:viewportWidth="24.0"
+    android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#FF000000" android:pathData="M20,18h2v-8h-2v8zM20,22h2v-2h-2v2zM2,22h16L18,8h4L22,2L2,22z"/>
 </vector>

+ 24 - 26
src/main/res/layout/files.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ownCloud Android client application
 
   Copyright (C) 2012  Bartek Przybylski
@@ -21,8 +20,8 @@
     android:id="@+id/drawer_layout"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:fitsSystemWindows="true"
-    android:clickable="true" >
+    android:clickable="true"
+    android:fitsSystemWindows="true">
 
     <!-- The main content view -->
     <LinearLayout
@@ -31,30 +30,29 @@
         android:id="@+id/root_layout"
         android:orientation="vertical">
 
-        <include
-            layout="@layout/toolbar_standard" />
+            <include layout="@layout/toolbar_standard" />
 
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="match_parent"
-            android:background="@color/bg_default"
-            android:baselineAligned="false"
-            android:orientation="horizontal"
-            android:id="@+id/ListLayout"
-            android:contentDescription="@string/list_layout">
-
-            <FrameLayout
-                android:id="@+id/left_fragment_container"
-                android:layout_width="@dimen/zero"
+            <LinearLayout
+                android:id="@+id/ListLayout"
+                android:layout_width="match_parent"
                 android:layout_height="match_parent"
-                android:layout_weight="1" />
+                android:background="@color/bg_default"
+                android:baselineAligned="false"
+                android:contentDescription="@string/list_layout"
+                android:orientation="horizontal">
 
-            <FrameLayout
-                android:id="@+id/right_fragment_container"
-                android:layout_width="@dimen/zero"
-                android:layout_height="match_parent"
-                android:layout_weight="2" />
-        </LinearLayout>
+                <FrameLayout
+                    android:id="@+id/left_fragment_container"
+                    android:layout_width="@dimen/zero"
+                    android:layout_height="match_parent"
+                    android:layout_weight="1" />
+
+                <FrameLayout
+                    android:id="@+id/right_fragment_container"
+                    android:layout_width="@dimen/zero"
+                    android:layout_height="match_parent"
+                    android:layout_weight="2" />
+            </LinearLayout>
 
     </LinearLayout>
 
@@ -62,6 +60,6 @@
         layout="@layout/drawer"
         android:layout_width="@dimen/drawer_width"
         android:layout_height="match_parent"
-        android:layout_gravity="start"/>
+        android:layout_gravity="start" />
 
 </androidx.drawerlayout.widget.DrawerLayout>

+ 24 - 6
src/main/res/layout/grid_image.xml

@@ -16,6 +16,7 @@
 
 -->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:id="@+id/ListItemLayout"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
@@ -29,15 +30,32 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content">
 
-        <com.owncloud.android.ui.SquareImageView
-            android:id="@+id/thumbnail"
+        <FrameLayout
+            android:id="@+id/shimmer_view_container"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:padding="@dimen/standard_eigth_padding"
-            android:scaleType="centerCrop"
-            android:src="@drawable/folder"
-            android:contentDescription="@null"/>
+            android:clipChildren="true">
 
+            <com.elyeproj.loaderviewlibrary.LoaderImageView
+                android:id="@+id/thumbnail_shimmer"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_margin="@dimen/standard_eigth_padding"
+                android:contentDescription="@null"
+                android:scaleType="centerCrop"
+                android:visibility="gone"
+                app:width_weight="0.4"
+                app:height_weight="0.6" />
+
+            <com.owncloud.android.ui.SquareImageView
+                android:id="@+id/thumbnail"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:contentDescription="@null"
+                android:padding="@dimen/standard_eigth_padding"
+                android:scaleType="centerCrop"
+                android:src="@drawable/folder" />
+        </FrameLayout>
 
         <ImageView
             android:id="@+id/favorite_action"

+ 20 - 7
src/main/res/layout/grid_item.xml

@@ -29,13 +29,26 @@
         android:layout_height="wrap_content"
         android:layout_gravity="center_horizontal">
 
-        <ImageView
-            android:id="@+id/thumbnail"
-            android:layout_width="@dimen/standard_list_item_size"
-            android:layout_height="@dimen/standard_list_item_size"
-            android:layout_gravity="center"
-            android:src="@drawable/folder"
-            android:contentDescription="@null"/>
+        <FrameLayout
+            android:id="@+id/shimmer_view_container"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center">
+
+            <com.elyeproj.loaderviewlibrary.LoaderImageView
+                android:id="@+id/thumbnail_shimmer"
+                android:layout_width="@dimen/standard_list_item_size"
+                android:layout_height="@dimen/standard_list_item_size"
+                android:visibility="gone" />
+
+            <ImageView
+                android:id="@+id/thumbnail"
+                android:layout_width="@dimen/standard_list_item_size"
+                android:layout_height="@dimen/standard_list_item_size"
+                android:layout_gravity="center"
+                android:contentDescription="@null"
+                android:src="@drawable/folder" />
+        </FrameLayout>
 
         <ImageView
             android:id="@+id/favorite_action"

+ 9 - 10
src/main/res/layout/grid_sync_item.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
+<?xml version="1.0" encoding="UTF-8"?><!--
   Nextcloud Android client application
 
   Copyright (C) 2017 Andy Scherzinger
@@ -18,8 +17,7 @@
   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/>.
 -->
-<FrameLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/grid_item_container"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -31,16 +29,17 @@
         android:id="@+id/thumbnail"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
+        android:contentDescription="@null"
         android:scaleType="centerCrop"
-        android:src="@drawable/folder"/>
+        android:src="@drawable/folder" />
 
     <ImageView
         android:id="@+id/thumbnailDarkener"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:background="#99000000"
-        android:scaleType="centerCrop"
-        android:contentDescription="@null"/>
+        android:contentDescription="@null"
+        android:scaleType="centerCrop" />
 
     <LinearLayout
         android:id="@+id/counterLayout"
@@ -57,7 +56,7 @@
             android:text="@string/synced_folders_plus"
             android:textColor="#ffffff"
             android:textSize="@dimen/grid_sync_item_layout_next_text_size"
-            android:textStyle="bold"/>
+            android:textStyle="bold" />
 
         <TextView
             android:id="@+id/counter"
@@ -67,6 +66,6 @@
             android:text="@string/placeholder_fileSize"
             android:textColor="#ffffff"
             android:textSize="@dimen/grid_sync_item_layout_counter_text_size"
-            android:textStyle="bold"/>
+            android:textStyle="bold" />
     </LinearLayout>
-</FrameLayout>
+</FrameLayout>

+ 66 - 17
src/main/res/layout/list_fragment.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ownCloud Android client application
 
   Copyright (C) 2012  Bartek Przybylski
@@ -18,6 +17,7 @@
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 -->
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
@@ -26,32 +26,81 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent">
 
+        <com.google.android.material.appbar.AppBarLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:background="@color/bg_default"
+            app:elevation="0dp">
+
+            <androidx.constraintlayout.widget.ConstraintLayout
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                app:layout_scrollFlags="scroll|enterAlways|snap">
+
+                <com.google.android.material.button.MaterialButton
+                    android:id="@+id/sort_button"
+                    style="@style/Widget.MaterialComponents.Button.TextButton"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_marginStart="8dp"
+                    android:contentDescription="@string/actionbar_sort"
+                    android:minWidth="0dp"
+                    android:text="@string/menu_item_sort_by_date_newest_first"
+                    android:textAlignment="textStart"
+                    android:textAllCaps="false"
+                    android:textColor="@color/fontAppbar"
+                    android:textSize="14sp"
+                    app:icon="@drawable/ic_keyboard_arrow_down"
+                    app:iconGravity="textEnd"
+                    app:iconSize="16dp"
+                    app:iconTint="@color/fontAppbar"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintStart_toStartOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+
+                <com.google.android.material.button.MaterialButton
+                    android:id="@+id/switch_grid_view_button"
+                    style="@style/Widget.AppTheme.Button.IconButton"
+                    android:layout_width="38dp"
+                    android:layout_height="38dp"
+                    android:layout_marginEnd="4dp"
+                    android:contentDescription="@string/action_switch_grid_view"
+                    app:cornerRadius="24dp"
+                    app:icon="@drawable/ic_view_module"
+                    app:iconTint="@color/fontAppbar"
+                    app:layout_constraintBottom_toBottomOf="parent"
+                    app:layout_constraintEnd_toEndOf="parent"
+                    app:layout_constraintTop_toTopOf="parent" />
+            </androidx.constraintlayout.widget.ConstraintLayout>
+        </com.google.android.material.appbar.AppBarLayout>
+
         <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
             android:id="@+id/swipe_containing_list"
             android:layout_width="match_parent"
             android:layout_height="match_parent"
             android:footerDividersEnabled="false"
-            android:visibility="visible">
+            android:visibility="visible"
+            app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
             <com.owncloud.android.ui.EmptyRecyclerView
                 android:id="@+id/list_root"
                 android:layout_width="match_parent"
-                android:layout_height="match_parent"
-                />
+                android:layout_height="match_parent" />
         </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
 
-        <include layout="@layout/empty_list"/>
-
-    <com.google.android.material.floatingactionbutton.FloatingActionButton
-        android:id="@+id/fab_main"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="end|bottom"
-        android:layout_alignParentEnd="true"
-        android:layout_marginBottom="@dimen/standard_margin"
-        android:layout_marginEnd="@dimen/standard_margin"
-        android:contentDescription="@string/fab_label"
-        android:visibility="gone" />
+        <include layout="@layout/empty_list" />
+
+        <com.google.android.material.floatingactionbutton.FloatingActionButton
+            android:id="@+id/fab_main"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_alignParentEnd="true"
+            android:layout_gravity="end|bottom"
+            android:layout_marginEnd="@dimen/standard_margin"
+            android:layout_marginBottom="@dimen/standard_margin"
+            android:contentDescription="@string/fab_label"
+            android:visibility="gone"
+            app:layout_behavior="com.google.android.material.behavior.HideBottomViewOnScrollBehavior" />
 
     </androidx.coordinatorlayout.widget.CoordinatorLayout>
 </RelativeLayout>

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio