From 513e820e70c97ec9c9cb39fbba6d0556b32c41d6 Mon Sep 17 00:00:00 2001
From: Juby210 <31005896+Juby210@users.noreply.github.com>
Date: Sun, 13 Mar 2022 00:23:09 +0100
Subject: [PATCH] add setting to change app name and package name
---
app/src/main/AndroidManifest.xml | 6 ++-
.../manager/preferences/PreferencesHolder.kt | 2 +
.../manager/ui/components/PluginsList.kt | 14 +-----
.../manager/ui/components/TextField.kt | 44 +++++++++++++++++++
.../aliucord/manager/ui/screens/HomeScreen.kt | 8 ++--
.../manager/ui/screens/SettingsScreen.kt | 19 ++++++++
.../com/aliucord/manager/utils/Const.kt | 1 +
.../aliucord/manager/utils/ManifestPatcher.kt | 28 ++++++++----
app/src/main/res/values/strings.xml | 2 +
9 files changed, 97 insertions(+), 27 deletions(-)
create mode 100644 app/src/main/kotlin/com/aliucord/manager/ui/components/TextField.kt
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e4a2d24..215f6a4 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -16,9 +16,13 @@
+
+
-
\ No newline at end of file
+
diff --git a/app/src/main/kotlin/com/aliucord/manager/preferences/PreferencesHolder.kt b/app/src/main/kotlin/com/aliucord/manager/preferences/PreferencesHolder.kt
index 6c7ca89..273fc3a 100644
--- a/app/src/main/kotlin/com/aliucord/manager/preferences/PreferencesHolder.kt
+++ b/app/src/main/kotlin/com/aliucord/manager/preferences/PreferencesHolder.kt
@@ -15,4 +15,6 @@ object Prefs {
val debuggable = boolPreference("debuggable")
val useDexFromStorage = boolPreference("use_dex_from_storage")
val dexLocation = stringPreference("dex_location", "$aliucordDir/Injector.dex")
+ val appName = stringPreference("app_name", "Aliucord")
+ val packageName = stringPreference("package_name", "com.aliucord")
}
diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/components/PluginsList.kt b/app/src/main/kotlin/com/aliucord/manager/ui/components/PluginsList.kt
index 7a410ec..4e5ac90 100644
--- a/app/src/main/kotlin/com/aliucord/manager/ui/components/PluginsList.kt
+++ b/app/src/main/kotlin/com/aliucord/manager/ui/components/PluginsList.kt
@@ -8,11 +8,8 @@ package com.aliucord.manager.ui.components
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
-import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions
-import androidx.compose.material.OutlinedTextField
-import androidx.compose.material.TextFieldDefaults
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Delete
import androidx.compose.material.icons.filled.Search
@@ -39,22 +36,13 @@ fun PluginsList() = Column(
var search by remember { mutableStateOf("") }
if (plugins.isNotEmpty()) {
- OutlinedTextField(
- modifier = Modifier.fillMaxWidth(),
- singleLine = true,
+ TextField(
value = search,
onValueChange = { search = it },
placeholder = { Text(stringResource(R.string.search)) },
trailingIcon = { Icon(Icons.Default.Search, stringResource(R.string.search_plugins)) },
keyboardOptions = KeyboardOptions(autoCorrect = false, imeAction = ImeAction.Search),
keyboardActions = KeyboardActions { focusManager.clearFocus() },
- shape = RoundedCornerShape(16.dp),
- colors = TextFieldDefaults.outlinedTextFieldColors(
- textColor = MaterialTheme.colorScheme.onSecondaryContainer,
- backgroundColor = MaterialTheme.colorScheme.secondaryContainer,
- focusedBorderColor = MaterialTheme.colorScheme.outline,
- cursorColor = MaterialTheme.colorScheme.primary
- )
)
LazyColumn(
diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/components/TextField.kt b/app/src/main/kotlin/com/aliucord/manager/ui/components/TextField.kt
new file mode 100644
index 0000000..b14fe54
--- /dev/null
+++ b/app/src/main/kotlin/com/aliucord/manager/ui/components/TextField.kt
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2022 Juby210 & zt
+ * Licensed under the Open Software License version 3.0
+ */
+
+package com.aliucord.manager.ui.components
+
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.text.KeyboardActions
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material.*
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
+
+@Composable
+fun TextField(
+ value: String,
+ onValueChange: (String) -> Unit,
+ placeholder: @Composable (() -> Unit)? = null,
+ label: @Composable (() -> Unit)? = null,
+ trailingIcon: @Composable (() -> Unit)? = null,
+ keyboardOptions: KeyboardOptions = KeyboardOptions(autoCorrect = false),
+ keyboardActions: KeyboardActions = KeyboardActions.Default,
+) = OutlinedTextField(
+ modifier = Modifier.fillMaxWidth(),
+ singleLine = true,
+ value = value,
+ onValueChange = onValueChange,
+ placeholder = placeholder,
+ label = label,
+ trailingIcon = trailingIcon,
+ keyboardOptions = keyboardOptions,
+ keyboardActions = keyboardActions,
+ shape = RoundedCornerShape(16.dp),
+ colors = TextFieldDefaults.outlinedTextFieldColors(
+ textColor = MaterialTheme.colorScheme.onSecondaryContainer,
+ backgroundColor = MaterialTheme.colorScheme.secondaryContainer,
+ focusedBorderColor = MaterialTheme.colorScheme.outline,
+ cursorColor = MaterialTheme.colorScheme.primary
+ )
+)
diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/HomeScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/HomeScreen.kt
index 90277c8..ecca905 100644
--- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/HomeScreen.kt
+++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/HomeScreen.kt
@@ -48,7 +48,7 @@ fun HomeScreen(navigator: DestinationsNavigator) {
var supportedVersion by remember { mutableStateOf(null) }
val installedVersion = remember {
try {
- packageManager.getPackageInfo("com.aliucord", 0).versionName
+ packageManager.getPackageInfo(Prefs.packageName.get(), 0).versionName
} catch (th: Throwable) {
"-"
}
@@ -102,7 +102,7 @@ fun HomeScreen(navigator: DestinationsNavigator) {
) {
Column {
Text(
- "Aliucord",
+ "Aliucord${Prefs.packageName.get().let { if (it != "com.aliucord") " ($it)" else ""}}",
style = MaterialTheme.typography.titleLarge,
color = MaterialTheme.colorScheme.primary
)
@@ -180,7 +180,7 @@ fun HomeScreen(navigator: DestinationsNavigator) {
modifier = Modifier.weight(1f),
colors = ButtonDefaults.buttonColors(containerColor = MaterialTheme.colorScheme.secondaryContainer),
onClick = {
- val packageURI = Uri.parse("package:com.aliucord")
+ val packageURI = Uri.parse("package:${Prefs.packageName.get()}")
val uninstallIntent = Intent(Intent.ACTION_DELETE, packageURI)
context.startActivity(uninstallIntent)
@@ -197,7 +197,7 @@ fun HomeScreen(navigator: DestinationsNavigator) {
Button(
modifier = Modifier.weight(1f),
onClick = {
- packageManager.getLaunchIntentForPackage("com.aliucord")?.let {
+ packageManager.getLaunchIntentForPackage(Prefs.packageName.get())?.let {
context.startActivity(it)
} ?: Toast.makeText(context, "Failed to launch Aliucord", Toast.LENGTH_LONG)
.show()
diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/SettingsScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/SettingsScreen.kt
index 42ef55d..6d48e1e 100644
--- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/SettingsScreen.kt
+++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/SettingsScreen.kt
@@ -10,7 +10,11 @@ import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.text.KeyboardActions
+import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.ContentAlpha
+import androidx.compose.material.OutlinedTextField
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
@@ -22,6 +26,7 @@ import androidx.compose.ui.unit.dp
import com.aliucord.manager.R
import com.aliucord.manager.preferences.Prefs
import com.aliucord.manager.ui.components.ListItem
+import com.aliucord.manager.ui.components.TextField
import com.aliucord.manager.ui.components.settings.*
import com.ramcosta.composedestinations.annotation.Destination
@@ -56,6 +61,20 @@ fun SettingsScreen() = Column(
preference = Prefs.replaceBg
)
+ TextField(
+ value = Prefs.appName.get(),
+ onValueChange = { Prefs.appName.set(it) },
+ placeholder = { Text(stringResource(R.string.app_name_setting)) },
+ label = { Text(stringResource(R.string.app_name_setting)) },
+ )
+
+ TextField(
+ value = Prefs.packageName.get(),
+ onValueChange = { Prefs.packageName.set(it) },
+ placeholder = { Text(stringResource(R.string.package_name)) },
+ label = { Text(stringResource(R.string.package_name)) },
+ )
+
val devModeOn = Prefs.devMode.get()
PreferenceItem(
diff --git a/app/src/main/kotlin/com/aliucord/manager/utils/Const.kt b/app/src/main/kotlin/com/aliucord/manager/utils/Const.kt
index 639385a..d1c85b8 100644
--- a/app/src/main/kotlin/com/aliucord/manager/utils/Const.kt
+++ b/app/src/main/kotlin/com/aliucord/manager/utils/Const.kt
@@ -22,3 +22,4 @@ val gson = Gson()
const val MANAGE_EXTERNAL_STORAGE = "android.permission.MANAGE_EXTERNAL_STORAGE"
const val ANDROID_NAMESPACE = "http://schemas.android.com/apk/res/android"
const val REQUEST_LEGACY_STORAGE = "requestLegacyExternalStorage"
+const val DEBUGGABLE = "debugabble"
diff --git a/app/src/main/kotlin/com/aliucord/manager/utils/ManifestPatcher.kt b/app/src/main/kotlin/com/aliucord/manager/utils/ManifestPatcher.kt
index d923c0c..290a208 100644
--- a/app/src/main/kotlin/com/aliucord/manager/utils/ManifestPatcher.kt
+++ b/app/src/main/kotlin/com/aliucord/manager/utils/ManifestPatcher.kt
@@ -3,15 +3,13 @@
* Licensed under the Open Software License version 3.0
*/
-
package com.aliucord.manager.utils
import com.aliucord.manager.preferences.Prefs
import pxb.android.axml.*
fun patchManifest(manifestBytes: ByteArray): ByteArray {
- val packageName = "com.aliucord"
- val debuggable = Prefs.debuggable.get()
+ val packageName = Prefs.packageName.get()
val reader = AxmlReader(manifestBytes)
val writer = AxmlWriter()
@@ -30,25 +28,37 @@ fun patchManifest(manifestBytes: ByteArray): ByteArray {
return when (name) {
"uses-sdk" -> ReplaceAttrsVisitor(nv, mapOf("targetSdkVersion" to 29))
"permission" -> ReplaceAttrsVisitor(nv, mapOf("name" to "$packageName.permission.CONNECT"))
- "application" -> object :
- ReplaceAttrsVisitor(nv, mapOf(REQUEST_LEGACY_STORAGE to 1, "label" to "Aliucord", "debuggable" to debuggable)) {
+ "application" -> object : ReplaceAttrsVisitor(
+ nv,
+ mapOf(REQUEST_LEGACY_STORAGE to 1, "label" to Prefs.appName.get(), DEBUGGABLE to Prefs.debuggable.get())
+ ) {
private var addLegacyStorage = true
- private var addDebuggable = debuggable
+ private var addDebuggable = Prefs.debuggable.get()
override fun attr(ns: String?, name: String, resourceId: Int, type: Int, value: Any?) {
super.attr(ns, name, resourceId, type, value)
if (name == REQUEST_LEGACY_STORAGE) addLegacyStorage = false
+ else if (name == DEBUGGABLE) addDebuggable = false
}
override fun child(ns: String?, name: String): NodeVisitor {
val visitor = super.child(ns, name)
return when (name) {
- "activity" -> ReplaceAttrsVisitor(visitor, mapOf("label" to "Aliucord"))
+ "activity" -> ReplaceAttrsVisitor(visitor, mapOf("label" to Prefs.appName.get()))
"service" -> object : NodeVisitor(visitor) {
+ private var disableService = false
+
override fun attr(ns: String?, name: String, resourceId: Int, type: Int, value: Any?) {
+ if (name == "name" && (
+ value == "com.google.android.gms.analytics.AnalyticsService" ||
+ value == "com.google.android.gms.analytics.AnalyticsJobService")
+ ) disableService = true
super.attr(
ns, name, resourceId, type,
- if (value is String && value.endsWith("CONNECT")) "$packageName.permission.CONNECT" else value
+ if (value is String && value.endsWith("CONNECT"))
+ "$packageName.permission.CONNECT"
+ else if (disableService && name == "enabled") 0
+ else value
)
}
}
@@ -79,7 +89,7 @@ fun patchManifest(manifestBytes: ByteArray): ByteArray {
if (addLegacyStorage)
super.attr(ANDROID_NAMESPACE, REQUEST_LEGACY_STORAGE, -1, TYPE_INT_BOOLEAN, 1)
if (addDebuggable)
- super.attr(ANDROID_NAMESPACE, "debuggable", -1, TYPE_INT_BOOLEAN, 1)
+ super.attr(ANDROID_NAMESPACE, DEBUGGABLE, -1, TYPE_INT_BOOLEAN, 1)
super.end()
}
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 2139340..6daa6c7 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -46,4 +46,6 @@
Select APK
Download Method
Changelog Media
+ App Name
+ Package Name