Skip to content

Commit 5678753

Browse files
(chore) AMM v2.3.8 - last supported version before v3
This update includes: - CronetLoader: Added utility for loading Cronet engine builder via reflection without direct dependency on Google Play Services. - Cronet Provider: Attempted to install GMS Cronet provider using reflection. - Notification: Added a notification for the last supported version before v3. - Strings: Added strings related to the last supported version message. - Code Cleanup: Refactored code for readability and maintainability. - Library Updates: Updated dependencies and libraries. - UI Improvements: Minor UI adjustments and improvements. Signed-off-by: androidacy-user <opensource@androidacy.com>
1 parent c998bc9 commit 5678753

18 files changed

+440
-117
lines changed

app/build.gradle.kts

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -45,40 +45,43 @@ android {
4545
defaultConfig {
4646
applicationId = "com.fox2code.mmm"
4747
minSdk = 26
48+
// app is in maintenance mode, we do not intend to update it to target newer SDKs
49+
//noinspection OldTargetApi
4850
targetSdk = 34
4951
versionCode = 93
5052
versionName = "2.3.8"
5153
vectorDrawables {
5254
useSupportLibrary = true
5355
}
5456
multiDexEnabled = true
55-
resourceConfigurations.addAll(
56-
listOf(
57-
"ar",
58-
"bs",
59-
"cs",
60-
"de",
61-
"es-rMX",
62-
"es",
63-
"el",
64-
"fr",
65-
"hu",
66-
"id",
67-
"it",
68-
"ja",
69-
"nl",
70-
"pl",
71-
"pt",
72-
"pt-rBR",
73-
"ru",
74-
"tr",
75-
"uk",
76-
"vi",
77-
"zh",
78-
"zh-rTW",
79-
"en"
57+
androidResources {
58+
localeFilters.addAll(
59+
listOf(
60+
"ar",
61+
"bs",
62+
"cs",
63+
"de",
64+
"es-rMX",
65+
"es",
66+
"el",
67+
"fr",
68+
"hu",
69+
"id",
70+
"it",
71+
"ja",
72+
"nl",
73+
"pl",
74+
"pt",
75+
"pt-rBR",
76+
"ru",
77+
"tr",
78+
"uk",
79+
"vi",
80+
"zh",
81+
"zh-rTW"
82+
)
8083
)
81-
)
84+
}
8285
ksp {
8386
arg("room.schemaLocation", "$projectDir/roomSchemas")
8487
}
@@ -161,8 +164,7 @@ android {
161164
propertiesA.load(project.rootProject.file("androidacy.properties").reader())
162165
propertiesA.setProperty(
163166
"client_id", propertiesA.getProperty(
164-
"client_id",
165-
default
167+
"client_id", default
166168
)
167169
)
168170
} else {
@@ -214,8 +216,7 @@ android {
214216
propertiesA.load(project.rootProject.file("androidacy.properties").reader())
215217
propertiesA.setProperty(
216218
"client_id", propertiesA.getProperty(
217-
"client_id",
218-
default
219+
"client_id", default
219220
)
220221
)
221222
} else {
@@ -370,6 +371,7 @@ dependencies {
370371
// logging interceptor
371372
debugImplementation("com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.14")
372373
// Chromium cronet from androidacy
374+
// implementation("com.google.android.gms:play-services-cronet:18.1.0")
373375
implementation("org.chromium.net:cronet-embedded:119.6045.31")
374376

375377
val libsuVersion = "6.0.0"

app/src/main/kotlin/com/fox2code/mmm/CrashHandler.kt

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@ import android.content.Intent
1212
import android.os.Bundle
1313
import android.view.View
1414
import android.widget.Toast
15+
import androidx.activity.enableEdgeToEdge
1516
import androidx.appcompat.app.AppCompatActivity
17+
import androidx.core.view.ViewCompat
18+
import androidx.core.view.WindowInsetsCompat
1619
import cat.ereza.customactivityoncrash.CustomActivityOnCrash
1720
import com.google.android.material.dialog.MaterialAlertDialogBuilder
1821
import com.google.android.material.textview.MaterialTextView
@@ -22,13 +25,20 @@ class CrashHandler : AppCompatActivity() {
2225
@SuppressLint("RestrictedApi")
2326
override fun onCreate(savedInstanceState: Bundle?) {
2427
if (MainApplication.forceDebugLogging) Timber.i(
25-
"CrashHandler.onCreate(%s)",
26-
savedInstanceState
28+
"CrashHandler.onCreate(%s)", savedInstanceState
2729
)
2830
// log intent with extras
2931
if (MainApplication.forceDebugLogging) Timber.d("CrashHandler.onCreate: intent=%s", intent)
32+
enableEdgeToEdge()
3033
super.onCreate(savedInstanceState)
3134
setContentView(R.layout.activity_crash_handler)
35+
val view = findViewById<View>(android.R.id.content)
36+
37+
ViewCompat.setOnApplyWindowInsetsListener(view) { view, windowInsets ->
38+
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
39+
view.setPadding(0, insets.top, 0, insets.bottom)
40+
WindowInsetsCompat.CONSUMED
41+
}
3242
// set crash_details MaterialTextView to the exception passed in the intent or unknown if null
3343
// convert stacktrace from array to string, and pretty print it (first line is the exception, the rest is the stacktrace, with each line indented by 4 spaces)
3444
val crashDetails = findViewById<MaterialTextView>(R.id.crash_details)

app/src/main/kotlin/com/fox2code/mmm/MainActivity.kt

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,14 @@ import android.view.inputmethod.EditorInfo
2929
import android.view.inputmethod.InputMethodManager
3030
import android.widget.EditText
3131
import android.widget.Toast
32+
import androidx.activity.enableEdgeToEdge
3233
import androidx.activity.result.contract.ActivityResultContracts
3334
import androidx.appcompat.app.AppCompatActivity
3435
import androidx.core.view.ViewCompat
3536
import androidx.core.view.WindowInsetsAnimationCompat
3637
import androidx.core.view.WindowInsetsCompat
38+
import androidx.core.view.get
39+
import androidx.core.view.isVisible
3740
import androidx.recyclerview.widget.LinearLayoutManager
3841
import androidx.recyclerview.widget.RecyclerView
3942
import androidx.room.Room
@@ -66,7 +69,6 @@ import com.fox2code.mmm.utils.io.net.Http.Companion.hasWebView
6669
import com.fox2code.mmm.utils.room.ReposListDatabase
6770
import com.google.android.material.bottomnavigation.BottomNavigationView
6871
import com.google.android.material.dialog.MaterialAlertDialogBuilder
69-
import com.google.android.material.elevation.SurfaceColors
7072
import com.google.android.material.floatingactionbutton.FloatingActionButton
7173
import com.google.android.material.progressindicator.LinearProgressIndicator
7274
import com.google.android.material.textfield.TextInputEditText
@@ -79,7 +81,6 @@ import java.io.FileOutputStream
7981
import java.io.InputStream
8082
import java.io.OutputStream
8183
import kotlin.math.roundToInt
82-
import androidx.core.view.isVisible
8384

8485

8586
class MainActivity : AppCompatActivity(), OnRefreshListener, OverScrollHelper {
@@ -208,6 +209,8 @@ class MainActivity : AppCompatActivity(), OnRefreshListener, OverScrollHelper {
208209
doSetupRestarting = false
209210
}
210211
onMainActivityCreate(this)
212+
enableEdgeToEdge()
213+
// make sure we don't draw behind the status bar
211214
super.onCreate(savedInstanceState)
212215
INSTANCE = this
213216
// check for pref_crashed and if so start crash handler
@@ -254,9 +257,16 @@ class MainActivity : AppCompatActivity(), OnRefreshListener, OverScrollHelper {
254257
}.start()
255258
MainApplication.getInstance().check(this)
256259
setContentView(R.layout.activity_main)
260+
val view = findViewById<View>(android.R.id.content)
261+
ViewCompat.setOnApplyWindowInsetsListener(view) { view, windowInsets ->
262+
val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
263+
overScrollInsetTop = insets.top
264+
overScrollInsetBottom = insets.bottom
265+
view.setPadding(0, insets.top, 0, insets.bottom)
266+
WindowInsetsCompat.CONSUMED
267+
}
257268
this.setTitle(R.string.app_name_v2)
258269
// set navigation bar color based on surfacecolors
259-
window.navigationBarColor = SurfaceColors.SURFACE_2.getColor(this)
260270
progressIndicator = findViewById(R.id.progress_bar)
261271
progressIndicator?.max = PRECISION
262272
progressIndicator?.min = 0
@@ -270,12 +280,10 @@ class MainActivity : AppCompatActivity(), OnRefreshListener, OverScrollHelper {
270280
moduleListOnline = findViewById(R.id.module_list_online)
271281
searchTextInputEditText = findViewById(R.id.search_input)
272282
val textInputEditText = searchTextInputEditText!!
273-
val view = findViewById<View>(R.id.root_container)
274283
var startBottom = 0f
275284
var endBottom = 0f
276285
ViewCompat.setWindowInsetsAnimationCallback(
277-
view,
278-
object : WindowInsetsAnimationCompat.Callback(DISPATCH_MODE_STOP) {
286+
view, object : WindowInsetsAnimationCompat.Callback(DISPATCH_MODE_STOP) {
279287
// Override methods…
280288
override fun onProgress(
281289
insets: WindowInsetsCompat,
@@ -567,6 +575,8 @@ class MainActivity : AppCompatActivity(), OnRefreshListener, OverScrollHelper {
567575
}
568576
// reset update module and update module count in main application
569577
MainApplication.getInstance().resetUpdateModule()
578+
moduleViewListBuilder.addNotification(NotificationType.LAST_VER)
579+
moduleViewListBuilderOnline.addNotification(NotificationType.LAST_VER)
570580
tryGetMagiskPathAsync(object : InstallerInitializer.Callback {
571581
override fun onPathReceived(path: String?) {
572582
if (MainApplication.forceDebugLogging) Timber.i("Got magisk path: %s", path)
@@ -630,7 +640,7 @@ class MainActivity : AppCompatActivity(), OnRefreshListener, OverScrollHelper {
630640
moduleViewListBuilder.addNotification(NotificationType.NO_WEB_VIEW)
631641
// disable online tab
632642
runOnUiThread {
633-
bottomNavigationView.menu.getItem(1).isEnabled = false
643+
bottomNavigationView.menu[1].isEnabled = false
634644
bottomNavigationView.selectedItemId = R.id.installed_menu_item
635645
}
636646
}
@@ -825,7 +835,7 @@ class MainActivity : AppCompatActivity(), OnRefreshListener, OverScrollHelper {
825835
}
826836

827837
override fun onRefresh() {
828-
if (swipeRefreshBlocker > System.currentTimeMillis() || initMode || progressIndicator == null || progressIndicator!!.visibility == View.VISIBLE || doSetupNowRunning) {
838+
if (swipeRefreshBlocker > System.currentTimeMillis() || initMode || progressIndicator == null || progressIndicator!!.isVisible || doSetupNowRunning) {
829839
swipeRefreshLayout!!.isRefreshing = false
830840
return // Do not double scan
831841
}

app/src/main/kotlin/com/fox2code/mmm/MainApplication.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -554,12 +554,10 @@ class MainApplication : Application(), Configuration.Provider, ActivityLifecycle
554554
private var shellBuilder: Shell.Builder? = null
555555

556556
// Is application wrapped, and therefore must reduce it's feature set.
557-
@SuppressLint("RestrictedApi") // Use FoxProcess wrapper helper.
558557
const val IS_WRAPPED = false
559558

560559
init {
561-
562-
assert(!IS_WRAPPED) { "This application is not wrapped!" }
560+
assert(!IS_WRAPPED) { "This application is wrapped!" }
563561
}
564562

565563
private val callers = ArrayList<String>()
@@ -737,9 +735,8 @@ class MainApplication : Application(), Configuration.Provider, ActivityLifecycle
737735
if (updateCheckBg != null) {
738736
return java.lang.Boolean.parseBoolean(updateCheckBg)
739737
}
740-
val wrapped = IS_WRAPPED
741-
val updateCheckBgTemp = !wrapped && getPreferences("mmm")!!.getBoolean(
742-
"pref_background_update_check", true
738+
@Suppress("KotlinConstantConditions") val updateCheckBgTemp = getPreferences("mmm")!!.getBoolean(
739+
"pref_background_update_check", BuildConfig.ENABLE_AUTO_UPDATER
743740
)
744741
updateCheckBg = updateCheckBgTemp.toString()
745742
return java.lang.Boolean.parseBoolean(updateCheckBg)
@@ -753,6 +750,7 @@ class MainApplication : Application(), Configuration.Provider, ActivityLifecycle
753750
getPreferences("mmm")!!.edit { putBoolean("has_root_access", bool) }
754751
}
755752

753+
@Suppress("KotlinConstantConditions")
756754
val isCrashReportingEnabled: Boolean
757755
get() = analyticsAllowed() && getPreferences("mmm")!!.getBoolean(
758756
"pref_crash_reporting", BuildConfig.DEFAULT_ENABLE_CRASH_REPORTING
@@ -768,6 +766,7 @@ class MainApplication : Application(), Configuration.Provider, ActivityLifecycle
768766
val isNotificationPermissionGranted: Boolean
769767
get() = NotificationManagerCompat.from((INSTANCE)!!).areNotificationsEnabled()
770768

769+
@Suppress("KotlinConstantConditions")
771770
fun analyticsAllowed(): Boolean {
772771
return getPreferences("mmm")!!.getBoolean(
773772
"pref_analytics_enabled", BuildConfig.DEFAULT_ENABLE_ANALYTICS

app/src/main/kotlin/com/fox2code/mmm/NotificationType.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@ enum class NotificationType(
8888
}
8989
},
9090

91-
9291
MAGISK_OUTDATED(
9392
R.string.magisk_outdated,
9493
R.drawable.ic_baseline_update_24,
@@ -225,6 +224,19 @@ enum class NotificationType(
225224
return !BuildConfig.DEBUG && (MainApplication.isShowcaseMode || InstallerInitializer.peekMagiskPath() == null)
226225
}
227226
},
227+
LAST_VER(
228+
R.string.last_ver,
229+
R.drawable.ic_baseline_info_24,
230+
com.google.android.material.R.attr.colorSurfaceBright,
231+
com.google.android.material.R.attr.colorOnSurface,
232+
View.OnClickListener { v: View ->
233+
MaterialAlertDialogBuilder(v.context)
234+
.setTitle(R.string.last_ver)
235+
.setMessage(R.string.last_ver_message)
236+
.setPositiveButton(android.R.string.ok, null)
237+
.show()
238+
}
239+
),
228240
KSU_EXPERIMENTAL(
229241
R.string.ksu_experimental,
230242
R.drawable.ic_baseline_warning_24,

0 commit comments

Comments
 (0)