@@ -66,6 +66,7 @@ import kotlinx.coroutines.flow.distinctUntilChanged
6666import kotlinx.coroutines.flow.filterIsInstance
6767import kotlinx.coroutines.flow.first
6868import kotlinx.coroutines.flow.flatMapLatest
69+ import kotlinx.coroutines.flow.flowOf
6970import kotlinx.coroutines.flow.flowOn
7071import kotlinx.coroutines.flow.map
7172import kotlinx.coroutines.flow.stateIn
@@ -99,6 +100,7 @@ class KeyMapListViewModel(
99100 const val ID_BATTERY_OPTIMISATION_LIST_ITEM = " battery_optimised"
100101 const val ID_LOGGING_ENABLED_LIST_ITEM = " logging_enabled"
101102 const val ID_NOTIFICATION_PERMISSION_DENIED_LIST_ITEM = " notification_permission_denied"
103+ const val ID_XIAOMI_ADB_SECURITY_SETTINGS_LIST_ITEM = " xiaomi_adb_security_settings"
102104 }
103105
104106 val sortViewModel = SortViewModel (coroutineScope, sortKeyMaps)
@@ -144,70 +146,83 @@ class KeyMapListViewModel(
144146
145147 private val isEditingGroupName = MutableStateFlow (false )
146148
147- private val warnings: Flow <List <HomeWarningListItem >> = combine(
148- showAlertsUseCase.isBatteryOptimised,
149- accessibilityServiceState,
150- showAlertsUseCase.hideAlerts,
151- showAlertsUseCase.isLoggingEnabled,
152- showAlertsUseCase.showNotificationPermissionAlert,
153- ) {
154- isBatteryOptimised,
155- serviceState,
156- isHidden,
157- isLoggingEnabled,
158- showNotificationPermissionAlert,
159- ->
160- if (isHidden) {
161- return @combine emptyList()
162- }
163-
164- buildList {
165- when (serviceState) {
166- AccessibilityServiceState .CRASHED ->
167- add(
168- HomeWarningListItem (
169- ID_ACCESSIBILITY_SERVICE_CRASHED_LIST_ITEM ,
170- getString(R .string.home_error_accessibility_service_is_crashed),
171- ),
172- )
173-
174- AccessibilityServiceState .DISABLED ->
175- add(
176- HomeWarningListItem (
177- ID_ACCESSIBILITY_SERVICE_DISABLED_LIST_ITEM ,
178- getString(R .string.home_error_accessibility_service_is_disabled),
179- ),
180- )
181-
182- AccessibilityServiceState .ENABLED -> {}
149+ private val warnings: Flow <List <HomeWarningListItem >> =
150+ showAlertsUseCase.hideAlerts.flatMapLatest { hideAlerts ->
151+ if (hideAlerts) {
152+ flowOf(emptyList())
153+ } else {
154+ combine(
155+ showAlertsUseCase.isBatteryOptimised,
156+ accessibilityServiceState,
157+ showAlertsUseCase.isLoggingEnabled,
158+ showAlertsUseCase.showNotificationPermissionAlert,
159+ showAlertsUseCase.showXiaomiAdbSecuritySettingsWarning,
160+ this ::buildWarningListItems,
161+ )
183162 }
163+ }
184164
185- if (isBatteryOptimised) {
165+ private fun buildWarningListItems (
166+ isBatteryOptimised : Boolean ,
167+ serviceState : AccessibilityServiceState ,
168+ isLoggingEnabled : Boolean ,
169+ showNotificationPermissionAlert : Boolean ,
170+ showXiaomiAdbSecuritySettingsWarning : Boolean ,
171+ ): List <HomeWarningListItem > = buildList {
172+ when (serviceState) {
173+ AccessibilityServiceState .CRASHED ->
186174 add(
187175 HomeWarningListItem (
188- ID_BATTERY_OPTIMISATION_LIST_ITEM ,
189- getString(R .string.home_error_is_battery_optimised ),
176+ ID_ACCESSIBILITY_SERVICE_CRASHED_LIST_ITEM ,
177+ getString(R .string.home_error_accessibility_service_is_crashed ),
190178 ),
191179 )
192- } // don't show a success message for this
193180
194- if (showNotificationPermissionAlert) {
181+ AccessibilityServiceState . DISABLED ->
195182 add(
196183 HomeWarningListItem (
197- ID_NOTIFICATION_PERMISSION_DENIED_LIST_ITEM ,
198- getString(R .string.home_error_notification_permission ),
184+ ID_ACCESSIBILITY_SERVICE_DISABLED_LIST_ITEM ,
185+ getString(R .string.home_error_accessibility_service_is_disabled ),
199186 ),
200187 )
201- }
202188
203- if (isLoggingEnabled) {
204- add(
205- HomeWarningListItem (
206- ID_LOGGING_ENABLED_LIST_ITEM ,
207- getString(R .string.home_error_logging_enabled),
208- ),
209- )
210- }
189+ AccessibilityServiceState .ENABLED -> {}
190+ }
191+
192+ if (isBatteryOptimised) {
193+ add(
194+ HomeWarningListItem (
195+ ID_BATTERY_OPTIMISATION_LIST_ITEM ,
196+ getString(R .string.home_error_is_battery_optimised),
197+ ),
198+ )
199+ } // don't show a success message for this
200+
201+ if (showNotificationPermissionAlert) {
202+ add(
203+ HomeWarningListItem (
204+ ID_NOTIFICATION_PERMISSION_DENIED_LIST_ITEM ,
205+ getString(R .string.home_error_notification_permission),
206+ ),
207+ )
208+ }
209+
210+ if (showXiaomiAdbSecuritySettingsWarning) {
211+ add(
212+ HomeWarningListItem (
213+ ID_XIAOMI_ADB_SECURITY_SETTINGS_LIST_ITEM ,
214+ getString(R .string.expert_mode_usb_debugging_security_settings_description),
215+ ),
216+ )
217+ }
218+
219+ if (isLoggingEnabled) {
220+ add(
221+ HomeWarningListItem (
222+ ID_LOGGING_ENABLED_LIST_ITEM ,
223+ getString(R .string.home_error_logging_enabled),
224+ ),
225+ )
211226 }
212227 }
213228
@@ -687,6 +702,9 @@ class KeyMapListViewModel(
687702
688703 ID_NOTIFICATION_PERMISSION_DENIED_LIST_ITEM ->
689704 showNotificationPermissionAlertDialog()
705+
706+ ID_XIAOMI_ADB_SECURITY_SETTINGS_LIST_ITEM ->
707+ showAlertsUseCase.launchDeveloperOptions()
690708 }
691709 }
692710 }
0 commit comments