diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 8f8407d15..592212bfa 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -9,9 +9,9 @@ if (useKeystoreProperties) { } plugins { - id("com.android.application") - id("com.google.devtools.ksp") - id("androidx.navigation.safeargs") + alias(libs.plugins.android.application) + alias(libs.plugins.google.devtools.ksp) + alias(libs.plugins.androidx.navigation.safeargs) id("kotlin-parcelize") } @@ -91,28 +91,28 @@ android { } dependencies { - implementation("androidx.core:core-ktx:1.17.0") - implementation("androidx.appcompat:appcompat:1.7.1") - implementation("androidx.constraintlayout:constraintlayout:2.2.1") - implementation("androidx.activity:activity-ktx:1.12.3") - implementation("androidx.fragment:fragment-ktx:1.8.9") - implementation("androidx.navigation:navigation-fragment-ktx:2.9.7") - implementation("androidx.navigation:navigation-ui-ktx:2.9.7") - implementation("androidx.preference:preference-ktx:1.2.1") - implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0") - - val lifecycleVersion = "2.10.0" - implementation("androidx.lifecycle:lifecycle-viewmodel:$lifecycleVersion") - implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycleVersion") - - implementation("com.google.android.material:material:1.13.0") - - implementation("org.bouncycastle:bcprov-jdk18on:1.83") - - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.10.2") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2") - - val glideVersion = "5.0.5" - implementation("com.github.bumptech.glide:glide:$glideVersion") - ksp("com.github.bumptech.glide:ksp:$glideVersion") + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.appcompat) + implementation(libs.androidx.constraintlayout) + implementation(libs.androidx.activity.ktx) + implementation(libs.androidx.fragment.ktx) + implementation(libs.androidx.navigation.fragment.ktx) + implementation(libs.androidx.navigation.ui.ktx) + implementation(libs.androidx.preference.ktx) + implementation(libs.androidx.swiperefreshlayout) + + implementation(libs.androidx.lifecycle.viewmodel) + implementation(libs.androidx.lifecycle.viewmodel.ktx) + + implementation(libs.material) + + implementation(libs.bcprov.jdk18on) + + implementation(libs.kotlinx.coroutines.core) + implementation(libs.kotlinx.coroutines.android) + implementation(libs.kotlin.retry) + implementation(libs.kotlin.retry.result) + + implementation(libs.glide.core) + ksp(libs.glide.ksp) } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b6483e7a6..eccaa489c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -19,6 +19,7 @@ , channel: ReleaseChannel): RPackage { return variants.find { it.releaseChannel >= channel } ?: variants.last() } -enum class PackageSource(@StringRes val uiName: Int) { +enum class PackageSource(@param:StringRes val uiName: Int) { GrapheneOS(R.string.pkg_source_grapheneos), GrapheneOS_build(R.string.pkg_source_grapheneos_build), Mirror(R.string.pkg_source_mirror), @@ -372,7 +373,7 @@ class RPackage(val common: RPackageContainer, val versionCode: Long, val abis: A res.add(apk) Apk.Type.LANGUAGE -> { - if (neededLocales.contains(Locale(qualifier))) { + if (neededLocales.contains(Locale.Builder().setLanguage(qualifier).build())) { res.add(apk) } } @@ -427,7 +428,7 @@ class RPackage(val common: RPackageContainer, val versionCode: Long, val abis: A val set = ArraySet(len) for (i in 0 until len) { val locale = locales.get(i) - set.add(Locale(locale.language)) + set.add(Locale.Builder().setLanguage(locale.language).build()) } cache = Pair(tags, set) localeCache = cache diff --git a/app/src/main/java/app/grapheneos/apps/ui/ActivityUtils.kt b/app/src/main/java/app/grapheneos/apps/ui/ActivityUtils.kt index 85db62be4..f0848edd6 100644 --- a/app/src/main/java/app/grapheneos/apps/ui/ActivityUtils.kt +++ b/app/src/main/java/app/grapheneos/apps/ui/ActivityUtils.kt @@ -200,7 +200,7 @@ class PendingActivityIntent(val intent: Intent) : PendingAction() { } } -class PendingDialog(@IdRes val id: Int, val args: Bundle) : PendingAction() { +class PendingDialog(@param:IdRes val id: Int, val args: Bundle) : PendingAction() { override fun toBundleInner() = Bundle().apply { putInt(KEY_TYPE, TYPE_DIALOG) putInt(KEY_DIALOG_ID, id) diff --git a/app/src/main/java/app/grapheneos/apps/ui/MainActivity.kt b/app/src/main/java/app/grapheneos/apps/ui/MainActivity.kt index 9642f74e4..4dca73d41 100644 --- a/app/src/main/java/app/grapheneos/apps/ui/MainActivity.kt +++ b/app/src/main/java/app/grapheneos/apps/ui/MainActivity.kt @@ -60,10 +60,7 @@ class MainActivity : AppCompatActivity() { navController = supportFragmentManager.findFragmentById(R.id.container)!!.findNavController() setSupportActionBar(views.toolbar) - // doesn't work properly if setup in onCreate() if activity is recreated - mainHandler.post { - NavigationUI.setupWithNavController(views.toolbar, navController) - } + NavigationUI.setupWithNavController(views.toolbar, navController) intent.let { if (it.action == Intent.ACTION_SHOW_APP_INFO) { diff --git a/app/src/main/java/app/grapheneos/apps/util/BundleUtils.kt b/app/src/main/java/app/grapheneos/apps/util/BundleUtils.kt index f2d28f806..b4e55efb6 100644 --- a/app/src/main/java/app/grapheneos/apps/util/BundleUtils.kt +++ b/app/src/main/java/app/grapheneos/apps/util/BundleUtils.kt @@ -91,7 +91,7 @@ fun unmarshallParcelableInner(bytes: ByteArray, type: Class): Pa if (obj is Bundle) { obj.classLoader = ApplicationImpl::class.java.classLoader } - return obj as Parcelable + return obj } finally { parcel.recycle() } diff --git a/build.gradle.kts b/build.gradle.kts index 5acc0fec8..bbeeaf04b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,13 +1,8 @@ plugins { - id("com.android.application") version "9.0.0" apply false - id("androidx.navigation.safeargs") version "2.9.7" apply false -} - -buildscript { - dependencies { - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.3.0") - classpath("com.google.devtools.ksp:symbol-processing-gradle-plugin:2.3.5") - } + alias(libs.plugins.android.application) apply false + alias(libs.plugins.kotlin.android) apply false + alias(libs.plugins.androidx.navigation.safeargs) apply false + alias(libs.plugins.google.devtools.ksp) apply false } allprojects { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 000000000..9ba91ce5f --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,45 @@ +[versions] +activityKtx = "1.12.3" +agp = "9.0.0" +appcompat = "1.7.1" +bcprovJdk18on = "1.83" +constraintlayout = "2.2.1" +coreKtx = "1.17.0" +fragmentKtx = "1.8.9" +glide = "5.0.5" +kotlin = "2.3.0" +kotlinRetry = "2.0.2" +kotlinxCoroutines = "1.10.2" +ksp = "2.3.5" +lifecycle = "2.10.0" +material = "1.13.0" +navigation = "2.9.7" +preferenceKtx = "1.2.1" +swiperefreshlayout = "1.2.0" + +[libraries] +androidx-activity-ktx = { group = "androidx.activity", name = "activity-ktx", version.ref = "activityKtx" } +androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } +androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +androidx-fragment-ktx = { group = "androidx.fragment", name = "fragment-ktx", version.ref = "fragmentKtx" } +androidx-lifecycle-viewmodel = { group = "androidx.lifecycle", name = "lifecycle-viewmodel", version.ref = "lifecycle" } +androidx-lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifecycle-viewmodel-ktx", version.ref = "lifecycle" } +androidx-navigation-fragment-ktx = { group = "androidx.navigation", name = "navigation-fragment-ktx", version.ref = "navigation" } +androidx-navigation-ui-ktx = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "navigation" } +androidx-preference-ktx = { group = "androidx.preference", name = "preference-ktx", version.ref = "preferenceKtx" } +androidx-swiperefreshlayout = { group = "androidx.swiperefreshlayout", name = "swiperefreshlayout", version.ref = "swiperefreshlayout" } +bcprov-jdk18on = { group = "org.bouncycastle", name = "bcprov-jdk18on", version.ref = "bcprovJdk18on" } +glide-core = { group = "com.github.bumptech.glide", name = "glide", version.ref = "glide" } +glide-ksp = { group = "com.github.bumptech.glide", name = "ksp", version.ref = "glide" } +kotlin-retry = { group = "com.michael-bull.kotlin-retry", name = "kotlin-retry", version.ref = "kotlinRetry" } +kotlin-retry-result = { group = "com.michael-bull.kotlin-retry", name = "kotlin-retry-result", version.ref = "kotlinRetry" } +kotlinx-coroutines-android = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-android", version.ref = "kotlinxCoroutines" } +kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "kotlinxCoroutines" } +material = { group = "com.google.android.material", name = "material", version.ref = "material" } + +[plugins] +android-application = { id = "com.android.application", version.ref = "agp" } +androidx-navigation-safeargs = { id = "androidx.navigation.safeargs", version.ref = "navigation" } +google-devtools-ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } +kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index bd7b09b91..dd9d20c7b 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -1464,6 +1464,11 @@ + + + + + @@ -1517,6 +1522,11 @@ + + + + + @@ -1538,6 +1548,11 @@ + + + + + @@ -1551,6 +1566,11 @@ + + + + + @@ -1566,6 +1586,11 @@ + + + + + @@ -1805,6 +1830,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3021,6 +3085,11 @@ + + + + +