diff options
13 files changed, 169 insertions, 91 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/Application.java b/app/src/main/java/it/niedermann/nextcloud/deck/Application.java index 2eaf5419e..1f3bc2e7b 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/Application.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/Application.java @@ -21,24 +21,24 @@ public class Application extends android.app.Application { public static final long NO_BOARD_ID = -1L; public static final long NO_STACK_ID = -1L; - private static boolean enableNextcloudTheme; + private static boolean enableBrand; - public interface NextcloudTheme { - void applyNextcloudTheme(@ColorInt int mainColor, @ColorInt int textColor); + public interface Branded { + void applyBrand(@ColorInt int mainColor, @ColorInt int textColor); } @NonNull - private static List<NextcloudTheme> themableComponents = new ArrayList<>(); + private static List<Branded> brandedComponents = new ArrayList<>(); @Override public void onCreate() { setAppTheme(getAppTheme(getApplicationContext())); - enableNextcloudTheme = getApplicationContext().getResources().getBoolean(R.bool.enable_nextcloud_theme); - if (enableNextcloudTheme) { - @ColorInt final int mainColor = readNextcloudThemeMainColor(getApplicationContext()); - @ColorInt final int textColor = readNextcloudThemeTextColor(getApplicationContext()); - applyNextcloudTheme(mainColor, textColor); + enableBrand = getApplicationContext().getResources().getBoolean(R.bool.enable_brand); + if (enableBrand) { + @ColorInt final int mainColor = readBrandMainColor(getApplicationContext()); + @ColorInt final int textColor = readBrandTextColor(getApplicationContext()); + applyBrand(mainColor, textColor); } super.onCreate(); } @@ -66,56 +66,56 @@ public class Application extends android.app.Application { return prefs.getBoolean(context.getString(R.string.pref_key_dark_theme), false); } - // ----------------- - // Nextcloud theming - // ----------------- + // -------- + // Branding + // -------- - public static void registerThemableComponent(@NonNull Context context, @NonNull NextcloudTheme themableComponent) { - if (enableNextcloudTheme && !themableComponents.contains(themableComponent)) { - themableComponents.add(themableComponent); + public static void registerBrandedComponent(@NonNull Context context, @NonNull Branded brandedComponent) { + if (enableBrand && !brandedComponents.contains(brandedComponent)) { + brandedComponents.add(brandedComponent); - @ColorInt final int mainColor = readNextcloudThemeMainColor(context); - @ColorInt final int textColor = readNextcloudThemeTextColor(context); - themableComponent.applyNextcloudTheme(mainColor, textColor); + @ColorInt final int mainColor = readBrandMainColor(context); + @ColorInt final int textColor = readBrandTextColor(context); + brandedComponent.applyBrand(mainColor, textColor); } } - public static void deregisterThemableComponent(@NonNull NextcloudTheme themableComponent) { - themableComponents.remove(themableComponent); + public static void deregisterBrandedComponent(@NonNull Branded brandedComponent) { + brandedComponents.remove(brandedComponent); } - public static void setNextcloudTheme(@NonNull Context context, @ColorInt int mainColor, @ColorInt int textColor) { - @ColorInt final int currentMainColor = readNextcloudThemeMainColor(context); - @ColorInt final int currentTextColor = readNextcloudThemeTextColor(context); + public static void setBrand(@NonNull Context context, @ColorInt int mainColor, @ColorInt int textColor) { + @ColorInt final int currentMainColor = readBrandMainColor(context); + @ColorInt final int currentTextColor = readBrandTextColor(context); if (mainColor != currentMainColor || textColor != currentTextColor) { - if (enableNextcloudTheme) { - applyNextcloudTheme(mainColor, textColor); + if (enableBrand) { + applyBrand(mainColor, textColor); } - saveNextcloudThemeColors(context, mainColor, textColor); + saveBrandColors(context, mainColor, textColor); } } - public static void applyNextcloudTheme(@ColorInt int mainColor, @ColorInt int textColor) { - for (NextcloudTheme themableComponent : themableComponents) { - themableComponent.applyNextcloudTheme(mainColor, textColor); + public static void applyBrand(@ColorInt int mainColor, @ColorInt int textColor) { + for (Branded themableComponent : brandedComponents) { + themableComponent.applyBrand(mainColor, textColor); } } @ColorInt - public static int readNextcloudThemeMainColor(@NonNull Context context) { + public static int readBrandMainColor(@NonNull Context context) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()); DeckLog.log("--- Read: shared_preference_theme_main"); return sharedPreferences.getInt(context.getString(R.string.shared_preference_theme_main), context.getApplicationContext().getResources().getColor(R.color.primary)); } @ColorInt - public static int readNextcloudThemeTextColor(@NonNull Context context) { + public static int readBrandTextColor(@NonNull Context context) { SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()); DeckLog.log("--- Read: shared_preference_theme_text"); return sharedPreferences.getInt(context.getString(R.string.shared_preference_theme_text), context.getApplicationContext().getResources().getColor(android.R.color.white)); } - public static void saveNextcloudThemeColors(@NonNull Context context, @ColorInt int mainColor, @ColorInt int textColor) { + public static void saveBrandColors(@NonNull Context context, @ColorInt int mainColor, @ColorInt int textColor) { SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(context).edit(); DeckLog.log("--- Write: shared_preference_theme_main" + " | " + mainColor); DeckLog.log("--- Write: shared_preference_theme_text" + " | " + textColor); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/AbstractThemableActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/BrandedActivity.java index b0e0f2d6c..15fbc5d8c 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/AbstractThemableActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/BrandedActivity.java @@ -1,11 +1,14 @@ package it.niedermann.nextcloud.deck.ui; import android.content.res.ColorStateList; +import android.graphics.Color; +import android.graphics.ColorFilter; import android.graphics.PorterDuff; import android.graphics.drawable.Drawable; import android.view.Menu; import android.view.View; import android.view.Window; +import android.widget.EditText; import androidx.annotation.CallSuper; import androidx.annotation.ColorInt; @@ -15,6 +18,7 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.graphics.drawable.DrawableCompat; +import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.tabs.TabLayout; import it.niedermann.nextcloud.deck.Application; @@ -24,7 +28,7 @@ import static android.os.Build.VERSION_CODES.LOLLIPOP; import static android.os.Build.VERSION_CODES.M; import static it.niedermann.nextcloud.deck.util.ColorUtil.isColorDark; -public abstract class AbstractThemableActivity extends AppCompatActivity implements Application.NextcloudTheme { +public abstract class BrandedActivity extends AppCompatActivity implements Application.Branded { /** * Member variable needed for onCreateOptionsMenu()-callback @@ -36,24 +40,24 @@ public abstract class AbstractThemableActivity extends AppCompatActivity impleme @Override protected void onResume() { super.onResume(); - Application.registerThemableComponent(this, this); + Application.registerBrandedComponent(this, this); } @Override protected void onPause() { super.onPause(); - Application.deregisterThemableComponent(this); + Application.deregisterBrandedComponent(this); } @Override protected void onDestroy() { super.onDestroy(); - Application.deregisterThemableComponent(this); + Application.deregisterBrandedComponent(this); } @CallSuper @Override - public void applyNextcloudTheme(@ColorInt int mainColor, @ColorInt int textColor) { + public void applyBrand(@ColorInt int mainColor, @ColorInt int textColor) { this.textColor = textColor; if (SDK_INT >= LOLLIPOP) { // Set status bar color final Window window = getWindow(); @@ -86,7 +90,7 @@ public abstract class AbstractThemableActivity extends AppCompatActivity impleme return super.onCreateOptionsMenu(menu); } - protected void applyNextcloudThemeToToolbar(@ColorInt int mainColor, @ColorInt int textColor, @NonNull Toolbar toolbar) { + protected static void applyBrandToPrimaryToolbar(@ColorInt int mainColor, @ColorInt int textColor, @NonNull Toolbar toolbar) { toolbar.setBackgroundColor(mainColor); toolbar.setTitleTextColor(textColor); final Drawable overflowDrawable = toolbar.getOverflowIcon(); @@ -102,10 +106,43 @@ public abstract class AbstractThemableActivity extends AppCompatActivity impleme } } - protected void applyNextcloudThemeToTablayout(@ColorInt int mainColor, @ColorInt int textColor, @NonNull TabLayout tabLayout) { + protected static void applyBrandToPrimaryTabLayout(@ColorInt int mainColor, @ColorInt int textColor, @NonNull TabLayout tabLayout) { tabLayout.setBackgroundColor(mainColor); tabLayout.setTabTextColors(textColor, textColor); tabLayout.setTabIconTint(ColorStateList.valueOf(textColor)); tabLayout.setSelectedTabIndicatorColor(textColor); } + + public static void applyBrandToFAB(@ColorInt int mainColor, @ColorInt int textColor, @NonNull FloatingActionButton fab) { + fab.setSupportBackgroundTintList(ColorStateList.valueOf(mainColor)); + fab.setColorFilter(textColor); + } + + public static void applyBrandToEditText(@ColorInt int mainColor, @ColorInt int textColor, @NonNull EditText editText) { + final boolean isDarkTheme = Application.getAppTheme(editText.getContext()); + final Drawable background = editText.getBackground(); + final ColorFilter oldColorFilter = DrawableCompat.getColorFilter(background); + final View.OnFocusChangeListener oldOnFocusChangeListener = editText.getOnFocusChangeListener(); + + // Since we may collide with dark theme in this area, we have to make sure that the color is visible depending on the background + @ColorInt final int finalMainColor; + if (isDarkTheme && mainColor == Color.BLACK) { + finalMainColor = Color.WHITE; + } else if (!isDarkTheme && mainColor == Color.WHITE) { + finalMainColor = Color.BLACK; + } else { + finalMainColor = mainColor; + } + + editText.setOnFocusChangeListener((v, hasFocus) -> { + if (hasFocus) { + background.setColorFilter(finalMainColor, PorterDuff.Mode.SRC_ATOP); + } else { + background.setColorFilter(oldColorFilter); + } + if (oldOnFocusChangeListener != null) { + oldOnFocusChangeListener.onFocusChange(v, hasFocus); + } + }); + } } 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 868523774..4aa2c5a78 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 @@ -3,7 +3,6 @@ package it.niedermann.nextcloud.deck.ui; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; -import android.content.res.ColorStateList; import android.database.sqlite.SQLiteConstraintException; import android.graphics.Color; import android.graphics.PorterDuff; @@ -104,7 +103,7 @@ import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ADD_ACCOU import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_ADD_BOARD; import static it.niedermann.nextcloud.deck.util.DrawerMenuUtil.MENU_ID_SETTINGS; -public class MainActivity extends AbstractThemableActivity implements EditStackListener, EditBoardListener, OnScrollListener, OnNavigationItemSelectedListener, DrawerAccountListener, DrawerBoardListener { +public class MainActivity extends BrandedActivity implements EditStackListener, EditBoardListener, OnScrollListener, OnNavigationItemSelectedListener, DrawerAccountListener, DrawerBoardListener { protected ActivityMainBinding binding; protected NavHeaderMainBinding headerBinding; @@ -309,7 +308,7 @@ public class MainActivity extends AbstractThemableActivity implements EditStackL syncManager.refreshCapabilities(new IResponseCallback<Capabilities>(currentAccount) { @Override public void onResponse(Capabilities response) { - runOnUiThread(() -> Application.setNextcloudTheme(MainActivity.this, Color.parseColor(response.getColor()), Color.parseColor(response.getTextColor()))); + runOnUiThread(() -> Application.setBrand(MainActivity.this, Color.parseColor(response.getColor()), Color.parseColor(response.getTextColor()))); } }); }).start(); @@ -336,15 +335,14 @@ public class MainActivity extends AbstractThemableActivity implements EditStackL } @Override - public void applyNextcloudTheme(@ColorInt int mainColor, @ColorInt int textColor) { - super.applyNextcloudTheme(mainColor, textColor); - applyNextcloudThemeToToolbar(mainColor, textColor, binding.toolbar); - applyNextcloudThemeToTablayout(mainColor, textColor, binding.stackTitles); + public void applyBrand(@ColorInt int mainColor, @ColorInt int textColor) { + super.applyBrand(mainColor, textColor); + applyBrandToPrimaryToolbar(mainColor, textColor, binding.toolbar); + applyBrandToPrimaryTabLayout(mainColor, textColor, binding.stackTitles); + applyBrandToFAB(mainColor, textColor, binding.fab); binding.addStackButton.setBackgroundColor(mainColor); binding.addStackButton.setColorFilter(textColor); - binding.fab.setSupportBackgroundTintList(ColorStateList.valueOf(mainColor)); - binding.fab.setColorFilter(textColor); headerBinding.drawerHeaderView.setBackgroundColor(mainColor); headerBinding.drawerAppTitle.setTextColor(textColor); @@ -420,7 +418,7 @@ public class MainActivity extends AbstractThemableActivity implements EditStackL protected void setCurrentAccount(@NonNull Account account) { this.currentAccount = account; SingleAccountHelper.setCurrentAccount(getApplicationContext(), this.currentAccount.getName()); - Application.setNextcloudTheme(MainActivity.this, Color.parseColor(currentAccount.getColor()), Color.parseColor(currentAccount.getTextColor())); + Application.setBrand(MainActivity.this, Color.parseColor(currentAccount.getColor()), Color.parseColor(currentAccount.getTextColor())); syncManager = new SyncManager(this); Application.saveCurrentAccountId(this, this.currentAccount.getId()); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutActivity.java index 9b226a300..cfd735cc0 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutActivity.java @@ -15,12 +15,12 @@ import it.niedermann.nextcloud.deck.Application; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.ActivityAboutBinding; import it.niedermann.nextcloud.deck.model.Account; -import it.niedermann.nextcloud.deck.ui.AbstractThemableActivity; +import it.niedermann.nextcloud.deck.ui.BrandedActivity; import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_ACCOUNT; -public class AboutActivity extends AbstractThemableActivity { +public class AboutActivity extends BrandedActivity { private ActivityAboutBinding binding; private final static int[] tabTitles = new int[]{ @@ -83,9 +83,9 @@ public class AboutActivity extends AbstractThemableActivity { } @Override - public void applyNextcloudTheme(int mainColor, int textColor) { - super.applyNextcloudTheme(mainColor, textColor); - applyNextcloudThemeToToolbar(mainColor, textColor, binding.toolbar); - applyNextcloudThemeToTablayout(mainColor, textColor, binding.tabLayout); + public void applyBrand(int mainColor, int textColor) { + super.applyBrand(mainColor, textColor); + applyBrandToPrimaryToolbar(mainColor, textColor, binding.toolbar); + applyBrandToPrimaryTabLayout(mainColor, textColor, binding.tabLayout); } }
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentLicenseTab.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentLicenseTab.java index 62398a90f..124b5d038 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentLicenseTab.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentLicenseTab.java @@ -16,14 +16,14 @@ import it.niedermann.nextcloud.deck.databinding.FragmentAboutLicenseTabBinding; import static it.niedermann.nextcloud.deck.util.SpannableUtil.setTextWithURL; -public class AboutFragmentLicenseTab extends Fragment implements Application.NextcloudTheme { +public class AboutFragmentLicenseTab extends Fragment implements Application.Branded { private FragmentAboutLicenseTabBinding binding; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = FragmentAboutLicenseTabBinding.inflate(inflater, container, false); - Application.registerThemableComponent(requireContext(), this); + Application.registerBrandedComponent(requireContext(), this); setTextWithURL(binding.aboutIconsDisclaimerAppIcon, getResources(), R.string.about_icons_disclaimer_app_icon, R.string.about_app_icon_author_link_label, R.string.url_about_icon_author); setTextWithURL(binding.aboutIconsDisclaimerMdiIcons, getResources(), R.string.about_icons_disclaimer_mdi_icons, R.string.about_icons_disclaimer_mdi, R.string.url_about_icons_disclaimer_mdi); binding.aboutAppLicenseButton.setOnClickListener((v) -> startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(getString(R.string.url_license))))); @@ -32,18 +32,18 @@ public class AboutFragmentLicenseTab extends Fragment implements Application.Nex @Override public void onResume() { - Application.registerThemableComponent(requireContext(), this); + Application.registerBrandedComponent(requireContext(), this); super.onResume(); } @Override public void onPause() { - Application.deregisterThemableComponent(this); + Application.deregisterBrandedComponent(this); super.onPause(); } @Override - public void applyNextcloudTheme(int mainColor, int textColor) { + public void applyBrand(int mainColor, int textColor) { binding.aboutAppLicenseButton.setBackgroundColor(mainColor); binding.aboutAppLicenseButton.setTextColor(textColor); } 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 7d498ef2d..b3070db4e 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 @@ -29,7 +29,7 @@ import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.model.ocs.Version; import it.niedermann.nextcloud.deck.model.ocs.comment.DeckComment; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; -import it.niedermann.nextcloud.deck.ui.AbstractThemableActivity; +import it.niedermann.nextcloud.deck.ui.BrandedActivity; import it.niedermann.nextcloud.deck.ui.card.attachments.NewCardAttachmentHandler; import it.niedermann.nextcloud.deck.ui.card.comments.CommentAddedListener; import it.niedermann.nextcloud.deck.ui.card.comments.CommentDeletedListener; @@ -44,7 +44,7 @@ import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_LOCAL_ import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_STACK_ID; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.NO_LOCAL_ID; -public class EditActivity extends AbstractThemableActivity implements CardDetailsListener, CommentAddedListener, CommentDeletedListener, NewCardAttachmentHandler { +public class EditActivity extends BrandedActivity implements CardDetailsListener, CommentAddedListener, CommentDeletedListener, NewCardAttachmentHandler { private ActivityEditBinding binding; private SyncManager syncManager; @@ -339,10 +339,10 @@ public class EditActivity extends AbstractThemableActivity implements CardDetail } @Override - public void applyNextcloudTheme(int mainColor, int textColor) { - super.applyNextcloudTheme(mainColor, textColor); - applyNextcloudThemeToToolbar(mainColor, textColor, binding.toolbar); - applyNextcloudThemeToTablayout(mainColor, textColor, binding.tabLayout); + public void applyBrand(int mainColor, int textColor) { + super.applyBrand(mainColor, textColor); + applyBrandToPrimaryToolbar(mainColor, textColor, binding.toolbar); + applyBrandToPrimaryTabLayout(mainColor, textColor, binding.tabLayout); binding.title.setTextColor(textColor); DrawableCompat.setTint(binding.title.getBackground(), textColor); binding.titleTextInputLayout.setDefaultHintTextColor(ColorStateList.valueOf(textColor)); 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 746b101d9..2395e7df0 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 @@ -3,7 +3,6 @@ package it.niedermann.nextcloud.deck.ui.card.attachments; import android.Manifest; import android.app.Activity; import android.content.Intent; -import android.content.res.ColorStateList; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -34,6 +33,7 @@ import it.niedermann.nextcloud.deck.model.Attachment; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; import it.niedermann.nextcloud.deck.util.FileUtils; +import static it.niedermann.nextcloud.deck.ui.BrandedActivity.applyBrandToFAB; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_ACCOUNT_ID; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_BOARD_ID; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_CAN_EDIT; @@ -42,7 +42,7 @@ import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.NO_LOCAL_ID; 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; -public class CardAttachmentsFragment extends Fragment implements AttachmentDeletedListener, AttachmentClickedListener, Application.NextcloudTheme { +public class CardAttachmentsFragment extends Fragment implements AttachmentDeletedListener, AttachmentClickedListener, Application.Branded { private FragmentCardEditTabAttachmentsBinding binding; private static final int REQUEST_CODE_ADD_ATTACHMENT = 1; @@ -154,12 +154,12 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentDelet @Override public void onResume() { super.onResume(); - Application.registerThemableComponent(requireContext(), this); + Application.registerBrandedComponent(requireContext(), this); } @Override public void onPause() { - Application.deregisterThemableComponent(this); + Application.deregisterBrandedComponent(this); super.onPause(); } @@ -263,8 +263,7 @@ public class CardAttachmentsFragment extends Fragment implements AttachmentDelet } @Override - public void applyNextcloudTheme(int mainColor, int textColor) { - binding.fab.setSupportBackgroundTintList(ColorStateList.valueOf(mainColor)); - binding.fab.setColorFilter(textColor); + public void applyBrand(int mainColor, int textColor) { + applyBrandToFAB(mainColor, textColor, binding.fab); } } 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 34aebb529..cbb6e53f3 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 @@ -13,17 +13,20 @@ import androidx.fragment.app.Fragment; import java.util.Date; +import it.niedermann.nextcloud.deck.Application; import it.niedermann.nextcloud.deck.databinding.FragmentCardEditTabCommentsBinding; import it.niedermann.nextcloud.deck.model.ocs.comment.DeckComment; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; import static android.view.View.GONE; import static android.view.View.VISIBLE; +import static it.niedermann.nextcloud.deck.ui.BrandedActivity.applyBrandToEditText; +import static it.niedermann.nextcloud.deck.ui.BrandedActivity.applyBrandToFAB; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_ACCOUNT_ID; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_CAN_EDIT; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_LOCAL_ID; -public class CardCommentsFragment extends Fragment implements CommentEditedListener { +public class CardCommentsFragment extends Fragment implements Application.Branded, CommentEditedListener { private FragmentCardEditTabCommentsBinding binding; private SyncManager syncManager; @@ -110,4 +113,22 @@ public class CardCommentsFragment extends Fragment implements CommentEditedListe public void onCommentEdited(Long id, String comment) { syncManager.updateComment(accountId, localId, id, comment); } + + @Override + public void onResume() { + super.onResume(); + Application.registerBrandedComponent(requireContext(), this); + } + + @Override + public void onPause() { + Application.deregisterBrandedComponent(this); + super.onPause(); + } + + @Override + public void applyBrand(int mainColor, int textColor) { + applyBrandToEditText(mainColor, textColor, binding.message); + applyBrandToFAB(mainColor, textColor, 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 512c347a3..1d168ea5a 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 @@ -2,6 +2,7 @@ package it.niedermann.nextcloud.deck.ui.card.details; import android.app.DatePickerDialog; import android.app.TimePickerDialog; +import android.app.TimePickerDialog.OnTimeSetListener; import android.content.Context; import android.content.res.ColorStateList; import android.graphics.Color; @@ -37,6 +38,7 @@ import java.util.Calendar; import java.util.Date; import java.util.Locale; +import it.niedermann.nextcloud.deck.Application; import it.niedermann.nextcloud.deck.DeckLog; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.FragmentCardEditTabDetailsBinding; @@ -52,15 +54,17 @@ import it.niedermann.nextcloud.deck.util.DimensionUtil; import it.niedermann.nextcloud.deck.util.MarkDownUtil; import it.niedermann.nextcloud.deck.util.ViewUtil; +import static android.app.DatePickerDialog.OnDateSetListener; import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; +import static it.niedermann.nextcloud.deck.ui.BrandedActivity.applyBrandToEditText; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_ACCOUNT_ID; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_BOARD_ID; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_CAN_EDIT; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_LOCAL_ID; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.NO_LOCAL_ID; -public class CardDetailsFragment extends Fragment implements DatePickerDialog.OnDateSetListener, - TimePickerDialog.OnTimeSetListener { +public class CardDetailsFragment extends Fragment implements Application.Branded, OnDateSetListener, + OnTimeSetListener { private FragmentCardEditTabDetailsBinding binding; @@ -186,7 +190,7 @@ public class CardDetailsFragment extends Fragment implements DatePickerDialog.On private TimePickerDialog createTimePickerDialogFromDate( @NonNull Context context, - @Nullable TimePickerDialog.OnTimeSetListener listener, + @Nullable OnTimeSetListener listener, @Nullable Date date ) { int hourOfDay = 0; @@ -201,7 +205,7 @@ public class CardDetailsFragment extends Fragment implements DatePickerDialog.On private DatePickerDialog createDatePickerDialogFromDate( @NonNull Context context, - @Nullable DatePickerDialog.OnDateSetListener listener, + @Nullable OnDateSetListener listener, @Nullable Date date ) { int year; @@ -429,4 +433,25 @@ public class CardDetailsFragment extends Fragment implements DatePickerDialog.On binding.clearDueDate.setVisibility(View.VISIBLE); } } + + @Override + public void onResume() { + super.onResume(); + Application.registerBrandedComponent(requireContext(), this); + } + + @Override + public void onPause() { + Application.deregisterBrandedComponent(this); + super.onPause(); + } + + @Override + public void applyBrand(int mainColor, int textColor) { + applyBrandToEditText(mainColor, textColor, binding.labels); + applyBrandToEditText(mainColor, textColor, binding.dueDateDate); + applyBrandToEditText(mainColor, textColor, binding.dueDateTime); + applyBrandToEditText(mainColor, textColor, binding.people); + applyBrandToEditText(mainColor, textColor, binding.description); + } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/preparecreate/PrepareCreateActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/preparecreate/PrepareCreateActivity.java index cf442fc6f..941cd0f31 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/preparecreate/PrepareCreateActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/preparecreate/PrepareCreateActivity.java @@ -18,7 +18,7 @@ import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.model.Board; import it.niedermann.nextcloud.deck.model.full.FullStack; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; -import it.niedermann.nextcloud.deck.ui.AbstractThemableActivity; +import it.niedermann.nextcloud.deck.ui.BrandedActivity; import it.niedermann.nextcloud.deck.ui.ImportAccountActivity; import it.niedermann.nextcloud.deck.ui.card.EditActivity; import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler; @@ -30,7 +30,7 @@ import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_LOCAL_ import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.BUNDLE_KEY_STACK_ID; import static it.niedermann.nextcloud.deck.ui.card.CardAdapter.NO_LOCAL_ID; -public class PrepareCreateActivity extends AbstractThemableActivity { +public class PrepareCreateActivity extends BrandedActivity { private ActivityPrepareCreateBinding binding; @@ -188,9 +188,9 @@ public class PrepareCreateActivity extends AbstractThemableActivity { } @Override - public void applyNextcloudTheme(int mainColor, int textColor) { - super.applyNextcloudTheme(mainColor, textColor); - applyNextcloudThemeToToolbar(mainColor, textColor, binding.toolbar); + public void applyBrand(int mainColor, int textColor) { + super.applyBrand(mainColor, textColor); + applyBrandToPrimaryToolbar(mainColor, textColor, binding.toolbar); binding.submit.setBackgroundColor(mainColor); binding.submit.setTextColor(textColor); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsActivity.java index 1a3b03aad..0eaa7f1d4 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/settings/SettingsActivity.java @@ -7,10 +7,10 @@ import androidx.annotation.Nullable; import it.niedermann.nextcloud.deck.Application; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.ActivitySettingsBinding; -import it.niedermann.nextcloud.deck.ui.AbstractThemableActivity; +import it.niedermann.nextcloud.deck.ui.BrandedActivity; import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler; -public class SettingsActivity extends AbstractThemableActivity { +public class SettingsActivity extends BrandedActivity { private ActivitySettingsBinding binding; @@ -39,8 +39,8 @@ public class SettingsActivity extends AbstractThemableActivity { } @Override - public void applyNextcloudTheme(int mainColor, int textColor) { - super.applyNextcloudTheme(mainColor, textColor); - applyNextcloudThemeToToolbar(mainColor, textColor, binding.toolbar); + public void applyBrand(int mainColor, int textColor) { + super.applyBrand(mainColor, textColor); + applyBrandToPrimaryToolbar(mainColor, textColor, binding.toolbar); } } diff --git a/app/src/main/res/layout/activity_edit.xml b/app/src/main/res/layout/activity_edit.xml index 410f98b31..83cd3f21f 100644 --- a/app/src/main/res/layout/activity_edit.xml +++ b/app/src/main/res/layout/activity_edit.xml @@ -19,7 +19,6 @@ <com.google.android.material.textfield.TextInputLayout android:id="@+id/titleTextInputLayout" - style="@style/AppTheme.EditText" android:layout_width="match_parent" android:layout_height="wrap_content" app:theme="@style/AppTheme.EditText" @@ -27,7 +26,6 @@ <EditText android:id="@+id/title" - style="@style/AppTheme.EditText" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="16dp" diff --git a/app/src/main/res/values/customization.xml b/app/src/main/res/values/customization.xml index d6ed6a3b3..769cff1ac 100644 --- a/app/src/main/res/values/customization.xml +++ b/app/src/main/res/values/customization.xml @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> <resources> <!-- Apply the theme of the instance for each account to UI elements --> - <bool name="enable_nextcloud_theme">true</bool> + <bool name="enable_brand">true</bool> <!-- How many avatars should be displayed in the card list view --> <integer name="max_avatar_count">3</integer> <!-- How many users should be suggested when clicking on the assigned users input field --> |