99
1010package com.nextcloud.ui
1111
12- import android.annotation.SuppressLint
1312import android.os.Bundle
1413import android.util.Log
1514import android.view.LayoutInflater
1615import android.view.View
1716import android.view.ViewGroup
1817import android.widget.ImageView
1918import android.widget.TextView
19+ import androidx.core.content.ContextCompat
20+ import androidx.lifecycle.lifecycleScope
2021import com.google.android.material.bottomsheet.BottomSheetDialogFragment
2122import com.google.android.material.card.MaterialCardView
23+ import com.nextcloud.android.common.ui.theme.utils.ColorRole
2224import com.nextcloud.client.account.UserAccountManager
2325import com.nextcloud.client.core.AsyncRunner
2426import com.nextcloud.client.di.Injectable
@@ -31,6 +33,8 @@ import com.owncloud.android.ui.activity.BaseActivity
3133import com.owncloud.android.utils.DisplayUtils
3234import com.owncloud.android.utils.theme.CapabilityUtils
3335import com.owncloud.android.utils.theme.ViewThemeUtils
36+ import kotlinx.coroutines.Dispatchers
37+ import kotlinx.coroutines.launch
3438import javax.inject.Inject
3539
3640class SetOnlineStatusBottomSheet (val currentStatus : Status ? ) :
@@ -47,7 +51,6 @@ class SetOnlineStatusBottomSheet(val currentStatus: Status?) :
4751 @Inject
4852 lateinit var viewThemeUtils: ViewThemeUtils
4953
50- @SuppressLint(" DefaultLocale" )
5154 override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
5255 super .onViewCreated(view, savedInstanceState)
5356 accountManager = (activity as BaseActivity ).userAccountManager
@@ -56,21 +59,28 @@ class SetOnlineStatusBottomSheet(val currentStatus: Status?) :
5659 updateCurrentStatusViews(it)
5760 }
5861
59- binding.onlineStatus.setOnClickListener { setStatus(StatusType .ONLINE ) }
60- binding.awayStatus.setOnClickListener { setStatus(StatusType .AWAY ) }
61- binding.busyStatus.setOnClickListener { setStatus(StatusType .BUSY ) }
62- binding.dndStatus.setOnClickListener { setStatus(StatusType .DND ) }
63- binding.invisibleStatus.setOnClickListener { setStatus(StatusType .INVISIBLE ) }
64-
65- viewThemeUtils.files.themeStatusCardView(binding.onlineStatus)
66- viewThemeUtils.files.themeStatusCardView(binding.awayStatus)
67- viewThemeUtils.files.themeStatusCardView(binding.busyStatus)
68- viewThemeUtils.files.themeStatusCardView(binding.dndStatus)
69- viewThemeUtils.files.themeStatusCardView(binding.invisibleStatus)
62+ setupStatusViews()
7063
7164 viewThemeUtils.platform.themeDialog(binding.root)
7265
73- binding.busyStatus.setVisibleIf(CapabilityUtils .getCapability(context).userStatusSupportsBusy.isTrue)
66+ val capability = CapabilityUtils .getCapability(context)
67+ val busyStatus = capability.userStatusSupportsBusy.isTrue
68+ binding.busyStatus.setVisibleIf(busyStatus)
69+ }
70+
71+ private fun setupStatusViews () {
72+ val statuses = listOf (
73+ binding.onlineStatus to StatusType .ONLINE ,
74+ binding.awayStatus to StatusType .AWAY ,
75+ binding.busyStatus to StatusType .BUSY ,
76+ binding.dndStatus to StatusType .DND ,
77+ binding.invisibleStatus to StatusType .INVISIBLE
78+ )
79+
80+ statuses.forEach { (view, status) ->
81+ view.setOnClickListener { setStatus(status) }
82+ viewThemeUtils.files.themeStatusCardView(view)
83+ }
7484 }
7585
7686 private fun updateCurrentStatusViews (it : Status ) {
@@ -98,8 +108,16 @@ class SetOnlineStatusBottomSheet(val currentStatus: Status?) :
98108 }
99109
100110 private fun showErrorSnackbar () {
101- DisplayUtils .showSnackMessage(view, " Failed to set status!" )
102- clearTopStatus()
111+ lifecycleScope.launch(Dispatchers .Main ) {
112+ if (! isAdded) {
113+ return @launch
114+ }
115+
116+ activity?.let {
117+ DisplayUtils .showSnackMessage(it, R .string.set_online_status_bottom_sheet_error_message)
118+ }
119+ clearTopStatus()
120+ }
103121 }
104122
105123 private fun visualizeStatus (statusType : StatusType ) {
@@ -116,37 +134,37 @@ class SetOnlineStatusBottomSheet(val currentStatus: Status?) :
116134 }
117135 }
118136 views.first.isChecked = true
119- viewThemeUtils.platform.colorOnSecondaryContainerTextViewElement (views.second)
137+ viewThemeUtils.platform.colorTextView (views.second, ColorRole . ON_SECONDARY_CONTAINER )
120138 }
121139
122140 private fun clearTopStatus () {
123- context?. let {
124- binding.onlineHeadline.setTextColor (
125- resources.getColor(com.nextcloud.android.common.ui. R .color.high_emphasis_text)
126- )
127- binding.awayHeadline.setTextColor(
128- resources.getColor(com.nextcloud.android.common.ui. R .color.high_emphasis_text)
129- )
130- binding.busyHeadline.setTextColor(
131- resources.getColor(com.nextcloud.android.common.ui. R .color.high_emphasis_text)
132- )
133- binding.dndHeadline.setTextColor(
134- resources.getColor(com.nextcloud.android.common.ui. R .color.high_emphasis_text)
135- )
136- binding.invisibleHeadline.setTextColor(
137- resources.getColor(com.nextcloud.android.common.ui. R .color.high_emphasis_text)
138- )
139-
140- binding.awayIcon.imageTintList = null
141- binding.dndIcon. imageTintList = null
142- binding.invisibleIcon.imageTintList = null
143-
144- binding.onlineStatus.isChecked = false
145- binding.awayStatus.isChecked = false
146- binding.busyStatus.isChecked = false
147- binding.dndStatus.isChecked = false
148- binding.invisibleStatus.isChecked = false
149- }
141+ val ctx = context ? : return
142+ val defaultColor = ContextCompat .getColor (
143+ ctx,
144+ com.nextcloud.android.common.ui. R .color.high_emphasis_text
145+ )
146+
147+ listOf (
148+ binding.onlineHeadline,
149+ binding.awayHeadline,
150+ binding.busyHeadline,
151+ binding.dndHeadline,
152+ binding.invisibleHeadline
153+ ).forEach { it.setTextColor(defaultColor) }
154+
155+ listOf (
156+ binding.awayIcon,
157+ binding.dndIcon,
158+ binding.invisibleIcon
159+ ).forEach { it. imageTintList = null }
160+
161+ listOf (
162+ binding.onlineStatus,
163+ binding.awayStatus,
164+ binding.busyStatus,
165+ binding.dndStatus,
166+ binding.invisibleStatus
167+ ).forEach { it.isChecked = false }
150168 }
151169
152170 companion object {
0 commit comments