feat: armv7 warning

This commit is contained in:
Ax333l 2023-10-14 18:24:40 +02:00
parent 8f6d720454
commit 8f5449527d
No known key found for this signature in database
GPG Key ID: D2B4D85271127D23
4 changed files with 70 additions and 40 deletions

View File

@ -1,9 +1,14 @@
package app.revanced.manager.patcher.aapt package app.revanced.manager.patcher.aapt
import android.content.Context import android.content.Context
import android.os.Build.SUPPORTED_ABIS as DEVICE_ABIS
import java.io.File import java.io.File
object Aapt { 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? { fun binary(context: Context): File? {
return File(context.applicationInfo.nativeLibraryDir).resolveAapt() return File(context.applicationInfo.nativeLibraryDir).resolveAapt()
} }

View File

@ -8,6 +8,8 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardColors
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@ -24,13 +26,13 @@ fun NotificationCard(
color: Color, color: Color,
icon: ImageVector, icon: ImageVector,
text: String, text: String,
content: @Composable () -> Unit content: (@Composable () -> Unit)? = null,
) { ) {
Card( Card(
colors = CardDefaults.cardColors(containerColor = color),
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.clip(RoundedCornerShape(28.dp)) .clip(RoundedCornerShape(28.dp))
.background(color)
) { ) {
Row( Row(
modifier = Modifier modifier = Modifier
@ -47,11 +49,11 @@ fun NotificationCard(
contentDescription = null, contentDescription = null,
) )
Text( Text(
modifier = Modifier.width(220.dp), modifier = if (content != null) Modifier.width(220.dp) else Modifier,
text = text, text = text,
style = MaterialTheme.typography.bodyMedium style = MaterialTheme.typography.bodyMedium
) )
content() content?.invoke()
} }
} }
} }

View File

@ -2,10 +2,15 @@ package app.revanced.manager.ui.screen
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement 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.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items 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.ListItem
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
@ -13,14 +18,17 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import app.revanced.manager.R import app.revanced.manager.R
import app.revanced.manager.data.room.apps.installed.InstalledApp 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.AppIcon
import app.revanced.manager.ui.component.AppLabel import app.revanced.manager.ui.component.AppLabel
import app.revanced.manager.ui.component.LoadingIndicator import app.revanced.manager.ui.component.LoadingIndicator
import app.revanced.manager.ui.component.NotificationCard
import app.revanced.manager.ui.viewmodel.InstalledAppsViewModel import app.revanced.manager.ui.viewmodel.InstalledAppsViewModel
import org.koin.androidx.compose.getViewModel import org.koin.androidx.compose.getViewModel
@ -31,43 +39,56 @@ fun InstalledAppsScreen(
) { ) {
val installedApps by viewModel.apps.collectAsStateWithLifecycle(initialValue = null) val installedApps by viewModel.apps.collectAsStateWithLifecycle(initialValue = null)
LazyColumn( Column {
modifier = Modifier.fillMaxSize(), if (!Aapt.supportsDevice())
horizontalAlignment = Alignment.CenterHorizontally, Box(modifier = Modifier.padding(16.dp)) {
verticalArrangement = installedApps?.let { if (it.isEmpty()) Arrangement.Center else Arrangement.Top } ?: Arrangement.Center NotificationCard(
) { color = MaterialTheme.colorScheme.errorContainer,
installedApps?.let { installedApps -> icon = Icons.Outlined.WarningAmber,
text = stringResource(
if (installedApps.isNotEmpty()) { R.string.unsupported_architecture_warning
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() } 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() }
}
} }
} }

View File

@ -11,6 +11,8 @@
<string name="select_app">Select an app</string> <string name="select_app">Select an app</string>
<string name="select_patches">Select patches</string> <string name="select_patches">Select patches</string>
<string name="unsupported_architecture_warning">Patching on ARMv7 devices is not yet supported and will most likely fail.</string>
<string name="import_">Import</string> <string name="import_">Import</string>
<string name="import_bundle">Import patch bundle</string> <string name="import_bundle">Import patch bundle</string>
<string name="bundle_patches">Bundle patches</string> <string name="bundle_patches">Bundle patches</string>