diff --git a/app/src/main/java/com/nextcloud/talk/adapters/items/GenericTextHeaderItem.java b/app/src/main/java/com/nextcloud/talk/adapters/items/GenericTextHeaderItem.java index 017a0e926..657a605b7 100644 --- a/app/src/main/java/com/nextcloud/talk/adapters/items/GenericTextHeaderItem.java +++ b/app/src/main/java/com/nextcloud/talk/adapters/items/GenericTextHeaderItem.java @@ -74,7 +74,7 @@ public class GenericTextHeaderItem extends AbstractHeaderItem { - binding.onlineStatus.setCardBackgroundColor(resources.getColor(R.color.colorPrimary)) - binding.onlineHeadline.setTextColor(resources.getColor(R.color.high_emphasis_text_dark_background)) + val views: Triple = when (statusType) { + StatusType.ONLINE -> Triple(binding.onlineStatus, binding.onlineHeadline, binding.onlineIcon) + StatusType.AWAY -> Triple(binding.awayStatus, binding.awayHeadline, binding.awayIcon) + StatusType.DND -> Triple(binding.dndStatus, binding.dndHeadline, binding.dndIcon) + StatusType.INVISIBLE -> Triple(binding.invisibleStatus, binding.invisibleHeadline, binding.invisibleIcon) + else -> { + Log.d(TAG, "unknown status") + return } - StatusType.AWAY -> { - binding.awayStatus.setCardBackgroundColor(resources.getColor(R.color.colorPrimary)) - binding.awayHeadline.setTextColor(resources.getColor(R.color.high_emphasis_text_dark_background)) - } - StatusType.DND -> { - binding.dndStatus.setCardBackgroundColor(resources.getColor(R.color.colorPrimary)) - binding.dndHeadline.setTextColor(resources.getColor(R.color.high_emphasis_text_dark_background)) - } - StatusType.INVISIBLE -> { - binding.invisibleStatus.setCardBackgroundColor(resources.getColor(R.color.colorPrimary)) - binding.invisibleHeadline.setTextColor(resources.getColor(R.color.high_emphasis_text_dark_background)) - } - else -> Log.d(TAG, "unknown status") } + viewThemeUtils.colorCardViewBackground(views.first) + viewThemeUtils.colorTextViewText(views.second) + viewThemeUtils.colorImageViewText(views.third) } private fun clearTopStatus() { @@ -433,11 +432,15 @@ class SetStatusDialogFragment : binding.awayHeadline.setTextColor(resources.getColor(R.color.high_emphasis_text)) binding.dndHeadline.setTextColor(resources.getColor(R.color.high_emphasis_text)) binding.invisibleHeadline.setTextColor(resources.getColor(R.color.high_emphasis_text)) + + binding.onlineIcon.imageTintList = null + binding.awayIcon.imageTintList = null + binding.dndIcon.imageTintList = null + binding.invisibleIcon.imageTintList = null } } private fun setStatusMessage() { - val inputText = binding.customStatusInput.text.toString().ifEmpty { "" } // The endpoint '/message/custom' expects a valid emoji as string or null val statusIcon = binding.emoji.text.toString().ifEmpty { null } @@ -446,7 +449,6 @@ class SetStatusDialogFragment : selectedPredefinedStatus!!.message != inputText || selectedPredefinedStatus!!.icon != binding.emoji.text.toString() ) { - ncApi.setCustomStatusMessage( credentials, ApiUtils.getUrlForSetCustomStatus(currentUser?.baseUrl), @@ -476,12 +478,13 @@ class SetStatusDialogFragment : } }) } else { - val clearAt = clearAtToUnixTime(selectedPredefinedStatus!!.clearAt) ncApi.setPredefinedStatusMessage( - credentials, ApiUtils.getUrlForSetPredefinedStatus(currentUser?.baseUrl), - selectedPredefinedStatus!!.id, if (clearAt == -1L) null else clearAt + credentials, + ApiUtils.getUrlForSetPredefinedStatus(currentUser?.baseUrl), + selectedPredefinedStatus!!.id, + if (clearAt == -1L) null else clearAt ) .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread())?.subscribe(object : Observer { @@ -506,7 +509,6 @@ class SetStatusDialogFragment : } override fun onClick(predefinedStatus: PredefinedStatus) { - selectedPredefinedStatus = predefinedStatus clearAt = clearAtToUnixTime(predefinedStatus.clearAt) diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeProviderImpl.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeProviderImpl.kt index b4a4df43f..87cdcee6b 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeProviderImpl.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/ServerThemeProviderImpl.kt @@ -29,6 +29,7 @@ import com.nextcloud.talk.utils.database.user.CurrentUserProviderNew import javax.inject.Inject // TODO cache theme, keyed by server url +// TODO reload UI when account changes internal class ServerThemeProviderImpl @Inject constructor( private val context: Context, private val userProvider: CurrentUserProviderNew diff --git a/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt b/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt index 7dcb23c6b..99373ba76 100644 --- a/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt +++ b/app/src/main/java/com/nextcloud/talk/ui/theme/ViewThemeUtils.kt @@ -24,8 +24,11 @@ package com.nextcloud.talk.ui.theme import android.content.Context import android.content.res.ColorStateList import android.content.res.Configuration +import android.view.View import android.widget.ImageView import android.widget.TextView +import com.google.android.material.button.MaterialButton +import com.google.android.material.card.MaterialCardView import com.google.android.material.floatingactionbutton.FloatingActionButton import javax.inject.Inject @@ -47,20 +50,67 @@ class ViewThemeUtils @Inject constructor(val theme: ServerTheme) { else -> theme.colorElementBright } - fun themeFAB(fab: FloatingActionButton) { - fab.backgroundTintList = ColorStateList.valueOf(getElementColor(fab.context)) - fab.imageTintList = ColorStateList.valueOf(theme.colorText) + private fun withElementColor(view: View, block: (Int) -> Unit) { + block(getElementColor(view.context)) } - fun colorTextView(textView: TextView) { - textView.setTextColor(getElementColor(textView.context)) + fun themeFAB(fab: FloatingActionButton) { + withElementColor(fab) { color -> + fab.backgroundTintList = ColorStateList.valueOf(color) + fab.imageTintList = ColorStateList.valueOf(theme.colorText) + } + } + + fun colorTextViewElement(textView: TextView) { + withElementColor(textView) { color -> + textView.setTextColor(color) + } + } + + fun colorTextViewText(textView: TextView) { + textView.setTextColor(theme.colorText) } /** * Colors the background as element color and the foreground as text color. */ fun colorImageViewButton(imageView: ImageView) { + withElementColor(imageView) { color -> + imageView.imageTintList = ColorStateList.valueOf(theme.colorText) + imageView.backgroundTintList = ColorStateList.valueOf(color) + } + } + + /** + * Tints the image with element color + */ + fun colorImageView(imageView: ImageView) { + withElementColor(imageView) { color -> + imageView.imageTintList = ColorStateList.valueOf(color) + } + } + + /** + * Tints the image with text color + */ + fun colorImageViewText(imageView: ImageView) { imageView.imageTintList = ColorStateList.valueOf(theme.colorText) - imageView.backgroundTintList = ColorStateList.valueOf(getElementColor(imageView.context)) + } + + fun colorMaterialButtonText(button: MaterialButton) { + colorTextViewElement(button) + } + + fun colorMaterialButtonBackground(button: MaterialButton) { + withElementColor(button) { color -> + button.setBackgroundColor(color) + button.setTextColor(theme.colorText) + } + } + + fun colorCardViewBackground(card: MaterialCardView) { + withElementColor(card) { color -> + card.setCardBackgroundColor(color) + } } } diff --git a/app/src/main/res/layout/current_account_item.xml b/app/src/main/res/layout/current_account_item.xml index 680fb3a36..d1972e62a 100644 --- a/app/src/main/res/layout/current_account_item.xml +++ b/app/src/main/res/layout/current_account_item.xml @@ -31,6 +31,7 @@ app:cardElevation="0dp">