diff --git a/app/src/main/java/app/revanced/manager/patcher/aapt/Aapt.kt b/app/src/main/java/app/revanced/manager/patcher/aapt/Aapt.kt
index 25e26be4..959768e6 100644
--- a/app/src/main/java/app/revanced/manager/patcher/aapt/Aapt.kt
+++ b/app/src/main/java/app/revanced/manager/patcher/aapt/Aapt.kt
@@ -1,9 +1,14 @@
package app.revanced.manager.patcher.aapt
import android.content.Context
+import android.os.Build.SUPPORTED_ABIS as DEVICE_ABIS
import java.io.File
object Aapt {
+ private val WORKING_ABIS = setOf("arm64-v8a", "x86", "x86_64")
+
+ fun supportsDevice() = (DEVICE_ABIS intersect WORKING_ABIS).isNotEmpty()
+
fun binary(context: Context): File? {
return File(context.applicationInfo.nativeLibraryDir).resolveAapt()
}
diff --git a/app/src/main/java/app/revanced/manager/ui/component/NotificationCard.kt b/app/src/main/java/app/revanced/manager/ui/component/NotificationCard.kt
index 4c23afd4..a4e21297 100644
--- a/app/src/main/java/app/revanced/manager/ui/component/NotificationCard.kt
+++ b/app/src/main/java/app/revanced/manager/ui/component/NotificationCard.kt
@@ -8,6 +8,8 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Card
+import androidx.compose.material3.CardColors
+import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@@ -24,13 +26,13 @@ fun NotificationCard(
color: Color,
icon: ImageVector,
text: String,
- content: @Composable () -> Unit
+ content: (@Composable () -> Unit)? = null,
) {
Card(
+ colors = CardDefaults.cardColors(containerColor = color),
modifier = Modifier
.fillMaxWidth()
.clip(RoundedCornerShape(28.dp))
- .background(color)
) {
Row(
modifier = Modifier
@@ -47,11 +49,11 @@ fun NotificationCard(
contentDescription = null,
)
Text(
- modifier = Modifier.width(220.dp),
+ modifier = if (content != null) Modifier.width(220.dp) else Modifier,
text = text,
style = MaterialTheme.typography.bodyMedium
)
- content()
+ content?.invoke()
}
}
}
\ No newline at end of file
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 82bd6f6b..2a2a2b89 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,10 +2,15 @@ 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.Column
import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.outlined.WarningAmber
import androidx.compose.material3.ListItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
@@ -13,14 +18,17 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import app.revanced.manager.R
import app.revanced.manager.data.room.apps.installed.InstalledApp
+import app.revanced.manager.patcher.aapt.Aapt
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.NotificationCard
import app.revanced.manager.ui.viewmodel.InstalledAppsViewModel
import org.koin.androidx.compose.getViewModel
@@ -31,43 +39,56 @@ fun InstalledAppsScreen(
) {
val installedApps by viewModel.apps.collectAsStateWithLifecycle(initialValue = null)
- LazyColumn(
- modifier = Modifier.fillMaxSize(),
- horizontalAlignment = Alignment.CenterHorizontally,
- verticalArrangement = installedApps?.let { if (it.isEmpty()) Arrangement.Center else Arrangement.Top } ?: Arrangement.Center
- ) {
- installedApps?.let { installedApps ->
-
- if (installedApps.isNotEmpty()) {
- items(
- installedApps,
- key = { it.currentPackageName }
- ) { installedApp ->
- viewModel.packageInfoMap[installedApp.currentPackageName].let { packageInfo ->
- ListItem(
- modifier = Modifier.clickable { onAppClick(installedApp) },
- leadingContent = {
- AppIcon(
- packageInfo,
- contentDescription = null,
- Modifier.size(36.dp)
- )
- },
- headlineContent = { AppLabel(packageInfo, defaultText = null) },
- supportingContent = { Text(installedApp.currentPackageName) }
- )
-
- }
- }
- } else {
- item {
- Text(
- text = stringResource(R.string.no_patched_apps_found),
- style = MaterialTheme.typography.titleLarge
- )
- }
+ Column {
+ if (!Aapt.supportsDevice())
+ Box(modifier = Modifier.padding(16.dp)) {
+ NotificationCard(
+ color = MaterialTheme.colorScheme.errorContainer,
+ icon = Icons.Outlined.WarningAmber,
+ text = stringResource(
+ R.string.unsupported_architecture_warning
+ ),
+ )
}
- } ?: item { LoadingIndicator() }
+ LazyColumn(
+ modifier = Modifier.fillMaxSize(),
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = if (installedApps.isNullOrEmpty()) Arrangement.Center else Arrangement.Top
+ ) {
+ installedApps?.let { installedApps ->
+
+ if (installedApps.isNotEmpty()) {
+ items(
+ installedApps,
+ key = { it.currentPackageName }
+ ) { installedApp ->
+ viewModel.packageInfoMap[installedApp.currentPackageName].let { packageInfo ->
+ ListItem(
+ modifier = Modifier.clickable { onAppClick(installedApp) },
+ leadingContent = {
+ AppIcon(
+ packageInfo,
+ contentDescription = null,
+ Modifier.size(36.dp)
+ )
+ },
+ headlineContent = { AppLabel(packageInfo, defaultText = null) },
+ supportingContent = { Text(installedApp.currentPackageName) }
+ )
+
+ }
+ }
+ } else {
+ item {
+ Text(
+ text = stringResource(R.string.no_patched_apps_found),
+ style = MaterialTheme.typography.titleLarge
+ )
+ }
+ }
+
+ } ?: item { LoadingIndicator() }
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5b22bc46..18b5bb75 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -11,6 +11,8 @@
Select an app
Select patches
+ Patching on ARMv7 devices is not yet supported and will most likely fail.
+
Import
Import patch bundle
Bundle patches