瀏覽代碼

Merge pull request #3459 from nextcloud/dark_theme

Dark theme
Tobias Kaminsky 5 年之前
父節點
當前提交
cc710b09cb
共有 100 個文件被更改,包括 1072 次插入704 次删除
  1. 15 1
      .idea/codeStyles/Project.xml
  2. 1 1
      build.gradle
  3. 1 2
      src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.java
  4. 2 0
      src/main/java/com/nextcloud/client/preferences/AppPreferences.java
  5. 7 0
      src/main/java/com/nextcloud/client/preferences/AppPreferencesImpl.java
  6. 10 0
      src/main/java/com/owncloud/android/MainApp.java
  7. 3 1
      src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java
  8. 2 1
      src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java
  9. 0 38
      src/main/java/com/owncloud/android/ui/RadioButtonPreference.java
  10. 5 2
      src/main/java/com/owncloud/android/ui/ThemeableSwitchPreference.java
  11. 0 1
      src/main/java/com/owncloud/android/ui/activities/StickyHeaderItemDecoration.java
  12. 77 17
      src/main/java/com/owncloud/android/ui/activity/BaseActivity.java
  13. 1 2
      src/main/java/com/owncloud/android/ui/activity/CommunityActivity.java
  14. 17 2
      src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java
  15. 6 4
      src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.java
  16. 1 2
      src/main/java/com/owncloud/android/ui/activity/PassCodeActivity.java
  17. 7 4
      src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java
  18. 1 1
      src/main/java/com/owncloud/android/ui/activity/RichDocumentsWebView.java
  19. 12 4
      src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java
  20. 2 2
      src/main/java/com/owncloud/android/ui/activity/SsoGrantPermissionActivity.java
  21. 80 0
      src/main/java/com/owncloud/android/ui/activity/ThemedPreferenceActivity.java
  22. 3 3
      src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java
  23. 1 1
      src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java
  24. 6 2
      src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java
  25. 1 2
      src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java
  26. 5 6
      src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java
  27. 2 3
      src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java
  28. 1 1
      src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java
  29. 2 2
      src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java
  30. 2 1
      src/main/java/com/owncloud/android/ui/asynctasks/LoadUrlTask.java
  31. 1 0
      src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java
  32. 6 0
      src/main/java/com/owncloud/android/ui/dialog/ExpirationDatePickerDialogFragment.java
  33. 1 0
      src/main/java/com/owncloud/android/ui/dialog/NoteDialogFragment.java
  34. 1 0
      src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java
  35. 1 0
      src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.java
  36. 3 0
      src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java
  37. 1 1
      src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java
  38. 0 2
      src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java
  39. 7 7
      src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java
  40. 5 5
      src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java
  41. 6 5
      src/main/java/com/owncloud/android/utils/ThemeUtils.java
  42. 二進制
      src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_1.png
  43. 二進制
      src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_2.png
  44. 二進制
      src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_3.png
  45. 二進制
      src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_4.png
  46. 二進制
      src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_5.png
  47. 二進制
      src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_6.png
  48. 二進制
      src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_7.png
  49. 二進制
      src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_8.png
  50. 24 0
      src/main/res/drawable-night/round_bgnd.xml
  51. 36 0
      src/main/res/drawable-night/shared_via_link.xml
  52. 30 0
      src/main/res/drawable-night/shared_via_users.xml
  53. 1 1
      src/main/res/drawable/indicator_dot_selected.xml
  54. 1 1
      src/main/res/drawable/list_selector.xml
  55. 1 1
      src/main/res/drawable/process_dialog_background.xml
  56. 20 1
      src/main/res/drawable/round_bgnd.xml
  57. 24 0
      src/main/res/drawable/round_bgnd_icons.xml
  58. 18 0
      src/main/res/drawable/shared_via_link.xml
  59. 18 0
      src/main/res/drawable/shared_via_users.xml
  60. 2 2
      src/main/res/drawable/uploader_list_separator.xml
  61. 229 225
      src/main/res/layout-land/account_setup.xml
  62. 230 225
      src/main/res/layout/account_setup.xml
  63. 1 1
      src/main/res/layout/accounts_layout.xml
  64. 6 3
      src/main/res/layout/activity_list_item.xml
  65. 24 4
      src/main/res/layout/activity_list_item_header.xml
  66. 2 1
      src/main/res/layout/activity_list_layout.xml
  67. 4 4
      src/main/res/layout/community_layout.xml
  68. 1 1
      src/main/res/layout/contactlist_fragment.xml
  69. 3 2
      src/main/res/layout/contacts_backup_fragment.xml
  70. 1 1
      src/main/res/layout/deep_link_login.xml
  71. 9 10
      src/main/res/layout/drawer.xml
  72. 4 4
      src/main/res/layout/drawer_header.xml
  73. 2 1
      src/main/res/layout/file_details_activities_fragment.xml
  74. 5 3
      src/main/res/layout/file_details_fragment.xml
  75. 1 1
      src/main/res/layout/file_details_share_user_item.xml
  76. 1 1
      src/main/res/layout/file_details_sharing_fragment.xml
  77. 3 7
      src/main/res/layout/file_download_fragment.xml
  78. 14 12
      src/main/res/layout/file_list_actions_bottom_sheet_fragment.xml
  79. 1 1
      src/main/res/layout/file_preview.xml
  80. 1 1
      src/main/res/layout/files.xml
  81. 1 1
      src/main/res/layout/files_folder_picker.xml
  82. 1 1
      src/main/res/layout/generic_explanation.xml
  83. 1 1
      src/main/res/layout/info_box.xml
  84. 1 1
      src/main/res/layout/list_item.xml
  85. 2 2
      src/main/res/layout/media_control.xml
  86. 5 3
      src/main/res/layout/notification_list_item.xml
  87. 2 1
      src/main/res/layout/passcodelock.xml
  88. 6 2
      src/main/res/layout/password_dialog.xml
  89. 0 21
      src/main/res/layout/preference_widget_radiobutton.xml
  90. 1 1
      src/main/res/layout/richdocuments_webview.xml
  91. 1 1
      src/main/res/layout/send_button.xml
  92. 3 3
      src/main/res/layout/send_share_fragment.xml
  93. 5 5
      src/main/res/layout/share_file_layout.xml
  94. 6 6
      src/main/res/layout/sorting_order_fragment.xml
  95. 1 1
      src/main/res/layout/ssl_untrusted_cert_layout.xml
  96. 3 3
      src/main/res/layout/ssl_validator_layout.xml
  97. 2 2
      src/main/res/layout/storage_path_item.xml
  98. 1 1
      src/main/res/layout/template_button.xml
  99. 2 2
      src/main/res/layout/toolbar_standard.xml
  100. 6 6
      src/main/res/layout/toolbar_user_information.xml

+ 15 - 1
.idea/codeStyles/Project.xml

@@ -27,6 +27,11 @@
         <emptyLine />
       </value>
     </option>
+    <option name="RIGHT_MARGIN" value="120" />
+    <option name="WRAP_WHEN_TYPING_REACHES_RIGHT_MARGIN" value="true" />
+    <AndroidXmlCodeStyleSettings>
+      <option name="ARRANGEMENT_SETTINGS_MIGRATED_TO_191" value="true" />
+    </AndroidXmlCodeStyleSettings>
     <JavaCodeStyleSettings>
       <option name="IMPORT_LAYOUT_TABLE">
         <value>
@@ -86,6 +91,7 @@
               <match>
                 <AND>
                   <NAME>xmlns:android</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>^$</XML_NAMESPACE>
                 </AND>
               </match>
@@ -96,6 +102,7 @@
               <match>
                 <AND>
                   <NAME>xmlns:.*</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>^$</XML_NAMESPACE>
                 </AND>
               </match>
@@ -107,6 +114,7 @@
               <match>
                 <AND>
                   <NAME>.*:id</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
                 </AND>
               </match>
@@ -117,6 +125,7 @@
               <match>
                 <AND>
                   <NAME>.*:name</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
                 </AND>
               </match>
@@ -127,6 +136,7 @@
               <match>
                 <AND>
                   <NAME>name</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>^$</XML_NAMESPACE>
                 </AND>
               </match>
@@ -137,6 +147,7 @@
               <match>
                 <AND>
                   <NAME>style</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>^$</XML_NAMESPACE>
                 </AND>
               </match>
@@ -147,6 +158,7 @@
               <match>
                 <AND>
                   <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>^$</XML_NAMESPACE>
                 </AND>
               </match>
@@ -158,6 +170,7 @@
               <match>
                 <AND>
                   <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
                 </AND>
               </match>
@@ -169,6 +182,7 @@
               <match>
                 <AND>
                   <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>.*</XML_NAMESPACE>
                 </AND>
               </match>
@@ -179,4 +193,4 @@
       </arrangement>
     </codeStyleSettings>
   </code_scheme>
-</component>
+</component>

+ 1 - 1
build.gradle

@@ -269,7 +269,7 @@ dependencies {
     qaImplementation "com.github.nextcloud:android-library:$androidLibraryVersion"
     implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
     implementation 'androidx.legacy:legacy-support-v4:1.0.0'
-    implementation 'com.google.android.material:material:1.0.0'
+    implementation 'com.google.android.material:material:1.1.0-beta01'
     implementation 'com.jakewharton:disklrucache:2.0.2'
     implementation 'androidx.appcompat:appcompat:1.1.0'
     implementation 'androidx.cardview:cardview:1.0.0'

+ 1 - 2
src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.java

@@ -28,7 +28,6 @@ import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.content.Intent;
 import android.content.res.Configuration;
-import android.graphics.Color;
 import android.net.Uri;
 import android.os.Bundle;
 import android.view.View;
@@ -81,7 +80,7 @@ public class FirstRunActivity extends BaseActivity implements ViewPager.OnPageCh
         setSlideshowSize(getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE);
 
         Button loginButton = findViewById(R.id.login);
-        loginButton.setBackgroundColor(Color.WHITE);
+        loginButton.setBackgroundColor(getResources().getColor(R.color.login_btn_tint));
         loginButton.setTextColor(getResources().getColor(R.color.primary));
 
         loginButton.setOnClickListener(v -> {

+ 2 - 0
src/main/java/com/nextcloud/client/preferences/AppPreferences.java

@@ -239,6 +239,8 @@ public interface AppPreferences {
      */
     int getUploaderBehaviour();
 
+    boolean isDarkThemeEnabled();
+
     /**
      * Saves the uploader behavior which the user has set last.
      *

+ 7 - 0
src/main/java/com/nextcloud/client/preferences/AppPreferencesImpl.java

@@ -68,6 +68,8 @@ public final class AppPreferencesImpl implements AppPreferences {
     private static final String PREF__AUTO_UPLOAD_INIT = "autoUploadInit";
     private static final String PREF__FOLDER_SORT_ORDER = "folder_sort_order";
     private static final String PREF__FOLDER_LAYOUT = "folder_layout";
+    public static final String PREF__THEME = "darkTheme";
+
     private static final String PREF__LOCK_TIMESTAMP = "lock_timestamp";
     private static final String PREF__SHOW_MEDIA_SCAN_NOTIFICATIONS = "show_media_scan_notifications";
     private static final String PREF__LOCK = SettingsActivity.PREFERENCE_LOCK;
@@ -340,6 +342,11 @@ public final class AppPreferencesImpl implements AppPreferences {
         return preferences.getInt(AUTO_PREF__UPLOADER_BEHAVIOR, 1);
     }
 
+    @Override
+    public boolean isDarkThemeEnabled() {
+        return preferences.getBoolean(PREF__THEME, false);
+    }
+
     @Override
     public void setUploaderBehaviour(int uploaderBehaviour) {
         preferences.edit().putInt(AUTO_PREF__UPLOADER_BEHAVIOR, uploaderBehaviour).apply();

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

@@ -100,6 +100,7 @@ import javax.net.ssl.SSLEngine;
 import androidx.annotation.RequiresApi;
 import androidx.annotation.StringRes;
 import androidx.appcompat.app.AlertDialog;
+import androidx.appcompat.app.AppCompatDelegate;
 import androidx.core.util.Pair;
 import androidx.multidex.MultiDexApplication;
 import dagger.android.AndroidInjector;
@@ -242,6 +243,7 @@ public class MainApp extends MultiDexApplication implements HasAndroidInjector {
     @SuppressFBWarnings("ST")
     @Override
     public void onCreate() {
+        setAppTheme(preferences.isDarkThemeEnabled());
         super.onCreate();
 
         insertConscrypt();
@@ -811,4 +813,12 @@ public class MainApp extends MultiDexApplication implements HasAndroidInjector {
         return dispatchingAndroidInjector;
     }
 
+
+    public static void setAppTheme(Boolean darkTheme) {
+        if (darkTheme) {
+            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
+        } else {
+            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
+        }
+    }
 }

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

@@ -407,7 +407,9 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
             new Handler().postDelayed(() -> DisplayUtils.createSnackbar(mLoginWebView,
                                                                         R.string.fallback_weblogin_text,
                                                                         Snackbar.LENGTH_INDEFINITE)
-                .setActionTextColor(getResources().getColor(R.color.white))
+                .setActionTextColor(getResources().getColor(R.color.themed_fg))
+                .setBackgroundTint(getResources().getColor(R.color.themed_bg))
+                .setTextColor(getResources().getColor(R.color.themed_fg))
                 .setAction(R.string.fallback_weblogin_back, v -> {
                     mLoginWebView.setVisibility(View.INVISIBLE);
                     webViewLoginMethod = false;

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

@@ -1173,7 +1173,8 @@ public final class ThumbnailsCacheManager {
         Bitmap resultBitmap = Bitmap.createBitmap(pxW, pxH, Bitmap.Config.ARGB_8888);
         Canvas c = new Canvas(resultBitmap);
 
-        c.drawColor(MainApp.getAppContext().getResources().getColor(R.color.background_color));
+        // TODO check based on https://github.com/nextcloud/android/pull/3459#discussion_r339935975
+        c.drawColor(MainApp.getAppContext().getResources().getColor(R.color.background_color_png));
         c.drawBitmap(bitmap, 0, 0, null);
 
         return resultBitmap;

+ 0 - 38
src/main/java/com/owncloud/android/ui/RadioButtonPreference.java

@@ -1,38 +0,0 @@
-/**
- * ownCloud Android client application
- *
- * Copyright (C) 2015 ownCloud Inc.
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-package com.owncloud.android.ui;
-
-import android.content.Context;
-import android.preference.CheckBoxPreference;
-import android.view.View;
-
-import com.owncloud.android.R;
-
-public class RadioButtonPreference extends CheckBoxPreference implements View.OnLongClickListener {
-
-    public RadioButtonPreference(Context context) {
-        super(context, null, android.R.attr.checkBoxPreferenceStyle);
-        setWidgetLayoutResource(R.layout.preference_widget_radiobutton);
-    }
-
-    @Override
-    public boolean onLongClick(View v) {
-        return true;
-    }
-}

+ 5 - 2
src/main/java/com/owncloud/android/ui/ThemeableSwitchPreference.java

@@ -30,6 +30,7 @@ import android.view.View;
 import android.view.ViewGroup;
 import android.widget.Switch;
 
+import com.owncloud.android.R;
 import com.owncloud.android.utils.ThemeUtils;
 
 import androidx.annotation.RequiresApi;
@@ -76,12 +77,14 @@ public class ThemeableSwitchPreference extends SwitchPreference {
                 if(thumbColorStateList == null && trackColorStateList == null) {
                     int color = ThemeUtils.primaryAccentColor(getContext());
                     int trackColor = Color.argb(77, Color.red(color), Color.green(color), Color.blue(color));
+                    int trackColorUnchecked = getContext().getResources().getColor(R.color.switch_track_color_unchecked);
                     thumbColorStateList = new ColorStateList(
                             new int[][]{new int[]{android.R.attr.state_checked}, new int[]{}},
                             new int[]{color, Color.WHITE});
                     trackColorStateList = new ColorStateList(
-                            new int[][]{new int[]{android.R.attr.state_checked}, new int[]{}},
-                            new int[]{trackColor, Color.parseColor("#4D000000")});
+                            new int[][]{new int[]{android.R.attr.state_checked},
+                                new int[]{}},
+                            new int[]{trackColor, trackColorUnchecked});
                 }
 
                 // setting the thumb color

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

@@ -99,7 +99,6 @@ public class StickyHeaderItemDecoration extends RecyclerView.ItemDecoration {
         int headerPosition = adapter.getHeaderPositionForItem(itemPosition);
         int layoutId = adapter.getHeaderLayout(itemPosition);
         View header = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
-        header.setBackgroundColor(Color.WHITE);
         adapter.bindHeaderData(header, headerPosition);
         return header;
     }

+ 77 - 17
src/main/java/com/owncloud/android/ui/activity/BaseActivity.java

@@ -6,12 +6,15 @@ import android.accounts.AccountManagerCallback;
 import android.accounts.AccountManagerFuture;
 import android.accounts.OperationCanceledException;
 import android.content.Intent;
+import android.content.SharedPreferences;
 import android.os.Bundle;
 import android.os.Handler;
 
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.di.Injectable;
+import com.nextcloud.client.preferences.AppPreferencesImpl;
 import com.owncloud.android.MainApp;
+import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.utils.Log_OC;
@@ -19,43 +22,87 @@ import com.owncloud.android.lib.resources.status.OCCapability;
 
 import javax.inject.Inject;
 
+import androidx.annotation.Nullable;
 import androidx.appcompat.app.AppCompatActivity;
 
 /**
  * Base activity with common behaviour for activities dealing with ownCloud {@link Account}s .
  */
-public abstract class BaseActivity extends AppCompatActivity implements Injectable {
+public abstract class BaseActivity
+    extends AppCompatActivity
+    implements Injectable, SharedPreferences.OnSharedPreferenceChangeListener {
+
     private static final String TAG = BaseActivity.class.getSimpleName();
 
     /**
      * ownCloud {@link Account} where the main {@link OCFile} handled by the activity is located.
      */
-    private Account mCurrentAccount;
+    private Account currentAccount;
 
     /**
-     * Capabilities of the server where {@link #mCurrentAccount} lives.
+     * Capabilities of the server where {@link #currentAccount} lives.
      */
-    private OCCapability mCapabilities;
+    private OCCapability capabilities;
 
     /**
      * Access point to the cached database for the current ownCloud {@link Account}.
      */
-    private FileDataStorageManager mStorageManager;
+    private FileDataStorageManager storageManager;
+
+    /**
+     * Tracks whether the activity should be recreate()'d after a theme change
+     */
+    private boolean themeChangePending;
+    private boolean paused;
 
     @Inject UserAccountManager accountManager;
+    @Inject SharedPreferences sharedPreferences;
 
     public UserAccountManager getUserAccountManager() {
         return accountManager;
     }
 
+    @Override
+    protected void onPostCreate(@Nullable Bundle savedInstanceState) {
+        super.onPostCreate(savedInstanceState);
+        sharedPreferences.registerOnSharedPreferenceChangeListener(this);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        paused = true;
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        paused = false;
+
+        if(themeChangePending) {
+            recreate();
+        }
+    }
+
+    @Override
+    protected void onPostResume() {
+        super.onPostResume();
+    }
+
     @Override
     protected void onNewIntent(Intent intent) {
         super.onNewIntent(intent);
 
         Log_OC.v(TAG, "onNewIntent() start");
         Account current = accountManager.getCurrentAccount();
-        if (current != null && mCurrentAccount != null && !mCurrentAccount.name.equals(current.name)) {
-            mCurrentAccount = current;
+        if (current != null && currentAccount != null && !currentAccount.name.equals(current.name)) {
+            currentAccount = current;
         }
         Log_OC.v(TAG, "onNewIntent() stop");
     }
@@ -68,13 +115,26 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab
     protected void onRestart() {
         Log_OC.v(TAG, "onRestart() start");
         super.onRestart();
-        boolean validAccount = mCurrentAccount != null && accountManager.exists(mCurrentAccount);
+        boolean validAccount = currentAccount != null && accountManager.exists(currentAccount);
         if (!validAccount) {
             swapToDefaultAccount();
         }
         Log_OC.v(TAG, "onRestart() end");
     }
 
+    @Override
+    public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) {
+       if (!AppPreferencesImpl.PREF__THEME.equals(key)) {
+            return;
+        }
+
+        if(paused) {
+            themeChangePending = true;
+            return;
+        }
+        recreate();
+    }
+
     /**
      * Sets and validates the ownCloud {@link Account} associated to the Activity.
      *
@@ -87,7 +147,7 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab
     protected void setAccount(Account account, boolean savedAccount) {
         boolean validAccount = account != null && accountManager.setCurrentOwnCloudAccount(account.name);
         if (validAccount) {
-            mCurrentAccount = account;
+            currentAccount = account;
         } else {
             swapToDefaultAccount();
         }
@@ -106,7 +166,7 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab
             /// no account available: force account creation
             createAccount(true);
         } else {
-            mCurrentAccount = newAccount;
+            currentAccount = newAccount;
         }
     }
 
@@ -135,8 +195,8 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab
     @Deprecated
     protected void onAccountSet() {
         if (getAccount() != null) {
-            mStorageManager = new FileDataStorageManager(getAccount(), getContentResolver());
-            mCapabilities = mStorageManager.getCapability(mCurrentAccount.name);
+            storageManager = new FileDataStorageManager(getAccount(), getContentResolver());
+            capabilities = storageManager.getCapability(currentAccount.name);
         } else {
             Log_OC.e(TAG, "onAccountChanged was called with NULL account associated!");
         }
@@ -144,7 +204,7 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab
 
     @Deprecated
     protected void setAccount(Account account) {
-        mCurrentAccount = account;
+        currentAccount = account;
     }
 
     /**
@@ -154,7 +214,7 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab
      * set yet.
      */
     public OCCapability getCapabilities() {
-        return mCapabilities;
+        return capabilities;
     }
 
     /**
@@ -165,20 +225,20 @@ public abstract class BaseActivity extends AppCompatActivity implements Injectab
      * is located.
      */
     public Account getAccount() {
-        return mCurrentAccount;
+        return currentAccount;
     }
 
     @Override
     protected void onStart() {
         super.onStart();
 
-        if(mCurrentAccount != null) {
+        if(currentAccount != null) {
             onAccountSet();
         }
     }
 
     public FileDataStorageManager getStorageManager() {
-        return mStorageManager;
+        return storageManager;
     }
 
     /**

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

@@ -22,7 +22,6 @@
 package com.owncloud.android.ui.activity;
 
 import android.content.Intent;
-import android.graphics.PorterDuff;
 import android.os.Bundle;
 import android.text.Html;
 import android.text.method.LinkMovementMethod;
@@ -93,7 +92,7 @@ public class CommunityActivity extends FileActivity {
                                 getString(R.string.contributing_link)))));
 
         MaterialButton reportButton = findViewById(R.id.community_testing_report);
-        reportButton.getBackground().setColorFilter(ThemeUtils.primaryColor(this, true), PorterDuff.Mode.SRC_ATOP);
+        reportButton.setBackgroundColor(ThemeUtils.primaryColor(this,true));
         reportButton.setOnClickListener(v -> DisplayUtils.startLinkIntent(this, R.string.report_issue_link));
     }
 

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

@@ -109,7 +109,9 @@ import javax.inject.Inject;
 
 import androidx.annotation.NonNull;
 import androidx.appcompat.app.ActionBarDrawerToggle;
+import androidx.appcompat.app.AppCompatDelegate;
 import androidx.appcompat.graphics.drawable.DrawerArrowDrawable;
+import androidx.core.content.ContextCompat;
 import androidx.core.view.GravityCompat;
 import androidx.drawerlayout.widget.DrawerLayout;
 
@@ -989,7 +991,17 @@ public abstract class DrawerActivity extends ToolbarActivity
                 MenuItem menuItem = mNavigationView.getMenu().getItem(i);
                 if (menuItem.getIcon() != null) {
                     menuItem.getIcon().clearColorFilter();
-                    menuItem.setTitle(Html.fromHtml("<font color='#000000'>" + menuItem.getTitle() + "</font>"));
+                    if (menuItem.getGroupId() != R.id.drawer_menu_accounts
+                        || menuItem.getItemId() == R.id.drawer_menu_account_add
+                        || menuItem.getItemId() == R.id.drawer_menu_account_manage) {
+                        ThemeUtils.tintDrawable(
+                            menuItem.getIcon(), ContextCompat.getColor(this, R.color.drawer_menu_icon));
+                    }
+                    menuItem.setTitle(Html.fromHtml(
+                        "<font color='"
+                            + ThemeUtils.colorToHexString(ContextCompat.getColor(this, R.color.textColor))
+                            + "'>" + menuItem.getTitle()
+                            + "</font>"));
                 }
             }
 
@@ -1068,7 +1080,7 @@ public abstract class DrawerActivity extends ToolbarActivity
 
             float density = getResources().getDisplayMetrics().density;
             final int size = Math.round(24 * density);
-            int greyColor = getResources().getColor(R.color.standard_grey);
+            int greyColor = ContextCompat.getColor(this, R.color.drawer_menu_icon);
 
             for (final ExternalLink link : externalLinksProvider.getExternalLink(ExternalLinkType.LINK)) {
                 int id = mNavigationView.getMenu().add(R.id.drawer_menu_external_links,
@@ -1263,6 +1275,9 @@ public abstract class DrawerActivity extends ToolbarActivity
     @Override
     protected void onResume() {
         super.onResume();
+        getDelegate().setLocalNightMode(preferences.isDarkThemeEnabled() ?
+                                        AppCompatDelegate.MODE_NIGHT_YES : AppCompatDelegate.MODE_NIGHT_NO);
+        getDelegate().applyDayNight();
         setDrawerMenuItemChecked(mCheckedMenuItem);
     }
 

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

@@ -25,6 +25,7 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.res.ColorStateList;
 import android.content.res.Resources.NotFoundException;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
@@ -37,10 +38,10 @@ import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
 import android.view.View.OnClickListener;
-import android.widget.Button;
 
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.preferences.AppPreferences;
+import com.google.android.material.button.MaterialButton;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.common.operations.RemoteOperation;
@@ -90,8 +91,8 @@ public class FolderPickerActivity extends FileActivity implements FileFragment.C
     private boolean mSearchOnlyFolders;
     private boolean mDoNotEnterEncryptedFolder;
 
-    protected Button mCancelBtn;
-    protected Button mChooseBtn;
+    protected MaterialButton mCancelBtn;
+    protected MaterialButton mChooseBtn;
     private String caption;
     @Inject AppPreferences preferences;
 
@@ -405,7 +406,8 @@ public class FolderPickerActivity extends FileActivity implements FileFragment.C
         mChooseBtn = findViewById(R.id.folder_picker_btn_choose);
 
         if (mChooseBtn != null) {
-            mChooseBtn.getBackground().setColorFilter(ThemeUtils.primaryColor(this, true), PorterDuff.Mode.SRC_ATOP);
+            mChooseBtn.setBackgroundTintMode(PorterDuff.Mode.SRC_ATOP);
+            mChooseBtn.setBackgroundTintList(ColorStateList.valueOf(ThemeUtils.primaryColor(this, true)));
             mChooseBtn.setOnClickListener(this);
         }
 

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

@@ -23,7 +23,6 @@
 package com.owncloud.android.ui.activity;
 
 import android.content.Intent;
-import android.graphics.PorterDuff;
 import android.os.Bundle;
 import android.text.Editable;
 import android.text.TextUtils;
@@ -97,7 +96,7 @@ public class PassCodeActivity extends AppCompatActivity implements Injectable {
         int elementColor = ThemeUtils.elementColor(this);
 
         mBCancel = findViewById(R.id.cancel);
-        mBCancel.getBackground().setColorFilter(elementColor, PorterDuff.Mode.SRC_ATOP);
+        mBCancel.setBackgroundColor(ThemeUtils.primaryColor(this));
 
         mPassCodeHdr = findViewById(R.id.header);
         mPassCodeHdrExplanation = findViewById(R.id.explanation);

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

@@ -34,6 +34,7 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.res.ColorStateList;
 import android.content.res.Resources.NotFoundException;
 import android.graphics.Color;
 import android.graphics.PorterDuff;
@@ -63,6 +64,7 @@ import android.widget.ProgressBar;
 import android.widget.Spinner;
 import android.widget.TextView;
 
+import com.google.android.material.button.MaterialButton;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.preferences.AppPreferences;
 import com.owncloud.android.MainApp;
@@ -400,6 +402,7 @@ public class ReceiveExternalFilesActivity extends FileActivity
 
             final EditText userInput = view.findViewById(R.id.user_input);
             setFilename(userInput, selectPos);
+            userInput.setHighlightColor(ThemeUtils.primaryColor(getContext()));
             userInput.requestFocus();
 
             final Spinner spinner = view.findViewById(R.id.file_type);
@@ -748,10 +751,10 @@ public class ReceiveExternalFilesActivity extends FileActivity
 
                 mListView.setAdapter(sa);
             }
-            Button btnChooseFolder = findViewById(R.id.uploader_choose_folder);
-                btnChooseFolder.setOnClickListener(this);
-            btnChooseFolder.getBackground().setColorFilter(ThemeUtils.primaryColor(getAccount(), true, this),
-                        PorterDuff.Mode.SRC_ATOP);
+            MaterialButton btnChooseFolder = findViewById(R.id.uploader_choose_folder);
+            btnChooseFolder.setBackgroundTintMode(PorterDuff.Mode.SRC_ATOP);
+            btnChooseFolder.setBackgroundTintList(ColorStateList.valueOf(ThemeUtils.primaryColor(this, true)));
+            btnChooseFolder.setOnClickListener(this);
             btnChooseFolder.setTextColor(ThemeUtils.fontColor(this));
 
             if (mFile.canWrite()) {

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

@@ -250,7 +250,7 @@ public class RichDocumentsWebView extends ExternalSiteWebView {
                 }
 
                 if ("image/png".equalsIgnoreCase(file.getMimeType())) {
-                    thumbnailView.setBackgroundColor(getResources().getColor(R.color.background_color));
+                    thumbnailView.setBackgroundColor(getResources().getColor(R.color.bg_default));
                 }
             } else {
                 thumbnailView.setImageDrawable(MimeTypeUtil.getFileTypeIcon(file.getMimeType(), file.getFileName(),

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

@@ -39,7 +39,6 @@ import android.os.Build;
 import android.os.Bundle;
 import android.preference.ListPreference;
 import android.preference.Preference;
-import android.preference.PreferenceActivity;
 import android.preference.PreferenceCategory;
 import android.preference.PreferenceManager;
 import android.preference.PreferenceScreen;
@@ -96,7 +95,7 @@ import androidx.core.content.res.ResourcesCompat;
  *
  * It proxies the necessary calls via {@link androidx.appcompat.app.AppCompatDelegate} to be used with AppCompat.
  */
-public class SettingsActivity extends PreferenceActivity
+public class SettingsActivity extends ThemedPreferenceActivity
     implements StorageMigration.StorageMigrationProgressListener, LoadingVersionNumberTask.VersionDevInterface,
     Injectable {
 
@@ -692,6 +691,16 @@ public class SettingsActivity extends PreferenceActivity
         }
 
         loadStoragePath();
+
+        SwitchPreference themePref = (SwitchPreference) findPreference(AppPreferencesImpl.PREF__THEME);
+
+        themePref.setSummary(preferences.isDarkThemeEnabled() ?
+                            getString(R.string.prefs_value_theme_dark) : getString(R.string.prefs_value_theme_light));
+        themePref.setOnPreferenceChangeListener((preference, newValue) -> {
+            MainApp.setAppTheme((Boolean) newValue);
+
+            return true;
+        });
     }
 
     private String getAppVersion() {
@@ -727,7 +736,7 @@ public class SettingsActivity extends PreferenceActivity
         Window window = getWindow();
         if (window != null) {
             window.getDecorView().setBackgroundDrawable(new ColorDrawable(ResourcesCompat
-                    .getColor(getResources(), R.color.background_color, null)));
+                    .getColor(getResources(), R.color.bg_default, null)));
 
             if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                 window.setStatusBarColor(ThemeUtils.primaryColor(this));
@@ -1008,5 +1017,4 @@ public class SettingsActivity extends PreferenceActivity
     public void returnVersion(Integer latestVersion) {
         FileActivity.showDevSnackbar(this, latestVersion, true);
     }
-
 }

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

@@ -30,7 +30,6 @@ import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager;
-import android.graphics.Color;
 import android.graphics.Typeface;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
@@ -144,7 +143,8 @@ public class SsoGrantPermissionActivity extends BaseActivity {
             int start = text.indexOf(textBlock);
             int end = start + textBlock.length();
             ssb.setSpan(new StyleSpan(Typeface.BOLD), start, end, 0);
-            ssb.setSpan(new ForegroundColorSpan(Color.BLACK), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+            ssb.setSpan(new ForegroundColorSpan(getResources().getColor(R.color.textColor)), start, end,
+                                                Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
         }
 
         return ssb;

+ 80 - 0
src/main/java/com/owncloud/android/ui/activity/ThemedPreferenceActivity.java

@@ -0,0 +1,80 @@
+/*
+ * Nextcloud Android client application
+ *
+ * @author Daniel Bailey
+ * Copyright (C) 2019 Daniel Bailey
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package com.owncloud.android.ui.activity;
+
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+
+import javax.inject.Inject;
+
+import androidx.annotation.Nullable;
+
+public class ThemedPreferenceActivity
+    extends PreferenceActivity
+    implements SharedPreferences.OnSharedPreferenceChangeListener {
+
+    /**
+     * Tracks whether the activity should be recreate()'d after a theme change
+     */
+    private boolean themeChangePending;
+    private boolean paused;
+
+    @Inject SharedPreferences sharedPreferences;
+
+    @Override
+    protected void onPostCreate(@Nullable Bundle savedInstanceState) {
+        super.onPostCreate(savedInstanceState);
+        sharedPreferences.registerOnSharedPreferenceChangeListener(this);
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        sharedPreferences.unregisterOnSharedPreferenceChangeListener(this);
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        paused = true;
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        paused = false;
+
+        if(themeChangePending) {
+            recreate();
+        }
+    }
+
+    @Override
+    public void onSharedPreferenceChanged(final SharedPreferences sharedPreferences, final String key) {
+        if(paused) {
+            themeChangePending = true;
+            return;
+        }
+
+        recreate();
+    }
+}

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

@@ -35,7 +35,6 @@ import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
-import android.widget.Button;
 import android.widget.EditText;
 import android.widget.ImageView;
 import android.widget.Spinner;
@@ -92,7 +91,7 @@ public class UploadFilesActivity extends FileActivity implements
     private boolean mSelectAll;
     private boolean mLocalFolderPickerMode;
     private LocalFileListFragment mFileListFragment;
-    protected Button mUploadBtn;
+    protected MaterialButton mUploadBtn;
     private Spinner mBehaviourSpinner;
     private Account mAccountOnCreation;
     private DialogFragment mCurrentDialog;
@@ -178,7 +177,8 @@ public class UploadFilesActivity extends FileActivity implements
         mCancelButton.setOnClickListener(this);
 
         mUploadBtn = findViewById(R.id.upload_files_btn_upload);
-        mUploadBtn.getBackground().setColorFilter(ThemeUtils.primaryColor(this, true), PorterDuff.Mode.SRC_ATOP);
+        mUploadBtn.setBackgroundTintMode(PorterDuff.Mode.SRC_ATOP);
+        mUploadBtn.setBackgroundTintList(ColorStateList.valueOf(ThemeUtils.primaryColor(this, true)));
         mUploadBtn.setOnClickListener(this);
 
         int localBehaviour = preferences.getUploaderBehaviour();

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

@@ -26,7 +26,7 @@
 package com.owncloud.android.ui.activity;
 
 import android.accounts.Account;
-import android.app.AlertDialog;
+import androidx.appcompat.app.AlertDialog;
 import android.app.Dialog;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.ColorDrawable;

+ 6 - 2
src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java

@@ -24,7 +24,6 @@ package com.owncloud.android.ui.adapter;
 
 import android.content.Context;
 import android.content.res.Resources;
-import android.graphics.Color;
 import android.graphics.drawable.PictureDrawable;
 import android.net.Uri;
 import android.text.Spannable;
@@ -369,7 +368,12 @@ public class ActivityListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
                     }
                 }, idx1, idx2, 0);
                 ssb.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), idx1, idx2, 0);
-                ssb.setSpan(new ForegroundColorSpan(Color.BLACK), idx1, idx2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+                ssb.setSpan(
+                    new ForegroundColorSpan(context.getResources().getColor(R.color.textColor)),
+                    idx1,
+                    idx2,
+                    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
+                );
             }
             idx1 = text.indexOf('{', idx2);
         }

+ 1 - 2
src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java

@@ -23,7 +23,6 @@ package com.owncloud.android.ui.adapter;
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
-import android.graphics.Color;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -156,7 +155,7 @@ public class LocalFileListAdapter extends RecyclerView.Adapter<RecyclerView.View
                     gridViewHolder.checkbox.setImageDrawable(ThemeUtils.tintDrawable(R.drawable.ic_checkbox_marked,
                             ThemeUtils.primaryColor(mContext)));
                 } else {
-                    gridViewHolder.itemLayout.setBackgroundColor(Color.WHITE);
+                    gridViewHolder.itemLayout.setBackgroundColor(mContext.getResources().getColor(R.color.bg_default));
                     gridViewHolder.checkbox.setImageResource(R.drawable.ic_checkbox_blank_outline);
                 }
 

+ 5 - 6
src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java

@@ -22,8 +22,6 @@ package com.owncloud.android.ui.adapter;
 import android.content.Intent;
 import android.content.res.ColorStateList;
 import android.content.res.Resources;
-import android.graphics.Color;
-import android.graphics.PorterDuff;
 import android.graphics.Typeface;
 import android.graphics.drawable.PictureDrawable;
 import android.net.Uri;
@@ -77,7 +75,7 @@ import butterknife.ButterKnife;
 public class NotificationListAdapter extends RecyclerView.Adapter<NotificationListAdapter.NotificationViewHolder> {
     private static final String FILE = "file";
     private StyleSpan styleSpanBold = new StyleSpan(Typeface.BOLD);
-    private ForegroundColorSpan foregroundColorSpanBlack = new ForegroundColorSpan(Color.BLACK);
+    private ForegroundColorSpan foregroundColorSpanBlack;
 
     private List<Notification> notificationsList;
     private OwnCloudClient client;
@@ -87,6 +85,8 @@ public class NotificationListAdapter extends RecyclerView.Adapter<NotificationLi
         this.notificationsList = new ArrayList<>();
         this.client = client;
         this.notificationsActivity = notificationsActivity;
+        foregroundColorSpanBlack = new ForegroundColorSpan(
+            notificationsActivity.getResources().getColor(R.color.textColor));
     }
 
     public void setNotificationItems(List<Notification> notificationItems) {
@@ -166,15 +166,14 @@ public class NotificationListAdapter extends RecyclerView.Adapter<NotificationLi
             int primaryColor = ThemeUtils.primaryColor(notificationsActivity);
 
             if (action.primary) {
-                button.getBackground().setColorFilter(primaryColor, PorterDuff.Mode.SRC_ATOP);
+                button.setBackgroundColor(primaryColor);
                 button.setTextColor(ThemeUtils.fontColor(notificationsActivity));
                 button.setTypeface(button.getTypeface(), Typeface.BOLD);
             } else {
                 button.setStrokeColor(ColorStateList.valueOf(resources.getColor(R.color.grey_200)));
                 button.setStrokeWidth(3);
 
-                button.getBackground().setColorFilter(resources.getColor(R.color.transparent),
-                                                      PorterDuff.Mode.SRC_ATOP);
+                button.setBackgroundColor(resources.getColor(R.color.transparent));
                 button.setTextColor(primaryColor);
                 button.setTypeface(button.getTypeface(), Typeface.BOLD);
             }

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

@@ -30,7 +30,6 @@ import android.content.ContentValues;
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
-import android.graphics.Color;
 import android.graphics.PorterDuff;
 import android.graphics.drawable.Drawable;
 import android.os.Handler;
@@ -330,7 +329,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                 gridViewHolder.checkbox.setImageDrawable(ThemeUtils.tintDrawable(R.drawable.ic_checkbox_marked,
                                                                                  ThemeUtils.primaryColor(mContext)));
             } else {
-                gridViewHolder.itemLayout.setBackgroundColor(Color.WHITE);
+                gridViewHolder.itemLayout.setBackgroundColor(mContext.getResources().getColor(R.color.bg_default));
                 gridViewHolder.checkbox.setImageResource(R.drawable.ic_checkbox_blank_outline);
             }
 
@@ -598,7 +597,7 @@ public class OCFileListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHol
                 }
 
                 if ("image/png".equalsIgnoreCase(file.getMimeType())) {
-                    thumbnailView.setBackgroundColor(mContext.getResources().getColor(R.color.background_color));
+                    thumbnailView.setBackgroundColor(mContext.getResources().getColor(R.color.bg_default));
                 }
             } else {
                 thumbnailView.setImageDrawable(MimeTypeUtil.getFileTypeIcon(file.getMimeType(),

+ 1 - 1
src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java

@@ -253,7 +253,7 @@ public class TrashbinListAdapter extends RecyclerView.Adapter<RecyclerView.ViewH
                 }
 
                 if ("image/png".equalsIgnoreCase(file.getMimeType())) {
-                    thumbnailView.setBackgroundColor(context.getResources().getColor(R.color.background_color));
+                    thumbnailView.setBackgroundColor(context.getResources().getColor(R.color.bg_default));
                 }
             } else {
                 thumbnailView.setImageDrawable(MimeTypeUtil.getFileTypeIcon(file.getMimeType(), file.getFileName(),

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

@@ -416,7 +416,7 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
 
             if ("image/png".equals(item.getMimeType())) {
                 itemViewHolder.thumbnail.setBackgroundColor(parentActivity.getResources()
-                        .getColor(R.color.background_color));
+                        .getColor(R.color.bg_default));
             }
 
 
@@ -451,7 +451,7 @@ public class UploadListAdapter extends SectionedRecyclerViewAdapter<SectionedVie
 
             if ("image/png".equalsIgnoreCase(item.getMimeType())) {
                 itemViewHolder.thumbnail.setBackgroundColor(parentActivity.getResources()
-                        .getColor(R.color.background_color));
+                        .getColor(R.color.bg_default));
             }
         } else {
             itemViewHolder.thumbnail.setImageDrawable(MimeTypeUtil.getFileTypeIcon(item.getMimeType(), fileName,

+ 2 - 1
src/main/java/com/owncloud/android/ui/asynctasks/LoadUrlTask.java

@@ -33,6 +33,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.operations.RichDocumentsUrlOperation;
 import com.owncloud.android.ui.activity.RichDocumentsWebView;
 import com.owncloud.android.utils.DisplayUtils;
+import com.owncloud.android.utils.ThemeUtils;
 
 import java.lang.ref.WeakReference;
 
@@ -80,9 +81,9 @@ public class LoadUrlTask extends AsyncTask<String, Void, String> {
                 if (richDocumentsWebView.getWebview().getVisibility() != View.VISIBLE) {
                     Snackbar snackbar = DisplayUtils.createSnackbar(richDocumentsWebView.findViewById(android.R.id.content),
                                                                     R.string.timeout_richDocuments, Snackbar.LENGTH_INDEFINITE)
-                        .setActionTextColor(richDocumentsWebView.getResources().getColor(R.color.white))
                         .setAction(R.string.fallback_weblogin_back, v -> richDocumentsWebView.closeView());
 
+                    ThemeUtils.colorSnackbar(richDocumentsWebView.getApplicationContext(),snackbar);
                     richDocumentsWebView.setLoadingSnackbar(snackbar);
                     snackbar.show();
                 }

+ 1 - 0
src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java

@@ -99,6 +99,7 @@ public class CreateFolderDialogFragment
         inputText.setText("");
         inputText.requestFocus();
         inputText.getBackground().setColorFilter(accentColor, PorterDuff.Mode.SRC_ATOP);
+        inputText.setHighlightColor(ThemeUtils.primaryColor(getActivity()));
 
         // Build the dialog
         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

+ 6 - 0
src/main/java/com/owncloud/android/ui/dialog/ExpirationDatePickerDialogFragment.java

@@ -32,6 +32,7 @@ import com.owncloud.android.R;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.ui.activity.FileActivity;
+import com.owncloud.android.utils.ThemeUtils;
 
 import java.util.Calendar;
 
@@ -140,6 +141,11 @@ public class ExpirationDatePickerDialogFragment
                     }
                 });
 
+        dialog.show();
+        dialog.getButton(DatePickerDialog.BUTTON_NEUTRAL).setTextColor(ThemeUtils.primaryColor(getContext()));
+        dialog.getButton(DatePickerDialog.BUTTON_NEGATIVE).setTextColor(ThemeUtils.primaryColor(getContext()));
+        dialog.getButton(DatePickerDialog.BUTTON_POSITIVE).setTextColor(ThemeUtils.primaryColor(getContext()));
+
         // Prevent days in the past may be chosen
         DatePicker picker = dialog.getDatePicker();
         picker.setMinDate(tomorrowInMillis - 1000);

+ 1 - 0
src/main/java/com/owncloud/android/ui/dialog/NoteDialogFragment.java

@@ -109,6 +109,7 @@ public class NoteDialogFragment extends DialogFragment implements DialogInterfac
 
         // Setup layout
         noteEditText.setText(share.getNote());
+        noteEditText.setHighlightColor(ThemeUtils.primaryColor(getActivity()));
         noteEditText.requestFocus();
         ThemeUtils.colorTextInputLayout(noteEditTextInputLayout, accentColor);
 

+ 1 - 0
src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java

@@ -102,6 +102,7 @@ public class RenameFileDialogFragment
         // Setup layout
         String currentName = mTargetFile.getFileName();
         EditText inputText = v.findViewById(R.id.user_input);
+        inputText.setHighlightColor(ThemeUtils.primaryColor(getActivity()));
         inputText.setText(currentName);
         ThemeUtils.themeEditText(getContext(), inputText, false);
         int selectionStart = 0;

+ 1 - 0
src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.java

@@ -144,6 +144,7 @@ public class SharePasswordDialogFragment extends DialogFragment implements Dialo
         // Build the dialog
         AlertDialog.Builder builder = new AlertDialog.Builder(getActivity(),
                 R.style.Theme_ownCloud_Dialog_NoButtonBarStyle);
+
         builder.setView(v)
                 .setPositiveButton(R.string.common_ok, this)
                 .setNegativeButton(R.string.common_cancel, this)

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

@@ -194,6 +194,9 @@ public class ExtendedListFragment extends Fragment implements
         searchView.setOnCloseListener(this);
         ThemeUtils.themeSearchView(searchView, true, requireContext());
 
+        SearchView.SearchAutoComplete theTextArea = searchView.findViewById(R.id.search_src_text);
+        theTextArea.setHighlightColor(ThemeUtils.primaryAccentColor(getContext()));
+
         final Handler handler = new Handler();
 
         DisplayMetrics displaymetrics = new DisplayMetrics();

+ 1 - 1
src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java

@@ -240,7 +240,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
         if (activity != null) {
             activity.setPreviewImageVisibility(View.VISIBLE);
             activity.setProgressBarVisibility(View.GONE);
-            ThemeUtils.setStatusBarColor(activity, activity.getResources().getColor(R.color.black));
+            ThemeUtils.setStatusBarColor(activity, activity.getResources().getColor(R.color.background_color_inverse));
             if (activity.getSupportActionBar() != null) {
                 activity.getSupportActionBar().setTitle(null);
                 activity.getSupportActionBar().setBackgroundDrawable(null);

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

@@ -210,8 +210,6 @@ public class FileDetailSharingFragment extends Fragment implements UserListAdapt
         internalLinkIcon.getDrawable().mutate().setColorFilter(getResources().getColor(R.color.black),
                                                                PorterDuff.Mode.SRC_IN);
 
-
-
         return view;
     }
 

+ 7 - 7
src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java

@@ -176,19 +176,15 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi
             calendarPickerOpen = true;
         }
 
-        int accentColor = ThemeUtils.primaryAccentColor(getContext());
+        int primaryColor = ThemeUtils.primaryColor(getContext());
         int fontColor = ThemeUtils.fontColor(getContext());
 
-        backupNow.getBackground().setColorFilter(accentColor, PorterDuff.Mode.SRC_ATOP);
+        backupNow.setBackgroundColor(primaryColor);
         backupNow.setTextColor(fontColor);
 
-        contactsDatePickerBtn.getBackground().setColorFilter(accentColor, PorterDuff.Mode.SRC_ATOP);
+        contactsDatePickerBtn.setBackgroundColor(primaryColor);
         contactsDatePickerBtn.setTextColor(fontColor);
 
-        MaterialButton chooseDate = view.findViewById(R.id.contacts_datepicker);
-        chooseDate.getBackground().setColorFilter(accentColor, PorterDuff.Mode.SRC_ATOP);
-        chooseDate.setTextColor(ThemeUtils.fontColor(getContext()));
-
         return view;
     }
 
@@ -449,7 +445,11 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi
                 }
             });
 
+            datePickerDialog.setTitle("");
             datePickerDialog.show();
+            // TODO How do we deal with primary colours that are too light or dark
+            datePickerDialog.getButton(DatePickerDialog.BUTTON_NEGATIVE).setTextColor(ThemeUtils.primaryColor(getContext()));
+            datePickerDialog.getButton(DatePickerDialog.BUTTON_POSITIVE).setTextColor(ThemeUtils.primaryColor(getContext()));
         } else {
             DisplayUtils.showSnackMessage(getView().findViewById(R.id.contacts_linear_layout),
                     R.string.contacts_preferences_something_strange_happened);

+ 5 - 5
src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java

@@ -287,7 +287,7 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
                     }
                 }
                 mMultiView.setVisibility(View.GONE);
-                mImageView.setBackgroundColor(getResources().getColor(R.color.black));
+                mImageView.setBackgroundColor(getResources().getColor(R.color.background_color_inverse));
                 mImageView.setVisibility(View.VISIBLE);
 
             } else {
@@ -607,7 +607,7 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
 
             mMultiView.setVisibility(View.GONE);
             if (getResources() != null) {
-                mImageView.setBackgroundColor(getResources().getColor(R.color.black));
+                mImageView.setBackgroundColor(getResources().getColor(R.color.background_color_inverse));
             }
             mImageView.setVisibility(View.VISIBLE);
 
@@ -617,7 +617,7 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
     private LayerDrawable generateCheckerboardLayeredDrawable(LoadImage result, Bitmap bitmap) {
         Resources r = getResources();
         Drawable[] layers = new Drawable[2];
-        layers[0] = r.getDrawable(R.color.white);
+        layers[0] = r.getDrawable(R.color.bg_default);
         Drawable bitmapDrawable;
 
         if (MIME_TYPE_PNG.equalsIgnoreCase(result.ocFile.getMimeType())) {
@@ -681,7 +681,7 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
             mMultiListMessage.setText(message);
             mMultiListIcon.setImageResource(icon);
 
-            mMultiView.setBackgroundColor(Color.BLACK);
+            mMultiView.setBackgroundColor(getResources().getColor(R.color.background_color_inverse));
             mMultiListHeadline.setTextColor(getResources().getColor(R.color.standard_grey));
             mMultiListMessage.setTextColor(getResources().getColor(R.color.standard_grey));
 
@@ -766,7 +766,7 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
                 Drawable layerOne;
 
                 if (previewImageActivity.isSystemUIVisible()) {
-                    layerOne = getResources().getDrawable(R.color.white);
+                    layerOne = getResources().getDrawable(R.color.bg_default);
                 } else {
                     layerOne = getResources().getDrawable(R.drawable.backrepeat);
                 }

+ 6 - 5
src/main/java/com/owncloud/android/utils/ThemeUtils.java

@@ -126,10 +126,12 @@ public final class ThemeUtils {
     }
 
     public static int primaryColor(Account account, boolean replaceWhite, Context context) {
-        OCCapability capability = getCapability(account, context);
+        if (context == null) {
+            return Color.GRAY;
+        }
 
         try {
-            int color = Color.parseColor(capability.getServerColor());
+            int color = Color.parseColor(getCapability(account, context).getServerColor());
             if (replaceWhite && Color.WHITE == color) {
                 return Color.GRAY;
             } else {
@@ -506,8 +508,7 @@ public final class ThemeUtils {
                 color = ContextCompat.getColor(context, R.color.themed_fg_inverse);
             }
         }
-
-        editText.setHintTextColor(color);
+        
         editText.setTextColor(color);
         editText.setHighlightColor(context.getResources().getColor(R.color.fg_contrast));
         setEditTextCursorColor(editText, color);
@@ -519,7 +520,7 @@ public final class ThemeUtils {
      *
      * @param searchView       searchView to be changed
      * @param themedBackground true if background is themed, e.g. on action bar; false if background is white
-     * @param context
+     * @param context          the app's context
      */
     public static void themeSearchView(SearchView searchView, boolean themedBackground, Context context) {
         // hacky as no default way is provided

二進制
src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_1.png


二進制
src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_2.png


二進制
src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_3.png


二進制
src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_4.png


二進制
src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_5.png


二進制
src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_6.png


二進制
src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_7.png


二進制
src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_8.png


+ 24 - 0
src/main/res/drawable-night/round_bgnd.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Nextcloud Android client application
+
+    @author Andy Scherzinger
+    Copyright (C) 2019 Andy Scherzinger
+
+    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/>.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       android:shape="oval">
+    <solid android:color="#222222"/>
+</shape>

+ 36 - 0
src/main/res/drawable-night/shared_via_link.xml

@@ -0,0 +1,36 @@
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2015 ownCloud Inc.
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License version 2,
+  as published by the Free Software Foundation.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+-->
+<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="#FFFFFFFF"
+        android:strokeColor="#FF000000"
+        android:strokeWidth="0.2"
+        android:strokeMiterLimit="4"
+        android:pathData="M5.99 5.318a3.332 3.332 0 0 0 0 4.693c 0.116 0.118 0.226 0.22 0.355 0.315l1.383-1.383A1.4 1.4 0 0 1 7.33 6.66l3.352-3.352c 0.568-0.57 1.442-0.57 2.01 0s 0.57 1.442 0 2.01l-1.13 1.132c 0.34 0.725 0.464 1.518 0.377 2.304l2.094-2.095c1.288-1.29 1.288-3.406 0-4.694s-3.405-1.288-4.693 0L5.99 5.318z"/>
+    <path
+        android:fillColor="#FFFFFFFF"
+        android:strokeColor="#FF000000"
+        android:strokeWidth="0.2"
+        android:strokeMiterLimit="4"
+        android:pathData="M10.01 10.68a3.332 3.332 0 0 0 0-4.692 3.126 3.126 0 0 0-0.355-0.314L8.272 7.057A1.4 1.4 0 0 1 8.67 9.34l-3.35 3.35c-0.57 0.57-1.444 0.57-2.013 0.002s-0.568-1.442 0-2.01L4.44 9.55a4.288 4.288 0 0 1-0.38-2.305L1.967 9.34c-1.288 1.29-1.288 3.405 0 4.693s3.405 1.29 4.693 0l3.35-3.352z"/>
+</vector>

+ 30 - 0
src/main/res/drawable-night/shared_via_users.xml

@@ -0,0 +1,30 @@
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2015 ownCloud Inc.
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License version 2,
+  as published by the Free Software Foundation.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+-->
+<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="#FFFFFFFF"
+        android:strokeColor="#FF000000"
+        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"/>
+</vector>

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

@@ -23,7 +23,7 @@
     <item android:bottom="5dp" android:top="5dp" android:right="5dp" android:left="5dp">
         <shape
             android:shape="oval">
-            <solid android:color="@color/white"/>
+            <solid android:color="@color/indicator_dot_selected"/>
             <size android:width="8dp" android:height="8dp" />
         </shape>
     </item>

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

@@ -22,6 +22,6 @@
 
     <item android:drawable="@color/owncloud_blue_bright" android:state_pressed="true"/>
     <item android:drawable="@color/owncloud_blue_bright" android:state_focused="true"/>
-    <item android:drawable="@color/background_color" />
+    <item android:drawable="@color/bg_default" />
 
 </selector>

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

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android">
-    <solid android:color="@color/white"/>
+    <solid android:color="@color/process_dialog_background"/>
     <padding
         android:left="@dimen/standard_padding"
         android:top="4dp"

+ 20 - 1
src/main/res/drawable/round_bgnd.xml

@@ -1,5 +1,24 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+    Nextcloud Android client application
+
+    @author Andy Scherzinger
+    Copyright (C) 2019 Andy Scherzinger
+
+    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/>.
+-->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
        android:shape="oval">
     <solid android:color="#ffffff"/>
-</shape>
+</shape>

+ 24 - 0
src/main/res/drawable/round_bgnd_icons.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Nextcloud Android client application
+
+    @author Andy Scherzinger
+    Copyright (C) 2019 Andy Scherzinger
+
+    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/>.
+-->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+       android:shape="oval">
+    <solid android:color="#ffffff"/>
+</shape>

+ 18 - 0
src/main/res/drawable/shared_via_link.xml

@@ -1,3 +1,21 @@
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2015 ownCloud Inc.
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License version 2,
+  as published by the Free Software Foundation.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+-->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="16dp"
         android:height="16dp"

+ 18 - 0
src/main/res/drawable/shared_via_users.xml

@@ -1,3 +1,21 @@
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2015 ownCloud Inc.
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License version 2,
+  as published by the Free Software Foundation.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+-->
 <vector xmlns:android="http://schemas.android.com/apk/res/android"
         android:width="16dp"
         android:height="16dp"

+ 2 - 2
src/main/res/drawable/uploader_list_separator.xml

@@ -19,5 +19,5 @@
 -->
 <shape
   xmlns:android="http://schemas.android.com/apk/res/android">
-    <gradient android:startColor="@color/filelist_icon_backgorund" android:endColor="@color/filelist_icon_backgorund" android:angle="0"/>
-</shape>
+    <gradient android:startColor="@color/filelist_icon_background" android:endColor="@color/filelist_icon_background" android:angle="0" />
+</shape>

+ 229 - 225
src/main/res/layout-land/account_setup.xml

@@ -1,225 +1,229 @@
-<?xml version="1.0" encoding="utf-8"?><!--
-  ownCloud Android client application
-
-  Copyright (C) 2012 Bartek Przybylski
-  Copyright (C) 2015-2016 ownCloud Inc.
-  Copyright (C) 2016 Nextcloud
-  Copyright (C) 2019 Tobias Kaminsky
-
-  This program is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License version 2,
-  as published by the Free Software Foundation.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
--->
-<LinearLayout 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"
-    android:layout_alignParentTop="true"
-    android:orientation="horizontal"
-    android:padding="@dimen/standard_padding">
-
-    <ImageView
-        android:id="@+id/thumbnail"
-        android:layout_width="0dp"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center"
-        android:layout_weight="1"
-        android:contentDescription="@string/app_name"
-        android:src="@drawable/logo" />
-
-    <ScrollView
-        android:id="@+id/scroll"
-        android:layout_width="0dp"
-        android:layout_height="match_parent"
-        android:layout_weight="1"
-        android:fillViewport="true"
-        android:orientation="vertical">
-
-        <LinearLayout
-            android:id="@+id/LinearLayout1"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:gravity="center"
-            android:orientation="vertical"
-            android:padding="@dimen/standard_half_padding">
-
-            <com.google.android.material.button.MaterialButton
-                android:id="@+id/centeredRefreshButton"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_horizontal"
-                android:layout_marginBottom="@dimen/alternate_margin"
-                android:contentDescription="@string/auth_check_server"
-                android:text="@string/auth_check_server"
-                android:theme="@style/Button"
-                android:visibility="gone"
-                app:cornerRadius="@dimen/button_corner_radius" />
-
-            <TextView
-                android:id="@+id/instructions_message"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="fill_horizontal"
-                android:layout_marginBottom="@dimen/alternate_margin"
-                android:contentDescription="@string/auth_expired_basic_auth_toast"
-                android:text="@string/auth_expired_basic_auth_toast"
-                android:textColor="@color/login_text_color"
-                android:visibility="gone" />
-
-            <FrameLayout
-                android:id="@+id/hostUrlFrame"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginBottom="@dimen/zero">
-
-                <LinearLayout
-                    android:layout_width="match_parent"
-                    android:layout_height="match_parent"
-                    android:orientation="vertical">
-
-                    <TextView
-                        android:id="@+id/editText"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:ems="10"
-                        android:text="@string/auth_host_url"
-                        android:textColor="@color/login_text_color" />
-
-                    <com.google.android.material.textfield.TextInputEditText
-                        android:id="@+id/hostUrlInput"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_gravity="bottom"
-                        android:contentDescription="@string/auth_host_address"
-                        android:drawablePadding="@dimen/alternate_half_padding"
-                        android:inputType="textUri"
-                        android:paddingStart="@dimen/zero"
-                        android:paddingLeft="@dimen/zero"
-                        android:paddingEnd="@dimen/alternate_padding_right"
-                        android:paddingRight="@dimen/alternate_padding_right"
-                        android:textColor="@color/login_text_color"
-                        android:textColorHint="@color/login_text_hint_color">
-
-                        <requestFocus />
-
-                    </com.google.android.material.textfield.TextInputEditText>
-
-                </LinearLayout>
-
-                <ImageButton
-                    android:id="@+id/testServerButton"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center_vertical|end"
-                    android:layout_marginEnd="@dimen/alternate_half_padding"
-                    android:layout_marginRight="@dimen/alternate_half_padding"
-                    android:background="@android:color/transparent"
-                    android:contentDescription="@string/test_server_button"
-                    android:onClick="onTestServerConnectionClick"
-                    android:padding="@dimen/zero"
-                    android:scaleType="fitCenter"
-                    android:src="@drawable/arrow_right"
-                    android:tint="@color/white" />
-
-                <ImageButton
-                    android:id="@+id/embeddedRefreshButton"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center_vertical|end"
-                    android:layout_marginEnd="@dimen/alternate_half_margin"
-                    android:layout_marginRight="@dimen/alternate_half_margin"
-                    android:background="@android:color/transparent"
-                    android:contentDescription="@string/auth_refresh_button"
-                    android:padding="@dimen/zero"
-                    android:scaleType="fitCenter"
-                    android:src="@drawable/ic_action_refresh"
-                    android:visibility="gone" />
-            </FrameLayout>
-
-            <TextView
-                android:id="@+id/server_status_text"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginBottom="@dimen/alternate_half_margin"
-                android:contentDescription="@string/auth_testing_connection"
-                android:drawableStart="@android:drawable/stat_notify_sync"
-                android:drawableLeft="@android:drawable/stat_notify_sync"
-                android:drawablePadding="@dimen/alternate_half_padding"
-                android:gravity="center_vertical"
-                android:minHeight="@dimen/display_text_min_height"
-                android:text="@string/auth_testing_connection"
-                android:textColor="@color/login_text_color" />
-
-            <com.google.android.material.textfield.TextInputEditText
-                android:id="@+id/account_username"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:autofillHints="username"
-                android:ems="10"
-                android:hint="@string/auth_username"
-                android:inputType="textNoSuggestions"
-                android:textColor="@color/login_text_color"
-                android:textColorHint="@color/login_text_hint_color"
-                android:visibility="gone" />
-
-            <com.google.android.material.textfield.TextInputEditText
-                android:id="@+id/account_password"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:autofillHints="password"
-                android:drawablePadding="@dimen/alternate_half_padding"
-                android:ems="10"
-                android:hint="@string/auth_password"
-                android:inputType="textPassword"
-                android:textColor="@color/login_text_color"
-                android:textColorHint="@color/login_text_hint_color"
-                android:visibility="gone" />
-
-            <TextView
-                android:id="@+id/auth_status_text"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:contentDescription="@string/auth_unauthorized"
-                android:drawableStart="@android:drawable/stat_notify_sync"
-                android:drawableLeft="@android:drawable/stat_notify_sync"
-                android:drawablePadding="@dimen/alternate_half_padding"
-                android:gravity="center_vertical"
-                android:text="@string/auth_unauthorized"
-                android:textColor="@color/login_text_color" />
-
-            <ImageButton
-                android:id="@+id/scanQR"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:background="@color/transparent"
-                android:contentDescription="@string/scanQR_description"
-                android:src="@drawable/qrcode_scan"
-                android:theme="@style/Button.Login" />
-
-            <com.google.android.material.button.MaterialButton
-                android:id="@+id/buttonOK"
-                style="@style/Button.Login"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_horizontal"
-                android:contentDescription="@string/setup_btn_connect"
-                android:enabled="false"
-                android:padding="@dimen/standard_padding"
-                android:text="@string/setup_btn_connect"
-                android:theme="@style/Button.Login"
-                android:visibility="gone"
-                app:cornerRadius="@dimen/button_corner_radius" />
-
-        </LinearLayout>
-
-    </ScrollView>
-
-</LinearLayout>
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2012 Bartek Przybylski
+  Copyright (C) 2015-2016 ownCloud Inc.
+  Copyright (C) 2016 Nextcloud
+  Copyright (C) 2019 Tobias Kaminsky
+
+  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/>.
+-->
+<LinearLayout 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"
+    android:layout_alignParentTop="true"
+    android:orientation="horizontal"
+    android:padding="@dimen/standard_padding">
+
+    <ImageView
+        android:id="@+id/thumbnail"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:layout_weight="1"
+        android:contentDescription="@string/app_name"
+        android:src="@drawable/logo" />
+
+    <ScrollView
+        android:id="@+id/scroll"
+        android:layout_width="0dp"
+        android:layout_height="match_parent"
+        android:layout_weight="1"
+        android:fillViewport="true"
+        android:orientation="vertical">
+
+        <LinearLayout
+            android:id="@+id/LinearLayout1"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:orientation="vertical"
+            android:padding="@dimen/standard_half_padding">
+
+            <com.google.android.material.button.MaterialButton
+                android:id="@+id/centeredRefreshButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal"
+                android:layout_marginBottom="@dimen/alternate_margin"
+                android:contentDescription="@string/auth_check_server"
+                android:text="@string/auth_check_server"
+                android:theme="@style/Button"
+                android:visibility="gone"
+                app:cornerRadius="@dimen/button_corner_radius" />
+
+            <TextView
+                android:id="@+id/instructions_message"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="fill_horizontal"
+                android:layout_marginBottom="@dimen/alternate_margin"
+                android:contentDescription="@string/auth_expired_basic_auth_toast"
+                android:text="@string/auth_expired_basic_auth_toast"
+                android:textColor="@color/login_text_color"
+                android:visibility="gone" />
+
+            <FrameLayout
+                android:id="@+id/hostUrlFrame"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="@dimen/zero"
+                android:background="@color/primary">
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="vertical">
+
+                    <TextView
+                        android:id="@+id/editText"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:ems="10"
+                        android:text="@string/auth_host_url"
+                        android:textColor="@color/login_text_color" />
+
+                    <com.google.android.material.textfield.TextInputEditText
+                        android:id="@+id/hostUrlInput"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="bottom"
+                        android:contentDescription="@string/auth_host_address"
+                        android:drawablePadding="@dimen/alternate_half_padding"
+                        android:inputType="textUri"
+                        android:paddingStart="@dimen/zero"
+                        android:paddingLeft="@dimen/zero"
+                        android:paddingEnd="@dimen/alternate_padding_right"
+                        android:paddingRight="@dimen/alternate_padding_right"
+                        android:textColor="@color/login_text_color"
+                        android:textColorHint="@color/login_text_hint_color"
+                        android:theme="@style/Nextcloud.EditText.Login">
+
+                        <requestFocus />
+
+                    </com.google.android.material.textfield.TextInputEditText>
+
+                </LinearLayout>
+
+                <ImageButton
+                    android:id="@+id/testServerButton"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_vertical|end"
+                    android:layout_marginEnd="@dimen/alternate_half_padding"
+                    android:layout_marginRight="@dimen/alternate_half_padding"
+                    android:background="@android:color/transparent"
+                    android:contentDescription="@string/test_server_button"
+                    android:onClick="onTestServerConnectionClick"
+                    android:padding="@dimen/zero"
+                    android:scaleType="fitCenter"
+                    android:src="@drawable/arrow_right"
+                    android:tint="@color/login_btn_tint" />
+
+                <ImageButton
+                    android:id="@+id/embeddedRefreshButton"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_vertical|end"
+                    android:layout_marginEnd="@dimen/alternate_half_margin"
+                    android:layout_marginRight="@dimen/alternate_half_margin"
+                    android:background="@android:color/transparent"
+                    android:contentDescription="@string/auth_refresh_button"
+                    android:padding="@dimen/zero"
+                    android:scaleType="fitCenter"
+                    android:src="@drawable/ic_action_refresh"
+                    android:visibility="gone" />
+            </FrameLayout>
+
+            <TextView
+                android:id="@+id/server_status_text"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="@dimen/alternate_half_margin"
+                android:contentDescription="@string/auth_testing_connection"
+                android:drawableStart="@android:drawable/stat_notify_sync"
+                android:drawableLeft="@android:drawable/stat_notify_sync"
+                android:drawablePadding="@dimen/alternate_half_padding"
+                android:gravity="center_vertical"
+                android:minHeight="@dimen/display_text_min_height"
+                android:text="@string/auth_testing_connection"
+                android:textColor="@color/login_text_color" />
+
+            <com.google.android.material.textfield.TextInputEditText
+                android:id="@+id/account_username"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:autofillHints="username"
+                android:ems="10"
+                android:hint="@string/auth_username"
+                android:inputType="textNoSuggestions"
+                android:textColor="@color/login_text_color"
+                android:textColorHint="@color/login_text_hint_color"
+                android:visibility="gone" />
+
+            <com.google.android.material.textfield.TextInputEditText
+                android:id="@+id/account_password"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:autofillHints="password"
+                android:drawablePadding="@dimen/alternate_half_padding"
+                android:ems="10"
+                android:hint="@string/auth_password"
+                android:inputType="textPassword"
+                android:textColor="@color/login_text_color"
+                android:textColorHint="@color/login_text_hint_color"
+                android:visibility="gone" />
+
+            <TextView
+                android:id="@+id/auth_status_text"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:contentDescription="@string/auth_unauthorized"
+                android:drawableStart="@android:drawable/stat_notify_sync"
+                android:drawableLeft="@android:drawable/stat_notify_sync"
+                android:drawablePadding="@dimen/alternate_half_padding"
+                android:gravity="center_vertical"
+                android:text="@string/auth_unauthorized"
+                android:textColor="@color/login_text_color" />
+
+            <ImageButton
+                android:id="@+id/scanQR"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:background="@color/transparent"
+                android:contentDescription="@string/scanQR_description"
+                android:src="@drawable/qrcode_scan"
+                android:theme="@style/Button.Login" />
+
+            <com.google.android.material.button.MaterialButton
+                android:id="@+id/buttonOK"
+                style="@style/Button.Login"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal"
+                android:contentDescription="@string/setup_btn_connect"
+                android:enabled="false"
+                android:padding="@dimen/standard_padding"
+                android:text="@string/setup_btn_connect"
+                android:theme="@style/Button.Login"
+                android:visibility="gone"
+                app:cornerRadius="@dimen/button_corner_radius" />
+
+        </LinearLayout>
+
+    </ScrollView>
+
+</LinearLayout>

+ 230 - 225
src/main/res/layout/account_setup.xml

@@ -1,225 +1,230 @@
-<?xml version="1.0" encoding="utf-8"?><!--
-  ownCloud Android client application
-
-  Copyright (C) 2012 Bartek Przybylski
-  Copyright (C) 2015-2016 ownCloud Inc.
-  Copyright (C) 2016 Nextcloud
-  Copyright (C) 2019 Tobias Kaminsky
-
-  This program is free software: you can redistribute it and/or modify
-  it under the terms of the GNU General Public License version 2,
-  as published by the Free Software Foundation.
-
-  This program is distributed in the hope that it will be useful,
-  but WITHOUT ANY WARRANTY; without even the implied warranty of
-  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-  GNU General Public License for more details.
-
-  You should have received a copy of the GNU General Public License
-  along with this program.  If not, see <http://www.gnu.org/licenses/>.
--->
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:id="@+id/scroll"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:layout_gravity="center"
-    android:fillViewport="true"
-    android:orientation="vertical">
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:gravity="center"
-        android:orientation="vertical"
-        android:padding="@dimen/standard_padding">
-
-        <ImageView
-            android:id="@+id/thumbnail"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:layout_marginBottom="@dimen/standard_padding"
-            android:contentDescription="@string/app_name"
-            android:src="@drawable/logo" />
-
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:gravity="center"
-            android:orientation="vertical"
-            android:padding="@dimen/standard_half_padding">
-
-            <com.google.android.material.button.MaterialButton
-                android:id="@+id/centeredRefreshButton"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_horizontal"
-                android:layout_marginBottom="@dimen/alternate_margin"
-                android:contentDescription="@string/auth_check_server"
-                android:text="@string/auth_check_server"
-                android:theme="@style/Button"
-                android:visibility="gone"
-                app:cornerRadius="@dimen/button_corner_radius" />
-
-            <TextView
-                android:id="@+id/instructions_message"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="fill_horizontal"
-                android:layout_marginBottom="@dimen/alternate_margin"
-                android:contentDescription="@string/auth_expired_basic_auth_toast"
-                android:text="@string/auth_expired_basic_auth_toast"
-                android:textColor="@color/login_text_color"
-                android:visibility="gone" />
-
-
-            <FrameLayout
-                android:id="@+id/hostUrlFrame"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginBottom="@dimen/zero">
-
-                <LinearLayout
-                    android:layout_width="match_parent"
-                    android:layout_height="match_parent"
-                    android:orientation="vertical">
-
-                    <TextView
-                        android:id="@+id/editText"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:ems="10"
-                        android:text="@string/auth_host_url"
-                        android:textColor="@color/login_text_color" />
-
-                    <com.google.android.material.textfield.TextInputEditText
-                        android:id="@+id/hostUrlInput"
-                        android:layout_width="match_parent"
-                        android:layout_height="wrap_content"
-                        android:layout_gravity="bottom"
-                        android:contentDescription="@string/auth_host_address"
-                        android:drawablePadding="@dimen/alternate_half_padding"
-                        android:inputType="textUri"
-                        android:paddingStart="@dimen/zero"
-                        android:paddingLeft="@dimen/zero"
-                        android:paddingEnd="@dimen/alternate_padding_right"
-                        android:paddingRight="@dimen/alternate_padding_right"
-                        android:textColor="@color/login_text_color"
-                        android:textColorHint="@color/login_text_color">
-
-                        <requestFocus />
-
-                    </com.google.android.material.textfield.TextInputEditText>
-
-                </LinearLayout>
-
-                <ImageButton
-                    android:id="@+id/testServerButton"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center_vertical|end"
-                    android:layout_marginEnd="@dimen/alternate_half_padding"
-                    android:layout_marginRight="@dimen/alternate_half_padding"
-                    android:background="@android:color/transparent"
-                    android:contentDescription="@string/test_server_button"
-                    android:onClick="onTestServerConnectionClick"
-                    android:padding="@dimen/zero"
-                    android:scaleType="fitCenter"
-                    android:src="@drawable/arrow_right"
-                    android:tint="@color/login_text_color" />
-
-                <ImageButton
-                    android:id="@+id/embeddedRefreshButton"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center_vertical|end"
-                    android:layout_marginEnd="@dimen/alternate_half_padding"
-                    android:layout_marginRight="@dimen/alternate_half_padding"
-                    android:background="@android:color/transparent"
-                    android:contentDescription="@string/auth_refresh_button"
-                    android:padding="@dimen/zero"
-                    android:scaleType="fitCenter"
-                    android:src="@drawable/ic_action_refresh"
-                    android:visibility="gone" />
-            </FrameLayout>
-
-            <TextView
-                android:id="@+id/server_status_text"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginBottom="@dimen/alternate_margin"
-                android:contentDescription="@string/auth_testing_connection"
-                android:drawableStart="@android:drawable/stat_notify_sync"
-                android:drawableLeft="@android:drawable/stat_notify_sync"
-                android:drawablePadding="@dimen/alternate_half_padding"
-                android:gravity="center_vertical"
-                android:minHeight="@dimen/display_text_min_height"
-                android:text="@string/auth_testing_connection"
-                android:textColor="@color/login_text_color" />
-
-            <com.google.android.material.textfield.TextInputEditText
-                android:id="@+id/account_username"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:autofillHints="username"
-                android:ems="10"
-                android:hint="@string/auth_username"
-                android:inputType="textNoSuggestions"
-                android:textColor="@color/login_text_color"
-                android:textColorHint="@color/login_text_hint_color"
-                android:visibility="gone" />
-
-            <com.google.android.material.textfield.TextInputEditText
-                android:id="@+id/account_password"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:autofillHints="password"
-                android:drawablePadding="@dimen/alternate_half_padding"
-                android:ems="10"
-                android:hint="@string/auth_password"
-                android:inputType="textPassword"
-                android:textColor="@color/login_text_color"
-                android:textColorHint="@color/login_text_hint_color"
-                android:visibility="gone" />
-
-            <TextView
-                android:id="@+id/auth_status_text"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginBottom="@dimen/alternate_margin"
-                android:contentDescription="@string/auth_unauthorized"
-                android:drawableStart="@android:drawable/stat_notify_sync"
-                android:drawableLeft="@android:drawable/stat_notify_sync"
-                android:drawablePadding="@dimen/alternate_half_padding"
-                android:gravity="center_vertical"
-                android:text="@string/auth_unauthorized"
-                android:textColor="@color/login_text_color" />
-
-            <ImageButton
-                android:id="@+id/scanQR"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:background="@color/transparent"
-                android:contentDescription="@string/scanQR_description"
-                android:src="@drawable/qrcode_scan"
-                android:theme="@style/Button.Login" />
-
-            <com.google.android.material.button.MaterialButton
-                android:id="@+id/buttonOK"
-                style="@style/Button.Login"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_gravity="center_horizontal"
-                android:contentDescription="@string/setup_btn_connect"
-                android:enabled="false"
-                android:padding="@dimen/standard_padding"
-                android:text="@string/setup_btn_connect"
-                android:theme="@style/Button.Login"
-                android:visibility="gone"
-                app:cornerRadius="@dimen/button_corner_radius" />
-        </LinearLayout>
-
-
-    </LinearLayout>
-
-</ScrollView>
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2012 Bartek Przybylski
+  Copyright (C) 2015-2016 ownCloud Inc.
+  Copyright (C) 2016 Nextcloud
+  Copyright (C) 2019 Tobias Kaminsky
+
+  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/>.
+-->
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/scroll"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:layout_gravity="center"
+    android:fillViewport="true"
+    android:orientation="vertical">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center"
+        android:orientation="vertical"
+        android:padding="@dimen/standard_padding">
+
+        <ImageView
+            android:id="@+id/thumbnail"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginBottom="@dimen/standard_padding"
+            android:contentDescription="@string/app_name"
+            android:src="@drawable/logo" />
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:gravity="center"
+            android:orientation="vertical"
+            android:padding="@dimen/standard_half_padding">
+
+            <com.google.android.material.button.MaterialButton
+                android:id="@+id/centeredRefreshButton"
+                style="@style/Button.Primary"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal"
+                android:layout_marginBottom="@dimen/alternate_margin"
+                android:contentDescription="@string/auth_check_server"
+                android:text="@string/auth_check_server"
+                android:theme="@style/Button"
+                android:visibility="gone"
+                app:cornerRadius="@dimen/button_corner_radius" />
+
+            <TextView
+                android:id="@+id/instructions_message"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="fill_horizontal"
+                android:layout_marginBottom="@dimen/alternate_margin"
+                android:contentDescription="@string/auth_expired_basic_auth_toast"
+                android:text="@string/auth_expired_basic_auth_toast"
+                android:textColor="@color/login_text_color"
+                android:visibility="gone" />
+
+
+            <FrameLayout
+                android:id="@+id/hostUrlFrame"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="@dimen/zero"
+                android:background="@color/primary">
+
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:orientation="vertical">
+
+                    <TextView
+                        android:id="@+id/editText"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:ems="10"
+                        android:text="@string/auth_host_url"
+                        android:textColor="@color/login_text_color" />
+
+                    <com.google.android.material.textfield.TextInputEditText
+                        android:id="@+id/hostUrlInput"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:layout_gravity="bottom"
+                        android:contentDescription="@string/auth_host_address"
+                        android:drawablePadding="@dimen/alternate_half_padding"
+                        android:inputType="textUri"
+                        android:paddingStart="@dimen/zero"
+                        android:paddingLeft="@dimen/zero"
+                        android:paddingEnd="@dimen/alternate_padding_right"
+                        android:paddingRight="@dimen/alternate_padding_right"
+                        android:textColor="@color/login_text_color"
+                        android:textColorHint="@color/login_text_color"
+                        android:theme="@style/Nextcloud.EditText.Login">
+
+                        <requestFocus />
+
+                    </com.google.android.material.textfield.TextInputEditText>
+
+                </LinearLayout>
+
+                <ImageButton
+                    android:id="@+id/testServerButton"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_vertical|end"
+                    android:layout_marginEnd="@dimen/alternate_half_padding"
+                    android:layout_marginRight="@dimen/alternate_half_padding"
+                    android:background="@android:color/transparent"
+                    android:contentDescription="@string/test_server_button"
+                    android:onClick="onTestServerConnectionClick"
+                    android:padding="@dimen/zero"
+                    android:scaleType="fitCenter"
+                    android:src="@drawable/arrow_right"
+                    android:tint="@color/login_text_color" />
+
+                <ImageButton
+                    android:id="@+id/embeddedRefreshButton"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="center_vertical|end"
+                    android:layout_marginEnd="@dimen/alternate_half_padding"
+                    android:layout_marginRight="@dimen/alternate_half_padding"
+                    android:background="@android:color/transparent"
+                    android:contentDescription="@string/auth_refresh_button"
+                    android:padding="@dimen/zero"
+                    android:scaleType="fitCenter"
+                    android:src="@drawable/ic_action_refresh"
+                    android:visibility="gone" />
+            </FrameLayout>
+
+            <TextView
+                android:id="@+id/server_status_text"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="@dimen/alternate_margin"
+                android:contentDescription="@string/auth_testing_connection"
+                android:drawableStart="@android:drawable/stat_notify_sync"
+                android:drawableLeft="@android:drawable/stat_notify_sync"
+                android:drawablePadding="@dimen/alternate_half_padding"
+                android:gravity="center_vertical"
+                android:minHeight="@dimen/display_text_min_height"
+                android:text="@string/auth_testing_connection"
+                android:textColor="@color/login_text_color" />
+
+            <com.google.android.material.textfield.TextInputEditText
+                android:id="@+id/account_username"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:autofillHints="username"
+                android:ems="10"
+                android:hint="@string/auth_username"
+                android:inputType="textNoSuggestions"
+                android:textColor="@color/login_text_color"
+                android:textColorHint="@color/login_text_hint_color"
+                android:visibility="gone" />
+
+            <com.google.android.material.textfield.TextInputEditText
+                android:id="@+id/account_password"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:autofillHints="password"
+                android:drawablePadding="@dimen/alternate_half_padding"
+                android:ems="10"
+                android:hint="@string/auth_password"
+                android:inputType="textPassword"
+                android:textColor="@color/login_text_color"
+                android:textColorHint="@color/login_text_hint_color"
+                android:visibility="gone" />
+
+            <TextView
+                android:id="@+id/auth_status_text"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:layout_marginBottom="@dimen/alternate_margin"
+                android:contentDescription="@string/auth_unauthorized"
+                android:drawableStart="@android:drawable/stat_notify_sync"
+                android:drawableLeft="@android:drawable/stat_notify_sync"
+                android:drawablePadding="@dimen/alternate_half_padding"
+                android:gravity="center_vertical"
+                android:text="@string/auth_unauthorized"
+                android:textColor="@color/login_text_color" />
+
+            <ImageButton
+                android:id="@+id/scanQR"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:background="@color/transparent"
+                android:contentDescription="@string/scanQR_description"
+                android:src="@drawable/qrcode_scan"
+                android:theme="@style/Button.Login" />
+
+            <com.google.android.material.button.MaterialButton
+                android:id="@+id/buttonOK"
+                style="@style/Button.Login"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal"
+                android:contentDescription="@string/setup_btn_connect"
+                android:enabled="false"
+                android:padding="@dimen/standard_padding"
+                android:text="@string/setup_btn_connect"
+                android:theme="@style/Button.Login"
+                android:visibility="gone"
+                app:cornerRadius="@dimen/button_corner_radius" />
+        </LinearLayout>
+
+
+    </LinearLayout>
+
+</ScrollView>

+ 1 - 1
src/main/res/layout/accounts_layout.xml

@@ -20,7 +20,7 @@
   License along with this program. If not, see <http://www.gnu.org/licenses/>.
  -->
 <LinearLayout
-	android:id="@+id/upload_files_layout"
+	android:id="@+id/account_list_layout"
 	xmlns:android="http://schemas.android.com/apk/res/android"
 	android:layout_width="fill_parent"
 	android:layout_height="fill_parent"

+ 6 - 3
src/main/res/layout/activity_list_item.xml

@@ -25,7 +25,8 @@
     android:orientation="horizontal"
     android:paddingRight="@dimen/standard_padding"
     android:paddingBottom="@dimen/standard_padding"
-    android:paddingLeft="@dimen/standard_padding">
+    android:paddingLeft="@dimen/standard_padding"
+    android:background="@color/bg_default">
 
     <ImageView
         android:id="@+id/activity_icon"
@@ -34,8 +35,10 @@
         android:layout_alignParentTop="true"
         android:layout_marginTop="@dimen/standard_margin"
         android:alpha="0.5"
-        android:src="@drawable/ic_activity"
-        android:contentDescription="@string/activity_icon"/>
+        android:padding="2dp"
+        android:background="@drawable/round_bgnd_icons"
+        android:contentDescription="@string/activity_icon"
+        android:src="@drawable/ic_activity" />
 
     <LinearLayout
         android:layout_width="match_parent"

+ 24 - 4
src/main/res/layout/activity_list_item_header.xml

@@ -1,16 +1,36 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!--
+  Nextcloud Android client application
+
+  Copyright (C) 2019 Sevastyan Savanyuk
+
+  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/>.
+-->
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical" android:layout_width="match_parent"
-    android:layout_height="wrap_content">
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:background="@color/bg_default">
 
     <TextView
         android:id="@+id/title_header"
         android:layout_width="match_parent"
         android:layout_height="60dp"
-        android:layout_marginLeft="@dimen/standard_list_item_size"
         android:layout_marginStart="@dimen/standard_list_item_size"
+        android:layout_marginLeft="@dimen/standard_list_item_size"
         android:layout_marginTop="10dp"
         android:text="@string/placeholder_filename"
-        android:textSize="@dimen/activity_list_item_title_header_text_size"/>
+        android:textSize="@dimen/activity_list_item_title_header_text_size" />
 
 </LinearLayout>

+ 2 - 1
src/main/res/layout/activity_list_layout.xml

@@ -56,7 +56,8 @@
                     android:clipToPadding="false"
                     android:scrollbarStyle="outsideOverlay"
                     android:scrollbars="vertical"
-                    android:visibility="visible" />
+                    android:visibility="visible"
+                    android:background="@color/bg_default" />
 
             </androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
 

+ 4 - 4
src/main/res/layout/community_layout.xml

@@ -140,7 +140,7 @@
                         android:id="@+id/community_release_candidate_fdroid"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:background="@color/white"
+                        android:background="@color/bg_default"
                         android:onClick="onGetRCFDroidClick"
                         android:padding="@dimen/zero"
                         android:src="@drawable/fdroid"
@@ -150,7 +150,7 @@
                         android:id="@+id/community_release_candidate_playstore"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:background="@color/white"
+                        android:background="@color/bg_default"
                         android:onClick="onGetRCPlayStoreClick"
                         android:padding="@dimen/zero"
                         android:src="@drawable/playstore"
@@ -181,7 +181,7 @@
                     android:id="@+id/community_beta_fdroid"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:background="@color/white"
+                    android:background="@color/bg_default"
                     android:onClick="onGetBetaFDroidClick"
                     android:padding="@dimen/zero"
                     android:src="@drawable/fdroid"
@@ -191,7 +191,7 @@
                     android:id="@+id/community_beta_apk"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:background="@color/white"
+                    android:background="@color/bg_default"
                     android:onClick="onGetBetaApkClick"
                     android:padding="@dimen/zero"
                     android:src="@drawable/apk"

+ 1 - 1
src/main/res/layout/contactlist_fragment.xml

@@ -39,7 +39,7 @@
             android:id="@+id/contactlist_restore_selected_container"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:background="@color/white"
+            android:background="@color/bg_default"
             android:orientation="vertical"
             android:visibility="gone">
 

+ 3 - 2
src/main/res/layout/contacts_backup_fragment.xml

@@ -35,7 +35,8 @@
             android:layout_height="wrap_content"
             android:layout_margin="@dimen/standard_margin"
             android:text="@string/contacts_automatic_backup"
-            android:textAppearance="?android:attr/textAppearanceMedium"/>
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textColor="@color/textColor" />
 
         <LinearLayout
             android:layout_width="match_parent"
@@ -50,7 +51,7 @@
                 android:layout_weight="1"
                 android:text="@string/contacts_last_backup"
                 android:textAppearance="?android:attr/textAppearanceMedium"
-                android:textColor="@color/black"/>
+                android:textColor="@color/textColor"/>
 
             <TextView
                 android:id="@+id/contacts_last_backup_timestamp"

+ 1 - 1
src/main/res/layout/deep_link_login.xml

@@ -46,7 +46,7 @@
             android:layout_height="wrap_content"
             android:ellipsize="middle"
             android:text="@string/placeholder_filename"
-            android:textColor="@color/black"
+            android:textColor="@color/textColor"
             android:textSize="20sp"
             android:textStyle="bold" />
 

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

@@ -28,30 +28,30 @@
         android:layout_gravity="start"
         android:layout_weight="1"
         android:fitsSystemWindows="true"
+        android:background="@color/bg_default"
+        android:theme="@style/NavigationView_ItemTextAppearance"
         app:headerLayout="@layout/drawer_header"
-        app:menu="@menu/drawer_menu"
-        app:theme="@style/NavigationView_ItemTextAppearance">
+        app:menu="@menu/drawer_menu">
 
         <LinearLayout
             android:id="@+id/drawer_quota"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_gravity="bottom"
-            android:background="@color/white"
+            android:background="@color/bg_default"
             android:clickable="false"
             android:orientation="vertical"
-            android:paddingBottom="@dimen/standard_half_padding"
             android:paddingLeft="@dimen/standard_padding"
-            android:paddingRight="@dimen/standard_padding"
             android:paddingTop="@dimen/standard_half_padding"
+            android:paddingRight="@dimen/standard_padding"
+            android:paddingBottom="@dimen/standard_half_padding"
             android:visibility="gone">
 
             <TextView
                 android:id="@+id/drawer_quota_link"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:drawablePadding="@dimen/alternate_half_padding"
-                />
+                android:drawablePadding="@dimen/alternate_half_padding" />
 
             <ProgressBar
                 android:id="@+id/drawer_quota_ProgressBar"
@@ -60,15 +60,14 @@
                 android:layout_height="wrap_content"
                 android:indeterminate="false"
                 android:indeterminateOnly="false"
-                android:text="@string/drawer_quota"
-                />
+                android:text="@string/drawer_quota" />
 
             <TextView
                 android:id="@+id/drawer_quota_percentage"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:drawablePadding="@dimen/alternate_half_padding"
-                android:text="@string/drawer_quota"/>
+                android:text="@string/drawer_quota" />
 
         </LinearLayout>
 

+ 4 - 4
src/main/res/layout/drawer_header.xml

@@ -100,13 +100,13 @@
                     android:layout_width="match_parent"
                     android:layout_height="wrap_content"
                     android:ellipsize="end"
-                    android:shadowColor="@color/black"
+                    android:shadowColor="@color/drawer_shadow"
                     android:shadowDx="0.5"
                     android:shadowDy="0"
                     android:shadowRadius="2"
                     android:maxLines="1"
                     android:text="@string/app_name"
-                    android:textColor="@android:color/white"
+                    android:textColor="@color/textColor"
                     android:textSize="@dimen/drawer_header_text"
                     android:textStyle="bold"/>
 
@@ -117,12 +117,12 @@
                     android:ellipsize="end"
                     android:lines="1"
                     android:maxLines="1"
-                    android:shadowColor="@color/black"
+                    android:shadowColor="@color/drawer_shadow"
                     android:shadowDx="0.5"
                     android:shadowDy="0"
                     android:shadowRadius="2"
                     android:text="@string/app_name"
-                    android:textColor="@android:color/white"
+                    android:textColor="@color/textColor"
                     android:textSize="@dimen/drawer_header_subtext"/>
 
             </LinearLayout>

+ 2 - 1
src/main/res/layout/file_details_activities_fragment.xml

@@ -38,7 +38,8 @@
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:hint="@string/new_comment"
-            android:paddingTop="@dimen/standard_padding" />
+            android:paddingTop="@dimen/standard_padding"
+            android:textColorHint="@color/secondaryTextColor" />
 
         <ImageButton
             android:id="@+id/submitComment"

+ 5 - 3
src/main/res/layout/file_details_fragment.xml

@@ -57,7 +57,8 @@
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
                         android:ellipsize="middle"
-                        android:textColor="@color/black"
+                        android:text="@string/placeholder_filename"
+                        android:textColor="@color/textColor"
                         android:textSize="20sp"
                         android:textStyle="bold"
                         tools:text="@string/placeholder_filename"/>
@@ -133,7 +134,7 @@
                     android:id="@+id/overflow_menu"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:background="@color/white"
+                    android:background="@color/bg_default"
                     android:contentDescription="@string/overflow_menu"
                     android:src="@drawable/ic_dots_vertical" />
             </LinearLayout>
@@ -192,9 +193,10 @@
                 android:id="@+id/tab_layout"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:background="@color/white"
+                android:background="@color/bg_default"
                 app:tabGravity="center"
                 app:tabMode="fixed"
+                app:tabTextColor="@color/textColor"
                 app:tabTextAppearance="@style/AppTabTextAppearance" />
 
             <androidx.viewpager.widget.ViewPager

+ 1 - 1
src/main/res/layout/file_details_share_user_item.xml

@@ -50,7 +50,7 @@
             android:gravity="center_vertical"
             android:singleLine="true"
             android:text="@string/username"
-            android:textColor="@color/black"
+            android:textColor="@color/textColor"
             android:textSize="@dimen/file_details_username_text_size" />
 
     <androidx.appcompat.widget.AppCompatCheckBox

+ 1 - 1
src/main/res/layout/file_details_sharing_fragment.xml

@@ -209,7 +209,7 @@
                     android:id="@+id/copyInternalLink"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:textColor="@color/black"
+                    android:textColor="@color/textColor"
                     android:text="@string/copy_internal_link" />
 
                 <TextView

+ 3 - 7
src/main/res/layout/file_download_fragment.xml

@@ -22,9 +22,7 @@
 	android:orientation="vertical" 
 	android:layout_gravity="center"
 	android:gravity="center_vertical"
-	android:padding="@dimen/file_download_fragment_layout_padding"
-	android:background="@color/black"
-	>
+	android:padding="@dimen/file_download_fragment_layout_padding">
 	
 	<TextView 
 	    android:id="@+id/progressText" 
@@ -32,8 +30,7 @@
 		android:layout_height="wrap_content"
 		android:textColor="@color/dark_background_text_color"
 		android:text="@string/downloader_not_downloaded_yet"
-		android:layout_marginBottom="@dimen/alternate_fragment_margin"
-	/>
+		android:layout_marginBottom="@dimen/alternate_fragment_margin" />
 	
     <LinearLayout
         android:id="@+id/fdProgressBlock"
@@ -80,8 +77,7 @@
 		android:layout_gravity="center_horizontal"
 		android:layout_margin="@dimen/file_download_fragment_display_text_margin"
 		android:textColor="@color/dark_background_text_color"
-		android:text="@string/downloader_download_failed_ticker"
-	/>
+		android:text="@string/downloader_download_failed_ticker" />
 	
 </LinearLayout>
 

+ 14 - 12
src/main/res/layout/file_list_actions_bottom_sheet_fragment.xml

@@ -20,7 +20,8 @@
               xmlns:tools="http://schemas.android.com/tools"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
-              android:orientation="vertical">
+              android:orientation="vertical"
+              android:background="@color/bg_default">
 
     <TextView
         android:id="@+id/add_to_cloud"
@@ -28,7 +29,8 @@
         android:layout_height="wrap_content"
         android:padding="@dimen/standard_padding"
         android:text="@string/add_to_cloud"
-        android:textSize="@dimen/bottom_sheet_text_size"/>
+        android:textSize="@dimen/bottom_sheet_text_size"
+        android:textColor="@color/textColor"/>
 
     <LinearLayout
         android:id="@+id/menu_upload_files"
@@ -56,8 +58,8 @@
             android:layout_marginStart="@dimen/standard_margin"
             android:layout_marginLeft="@dimen/standard_margin"
             android:text="@string/upload_files"
-            android:textColor="@color/black"
-            android:textSize="@dimen/bottom_sheet_text_size"/>
+            android:textColor="@color/textColor"
+            android:textSize="@dimen/bottom_sheet_text_size" />
 
     </LinearLayout>
 
@@ -87,8 +89,8 @@
             android:layout_marginStart="@dimen/standard_margin"
             android:layout_marginLeft="@dimen/standard_margin"
             android:text="@string/upload_content_from_other_apps"
-            android:textColor="@color/black"
-            android:textSize="@dimen/bottom_sheet_text_size"/>
+            android:textColor="@color/textColor"
+            android:textSize="@dimen/bottom_sheet_text_size" />
 
     </LinearLayout>
 
@@ -128,7 +130,7 @@
             android:layout_marginStart="@dimen/standard_margin"
             android:layout_marginLeft="@dimen/standard_margin"
             android:text="@string/upload_direct_camera_upload"
-            android:textColor="@color/black"
+            android:textColor="@color/textColor"
             android:textSize="@dimen/bottom_sheet_text_size" />
 
     </LinearLayout>
@@ -169,8 +171,8 @@
             android:layout_marginStart="@dimen/standard_margin"
             android:layout_marginLeft="@dimen/standard_margin"
             android:text="@string/create_new_folder"
-            android:textColor="@color/black"
-            android:textSize="@dimen/bottom_sheet_text_size"/>
+            android:textColor="@color/textColor"
+            android:textSize="@dimen/bottom_sheet_text_size" />
 
     </LinearLayout>
 
@@ -216,7 +218,7 @@
                 android:layout_marginLeft="@dimen/standard_margin"
                 android:layout_marginStart="@dimen/standard_margin"
                 android:text="@string/create_new_document"
-                android:textColor="@color/black"
+                android:textColor="@color/textColor"
                 android:textSize="@dimen/bottom_sheet_text_size"/>
         </LinearLayout>
 
@@ -245,7 +247,7 @@
                 android:layout_marginLeft="@dimen/standard_margin"
                 android:layout_marginStart="@dimen/standard_margin"
                 android:text="@string/create_new_spreadsheet"
-                android:textColor="@color/black"
+                android:textColor="@color/textColor"
                 android:textSize="@dimen/bottom_sheet_text_size"/>
         </LinearLayout>
 
@@ -274,7 +276,7 @@
                 android:layout_marginLeft="@dimen/standard_margin"
                 android:layout_marginStart="@dimen/standard_margin"
                 android:text="@string/create_new_presentation"
-                android:textColor="@color/black"
+                android:textColor="@color/textColor"
                 android:textSize="@dimen/bottom_sheet_text_size"/>
         </LinearLayout>
     </LinearLayout>

+ 1 - 1
src/main/res/layout/file_preview.xml

@@ -31,7 +31,7 @@
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:visibility="invisible"
-        android:background="@color/black">
+        android:background="@color/background_color_inverse">
 
         <FrameLayout
             android:id="@+id/visual_area"

+ 1 - 1
src/main/res/layout/files.xml

@@ -37,7 +37,7 @@
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:background="@color/background_color"
+            android:background="@color/bg_default"
             android:baselineAligned="false"
             android:orientation="horizontal"
             android:id="@+id/ListLayout"

+ 1 - 1
src/main/res/layout/files_folder_picker.xml

@@ -53,7 +53,7 @@
 
         <com.google.android.material.button.MaterialButton
             android:id="@+id/folder_picker_btn_cancel"
-            android:theme="@style/OutlinedButton"
+            style="@style/OutlinedButton"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_weight="1"

+ 1 - 1
src/main/res/layout/generic_explanation.xml

@@ -19,7 +19,7 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@color/background_color"
+    android:background="@color/bg_default"
     android:id="@+id/explanation"
     android:orientation="vertical">
 

+ 1 - 1
src/main/res/layout/info_box.xml

@@ -23,7 +23,7 @@
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
               android:layout_gravity="center_horizontal|bottom"
-              android:background="@color/filelist_icon_backgorund"
+              android:background="@color/filelist_icon_background"
               android:gravity="center"
               android:padding="@dimen/standard_half_padding"
               android:visibility="gone">

+ 1 - 1
src/main/res/layout/list_item.xml

@@ -69,7 +69,7 @@
             android:layout_marginRight="@dimen/standard_quarter_margin"
             android:contentDescription="@string/downloader_download_succeeded_ticker"
             android:scaleType="fitCenter"
-            android:src="@drawable/ic_synced"/>
+            android:src="@drawable/ic_synced" />
 
     </RelativeLayout>
 

+ 2 - 2
src/main/res/layout/media_control.xml

@@ -65,7 +65,7 @@
             android:layout_height="wrap_content"
             android:paddingEnd="@dimen/standard_quarter_padding"
             android:text="@string/placeholder_media_time"
-            android:textColor="@color/white"
+            android:textColor="@color/textColor_inverse"
             />
 
         <SeekBar
@@ -87,7 +87,7 @@
             android:layout_height="wrap_content"
             android:paddingStart="@dimen/standard_quarter_padding"
             android:text="@string/placeholder_media_time"
-            android:textColor="@color/white"
+            android:textColor="@color/textColor_inverse"
             />
         
     </LinearLayout>

+ 5 - 3
src/main/res/layout/notification_list_item.xml

@@ -35,11 +35,13 @@
         android:layout_width="@dimen/notification_icon_width"
         android:layout_height="@dimen/notification_icon_height"
         android:layout_alignParentTop="true"
-        android:layout_marginRight="@dimen/notification_icon_layout_right_end_margin"
         android:layout_marginEnd="@dimen/notification_icon_layout_right_end_margin"
+        android:layout_marginRight="@dimen/notification_icon_layout_right_end_margin"
+        android:padding="2dp"
         android:alpha="0.5"
-        android:src="@drawable/ic_notification"
-        android:contentDescription="@string/notification_icon"/>
+        android:background="@drawable/round_bgnd_icons"
+        android:contentDescription="@string/notification_icon"
+        android:src="@drawable/ic_notification" />
 
     <LinearLayout
         android:layout_width="match_parent"

+ 2 - 1
src/main/res/layout/passcodelock.xml

@@ -31,7 +31,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="@string/pass_code_enter_pass_code"
-        android:textColor="@android:color/black"
+        android:textColor="@color/textColor"
         android:gravity="center_horizontal"
         android:textSize="@dimen/two_line_primary_text_size"
          />
@@ -56,6 +56,7 @@
             android:focusable="true"
             style="@style/PassCodeStyle"
             android:cursorVisible="true"
+            android:textCursorDrawable="@color/primary"
             android:imeOptions="flagNoExtractUi"
             android:importantForAutofill="no"
             android:hint="@string/hidden_character">

+ 6 - 2
src/main/res/layout/password_dialog.xml

@@ -27,7 +27,10 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:theme="@style/TextInputLayout"
-        app:passwordToggleDrawable="@drawable/password_visibility_selector">
+        app:hintTextColor="@color/fg_inverse"
+        app:passwordToggleDrawable="@drawable/password_visibility_selector"
+        app:boxBackgroundColor="@color/bg_default"
+        app:boxStrokeColor="@color/bg_fallback_highlight">
 
         <com.google.android.material.textfield.TextInputEditText
             android:id="@+id/share_password"
@@ -37,7 +40,8 @@
             android:hint="@string/hint_password"
             android:inputType="textPassword"
             android:layout_margin="@dimen/standard_margin"
-            android:autofillHints="password">
+            android:autofillHints="password"
+            android:textColorHint="@color/bg_fallback_highlight">
         </com.google.android.material.textfield.TextInputEditText>
 
     </com.google.android.material.textfield.TextInputLayout>

+ 0 - 21
src/main/res/layout/preference_widget_radiobutton.xml

@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2006 The Android Open Source Project
-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.
--->
-<!-- Layout used by CheckBoxPreference for the checkbox style. This is inflated
-inside android.R.layout.preference. -->
-<RadioButton xmlns:android="http://schemas.android.com/apk/res/android"
-android:id="@+android:id/checkbox"
-android:layout_width="wrap_content"
-android:layout_height="wrap_content"
-android:layout_gravity="center"
-android:focusable="false"
-android:clickable="false" />

+ 1 - 1
src/main/res/layout/richdocuments_webview.xml

@@ -47,7 +47,7 @@
             android:layout_height="wrap_content"
             android:ellipsize="middle"
             android:text="@string/placeholder_filename"
-            android:textColor="@color/black"
+            android:textColor="@color/textColor"
             android:textSize="20sp"
             android:textStyle="bold"/>
 

+ 1 - 1
src/main/res/layout/send_button.xml

@@ -41,5 +41,5 @@
         android:layout_gravity="center"
         android:gravity="center_horizontal"
         android:paddingTop="@dimen/standard_half_padding"
-        android:textColor="@color/black" />
+        android:textColor="@color/textColor" />
 </LinearLayout>

+ 3 - 3
src/main/res/layout/send_share_fragment.xml

@@ -70,7 +70,7 @@
                 android:drawable="@drawable/ic_share"
                 android:text="@string/share"
                 android:paddingTop="@dimen/standard_half_padding"
-                android:textColor="@color/black"/>
+                android:textColor="@color/textColor"/>
         </LinearLayout>
 
         <LinearLayout
@@ -98,7 +98,7 @@
                 android:drawable="@drawable/ic_share"
                 android:text="@string/link"
                 android:paddingTop="@dimen/standard_half_padding"
-                android:textColor="@color/black"/>
+                android:textColor="@color/textColor"/>
         </LinearLayout>
 
     </LinearLayout>
@@ -109,7 +109,7 @@
         android:layout_height="1dp"
         android:layout_below="@id/send_share_buttons"
         android:alpha="0.3"
-        android:background="@color/black"/>
+        android:background="@color/background_color_inverse"/>
 
         <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/send_button_recycler_view"

+ 5 - 5
src/main/res/layout/share_file_layout.xml

@@ -58,7 +58,7 @@
                 android:ellipsize="middle"
                 android:singleLine="true"
                 android:text="@string/placeholder_filename"
-                android:textColor="@color/black"
+                android:textColor="@color/textColor"
                 android:textSize="@dimen/two_line_primary_text_size"/>
 
             <TextView
@@ -193,7 +193,7 @@
                         android:layout_toStartOf="@id/shareViaLinkEditPermissionSwitch"
                         android:padding="@dimen/standard_half_padding"
                         android:text="@string/share_via_link_edit_permission_label"
-                        android:textColor="@color/black"
+                        android:textColor="@color/textColor"
                         android:textSize="14sp"
                         />
 
@@ -227,7 +227,7 @@
                         android:layout_toStartOf="@id/shareViaLinkFileListingPermissionSwitch"
                         android:padding="@dimen/standard_half_padding"
                         android:text="@string/share_via_link_hide_file_listing_permission_label"
-                        android:textColor="@color/black"
+                        android:textColor="@color/textColor"
                         android:textSize="@dimen/two_line_secondary_text_size"
                         />
 
@@ -261,7 +261,7 @@
                         android:paddingRight="@dimen/standard_half_padding"
                         android:paddingTop="@dimen/standard_half_padding"
                         android:text="@string/share_via_link_password_label"
-                        android:textColor="@color/black"
+                        android:textColor="@color/textColor"
                         android:textSize="@dimen/two_line_secondary_text_size"
                         />
 
@@ -312,7 +312,7 @@
                         android:paddingRight="@dimen/standard_half_padding"
                         android:paddingTop="@dimen/standard_half_padding"
                         android:text="@string/share_via_link_expiration_date_label"
-                        android:textColor="@color/black"
+                        android:textColor="@color/textColor"
                         android:textSize="@dimen/two_line_secondary_text_size"
                         />
 

+ 6 - 6
src/main/res/layout/sorting_order_fragment.xml

@@ -53,7 +53,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:background="@color/white"
+                    android:background="@color/bg_default"
                     android:paddingBottom="@dimen/standard_half_padding"
                     android:paddingLeft="@dimen/standard_padding"
                     android:paddingStart="@dimen/standard_padding"
@@ -92,7 +92,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:background="@color/white"
+                    android:background="@color/bg_default"
                     android:paddingBottom="@dimen/standard_half_padding"
                     android:paddingLeft="@dimen/standard_padding"
                     android:paddingStart="@dimen/standard_padding"
@@ -132,7 +132,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:background="@color/white"
+                    android:background="@color/bg_default"
                     android:paddingBottom="@dimen/standard_half_padding"
                     android:paddingLeft="@dimen/standard_padding"
                     android:paddingStart="@dimen/standard_padding"
@@ -171,7 +171,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:background="@color/white"
+                    android:background="@color/bg_default"
                     android:paddingBottom="@dimen/standard_half_padding"
                     android:paddingLeft="@dimen/standard_padding"
                     android:paddingStart="@dimen/standard_padding"
@@ -212,7 +212,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:background="@color/white"
+                    android:background="@color/bg_default"
                     android:paddingBottom="@dimen/standard_half_padding"
                     android:paddingLeft="@dimen/standard_padding"
                     android:paddingStart="@dimen/standard_padding"
@@ -251,7 +251,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:background="@color/white"
+                    android:background="@color/bg_default"
                     android:paddingBottom="@dimen/standard_half_padding"
                     android:paddingLeft="@dimen/standard_padding"
                     android:paddingStart="@dimen/standard_padding"

+ 1 - 1
src/main/res/layout/ssl_untrusted_cert_layout.xml

@@ -32,7 +32,7 @@
 		android:paddingBottom="@dimen/standard_padding"
 		android:text="@string/ssl_validator_header"
 		android:textAppearance="?android:attr/textAppearanceMedium"
-		android:textColor="@android:color/black"
+		android:textColor="@color/textColor"
 		 />
 
 	<TextView

+ 3 - 3
src/main/res/layout/ssl_validator_layout.xml

@@ -30,9 +30,9 @@
 		android:layout_height="wrap_content"
 		android:text="@string/ssl_validator_header"
 		android:paddingBottom="@dimen/standard_padding"
-		android:textAppearance="?android:attr/textAppearanceMedium"
-		android:textColor="@color/black"
-		 />
+        android:textStyle="bold"
+        android:textColor="@color/textColor"
+		android:textAppearance="?android:attr/textAppearanceMedium" />
 
 	<TextView
 		android:id="@+id/reason_cert_not_trusted"

+ 2 - 2
src/main/res/layout/storage_path_item.xml

@@ -32,7 +32,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center_vertical"
-        android:background="@color/white"
+        android:background="@color/bg_default"
         android:contentDescription="@string/user_icon"
         android:paddingStart="@dimen/standard_padding"
         android:paddingLeft="@dimen/standard_padding"
@@ -50,7 +50,7 @@
         android:ellipsize="end"
         android:gravity="center_vertical"
         android:singleLine="true"
-        android:textColor="@color/black"
+        android:textColor="@color/textColor"
         android:textSize="@dimen/file_details_username_text_size"
         tools:text="DCIM" />
 </LinearLayout>

+ 1 - 1
src/main/res/layout/template_button.xml

@@ -44,5 +44,5 @@
         android:ellipsize="middle"
         android:gravity="center_horizontal"
         android:paddingTop="@dimen/standard_half_padding"
-        android:textColor="@color/black"/>
+        android:textColor="@color/textColor"/>
 </LinearLayout>

+ 2 - 2
src/main/res/layout/toolbar_standard.xml

@@ -24,7 +24,7 @@
                                             android:id="@+id/appbar"
                                             android:layout_width="match_parent"
                                             android:layout_height="wrap_content"
-                                            android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
+                                            android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar">
 
     <RelativeLayout
         android:layout_width="match_parent"
@@ -42,7 +42,7 @@
             android:id="@id/toolbar"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
-            app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
+            app:popupTheme="@style/Theme.AppCompat.DayNight.NoActionBar" />
 
         <ProgressBar
             android:id="@+id/progressBar"

+ 6 - 6
src/main/res/layout/toolbar_user_information.xml

@@ -25,7 +25,7 @@
     android:id="@+id/appbar"
     android:layout_width="match_parent"
     android:layout_height="@dimen/nav_drawer_header_height"
-    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
+    android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar">
 
     <RelativeLayout
         android:layout_width="match_parent"
@@ -42,7 +42,7 @@
             android:id="@id/toolbar"
             android:layout_width="match_parent"
             android:layout_height="?attr/actionBarSize"
-            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/>
+            app:popupTheme="@style/Theme.AppCompat.DayNight.NoActionBar" />
 
         <LinearLayout
             android:layout_width="match_parent"
@@ -91,11 +91,11 @@
                         android:layout_height="wrap_content"
                         android:ellipsize="end"
                         android:maxLines="1"
-                        android:shadowColor="@color/black"
+                        android:shadowColor="@color/drawer_shadow"
                         android:shadowDx="0.5"
                         android:shadowDy="0"
                         android:shadowRadius="2"
-                        android:textColor="@android:color/white"
+                        android:textColor="@color/white"
                         android:textSize="@dimen/drawer_header_text"
                         android:textStyle="bold"
                         tools:text="Max Mustermann"/>
@@ -107,11 +107,11 @@
                         android:ellipsize="end"
                         android:lines="1"
                         android:maxLines="1"
-                        android:shadowColor="@color/black"
+                        android:shadowColor="@color/drawer_shadow"
                         android:shadowDx="0.5"
                         android:shadowDy="0"
                         android:shadowRadius="2"
-                        android:textColor="@android:color/white"
+                        android:textColor="@color/white"
                         android:textSize="@dimen/drawer_header_subtext"
                         tools:text="max@127.0.0.1/nextcloud"/>
                 </LinearLayout>

Some files were not shown because too many files changed in this diff