mirror of
https://github.com/bitfireAT/davx5-ose
synced 2024-07-21 10:41:47 +00:00
Check if keep-permissions changed when user comes back from settings app (#715)
* Check if keep-permissions changed when user comes back from settings app * Use one model only * Use mutable state flows * Use compose mutable state * [CI] Improve caching behavior * Freshly created model can never be null --------- Co-authored-by: Ricki Hirner <hirner@bitfire.at>
This commit is contained in:
parent
dd08415c84
commit
72320b30f7
|
@ -26,7 +26,8 @@ import androidx.compose.material.Scaffold
|
|||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.livedata.observeAsState
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.res.painterResource
|
||||
|
@ -34,8 +35,6 @@ import androidx.compose.ui.res.stringResource
|
|||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.lifecycle.AndroidViewModel
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import at.bitfire.davdroid.BuildConfig
|
||||
import at.bitfire.davdroid.PackageChangedReceiver
|
||||
import at.bitfire.davdroid.R
|
||||
|
@ -77,11 +76,10 @@ class PermissionsActivity: AppCompatActivity() {
|
|||
|
||||
class Model(app: Application): AndroidViewModel(app) {
|
||||
|
||||
val needKeepPermissions = MutableLiveData<Boolean>()
|
||||
|
||||
val openTasksAvailable = MutableLiveData<Boolean>()
|
||||
val tasksOrgAvailable = MutableLiveData<Boolean>()
|
||||
val jtxAvailable = MutableLiveData<Boolean>()
|
||||
var needKeepPermissions by mutableStateOf(false)
|
||||
var openTasksAvailable by mutableStateOf(false)
|
||||
var tasksOrgAvailable by mutableStateOf(false)
|
||||
var jtxAvailable by mutableStateOf(false)
|
||||
|
||||
private val tasksWatcher = object: PackageChangedReceiver(app) {
|
||||
override fun onPackageChanged() {
|
||||
|
@ -104,12 +102,12 @@ class PermissionsActivity: AppCompatActivity() {
|
|||
|
||||
// auto-reset permissions
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
needKeepPermissions.value = pm.isAutoRevokeWhitelisted
|
||||
needKeepPermissions = pm.isAutoRevokeWhitelisted
|
||||
}
|
||||
|
||||
openTasksAvailable.value = pm.resolveContentProvider(TaskProvider.ProviderName.OpenTasks.authority, 0) != null
|
||||
tasksOrgAvailable.value = pm.resolveContentProvider(TaskProvider.ProviderName.TasksOrg.authority, 0) != null
|
||||
jtxAvailable.value = pm.resolveContentProvider(TaskProvider.ProviderName.JtxBoard.authority, 0) != null
|
||||
openTasksAvailable = pm.resolveContentProvider(TaskProvider.ProviderName.OpenTasks.authority, 0) != null
|
||||
tasksOrgAvailable = pm.resolveContentProvider(TaskProvider.ProviderName.TasksOrg.authority, 0) != null
|
||||
jtxAvailable = pm.resolveContentProvider(TaskProvider.ProviderName.JtxBoard.authority, 0) != null
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -119,22 +117,17 @@ class PermissionsActivity: AppCompatActivity() {
|
|||
@Composable
|
||||
fun PermissionsContent(
|
||||
modifier: Modifier = Modifier,
|
||||
model: PermissionsActivity.Model = viewModel()
|
||||
model: PermissionsActivity.Model
|
||||
) {
|
||||
val context = LocalContext.current
|
||||
|
||||
val keepPermissions by model.needKeepPermissions.observeAsState()
|
||||
val openTasksAvailable by model.openTasksAvailable.observeAsState()
|
||||
val tasksOrgAvailable by model.tasksOrgAvailable.observeAsState()
|
||||
val jtxAvailable by model.jtxAvailable.observeAsState()
|
||||
|
||||
Column(
|
||||
modifier = modifier
|
||||
.fillMaxSize()
|
||||
.verticalScroll(rememberScrollState())
|
||||
) {
|
||||
PermissionsCard(
|
||||
keepPermissions,
|
||||
model.needKeepPermissions,
|
||||
onKeepPermissionsRequested = {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
|
||||
val intent = Intent(
|
||||
|
@ -149,9 +142,9 @@ fun PermissionsContent(
|
|||
}
|
||||
}
|
||||
},
|
||||
openTasksAvailable,
|
||||
tasksOrgAvailable,
|
||||
jtxAvailable
|
||||
model.openTasksAvailable,
|
||||
model.tasksOrgAvailable,
|
||||
model.jtxAvailable
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -120,6 +120,12 @@ class IntroActivity : AppIntro2() {
|
|||
}
|
||||
}
|
||||
|
||||
// For on resume actions of intro pages
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
activity?.application?.let { page.onResume(it) }
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -35,4 +35,9 @@ interface IntroPage {
|
|||
@Composable
|
||||
fun ComposePage()
|
||||
|
||||
/**
|
||||
* Called when the user leaves and re-enters the app intro
|
||||
*/
|
||||
fun onResume(application: Application) {}
|
||||
|
||||
}
|
|
@ -6,14 +6,17 @@ package at.bitfire.davdroid.ui.intro
|
|||
|
||||
import android.app.Application
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||
import at.bitfire.davdroid.ui.PermissionsActivity
|
||||
import at.bitfire.davdroid.ui.PermissionsContent
|
||||
import at.bitfire.davdroid.util.PermissionUtils
|
||||
import at.bitfire.davdroid.util.PermissionUtils.CALENDAR_PERMISSIONS
|
||||
import at.bitfire.davdroid.util.PermissionUtils.CONTACT_PERMISSIONS
|
||||
import at.bitfire.ical4android.TaskProvider
|
||||
|
||||
class PermissionsIntroPage: IntroPage {
|
||||
|
||||
var model: PermissionsActivity.Model? = null
|
||||
|
||||
override fun getShowPolicy(application: Application): IntroPage.ShowPolicy {
|
||||
// show PermissionsFragment as intro fragment when no permissions are granted
|
||||
val permissions = CONTACT_PERMISSIONS + CALENDAR_PERMISSIONS +
|
||||
|
@ -28,7 +31,15 @@ class PermissionsIntroPage: IntroPage {
|
|||
|
||||
@Composable
|
||||
override fun ComposePage() {
|
||||
PermissionsContent()
|
||||
val newModel: PermissionsActivity.Model = viewModel()
|
||||
model = newModel
|
||||
|
||||
PermissionsContent(model = newModel)
|
||||
}
|
||||
|
||||
// Check whether permissions have changed after user comes back from settings app
|
||||
override fun onResume(application: Application) {
|
||||
model?.checkPermissions()
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in a new issue