diff --git a/app/src/main/java/com/fox2code/mmm/MainActivity.kt b/app/src/main/java/com/fox2code/mmm/MainActivity.kt
index 0bce7a8..f9f1a40 100644
--- a/app/src/main/java/com/fox2code/mmm/MainActivity.kt
+++ b/app/src/main/java/com/fox2code/mmm/MainActivity.kt
@@ -130,7 +130,15 @@ class MainActivity : FoxActivity(), OnRefreshListener, SearchView.OnQueryTextLis
// check if this build has expired
val buildTime = Timestamp(BuildConfig.BUILD_TIME)
// if the build time is more than 30 days ago, throw an exception
- check(ts.time < buildTime.time) { "This build has expired. Please download a stable build or update to the latest version." }
+ if (BuildConfig.DEBUG) {
+ check(ts.time < buildTime.time) { getString(R.string.build_expired) }
+ } else {
+ // non-debug builds expire after 1 year but only show a toast
+ val ts2 = Timestamp(System.currentTimeMillis() - 365L * 24 * 60 * 60 * 1000)
+ if (ts2.time > buildTime.time) {
+ Toast.makeText(this, R.string.build_expired, Toast.LENGTH_LONG).show()
+ }
+ }
setContentView(R.layout.activity_main)
this.setTitle(R.string.app_name)
// set window flags to ignore status bar
@@ -245,6 +253,7 @@ class MainActivity : FoxActivity(), OnRefreshListener, SearchView.OnQueryTextLis
overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out)
finish()
}
+
R.id.online_menu_item -> {
TrackHelper.track().event("view_list", "online_modules")
.with(MainApplication.INSTANCE!!.tracker)
@@ -262,6 +271,7 @@ class MainActivity : FoxActivity(), OnRefreshListener, SearchView.OnQueryTextLis
searchView.setQuery("", false)
searchView.clearFocus()
}
+
R.id.installed_menu_item -> {
TrackHelper.track().event("view_list", "installed_modules")
.with(MainApplication.INSTANCE!!.tracker)
@@ -377,13 +387,11 @@ class MainActivity : FoxActivity(), OnRefreshListener, SearchView.OnQueryTextLis
RepoManager.getINSTANCE().update { value: Double ->
runOnUiThread(if (max == 0) Runnable {
progressIndicator.setProgressCompat(
- (value * PRECISION).toInt(),
- true
+ (value * PRECISION).toInt(), true
)
} else Runnable {
progressIndicator.setProgressCompat(
- (value * PRECISION * 0.75f).toInt(),
- true
+ (value * PRECISION * 0.75f).toInt(), true
)
})
}
@@ -597,8 +605,7 @@ class MainActivity : FoxActivity(), OnRefreshListener, SearchView.OnQueryTextLis
RepoManager.getINSTANCE().update { value: Double ->
runOnUiThread {
progressIndicator!!.setProgressCompat(
- (value * PRECISION).toInt(),
- true
+ (value * PRECISION).toInt(), true
)
}
}
@@ -639,13 +646,11 @@ class MainActivity : FoxActivity(), OnRefreshListener, SearchView.OnQueryTextLis
RepoManager.getINSTANCE().update { value: Double ->
runOnUiThread(if (max == 0) Runnable {
progressIndicator!!.setProgressCompat(
- (value * PRECISION).toInt(),
- true
+ (value * PRECISION).toInt(), true
)
} else Runnable {
progressIndicator!!.setProgressCompat(
- (value * PRECISION * 0.75f).toInt(),
- true
+ (value * PRECISION * 0.75f).toInt(), true
)
})
}
@@ -716,8 +721,7 @@ class MainActivity : FoxActivity(), OnRefreshListener, SearchView.OnQueryTextLis
Timber.i("Query submit: %s on online list", query)
Thread({
moduleViewListBuilderOnline.applyTo(
- moduleListOnline!!,
- moduleViewAdapterOnline!!
+ moduleListOnline!!, moduleViewAdapterOnline!!
)
}, "Query update thread").start()
}
@@ -739,8 +743,7 @@ class MainActivity : FoxActivity(), OnRefreshListener, SearchView.OnQueryTextLis
Timber.i("Query submit: %s on online list", query)
Thread({
moduleViewListBuilderOnline.applyTo(
- moduleListOnline!!,
- moduleViewAdapterOnline!!
+ moduleListOnline!!, moduleViewAdapterOnline!!
)
}, "Query update thread").start()
}
@@ -759,8 +762,7 @@ class MainActivity : FoxActivity(), OnRefreshListener, SearchView.OnQueryTextLis
if (moduleViewListBuilderOnline.setQueryChange(null)) {
Thread({
moduleViewListBuilderOnline.applyTo(
- moduleListOnline!!,
- moduleViewAdapterOnline!!
+ moduleListOnline!!, moduleViewAdapterOnline!!
)
}, "Query update thread").start()
}
@@ -789,9 +791,7 @@ class MainActivity : FoxActivity(), OnRefreshListener, SearchView.OnQueryTextLis
}
i++
}
- if (AndroidacyRepoData.getInstance()
- .isEnabled && AndroidacyRepoData.getInstance().memberLevel == null
- ) {
+ if (AndroidacyRepoData.getInstance().isEnabled && AndroidacyRepoData.getInstance().memberLevel == null) {
Timber.d("Member level is null, waiting for it to be initialized")
i = 0
while (AndroidacyRepoData.getInstance().memberLevel == null && i < 20) {
@@ -804,14 +804,10 @@ class MainActivity : FoxActivity(), OnRefreshListener, SearchView.OnQueryTextLis
}
}
// if it's still null, but it's enabled, throw an error
- if (AndroidacyRepoData.getInstance()
- .isEnabled && AndroidacyRepoData.getInstance().memberLevel == null
- ) {
+ if (AndroidacyRepoData.getInstance().isEnabled && AndroidacyRepoData.getInstance().memberLevel == null) {
Timber.e("AndroidacyRepoData is enabled, but member level is null")
}
- if (AndroidacyRepoData.getInstance() != null && AndroidacyRepoData.getInstance()
- .isEnabled && AndroidacyRepoData.getInstance().memberLevel == "Guest"
- ) {
+ if (AndroidacyRepoData.getInstance() != null && AndroidacyRepoData.getInstance().isEnabled && AndroidacyRepoData.getInstance().memberLevel == "Guest") {
runtimeUtils!!.showUpgradeSnackbar(this, this)
} else {
if (!AndroidacyRepoData.getInstance().isEnabled) {
@@ -825,9 +821,7 @@ class MainActivity : FoxActivity(), OnRefreshListener, SearchView.OnQueryTextLis
Timber.i("Unknown error, not showing upgrade snackbar 1")
}
}
- } else if (AndroidacyRepoData.getInstance()
- .isEnabled && AndroidacyRepoData.getInstance().memberLevel == "Guest"
- ) {
+ } else if (AndroidacyRepoData.getInstance().isEnabled && AndroidacyRepoData.getInstance().memberLevel == "Guest") {
runtimeUtils!!.showUpgradeSnackbar(this, this)
} else {
if (!AndroidacyRepoData.getInstance().isEnabled) {
@@ -853,6 +847,7 @@ class MainActivity : FoxActivity(), OnRefreshListener, SearchView.OnQueryTextLis
}
private const val PRECISION = 10000
+
@JvmField
var doSetupNowRunning = true
var doSetupRestarting = false
diff --git a/app/src/main/java/com/fox2code/mmm/MainApplication.kt b/app/src/main/java/com/fox2code/mmm/MainApplication.kt
index 9a731ae..6195bf5 100644
--- a/app/src/main/java/com/fox2code/mmm/MainApplication.kt
+++ b/app/src/main/java/com/fox2code/mmm/MainApplication.kt
@@ -87,7 +87,7 @@ class MainApplication : FoxApplication(), Configuration.Provider {
private var markwonThemeContext: FoxThemeWrapper? = null
@JvmField
var markwon: Markwon? = null
- private var existingKey: ByteArray? = byteArrayOf(0)
+ private var existingKey: ByteArray? = null
@JvmField
var tracker: Tracker? = null
private var makingNewKey = false
@@ -450,7 +450,7 @@ class MainApplication : FoxApplication(), Configuration.Provider {
}
}
// attempt to read the existingKey property
- if (existingKey != null) {
+ if (existingKey != null && existingKey!!.isNotEmpty()) {
return existingKey as ByteArray
}
// check if we have a key already
@@ -563,14 +563,17 @@ class MainApplication : FoxApplication(), Configuration.Provider {
).apply()
Timber.d("Saved the encrypted key in shared preferences.")
makingNewKey = false
+ Timber.d("Returning the new key. Key length: %d", realmKey.size)
return realmKey // pass to a realm configuration via encryptionKey()
}
// Access the encrypted key in the keystore, decrypt it with the secret,
// and use it to open and read from the realm again
fun getExistingKey(): ByteArray {
+ Timber.v("Getting existing key.")
// attempt to read the existingKey property
if (existingKey != null) {
+ Timber.v("Existing key found in memory.")
return existingKey as ByteArray
}
// open a connection to the android keystore
diff --git a/app/src/main/java/com/fox2code/mmm/utils/io/PropUtils.kt b/app/src/main/java/com/fox2code/mmm/utils/io/PropUtils.kt
index 52ba7cb..bfeab05 100644
--- a/app/src/main/java/com/fox2code/mmm/utils/io/PropUtils.kt
+++ b/app/src/main/java/com/fox2code/mmm/utils/io/PropUtils.kt
@@ -127,7 +127,9 @@ enum class PropUtils {
).use { bufferedReader ->
var line: String
var lineNum = 0
- while (bufferedReader.readLine().also { line = it } != null) {
+ val iterator = bufferedReader.lineSequence().iterator()
+ while (iterator.hasNext()) {
+ line = iterator.next()
if (lineNum == 0 && line.startsWith("\u0000")) {
while (line.startsWith("\u0000")) line = line.substring(1)
}
diff --git a/app/src/main/res/layout/activity_setup.xml b/app/src/main/res/layout/activity_setup.xml
index 08f887c..f2ad473 100644
--- a/app/src/main/res/layout/activity_setup.xml
+++ b/app/src/main/res/layout/activity_setup.xml
@@ -282,28 +282,18 @@
android:layout_height="wrap_content"
android:layout_marginHorizontal="4dp"
android:layout_marginVertical="12dp"
- android:text="@string/other_section"
+ android:text="@string/eula_agree_v2_headline"
android:textAppearance="@android:style/TextAppearance.Material.Headline" />
-
-
-
+ android:textAppearance="@style/TextAppearance.Material3.LabelSmall" />
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 525c64e..fb10069 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -429,4 +429,6 @@
Upgrade
The stacktrace may be found below. However, we strongly recommend you to use the feedback form below to submit feedback instead. This way, instead of manually copying the stacktrace, it will send it to us automatically. It also is deobfuscated that way and additional details are reported automatically.
Most modules should be uninstalled, then reinstalled cleanly. For this reason, AMM does not support reinstalling modules while they are installed on the device.
+ This build has expired. Please update to the latest version.
+ EULA and Terms