fix: crash caused by missing packages

This commit is contained in:
Canny 2022-11-20 12:56:29 +03:00
parent 0a5dfa906f
commit e240c6b77c
No known key found for this signature in database
GPG Key ID: 395CCB0AA979F27B
4 changed files with 46 additions and 14 deletions

View File

@ -3,8 +3,14 @@ package app.revanced.manager.ui.component
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Android
import androidx.compose.material3.LocalContentColor
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.google.accompanist.drawablepainter.rememberDrawablePainter import com.google.accompanist.drawablepainter.rememberDrawablePainter
@ -14,9 +20,18 @@ fun AppIcon(
contentDescription: String?, contentDescription: String?,
size: Int = 48 size: Int = 48
) { ) {
var image: Painter = rememberVectorPainter(Icons.Outlined.Android)
var colorFilter: ColorFilter? = ColorFilter.tint(LocalContentColor.current)
if (drawable != null) {
image = rememberDrawablePainter(drawable)
colorFilter = null
}
Image( Image(
rememberDrawablePainter(drawable), image,
contentDescription, contentDescription,
Modifier.size(size.dp) Modifier.size(size.dp),
colorFilter = colorFilter
) )
} }

View File

@ -19,6 +19,7 @@ import app.revanced.manager.ui.component.ApplicationItem
import app.revanced.manager.ui.component.ApplicationItemDualTint import app.revanced.manager.ui.component.ApplicationItemDualTint
import app.revanced.manager.ui.component.HeadlineWithCard import app.revanced.manager.ui.component.HeadlineWithCard
import app.revanced.manager.ui.viewmodel.DashboardViewModel import app.revanced.manager.ui.viewmodel.DashboardViewModel
import app.revanced.manager.util.loadIcon
import org.koin.androidx.compose.getViewModel import org.koin.androidx.compose.getViewModel
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -89,7 +90,11 @@ fun DashboardScreen(viewModel: DashboardViewModel = getViewModel()) {
ApplicationItem( ApplicationItem(
appName = "Compose Manager", appName = "Compose Manager",
appIcon = { appIcon = {
AppIcon(drawable = LocalContext.current.packageManager.getApplicationIcon("app.revanced.manager.compose"), contentDescription = null, size = 38) AppIcon(
drawable = context.loadIcon("app.revanced.manager.compose"),
contentDescription = null,
size = 38
)
}, },
releaseAgo = "9d ago" releaseAgo = "9d ago"
) { ) {
@ -102,7 +107,13 @@ fun DashboardScreen(viewModel: DashboardViewModel = getViewModel()) {
ApplicationItemDualTint( ApplicationItemDualTint(
appName = "Flutter Manager", appName = "Flutter Manager",
releaseAgo = "9d ago", releaseAgo = "9d ago",
appIcon = { AppIcon(drawable = LocalContext.current.packageManager.getApplicationIcon("app.revanced.manager.flutter"), contentDescription = null, size = 38) } appIcon = {
AppIcon(
drawable = context.loadIcon("app.revanced.manager.flutter"),
contentDescription = null,
size = 38
)
}
) { ) {
ChangelogText( ChangelogText(
""" """

View File

@ -1,12 +1,6 @@
package app.revanced.manager.ui.screen package app.revanced.manager.ui.screen
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.*
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Build import androidx.compose.material.icons.filled.Build
import androidx.compose.material3.* import androidx.compose.material3.*
@ -22,6 +16,7 @@ import app.revanced.manager.ui.component.AppIcon
import app.revanced.manager.ui.component.FloatingActionButton import app.revanced.manager.ui.component.FloatingActionButton
import app.revanced.manager.ui.component.SplitAPKDialog import app.revanced.manager.ui.component.SplitAPKDialog
import app.revanced.manager.ui.viewmodel.PatcherScreenViewModel import app.revanced.manager.ui.viewmodel.PatcherScreenViewModel
import app.revanced.manager.util.loadIcon
import org.koin.androidx.compose.getViewModel import org.koin.androidx.compose.getViewModel
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@ -36,6 +31,8 @@ fun PatcherScreen(
var showDialog by remember { mutableStateOf(false) } var showDialog by remember { mutableStateOf(false) }
val hasAppSelected by mutableStateOf(vm.selectedAppPackage.isPresent) val hasAppSelected by mutableStateOf(vm.selectedAppPackage.isPresent)
val patchesLoaded by mutableStateOf(vm.patchesLoaded is Resource.Success) val patchesLoaded by mutableStateOf(vm.patchesLoaded is Resource.Success)
val context = LocalContext.current
Scaffold( Scaffold(
floatingActionButton = { floatingActionButton = {
FloatingActionButton( FloatingActionButton(
@ -84,9 +81,8 @@ fun PatcherScreen(
) { ) {
if (vm.selectedAppPackage.isPresent) { if (vm.selectedAppPackage.isPresent) {
AppIcon( AppIcon(
LocalContext.current.packageManager.getApplicationIcon( context.loadIcon(vm.selectedAppPackage.get().packageName),
vm.selectedAppPackage.get().packageName contentDescription = null, size = 18
), contentDescription = null, size = 18
) )
Spacer(Modifier.width(5.dp)) Spacer(Modifier.width(5.dp))
} }

View File

@ -3,6 +3,8 @@ package app.revanced.manager.util
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager.NameNotFoundException
import android.graphics.drawable.Drawable
import android.net.Uri import android.net.Uri
import android.os.Build import android.os.Build
import android.os.PowerManager import android.os.PowerManager
@ -17,6 +19,14 @@ fun Context.openUrl(url: String) {
}) })
} }
fun Context.loadIcon(string: String): Drawable? {
return try {
packageManager.getApplicationIcon(string)
} catch (e: NameNotFoundException) {
null
}
}
fun Context.requestAllFilesAccess() { fun Context.requestAllFilesAccess() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
startActivity(Intent( startActivity(Intent(