-
Notifications
You must be signed in to change notification settings - Fork 138
Expand file tree
/
Copy pathSplashActivity.kt
More file actions
98 lines (88 loc) · 3.77 KB
/
Copy pathSplashActivity.kt
File metadata and controls
98 lines (88 loc) · 3.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
package com.drdisagree.iconify
import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.core.splashscreen.SplashScreen
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import com.drdisagree.iconify.data.common.Preferences.XPOSED_ONLY_MODE
import com.drdisagree.iconify.data.config.RPrefs
import com.drdisagree.iconify.ui.activities.MainActivity
import com.drdisagree.iconify.ui.activities.OnboardingActivity
import com.drdisagree.iconify.utils.ModuleUtils
import com.drdisagree.iconify.utils.RootUtils
import com.drdisagree.iconify.utils.SystemUtils
import com.drdisagree.iconify.utils.overlay.OverlayUtils
import com.google.android.material.color.DynamicColors
import com.topjohnwu.superuser.Shell
@SuppressLint("CustomSplashScreen")
class SplashActivity : AppCompatActivity() {
private var keepShowing = true
private val runner = Runnable {
Shell.getShell { _: Shell? ->
val isRooted = RootUtils.deviceProperlyRooted()
val isModuleInstalled = ModuleUtils.moduleExists()
val isOverlayInstalled = OverlayUtils.overlayExists()
var isXposedOnlyMode = RPrefs.getBoolean(XPOSED_ONLY_MODE, false)
val isVersionCodeCorrect = BuildConfig.VERSION_CODE == SystemUtils.savedVersionCode
if (isRooted) {
if (isOverlayInstalled) {
RPrefs.putBoolean(XPOSED_ONLY_MODE, false)
} else if (isModuleInstalled) {
RPrefs.putBoolean(XPOSED_ONLY_MODE, true)
isXposedOnlyMode = true
}
}
val isModuleProperlyInstalled = isModuleInstalled &&
(isOverlayInstalled || isXposedOnlyMode)
val intent: Intent =
if (BuildConfig.VIVO_SAFE_MODE && !isRooted) {
keepShowing = false
Intent(this@SplashActivity, MainActivity::class.java)
} else if (SKIP_TO_HOMEPAGE_FOR_TESTING ||
(isRooted &&
isModuleProperlyInstalled &&
isVersionCodeCorrect)
) {
keepShowing = false
Intent(
this@SplashActivity,
if (FORCE_OVERLAY_INSTALLATION) OnboardingActivity::class.java
else MainActivity::class.java
)
} else {
keepShowing = false
Intent(this@SplashActivity, OnboardingActivity::class.java)
}
startActivity(intent)
finish()
}
}
override fun onCreate(savedInstanceState: Bundle?) {
val splashScreen: SplashScreen = installSplashScreen()
super.onCreate(savedInstanceState)
splashScreen.setKeepOnScreenCondition { keepShowing }
DynamicColors.applyToActivitiesIfAvailable(application)
Thread(runner).start()
}
companion object {
// For testing purposes
private const val SKIP_INSTALLATION = false
const val FORCE_OVERLAY_INSTALLATION = false
val SKIP_TO_HOMEPAGE_FOR_TESTING = SKIP_INSTALLATION &&
!FORCE_OVERLAY_INSTALLATION &&
BuildConfig.DEBUG
init {
Shell.enableVerboseLogging = BuildConfig.DEBUG
@Suppress("DEPRECATION")
if (Shell.getCachedShell() == null) {
Shell.setDefaultBuilder(
Shell.Builder.create()
.setFlags(Shell.FLAG_MOUNT_MASTER)
.setFlags(Shell.FLAG_REDIRECT_STDERR)
.setTimeout(20)
)
}
}
}
}