From 8c2decf6f39d1fc0f760244e38398c4ac559b76d Mon Sep 17 00:00:00 2001 From: tobiasKaminsky Date: Tue, 8 Sep 2026 12:51:44 +0200 Subject: [PATCH] fix(tags): apply server theme colors to manage tags UI The manage tags edit chip icon was hardcoded black, making it invisible in dark mode, and the bottom sheet's search field, loading indicator, and checkboxes ignored the server's accent color, always rendering in Material's default blue. Closes #17579 Assisted-by: ClaudeCode:claude-sonnet-5 Signed-off-by: tobiasKaminsky --- .../com/nextcloud/ui/tags/TagManagementBottomSheet.kt | 3 +++ .../com/nextcloud/ui/tags/adapter/TagListAdapter.kt | 10 +++++++--- .../ui/tags/adapter/viewholder/TagViewHolder.kt | 9 +++++++-- .../android/ui/fragment/FileDetailFragment.java | 1 + 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/nextcloud/ui/tags/TagManagementBottomSheet.kt b/app/src/main/java/com/nextcloud/ui/tags/TagManagementBottomSheet.kt index 82aaa1e89b78..18bab86228ee 100644 --- a/app/src/main/java/com/nextcloud/ui/tags/TagManagementBottomSheet.kt +++ b/app/src/main/java/com/nextcloud/ui/tags/TagManagementBottomSheet.kt @@ -57,6 +57,8 @@ class TagManagementBottomSheet : bottomSheetDialog.behavior.skipCollapsed = true viewThemeUtils.platform.colorViewBackground(binding.bottomSheet, ColorRole.SURFACE) + viewThemeUtils.material.colorTextInputLayout(binding.searchInputLayout) + viewThemeUtils.material.colorProgressBar(binding.loadingIndicator) setupAdapter() setupSearch() @@ -71,6 +73,7 @@ class TagManagementBottomSheet : private fun setupAdapter() { tagAdapter = TagListAdapter( + viewThemeUtils = viewThemeUtils, onTagChecked = { tag, isChecked -> if (isChecked) { viewModel.assignTag(tag) diff --git a/app/src/main/java/com/nextcloud/ui/tags/adapter/TagListAdapter.kt b/app/src/main/java/com/nextcloud/ui/tags/adapter/TagListAdapter.kt index 23e276ff034f..9307ed919a92 100644 --- a/app/src/main/java/com/nextcloud/ui/tags/adapter/TagListAdapter.kt +++ b/app/src/main/java/com/nextcloud/ui/tags/adapter/TagListAdapter.kt @@ -14,9 +14,13 @@ import com.nextcloud.ui.tags.adapter.viewholder.CreateTagViewHolder import com.nextcloud.ui.tags.adapter.viewholder.TagViewHolder import com.owncloud.android.R import com.owncloud.android.lib.resources.tags.Tag +import com.owncloud.android.utils.theme.ViewThemeUtils -class TagListAdapter(private val onTagChecked: (Tag, Boolean) -> Unit, private val onCreateTag: (String) -> Unit) : - RecyclerView.Adapter() { +class TagListAdapter( + private val viewThemeUtils: ViewThemeUtils, + private val onTagChecked: (Tag, Boolean) -> Unit, + private val onCreateTag: (String) -> Unit +) : RecyclerView.Adapter() { private var tags: List = emptyList() private var assignedTagIds: Set = emptySet() @@ -56,7 +60,7 @@ class TagListAdapter(private val onTagChecked: (Tag, Boolean) -> Unit, private v CreateTagViewHolder(view, onCreateTag) } else { val view = inflater.inflate(R.layout.tag_list_item, parent, false) - TagViewHolder(view, onTagChecked) + TagViewHolder(view, viewThemeUtils, onTagChecked) } } diff --git a/app/src/main/java/com/nextcloud/ui/tags/adapter/viewholder/TagViewHolder.kt b/app/src/main/java/com/nextcloud/ui/tags/adapter/viewholder/TagViewHolder.kt index 6f61f65ac5e0..f214799e61d2 100644 --- a/app/src/main/java/com/nextcloud/ui/tags/adapter/viewholder/TagViewHolder.kt +++ b/app/src/main/java/com/nextcloud/ui/tags/adapter/viewholder/TagViewHolder.kt @@ -14,15 +14,20 @@ import androidx.core.graphics.toColorInt import androidx.recyclerview.widget.RecyclerView import com.owncloud.android.R import com.owncloud.android.lib.resources.tags.Tag +import com.owncloud.android.utils.theme.ViewThemeUtils -class TagViewHolder(itemView: View, private val onTagChecked: (Tag, Boolean) -> Unit) : - RecyclerView.ViewHolder(itemView) { +class TagViewHolder( + itemView: View, + private val viewThemeUtils: ViewThemeUtils, + private val onTagChecked: (Tag, Boolean) -> Unit +) : RecyclerView.ViewHolder(itemView) { private val colorDot: View = itemView.findViewById(R.id.tag_color_dot) private val tagName: TextView = itemView.findViewById(R.id.tag_name) private val checkBox: CheckBox = itemView.findViewById(R.id.tag_checkbox) fun bind(tag: Tag, isAssigned: Boolean) { tagName.text = tag.name + viewThemeUtils.platform.themeCheckbox(checkBox) val tagColor = tag.color if (tagColor != null) { diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java index 344958fbf8d0..8479058c0fe6 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -330,6 +330,7 @@ private void refreshTagChips(Context context) { .build()); editChip.setEnsureMinTouchTargetSize(false); viewThemeUtils.material.themeChipSuggestion(editChip); + editChip.setChipIconTint(editChip.getTextColors()); editChip.setOnClickListener(v -> { TagManagementBottomSheet bottomSheet = TagManagementBottomSheet.Companion.newInstance( getFile().getLocalId(),