From efe7a2b7232063ea8e1935f9357f0774dd5acd51 Mon Sep 17 00:00:00 2001 From: Stefan Niedermann Date: Sat, 3 Apr 2021 12:10:06 +0200 Subject: Eleminate BrandedActivity and BrandedFragment Signed-off-by: Stefan Niedermann --- .../niedermann/nextcloud/deck/DeckApplication.java | 11 ++++++- .../niedermann/nextcloud/deck/ui/MainActivity.java | 29 +++++++++++------ .../ui/accountswitcher/AccountSwitcherDialog.java | 9 ++--- .../ui/archivedboards/ArchivedBoardsActvitiy.java | 9 ++--- .../ui/archivedcards/ArchivedCardsActvitiy.java | 9 ++--- .../deck/ui/branding/BrandedActivity.java | 38 ---------------------- .../deck/ui/branding/BrandedFragment.java | 19 ----------- .../nextcloud/deck/ui/branding/BrandingUtil.java | 18 +++------- .../nextcloud/deck/ui/card/EditActivity.java | 25 ++++++++------ .../nextcloud/deck/ui/card/EditCardViewModel.java | 16 +++++++++ .../deck/ui/card/assignee/CardAssigneeDialog.java | 7 +--- .../card/attachments/CardAttachmentsFragment.java | 30 +++++++---------- .../attachments/previewdialog/PreviewDialog.java | 7 +--- .../ui/card/comments/CardCommentsFragment.java | 7 ++-- .../deck/ui/card/details/CardDetailsFragment.java | 32 +++++++++--------- .../CardProjectResourcesDialog.java | 10 ++---- .../nextcloud/deck/ui/stack/StackFragment.java | 13 +++++--- .../deck/ui/takephoto/TakePhotoActivity.java | 11 ++++--- 18 files changed, 126 insertions(+), 174 deletions(-) delete mode 100644 app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedActivity.java delete mode 100644 app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedFragment.java (limited to 'app/src/main/java/it/niedermann') diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/DeckApplication.java b/app/src/main/java/it/niedermann/nextcloud/deck/DeckApplication.java index 378acaa79..afe36384c 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/DeckApplication.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/DeckApplication.java @@ -27,6 +27,7 @@ public class DeckApplication extends MultiDexApplication { private static String PREF_KEY_DEBUGGING; private static LiveData currentAccountColor$; + private static LiveData currentBoardColor$; @Override public void onCreate() { @@ -34,9 +35,13 @@ public class DeckApplication extends MultiDexApplication { PREF_KEY_DEBUGGING = getString(R.string.pref_key_debugging); setAppTheme(getAppTheme(this)); DeckLog.enablePersistentLogs(isPersistentLoggingEnabled(this)); - currentAccountColor$ = distinctUntilChanged(new SharedPreferenceIntLiveData(PreferenceManager.getDefaultSharedPreferences(this), + final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); + currentAccountColor$ = distinctUntilChanged(new SharedPreferenceIntLiveData(sharedPreferences, getString(R.string.shared_preference_last_account_color), ContextCompat.getColor(this, R.color.defaultBrand))); + currentBoardColor$ = distinctUntilChanged(new SharedPreferenceIntLiveData(sharedPreferences, + getString(R.string.shared_preference_theme_main), + ContextCompat.getColor(this, R.color.defaultBrand))); super.onCreate(); } @@ -108,6 +113,10 @@ public class DeckApplication extends MultiDexApplication { return currentAccountColor$; } + public static LiveData readCurrentBoardColor() { + return currentBoardColor$; + } + @ColorInt public static int readCurrentAccountColor(@NonNull Context context) { final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java index bdde1e1c9..1a1db058f 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java @@ -14,6 +14,7 @@ import android.net.Uri; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; +import android.util.TypedValue; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -26,6 +27,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.UiThread; import androidx.appcompat.app.ActionBarDrawerToggle; +import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.core.graphics.drawable.DrawableCompat; @@ -82,7 +84,6 @@ import it.niedermann.nextcloud.deck.ui.board.ArchiveBoardListener; import it.niedermann.nextcloud.deck.ui.board.DeleteBoardListener; import it.niedermann.nextcloud.deck.ui.board.EditBoardDialogFragment; import it.niedermann.nextcloud.deck.ui.board.EditBoardListener; -import it.niedermann.nextcloud.deck.ui.branding.BrandedActivity; import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.branding.BrandedSnackbar; import it.niedermann.nextcloud.deck.ui.card.CardAdapter; @@ -126,7 +127,7 @@ import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ADD_BOARD import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ARCHIVED_BOARDS; import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_SETTINGS; -public class MainActivity extends BrandedActivity implements DeleteStackListener, EditStackListener, DeleteBoardListener, EditBoardListener, ArchiveBoardListener, OnScrollListener, OnNavigationItemSelectedListener { +public class MainActivity extends AppCompatActivity implements DeleteStackListener, EditStackListener, DeleteBoardListener, EditBoardListener, ArchiveBoardListener, OnScrollListener, OnNavigationItemSelectedListener { protected ActivityMainBinding binding; protected NavHeaderMainBinding headerBinding; @@ -137,6 +138,8 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener protected static final int ACTIVITY_SETTINGS = 2; + @ColorInt + private int colorAccent; protected SharedPreferences sharedPreferences; private StackAdapter stackAdapter; long lastBoardId; @@ -173,6 +176,10 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener setTheme(R.style.AppTheme); + final TypedValue typedValue = new TypedValue(); + getTheme().resolveAttribute(R.attr.colorAccent, typedValue, true); + colorAccent = typedValue.data; + binding = ActivityMainBinding.inflate(getLayoutInflater()); headerBinding = NavHeaderMainBinding.bind(binding.navigationView.getHeaderView(0)); setContentView(binding.getRoot()); @@ -193,12 +200,8 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener binding.navigationView.setNavigationItemSelectedListener(this); sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); - DeckApplication.readCurrentAccountColor().observe(this, (accountColor) -> { - headerBinding.headerView.setBackgroundColor(accountColor); - @ColorInt final int headerTextColor = contrastRatioIsSufficientBigAreas(accountColor, Color.WHITE) ? Color.WHITE : Color.BLACK; - DrawableCompat.setTint(headerBinding.logo.getDrawable(), headerTextColor); - DrawableCompat.setTint(headerBinding.copyDebugLogs.getDrawable(), headerTextColor); - }); + DeckApplication.readCurrentAccountColor().observe(this, this::applyAccountBranding); + DeckApplication.readCurrentBoardColor().observe(this, this::applyBoardBranding); binding.filterText.addTextChangedListener(new TextWatcher() { @Override @@ -425,8 +428,7 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener binding.accountSwitcher.setOnClickListener((v) -> AccountSwitcherDialog.newInstance().show(getSupportFragmentManager(), AccountSwitcherDialog.class.getSimpleName())); } - @Override - public void applyBrand(@ColorInt int mainColor) { + private void applyBoardBranding(@ColorInt int mainColor) { applyBrandToPrimaryTabLayout(mainColor, binding.stackTitles); applyBrandToFAB(mainColor, binding.fab); // TODO We assume, that the background of the spinner is always white @@ -434,6 +436,13 @@ public class MainActivity extends BrandedActivity implements DeleteStackListener DrawableCompat.setTint(binding.filterIndicator.getDrawable(), getSecondaryForegroundColorDependingOnTheme(this, mainColor)); } + private void applyAccountBranding(@ColorInt int accountColor) { + headerBinding.headerView.setBackgroundColor(accountColor); + @ColorInt final int headerTextColor = contrastRatioIsSufficientBigAreas(accountColor, Color.WHITE) ? Color.WHITE : Color.BLACK; + DrawableCompat.setTint(headerBinding.logo.getDrawable(), headerTextColor); + DrawableCompat.setTint(headerBinding.copyDebugLogs.getDrawable(), headerTextColor); + } + @Override protected void onDestroy() { super.onDestroy(); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java index 8a70cf12d..fc6a93f8f 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java @@ -17,16 +17,16 @@ import com.nextcloud.android.sso.exceptions.NextcloudFilesAppNotInstalledExcepti import com.nextcloud.android.sso.ui.UiExceptionManager; import it.niedermann.android.util.DimensionUtil; +import it.niedermann.nextcloud.deck.DeckApplication; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogAccountSwitcherBinding; import it.niedermann.nextcloud.deck.ui.MainViewModel; -import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment; import it.niedermann.nextcloud.deck.ui.manageaccounts.ManageAccountsActivity; import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; -public class AccountSwitcherDialog extends BrandedDialogFragment { +public class AccountSwitcherDialog extends DialogFragment { private AccountSwitcherAdapter adapter; private DialogAccountSwitcherBinding binding; @@ -61,6 +61,8 @@ public class AccountSwitcherDialog extends BrandedDialogFragment { adapter.setAccounts(accounts); }); + observeOnce(DeckApplication.readCurrentBoardColor(), requireActivity(), this::applyBrand); + binding.accountsList.setAdapter(adapter); binding.addAccount.setOnClickListener((v) -> { @@ -91,8 +93,7 @@ public class AccountSwitcherDialog extends BrandedDialogFragment { return new AccountSwitcherDialog(); } - @Override - public void applyBrand(int mainColor) { + private void applyBrand(int mainColor) { // applyBrandToLayerDrawable((LayerDrawable) binding.check.getDrawable(), R.id.area, mainColor); } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsActvitiy.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsActvitiy.java index 5a198dec3..cabf90a17 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsActvitiy.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedboards/ArchivedBoardsActvitiy.java @@ -6,6 +6,7 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.ViewModelProvider; import java.util.Collections; @@ -21,11 +22,10 @@ import it.niedermann.nextcloud.deck.ui.MainViewModel; import it.niedermann.nextcloud.deck.ui.board.ArchiveBoardListener; import it.niedermann.nextcloud.deck.ui.board.DeleteBoardListener; import it.niedermann.nextcloud.deck.ui.board.EditBoardListener; -import it.niedermann.nextcloud.deck.ui.branding.BrandedActivity; import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment; import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler; -public class ArchivedBoardsActvitiy extends BrandedActivity implements DeleteBoardListener, EditBoardListener, ArchiveBoardListener { +public class ArchivedBoardsActvitiy extends AppCompatActivity implements DeleteBoardListener, EditBoardListener, ArchiveBoardListener { private static final String BUNDLE_KEY_ACCOUNT = "accountId"; @@ -67,11 +67,6 @@ public class ArchivedBoardsActvitiy extends BrandedActivity implements DeleteBoa } - @Override - public void applyBrand(int mainColor) { - // Nothing to do... - } - @NonNull public static Intent createIntent(@NonNull Context context, @NonNull Account account) { return new Intent(context, ArchivedBoardsActvitiy.class) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsActvitiy.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsActvitiy.java index c0b922778..86aa749e7 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsActvitiy.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/archivedcards/ArchivedCardsActvitiy.java @@ -6,17 +6,17 @@ import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.ViewModelProvider; import it.niedermann.nextcloud.deck.databinding.ActivityArchivedBinding; import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper; import it.niedermann.nextcloud.deck.ui.MainViewModel; -import it.niedermann.nextcloud.deck.ui.branding.BrandedActivity; import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler; import it.niedermann.nextcloud.deck.ui.pickstack.PickStackViewModel; -public class ArchivedCardsActvitiy extends BrandedActivity { +public class ArchivedCardsActvitiy extends AppCompatActivity { private static final String BUNDLE_KEY_ACCOUNT = "accountId"; private static final String BUNDLE_KEY_BOARD_ID = "boardId"; @@ -72,11 +72,6 @@ public class ArchivedCardsActvitiy extends BrandedActivity { } - @Override - public void applyBrand(int mainColor) { - // Nothing to do... - } - @NonNull public static Intent createIntent(@NonNull Context context, @NonNull Account account, long boardId, boolean currentBoardHasEditPermission) { return new Intent(context, ArchivedCardsActvitiy.class) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedActivity.java deleted file mode 100644 index 03c45305e..000000000 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedActivity.java +++ /dev/null @@ -1,38 +0,0 @@ -package it.niedermann.nextcloud.deck.ui.branding; - -import android.util.TypedValue; -import android.view.Menu; - -import androidx.annotation.ColorInt; -import androidx.appcompat.app.AppCompatActivity; - -import it.niedermann.nextcloud.deck.R; - -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.readBrandMainColor; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.tintMenuIcon; - -public abstract class BrandedActivity extends AppCompatActivity implements Branded { - - @ColorInt - protected int colorAccent; - - @Override - protected void onStart() { - super.onStart(); - - final TypedValue typedValue = new TypedValue(); - getTheme().resolveAttribute(R.attr.colorAccent, typedValue, true); - colorAccent = typedValue.data; - - @ColorInt final int mainColor = readBrandMainColor(this); - applyBrand(mainColor); - } - - @Override - public boolean onCreateOptionsMenu(Menu menu) { - for (int i = 0; i < menu.size(); i++) { - tintMenuIcon(menu.getItem(i), colorAccent); - } - return super.onCreateOptionsMenu(menu); - } -} diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedFragment.java deleted file mode 100644 index 87cee2317..000000000 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedFragment.java +++ /dev/null @@ -1,19 +0,0 @@ -package it.niedermann.nextcloud.deck.ui.branding; - -import android.content.Context; - -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; - -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.readBrandMainColor; - -public abstract class BrandedFragment extends Fragment implements Branded { - - @Override - public void onStart() { - super.onStart(); - - @Nullable Context context = getContext(); - applyBrand(readBrandMainColor(context)); - } -} diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandingUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandingUtil.java index 863375ae5..768ba13e0 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandingUtil.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandingUtil.java @@ -28,34 +28,26 @@ import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSuf public abstract class BrandingUtil { private BrandingUtil() { - // Util class + throw new UnsupportedOperationException("This class must not get instantiated"); } @ColorInt public static int readBrandMainColor(@NonNull Context context) { final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()); - DeckLog.log("--- Read: shared_preference_theme_main"); + DeckLog.log("--- Read:", context.getString(R.string.shared_preference_theme_main)); return sharedPreferences.getInt(context.getString(R.string.shared_preference_theme_main), context.getApplicationContext().getResources().getColor(R.color.defaultBrand)); } public static void saveBrandColors(@NonNull Context context, @ColorInt int mainColor) { - if (context instanceof BrandedActivity) { - final BrandedActivity activity = (BrandedActivity) context; - activity.applyBrand(mainColor); - } final SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); - DeckLog.log("--- Write: shared_preference_theme_main |", mainColor); + DeckLog.log("--- Write:", context.getString(R.string.shared_preference_theme_main), "|", mainColor); editor.putInt(context.getString(R.string.shared_preference_theme_main), mainColor); editor.apply(); } public static void clearBrandColors(@NonNull Context context) { - if (context instanceof BrandedActivity) { - final BrandedActivity activity = (BrandedActivity) context; - activity.applyBrand(ContextCompat.getColor(context, R.color.defaultBrand)); - } final SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); - DeckLog.log("--- Write: Remove: shared_preference_theme_main | "); + DeckLog.log("--- Remove:", context.getString(R.string.shared_preference_theme_main)); editor.remove(context.getString(R.string.shared_preference_theme_main)); editor.apply(); } @@ -68,7 +60,7 @@ public abstract class BrandingUtil { if (contrastRatioIsSufficient(mainColor, ContextCompat.getColor(context, R.color.primary))) { return mainColor; } - DeckLog.verbose("Contrast ratio between brand color " + String.format("#%06X", (0xFFFFFF & mainColor)) + " and primary theme background is too low. Falling back to WHITE/BLACK as brand color."); + DeckLog.verbose("Contrast ratio between brand color", String.format("#%06X", (0xFFFFFF & mainColor)), "and primary theme background is too low. Falling back to WHITE/BLACK as brand color."); return isDarkTheme(context) ? Color.WHITE : Color.BLACK; } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java index 15a1a6fb7..ba51948dd 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java @@ -9,13 +9,14 @@ import android.text.InputFilter; import android.text.TextUtils; import android.text.TextWatcher; import android.view.Menu; -import android.view.MenuInflater; import android.view.MenuItem; import android.view.WindowManager; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; import androidx.core.graphics.drawable.DrawableCompat; import androidx.lifecycle.ViewModelProvider; @@ -30,15 +31,15 @@ import it.niedermann.nextcloud.deck.model.Card; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.model.ocs.Version; import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData; -import it.niedermann.nextcloud.deck.ui.branding.BrandedActivity; import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler; import it.niedermann.nextcloud.deck.util.CardUtil; import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToPrimaryTabLayout; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.tintMenuIcon; -public class EditActivity extends BrandedActivity { +public class EditActivity extends AppCompatActivity { private static final String BUNDLE_KEY_ACCOUNT = "account"; private static final String BUNDLE_KEY_BOARD_ID = "boardId"; private static final String BUNDLE_KEY_STACK_ID = "stackId"; @@ -87,13 +88,15 @@ public class EditActivity extends BrandedActivity { setContentView(binding.getRoot()); setSupportActionBar(binding.toolbar); + viewModel.getBrandingColor().observe(this, this::applyBoardBranding); + loadDataFromIntent(); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); - applyBrand(colorAccent); + viewModel.setBrandingColor(ContextCompat.getColor(this, R.color.primary)); setIntent(intent); loadDataFromIntent(); } @@ -123,7 +126,7 @@ public class EditActivity extends BrandedActivity { final long boardId = args.getLong(BUNDLE_KEY_BOARD_ID); observeOnce(viewModel.getFullBoardById(account.getId(), boardId), EditActivity.this, (fullBoard -> { - applyBrand(fullBoard.getBoard().getColor()); + viewModel.setBrandingColor(fullBoard.getBoard().getColor()); viewModel.setCanEdit(fullBoard.getBoard().isPermissionEdit()); invalidateOptionsMenu(); if (viewModel.isCreateMode()) { @@ -185,8 +188,11 @@ public class EditActivity extends BrandedActivity { @Override public boolean onCreateOptionsMenu(Menu menu) { if (viewModel.canEdit()) { - MenuInflater inflater = getMenuInflater(); - inflater.inflate(R.menu.card_edit_menu, menu); + getMenuInflater().inflate(R.menu.card_edit_menu, menu); + @ColorInt final int colorAccent = ContextCompat.getColor(this, R.color.accent); + for (int i = 0; i < menu.size(); i++) { + tintMenuIcon(menu.getItem(i), colorAccent); + } } else { menu.clear(); } @@ -320,13 +326,12 @@ public class EditActivity extends BrandedActivity { super.finish(); } - @Override - public void applyBrand(int mainColor) { + private void applyBoardBranding(int mainColor) { final Drawable navigationIcon = binding.toolbar.getNavigationIcon(); if (navigationIcon == null) { DeckLog.error("Expected navigationIcon to be present."); } else { - DrawableCompat.setTint(binding.toolbar.getNavigationIcon(), colorAccent); + DrawableCompat.setTint(binding.toolbar.getNavigationIcon(), ContextCompat.getColor(this, R.color.accent)); } applyBrandToPrimaryTabLayout(mainColor, binding.tabLayout); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java index 321f70984..6bbd94afb 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditCardViewModel.java @@ -2,15 +2,19 @@ package it.niedermann.nextcloud.deck.ui.card; import android.app.Application; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; +import androidx.lifecycle.MutableLiveData; import java.io.File; import java.util.ArrayList; import java.util.List; import it.niedermann.nextcloud.deck.DeckLog; +import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.api.ResponseCallback; import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.model.Attachment; @@ -24,6 +28,8 @@ import it.niedermann.nextcloud.deck.model.ocs.Activity; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData; +import static androidx.lifecycle.Transformations.distinctUntilChanged; + @SuppressWarnings("WeakerAccess") public class EditCardViewModel extends AndroidViewModel { @@ -37,10 +43,20 @@ public class EditCardViewModel extends AndroidViewModel { private boolean pendingCreation = false; private boolean canEdit = false; private boolean createMode = false; + private final MutableLiveData brandingColor$ = new MutableLiveData<>(); public EditCardViewModel(@NonNull Application application) { super(application); this.syncManager = new SyncManager(application); + this.brandingColor$.setValue(ContextCompat.getColor(application, R.color.primary)); + } + + public LiveData getBrandingColor() { + return distinctUntilChanged(this.brandingColor$); + } + + public void setBrandingColor(@ColorInt int brandingColor) { + this.brandingColor$.setValue(brandingColor); } /** diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/assignee/CardAssigneeDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/assignee/CardAssigneeDialog.java index b18f35de0..db24f8112 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/assignee/CardAssigneeDialog.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/assignee/CardAssigneeDialog.java @@ -22,7 +22,6 @@ import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogPreviewBinding; import it.niedermann.nextcloud.deck.model.User; import it.niedermann.nextcloud.deck.ui.branding.BrandedDeleteAlertDialogBuilder; -import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment; import it.niedermann.nextcloud.deck.ui.card.EditCardViewModel; import it.niedermann.nextcloud.deck.ui.card.attachments.previewdialog.PreviewDialog; @@ -31,7 +30,7 @@ import static it.niedermann.nextcloud.deck.DeckApplication.isDarkTheme; /** * TODO maybe this can be merged with {@link PreviewDialog} */ -public class CardAssigneeDialog extends BrandedDialogFragment { +public class CardAssigneeDialog extends DialogFragment { private static final String KEY_USER = "user"; private DialogPreviewBinding binding; @@ -102,10 +101,6 @@ public class CardAssigneeDialog extends BrandedDialogFragment { binding.title.setText(user.getDisplayname()); } - @Override - public void applyBrand(int mainColor) { - } - public static DialogFragment newInstance(@NonNull User user) { final DialogFragment fragment = new CardAssigneeDialog(); final Bundle args = new Bundle(); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java index 1da79a067..76262309f 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/CardAttachmentsFragment.java @@ -1,7 +1,6 @@ package it.niedermann.nextcloud.deck.ui.card.attachments; import android.content.ContentResolver; -import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.ColorStateList; @@ -54,7 +53,6 @@ import it.niedermann.nextcloud.deck.model.Attachment; import it.niedermann.nextcloud.deck.model.Card; import it.niedermann.nextcloud.deck.model.enums.DBStatus; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; -import it.niedermann.nextcloud.deck.ui.branding.BrandedFragment; import it.niedermann.nextcloud.deck.ui.branding.BrandedSnackbar; import it.niedermann.nextcloud.deck.ui.card.EditCardViewModel; import it.niedermann.nextcloud.deck.ui.card.attachments.picker.AbstractPickerAdapter; @@ -86,13 +84,12 @@ import static com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_ import static com.google.android.material.bottomsheet.BottomSheetBehavior.STATE_HIDDEN; import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToFAB; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.readBrandMainColor; import static it.niedermann.nextcloud.deck.ui.card.attachments.CardAttachmentAdapter.VIEW_TYPE_DEFAULT; import static it.niedermann.nextcloud.deck.ui.card.attachments.CardAttachmentAdapter.VIEW_TYPE_IMAGE; import static it.niedermann.nextcloud.deck.util.FilesUtil.copyContentUriToTempFile; import static java.net.HttpURLConnection.HTTP_CONFLICT; -public class CardAttachmentsFragment extends BrandedFragment implements AttachmentDeletedListener, AttachmentClickedListener { +public class CardAttachmentsFragment extends Fragment implements AttachmentDeletedListener, AttachmentClickedListener { private FragmentCardEditTabAttachmentsBinding binding; private EditCardViewModel editViewModel; @@ -236,13 +233,17 @@ public class CardAttachmentsFragment extends BrandedFragment implements Attachme binding.fab.hide(); binding.emptyContentView.hideDescription(); } - @Nullable Context context = requireContext(); - applyBrand(readBrandMainColor(context)); final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(requireContext()); compressImagesOnUpload = sharedPreferences.getBoolean(getString(R.string.pref_key_compress_image_attachments), true); return binding.getRoot(); } + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + editViewModel.getBrandingColor().observe(getViewLifecycleOwner(), this::applyBrand); + } + @Override public void onPause() { super.onPause(); @@ -558,11 +559,10 @@ public class CardAttachmentsFragment extends BrandedFragment implements Attachme this.clickedItemPosition = position; } - @Override - public void applyBrand(int mainColor) { - applyBrandToFAB(mainColor, binding.fab); - @ColorInt final int finalMainColor = DeckColorUtil.contrastRatioIsSufficient(mainColor, primaryColor) - ? mainColor + private void applyBrand(@ColorInt int boardColor) { + applyBrandToFAB(boardColor, binding.fab); + @ColorInt final int finalMainColor = DeckColorUtil.contrastRatioIsSufficient(boardColor, primaryColor) + ? boardColor : accentColor; final ColorStateList list = new ColorStateList( new int[][]{ @@ -576,13 +576,7 @@ public class CardAttachmentsFragment extends BrandedFragment implements Attachme ); binding.bottomNavigation.setItemIconTintList(list); binding.bottomNavigation.setItemTextColor(list); - - // applyBrand() is also called onStart - // adapter might be null at this point - // https://github.com/stefan-niedermann/nextcloud-deck/issues/782 - if (adapter != null) { - adapter.applyBrand(mainColor); - } + adapter.applyBrand(boardColor); } public static Fragment newInstance() { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/previewdialog/PreviewDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/previewdialog/PreviewDialog.java index 8ebdf1b50..e2f2f3e28 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/previewdialog/PreviewDialog.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/previewdialog/PreviewDialog.java @@ -19,13 +19,12 @@ import com.bumptech.glide.RequestBuilder; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogPreviewBinding; import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; -import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment; import static android.view.View.GONE; import static android.view.View.VISIBLE; import static it.niedermann.nextcloud.deck.DeckApplication.isDarkTheme; -public class PreviewDialog extends BrandedDialogFragment { +public class PreviewDialog extends DialogFragment { private DialogPreviewBinding binding; private PreviewDialogViewModel viewModel; @@ -85,10 +84,6 @@ public class PreviewDialog extends BrandedDialogFragment { super.onCancel(dialog); } - @Override - public void applyBrand(int mainColor) { - } - @Override public void onDestroy() { this.imageBuilder$.removeObservers(requireActivity()); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java index 2f538f9bb..a091b852d 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java @@ -25,7 +25,6 @@ import it.niedermann.nextcloud.deck.databinding.FragmentCardEditTabCommentsBindi import it.niedermann.nextcloud.deck.model.ocs.comment.DeckComment; import it.niedermann.nextcloud.deck.model.ocs.comment.full.FullDeckComment; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; -import it.niedermann.nextcloud.deck.ui.branding.BrandedFragment; import it.niedermann.nextcloud.deck.ui.card.EditActivity; import it.niedermann.nextcloud.deck.ui.card.EditCardViewModel; import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment; @@ -36,7 +35,7 @@ import static android.view.View.VISIBLE; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditText; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToFAB; -public class CardCommentsFragment extends BrandedFragment implements CommentEditedListener, CommentDeletedListener, CommentSelectAsReplyListener { +public class CardCommentsFragment extends Fragment implements CommentEditedListener, CommentDeletedListener, CommentSelectAsReplyListener { private FragmentCardEditTabCommentsBinding binding; private EditCardViewModel mainViewModel; @@ -132,6 +131,7 @@ public class CardCommentsFragment extends BrandedFragment implements CommentEdit binding.message.requestFocus(); requireActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } + mainViewModel.getBrandingColor().observe(getViewLifecycleOwner(), this::applyBrand); } @Override @@ -157,8 +157,7 @@ public class CardCommentsFragment extends BrandedFragment implements CommentEdit }); } - @Override - public void applyBrand(int mainColor) { + private void applyBrand(int mainColor) { applyBrandToEditText(mainColor, binding.message); applyBrandToFAB(mainColor, binding.fab); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java index 8376a6817..06fe1cd40 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java @@ -11,7 +11,9 @@ import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.annotation.Px; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; @@ -47,7 +49,6 @@ import it.niedermann.nextcloud.deck.model.Label; import it.niedermann.nextcloud.deck.model.User; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.ui.branding.BrandedDatePickerDialog; -import it.niedermann.nextcloud.deck.ui.branding.BrandedFragment; import it.niedermann.nextcloud.deck.ui.branding.BrandedSnackbar; import it.niedermann.nextcloud.deck.ui.branding.BrandedTimePickerDialog; import it.niedermann.nextcloud.deck.ui.card.EditCardViewModel; @@ -61,7 +62,7 @@ import static android.view.View.GONE; import static android.view.View.VISIBLE; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditText; -public class CardDetailsFragment extends BrandedFragment implements OnDateSetListener, OnTimeSetListener, CardAssigneeListener { +public class CardDetailsFragment extends Fragment implements OnDateSetListener, OnTimeSetListener, CardAssigneeListener { private FragmentCardEditTabDetailsBinding binding; private EditCardViewModel viewModel; @@ -112,6 +113,12 @@ public class CardDetailsFragment extends BrandedFragment implements OnDateSetLis return binding.getRoot(); } + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + viewModel.getBrandingColor().observe(getViewLifecycleOwner(), this::applyBrand); + } + @Override public void onResume() { super.onResume(); @@ -123,19 +130,14 @@ public class CardDetailsFragment extends BrandedFragment implements OnDateSetLis if (dpd != null) dpd.setOnDateSetListener(this); } - @Override - public void onPause() { - super.onPause(); - } - - @Override - public void applyBrand(int mainColor) { - applyBrandToEditText(mainColor, binding.labels); - applyBrandToEditText(mainColor, binding.dueDateDate); - applyBrandToEditText(mainColor, binding.dueDateTime); - applyBrandToEditText(mainColor, binding.people); - binding.descriptionEditor.setSearchColor(mainColor); - binding.descriptionViewer.setSearchColor(mainColor); + private void applyBrand(@ColorInt int boardColor) { + // TODO apply correct branding on the BrandedDatePicker + applyBrandToEditText(boardColor, binding.labels); + applyBrandToEditText(boardColor, binding.dueDateDate); + applyBrandToEditText(boardColor, binding.dueDateTime); + applyBrandToEditText(boardColor, binding.people); + binding.descriptionEditor.setSearchColor(boardColor); + binding.descriptionViewer.setSearchColor(boardColor); } private void setupDescription() { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java index 46195b309..7434b6518 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java @@ -19,10 +19,9 @@ import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogProjectResourcesBinding; import it.niedermann.nextcloud.deck.model.ocs.projects.OcsProjectResource; import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; -import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment; import it.niedermann.nextcloud.deck.ui.card.EditCardViewModel; -public class CardProjectResourcesDialog extends BrandedDialogFragment { +public class CardProjectResourcesDialog extends DialogFragment { private static final String KEY_RESOURCES = "resources"; private static final String KEY_PROJECT_NAME = "projectName"; @@ -31,7 +30,7 @@ public class CardProjectResourcesDialog extends BrandedDialogFragment { private String projectName; @NonNull - private List resources = new ArrayList<>(); + private final List resources = new ArrayList<>(); @Override public void onAttach(@NonNull Context context) { @@ -67,11 +66,6 @@ public class CardProjectResourcesDialog extends BrandedDialogFragment { super.onActivityCreated(savedInstanceState); } - @Override - public void applyBrand(int mainColor) { - - } - public static DialogFragment newInstance(@Nullable String projectName, @NonNull List resources) { final DialogFragment fragment = new CardProjectResourcesDialog(); final Bundle args = new Bundle(); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java index 93437e37a..2778cbd19 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/StackFragment.java @@ -18,6 +18,7 @@ import androidx.recyclerview.widget.RecyclerView; import java.util.List; import it.niedermann.android.crosstabdnd.DragAndDropTab; +import it.niedermann.nextcloud.deck.DeckApplication; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.databinding.FragmentStackBinding; import it.niedermann.nextcloud.deck.model.Card; @@ -26,7 +27,6 @@ import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; import it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.WrappedLiveData; import it.niedermann.nextcloud.deck.ui.MainViewModel; -import it.niedermann.nextcloud.deck.ui.branding.BrandedFragment; import it.niedermann.nextcloud.deck.ui.card.CardAdapter; import it.niedermann.nextcloud.deck.ui.card.SelectCardListener; import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment; @@ -35,7 +35,7 @@ import it.niedermann.nextcloud.deck.ui.movecard.MoveCardListener; import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; -public class StackFragment extends BrandedFragment implements DragAndDropTab, MoveCardListener { +public class StackFragment extends Fragment implements DragAndDropTab, MoveCardListener { private static final String KEY_STACK_ID = "stackId"; @@ -124,6 +124,12 @@ public class StackFragment extends BrandedFragment implements DragAndDropTab { try { @@ -170,8 +174,7 @@ public class TakePhotoActivity extends BrandedActivity { return new Intent(context, TakePhotoActivity.class).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); } - @Override - public void applyBrand(int mainColor) { + private void applyBoardColorBrand(int mainColor) { final ColorStateList colorStateList = ColorStateList.valueOf(mainColor); for (View v : brandedViews) { v.setBackgroundTintList(colorStateList); -- cgit v1.2.3