From 08402c104c4c8f3cd13ff079a68140c69a78a8e4 Mon Sep 17 00:00:00 2001 From: Aunali321 Date: Wed, 23 Aug 2023 01:29:18 +0530 Subject: [PATCH] i will robert suffer with di :trol: --- app/build.gradle.kts | 6 +++--- app/src/main/AndroidManifest.xml | 2 +- .../app/revanced/manager/ManagerApplication.kt | 5 ----- .../revanced/manager/service/ShizkuService.kt | 12 +++++++----- .../manager/ui/component/ShizukuCard.kt | 18 +++++++++++------- .../manager/ui/screen/InstalledAppsScreen.kt | 13 ++++++++++++- .../screen/settings/AdvancedSettingsScreen.kt | 12 ++++++++---- .../ui/viewmodel/AdvancedSettingsViewModel.kt | 5 ++++- .../ui/viewmodel/InstalledAppsViewModel.kt | 4 +++- app/src/main/res/values/strings.xml | 2 +- gradle/libs.versions.toml | 9 ++++++++- 11 files changed, 58 insertions(+), 30 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index dbbd290..284f341 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -146,7 +146,7 @@ dependencies { implementation(libs.markdown) // Shizuku - implementation("dev.rikka.shizuku:api:13.1.2") - implementation("dev.rikka.shizuku:provider:13.1.2") - compileOnly("dev.rikka.hidden:stub:4.2.0") + implementation(libs.shizuku.api) + implementation(libs.shizuku.provider) + compileOnly(libs.hidden.stub) } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 998b096..3d6e461 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -62,7 +62,7 @@ Unit = { _, grantResult -> - ShizukuApi.isPermissionGranted = grantResult == PackageManager.PERMISSION_GRANTED -} @OptIn(ExperimentalMaterial3Api::class) @Composable -fun ShizukuCard() { +fun ShizukuCard( + shizukuApi: ShizukuApi +) { + + val listener: (Int, Int) -> Unit = { _, grantResult -> + shizukuApi.isPermissionGranted = grantResult == PackageManager.PERMISSION_GRANTED + } + LaunchedEffect(Unit) { Shizuku.addRequestPermissionResultListener(listener) } @@ -47,14 +51,14 @@ fun ShizukuCard() { } } - AnimatedVisibility(visible = !ShizukuApi.isPermissionGranted) { + AnimatedVisibility(visible = !shizukuApi.isPermissionGranted) { Card( colors = CardDefaults.cardColors( MaterialTheme.colorScheme.errorContainer ), onClick = { - if (ShizukuApi.isBinderAvailable && !ShizukuApi.isPermissionGranted) { - Log.e("ShizukuCard", "Requesting permission") + if (shizukuApi.isBinderAvailable && !shizukuApi.isPermissionGranted) { + Log.i("ShizukuCard", "Requesting permission") Shizuku.requestPermission(114514) } }, diff --git a/app/src/main/java/app/revanced/manager/ui/screen/InstalledAppsScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/InstalledAppsScreen.kt index 82bd6f6..99e34a6 100644 --- a/app/src/main/java/app/revanced/manager/ui/screen/InstalledAppsScreen.kt +++ b/app/src/main/java/app/revanced/manager/ui/screen/InstalledAppsScreen.kt @@ -2,6 +2,7 @@ package app.revanced.manager.ui.screen import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.size import androidx.compose.foundation.lazy.LazyColumn @@ -21,6 +22,7 @@ import app.revanced.manager.data.room.apps.installed.InstalledApp import app.revanced.manager.ui.component.AppIcon import app.revanced.manager.ui.component.AppLabel import app.revanced.manager.ui.component.LoadingIndicator +import app.revanced.manager.ui.component.ShizukuCard import app.revanced.manager.ui.viewmodel.InstalledAppsViewModel import org.koin.androidx.compose.getViewModel @@ -36,8 +38,17 @@ fun InstalledAppsScreen( horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = installedApps?.let { if (it.isEmpty()) Arrangement.Center else Arrangement.Top } ?: Arrangement.Center ) { - installedApps?.let { installedApps -> + item { + if (viewModel.shizukuApi.isShizukuInstalled()) ShizukuCard(viewModel.shizukuApi) + Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + Text( + text = stringResource(R.string.no_patched_apps_found), + style = MaterialTheme.typography.titleLarge + ) + } + } + installedApps?.let { installedApps -> if (installedApps.isNotEmpty()) { items( installedApps, diff --git a/app/src/main/java/app/revanced/manager/ui/screen/settings/AdvancedSettingsScreen.kt b/app/src/main/java/app/revanced/manager/ui/screen/settings/AdvancedSettingsScreen.kt index d930c01..bb17f3e 100644 --- a/app/src/main/java/app/revanced/manager/ui/screen/settings/AdvancedSettingsScreen.kt +++ b/app/src/main/java/app/revanced/manager/ui/screen/settings/AdvancedSettingsScreen.kt @@ -68,8 +68,11 @@ fun AdvancedSettingsScreen( } if (showInstallerPicker) { - InstallerPicker(onDismiss = { showInstallerPicker = false }, - onConfirm = { vm.setInstaller(it) }) + InstallerPicker( + onDismiss = { showInstallerPicker = false }, + onConfirm = { vm.setInstaller(it) }, + viewModel = vm + ) } Scaffold(topBar = { @@ -183,7 +186,8 @@ private fun APIUrlDialog(currentUrl: String, onSubmit: (String?) -> Unit) { private fun InstallerPicker( onDismiss: () -> Unit, onConfirm: (PreferencesManager.InstallerManager) -> Unit, - prefs: PreferencesManager = koinInject() + prefs: PreferencesManager = koinInject(), + viewModel: AdvancedSettingsViewModel ) { var selectedInstaller by rememberSaveable { mutableStateOf(prefs.defaultInstaller.getBlocking()) } val context: Context = LocalContext.current @@ -208,7 +212,7 @@ private fun InstallerPicker( }, confirmButton = { Button(onClick = { - if (selectedInstaller == PreferencesManager.InstallerManager.SHIZUKU && !ShizukuApi.isShizukuPermissionGranted()) { + if (selectedInstaller == PreferencesManager.InstallerManager.SHIZUKU && viewModel.shizukuApi.isShizukuPermissionGranted()) { Toast.makeText( context, R.string.shizuku_unavailable, Toast.LENGTH_SHORT ).show() diff --git a/app/src/main/java/app/revanced/manager/ui/viewmodel/AdvancedSettingsViewModel.kt b/app/src/main/java/app/revanced/manager/ui/viewmodel/AdvancedSettingsViewModel.kt index c6dbdd4..03670fe 100644 --- a/app/src/main/java/app/revanced/manager/ui/viewmodel/AdvancedSettingsViewModel.kt +++ b/app/src/main/java/app/revanced/manager/ui/viewmodel/AdvancedSettingsViewModel.kt @@ -7,14 +7,17 @@ import app.revanced.manager.R import app.revanced.manager.domain.manager.PreferencesManager import app.revanced.manager.domain.repository.PatchBundleRepository import app.revanced.manager.domain.bundles.RemotePatchBundle +import app.revanced.manager.service.ShizukuApi import app.revanced.manager.util.uiSafe import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch +import org.koin.compose.koinInject class AdvancedSettingsViewModel( val prefs: PreferencesManager, private val app: Application, - private val patchBundleRepository: PatchBundleRepository + private val patchBundleRepository: PatchBundleRepository, + val shizukuApi: ShizukuApi ) : ViewModel() { val apiUrl = prefs.api diff --git a/app/src/main/java/app/revanced/manager/ui/viewmodel/InstalledAppsViewModel.kt b/app/src/main/java/app/revanced/manager/ui/viewmodel/InstalledAppsViewModel.kt index 6ed37b5..4107b36 100644 --- a/app/src/main/java/app/revanced/manager/ui/viewmodel/InstalledAppsViewModel.kt +++ b/app/src/main/java/app/revanced/manager/ui/viewmodel/InstalledAppsViewModel.kt @@ -5,6 +5,7 @@ import androidx.compose.runtime.mutableStateMapOf import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import app.revanced.manager.domain.repository.InstalledAppRepository +import app.revanced.manager.service.ShizukuApi import app.revanced.manager.util.PM import app.revanced.manager.util.collectEach import kotlinx.coroutines.Dispatchers @@ -14,7 +15,8 @@ import kotlinx.coroutines.withContext class InstalledAppsViewModel( private val installedAppsRepository: InstalledAppRepository, - private val pm: PM + private val pm: PM, + val shizukuApi: ShizukuApi ) : ViewModel() { val apps = installedAppsRepository.getAll().flowOn(Dispatchers.IO) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ee083a7..f838ab4 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -244,7 +244,7 @@ Tap on Update when prompted. \n ReVanced Manager will close when updating. Shizuku service available Shizuku service not connected - Some functions unavailable + Some functions are unavailable Choose the default installer Default Shizuku diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 624b101..02d92c4 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -26,7 +26,8 @@ aboutLibrariesGradlePlugin = "10.8.2" coil = "2.4.0" app-icon-loader-coil = "1.5.0" skrapeit = "1.2.1" - +shizuku = "13.1.2" +hidden = "4.2.0" [libraries] # AndroidX Core androidx-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "ktx" } @@ -98,6 +99,12 @@ skrapeit-parser = { group = "it.skrape", name = "skrapeit-html-parser", version. # Markdown markdown = { group = "org.jetbrains", name = "markdown", version.ref = "markdown" } +# Shizuku +shizuku-api = { group = "dev.rikka.shizuku", name = "api", version.ref = "shizuku" } +shizuku-provider = { group = "dev.rikka.shizuku", name = "provider", version.ref = "shizuku" } +hidden-stub = { group = "dev.rikka.hidden", name = "stub", version.ref = "hidden" } + + [plugins] android-application = { id = "com.android.application", version.ref = "androidGradlePlugin" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlinGradlePlugin" }