diff options
author | Niedermann IT-Dienstleistungen <stefan-niedermann@users.noreply.github.com> | 2023-02-12 00:34:16 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-02-12 00:34:16 +0300 |
commit | 23a8635d0a76edeeb2aa02eff296590b7695e80c (patch) | |
tree | b3ad6fd319782ebb5e590f2f5a53e2e24e9d7b3f /app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details | |
parent | a70b7edcba351e45f97e26f840a1744fb64fb2d8 (diff) |
feat(theming): Integrate android-common Nextcloud library for unified M3 theming (#1431)
* refactor(branding): Use android-common to apply branding
* refactor(branding): Rename BrandingUtil to ViewThemeUtils
* refactor(branding): Move DeckViewThemeUtils to own class
* refactor(branding): Apply theming to NavigationView
* refactor(branding): Roll out android-common based theming
* refactor(branding): Change terminology from "branding" to "theming"
* refactor(branding): Get rid of DeckColorUtil
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details')
-rw-r--r-- | app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java | 53 |
1 files changed, 30 insertions, 23 deletions
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 1a56a195f..4eec53ece 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 @@ -3,7 +3,6 @@ package it.niedermann.nextcloud.deck.ui.card.details; import static android.view.View.GONE; import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditTextInputLayout; import android.content.res.ColorStateList; import android.graphics.drawable.Drawable; @@ -39,6 +38,7 @@ import java.time.ZoneId; import java.time.ZonedDateTime; import java.time.format.DateTimeFormatter; import java.time.format.FormatStyle; +import java.util.stream.Stream; import it.niedermann.android.markdown.MarkdownEditor; import it.niedermann.android.util.ColorUtil; @@ -50,15 +50,16 @@ import it.niedermann.nextcloud.deck.databinding.FragmentCardEditTabDetailsBindin 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.BrandedSnackbar; -import it.niedermann.nextcloud.deck.ui.branding.BrandedTimePickerDialog; import it.niedermann.nextcloud.deck.ui.card.EditCardViewModel; import it.niedermann.nextcloud.deck.ui.card.LabelAutoCompleteAdapter; import it.niedermann.nextcloud.deck.ui.card.UserAutoCompleteAdapter; import it.niedermann.nextcloud.deck.ui.card.assignee.CardAssigneeDialog; import it.niedermann.nextcloud.deck.ui.card.assignee.CardAssigneeListener; import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment; +import it.niedermann.nextcloud.deck.ui.theme.ThemeUtils; +import it.niedermann.nextcloud.deck.ui.theme.ThemedDatePickerDialog; +import it.niedermann.nextcloud.deck.ui.theme.ThemedSnackbar; +import it.niedermann.nextcloud.deck.ui.theme.ThemedTimePickerDialog; public class CardDetailsFragment extends Fragment implements OnDateSetListener, OnTimeSetListener, CardAssigneeListener { @@ -102,7 +103,7 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); - viewModel.getBrandingColor().observe(getViewLifecycleOwner(), this::applyBrand); + viewModel.getBoardColor().observe(getViewLifecycleOwner(), this::applyTheme); } @Override @@ -110,8 +111,8 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, super.onResume(); // https://github.com/wdullaer/MaterialDateTimePicker#why-are-my-callbacks-lost-when-the-device-changes-orientation - final var dpd = (DatePickerDialog) getChildFragmentManager().findFragmentByTag(BrandedDatePickerDialog.class.getCanonicalName()); - final var tpd = (TimePickerDialog) getChildFragmentManager().findFragmentByTag(BrandedTimePickerDialog.class.getCanonicalName()); + final var dpd = (DatePickerDialog) getChildFragmentManager().findFragmentByTag(ThemedDatePickerDialog.class.getCanonicalName()); + final var tpd = (TimePickerDialog) getChildFragmentManager().findFragmentByTag(ThemedTimePickerDialog.class.getCanonicalName()); if (tpd != null) tpd.setOnTimeSetListener(this); if (dpd != null) dpd.setOnDateSetListener(this); } @@ -122,15 +123,21 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, this.binding = null; } - private void applyBrand(@ColorInt int boardColor) { + private void applyTheme(@ColorInt int color) { + final var utils = ThemeUtils.of(color, requireContext()); + + Stream.of( + binding.labelsWrapper, + binding.dueDateDateWrapper, + binding.dueDateTimeWrapper, + binding.peopleWrapper, + binding.descriptionEditorWrapper + ).forEach(utils.material::colorTextInputLayout); + + binding.descriptionEditor.setSearchColor(color); + binding.descriptionViewer.setSearchColor(color); + // TODO apply correct branding on the BrandedDatePicker - applyBrandToEditTextInputLayout(boardColor, binding.labelsWrapper); - applyBrandToEditTextInputLayout(boardColor, binding.dueDateDateWrapper); - applyBrandToEditTextInputLayout(boardColor, binding.dueDateTimeWrapper); - applyBrandToEditTextInputLayout(boardColor, binding.peopleWrapper); - applyBrandToEditTextInputLayout(boardColor, binding.descriptionEditorWrapper); - binding.descriptionEditor.setSearchColor(boardColor); - binding.descriptionViewer.setSearchColor(boardColor); } private void setupDescription() { @@ -191,8 +198,8 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, } else { date = LocalDate.now(); } - BrandedDatePickerDialog.newInstance(this, date.getYear(), date.getMonthValue(), date.getDayOfMonth()) - .show(getChildFragmentManager(), BrandedDatePickerDialog.class.getCanonicalName()); + ThemedDatePickerDialog.newInstance(this, date.getYear(), date.getMonthValue(), date.getDayOfMonth()) + .show(getChildFragmentManager(), ThemedDatePickerDialog.class.getCanonicalName()); }); binding.dueDateTime.setOnClickListener(v -> { @@ -202,8 +209,8 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, } else { time = LocalTime.now(); } - BrandedTimePickerDialog.newInstance(this, time.getHour(), time.getMinute(), true) - .show(getChildFragmentManager(), BrandedTimePickerDialog.class.getCanonicalName()); + ThemedTimePickerDialog.newInstance(this, time.getHour(), time.getMinute(), true) + .show(getChildFragmentManager(), ThemedTimePickerDialog.class.getCanonicalName()); }); binding.clearDueDate.setOnClickListener(v -> { @@ -249,7 +256,7 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, @Override public void onError(Throwable throwable) { IResponseCallback.super.onError(throwable); - requireActivity().runOnUiThread(() -> BrandedSnackbar.make(requireView(), getString(R.string.error_create_label, newLabel.getTitle()), Snackbar.LENGTH_LONG) + requireActivity().runOnUiThread(() -> ThemedSnackbar.make(requireView(), getString(R.string.error_create_label, newLabel.getTitle()), Snackbar.LENGTH_LONG) .setAction(R.string.simple_more, v -> ExceptionDialogFragment.newInstance(throwable, viewModel.getAccount()).show(getChildFragmentManager(), ExceptionDialogFragment.class.getSimpleName())).show()); } }); @@ -401,9 +408,9 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, viewModel.getFullCard().getAssignedUsers().remove(user); adapter.removeUser(user); ((UserAutoCompleteAdapter) binding.people.getAdapter()).include(user); - BrandedSnackbar.make( - requireView(), getString(R.string.unassigned_user, user.getDisplayname()), - Snackbar.LENGTH_LONG) + ThemedSnackbar.make( + requireView(), getString(R.string.unassigned_user, user.getDisplayname()), + Snackbar.LENGTH_LONG) .setAction(R.string.simple_undo, v1 -> { viewModel.getFullCard().getAssignedUsers().add(user); ((UserAutoCompleteAdapter) binding.people.getAdapter()).exclude(user); |