From 6fdc1b8aaf66c090fd2827a17b0c627dbb4d72be Mon Sep 17 00:00:00 2001 From: pylixonly <82711525+pylixonly@users.noreply.github.com> Date: Mon, 14 Jul 2025 20:31:43 +0800 Subject: [PATCH] feat: more dynamically set app name, add WintryColor option as an icon, revert versioning to 1.0.0 --- app/build.gradle.kts | 5 +++-- .../com/aliucord/manager/manager/PathManager.kt | 8 +++++++- .../manager/download/AndroidDownloadManager.kt | 4 ++-- .../com/aliucord/manager/patcher/util/Signer.kt | 7 ++++--- .../aliucord/manager/ui/components/ProjectHeader.kt | 2 +- .../manager/ui/screens/iconopts/IconOptionsMode.kt | 1 + .../manager/ui/screens/iconopts/IconOptionsModel.kt | 7 +++++++ .../ui/screens/iconopts/IconOptionsScreen.kt | 7 +++++++ .../manager/ui/screens/patchopts/PatchOptions.kt | 13 +++++++++---- .../ui/screens/patchopts/PatchOptionsScreen.kt | 1 + 10 files changed, 42 insertions(+), 13 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 70641b0..6e8f1cc 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -24,8 +24,8 @@ android { defaultConfig { minSdk = 28 targetSdk = 36 - versionCode = 10_00_02 - versionName = "1.0.2" + versionCode = 10_00_00 + versionName = "1.0.0" vectorDrawables { useSupportLibrary = true @@ -34,6 +34,7 @@ android { buildConfigField("String", "APPLICATION_NAME", "\"Wintry Manager\"") buildConfigField("String", "TAG", "\"WintryManager\"") + buildConfigField("String", "GITHUB_ORG", "\"wtcord\"") buildConfigField("String", "SUPPORT_SERVER", "\"ybPB5tgD\"") buildConfigField("String", "BACKEND_URL", "\"https://aliucord.com/\"") diff --git a/app/src/main/kotlin/com/aliucord/manager/manager/PathManager.kt b/app/src/main/kotlin/com/aliucord/manager/manager/PathManager.kt index 28c15ba..ba4226f 100644 --- a/app/src/main/kotlin/com/aliucord/manager/manager/PathManager.kt +++ b/app/src/main/kotlin/com/aliucord/manager/manager/PathManager.kt @@ -17,6 +17,12 @@ class PathManager( */ val aliucordDir = Environment.getExternalStorageDirectory().resolve("Aliucord") + /** + * The Wintry folder where shared Wintry files are stored. + * Standard path: `~/Wintry` + */ + val wintryDir = Environment.getExternalStorageDirectory().resolve("Wintry") + /** * The directory in external storage in which plugins are stored by Aliucord. */ @@ -30,7 +36,7 @@ class PathManager( /** * Global keystore used for signing APKs. */ - val keystoreFile = aliucordDir.resolve("ks.keystore") + val keystoreFile = wintryDir.resolve("ks.keystore") /** * The internal directory used for downloading components related to patching, and diff --git a/app/src/main/kotlin/com/aliucord/manager/manager/download/AndroidDownloadManager.kt b/app/src/main/kotlin/com/aliucord/manager/manager/download/AndroidDownloadManager.kt index 2f202cd..27e3abb 100644 --- a/app/src/main/kotlin/com/aliucord/manager/manager/download/AndroidDownloadManager.kt +++ b/app/src/main/kotlin/com/aliucord/manager/manager/download/AndroidDownloadManager.kt @@ -36,11 +36,11 @@ class AndroidDownloadManager(application: Application) : IDownloadManager { // Create and start a download in the system DownloadManager val downloadId = DownloadManager.Request(url.toUri()) - .setTitle("Aliucord Manager") + .setTitle(BuildConfig.APPLICATION_NAME) .setDescription("Downloading ${out.name}...") .setDestinationUri(Uri.fromFile(out)) .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE) - .addRequestHeader("User-Agent", "Aliucord Manager/${BuildConfig.VERSION_NAME}") + .addRequestHeader("User-Agent", "${BuildConfig.APPLICATION_NAME}/${BuildConfig.VERSION_NAME}") .let(downloadManager::enqueue) // Repeatedly request download state until it is finished diff --git a/app/src/main/kotlin/com/aliucord/manager/patcher/util/Signer.kt b/app/src/main/kotlin/com/aliucord/manager/patcher/util/Signer.kt index 20e29c6..bf4b4c6 100644 --- a/app/src/main/kotlin/com/aliucord/manager/patcher/util/Signer.kt +++ b/app/src/main/kotlin/com/aliucord/manager/patcher/util/Signer.kt @@ -7,6 +7,7 @@ package com.aliucord.manager.patcher.util import com.aliucord.manager.manager.PathManager import com.android.apksig.ApkSigner +import dev.wintry.manager.BuildConfig import org.bouncycastle.asn1.x500.X500Name import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo import org.bouncycastle.cert.X509v3CertificateBuilder @@ -31,7 +32,7 @@ object Signer : KoinComponent { // Create new keystore if it doesn't exist if (!paths.keystoreFile.exists()) { - paths.aliucordDir.mkdirs() + paths.wintryDir.mkdirs() newKeystore(paths.keystoreFile) } @@ -42,7 +43,7 @@ object Signer : KoinComponent { val certificate = keyStore.getCertificate(alias) as X509Certificate ApkSigner.SignerConfig.Builder( - "Aliucord Manager signer", + "${BuildConfig.APPLICATION_NAME} signer", keyStore.getKey(alias, password) as PrivateKey, listOf(certificate) ).build() @@ -64,7 +65,7 @@ object Signer : KoinComponent { do serialNumber = SecureRandom().nextInt().toBigInteger() while (serialNumber < BigInteger.ZERO) - val x500Name = X500Name("CN=Aliucord Manager") + val x500Name = X500Name("CN=${BuildConfig.APPLICATION_NAME}") val pair = KeyPairGenerator.getInstance("RSA").run { initialize(2048) generateKeyPair() diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/components/ProjectHeader.kt b/app/src/main/kotlin/com/aliucord/manager/ui/components/ProjectHeader.kt index 931e2c5..20a8521 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/components/ProjectHeader.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/components/ProjectHeader.kt @@ -51,7 +51,7 @@ fun ProjectHeader( Row( horizontalArrangement = Arrangement.Center, ) { - TextButton(onClick = { uriHandler.openUri("https://github.com/Aliucord") }) { + TextButton(onClick = { uriHandler.openUri("https://github.com/${BuildConfig.GITHUB_ORG}") }) { Icon( painter = painterResource(R.drawable.ic_account_github_white_24dp), contentDescription = null, diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/iconopts/IconOptionsMode.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/iconopts/IconOptionsMode.kt index 373d646..42a3387 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/iconopts/IconOptionsMode.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/iconopts/IconOptionsMode.kt @@ -6,6 +6,7 @@ import androidx.compose.runtime.Immutable enum class IconOptionsMode { Original, OldDiscord, + Wintry, Aliucord, CustomColor, CustomImage, diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/iconopts/IconOptionsModel.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/iconopts/IconOptionsModel.kt index d97045e..f55db8f 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/iconopts/IconOptionsModel.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/iconopts/IconOptionsModel.kt @@ -74,11 +74,17 @@ class IconOptionsModel( // ---------- Other ---------- // init { when (prefilledOptions) { + is IconReplacement.CustomColor if prefilledOptions.color == IconReplacement.WintryColor -> { + changeMode(IconOptionsMode.Wintry) + initSelectedColor(IconReplacement.WintryColor) + } + is IconReplacement.CustomColor if prefilledOptions.color == IconReplacement.AliucordColor -> { changeMode(IconOptionsMode.Aliucord) initSelectedColor(IconReplacement.AliucordColor) } + is IconReplacement.CustomColor -> { changeMode(IconOptionsMode.CustomColor) initSelectedColor(prefilledOptions.color) @@ -98,6 +104,7 @@ class IconOptionsModel( return when (mode) { IconOptionsMode.Original -> IconReplacement.Original IconOptionsMode.OldDiscord -> IconReplacement.OldDiscord + IconOptionsMode.Wintry -> IconReplacement.CustomColor(IconReplacement.WintryColor) IconOptionsMode.Aliucord -> IconReplacement.CustomColor(IconReplacement.AliucordColor) IconOptionsMode.CustomColor -> IconReplacement.CustomColor(color = selectedColor.toColor()) IconOptionsMode.CustomImage -> IconReplacement.CustomImage( diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/iconopts/IconOptionsScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/iconopts/IconOptionsScreen.kt index a54e3d5..ec5fc0d 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/iconopts/IconOptionsScreen.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/iconopts/IconOptionsScreen.kt @@ -119,6 +119,12 @@ fun IconOptionsScreenContent( selected = mode == IconOptionsMode.OldDiscord, onClick = remember { { setMode(IconOptionsMode.OldDiscord) } }, ) + RadioSelectorItem( + name = stringResource(R.string.wintry), + description = stringResource(R.string.iconopts_variant_desc_wintry), + selected = mode == IconOptionsMode.Wintry, + onClick = remember { { setMode(IconOptionsMode.Wintry) } }, + ) RadioSelectorItem( name = stringResource(R.string.aliucord), description = stringResource(R.string.iconopts_variant_desc_aliucord), @@ -214,6 +220,7 @@ private fun IconPreview( IconOptionsMode.Original -> PatchOptions.IconReplacement.BlurpleColor IconOptionsMode.OldDiscord -> PatchOptions.IconReplacement.OldBlurpleColor IconOptionsMode.Aliucord -> PatchOptions.IconReplacement.AliucordColor + IconOptionsMode.Wintry -> PatchOptions.IconReplacement.WintryColor IconOptionsMode.CustomColor -> selectedColor.toColor() IconOptionsMode.CustomImage -> error("unreachable") } diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/patchopts/PatchOptions.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/patchopts/PatchOptions.kt index f79cc4e..efa728b 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/patchopts/PatchOptions.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/patchopts/PatchOptions.kt @@ -108,6 +108,11 @@ data class PatchOptions( */ val AliucordColor = Color(0xFF00C853) + /** + * The default Wintry background color. + */ + val WintryColor = Color(0xFF133E87) + /** * The new Discord blurple used in icons. */ @@ -122,12 +127,12 @@ data class PatchOptions( companion object { val Default = PatchOptions( - appName = "Aliucord", - packageName = "com.aliucord", + appName = "Wintry", + packageName = "dev.wintry.app", debuggable = false, - iconReplacement = IconReplacement.CustomColor(IconReplacement.AliucordColor), + iconReplacement = IconReplacement.CustomColor(IconReplacement.WintryColor), versionPreference = VersionPreference.Stable, - customVersionCode = "126021", + customVersionCode = "", ) } } diff --git a/app/src/main/kotlin/com/aliucord/manager/ui/screens/patchopts/PatchOptionsScreen.kt b/app/src/main/kotlin/com/aliucord/manager/ui/screens/patchopts/PatchOptionsScreen.kt index 051719e..b8a954d 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ui/screens/patchopts/PatchOptionsScreen.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ui/screens/patchopts/PatchOptionsScreen.kt @@ -85,6 +85,7 @@ class PatchOptionsScreen( selectedColor = when (iconModel.mode) { IconOptionsMode.Original -> PatchOptions.IconReplacement.BlurpleColor IconOptionsMode.OldDiscord -> PatchOptions.IconReplacement.OldBlurpleColor + IconOptionsMode.Wintry -> PatchOptions.IconReplacement.WintryColor IconOptionsMode.Aliucord -> PatchOptions.IconReplacement.AliucordColor IconOptionsMode.CustomColor -> iconModel.selectedColor.toColor() IconOptionsMode.CustomImage -> null