mirror of
https://github.com/d4rken-org/capod.git
synced 2026-09-14 18:26:11 -04:00
Add delayed retry for permission recheck when returning from settings
This commit is contained in:
@@ -77,15 +77,15 @@ fun OverviewScreenHost(vm: OverviewViewModel = hiltViewModel()) {
|
||||
|
||||
val permissionLauncher = rememberLauncherForActivityResult(
|
||||
contract = ActivityResultContracts.RequestPermission()
|
||||
) { granted ->
|
||||
vm.onPermissionResult(granted)
|
||||
) {
|
||||
vm.onPermissionResult()
|
||||
}
|
||||
|
||||
// When returning from settings-based permissions
|
||||
LifecycleEventEffect(Lifecycle.Event.ON_RESUME) {
|
||||
if (awaitingPermission) {
|
||||
awaitingPermission = false
|
||||
vm.onPermissionResult(true)
|
||||
vm.onSettingsPermissionResult()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package eu.darken.capod.main.ui.overview
|
||||
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import eu.darken.capod.common.TimeSource
|
||||
import eu.darken.capod.common.bluetooth.BluetoothManager2
|
||||
import eu.darken.capod.common.coroutine.DispatcherProvider
|
||||
import eu.darken.capod.common.datastore.valueBlocking
|
||||
@@ -12,7 +13,6 @@ import eu.darken.capod.common.flow.combine
|
||||
import eu.darken.capod.common.flow.throttleLatest
|
||||
import eu.darken.capod.common.navigation.Nav
|
||||
import eu.darken.capod.common.permissions.Permission
|
||||
import eu.darken.capod.common.TimeSource
|
||||
import eu.darken.capod.common.uix.ViewModel4
|
||||
import eu.darken.capod.common.upgrade.UpgradeRepo
|
||||
import eu.darken.capod.main.core.GeneralSettings
|
||||
@@ -21,8 +21,8 @@ import eu.darken.capod.main.core.PermissionTool
|
||||
import eu.darken.capod.monitor.core.DeviceMonitor
|
||||
import eu.darken.capod.monitor.core.PodDevice
|
||||
import eu.darken.capod.monitor.core.worker.MonitorControl
|
||||
import eu.darken.capod.pods.core.apple.aap.protocol.AapCommand
|
||||
import eu.darken.capod.pods.core.apple.aap.AapConnectionManager
|
||||
import eu.darken.capod.pods.core.apple.aap.protocol.AapCommand
|
||||
import eu.darken.capod.pods.core.apple.aap.protocol.AapSetting
|
||||
import eu.darken.capod.profiles.core.DeviceProfile
|
||||
import eu.darken.capod.profiles.core.DeviceProfilesRepo
|
||||
@@ -143,10 +143,19 @@ class OverviewViewModel @Inject constructor(
|
||||
val unmatchedDevices: List<PodDevice> get() = devices.filter { it.profileId == null }
|
||||
}
|
||||
|
||||
fun onPermissionResult(@Suppress("UNUSED_PARAMETER") granted: Boolean) {
|
||||
fun onPermissionResult() {
|
||||
permissionTool.recheck()
|
||||
}
|
||||
|
||||
fun onSettingsPermissionResult() {
|
||||
permissionTool.recheck()
|
||||
|
||||
launch {
|
||||
delay(1000L)
|
||||
permissionTool.recheck()
|
||||
}
|
||||
}
|
||||
|
||||
fun goToSettings() {
|
||||
navTo(Nav.Settings.Index)
|
||||
}
|
||||
|
||||
@@ -12,8 +12,6 @@ import eu.darken.capod.main.core.PermissionTool
|
||||
import eu.darken.capod.monitor.core.DeviceMonitor
|
||||
import eu.darken.capod.monitor.core.PodDevice
|
||||
import eu.darken.capod.monitor.core.worker.MonitorControl
|
||||
import eu.darken.capod.pods.core.apple.ble.BlePodSnapshot
|
||||
import eu.darken.capod.profiles.core.AppleDeviceProfile
|
||||
import eu.darken.capod.profiles.core.DeviceProfile
|
||||
import eu.darken.capod.profiles.core.DeviceProfilesRepo
|
||||
import io.kotest.matchers.shouldBe
|
||||
@@ -26,6 +24,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.test.UnconfinedTestDispatcher
|
||||
import kotlinx.coroutines.test.advanceUntilIdle
|
||||
import kotlinx.coroutines.test.resetMain
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import kotlinx.coroutines.test.setMain
|
||||
@@ -416,11 +415,21 @@ class OverviewViewModelTest : BaseTest() {
|
||||
fun `onPermissionResult calls permissionTool recheck`() = runTest(testDispatcher) {
|
||||
val vm = createViewModel()
|
||||
|
||||
vm.onPermissionResult(true)
|
||||
vm.onPermissionResult()
|
||||
|
||||
verify(exactly = 1) { permissionTool.recheck() }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `onSettingsPermissionResult retries permission recheck`() = runTest(testDispatcher) {
|
||||
val vm = createViewModel()
|
||||
|
||||
vm.onSettingsPermissionResult()
|
||||
advanceUntilIdle()
|
||||
|
||||
verify(exactly = 2) { permissionTool.recheck() }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `requestPermission emits event`() = runTest(testDispatcher) {
|
||||
val vm = createViewModel()
|
||||
|
||||
Reference in New Issue
Block a user