Przeglądaj źródła

Dark theme v1
Fixing migration to androidx
Dark theme styling
File details fragment tab text colour
File list overflow menu background colour

Signed-off-by: Daniel Bailey <daniel.bailey@grappleIT.co.uk>
Signed-off-by: Andy Scherzinger <info@andy-scherzinger.de>

Daniel 6 lat temu
rodzic
commit
27b8ed4327
55 zmienionych plików z 332 dodań i 141 usunięć
  1. 13 1
      .idea/codeStyles/Project.xml
  2. 1 1
      build.gradle
  3. 2 0
      src/main/java/com/nextcloud/client/preferences/AppPreferences.java
  4. 7 0
      src/main/java/com/nextcloud/client/preferences/AppPreferencesImpl.java
  5. 10 0
      src/main/java/com/owncloud/android/MainApp.java
  6. 6 1
      src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java
  7. 14 1
      src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java
  8. 2 1
      src/main/java/com/owncloud/android/ui/activity/SsoGrantPermissionActivity.java
  9. 2 1
      src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java
  10. 1 1
      src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java
  11. 2 1
      src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java
  12. 1 1
      src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java
  13. 1 1
      src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java
  14. 5 5
      src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java
  15. 1 1
      src/main/res/drawable/indicator_dot_selected.xml
  16. 1 1
      src/main/res/drawable/process_dialog_background.xml
  17. 3 2
      src/main/res/layout-land/account_setup.xml
  18. 3 1
      src/main/res/layout/account_setup.xml
  19. 2 1
      src/main/res/layout/activity_list_item.xml
  20. 2 1
      src/main/res/layout/activity_list_layout.xml
  21. 4 4
      src/main/res/layout/community_layout.xml
  22. 1 1
      src/main/res/layout/contactlist_fragment.xml
  23. 3 2
      src/main/res/layout/contacts_backup_fragment.xml
  24. 1 1
      src/main/res/layout/deep_link_login.xml
  25. 6 8
      src/main/res/layout/drawer.xml
  26. 4 4
      src/main/res/layout/drawer_header.xml
  27. 2 1
      src/main/res/layout/file_details_activities_fragment.xml
  28. 7 4
      src/main/res/layout/file_details_fragment.xml
  29. 1 1
      src/main/res/layout/file_details_share_user_item.xml
  30. 1 1
      src/main/res/layout/file_details_sharing_fragment.xml
  31. 1 1
      src/main/res/layout/file_download_fragment.xml
  32. 13 11
      src/main/res/layout/file_list_actions_bottom_sheet_fragment.xml
  33. 1 1
      src/main/res/layout/file_preview.xml
  34. 1 1
      src/main/res/layout/list_item.xml
  35. 2 2
      src/main/res/layout/media_control.xml
  36. 2 1
      src/main/res/layout/passcodelock.xml
  37. 1 1
      src/main/res/layout/richdocuments_webview.xml
  38. 1 1
      src/main/res/layout/send_button.xml
  39. 3 3
      src/main/res/layout/send_share_fragment.xml
  40. 5 5
      src/main/res/layout/share_file_layout.xml
  41. 8 7
      src/main/res/layout/sorting_order_fragment.xml
  42. 1 1
      src/main/res/layout/ssl_untrusted_cert_layout.xml
  43. 1 1
      src/main/res/layout/ssl_validator_layout.xml
  44. 2 2
      src/main/res/layout/storage_path_item.xml
  45. 1 1
      src/main/res/layout/template_button.xml
  46. 4 4
      src/main/res/layout/toolbar_user_information.xml
  47. 1 1
      src/main/res/layout/upload_files_layout.xml
  48. 1 1
      src/main/res/layout/whats_new_element.xml
  49. 80 0
      src/main/res/values-night/colors.xml
  50. 1 0
      src/main/res/values-v21/styles.xml
  51. 38 3
      src/main/res/values/colors.xml
  52. 0 20
      src/main/res/values/setup.xml
  53. 5 0
      src/main/res/values/strings.xml
  54. 44 22
      src/main/res/values/styles.xml
  55. 6 2
      src/main/res/xml/preferences.xml

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

@@ -27,6 +27,9 @@
         <emptyLine />
       </value>
     </option>
+    <AndroidXmlCodeStyleSettings>
+      <option name="ARRANGEMENT_SETTINGS_MIGRATED_TO_191" value="true" />
+    </AndroidXmlCodeStyleSettings>
     <JavaCodeStyleSettings>
       <option name="IMPORT_LAYOUT_TABLE">
         <value>
@@ -86,6 +89,7 @@
               <match>
                 <AND>
                   <NAME>xmlns:android</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>^$</XML_NAMESPACE>
                 </AND>
               </match>
@@ -96,6 +100,7 @@
               <match>
                 <AND>
                   <NAME>xmlns:.*</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>^$</XML_NAMESPACE>
                 </AND>
               </match>
@@ -107,6 +112,7 @@
               <match>
                 <AND>
                   <NAME>.*:id</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
                 </AND>
               </match>
@@ -117,6 +123,7 @@
               <match>
                 <AND>
                   <NAME>.*:name</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
                 </AND>
               </match>
@@ -127,6 +134,7 @@
               <match>
                 <AND>
                   <NAME>name</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>^$</XML_NAMESPACE>
                 </AND>
               </match>
@@ -137,6 +145,7 @@
               <match>
                 <AND>
                   <NAME>style</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>^$</XML_NAMESPACE>
                 </AND>
               </match>
@@ -147,6 +156,7 @@
               <match>
                 <AND>
                   <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>^$</XML_NAMESPACE>
                 </AND>
               </match>
@@ -158,6 +168,7 @@
               <match>
                 <AND>
                   <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
                 </AND>
               </match>
@@ -169,6 +180,7 @@
               <match>
                 <AND>
                   <NAME>.*</NAME>
+                  <XML_ATTRIBUTE />
                   <XML_NAMESPACE>.*</XML_NAMESPACE>
                 </AND>
               </match>
@@ -179,4 +191,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-alpha02'
     implementation 'com.jakewharton:disklrucache:2.0.2'
     implementation 'androidx.appcompat:appcompat:1.1.0'
     implementation 'androidx.cardview:cardview:1.0.0'

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

@@ -300,4 +300,6 @@ public interface AppPreferences {
     boolean isPowerCheckDisabled();
 
     void setPowerCheckDisabled(boolean value);
+
+    boolean getTheme();
 }

+ 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";
+
+    private static final String PREF__DARK_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 getTheme() {
+        return preferences.getBoolean(PREF__DARK_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.getTheme());
         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);
+        }
+    }
 }

+ 6 - 1
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,7 @@ 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>"));
+                    menuItem.setTitle(Html.fromHtml("<font color='" + ThemeUtils.colorToHexString(ContextCompat.getColor(getApplicationContext(), R.color.textColor)) + "'>" + menuItem.getTitle() + "</font>"));
                 }
             }
 
@@ -1263,6 +1265,9 @@ public abstract class DrawerActivity extends ToolbarActivity
     @Override
     protected void onResume() {
         super.onResume();
+        getDelegate().setLocalNightMode(preferences.getTheme() ?
+                                        AppCompatDelegate.MODE_NIGHT_YES : AppCompatDelegate.MODE_NIGHT_NO);
+        getDelegate().applyDayNight();
         setDrawerMenuItemChecked(mCheckedMenuItem);
     }
 

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

@@ -692,6 +692,20 @@ public class SettingsActivity extends PreferenceActivity
         }
 
         loadStoragePath();
+
+        SwitchPreference themePref = (SwitchPreference) findPreference(getString(R.string.prefs_key_theme));
+        SharedPreferences appPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+
+        themePref.setSummary((appPrefs.getBoolean(com.owncloud.android.db.PreferenceManager.PREF__DARK_THEME,
+                            false) ?
+                            getString(R.string.prefs_value_theme_dark) : getString(R.string.prefs_value_theme_light)));
+        themePref.setOnPreferenceChangeListener((preference, newValue) -> {
+            MainApp.setAppTheme((Boolean) newValue);
+            getDelegate().applyDayNight();
+            recreate();
+
+            return true;
+        });
     }
 
     private String getAppVersion() {
@@ -1008,5 +1022,4 @@ public class SettingsActivity extends PreferenceActivity
     public void returnVersion(Integer latestVersion) {
         FileActivity.showDevSnackbar(this, latestVersion, true);
     }
-
 }

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

@@ -144,7 +144,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;

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

@@ -369,7 +369,8 @@ 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 - 1
src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java

@@ -156,7 +156,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.background_color));
                     gridViewHolder.checkbox.setImageResource(R.drawable.ic_checkbox_blank_outline);
                 }
 

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

@@ -77,7 +77,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 +87,7 @@ 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) {

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

@@ -330,7 +330,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.background_color));
                 gridViewHolder.checkbox.setImageResource(R.drawable.ic_checkbox_blank_outline);
             }
 

+ 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);

+ 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.background_color);
         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.background_color);
                 } else {
                     layerOne = getResources().getDrawable(R.drawable.backrepeat);
                 }

+ 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/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"

+ 3 - 2
src/main/res/layout-land/account_setup.xml

@@ -78,7 +78,8 @@
                 android:id="@+id/hostUrlFrame"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_marginBottom="@dimen/zero">
+                android:layout_marginBottom="@dimen/zero"
+                android:background="@color/primary">
 
                 <LinearLayout
                     android:layout_width="match_parent"
@@ -127,7 +128,7 @@
                     android:padding="@dimen/zero"
                     android:scaleType="fitCenter"
                     android:src="@drawable/arrow_right"
-                    android:tint="@color/white" />
+                    android:tint="@color/login_btn_tint" />
 
                 <ImageButton
                     android:id="@+id/embeddedRefreshButton"

+ 3 - 1
src/main/res/layout/account_setup.xml

@@ -25,7 +25,8 @@
     android:layout_height="match_parent"
     android:layout_gravity="center"
     android:fillViewport="true"
-    android:orientation="vertical">
+    android:orientation="vertical"
+    android:background="@color/primary">
 
     <LinearLayout
         android:layout_width="match_parent"
@@ -51,6 +52,7 @@
 
             <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"

+ 2 - 1
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/background_color">
 
     <ImageView
         android:id="@+id/activity_icon"

+ 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/background_color" />
 
             </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/background_color"
                         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/background_color"
                         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/background_color"
                     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/background_color"
                     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/background_color"
             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" />
 

+ 6 - 8
src/main/res/layout/drawer.xml

@@ -37,21 +37,20 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:layout_gravity="bottom"
-            android:background="@color/white"
+            android:background="@color/background_color"
             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 +59,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"

+ 7 - 4
src/main/res/layout/file_details_fragment.xml

@@ -24,7 +24,8 @@
     android:id="@+id/scrollView"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:fillViewport="true">
+    android:fillViewport="true"
+    android:background="@color/background_color">
 
     <LinearLayout
         android:layout_width="match_parent"
@@ -57,7 +58,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 +135,7 @@
                     android:id="@+id/overflow_menu"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:background="@color/white"
+                    android:background="@color/background_color"
                     android:contentDescription="@string/overflow_menu"
                     android:src="@drawable/ic_dots_vertical" />
             </LinearLayout>
@@ -192,9 +194,10 @@
                 android:id="@+id/tab_layout"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:background="@color/white"
+                android:background="@color/background_color"
                 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

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

@@ -23,7 +23,7 @@
 	android:layout_gravity="center"
 	android:gravity="center_vertical"
 	android:padding="@dimen/file_download_fragment_layout_padding"
-	android:background="@color/black"
+	android:background="@color/background_color_inverse"
 	>
 	
 	<TextView 

+ 13 - 11
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/background_color">
 
     <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>
 
@@ -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/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>

+ 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">

+ 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"
                         />
 

+ 8 - 7
src/main/res/layout/sorting_order_fragment.xml

@@ -24,7 +24,8 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:minWidth="300dp"
-    android:orientation="vertical">
+    android:orientation="vertical"
+    android:background="@color/background_color">
 
     <TextView
         android:id="@+id/header"
@@ -53,7 +54,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:background="@color/white"
+                    android:background="@color/background_color"
                     android:paddingBottom="@dimen/standard_half_padding"
                     android:paddingLeft="@dimen/standard_padding"
                     android:paddingStart="@dimen/standard_padding"
@@ -92,7 +93,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:background="@color/white"
+                    android:background="@color/background_color"
                     android:paddingBottom="@dimen/standard_half_padding"
                     android:paddingLeft="@dimen/standard_padding"
                     android:paddingStart="@dimen/standard_padding"
@@ -132,7 +133,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:background="@color/white"
+                    android:background="@color/background_color"
                     android:paddingBottom="@dimen/standard_half_padding"
                     android:paddingLeft="@dimen/standard_padding"
                     android:paddingStart="@dimen/standard_padding"
@@ -171,7 +172,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:background="@color/white"
+                    android:background="@color/background_color"
                     android:paddingBottom="@dimen/standard_half_padding"
                     android:paddingLeft="@dimen/standard_padding"
                     android:paddingStart="@dimen/standard_padding"
@@ -212,7 +213,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:background="@color/white"
+                    android:background="@color/background_color"
                     android:paddingBottom="@dimen/standard_half_padding"
                     android:paddingLeft="@dimen/standard_padding"
                     android:paddingStart="@dimen/standard_padding"
@@ -251,7 +252,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_gravity="center_vertical"
-                    android:background="@color/white"
+                    android:background="@color/background_color"
                     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

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

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

+ 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>

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

@@ -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/textColor"
                         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/textColor"
                         android:textSize="@dimen/drawer_header_subtext"
                         tools:text="max@127.0.0.1/nextcloud"/>
                 </LinearLayout>

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

@@ -61,7 +61,7 @@
             android:layout_height="wrap_content"
             android:text="@string/uploader_upload_files_behaviour"
             android:id="@+id/upload_files_upload_files_behaviour_text"
-            android:textColor="@color/black"
+            android:textColor="@color/textColor"
             android:textStyle="bold"
             android:paddingBottom="@dimen/standard_half_padding"/>
 

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

@@ -49,7 +49,7 @@
         android:gravity="center"
         android:text=""
         android:textAppearance="@style/NextcloudTextAppearanceHeadline"
-        android:textColor="@color/white"
+        android:textColor="@color/textColor_inverse"
         android:textStyle="bold"/>
 
     <LinearLayout

+ 80 - 0
src/main/res/values-night/colors.xml

@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ownCloud Android client application
+
+  Copyright (C) 2012  Bartek Przybylski
+  Copyright (C) 2015 ownCloud Inc.
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License version 2,
+  as published by the Free Software Foundation.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+-->
+<resources>
+
+    <color name="owncloud_blue_bright">#00ddff</color>
+
+    <color name="list_item_lastmod_and_filesize_text">@color/secondaryTextColor</color>
+    <!--<color name="black">#000000</color>-->
+    <!--<color name="white">#FFFFFF</color>-->
+    <color name="textColor">#ffffff</color>
+    <color name="textColor_inverse">#ffffff</color>
+    <color name="disabled_text">#ff888888</color>
+    <color name="list_divider_background">#eee</color>
+    <color name="filelist_icon_backgorund">#DDDDDD</color>
+    <color name="dark_background_text_color">#EEEEEE</color>
+    <color name="transparent">#00000000</color>
+    <color name="secondaryTextColor">#a0a0a0</color>
+    <color name="highlight_textColor_Warning">#e53935</color>
+
+    <!-- Colors -->
+    <color name="standard_grey">#757575</color>
+    <!--<color name="elementFallbackColor">#555555</color>-->
+    <color name="grey_200">#EEEEEE</color>
+
+    <!-- standard material color definitions -->
+
+    <!-- level colors for info notifications/visualisations -->
+    <color name="infolevel_warning">#e9322d</color>
+
+
+    <!-- Colors -->
+    <color name="primary">#0082c9</color>
+    <color name="primary_dark">#006AA3</color>
+    <color name="color_accent">#007cc2</color>
+    <color name="login_text_color">#ffffff</color>
+    <color name="login_text_hint_color">#7fC0E3</color>
+    <color name="login_btn_tint">#ffffff</color>
+    <color name="login_asset">#ffffff</color>
+    <color name="background_color">#222222</color>
+    <color name="background_color_inverse">#000000</color>
+    <color name="primary_button_background_color">@color/color_accent</color>
+    <color name="primary_button_text_color">#000000</color>
+    <color name="secondary_button_background_color">#D6D7D7</color>
+    <color name="secondary_button_text_color">#000000</color>
+
+    <color name="process_dialog_background">#ffffff</color>
+    <color name="indicator_dot_selected">#ffffff</color>
+    <color name="drawer_shadow">#000000</color>
+
+    <color name="action_edit_text">#888888</color>
+
+    <!-- special transparent action bar colors for image preview -->
+    <color name="color_transparent">#201D2D44</color>
+    <color name="color_dark_transparent">#40162233</color>
+
+    <!-- Multiselect backgrounds -->
+    <color name="action_mode_background">#D6D7D7</color>
+    <color name="action_mode_status_bar_background">#ECECEC</color>
+    <color name="selected_item_background">#616161</color>
+
+    <!--<color name="background_material_light">#555555</color>-->
+
+</resources>

+ 1 - 0
src/main/res/values-v21/styles.xml

@@ -32,5 +32,6 @@
 
     <style name="Theme.ownCloud.Toolbar.Drawer">
         <item name="android:statusBarColor">@android:color/transparent</item>
+        <item name="android:colorBackground">@color/background_color</item>
     </style>
 </resources>

+ 38 - 3
src/main/res/values/colors.xml

@@ -22,9 +22,10 @@
     <color name="owncloud_blue_bright">#00ddff</color>
 
     <color name="list_item_lastmod_and_filesize_text">@color/secondaryTextColor</color>
-    <color name="black">#000000</color>
-    <color name="white">#FFFFFF</color>
-    <color name="textColor">@color/black</color>
+    <!--<color name="black">#000000</color>-->
+    <!--<color name="white">#FFFFFF</color>-->
+    <color name="textColor">#000000</color>
+    <color name="textColor_inverse">#ffffff</color>
     <color name="disabled_text">#ff888888</color>
     <color name="list_divider_background">#eee</color>
     <color name="fg_default">#000000</color>
@@ -41,12 +42,46 @@
     <color name="elementFallbackColor">#555555</color>
     <color name="grey_200">#EEEEEE</color>
     <color name="grey_db">#dbdbdb</color>
+    <color name="actionbar_shadow">#222222</color>
 
     <!-- standard material color definitions -->
 
     <!-- level colors for info notifications/visualisations -->
     <color name="infolevel_warning">#e9322d</color>
 
+
+    <!-- Colors -->
+    <color name="primary">#0082c9</color>
+    <color name="primary_dark">#006AA3</color>
+    <color name="color_accent">#007cc2</color>
+    <color name="login_text_color">#ffffff</color>
+    <color name="login_text_hint_color">#7fC0E3</color>
+    <color name="login_btn_tint">#ffffff</color>
+    <color name="login_asset">#ffffff</color>
+    <color name="background_color">#FFFFFF</color>
+    <color name="background_color_inverse">#000000</color>
+    <color name="primary_button_background_color">@color/color_accent</color>
+    <color name="primary_button_text_color">#ffffff</color>
+    <color name="secondary_button_background_color">#D6D7D7</color>
+    <color name="secondary_button_text_color">#000000</color>
+
+    <color name="process_dialog_background">#ffffff</color>
+    <color name="indicator_dot_selected">#ffffff</color>
+    <color name="drawer_shadow">#000000</color>
+
+    <color name="action_edit_text">#888888</color>
+
+    <!-- special transparent action bar colors for image preview -->
+    <color name="color_transparent">#201D2D44</color>
+    <color name="color_dark_transparent">#40162233</color>
+
+    <!-- Multiselect backgrounds -->
+    <color name="action_mode_background">#757575</color>
+    <color name="action_mode_status_bar_background">#616161</color>
+    <color name="selected_item_background">#ECECEC</color>
+
+    <!--<color name="background_material_light">#ef4</color>-->
+
     <!-- Excluded from future app dark theme -->
     <color name="themed_fg">#FFFFFF</color>
     <color name="themed_fg_inverse">#000000</color>

+ 0 - 20
src/main/res/values/setup.xml

@@ -42,26 +42,6 @@
     <!-- To fill if you want to show webviews instead of regular welcome views -->
     <array name="whatsnew_urls"></array>
 
-    <!-- Colors -->
-    <color name="primary">#0082c9</color>
-    <color name="primary_dark">#006AA3</color>
-    <color name="color_accent">#007cc2</color>
-    <color name="login_text_color">@color/white</color>
-    <color name="login_text_hint_color">#7fC0E3</color>
-    <color name="background_color">#FFFFFF</color>
-    <color name="primary_button_background_color">@color/color_accent</color>
-    <color name="primary_button_text_color">@color/white</color>
-    <color name="secondary_button_background_color">#D6D7D7</color>
-    <color name="secondary_button_text_color">@color/black</color>
-
-    <!-- special transparent action bar colors for image preview -->
-    <color name="color_transparent">#201D2D44</color>
-    <color name="color_dark_transparent">#40162233</color>
-
-    <!-- Multiselect backgrounds -->
-    <color name="action_mode_background">#757575</color>
-    <color name="action_mode_status_bar_background">#616161</color>
-    <color name="selected_item_background">#ECECEC</color>
 
     <!-- Multiaccount support -->
     <bool name="multiaccount_support">true</bool>

+ 5 - 0
src/main/res/values/strings.xml

@@ -56,6 +56,11 @@
     <string name="prefs_help">Help</string>
     <string name="prefs_recommend">Recommend to friend</string>
     <string name="prefs_imprint">Imprint</string>
+    <string name="prefs_value_theme_light">Light</string>
+    <string name="prefs_value_theme_dark">Dark</string>
+    <string name="prefs_key_theme">darkTheme</string>
+    <string name="prefs_theme_title">Theme</string>
+
 
     <string name="recommend_subject">Try %1$s on your device!</string>
     <string name="recommend_text">I want to invite you to use %1$s on your device.\nDownload here: %2$s</string>

+ 44 - 22
src/main/res/values/styles.xml

@@ -20,11 +20,13 @@
 -->
 <resources xmlns:android="http://schemas.android.com/apk/res/android">
 	<!-- General ownCloud app style -->
-	<style name="Theme.ownCloud" parent="Theme.MaterialComponents.Light.DarkActionBar.Bridge">
+	<style name="Theme.ownCloud" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
     	<item name="android:actionBarStyle">@style/Theme.ownCloud.Widget.ActionBar</item>
     	<item name="actionBarStyle">@style/Theme.ownCloud.Widget.ActionBar</item>
 		<item name="actionModeBackground">@color/action_mode_background</item>
-		<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
+		<!--<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>-->
+		<item name="actionBarPopupTheme">@style/ThemeOverlay.AppTheme.PopupMenu</item>
+        <item name="android:actionBarPopupTheme">@style/ThemeOverlay.AppTheme.PopupMenu</item>
 		<item name="colorPrimary">@color/primary</item>
 		<item name="colorPrimaryDark">@color/primary_dark</item>
 		<item name="colorAccent">@color/color_accent</item>
@@ -32,23 +34,29 @@
 		<item name="alertDialogTheme">@style/ownCloud.AlertDialog</item>
 		<item name="android:windowBackground">@color/background_color</item>
 		<item name="searchViewStyle">@style/ownCloud.SearchView</item>
+        <item name="android:textColor">@color/textColor</item>
+        <item name="colorSecondary">@color/textColor</item>
+        <item name="android:colorSecondary">@color/textColor</item>
 	</style>
 
-	<style name="FallbackThemingTheme" parent="Theme.MaterialComponents.Light.DarkActionBar.Bridge">
+	<style name="FallbackThemingTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
 		<item name="colorPrimary">#424242</item>
 		<item name="colorPrimaryDark">#212121</item>
 		<item name="colorAccent">#757575</item>
         <item name="android:textAllCaps">false</item>
+        <item name="android:textColor">@color/textColor</item>
+        <item name="colorSecondary">@color/textColor</item>
+        <item name="android:colorSecondary">@color/textColor</item>
 	</style>
 
-	<style name="FallbackDatePickerDialogTheme" parent="Theme.MaterialComponents.Light.Dialog">
+	<style name="FallbackDatePickerDialogTheme" parent="Theme.MaterialComponents.DayNight.Dialog">
 		<item name="colorPrimary">#424242</item>
 		<item name="colorPrimaryDark">#212121</item>
 		<item name="colorAccent">#757575</item>
         <item name="android:textAllCaps">false</item>
 	</style>
 
-	<style name="FallbackTheming.Dialog" parent="Theme.MaterialComponents.Light.Dialog.Alert">
+	<style name="FallbackTheming.Dialog" parent="Theme.MaterialComponents.DayNight.Dialog.Alert">
 		<item name="colorPrimary">#424242</item>
 		<item name="colorPrimaryDark">#212121</item>
 		<item name="colorAccent">#757575</item>
@@ -58,7 +66,7 @@
 	</style>
 
 	<!-- seperate action bar style for activities without an action bar -->
-	<style name="Theme.ownCloud.Toolbar" parent="Theme.MaterialComponents.Light.NoActionBar.Bridge">
+	<style name="Theme.ownCloud.Toolbar" parent="Theme.MaterialComponents.DayNight.NoActionBar">
 		<item name="windowNoTitle">true</item>
 		<item name="windowActionBar">false</item>
 		<item name="colorPrimary">@color/primary</item>
@@ -78,20 +86,20 @@
 	<style name="Theme.ownCloud.noActionBar.Login" parent="Theme.ownCloud.Toolbar">
 		<item name="android:windowBackground">@color/primary</item>
 		<item name="colorControlNormal">@color/login_text_hint_color</item>
-		<item name="colorControlActivated">@color/white</item>
+		<item name="colorControlActivated">@color/login_asset</item>
 		<item name="colorControlHighlight">@color/login_text_hint_color</item>
 		<item name="colorAccent">@color/login_text_hint_color</item>
 		<item name="android:textColorHint">@color/login_text_hint_color</item>
 	</style>
 
-	<style name="ownCloud.AlertDialog" parent="Theme.MaterialComponents.Light.Dialog.Alert">
+	<style name="ownCloud.AlertDialog" parent="Theme.MaterialComponents.DayNight.Dialog.Alert">
 		<item name="colorAccent">@color/color_accent</item>
 		<item name="android:textColorPrimary">@color/primary</item>
 		<item name="searchViewStyle">@style/ownCloud.SearchView</item>
         <item name="android:textAllCaps">false</item>
 	</style>
 
-	<style name="ownCloud.Dialog" parent="Theme.MaterialComponents.Light.Dialog">
+	<style name="ownCloud.Dialog" parent="Theme.MaterialComponents.DayNight.Dialog">
 		<item name="colorAccent">@color/color_accent</item>
 		<item name="searchViewStyle">@style/ownCloud.SearchView</item>
         <item name="android:textAllCaps">false</item>
@@ -128,9 +136,9 @@
 
     <style name="OutlineLogindButton" parent="Widget.MaterialComponents.Button.OutlinedButton">
         <item name="colorAccent">@color/transparent</item>
-        <item name="android:textColor">@color/white</item>
+        <item name="android:textColor">@color/textColor</item>
         <item name="android:textAllCaps">false</item>
-        <item name="strokeColor">@color/white</item>
+        <item name="strokeColor">@color/textColor</item>
     </style>
 
 	<style name="Button.Primary" parent="Button">
@@ -139,8 +147,8 @@
 	</style>
 
 	<style name="Button.Login" parent="Button">
-		<item name="colorButtonNormal">@color/white</item>
-        <item name="colorAccent">@color/white</item>
+		<item name="colorButtonNormal">@color/textColor</item>
+        <item name="colorAccent">@color/textColor</item>
 		<item name="android:textColor">@color/primary_dark</item>
 	</style>
 
@@ -155,7 +163,7 @@
 	</style>
 
 	<style name="Button.Borderless.Login" parent="Widget.MaterialComponents.Button.TextButton">
-		<item name="android:textColor">@color/white</item>
+		<item name="android:textColor">@color/textColor</item>
         <item name="android:textAllCaps">false</item>
 	</style>
 
@@ -189,7 +197,7 @@
 		<item name="android:indeterminateDrawable">@drawable/actionbar_progress_indeterminate_horizontal</item>
 	</style>
 
-	<style name="Theme.ownCloud.Fullscreen" parent="@style/Theme.MaterialComponents">
+	<style name="Theme.ownCloud.Fullscreen" parent="@style/Theme.MaterialComponents.DayNight">
         <item name="android:windowFullscreen">true</item>
 		<item name="colorAccent">@color/color_accent</item>
     </style>
@@ -198,15 +206,15 @@
 		parent="@style/Theme.MaterialComponents.Light.DarkActionBar.Bridge">
 		<item name="android:background">@color/primary</item>
 		<item name="background">@color/primary</item>
-    	<item name="android:textColor">#ffffff</item>
-    	<item name="android:shadowColor">#222222</item>
+    	<item name="android:textColor">@color/textColor</item>
+    	<item name="android:shadowColor">@color/actionbar_shadow</item>
     	<item name="android:shadowRadius">1</item>
     	<item name="android:shadowDy">1</item>
     	<item name="android:backgroundSplit">@drawable/split_action_bg</item>
 	</style>
 
 	<!-- Dialogs -->
-	<style name="Theme.ownCloud.Dialog" parent="@style/Theme.MaterialComponents.Light.Dialog.Alert">
+	<style name="Theme.ownCloud.Dialog" parent="@style/Theme.MaterialComponents.DayNight.Dialog.Alert">
 		<item name="windowNoTitle">false</item>
 		<item name="colorAccent">@color/color_accent</item>
 		<item name="buttonBarButtonStyle">@style/Theme.ownCloud.Dialog.ButtonBar.Button</item>
@@ -218,7 +226,7 @@
 		<item name="colorAccent">@color/color_accent</item>
 	</style>
 
-	<style name="Theme.ownCloud.Dialog.NoButtonBarStyle" parent="@style/Theme.MaterialComponents.Light.Dialog.Alert">
+	<style name="Theme.ownCloud.Dialog.NoButtonBarStyle" parent="@style/Theme.MaterialComponents.DayNight.Dialog.Alert">
 		<item name="windowNoTitle">false</item>
 		<item name="colorAccent">@color/color_accent</item>
 	</style>
@@ -226,6 +234,8 @@
 	<style name="NavigationView_ItemTextAppearance">
 		<item name="android:ellipsize">end</item>
 		<item name="android:listDivider">@color/transparent</item>
+		<item name="android:textColor">@color/textColor</item>
+		<item name="android:color">@color/textColor</item>
 	</style>
 
 	<!-- Button Bar hack due to Lollipop bug:
@@ -272,19 +282,31 @@
 	<!-- Text styles -->
 	<style name="NextcloudTextAppearanceHeadline" parent="@style/TextAppearance.AppCompat.Headline">
 		<item name="android:textSize">26sp</item>
-		<item name="android:textColor">#000000</item>
+		<item name="android:textColor">@color/textColor</item>
 	</style>
 	<style name="NextcloudTextAppearanceMedium" parent="@style/TextAppearance.AppCompat.Medium">
 	</style>
 
 	<style name="TextInputLayout" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox">
-
+	</style>
+	<style name="EditText" parent="Theme.MaterialComponents.DayNight">
+		<item name="colorControlActivated">@color/login_text_color</item>
+		<item name="colorControlNormal">@color/login_text_color</item>
+		<item name="android:textColorHint">@color/login_text_color</item>
 	</style>
 
 	<style name="AppTabTextAppearance" parent="@style/TextAppearance.Design.Tab">
 		<item name="android:textSize">16sp</item>
 		<item name="textAllCaps">false</item>
-	</style>
+        <item name="android:textColor">@color/textColor</item>
+    </style>
+
+    <style name="ThemeOverlay.AppTheme.PopupMenu" parent="ThemeOverlay.MaterialComponents.Dark">
+        <!-- popup menu background - NEVER "android:background" !!! in themes -->
+        <item name="android:colorBackground">@color/background_color</item>
+        <!-- popup menu item text color -->
+        <item name="android:textColorPrimary">@color/textColor</item>
+    </style>
 
     <style name="MaterialListItemSingleLine">
         <item name="android:clickable">true</item>

+ 6 - 2
src/main/res/xml/preferences.xml

@@ -1,5 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
+<?xml version="1.0" encoding="utf-8"?><!--
   ownCloud Android client application
 
   Copyright (C) 2012  Bartek Przybylski
@@ -26,6 +25,11 @@
         <ListPreference
             android:title="@string/prefs_storage_path"
             android:key="storage_path"/>
+        <com.owncloud.android.ui.ThemeableSwitchPreference
+            android:defaultValue="@string/prefs_value_theme_light"
+            android:key="@string/prefs_key_theme"
+            android:summary="%s"
+            android:title="@string/prefs_theme_title" />
 	</PreferenceCategory>
 	<PreferenceCategory
 		android:title="@string/drawer_synced_folders"