diff --git a/app/src/main/java/it/niedermann/owncloud/notes/FormattingHelpActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/FormattingHelpActivity.java index 1199fb768..15051c302 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/FormattingHelpActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/FormattingHelpActivity.java @@ -232,5 +232,7 @@ public void applyBrand(int color) { final var util = BrandingUtil.of(color, this); util.platform.themeStatusBar(this); util.material.themeToolbar(binding.toolbar); + util.platform.colorViewBackground(getWindow().getDecorView()); + util.platform.colorViewBackground(binding.getRoot()); } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java index 5f5c64f94..735acd4d9 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/about/AboutActivity.java @@ -10,7 +10,6 @@ import android.os.Bundle; -import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; @@ -58,6 +57,8 @@ public void applyBrand(int color) { util.platform.themeStatusBar(this); util.material.themeToolbar(binding.toolbar); util.material.themeTabLayoutOnSurface(binding.tabs); + util.platform.colorViewBackground(getWindow().getDecorView()); + util.platform.colorViewBackground(binding.getRoot()); } private static class TabsStateAdapter extends FragmentStateAdapter { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/branding/NotesViewThemeUtils.java b/app/src/main/java/it/niedermann/owncloud/notes/branding/NotesViewThemeUtils.java index 59c1fde7b..6192101fc 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/branding/NotesViewThemeUtils.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/branding/NotesViewThemeUtils.java @@ -13,7 +13,9 @@ import android.content.res.ColorStateList; import android.graphics.Color; import android.graphics.PorterDuff; +import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.LayerDrawable; +import android.graphics.drawable.StateListDrawable; import android.util.Log; import android.view.View; import android.widget.ImageView; @@ -26,6 +28,7 @@ import androidx.appcompat.widget.SearchView; import androidx.appcompat.widget.Toolbar; import androidx.core.content.ContextCompat; +import androidx.core.content.res.ResourcesCompat; import androidx.core.graphics.drawable.DrawableCompat; import com.google.android.material.appbar.AppBarLayout; @@ -209,4 +212,44 @@ public void themeToolbarSearchView(@NonNull SearchView searchView) { return searchView; }); } + + public void themeInternalLinkIcon(ImageView view) { + withScheme(view, scheme -> { + view + .getBackground() + .setColorFilter(ResourcesCompat.getColor(view.getContext().getResources(), + R.color.nc_grey, + null), + PorterDuff.Mode.SRC_IN); + view + .getDrawable() + .mutate() + .setColorFilter(ResourcesCompat.getColor(view.getContext().getResources(), + R.color.icon_on_nc_grey, + null), + PorterDuff.Mode.SRC_IN); + return view; + }); + } + + public void themeBackgroundItemView(View view) { + withScheme(view, scheme -> { + StateListDrawable res = new StateListDrawable(); + res.addState(new int[]{android.R.attr.state_activated}, new ColorDrawable(dynamicColor.secondaryContainer().getArgb(scheme))); + res.addState(new int[]{}, new ColorDrawable(dynamicColor.surface().getArgb(scheme))); + view.setBackground(res); + return view; + }); + } + + public void themeCard(@NonNull MaterialCardView view) { + withScheme(view, scheme -> { + view.setBackgroundTintList(buildColorStateList( + new Pair<>(android.R.attr.state_activated, dynamicColor.secondaryContainer().getArgb(scheme)), + new Pair<>(-android.R.attr.state_activated, dynamicColor.surface().getArgb(scheme))) + ); + view.setStrokeColor(dynamicColor.outlineVariant().getArgb(scheme)); + return view; + }); + } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java index 2c69fa1ba..728054e2f 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/edit/EditNoteActivity.java @@ -448,5 +448,7 @@ public void applyBrand(int color) { final var util = BrandingUtil.of(color, this); util.platform.themeStatusBar(this); util.material.themeToolbar(binding.toolbar); + util.platform.colorViewBackground(getWindow().getDecorView()); + util.platform.colorViewBackground(binding.getRoot()); } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java index c0b927e7e..83e7201c1 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/MainActivity.java @@ -519,6 +519,7 @@ public void onSelectionChanged() { super.onSelectionChanged(); if (tracker.hasSelection() && mActionMode == null) { mActionMode = startSupportActionMode(new MultiSelectedActionModeCallback(MainActivity.this,MainActivity.this, coordinatorLayout, binding.activityNotesListView.fabCreate, mainViewModel, MainActivity.this, canMoveNoteToAnotherAccounts, tracker, getSupportFragmentManager())); + adapter.setMultiSelect(true); } if (mActionMode != null) { if (tracker.hasSelection()) { @@ -527,6 +528,7 @@ public void onSelectionChanged() { } else { mActionMode.finish(); mActionMode = null; + adapter.setMultiSelect(false); } } } @@ -604,6 +606,9 @@ public void applyBrand(int color) { util.platform.colorNavigationView(binding.navigationView); util.material.themeFAB(activityBinding.fabCreate); util.notes.themeSearchCardView(binding.activityNotesListView.searchBarWrapper); + util.platform.colorViewBackground(getWindow().getDecorView()); + util.platform.colorViewBackground(binding.getRoot()); + util.platform.colorViewBackground(binding.activityNotesListView.activityNotesListView); util.platform.colorTextView(binding.activityNotesListView.searchText, ColorRole.ON_SURFACE_VARIANT); util.notes.themeSearchToolbar(binding.activityNotesListView.searchToolbar); util.notes.themeToolbarSearchView(binding.activityNotesListView.searchView); diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/ItemAdapter.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/ItemAdapter.java index 40d94174f..c7466c312 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/ItemAdapter.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/ItemAdapter.java @@ -8,10 +8,15 @@ import static it.niedermann.owncloud.notes.shared.util.NoteUtil.getFontSizeFromPreferences; +import android.annotation.SuppressLint; import android.content.Context; +import android.os.Handler; +import android.os.Looper; import android.text.TextUtils; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import androidx.annotation.ColorInt; import androidx.annotation.IntRange; @@ -23,11 +28,14 @@ import androidx.recyclerview.selection.SelectionTracker; import androidx.recyclerview.widget.RecyclerView; +import com.nextcloud.android.common.ui.theme.utils.ColorRole; + import java.util.ArrayList; import java.util.List; import it.niedermann.owncloud.notes.R; import it.niedermann.owncloud.notes.branding.Branded; +import it.niedermann.owncloud.notes.branding.BrandingUtil; import it.niedermann.owncloud.notes.databinding.ItemNotesListNoteItemGridBinding; import it.niedermann.owncloud.notes.databinding.ItemNotesListNoteItemGridOnlyTitleBinding; import it.niedermann.owncloud.notes.databinding.ItemNotesListNoteItemWithExcerptBinding; @@ -66,6 +74,8 @@ public class ItemAdapter extends RecyclerView.Adapter i @Nullable private Integer swipedPosition; + private boolean isMultiSelect = false; + public ItemAdapter(@NonNull T context, boolean gridView) { this.noteClickListener = context; this.gridView = gridView; @@ -104,13 +114,19 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int if (gridView) { switch (viewType) { case TYPE_SECTION -> { - return new SectionViewHolder(ItemNotesListSectionItemBinding.inflate(inflater)); + ItemNotesListSectionItemBinding binding = ItemNotesListSectionItemBinding.inflate(inflater); + BrandingUtil.of(color, parent.getContext()).platform.colorTextView(binding.sectionTitle); + return new SectionViewHolder(binding); } case TYPE_NOTE_ONLY_TITLE -> { - return new NoteViewGridHolderOnlyTitle(ItemNotesListNoteItemGridOnlyTitleBinding.inflate(inflater, parent, false), noteClickListener, monospace, fontSize); + ItemNotesListNoteItemGridOnlyTitleBinding binding = ItemNotesListNoteItemGridOnlyTitleBinding.inflate(inflater, parent, false); + BrandingUtil.of(color, parent.getContext()).notes.themeCard(binding.card); + return new NoteViewGridHolderOnlyTitle(binding, noteClickListener, monospace, fontSize); } case TYPE_NOTE_WITH_EXCERPT, TYPE_NOTE_WITHOUT_EXCERPT -> { - return new NoteViewGridHolder(ItemNotesListNoteItemGridBinding.inflate(inflater, parent, false), noteClickListener, monospace, fontSize); + ItemNotesListNoteItemGridBinding binding = ItemNotesListNoteItemGridBinding.inflate(inflater, parent, false); + BrandingUtil.of(color, parent.getContext()).notes.themeCard(binding.card); + return new NoteViewGridHolder(binding, noteClickListener, monospace, fontSize); } default -> { throw new IllegalArgumentException("Not supported viewType: " + viewType); @@ -119,13 +135,19 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int } else { switch (viewType) { case TYPE_SECTION -> { - return new SectionViewHolder(ItemNotesListSectionItemBinding.inflate(inflater)); + ItemNotesListSectionItemBinding binding = ItemNotesListSectionItemBinding.inflate(inflater); + BrandingUtil.of(color, parent.getContext()).platform.colorTextView(binding.sectionTitle); + return new SectionViewHolder(binding); } case TYPE_NOTE_WITH_EXCERPT -> { - return new NoteViewHolderWithExcerpt(ItemNotesListNoteItemWithExcerptBinding.inflate(inflater, parent, false), noteClickListener); + ItemNotesListNoteItemWithExcerptBinding binding = ItemNotesListNoteItemWithExcerptBinding.inflate(inflater, parent, false); + BrandingUtil.of(color, parent.getContext()).notes.themeBackgroundItemView(binding.noteSwipeable); + return new NoteViewHolderWithExcerpt(binding, noteClickListener); } case TYPE_NOTE_ONLY_TITLE, TYPE_NOTE_WITHOUT_EXCERPT -> { - return new NoteViewHolderWithoutExcerpt(ItemNotesListNoteItemWithoutExcerptBinding.inflate(inflater, parent, false), noteClickListener); + ItemNotesListNoteItemWithoutExcerptBinding binding = ItemNotesListNoteItemWithoutExcerptBinding.inflate(inflater, parent, false); + BrandingUtil.of(color, parent.getContext()).notes.themeBackgroundItemView(binding.noteSwipeable); + return new NoteViewHolderWithoutExcerpt(binding, noteClickListener); } default -> { throw new IllegalArgumentException("Not supported viewType: " + viewType); @@ -149,10 +171,18 @@ public void onBindViewHolder(@NonNull final RecyclerView.ViewHolder holder, int switch (getItemViewType(position)) { case TYPE_SECTION -> ((SectionViewHolder) holder).bind((SectionItem) itemList.get(position)); - case TYPE_NOTE_WITH_EXCERPT, - TYPE_NOTE_WITHOUT_EXCERPT, - TYPE_NOTE_ONLY_TITLE -> - ((NoteViewHolder) holder).bind(isSelected, (Note) itemList.get(position), showCategory, color, searchQuery); + case TYPE_NOTE_WITH_EXCERPT, TYPE_NOTE_WITHOUT_EXCERPT, TYPE_NOTE_ONLY_TITLE -> { + holder.itemView.findViewById(R.id.custom_checkbox).setVisibility(tracker != null && tracker.hasSelection() ? View.VISIBLE : View.GONE); + if (isSelected) { + holder.itemView.setBackgroundColor(ContextCompat.getColor(holder.itemView.getContext(), R.color.bg_highlighted)); + ((ImageView) holder.itemView.findViewById(R.id.custom_checkbox)).setImageDrawable(BrandingUtil.getInstance(holder.itemView.getContext()).platform.tintDrawable(holder.itemView.getContext(), R.drawable.ic_checkbox_marked, ColorRole.PRIMARY)); + } else { + holder.itemView.setBackgroundColor(holder.itemView.getContext().getColor(com.nextcloud.android.common.ui.R.color.bg_default)); + ((ImageView) holder.itemView.findViewById(R.id.custom_checkbox)).setImageResource(R.drawable.ic_checkbox_blank_outline); + } + holder.itemView.findViewById(R.id.custom_checkbox).setVisibility(isMultiSelect ? View.VISIBLE : View.GONE); + ((NoteViewHolder) holder).bind(isSelected, (Note) itemList.get(position), showCategory, color, searchQuery); + } } } @@ -160,6 +190,18 @@ public void setTracker(SelectionTracker tracker) { this.tracker = tracker; } + @SuppressLint("NotifyDataSetChanged") + public void setMultiSelect(boolean bool) { + if (isMultiSelect != bool) { + isMultiSelect = bool; + new Handler(Looper.getMainLooper()).post(this::notifyDataSetChanged); + } + } + + public boolean isMultiSelect() { + return this.isMultiSelect; + } + public Item getItem(int notePosition) { return itemList.get(notePosition); } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java index e33d7a5ff..ec2ae21a6 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/main/items/NoteViewHolder.java @@ -45,6 +45,7 @@ public NoteViewHolder(@NonNull View v, @NonNull NoteClickListener noteClickListe @CallSuper public void bind(boolean isSelected, @NonNull Note note, boolean showCategory, @ColorInt int color, @Nullable CharSequence searchQuery) { + itemView.setActivated(isSelected); itemView.setSelected(isSelected); itemView.setOnClickListener((view) -> noteClickListener.onNoteClick(getLayoutPosition(), view)); } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java index 58384a8ce..bca385faf 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/manageaccounts/ManageAccountsActivity.java @@ -228,5 +228,7 @@ public void applyBrand(int color) { final var util = BrandingUtil.of(color, this); util.platform.themeStatusBar(this); util.material.themeToolbar(binding.toolbar); + util.platform.colorViewBackground(getWindow().getDecorView()); + util.platform.colorViewBackground(binding.getRoot()); } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesActivity.java index 6c7d3c90a..a338f280f 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/preferences/PreferencesActivity.java @@ -41,5 +41,7 @@ public void applyBrand(int color) { final var util = BrandingUtil.of(color, this); util.platform.themeStatusBar(this); util.material.themeToolbar(binding.toolbar); + util.platform.colorViewBackground(getWindow().getDecorView()); + util.platform.colorViewBackground(binding.getRoot()); } } diff --git a/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java b/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java index 14206421c..3b8d38394 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareActivity.java @@ -789,6 +789,9 @@ public void applyBrand(int color) { util.platform.themeStatusBar(this); util.androidx.themeToolbarSearchView(binding.searchView); util.platform.themeHorizontalProgressBar(binding.progressBar); + util.platform.colorViewBackground(getWindow().getDecorView()); + util.platform.colorViewBackground(binding.getRoot()); + util.platform.colorTextButtons(binding.btnShareButton); } @Override diff --git a/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareDetailActivity.kt b/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareDetailActivity.kt index 6613acc09..1cf9ec2e9 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareDetailActivity.kt +++ b/app/src/main/java/it/niedermann/owncloud/notes/share/NoteShareDetailActivity.kt @@ -154,6 +154,8 @@ class NoteShareDetailActivity : BrandedActivity(), colorMaterialButtonPrimaryOutlined(shareProcessBtnCancel) } } + util.platform.colorViewBackground(window.decorView) + util.platform.colorViewBackground(binding.getRoot()) } override fun onConfigurationChanged(newConfig: Configuration) { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/QuickSharingPermissionsAdapter.kt b/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/QuickSharingPermissionsAdapter.kt index 6494e510c..062ff37f4 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/QuickSharingPermissionsAdapter.kt +++ b/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/QuickSharingPermissionsAdapter.kt @@ -9,18 +9,30 @@ package it.niedermann.owncloud.notes.share.adapter import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.annotation.ColorInt import androidx.recyclerview.widget.RecyclerView +import com.nextcloud.android.common.ui.theme.utils.ColorRole +import it.niedermann.owncloud.notes.branding.Branded +import it.niedermann.owncloud.notes.branding.BrandingUtil import it.niedermann.owncloud.notes.databinding.ItemQuickSharePermissionsBinding import it.niedermann.owncloud.notes.share.model.QuickPermissionModel class QuickSharingPermissionsAdapter( private val quickPermissionList: MutableList, private val onPermissionChangeListener: QuickSharingPermissionViewHolder.OnPermissionChangeListener, + private var color: Int = 0 ) : - RecyclerView.Adapter() { + RecyclerView.Adapter(), Branded { + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder { val binding = ItemQuickSharePermissionsBinding.inflate(LayoutInflater.from(parent.context), parent, false) - return QuickSharingPermissionViewHolder(binding, binding.root, onPermissionChangeListener) + BrandingUtil.of(color, parent.context).platform.colorImageView(binding.tvQuickShareCheckIcon, ColorRole.PRIMARY) + return QuickSharingPermissionViewHolder( + binding, + binding.root, + onPermissionChangeListener, + BrandingUtil.of(color, binding.root.context) + ) } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { @@ -33,10 +45,16 @@ class QuickSharingPermissionsAdapter( return quickPermissionList.size } + override fun applyBrand(color: Int) { + this.color = color + notifyDataSetChanged() + } + class QuickSharingPermissionViewHolder( val binding: ItemQuickSharePermissionsBinding, itemView: View, val onPermissionChangeListener: OnPermissionChangeListener, + val util: BrandingUtil, ) : RecyclerView .ViewHolder(itemView) { @@ -44,7 +62,6 @@ class QuickSharingPermissionsAdapter( fun bindData(quickPermissionModel: QuickPermissionModel) { binding.tvQuickShareName.text = quickPermissionModel.permissionName if (quickPermissionModel.isSelected) { - // viewThemeUtils.platform.colorImageView(binding.tvQuickShareCheckIcon) binding.tvQuickShareCheckIcon.visibility = View.VISIBLE } else { binding.tvQuickShareCheckIcon.visibility = View.INVISIBLE diff --git a/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/ShareeListAdapter.java b/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/ShareeListAdapter.java index cb86e1041..a22bce23c 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/ShareeListAdapter.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/ShareeListAdapter.java @@ -11,7 +11,9 @@ import android.view.LayoutInflater; import android.view.ViewGroup; +import androidx.annotation.ColorInt; import androidx.annotation.NonNull; +import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.RecyclerView; import com.owncloud.android.lib.resources.shares.OCShare; @@ -22,6 +24,8 @@ import java.util.List; import java.util.Set; +import it.niedermann.owncloud.notes.R; +import it.niedermann.owncloud.notes.branding.BrandingUtil; import it.niedermann.owncloud.notes.databinding.ItemAddPublicShareBinding; import it.niedermann.owncloud.notes.databinding.ItemInternalShareLinkBinding; import it.niedermann.owncloud.notes.databinding.ItemShareLinkShareBinding; @@ -43,6 +47,9 @@ public class ShareeListAdapter extends RecyclerView.Adapter shares; + @ColorInt + private int color; + public ShareeListAdapter(Activity activity, List shares, ShareeListAdapterListener listener, @@ -51,6 +58,7 @@ public ShareeListAdapter(Activity activity, this.shares = shares; this.listener = listener; this.account = account; + this.color = ContextCompat.getColor(activity, R.color.defaultBrand); sortShares(); setHasStableIds(true); @@ -91,16 +99,14 @@ public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int activity); } case NEW_PUBLIC_LINK -> { - return new NewLinkShareViewHolder( - ItemAddPublicShareBinding.inflate(LayoutInflater.from(activity), - parent, - false) - ); + ItemAddPublicShareBinding binding = ItemAddPublicShareBinding.inflate(LayoutInflater.from(activity), parent, false); + BrandingUtil.of(color, parent.getContext()).notes.themeInternalLinkIcon(binding.addNewPublicShareLinkIcon); + return new NewLinkShareViewHolder(binding); } case INTERNAL -> { - return new InternalShareViewHolder( - ItemInternalShareLinkBinding.inflate(LayoutInflater.from(activity), parent, false), - activity); + ItemInternalShareLinkBinding binding = ItemInternalShareLinkBinding.inflate(LayoutInflater.from(activity), parent, false); + BrandingUtil.of(color, parent.getContext()).notes.themeInternalLinkIcon(binding.copyInternalLinkIcon); + return new InternalShareViewHolder(binding, activity); } default -> { return new ShareViewHolder(ItemShareShareBinding.inflate(LayoutInflater.from(activity), diff --git a/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/holder/InternalShareViewHolder.java b/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/holder/InternalShareViewHolder.java index 7f622bad3..f81984d4c 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/holder/InternalShareViewHolder.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/share/adapter/holder/InternalShareViewHolder.java @@ -35,20 +35,6 @@ public InternalShareViewHolder(ItemInternalShareLinkBinding binding, Context con } public void bind(OCShare share, ShareeListAdapterListener listener) { - binding.copyInternalLinkIcon - .getBackground() - .setColorFilter(ResourcesCompat.getColor(context.getResources(), - R.color.widget_foreground, - null), - PorterDuff.Mode.SRC_IN); - binding.copyInternalLinkIcon - .getDrawable() - .mutate() - .setColorFilter(ResourcesCompat.getColor(context.getResources(), - R.color.fg_contrast, - null), - PorterDuff.Mode.SRC_IN); - if (share.isFolder()) { binding.shareInternalLinkText.setText(context.getString(R.string.share_internal_link_to_folder_text)); } else { diff --git a/app/src/main/java/it/niedermann/owncloud/notes/share/dialog/QuickSharingPermissionsBottomSheetDialog.java b/app/src/main/java/it/niedermann/owncloud/notes/share/dialog/QuickSharingPermissionsBottomSheetDialog.java index 45ac60eb4..b39c95401 100644 --- a/app/src/main/java/it/niedermann/owncloud/notes/share/dialog/QuickSharingPermissionsBottomSheetDialog.java +++ b/app/src/main/java/it/niedermann/owncloud/notes/share/dialog/QuickSharingPermissionsBottomSheetDialog.java @@ -19,13 +19,14 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.google.android.material.bottomsheet.BottomSheetBehavior; -import com.google.android.material.bottomsheet.BottomSheetDialog; import com.owncloud.android.lib.resources.shares.OCShare; import java.util.ArrayList; import java.util.List; import it.niedermann.owncloud.notes.R; +import it.niedermann.owncloud.notes.branding.BrandedBottomSheetDialog; +import it.niedermann.owncloud.notes.branding.BrandingUtil; import it.niedermann.owncloud.notes.databinding.QuickSharingPermissionsBottomSheetFragmentBinding; import it.niedermann.owncloud.notes.share.adapter.QuickSharingPermissionsAdapter; import it.niedermann.owncloud.notes.share.helper.SharingMenuHelper; @@ -34,12 +35,16 @@ /** * File Details Quick Sharing permissions options {@link android.app.Dialog} styled as a bottom sheet for main actions. */ -public class QuickSharingPermissionsBottomSheetDialog extends BottomSheetDialog { +public class QuickSharingPermissionsBottomSheetDialog extends BrandedBottomSheetDialog { private QuickSharingPermissionsBottomSheetFragmentBinding binding; private final QuickPermissionSharingBottomSheetActions actions; private final Activity activity; private final OCShare ocShare; + private QuickSharingPermissionsAdapter adapter; + + private int color = 0; + public QuickSharingPermissionsBottomSheetDialog(Activity activity, QuickPermissionSharingBottomSheetActions actions, OCShare ocShare) { @@ -59,8 +64,6 @@ protected void onCreate(Bundle savedInstanceState) { getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); } - // viewThemeUtils.platform.themeDialog(binding.getRoot()); - setUpRecyclerView(); setOnShowListener(d -> BottomSheetBehavior.from((View) binding.getRoot().getParent()) @@ -70,7 +73,7 @@ protected void onCreate(Bundle savedInstanceState) { private void setUpRecyclerView() { List quickPermissionModelList = getQuickPermissionList(); - QuickSharingPermissionsAdapter adapter = new QuickSharingPermissionsAdapter( + adapter = new QuickSharingPermissionsAdapter( quickPermissionModelList, new QuickSharingPermissionsAdapter.QuickSharingPermissionViewHolder.OnPermissionChangeListener() { @Override @@ -82,9 +85,11 @@ public void onPermissionChanged(int position) { public void onDismissSheet() { dismiss(); } - } + }, + color ); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(activity); + adapter.applyBrand(color); binding.rvQuickSharePermissions.setLayoutManager(linearLayoutManager); binding.rvQuickSharePermissions.setAdapter(adapter); } @@ -145,6 +150,16 @@ protected void onStop() { binding = null; } + @Override + public void applyBrand(int color) { + this.color = color; + final var util = BrandingUtil.of(color, getContext()); + if (adapter != null) { + adapter.applyBrand(color); + } + util.platform.themeDialog(binding.getRoot()); + } + public interface QuickPermissionSharingBottomSheetActions { void onQuickPermissionChanged(OCShare share, int permission); } diff --git a/app/src/main/res/drawable/ic_checkbox_blank_outline.xml b/app/src/main/res/drawable/ic_checkbox_blank_outline.xml new file mode 100644 index 000000000..3cf041aea --- /dev/null +++ b/app/src/main/res/drawable/ic_checkbox_blank_outline.xml @@ -0,0 +1,16 @@ + + + + diff --git a/app/src/main/res/drawable/ic_checkbox_marked.xml b/app/src/main/res/drawable/ic_checkbox_marked.xml new file mode 100644 index 000000000..457547b74 --- /dev/null +++ b/app/src/main/res/drawable/ic_checkbox_marked.xml @@ -0,0 +1,16 @@ + + + + diff --git a/app/src/main/res/drawable/ic_delete_white_24dp.xml b/app/src/main/res/drawable/ic_delete_white_24dp.xml new file mode 100644 index 000000000..366df08c2 --- /dev/null +++ b/app/src/main/res/drawable/ic_delete_white_24dp.xml @@ -0,0 +1,16 @@ + + + + diff --git a/app/src/main/res/layout/activity_note_share.xml b/app/src/main/res/layout/activity_note_share.xml index 7dfba89fe..3327e438f 100644 --- a/app/src/main/res/layout/activity_note_share.xml +++ b/app/src/main/res/layout/activity_note_share.xml @@ -93,7 +93,7 @@ android:id="@+id/btnShareButton" android:layout_width="match_parent" android:layout_height="wrap_content" - style="@style/Widget.MaterialComponents.Button.Icon" + style="@style/Widget.Material3.Button.TextButton" android:paddingStart="@dimen/spacer_3x" android:paddingEnd="@dimen/zero" android:text="@string/note_share_activity_share_note" diff --git a/app/src/main/res/layout/item_add_public_share.xml b/app/src/main/res/layout/item_add_public_share.xml index 41924a139..13434b0b3 100644 --- a/app/src/main/res/layout/item_add_public_share.xml +++ b/app/src/main/res/layout/item_add_public_share.xml @@ -12,6 +12,7 @@ android:orientation="horizontal"> - + android:paddingEnd="@dimen/spacer_2x" + android:paddingBottom="@dimen/spacer_1x"> diff --git a/app/src/main/res/layout/item_note_share_action.xml b/app/src/main/res/layout/item_note_share_action.xml index 0de68eecd..b222c2653 100644 --- a/app/src/main/res/layout/item_note_share_action.xml +++ b/app/src/main/res/layout/item_note_share_action.xml @@ -13,9 +13,12 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:paddingTop="@dimen/dialog_padding" android:background="@color/bg_default"> + + + app:cardCornerRadius="@dimen/card_radius"> @@ -107,6 +105,18 @@ tools:maxLength="50" tools:text="@tools:sample/lorem/random" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_notes_list_note_item_grid_only_title.xml b/app/src/main/res/layout/item_notes_list_note_item_grid_only_title.xml index f5be7f268..0385484c8 100644 --- a/app/src/main/res/layout/item_notes_list_note_item_grid_only_title.xml +++ b/app/src/main/res/layout/item_notes_list_note_item_grid_only_title.xml @@ -12,14 +12,12 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:focusable="true" - app:cardBackgroundColor="@color/appbar" - app:cardCornerRadius="@dimen/spacer_1x"> + app:cardCornerRadius="@dimen/card_radius"> @@ -62,5 +60,17 @@ android:textColor="@color/fg_default" tools:maxLength="50" tools:text="@tools:sample/lorem/random" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_notes_list_note_item_with_excerpt.xml b/app/src/main/res/layout/item_notes_list_note_item_with_excerpt.xml index 8b23252df..1d1d17b7f 100644 --- a/app/src/main/res/layout/item_notes_list_note_item_with_excerpt.xml +++ b/app/src/main/res/layout/item_notes_list_note_item_with_excerpt.xml @@ -9,14 +9,16 @@ xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/noteSwipeFrame" + android:clickable="true" + android:focusable="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/bg_attention"> + app:srcCompat="@drawable/ic_delete_white_24dp" /> + + diff --git a/app/src/main/res/layout/item_notes_list_note_item_without_excerpt.xml b/app/src/main/res/layout/item_notes_list_note_item_without_excerpt.xml index 7848d554d..2eed4a816 100644 --- a/app/src/main/res/layout/item_notes_list_note_item_without_excerpt.xml +++ b/app/src/main/res/layout/item_notes_list_note_item_without_excerpt.xml @@ -15,8 +15,8 @@ + app:srcCompat="@drawable/ic_delete_white_24dp" /> + + diff --git a/app/src/main/res/layout/item_notes_list_section_item.xml b/app/src/main/res/layout/item_notes_list_section_item.xml index 0598428bf..c2a434886 100644 --- a/app/src/main/res/layout/item_notes_list_section_item.xml +++ b/app/src/main/res/layout/item_notes_list_section_item.xml @@ -18,4 +18,5 @@ android:hint="@string/listview_updated_yesterday" android:padding="@dimen/spacer_1x" android:textColor="@color/fg_default_selection" + android:textStyle="bold" android:textSize="@dimen/secondary_font_size" /> \ No newline at end of file diff --git a/app/src/main/res/layout/quick_sharing_permissions_bottom_sheet_fragment.xml b/app/src/main/res/layout/quick_sharing_permissions_bottom_sheet_fragment.xml index 0c1d00aa6..c6aac8ba8 100644 --- a/app/src/main/res/layout/quick_sharing_permissions_bottom_sheet_fragment.xml +++ b/app/src/main/res/layout/quick_sharing_permissions_bottom_sheet_fragment.xml @@ -9,14 +9,17 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingTop="@dimen/spacer_2x" - android:paddingBottom="@dimen/spacer_2x" - android:orientation="vertical"> + android:orientation="vertical" + android:paddingBottom="@dimen/spacer_2x"> + + + android:layout_height="wrap_content" + tools:listitem="@layout/item_quick_share_permissions" /> diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 707ba348e..34d35a722 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -38,4 +38,6 @@ #222222 #ffffff + + #1E1E1E \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 1a688fe65..c0c740047 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -47,4 +47,6 @@ #ddffffff #222222 + + #ededed diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index c2c7d4080..92a573397 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -36,6 +36,8 @@ 0dp + 12dp + 40dp diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 6720f1725..b84323cdc 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -13,7 +13,6 @@ @color/primary ?android:colorPrimary @color/accent - @color/bg_default @bool/isDayMode ?attr/colorAccent @@ -72,6 +71,7 @@