diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index e214b1da1151..59ad8e8d5438 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -27,6 +27,11 @@ + + + + + @@ -86,6 +91,7 @@ xmlns:android + ^$ @@ -96,6 +102,7 @@ xmlns:.* + ^$ @@ -107,6 +114,7 @@ .*:id + http://schemas.android.com/apk/res/android @@ -117,6 +125,7 @@ .*:name + http://schemas.android.com/apk/res/android @@ -127,6 +136,7 @@ name + ^$ @@ -137,6 +147,7 @@ style + ^$ @@ -147,6 +158,7 @@ .* + ^$ @@ -158,6 +170,7 @@ .* + http://schemas.android.com/apk/res/android @@ -169,6 +182,7 @@ .* + .* @@ -179,4 +193,4 @@ - + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 0745569018c4..d548e9758ac1 100644 --- a/build.gradle +++ b/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' diff --git a/src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.java b/src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.java index 329556d62cd5..03e86037a3eb 100644 --- a/src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.java +++ b/src/main/java/com/nextcloud/client/onboarding/FirstRunActivity.java @@ -28,7 +28,6 @@ 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 @@ protected void onCreate(Bundle savedInstanceState) { 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 -> { diff --git a/src/main/java/com/nextcloud/client/preferences/AppPreferences.java b/src/main/java/com/nextcloud/client/preferences/AppPreferences.java index d1b46c12bf8a..aad701982c7a 100644 --- a/src/main/java/com/nextcloud/client/preferences/AppPreferences.java +++ b/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. * diff --git a/src/main/java/com/nextcloud/client/preferences/AppPreferencesImpl.java b/src/main/java/com/nextcloud/client/preferences/AppPreferencesImpl.java index 0b04a23892eb..a78ee9aa2f6c 100644 --- a/src/main/java/com/nextcloud/client/preferences/AppPreferencesImpl.java +++ b/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 int getUploaderBehaviour() { 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(); diff --git a/src/main/java/com/owncloud/android/MainApp.java b/src/main/java/com/owncloud/android/MainApp.java index 0a6b3603bcb8..05c90f3cae86 100644 --- a/src/main/java/com/owncloud/android/MainApp.java +++ b/src/main/java/com/owncloud/android/MainApp.java @@ -100,6 +100,7 @@ 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 @@ protected void attachBaseContext(Context base) { @SuppressFBWarnings("ST") @Override public void onCreate() { + setAppTheme(preferences.isDarkThemeEnabled()); super.onCreate(); insertConscrypt(); @@ -811,4 +813,12 @@ public AndroidInjector androidInjector() { return dispatchingAndroidInjector; } + + public static void setAppTheme(Boolean darkTheme) { + if (darkTheme) { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + } else { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + } + } } diff --git a/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java b/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java index b6dc617a92b6..ea957a0d4ff3 100644 --- a/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -407,7 +407,9 @@ private void initWebViewLogin(String baseURL, boolean showLegacyLogin, boolean u 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; diff --git a/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java index cd34311cb32c..42651884a567 100644 --- a/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -1173,7 +1173,8 @@ private static Bitmap handlePNG(Bitmap bitmap, int pxW, int pxH) { 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; diff --git a/src/main/java/com/owncloud/android/ui/RadioButtonPreference.java b/src/main/java/com/owncloud/android/ui/RadioButtonPreference.java deleted file mode 100644 index a2de742ccd17..000000000000 --- a/src/main/java/com/owncloud/android/ui/RadioButtonPreference.java +++ /dev/null @@ -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 . - */ - -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; - } -} diff --git a/src/main/java/com/owncloud/android/ui/ThemeableSwitchPreference.java b/src/main/java/com/owncloud/android/ui/ThemeableSwitchPreference.java index afdaf7ec901e..d86f25ac4e6c 100644 --- a/src/main/java/com/owncloud/android/ui/ThemeableSwitchPreference.java +++ b/src/main/java/com/owncloud/android/ui/ThemeableSwitchPreference.java @@ -30,6 +30,7 @@ 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 @@ private void findSwitch(ViewGroup viewGroup) { 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 diff --git a/src/main/java/com/owncloud/android/ui/activities/StickyHeaderItemDecoration.java b/src/main/java/com/owncloud/android/ui/activities/StickyHeaderItemDecoration.java index bdcf81795acd..f0f8e0b5da7b 100644 --- a/src/main/java/com/owncloud/android/ui/activities/StickyHeaderItemDecoration.java +++ b/src/main/java/com/owncloud/android/ui/activities/StickyHeaderItemDecoration.java @@ -99,7 +99,6 @@ private View getHeaderViewForItem(int itemPosition, RecyclerView parent) { 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; } diff --git a/src/main/java/com/owncloud/android/ui/activity/BaseActivity.java b/src/main/java/com/owncloud/android/ui/activity/BaseActivity.java index 52202ee2b857..f10bc8a29051 100644 --- a/src/main/java/com/owncloud/android/ui/activity/BaseActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/BaseActivity.java @@ -6,12 +6,15 @@ 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 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 @@ protected void onNewIntent(Intent intent) { 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 @@ protected void onRestart() { 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 @@ protected void swapToDefaultAccount() { /// no account available: force account creation createAccount(true); } else { - mCurrentAccount = newAccount; + currentAccount = newAccount; } } @@ -135,8 +195,8 @@ protected void createAccount(boolean mandatoryCreation) { @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 @@ protected void onAccountSet() { @Deprecated protected void setAccount(Account account) { - mCurrentAccount = account; + currentAccount = account; } /** @@ -154,7 +214,7 @@ protected void setAccount(Account account) { * set yet. */ public OCCapability getCapabilities() { - return mCapabilities; + return capabilities; } /** @@ -165,20 +225,20 @@ public OCCapability getCapabilities() { * 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; } /** diff --git a/src/main/java/com/owncloud/android/ui/activity/CommunityActivity.java b/src/main/java/com/owncloud/android/ui/activity/CommunityActivity.java index 04fb42d90f5a..0b945da6aa63 100644 --- a/src/main/java/com/owncloud/android/ui/activity/CommunityActivity.java +++ b/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 @@ private void setupContent() { 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)); } diff --git a/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java b/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java index 7c96625bfc74..8fb7bf954ff2 100644 --- a/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/DrawerActivity.java @@ -109,7 +109,9 @@ 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 @@ protected void setDrawerMenuItemChecked(int menuItemId) { MenuItem menuItem = mNavigationView.getMenu().getItem(i); if (menuItem.getIcon() != null) { menuItem.getIcon().clearColorFilter(); - menuItem.setTitle(Html.fromHtml("" + menuItem.getTitle() + "")); + 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( + "" + menuItem.getTitle() + + "")); } } @@ -1068,7 +1080,7 @@ public void updateExternalLinksInDrawer() { 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 void onBackPressed() { @Override protected void onResume() { super.onResume(); + getDelegate().setLocalNightMode(preferences.isDarkThemeEnabled() ? + AppCompatDelegate.MODE_NIGHT_YES : AppCompatDelegate.MODE_NIGHT_NO); + getDelegate().applyDayNight(); setDrawerMenuItemChecked(mCheckedMenuItem); } diff --git a/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.java b/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.java index 021f93d211fc..211fddb9b817 100644 --- a/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/FolderPickerActivity.java @@ -25,6 +25,7 @@ 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.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 @@ private void initControls() { 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); } diff --git a/src/main/java/com/owncloud/android/ui/activity/PassCodeActivity.java b/src/main/java/com/owncloud/android/ui/activity/PassCodeActivity.java index cc07ad85ed3c..9890f0a037fa 100644 --- a/src/main/java/com/owncloud/android/ui/activity/PassCodeActivity.java +++ b/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 @@ protected void onCreate(Bundle savedInstanceState) { 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); diff --git a/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java b/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java index 117318b1b3c7..fc89c91582e3 100755 --- a/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ReceiveExternalFilesActivity.java @@ -34,6 +34,7 @@ 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.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 Dialog onCreateDialog(Bundle savedInstanceState) { 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 @@ private void populateDirectoryList() { 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()) { diff --git a/src/main/java/com/owncloud/android/ui/activity/RichDocumentsWebView.java b/src/main/java/com/owncloud/android/ui/activity/RichDocumentsWebView.java index f08055305a46..9f0188569b3c 100644 --- a/src/main/java/com/owncloud/android/ui/activity/RichDocumentsWebView.java +++ b/src/main/java/com/owncloud/android/ui/activity/RichDocumentsWebView.java @@ -250,7 +250,7 @@ private void setThumbnail(OCFile file, ImageView thumbnailView) { } 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(), diff --git a/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java b/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java index 35d0451dea25..ae8474d5eb39 100644 --- a/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/SettingsActivity.java @@ -39,7 +39,6 @@ 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 @@ * * 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 @@ private void setupGeneralCategory(int accentColor) { } 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 @@ private void setupActionBar() { 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 void onCancelMigration() { public void returnVersion(Integer latestVersion) { FileActivity.showDevSnackbar(this, latestVersion, true); } - } diff --git a/src/main/java/com/owncloud/android/ui/activity/SsoGrantPermissionActivity.java b/src/main/java/com/owncloud/android/ui/activity/SsoGrantPermissionActivity.java index bb8972a6ce53..556c465c5bd6 100644 --- a/src/main/java/com/owncloud/android/ui/activity/SsoGrantPermissionActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/SsoGrantPermissionActivity.java @@ -30,7 +30,6 @@ 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 @@ private SpannableStringBuilder makeSpecialPartsBold(String text, String... toBeS 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; diff --git a/src/main/java/com/owncloud/android/ui/activity/ThemedPreferenceActivity.java b/src/main/java/com/owncloud/android/ui/activity/ThemedPreferenceActivity.java new file mode 100644 index 000000000000..1acc839a4f25 --- /dev/null +++ b/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 . + */ + +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(); + } +} diff --git a/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java b/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java index dec4529a928a..c65f12731c74 100644 --- a/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java @@ -35,7 +35,6 @@ 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 void onCreate(Bundle savedInstanceState) { 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(); diff --git a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java b/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java index df42ac44260d..61523ddb9378 100644 --- a/src/main/java/com/owncloud/android/ui/activity/UserInfoActivity.java +++ b/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; diff --git a/src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java index 60423fd630a7..32077c806026 100644 --- a/src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java +++ b/src/main/java/com/owncloud/android/ui/adapter/ActivityListAdapter.java @@ -24,7 +24,6 @@ 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 void updateDrawState(@NonNull TextPaint ds) { } }, 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); } diff --git a/src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java index 18be2ae4f925..9f9327d15895 100644 --- a/src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java +++ b/src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java @@ -23,7 +23,6 @@ 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 void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi 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); } diff --git a/src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java index ec3506524d42..b47f666c4604 100644 --- a/src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java +++ b/src/main/java/com/owncloud/android/ui/adapter/NotificationListAdapter.java @@ -22,8 +22,6 @@ 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 @@ public class NotificationListAdapter extends RecyclerView.Adapter { 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 notificationsList; private OwnCloudClient client; @@ -87,6 +85,8 @@ public NotificationListAdapter(OwnCloudClient client, NotificationsActivity noti this.notificationsList = new ArrayList<>(); this.client = client; this.notificationsActivity = notificationsActivity; + foregroundColorSpanBlack = new ForegroundColorSpan( + notificationsActivity.getResources().getColor(R.color.textColor)); } public void setNotificationItems(List notificationItems) { @@ -166,15 +166,14 @@ public void setButtons(NotificationViewHolder holder, Notification notification) 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); } diff --git a/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java index 735dbe3244b1..597c1e66016a 100644 --- a/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java +++ b/src/main/java/com/owncloud/android/ui/adapter/OCFileListAdapter.java @@ -30,7 +30,6 @@ 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 void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int positi 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 @@ private void setThumbnail(OCFile file, ImageView thumbnailView) { } 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(), diff --git a/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java index 9dafcbe7b329..aee4907400de 100644 --- a/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java +++ b/src/main/java/com/owncloud/android/ui/adapter/TrashbinListAdapter.java @@ -253,7 +253,7 @@ private void setThumbnail(TrashbinFile file, ImageView thumbnailView) { } 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(), diff --git a/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java b/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java index 5cbac919b183..7c503029ada9 100755 --- a/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java +++ b/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java @@ -416,7 +416,7 @@ public void onBindViewHolder(SectionedViewHolder holder, int section, int relati 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 void onBindViewHolder(SectionedViewHolder holder, int section, int relati 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, diff --git a/src/main/java/com/owncloud/android/ui/asynctasks/LoadUrlTask.java b/src/main/java/com/owncloud/android/ui/asynctasks/LoadUrlTask.java index 0ff52c283dc3..f865d3437357 100644 --- a/src/main/java/com/owncloud/android/ui/asynctasks/LoadUrlTask.java +++ b/src/main/java/com/owncloud/android/ui/asynctasks/LoadUrlTask.java @@ -33,6 +33,7 @@ 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 @@ protected void onPostExecute(String url) { 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(); } diff --git a/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java b/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java index 1f7dc2feb9ab..596c19659387 100644 --- a/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java +++ b/src/main/java/com/owncloud/android/ui/dialog/CreateFolderDialogFragment.java @@ -99,6 +99,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { 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()); diff --git a/src/main/java/com/owncloud/android/ui/dialog/ExpirationDatePickerDialogFragment.java b/src/main/java/com/owncloud/android/ui/dialog/ExpirationDatePickerDialogFragment.java index 28b9982f8f9a..c5800ffd52ea 100644 --- a/src/main/java/com/owncloud/android/ui/dialog/ExpirationDatePickerDialogFragment.java +++ b/src/main/java/com/owncloud/android/ui/dialog/ExpirationDatePickerDialogFragment.java @@ -32,6 +32,7 @@ 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 Dialog onCreateDialog(Bundle savedInstanceState) { } }); + 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); diff --git a/src/main/java/com/owncloud/android/ui/dialog/NoteDialogFragment.java b/src/main/java/com/owncloud/android/ui/dialog/NoteDialogFragment.java index 5570e8f3f31e..778501c72bf8 100644 --- a/src/main/java/com/owncloud/android/ui/dialog/NoteDialogFragment.java +++ b/src/main/java/com/owncloud/android/ui/dialog/NoteDialogFragment.java @@ -109,6 +109,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // Setup layout noteEditText.setText(share.getNote()); + noteEditText.setHighlightColor(ThemeUtils.primaryColor(getActivity())); noteEditText.requestFocus(); ThemeUtils.colorTextInputLayout(noteEditTextInputLayout, accentColor); diff --git a/src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java b/src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java index 0957d13ba5b0..b94e08341525 100644 --- a/src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java +++ b/src/main/java/com/owncloud/android/ui/dialog/RenameFileDialogFragment.java @@ -102,6 +102,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // 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; diff --git a/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.java b/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.java index 389fac994b55..f5e77e9a8986 100644 --- a/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.java +++ b/src/main/java/com/owncloud/android/ui/dialog/SharePasswordDialogFragment.java @@ -144,6 +144,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // 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) diff --git a/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java index 73cb89387bda..a1032b363b56 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -194,6 +194,9 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 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(); diff --git a/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java b/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java index 8af9a3e47028..c9391fb2fed4 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -240,7 +240,7 @@ private void activatePreviewImage() { 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); diff --git a/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java b/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java index aaf116d8ca3e..a94478843050 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java @@ -210,8 +210,6 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, internalLinkIcon.getDrawable().mutate().setColorFilter(getResources().getColor(R.color.black), PorterDuff.Mode.SRC_IN); - - return view; } diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java index c4a86d4ede5f..3082eb7b9363 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java @@ -176,19 +176,15 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 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 void onDismiss(DialogInterface dialog) { } }); + 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); diff --git a/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java b/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java index a3c2ff6eb8ba..385850b8591f 100644 --- a/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java +++ b/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java @@ -287,7 +287,7 @@ public void onStart() { } } 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 @@ && getResources() != null) { 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 @@ && getResources() != null) { 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 @@ private void setMessageForMultiList(@StringRes int headline, @StringRes int mess 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 @@ && getActivity() instanceof PreviewImageActivity) { 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); } diff --git a/src/main/java/com/owncloud/android/utils/ThemeUtils.java b/src/main/java/com/owncloud/android/utils/ThemeUtils.java index d86dba8d3249..35d5ef6df83c 100644 --- a/src/main/java/com/owncloud/android/utils/ThemeUtils.java +++ b/src/main/java/com/owncloud/android/utils/ThemeUtils.java @@ -126,10 +126,12 @@ public static int primaryColor(Context context, boolean replaceWhite) { } 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 static void themeEditText(Context context, EditText editText, boolean the 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 static void themeEditText(Context context, EditText editText, boolean the * * @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 diff --git a/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_1.png b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_1.png new file mode 100644 index 000000000000..a0e4cd10d208 Binary files /dev/null and b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_1.png differ diff --git a/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_2.png b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_2.png new file mode 100644 index 000000000000..eab43fdc081d Binary files /dev/null and b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_2.png differ diff --git a/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_3.png b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_3.png new file mode 100644 index 000000000000..09a7e5a7a903 Binary files /dev/null and b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_3.png differ diff --git a/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_4.png b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_4.png new file mode 100644 index 000000000000..5a0febf1ff58 Binary files /dev/null and b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_4.png differ diff --git a/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_5.png b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_5.png new file mode 100644 index 000000000000..5a00db8d3e87 Binary files /dev/null and b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_5.png differ diff --git a/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_6.png b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_6.png new file mode 100644 index 000000000000..86702362e6ae Binary files /dev/null and b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_6.png differ diff --git a/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_7.png b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_7.png new file mode 100644 index 000000000000..5a99d9032ac6 Binary files /dev/null and b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_7.png differ diff --git a/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_8.png b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_8.png new file mode 100644 index 000000000000..e78933a61a9c Binary files /dev/null and b/src/main/res/drawable-night-xxhdpi/owncloud_progressbar_indeterminate_8.png differ diff --git a/src/main/res/drawable-night/round_bgnd.xml b/src/main/res/drawable-night/round_bgnd.xml new file mode 100644 index 000000000000..9d9d087d59d7 --- /dev/null +++ b/src/main/res/drawable-night/round_bgnd.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/src/main/res/drawable-night/shared_via_link.xml b/src/main/res/drawable-night/shared_via_link.xml new file mode 100644 index 000000000000..5f9cdea1039e --- /dev/null +++ b/src/main/res/drawable-night/shared_via_link.xml @@ -0,0 +1,36 @@ + + + + + diff --git a/src/main/res/drawable-night/shared_via_users.xml b/src/main/res/drawable-night/shared_via_users.xml new file mode 100644 index 000000000000..7ed47f1de077 --- /dev/null +++ b/src/main/res/drawable-night/shared_via_users.xml @@ -0,0 +1,30 @@ + + + + diff --git a/src/main/res/drawable/indicator_dot_selected.xml b/src/main/res/drawable/indicator_dot_selected.xml index 301ed3d2ba2b..26b301aa7ae2 100644 --- a/src/main/res/drawable/indicator_dot_selected.xml +++ b/src/main/res/drawable/indicator_dot_selected.xml @@ -23,7 +23,7 @@ - + diff --git a/src/main/res/drawable/list_selector.xml b/src/main/res/drawable/list_selector.xml index 7d193c31b7ee..9f776a852854 100644 --- a/src/main/res/drawable/list_selector.xml +++ b/src/main/res/drawable/list_selector.xml @@ -22,6 +22,6 @@ - + diff --git a/src/main/res/drawable/process_dialog_background.xml b/src/main/res/drawable/process_dialog_background.xml index 9ba0b1e9ab8a..d20aa2f26b50 100644 --- a/src/main/res/drawable/process_dialog_background.xml +++ b/src/main/res/drawable/process_dialog_background.xml @@ -1,6 +1,6 @@ - + + - \ No newline at end of file + diff --git a/src/main/res/drawable/round_bgnd_icons.xml b/src/main/res/drawable/round_bgnd_icons.xml new file mode 100644 index 000000000000..f4f807528d97 --- /dev/null +++ b/src/main/res/drawable/round_bgnd_icons.xml @@ -0,0 +1,24 @@ + + + + + diff --git a/src/main/res/drawable/shared_via_link.xml b/src/main/res/drawable/shared_via_link.xml index b57c8f4432af..35b7cb533d01 100644 --- a/src/main/res/drawable/shared_via_link.xml +++ b/src/main/res/drawable/shared_via_link.xml @@ -1,3 +1,21 @@ + . + +--> - - \ No newline at end of file + + diff --git a/src/main/res/layout-land/account_setup.xml b/src/main/res/layout-land/account_setup.xml index 227f29305fca..fa30fa24110e 100644 --- a/src/main/res/layout-land/account_setup.xml +++ b/src/main/res/layout-land/account_setup.xml @@ -1,225 +1,229 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/res/layout/account_setup.xml b/src/main/res/layout/account_setup.xml index a050597ffeba..70527e22a963 100644 --- a/src/main/res/layout/account_setup.xml +++ b/src/main/res/layout/account_setup.xml @@ -1,225 +1,230 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/res/layout/accounts_layout.xml b/src/main/res/layout/accounts_layout.xml index ee5c265dc628..926e55ea3f5c 100644 --- a/src/main/res/layout/accounts_layout.xml +++ b/src/main/res/layout/accounts_layout.xml @@ -20,7 +20,7 @@ License along with this program. If not, see . --> + android:paddingLeft="@dimen/standard_padding" + android:background="@color/bg_default"> + android:padding="2dp" + android:background="@drawable/round_bgnd_icons" + android:contentDescription="@string/activity_icon" + android:src="@drawable/ic_activity" /> + + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + android:background="@color/bg_default"> + android:textSize="@dimen/activity_list_item_title_header_text_size" /> diff --git a/src/main/res/layout/activity_list_layout.xml b/src/main/res/layout/activity_list_layout.xml index 1431fb1d98c3..370cda001b63 100644 --- a/src/main/res/layout/activity_list_layout.xml +++ b/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" /> diff --git a/src/main/res/layout/community_layout.xml b/src/main/res/layout/community_layout.xml index 74cdd671d506..fc3ccf9d5a96 100755 --- a/src/main/res/layout/community_layout.xml +++ b/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" diff --git a/src/main/res/layout/contactlist_fragment.xml b/src/main/res/layout/contactlist_fragment.xml index a3c5a057feea..1af60544e59e 100644 --- a/src/main/res/layout/contactlist_fragment.xml +++ b/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"> diff --git a/src/main/res/layout/contacts_backup_fragment.xml b/src/main/res/layout/contacts_backup_fragment.xml index b21942fe47b5..02d5a1fa1121 100644 --- a/src/main/res/layout/contacts_backup_fragment.xml +++ b/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" /> + android:textColor="@color/textColor"/> diff --git a/src/main/res/layout/drawer.xml b/src/main/res/layout/drawer.xml index a48326a11ae4..84f3773a362a 100644 --- a/src/main/res/layout/drawer.xml +++ b/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"> + android:drawablePadding="@dimen/alternate_half_padding" /> + android:text="@string/drawer_quota" /> + android:text="@string/drawer_quota" /> diff --git a/src/main/res/layout/drawer_header.xml b/src/main/res/layout/drawer_header.xml index bae2e402b6b7..0e396c675d7c 100644 --- a/src/main/res/layout/drawer_header.xml +++ b/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"/> diff --git a/src/main/res/layout/file_details_activities_fragment.xml b/src/main/res/layout/file_details_activities_fragment.xml index 48949e34ae1e..a3751db4f3e5 100644 --- a/src/main/res/layout/file_details_activities_fragment.xml +++ b/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" /> @@ -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" /> @@ -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" /> + android:padding="@dimen/file_download_fragment_layout_padding"> + android:layout_marginBottom="@dimen/alternate_fragment_margin" /> + android:text="@string/downloader_download_failed_ticker" /> diff --git a/src/main/res/layout/file_list_actions_bottom_sheet_fragment.xml b/src/main/res/layout/file_list_actions_bottom_sheet_fragment.xml index 1558d7c0afe1..edefa5a4dac8 100644 --- a/src/main/res/layout/file_list_actions_bottom_sheet_fragment.xml +++ b/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"> + android:textSize="@dimen/bottom_sheet_text_size" + android:textColor="@color/textColor"/> + android:textColor="@color/textColor" + android:textSize="@dimen/bottom_sheet_text_size" /> @@ -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" /> @@ -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" /> @@ -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" /> @@ -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"/> @@ -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"/> @@ -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"/> diff --git a/src/main/res/layout/file_preview.xml b/src/main/res/layout/file_preview.xml index aa63c5234a3f..0f1bd40bf053 100644 --- a/src/main/res/layout/file_preview.xml +++ b/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"> diff --git a/src/main/res/layout/info_box.xml b/src/main/res/layout/info_box.xml index 592795b9c480..34ec2b311dbc 100644 --- a/src/main/res/layout/info_box.xml +++ b/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"> diff --git a/src/main/res/layout/list_item.xml b/src/main/res/layout/list_item.xml index d03e57ed822a..7eadda37179f 100644 --- a/src/main/res/layout/list_item.xml +++ b/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" /> diff --git a/src/main/res/layout/media_control.xml b/src/main/res/layout/media_control.xml index 087fcb802250..ef563ce559e6 100644 --- a/src/main/res/layout/media_control.xml +++ b/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" /> diff --git a/src/main/res/layout/notification_list_item.xml b/src/main/res/layout/notification_list_item.xml index 539d37636629..a73550ab253d 100644 --- a/src/main/res/layout/notification_list_item.xml +++ b/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" /> @@ -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"> diff --git a/src/main/res/layout/password_dialog.xml b/src/main/res/layout/password_dialog.xml index 8dac2b42d195..4f927a5d87db 100644 --- a/src/main/res/layout/password_dialog.xml +++ b/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"> + android:autofillHints="password" + android:textColorHint="@color/bg_fallback_highlight"> diff --git a/src/main/res/layout/preference_widget_radiobutton.xml b/src/main/res/layout/preference_widget_radiobutton.xml deleted file mode 100644 index 85f8f600389a..000000000000 --- a/src/main/res/layout/preference_widget_radiobutton.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - \ No newline at end of file diff --git a/src/main/res/layout/richdocuments_webview.xml b/src/main/res/layout/richdocuments_webview.xml index c5edc35749c4..afb3c098c2ef 100644 --- a/src/main/res/layout/richdocuments_webview.xml +++ b/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"/> diff --git a/src/main/res/layout/send_button.xml b/src/main/res/layout/send_button.xml index 50c27961adf3..b0c54fe58bbc 100644 --- a/src/main/res/layout/send_button.xml +++ b/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" /> diff --git a/src/main/res/layout/send_share_fragment.xml b/src/main/res/layout/send_share_fragment.xml index ed586f759811..841d2d071f4c 100644 --- a/src/main/res/layout/send_share_fragment.xml +++ b/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"/> + android:textColor="@color/textColor"/> @@ -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"/> @@ -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" /> diff --git a/src/main/res/layout/sorting_order_fragment.xml b/src/main/res/layout/sorting_order_fragment.xml index 0583d7955afa..7338626a4652 100644 --- a/src/main/res/layout/sorting_order_fragment.xml +++ b/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" diff --git a/src/main/res/layout/ssl_untrusted_cert_layout.xml b/src/main/res/layout/ssl_untrusted_cert_layout.xml index 7a0349525eb8..dec0a7087271 100644 --- a/src/main/res/layout/ssl_untrusted_cert_layout.xml +++ b/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" /> + android:textStyle="bold" + android:textColor="@color/textColor" + android:textAppearance="?android:attr/textAppearanceMedium" /> diff --git a/src/main/res/layout/template_button.xml b/src/main/res/layout/template_button.xml index d46172d59257..611f2145281f 100644 --- a/src/main/res/layout/template_button.xml +++ b/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"/> diff --git a/src/main/res/layout/toolbar_standard.xml b/src/main/res/layout/toolbar_standard.xml index 2ef850b78bfc..f1b438e5069c 100644 --- a/src/main/res/layout/toolbar_standard.xml +++ b/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"> + app:popupTheme="@style/Theme.AppCompat.DayNight.NoActionBar" /> + android:theme="@style/ThemeOverlay.MaterialComponents.Dark.ActionBar"> + app:popupTheme="@style/Theme.AppCompat.DayNight.NoActionBar" /> @@ -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"/> diff --git a/src/main/res/layout/upload_files_layout.xml b/src/main/res/layout/upload_files_layout.xml index 80abb5ef9de7..fb6dbe4d25af 100644 --- a/src/main/res/layout/upload_files_layout.xml +++ b/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"/> @@ -87,7 +87,7 @@ android:layout_marginRight="@dimen/standard_half_margin" android:layout_weight="1" android:text="@string/common_cancel" - android:theme="@style/OutlinedButton" + style="@style/OutlinedButton" app:cornerRadius="@dimen/button_corner_radius" /> + android:layout_height="match_parent" + android:background="@color/bg_default"> diff --git a/src/main/res/layout/whats_new_element.xml b/src/main/res/layout/whats_new_element.xml index 502343bc8c2d..bab2f7a46db0 100644 --- a/src/main/res/layout/whats_new_element.xml +++ b/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"/> + + + + #00ddff + + @color/secondaryTextColor + #ffffff + #ffffff + #ff888888 + #eee + #DDDDDD + #EEEEEE + #00000000 + #a0a0a0 + #e53935 + + + #757575 + #555555 + #EEEEEE + #222222 + + + + + #e9322d + + + #0082c9 + #006AA3 + #007cc2 + #ffffff + #7fC0E3 + #ffffff + #ffffff + #222222 + #000000 + @color/color_accent + #000000 + #D6D7D7 + #000000 + + #ffffff + #ffffff + #000000 + + + #201D2D44 + #40162233 + + + #757575 + #ECECEC + #757575 + + + #ffffff + #737373 + #B3FFFFFF + + diff --git a/src/main/res/values-v21/styles.xml b/src/main/res/values-v21/styles.xml index 78a391a8a719..05f9a8e53190 100644 --- a/src/main/res/values-v21/styles.xml +++ b/src/main/res/values-v21/styles.xml @@ -17,6 +17,44 @@ along with this program. If not, see . --> + + + + + + + + + + + + + diff --git a/src/main/res/values/colors.xml b/src/main/res/values/colors.xml index 0ec8772b38f0..a216ef863f8c 100644 --- a/src/main/res/values/colors.xml +++ b/src/main/res/values/colors.xml @@ -1,8 +1,8 @@ @@ -23,14 +23,15 @@ @color/secondaryTextColor #000000 - #FFFFFF - @color/black + #ffffff + #000000 + #ffffff #ff888888 #eee #000000 #656565 #FFFFFF - #DDDDDD + #DDDDDD #EEEEEE #00000000 #a0a0a0 @@ -41,14 +42,51 @@ #555555 #EEEEEE #dbdbdb + #222222 #e9322d + + #0082c9 + #006AA3 + #007cc2 + #ffffff + #7fC0E3 + #ffffff + #ffffff + #ffffff + #FFFFFF + #000000 + @color/color_accent + #ffffff + #D6D7D7 + #000000 + + #ffffff + #ffffff + #000000 + + #FFFFFF + + + #201D2D44 + #40162233 + + + #757575 + #616161 + #ECECEC + + + #757575 + #616161 + #4D000000 + #FFFFFF #000000 - + #222222 diff --git a/src/main/res/values/setup.xml b/src/main/res/values/setup.xml index 5acd70e8a7b0..0b224f4c7037 100644 --- a/src/main/res/values/setup.xml +++ b/src/main/res/values/setup.xml @@ -42,26 +42,6 @@ - - #0082c9 - #006AA3 - #007cc2 - @color/white - #7fC0E3 - #FFFFFF - @color/color_accent - @color/white - #D6D7D7 - @color/black - - - #201D2D44 - #40162233 - - - #757575 - #616161 - #ECECEC true diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml index 5c5eaacb809a..b86a1aea32c3 100644 --- a/src/main/res/values/strings.xml +++ b/src/main/res/values/strings.xml @@ -56,6 +56,10 @@ Help Recommend to friend Imprint + Light + Dark + Theme + Try %1$s on your device! I want to invite you to use %1$s on your device.\nDownload here: %2$s diff --git a/src/main/res/values/styles.xml b/src/main/res/values/styles.xml index c88ccb96dfd2..5c790fb99875 100644 --- a/src/main/res/values/styles.xml +++ b/src/main/res/values/styles.xml @@ -20,45 +20,59 @@ --> - + @color/action_mode_background + @style/ThemeOverlay.AppTheme.PopupMenu + @color/primary + @color/primary_dark + @color/color_accent + @style/ownCloud.AlertDialog + @style/ownCloud.AlertDialog + @style/ownCloud.SearchView + @color/textColor + @color/secondaryTextColor + @color/secondaryTextColor + @color/secondaryTextColor + - + @color/textColor + @style/FallbackTheming.Dialog + @style/FallbackTheming.Dialog + @color/bg_default + @color/secondaryTextColor + - + @color/bg_default + @color/fg_inverse + @style/DatePickerStyle + @color/bg_fallback_highlight + @color/bg_fallback_highlight + + + - - - @@ -78,20 +92,21 @@ - + @color/bg_default + - @@ -155,7 +170,7 @@ @@ -181,6 +196,7 @@ @@ -189,7 +205,7 @@ @drawable/actionbar_progress_indeterminate_horizontal - @@ -198,57 +214,39 @@ parent="@style/Theme.MaterialComponents.Light.DarkActionBar.Bridge"> @color/primary @color/primary - #ffffff - #222222 + @color/textColor + @color/actionbar_shadow 1 1 @drawable/split_action_bg - + @color/bg_default + - - - - - + + @color/textColor + + + - + diff --git a/src/main/res/xml/preferences.xml b/src/main/res/xml/preferences.xml index df06651ae295..4dae1b4f4be8 100644 --- a/src/main/res/xml/preferences.xml +++ b/src/main/res/xml/preferences.xml @@ -26,6 +26,12 @@ +