Be able to test PermissionsPresenterTest. Create interface to abstract Accompanist implementation

This commit is contained in:
Benoit Marty 2023-03-22 10:10:19 +01:00 committed by Benoit Marty
parent d8b37d6ead
commit 000ed480ee
7 changed files with 254 additions and 11 deletions

View file

@ -0,0 +1,43 @@
/*
* Copyright (c) 2023 New Vector Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
@file:OptIn(ExperimentalPermissionsApi::class)
package io.element.android.libraries.permissions.impl
import androidx.compose.runtime.Composable
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.PermissionState
import com.google.accompanist.permissions.rememberPermissionState
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.libraries.di.AppScope
import javax.inject.Inject
interface PermissionStateProvider {
@Composable
fun provide(permission: String, onPermissionResult: (Boolean) -> Unit): PermissionState
}
@ContributesBinding(AppScope::class)
class AccompanistPermissionStateProvider @Inject constructor() : PermissionStateProvider {
@Composable
override fun provide(permission: String, onPermissionResult: (Boolean) -> Unit): PermissionState {
return rememberPermissionState(
permission = permission,
onPermissionResult = onPermissionResult
)
}
}

View file

@ -26,8 +26,8 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
import com.google.accompanist.permissions.ExperimentalPermissionsApi
import com.google.accompanist.permissions.PermissionState
import com.google.accompanist.permissions.PermissionStatus
import com.google.accompanist.permissions.isGranted
import com.google.accompanist.permissions.rememberPermissionState
import com.google.accompanist.permissions.shouldShowRationale
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.libraries.di.AppScope
@ -41,6 +41,7 @@ import javax.inject.Inject
@ContributesBinding(AppScope::class)
class DefaultPermissionsPresenter @Inject constructor(
private val permissionsStore: PermissionsStore,
private val permissionStateProvider: PermissionStateProvider,
) : PermissionsPresenter {
private lateinit var permission: String
@ -85,7 +86,7 @@ class DefaultPermissionsPresenter @Inject constructor(
}
}
permissionState = rememberPermissionState(
permissionState = permissionStateProvider.provide(
permission = permission,
onPermissionResult = ::onPermissionResult
)
@ -97,7 +98,7 @@ class DefaultPermissionsPresenter @Inject constructor(
}
}
val showDialog = rememberSaveable { mutableStateOf(true) }
val showDialog = rememberSaveable { mutableStateOf(permissionState.status !is PermissionStatus.Granted) }
fun handleEvents(event: PermissionsEvents) {
Timber.tag("PERMISSION").w("New event: $event")
@ -109,9 +110,6 @@ class DefaultPermissionsPresenter @Inject constructor(
permissionState.launchPermissionRequest()
showDialog.value = false
}
PermissionsEvents.OpenSystemSettings -> {
showDialog.value = false
}
}
}