From 11d716a3c8bc2f93aeed2aac26bca5cd00748fb8 Mon Sep 17 00:00:00 2001 From: Viktor De Pasquale Date: Mon, 22 Apr 2019 16:00:48 +0200 Subject: [PATCH] Updated splash screen with new arch --- app/src/main/java/com/topjohnwu/magisk/App.kt | 8 +- .../com/topjohnwu/magisk/di/DatabaseModule.kt | 3 +- .../magisk/model/adapters/ReposAdapter.java | 5 +- .../topjohnwu/magisk/tasks/UpdateRepos.java | 18 ++-- .../topjohnwu/magisk/ui/SplashActivity.java | 97 ------------------- .../com/topjohnwu/magisk/ui/SplashActivity.kt | 87 +++++++++++++++++ .../magisk/ui/settings/SettingsFragment.java | 2 +- 7 files changed, 107 insertions(+), 113 deletions(-) delete mode 100644 app/src/main/java/com/topjohnwu/magisk/ui/SplashActivity.java create mode 100644 app/src/main/java/com/topjohnwu/magisk/ui/SplashActivity.kt diff --git a/app/src/main/java/com/topjohnwu/magisk/App.kt b/app/src/main/java/com/topjohnwu/magisk/App.kt index b55510d86..2d839a559 100644 --- a/app/src/main/java/com/topjohnwu/magisk/App.kt +++ b/app/src/main/java/com/topjohnwu/magisk/App.kt @@ -19,6 +19,7 @@ import com.topjohnwu.magisk.utils.LocaleManager import com.topjohnwu.magisk.utils.RootUtils import com.topjohnwu.net.Networking import com.topjohnwu.superuser.Shell +import org.koin.android.ext.android.inject import org.koin.android.ext.koin.androidContext import org.koin.core.context.startKoin import timber.log.Timber @@ -29,8 +30,8 @@ open class App : Application(), Application.ActivityLifecycleCallbacks { // Global resources val prefs: SharedPreferences get() = PreferenceManager.getDefaultSharedPreferences(deContext) val DB: MagiskDB by lazy { MagiskDB(deContext) } - @JvmField - var repoDB: RepoDatabaseHelper? = null + @Deprecated("Use dependency injection") + val repoDB: RepoDatabaseHelper by inject() @Volatile private var foreground: Activity? = null @@ -94,11 +95,13 @@ open class App : Application(), Application.ActivityLifecycleCallbacks { //fixme this should be at least weak reference, me no likey @SuppressLint("StaticFieldLeak") + @Deprecated("Use dependency injection") @JvmStatic lateinit var self: App //fixme this should be at least weak reference, me no likey @SuppressLint("StaticFieldLeak") + @Deprecated("Use dependency injection") @JvmStatic lateinit var deContext: Context @@ -116,6 +119,7 @@ open class App : Application(), Application.ActivityLifecycleCallbacks { } //fixme me no likey + @Deprecated("") @JvmStatic fun foreground(): Activity? { return self.foreground diff --git a/app/src/main/java/com/topjohnwu/magisk/di/DatabaseModule.kt b/app/src/main/java/com/topjohnwu/magisk/di/DatabaseModule.kt index 4d8869d82..27257a4df 100644 --- a/app/src/main/java/com/topjohnwu/magisk/di/DatabaseModule.kt +++ b/app/src/main/java/com/topjohnwu/magisk/di/DatabaseModule.kt @@ -1,10 +1,11 @@ package com.topjohnwu.magisk.di import com.topjohnwu.magisk.App +import com.topjohnwu.magisk.data.database.RepoDatabaseHelper import org.koin.dsl.module val databaseModule = module { single { get().DB } - single { get().repoDB } + single { RepoDatabaseHelper(get()) } } diff --git a/app/src/main/java/com/topjohnwu/magisk/model/adapters/ReposAdapter.java b/app/src/main/java/com/topjohnwu/magisk/model/adapters/ReposAdapter.java index 268afac01..3b8cc7289 100644 --- a/app/src/main/java/com/topjohnwu/magisk/model/adapters/ReposAdapter.java +++ b/app/src/main/java/com/topjohnwu/magisk/model/adapters/ReposAdapter.java @@ -13,8 +13,6 @@ import android.widget.ImageView; import android.widget.SearchView; import android.widget.TextView; -import androidx.recyclerview.widget.RecyclerView; - import com.topjohnwu.magisk.App; import com.topjohnwu.magisk.ClassMap; import com.topjohnwu.magisk.R; @@ -33,6 +31,7 @@ import java.util.Collections; import java.util.List; import java.util.Map; +import androidx.recyclerview.widget.RecyclerView; import butterknife.BindView; import java9.util.stream.StreamSupport; @@ -51,7 +50,7 @@ public class ReposAdapter private SearchView mSearch; public ReposAdapter() { - repoDB = App.self.repoDB; + repoDB = App.self.getRepoDB(); moduleMap = Collections.emptyMap(); fullList = Collections.emptyList(); repoPairs = new ArrayList<>(); diff --git a/app/src/main/java/com/topjohnwu/magisk/tasks/UpdateRepos.java b/app/src/main/java/com/topjohnwu/magisk/tasks/UpdateRepos.java index 9d6e44571..d7d4754a5 100644 --- a/app/src/main/java/com/topjohnwu/magisk/tasks/UpdateRepos.java +++ b/app/src/main/java/com/topjohnwu/magisk/tasks/UpdateRepos.java @@ -34,7 +34,7 @@ import java.util.concurrent.Future; public class UpdateRepos { private static final DateFormat DATE_FORMAT; - private App app = App.self; + private final App app = App.self; private Set cached; private Queue> moduleQueue; @@ -116,17 +116,17 @@ public class UpdateRepos { Pair pair = moduleQueue.poll(); if (pair == null) return; - Repo repo = app.repoDB.getRepo(pair.first); + Repo repo = app.getRepoDB().getRepo(pair.first); try { if (repo == null) repo = new Repo(pair.first); else cached.remove(pair.first); repo.update(pair.second); - app.repoDB.addRepo(repo); + app.getRepoDB().addRepo(repo); } catch (Repo.IllegalRepoException e) { Logger.debug(e.getMessage()); - app.repoDB.removeRepo(pair.first); + app.getRepoDB().removeRepo(pair.first); } } }); @@ -134,7 +134,7 @@ public class UpdateRepos { } private void fullReload() { - Cursor c = app.repoDB.getRawCursor(); + Cursor c = app.getRepoDB().getRawCursor(); runTasks(() -> { while (true) { Repo repo; @@ -145,10 +145,10 @@ public class UpdateRepos { } try { repo.update(); - app.repoDB.addRepo(repo); + app.getRepoDB().addRepo(repo); } catch (Repo.IllegalRepoException e) { Logger.debug(e.getMessage()); - app.repoDB.removeRepo(repo); + app.getRepoDB().removeRepo(repo); } } }); @@ -157,12 +157,12 @@ public class UpdateRepos { public void exec(boolean force) { Event.reset(Event.REPO_LOAD_DONE); App.THREAD_POOL.execute(() -> { - cached = Collections.synchronizedSet(app.repoDB.getRepoIDSet()); + cached = Collections.synchronizedSet(app.getRepoDB().getRepoIDSet()); moduleQueue = new ConcurrentLinkedQueue<>(); if (loadPages()) { // The leftover cached means they are removed from online repo - app.repoDB.removeRepo(cached); + app.getRepoDB().removeRepo(cached); } else if (force) { fullReload(); } diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/SplashActivity.java b/app/src/main/java/com/topjohnwu/magisk/ui/SplashActivity.java deleted file mode 100644 index 09732bb8d..000000000 --- a/app/src/main/java/com/topjohnwu/magisk/ui/SplashActivity.java +++ /dev/null @@ -1,97 +0,0 @@ -package com.topjohnwu.magisk.ui; - -import android.content.Intent; -import android.content.pm.PackageManager; -import android.os.Bundle; -import android.text.TextUtils; - -import androidx.appcompat.app.AlertDialog; - -import com.topjohnwu.magisk.BuildConfig; -import com.topjohnwu.magisk.ClassMap; -import com.topjohnwu.magisk.Config; -import com.topjohnwu.magisk.Const; -import com.topjohnwu.magisk.R; -import com.topjohnwu.magisk.data.database.RepoDatabaseHelper; -import com.topjohnwu.magisk.tasks.CheckUpdates; -import com.topjohnwu.magisk.tasks.UpdateRepos; -import com.topjohnwu.magisk.ui.base.BaseActivity; -import com.topjohnwu.magisk.utils.LocaleManager; -import com.topjohnwu.magisk.utils.Utils; -import com.topjohnwu.magisk.view.Notifications; -import com.topjohnwu.magisk.view.Shortcuts; -import com.topjohnwu.net.Networking; -import com.topjohnwu.superuser.Shell; - -public class SplashActivity extends BaseActivity { - - public static boolean DONE = false; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - Shell.getShell(shell -> { - if (Config.magiskVersionCode > 0 && - Config.magiskVersionCode < Const.MAGISK_VER.MIN_SUPPORT) { - new AlertDialog.Builder(this) - .setTitle(R.string.unsupport_magisk_title) - .setMessage(R.string.unsupport_magisk_message) - .setNegativeButton(R.string.ok, null) - .setOnDismissListener(dialog -> finish()) - .show(); - } else { - initAndStart(); - } - }); - } - - private void initAndStart() { - String pkg = Config.get(Config.Key.SU_MANAGER); - if (pkg != null && getPackageName().equals(BuildConfig.APPLICATION_ID)) { - Config.remove(Config.Key.SU_MANAGER); - Shell.su("pm uninstall " + pkg).submit(); - } - if (TextUtils.equals(pkg, getPackageName())) { - try { - // We are the manager, remove com.topjohnwu.magisk as it could be malware - getPackageManager().getApplicationInfo(BuildConfig.APPLICATION_ID, 0); - Shell.su("pm uninstall " + BuildConfig.APPLICATION_ID).submit(); - } catch (PackageManager.NameNotFoundException ignored) {} - } - - // Dynamic detect all locales - LocaleManager.loadAvailableLocales(R.string.app_changelog); - - // Set default configs - Config.initialize(); - - // Create notification channel on Android O - Notifications.setup(this); - - // Schedule periodic update checks - Utils.scheduleUpdateCheck(); - CheckUpdates.check(); - - // Setup shortcuts - Shortcuts.setup(this); - - // Create repo database - app.repoDB = new RepoDatabaseHelper(this); - - // Magisk working as expected - if (Shell.rootAccess() && Config.magiskVersionCode > 0) { - // Load modules - Utils.loadModules(false); - // Load repos - if (Networking.checkNetworkStatus(this)) - new UpdateRepos().exec(); - } - - Intent intent = new Intent(this, ClassMap.get(MainActivity.class)); - intent.putExtra(Const.Key.OPEN_SECTION, getIntent().getStringExtra(Const.Key.OPEN_SECTION)); - DONE = true; - startActivity(intent); - finish(); - } -} diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/SplashActivity.kt b/app/src/main/java/com/topjohnwu/magisk/ui/SplashActivity.kt new file mode 100644 index 000000000..d3f862447 --- /dev/null +++ b/app/src/main/java/com/topjohnwu/magisk/ui/SplashActivity.kt @@ -0,0 +1,87 @@ +package com.topjohnwu.magisk.ui + +import android.content.Intent +import android.os.Bundle +import android.text.TextUtils +import androidx.appcompat.app.AlertDialog +import androidx.appcompat.app.AppCompatActivity +import com.topjohnwu.magisk.* +import com.topjohnwu.magisk.tasks.CheckUpdates +import com.topjohnwu.magisk.tasks.UpdateRepos +import com.topjohnwu.magisk.utils.LocaleManager +import com.topjohnwu.magisk.utils.Utils +import com.topjohnwu.magisk.view.Notifications +import com.topjohnwu.magisk.view.Shortcuts +import com.topjohnwu.net.Networking +import com.topjohnwu.superuser.Shell + +open class SplashActivity : AppCompatActivity() { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + Shell.getShell { + if (Config.magiskVersionCode > 0 && Config.magiskVersionCode < Const.MAGISK_VER.MIN_SUPPORT) { + AlertDialog.Builder(this) + .setTitle(R.string.unsupport_magisk_title) + .setMessage(R.string.unsupport_magisk_message) + .setNegativeButton(R.string.ok, null) + .setOnDismissListener { finish() } + .show() + } else { + initAndStart() + } + } + } + + private fun initAndStart() { + val pkg = Config.get(Config.Key.SU_MANAGER) + if (pkg != null && packageName == BuildConfig.APPLICATION_ID) { + Config.remove(Config.Key.SU_MANAGER) + Shell.su("pm uninstall $pkg").submit() + } + if (TextUtils.equals(pkg, packageName)) { + runCatching { + // We are the manager, remove com.topjohnwu.magisk as it could be malware + packageManager.getApplicationInfo(BuildConfig.APPLICATION_ID, 0) + Shell.su("pm uninstall " + BuildConfig.APPLICATION_ID).submit() + } + } + + // Dynamic detect all locales + LocaleManager.loadAvailableLocales(R.string.app_changelog) + + // Set default configs + Config.initialize() + + // Create notification channel on Android O + Notifications.setup(this) + + // Schedule periodic update checks + Utils.scheduleUpdateCheck() + CheckUpdates.check() + + // Setup shortcuts + Shortcuts.setup(this) + + // Magisk working as expected + if (Shell.rootAccess() && Config.magiskVersionCode > 0) { + // Load modules + Utils.loadModules(false) + // Load repos + if (Networking.checkNetworkStatus(this)) + UpdateRepos().exec() + } + + val intent = Intent(this, ClassMap.get(MainActivity::class.java)) + intent.putExtra(Const.Key.OPEN_SECTION, getIntent().getStringExtra(Const.Key.OPEN_SECTION)) + DONE = true + startActivity(intent) + finish() + } + + companion object { + + var DONE = false + } +} diff --git a/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsFragment.java b/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsFragment.java index 47e6ddc7f..90faae656 100644 --- a/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsFragment.java +++ b/app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsFragment.java @@ -74,7 +74,7 @@ public class SettingsFragment extends BasePreferenceFragment { }); findPreference("clear").setOnPreferenceClickListener(pref -> { app.getPrefs().edit().remove(Config.Key.ETAG_KEY).apply(); - app.repoDB.clearRepo(); + app.getRepoDB().clearRepo(); Utils.toast(R.string.repo_cache_cleared, Toast.LENGTH_SHORT); return true; });