Update
This commit is contained in:
parent
e88efe5f2d
commit
ed17587bf8
5 changed files with 45 additions and 35 deletions
|
@ -1,6 +1,8 @@
|
|||
package eu.m724.pojavbackup.home
|
||||
|
||||
import android.Manifest
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Bundle
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.compose.setContent
|
||||
|
@ -30,9 +32,9 @@ import androidx.compose.runtime.getValue
|
|||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.core.content.ContextCompat.startActivity
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.compose.collectAsStateWithLifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavDestination.Companion.hierarchy
|
||||
import androidx.navigation.compose.NavHost
|
||||
|
@ -46,7 +48,6 @@ import eu.m724.pojavbackup.home.screen.dashboard.DashboardScreen
|
|||
import eu.m724.pojavbackup.home.screen.history.HistoryScreen
|
||||
import eu.m724.pojavbackup.settings.SettingsActivity
|
||||
import eu.m724.pojavbackup.ui.theme.PojavBackupTheme
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
@AndroidEntryPoint
|
||||
class HomeActivity : ComponentActivity() {
|
||||
|
@ -64,6 +65,8 @@ class HomeActivity : ComponentActivity() {
|
|||
super.onCreate(savedInstanceState)
|
||||
|
||||
viewModel.load(
|
||||
notificationPermissionGranted = checkForNotificationPermission(),
|
||||
notificationPermissionRejected = checkIfNotificationPermissionRejected(),
|
||||
onSetupRequired = {
|
||||
setupResult.launch(it)
|
||||
}
|
||||
|
@ -94,6 +97,14 @@ class HomeActivity : ComponentActivity() {
|
|||
fun onSettingsOpen(page: String) {
|
||||
startActivity(Intent(applicationContext, SettingsActivity::class.java).putExtra("settingsPage", page))
|
||||
}
|
||||
|
||||
private fun checkForNotificationPermission(): Boolean {
|
||||
return ContextCompat.checkSelfPermission(applicationContext, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED
|
||||
}
|
||||
|
||||
private fun checkIfNotificationPermissionRejected(): Boolean {
|
||||
return !ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.POST_NOTIFICATIONS)
|
||||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
|
|
|
@ -1,13 +1,10 @@
|
|||
package eu.m724.pojavbackup.home
|
||||
|
||||
import android.Manifest
|
||||
import android.app.NotificationManager
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import android.util.Log
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.documentfile.provider.DocumentFile
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.viewModelScope
|
||||
|
@ -43,18 +40,20 @@ class HomeViewModel @Inject constructor(
|
|||
}
|
||||
|
||||
fun load(
|
||||
notificationPermissionGranted: Boolean,
|
||||
notificationPermissionRejected: Boolean,
|
||||
onSetupRequired: (Intent) -> Unit
|
||||
) {
|
||||
viewModelScope.launch {
|
||||
val uri = settingsRepository.getSource()
|
||||
|
||||
val storagePermission = uri?.let { checkForStoragePermission(uri) } == true
|
||||
val notificationPermission = checkForNotificationPermission()
|
||||
|
||||
if (!storagePermission || !notificationPermission) {
|
||||
if (!storagePermission || (!notificationPermissionGranted && !notificationPermissionRejected)) {
|
||||
val intent = Intent(appContext, SetupActivity::class.java)
|
||||
.putExtra("storagePermissionGranted", storagePermission)
|
||||
.putExtra("notificationPermissionGranted", notificationPermission)
|
||||
.putExtra("notificationPermissionGranted", notificationPermissionGranted)
|
||||
.putExtra("notificationPermissionRejected", notificationPermissionRejected)
|
||||
|
||||
onSetupRequired(intent)
|
||||
} else {
|
||||
|
@ -86,9 +85,4 @@ class HomeViewModel @Inject constructor(
|
|||
|
||||
return true
|
||||
}
|
||||
|
||||
private fun checkForNotificationPermission(): Boolean {
|
||||
// TODO check if rejected
|
||||
return ContextCompat.checkSelfPermission(appContext, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED
|
||||
}
|
||||
}
|
|
@ -54,16 +54,7 @@ class SetupActivity : ComponentActivity() {
|
|||
|
||||
private val notificationGrant = registerForActivityResult(ActivityResultContracts.RequestPermission()) {
|
||||
viewModel.onNotificationGrant(it) { success ->
|
||||
if (success) {
|
||||
onComplete()
|
||||
} else {
|
||||
// TODO instead red text?
|
||||
Toast.makeText(
|
||||
applicationContext,
|
||||
"This is not a PojavLauncher directory.",
|
||||
Toast.LENGTH_SHORT
|
||||
).show()
|
||||
}
|
||||
onComplete()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -81,8 +72,9 @@ class SetupActivity : ComponentActivity() {
|
|||
|
||||
val storagePermissionGranted = intent.getBooleanExtra("storagePermissionGranted", false)
|
||||
val notificationPermissionGranted = intent.getBooleanExtra("notificationPermissionGranted", false)
|
||||
val notificationPermissionRejected = intent.getBooleanExtra("notificationPermissionRejected", false)
|
||||
|
||||
viewModel.init(storagePermissionGranted, notificationPermissionGranted)
|
||||
viewModel.init(storagePermissionGranted, notificationPermissionGranted, notificationPermissionRejected)
|
||||
|
||||
// println("Found pojav launchers: ${packages.joinToString(", ")}")
|
||||
|
||||
|
@ -137,8 +129,9 @@ fun SetupScreen(
|
|||
GrantCard(
|
||||
title = "Notification permission",
|
||||
description = "It's needed to notify you about backup status.",
|
||||
granted = uiState.notificationPermissionGranted,
|
||||
onClick = onNotificationPermissionGrantClick
|
||||
granted = uiState.notificationPermissionGranted || uiState.notificationPermissionRejected,
|
||||
onClick = onNotificationPermissionGrantClick,
|
||||
customButtonText = if (uiState.notificationPermissionRejected) "Rejected" else null
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -149,7 +142,8 @@ fun GrantCard(
|
|||
title: String,
|
||||
description: String,
|
||||
granted: Boolean,
|
||||
onClick: () -> Unit
|
||||
onClick: () -> Unit,
|
||||
customButtonText: String? = null
|
||||
) {
|
||||
Card(
|
||||
modifier = modifier,
|
||||
|
@ -182,10 +176,14 @@ fun GrantCard(
|
|||
modifier = Modifier.align(Alignment.CenterHorizontally),
|
||||
enabled = !granted
|
||||
) {
|
||||
if (granted) {
|
||||
Text("Already granted")
|
||||
if (customButtonText == null) {
|
||||
if (granted) {
|
||||
Text("Already granted")
|
||||
} else {
|
||||
Text("Grant")
|
||||
}
|
||||
} else {
|
||||
Text("Grant")
|
||||
Text(customButtonText)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,5 +2,6 @@ package eu.m724.pojavbackup.setup
|
|||
|
||||
data class SetupUiState(
|
||||
val storagePermissionGranted: Boolean = false,
|
||||
val notificationPermissionGranted: Boolean = false
|
||||
val notificationPermissionGranted: Boolean = false,
|
||||
val notificationPermissionRejected: Boolean = false
|
||||
)
|
|
@ -35,12 +35,14 @@ class SetupViewModel @Inject constructor(
|
|||
|
||||
fun init(
|
||||
storagePermissionGranted: Boolean,
|
||||
notificationPermissionGranted: Boolean
|
||||
notificationPermissionGranted: Boolean,
|
||||
notificationPermissionRejected: Boolean
|
||||
) {
|
||||
_uiState.update {
|
||||
it.copy(
|
||||
storagePermissionGranted = storagePermissionGranted,
|
||||
notificationPermissionGranted = notificationPermissionGranted
|
||||
notificationPermissionGranted = notificationPermissionGranted,
|
||||
notificationPermissionRejected = notificationPermissionRejected
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -48,7 +50,7 @@ class SetupViewModel @Inject constructor(
|
|||
fun checkIfCanProceed(): Boolean {
|
||||
val state = _uiState.value
|
||||
|
||||
return state.storagePermissionGranted && state.notificationPermissionGranted
|
||||
return state.storagePermissionGranted && (state.notificationPermissionGranted || state.notificationPermissionRejected)
|
||||
}
|
||||
|
||||
// TODO we could make the check call separate and not pass context here
|
||||
|
@ -78,6 +80,10 @@ class SetupViewModel @Inject constructor(
|
|||
_uiState.update {
|
||||
it.copy(notificationPermissionGranted = true)
|
||||
}
|
||||
} else {
|
||||
_uiState.update {
|
||||
it.copy(notificationPermissionRejected = true)
|
||||
}
|
||||
}
|
||||
|
||||
result(isGranted)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue