
Closes #10257 We show a warning banner in the extensions list and also rely on the system alert popup if someone attempts to install without the permission already granted. (cherry picked from commit f0710df35696c1f6cf7bb5371dfd6ad91d53fae1)
42 lines
1.5 KiB
Kotlin
42 lines
1.5 KiB
Kotlin
package eu.kanade.presentation.util
|
|
|
|
import android.os.Build
|
|
import android.provider.Settings
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.DisposableEffect
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.mutableStateOf
|
|
import androidx.compose.runtime.remember
|
|
import androidx.compose.runtime.setValue
|
|
import androidx.compose.ui.platform.LocalContext
|
|
import androidx.compose.ui.platform.LocalLifecycleOwner
|
|
import androidx.lifecycle.DefaultLifecycleObserver
|
|
import androidx.lifecycle.LifecycleOwner
|
|
|
|
@Composable
|
|
fun rememberRequestPackageInstallsPermissionState(): Boolean {
|
|
val context = LocalContext.current
|
|
val lifecycleOwner = LocalLifecycleOwner.current
|
|
|
|
var installGranted by remember { mutableStateOf(false) }
|
|
|
|
DisposableEffect(lifecycleOwner.lifecycle) {
|
|
val observer = object : DefaultLifecycleObserver {
|
|
override fun onResume(owner: LifecycleOwner) {
|
|
installGranted = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
context.packageManager.canRequestPackageInstalls()
|
|
} else {
|
|
@Suppress("DEPRECATION")
|
|
Settings.Secure.getInt(context.contentResolver, Settings.Secure.INSTALL_NON_MARKET_APPS) != 0
|
|
}
|
|
}
|
|
}
|
|
lifecycleOwner.lifecycle.addObserver(observer)
|
|
onDispose {
|
|
lifecycleOwner.lifecycle.removeObserver(observer)
|
|
}
|
|
}
|
|
|
|
return installGranted
|
|
}
|