Skip to content

Commit 1e17c19

Browse files
Localize tab names,
Load bookmarks in the new arch, Loading indicator on tv, Show failed to load feeds separately on tv, Check extensions count before loading all of them in the new arch, Display empty feeds as if it an error in the new arch, Refactored build.gradle.kts, Use a single statement to set room schema directory, Update android gradle plugin, Check crash file existence before reading it, Use gradle version catalog references only if it's existence occurs more than for a single time, Limit title max lines on tv to 2
1 parent e61dd37 commit 1e17c19

File tree

104 files changed

+861
-662
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+861
-662
lines changed

app/build.gradle.kts

Lines changed: 42 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -1,83 +1,57 @@
1+
import com.android.build.api.dsl.ApplicationBaseFlavor
12
import com.android.build.api.dsl.ApplicationProductFlavor
23
import java.util.Locale
34
import com.squareup.moshi.Moshi
45
import com.squareup.moshi.adapter
56
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
67

78
plugins {
8-
alias(libs.plugins.android.application)
9-
alias(libs.plugins.kotlin.android)
10-
id("com.google.devtools.ksp").version("2.0.21-1.0.25")
11-
kotlin("plugin.serialization") version "2.0.20"
9+
alias(libs.plugins.android.app)
10+
alias(libs.plugins.android.kotlin)
11+
alias(libs.plugins.room)
1212
alias(libs.plugins.compose.compiler)
13-
id("androidx.room").version(libs.versions.roomRuntime)
13+
alias(libs.plugins.kotlin.ksp)
14+
alias(libs.plugins.kotlin.serialization)
1415
}
1516

16-
val useSdk = 35
17-
val releaseVersion = "1.0.5.2"
17+
val releaseVersion = "1.0.5.3"
1818
val packageName = "com.mrboomdev.awery"
1919

20-
// Note: Please, don't edit it if you don't know what it does
21-
val startVersionCode = 2808
22-
val startMillis = 1719658313080
20+
fun ApplicationBaseFlavor.setupVersion() {
21+
// Note: Please, don't edit it if you don't know what it does
22+
val startVersionCode = 2808
23+
val startMillis = 1719658313080
2324

24-
val gitCommitHash = providers.exec {
25-
commandLine("git", "rev-parse", "--short", "HEAD")
26-
}.standardOutput.asText.get().trim()
25+
val gitCommitHash = providers.exec {
26+
commandLine("git", "rev-parse", "--short", "HEAD")
27+
}.standardOutput.asText.get().trim()
28+
29+
versionName = "$releaseVersion-$gitCommitHash"
30+
31+
versionCode = (startVersionCode + (System.currentTimeMillis() - startMillis) / 1000).let {
32+
if(it.toInt() <= 0 || it >= Int.MAX_VALUE) {
33+
throw IllegalStateException("We've reached an Integer limit! " +
34+
"Now Awery 2 must be released! Generated version code: $it")
35+
}
36+
37+
it.toInt()
38+
}
39+
}
40+
41+
room {
42+
schemaDirectory("$projectDir/schemas")
43+
}
2744

2845
android {
2946
namespace = packageName
30-
compileSdk = useSdk
47+
compileSdk = 35
3148

3249
defaultConfig {
3350
applicationId = packageName
34-
targetSdk = useSdk
51+
targetSdk = 35
3552
minSdk = 25
36-
37-
buildConfigField("boolean", "IS_BETA",
38-
"CHANNEL != ${packageName}.app.update.UpdatesChannel.STABLE")
39-
40-
/* Only one version can be published per second or else horrible things will happen.
41-
* After 70 years we'll be required to make Awery 2 because of an integer limit,
42-
* Date receiver from the test below:
43-
*
44-
* 3865053756028 : 2145398250 - Mon Jun 23 15:02:36 YEKT 2092
45-
* 3865747384956 : 2146091879 - Tue Jul 01 15:43:04 YEKT 2092
46-
* 3866441013884 : 2146785508 - Wed Jul 09 16:23:33 YEKT 2092
47-
* 3867134642812 : 2147479137 - Thu Jul 17 17:04:02 YEKT 2092
48-
* 3867828271740 : -2146794530 - Fri Jul 25 17:44:31 YEKT 2092
49-
* */
50-
versionName = "$releaseVersion-$gitCommitHash"
51-
versionCode = ((startVersionCode + ((System.currentTimeMillis() - startMillis) / 1000)).toInt())
52-
53-
/*long i = System.currentTimeMillis()
54-
var a = new Date(i)
55-
while(true) {
56-
i += (1000 * 60 * 60 * 24 * 356)
57-
a.setTime(i)
58-
59-
versionCode ((startVersionCode + ((i - startMillis) / 1000)) as int)
60-
61-
System.out.println("$i : $versionCode - ${a}")
62-
63-
if(versionCode < 0 || versionCode >= Integer.MAX_VALUE) {
64-
throw new IllegalStateException("We've reached the end. Now Awery 2 must be released!" +
65-
" Input: $versionCode : ${a}")
66-
}
67-
}*/
68-
69-
if(versionCode!! < 0 || versionCode!! >= Int.MAX_VALUE) {
70-
throw IllegalStateException("We've reached the end. " +
71-
"Now Awery 2 must be released! Input int: $versionCode")
72-
}
73-
53+
setupVersion()
7454
buildConfigField("long", "BUILD_TIME", "${System.currentTimeMillis()}")
75-
76-
javaCompileOptions {
77-
annotationProcessorOptions {
78-
arguments["room.schemaLocation"] = "$projectDir/schemas"
79-
}
80-
}
8155
}
8256

8357
androidResources {
@@ -90,10 +64,6 @@ android {
9064
}
9165
}
9266

93-
room {
94-
schemaDirectory("schemas")
95-
}
96-
9767
buildTypes {
9868
debug {
9969
isDebuggable = true
@@ -171,15 +141,16 @@ android {
171141

172142
dependencies {
173143
// Core
174-
implementation(libs.androidx.core.ktx)
144+
implementation(libs.androidx.ktx)
175145
implementation(libs.androidx.appcompat)
176146
implementation(libs.androidx.browser)
177147
implementation(libs.androidx.webkit)
178148
implementation(libs.androidx.fragment)
179-
implementation(libs.androidx.core.google.shortcuts)
149+
implementation(libs.androidx.shortcuts)
180150
implementation(libs.androidx.preference.ktx)
181-
implementation(libs.xcrash.android.lib)
151+
implementation(libs.xcrash.android)
182152
implementation(libs.deprecated.android.retrostreams)
153+
implementation(libs.bundles.aniyomi)
183154
implementation(project(":ext"))
184155

185156
// Database
@@ -229,29 +200,15 @@ dependencies {
229200
implementation(libs.androidx.media3.session)
230201
implementation(libs.androidx.media3.ui)
231202

232-
// Image Loading
203+
// Networking
233204
api(libs.glide)
234205
ksp(libs.glide.compiler)
235206
implementation(libs.glide.annotations)
236207
implementation(libs.glide)
237208
implementation(libs.glide.okhttp3)
238-
239209
implementation(libs.coil.compose)
240210
implementation(libs.coil.network.okhttp)
241-
242-
// Networking
243-
implementation(libs.okhttp)
244-
implementation(libs.okhttp.logging)
245-
implementation(libs.okhttp.dnsoverhttps)
246-
implementation(libs.okhttp.brotli)
247-
248-
// Aniyomi
249-
implementation(libs.quickjs.android)
250-
implementation(libs.rx.java)
251-
implementation(libs.rx.android)
252-
implementation(libs.injekt)
253-
implementation(libs.jsoup)
254-
implementation(libs.java.nat.sort)
211+
implementation(libs.bundles.okhttp)
255212

256213
// Serialization
257214
implementation(files("../libs/safe-args-next.aar"))
@@ -361,9 +318,9 @@ fun generateSettingsClass(dir: File) {
361318
File(dir, "AwerySettings.java").writeText(buildString {
362319
append("package com.mrboomdev.awery.generated;\n")
363320
append("\n")
364-
append("import com.mrboomdev.awery.app.data.settings.NicePreferences.*;\n")
365-
append("import com.mrboomdev.awery.app.data.settings.NicePreferences;\n")
366-
append("import com.mrboomdev.awery.app.data.settings.SettingsItem;\n")
321+
append("import com.mrboomdev.awery.data.settings.NicePreferences.*;\n")
322+
append("import com.mrboomdev.awery.data.settings.NicePreferences;\n")
323+
append("import com.mrboomdev.awery.data.settings.SettingsItem;\n")
367324
append("\n")
368325
append("// Auto-generated class created during the compilation. Please, do not edit it.\n")
369326
append("public class AwerySettings {\n")

app/schemas/com.mrboomdev.awery.app.data.db.AweryDB/1.json renamed to app/schemas/com.mrboomdev.awery.data.db.AweryDB/1.json

File renamed without changes.

app/schemas/com.mrboomdev.awery.app.data.db.AweryDB/2.json renamed to app/schemas/com.mrboomdev.awery.data.db.AweryDB/2.json

File renamed without changes.

app/schemas/com.mrboomdev.awery.app.data.db.AweryDB/3.json renamed to app/schemas/com.mrboomdev.awery.data.db.AweryDB/3.json

File renamed without changes.

app/schemas/com.mrboomdev.awery.app.data.db.AweryDB/4.json renamed to app/schemas/com.mrboomdev.awery.data.db.AweryDB/4.json

File renamed without changes.

app/schemas/com.mrboomdev.awery.app.data.db.AweryDB/5.json renamed to app/schemas/com.mrboomdev.awery.data.db.AweryDB/5.json

File renamed without changes.

app/src/main/assets/settings.json

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,6 @@
198198
{
199199
"key": "experiment_splash_load_sources", "title": "Use new sources loader",
200200
"type": "boolean", "boolean_value": false
201-
}, {
202-
"key": "experiment_pip_controls", "title": "Picture in picture player controls",
203-
"type": "boolean", "boolean_value": false
204201
}, {
205202
"key": "experiment_tv_compose", "title": "Launch TV activity on startup",
206203
"type": "boolean", "boolean_value": false

app/src/main/assets/tabs_templates.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
"description": "A lot of content, a feed with a selection of all installed extensions and a bunch of features!",
77
"tabs": [
88
{
9-
"title": "Home",
9+
"title": "home",
1010
"icon": "home",
1111
"id": "home",
1212
"feeds": [
@@ -22,7 +22,7 @@
2222
}
2323
]
2424
}, {
25-
"title": "Library",
25+
"title": "library",
2626
"id": "library",
2727
"icon": "bookmark",
2828
"show_end": false,

app/src/main/java/com/mrboomdev/awery/app/App.kt

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,7 @@ import androidx.browser.customtabs.CustomTabsIntent
3636
import androidx.core.app.ShareCompat.IntentBuilder
3737
import androidx.core.content.ContextCompat
3838
import androidx.core.content.getSystemService
39-
import androidx.core.content.res.ResourcesCompat
4039
import androidx.room.Room.databaseBuilder
41-
import androidx.viewbinding.ViewBinding
4240
import com.github.piasy.biv.BigImageViewer
4341
import com.github.piasy.biv.loader.glide.GlideCustomImageLoader
4442
import com.google.android.material.color.DynamicColors
@@ -53,11 +51,12 @@ import com.mrboomdev.awery.app.AweryLifecycle.Companion.appContext
5351
import com.mrboomdev.awery.app.AweryLifecycle.Companion.getAnyActivity
5452
import com.mrboomdev.awery.app.AweryLifecycle.Companion.runOnUiThread
5553
import com.mrboomdev.awery.app.theme.ThemeManager.isDarkModeEnabled
56-
import com.mrboomdev.awery.app.data.Constants
57-
import com.mrboomdev.awery.app.data.db.AweryDB
58-
import com.mrboomdev.awery.app.data.db.item.DBCatalogList
59-
import com.mrboomdev.awery.app.data.settings.NicePreferences.getPrefs
54+
import com.mrboomdev.awery.data.Constants
55+
import com.mrboomdev.awery.data.db.AweryDB
56+
import com.mrboomdev.awery.data.db.item.DBCatalogList
57+
import com.mrboomdev.awery.data.settings.NicePreferences.getPrefs
6058
import com.mrboomdev.awery.app.theme.ThemeManager
59+
import com.mrboomdev.awery.app.update.UpdatesChannel
6160
import com.mrboomdev.awery.extensions.data.CatalogList
6261
import com.mrboomdev.awery.generated.AwerySettings
6362
import com.mrboomdev.awery.generated.AwerySettings.NavigationStyle_Values
@@ -99,9 +98,9 @@ class App : Application() {
9998
override fun onCreate() {
10099
AweryNotifications.registerNotificationChannels()
101100
ThemeManager.applyApp(this)
102-
setupStrictMode()
103101

104102
super.onCreate()
103+
setupStrictMode()
105104
patchInjekt()
106105
BigImageViewer.initialize(GlideCustomImageLoader.with(this))
107106

@@ -261,6 +260,10 @@ class App : Application() {
261260
return if(id == 0) null else i18n(id)
262261
}
263262

263+
inline fun <reified T> i18n(resourceId: String): String? {
264+
return i18n(T::class.java, resourceId)
265+
}
266+
264267
@JvmStatic
265268
fun i18n(@StringRes res: Int, vararg params: Any) =
266269
ContextCompat.getContextForLanguage(appContext).getString(res, *params)
@@ -307,12 +310,6 @@ class App : Application() {
307310
}
308311
}
309312

310-
@JvmStatic
311-
@Deprecated("")
312-
fun setContentViewCompat(activity: Activity, view: ViewBinding) {
313-
setContentViewCompat(activity, view.root)
314-
}
315-
316313
/**
317314
* Safely enables the "Edge to edge" experience.
318315
* I really don't know why, but sometimes it just randomly crashes!
@@ -453,11 +450,15 @@ class App : Application() {
453450
.apply {
454451
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
455452
penaltyListener({ it.run() }) { violation ->
456-
runOnUiThread { DialogBuilder(getAnyActivity<AppCompatActivity>()!!)
457-
.setTitle("StrictMode.VmPolicy Violation!")
458-
.setMessage(Log.getStackTraceString(violation))
459-
.setPositiveButton(R.string.ok) { it.dismiss() }
460-
.show() }
453+
try {
454+
runOnUiThread { DialogBuilder(getAnyActivity<AppCompatActivity>()!!)
455+
.setTitle("StrictMode.VmPolicy Violation!")
456+
.setMessage(Log.getStackTraceString(violation))
457+
.setPositiveButton(R.string.ok) { it.dismiss() }
458+
.show() }
459+
} catch(e: Throwable) {
460+
Log.e(TAG, "Failed to warn about an strict mode violation!", e)
461+
}
461462
}
462463
}
463464
}.build())
@@ -543,7 +544,7 @@ class App : Application() {
543544
val result = when(mRequirement) {
544545
"material_you" -> DynamicColors.isDynamicColorAvailable()
545546
"tv" -> isTv
546-
"beta" -> BuildConfig.IS_BETA
547+
"beta" -> BuildConfig.CHANNEL != UpdatesChannel.STABLE
547548
"debug" -> BuildConfig.DEBUG
548549
"never" -> false
549550
else -> true

app/src/main/java/com/mrboomdev/awery/app/CrashHandler.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ object CrashHandler {
211211
it.dismiss()
212212
}
213213

214-
if(file != null || message != null || oki != null) {
214+
if(file?.exists() == true || message != null || oki != null) {
215215
setNegativeButton(R.string.share) {
216216
val mFile = file ?: File((mContext ?: appContext).filesDir, "crash_report.txt").apply {
217217
delete()
@@ -237,9 +237,12 @@ object CrashHandler {
237237
BottomSheetDialog(mContext?.activity ?: activity!!).apply {
238238
setContentView(NestedScrollView(mContext!!).apply {
239239
addView(MaterialTextView(mContext).apply {
240-
text = (file?.readText() ?: oki?.print() ?: message ?: i18n(messageRes!!)).trim()
241240
setTextIsSelectable(true)
242241
setPadding(dpPx(16f))
242+
243+
text = if(file?.exists() == true) {
244+
file.readText()
245+
} else (oki?.print() ?: message ?: i18n(messageRes!!)).trim()
243246
})
244247
})
245248
}.fixAndShow()

0 commit comments

Comments
 (0)