Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
707d7b33
Commit
707d7b33
authored
Jan 13, 2020
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Separate core components
parent
ba1a2fbc
Show whitespace changes
Inline
Side-by-side
Showing
134 changed files
with
740 additions
and
691 deletions
+740
-691
proguard-rules.pro
app/proguard-rules.pro
+5
-5
a.java
app/src/main/java/a/a.java
+1
-1
c.java
app/src/main/java/a/c.java
+1
-1
e.java
app/src/main/java/a/e.java
+1
-1
g.java
app/src/main/java/a/g.java
+1
-1
h.java
app/src/main/java/a/h.java
+1
-1
j.java
app/src/main/java/a/j.java
+1
-1
w.java
app/src/main/java/a/w.java
+2
-2
App.kt
app/src/main/java/com/topjohnwu/magisk/core/App.kt
+8
-5
Config.kt
app/src/main/java/com/topjohnwu/magisk/core/Config.kt
+37
-13
Const.kt
app/src/main/java/com/topjohnwu/magisk/core/Const.kt
+1
-1
GeneralReceiver.kt
...rc/main/java/com/topjohnwu/magisk/core/GeneralReceiver.kt
+12
-11
Hacks.kt
app/src/main/java/com/topjohnwu/magisk/core/Hacks.kt
+7
-8
Info.kt
app/src/main/java/com/topjohnwu/magisk/core/Info.kt
+3
-2
SplashActivity.kt
...src/main/java/com/topjohnwu/magisk/core/SplashActivity.kt
+4
-7
UpdateCheckService.kt
...main/java/com/topjohnwu/magisk/core/UpdateCheckService.kt
+4
-5
BaseActivity.kt
.../main/java/com/topjohnwu/magisk/core/base/BaseActivity.kt
+10
-43
BaseReceiver.kt
.../main/java/com/topjohnwu/magisk/core/base/BaseReceiver.kt
+2
-2
BaseService.kt
...c/main/java/com/topjohnwu/magisk/core/base/BaseService.kt
+2
-2
BaseWorkerWrapper.kt
.../java/com/topjohnwu/magisk/core/base/BaseWorkerWrapper.kt
+2
-2
DownloadService.kt
...ava/com/topjohnwu/magisk/core/download/DownloadService.kt
+3
-3
ManagerUpgrade.kt
...java/com/topjohnwu/magisk/core/download/ManagerUpgrade.kt
+10
-3
ModuleProcessor.kt
...ava/com/topjohnwu/magisk/core/download/ModuleProcessor.kt
+2
-2
NotificationService.kt
...com/topjohnwu/magisk/core/download/NotificationService.kt
+3
-3
RemoteFileService.kt
...a/com/topjohnwu/magisk/core/download/RemoteFileService.kt
+3
-3
BaseDao.kt
...c/main/java/com/topjohnwu/magisk/core/magiskdb/BaseDao.kt
+1
-1
PolicyDao.kt
...main/java/com/topjohnwu/magisk/core/magiskdb/PolicyDao.kt
+5
-9
Query.kt
...src/main/java/com/topjohnwu/magisk/core/magiskdb/Query.kt
+1
-1
SettingsDao.kt
...in/java/com/topjohnwu/magisk/core/magiskdb/SettingsDao.kt
+1
-6
StringDao.kt
...main/java/com/topjohnwu/magisk/core/magiskdb/StringDao.kt
+1
-6
MagiskPolicy.kt
...main/java/com/topjohnwu/magisk/core/model/MagiskPolicy.kt
+2
-2
UpdateInfo.kt
...c/main/java/com/topjohnwu/magisk/core/model/UpdateInfo.kt
+1
-1
BaseModule.kt
...java/com/topjohnwu/magisk/core/model/module/BaseModule.kt
+1
-1
Module.kt
...ain/java/com/topjohnwu/magisk/core/model/module/Module.kt
+2
-2
Repo.kt
.../main/java/com/topjohnwu/magisk/core/model/module/Repo.kt
+2
-2
SuCallbackHandler.kt
...in/java/com/topjohnwu/magisk/core/su/SuCallbackHandler.kt
+12
-6
SuConnector.kt
...src/main/java/com/topjohnwu/magisk/core/su/SuConnector.kt
+1
-1
SuRequestHandler.kt
...ain/java/com/topjohnwu/magisk/core/su/SuRequestHandler.kt
+103
-0
FlashZip.kt
...src/main/java/com/topjohnwu/magisk/core/tasks/FlashZip.kt
+3
-3
MagiskInstaller.kt
...n/java/com/topjohnwu/magisk/core/tasks/MagiskInstaller.kt
+38
-14
RepoUpdater.kt
.../main/java/com/topjohnwu/magisk/core/tasks/RepoUpdater.kt
+24
-25
BiometricHelper.kt
...n/java/com/topjohnwu/magisk/core/utils/BiometricHelper.kt
+2
-2
Keygen.kt
app/src/main/java/com/topjohnwu/magisk/core/utils/Keygen.kt
+24
-10
Locales.kt
app/src/main/java/com/topjohnwu/magisk/core/utils/Locales.kt
+3
-3
PatchAPK.kt
...src/main/java/com/topjohnwu/magisk/core/utils/PatchAPK.kt
+8
-3
ProgressInputStream.kt
...va/com/topjohnwu/magisk/core/utils/ProgressInputStream.kt
+2
-2
RootInit.kt
...src/main/java/com/topjohnwu/magisk/core/utils/RootInit.kt
+3
-3
SafetyNetHelper.kt
...n/java/com/topjohnwu/magisk/core/utils/SafetyNetHelper.kt
+1
-1
Utils.kt
app/src/main/java/com/topjohnwu/magisk/core/utils/Utils.kt
+7
-4
ZipUtils.kt
...src/main/java/com/topjohnwu/magisk/core/utils/ZipUtils.kt
+1
-1
Notifications.kt
...main/java/com/topjohnwu/magisk/core/view/Notifications.kt
+16
-10
Shortcuts.kt
...src/main/java/com/topjohnwu/magisk/core/view/Shortcuts.kt
+6
-5
Repo.kt
app/src/main/java/com/topjohnwu/magisk/data/database/Repo.kt
+2
-2
RepoDao.kt
...c/main/java/com/topjohnwu/magisk/data/database/RepoDao.kt
+2
-2
GithubServices.kt
.../java/com/topjohnwu/magisk/data/network/GithubServices.kt
+4
-4
DBConfig.kt
...ain/java/com/topjohnwu/magisk/data/repository/DBConfig.kt
+2
-2
LogRepository.kt
...ava/com/topjohnwu/magisk/data/repository/LogRepository.kt
+1
-1
MagiskRepository.kt
.../com/topjohnwu/magisk/data/repository/MagiskRepository.kt
+4
-3
StringRepository.kt
.../com/topjohnwu/magisk/data/repository/StringRepository.kt
+2
-2
DatabaseModule.kt
app/src/main/java/com/topjohnwu/magisk/di/DatabaseModule.kt
+6
-2
NetworkingModule.kt
...src/main/java/com/topjohnwu/magisk/di/NetworkingModule.kt
+1
-1
XAndroid.kt
...src/main/java/com/topjohnwu/magisk/extensions/XAndroid.kt
+6
-4
XSU.kt
app/src/main/java/com/topjohnwu/magisk/extensions/XSU.kt
+2
-2
XTime.kt
app/src/main/java/com/topjohnwu/magisk/extensions/XTime.kt
+13
-5
FlashActivity.kt
...n/java/com/topjohnwu/magisk/legacy/flash/FlashActivity.kt
+5
-5
FlashViewModel.kt
.../java/com/topjohnwu/magisk/legacy/flash/FlashViewModel.kt
+3
-3
SuRequestActivity.kt
...om/topjohnwu/magisk/legacy/surequest/SuRequestActivity.kt
+9
-5
SuRequestViewModel.kt
...m/topjohnwu/magisk/legacy/surequest/SuRequestViewModel.kt
+52
-113
MagiskLog.kt
.../main/java/com/topjohnwu/magisk/model/entity/MagiskLog.kt
+2
-6
DownloadSubject.kt
...topjohnwu/magisk/model/entity/internal/DownloadSubject.kt
+6
-6
HomeItems.kt
...a/com/topjohnwu/magisk/model/entity/recycler/HomeItems.kt
+1
-1
ModuleRvItem.kt
...om/topjohnwu/magisk/model/entity/recycler/ModuleRvItem.kt
+2
-2
PolicyRvItem.kt
...om/topjohnwu/magisk/model/entity/recycler/PolicyRvItem.kt
+1
-1
EventExecutors.kt
.../java/com/topjohnwu/magisk/model/events/EventExecutors.kt
+2
-2
InstallExternalModuleEvent.kt
...pjohnwu/magisk/model/events/InstallExternalModuleEvent.kt
+4
-4
RxEvents.kt
...c/main/java/com/topjohnwu/magisk/model/events/RxEvents.kt
+1
-1
SnackbarEvent.kt
...n/java/com/topjohnwu/magisk/model/events/SnackbarEvent.kt
+4
-3
ViewEvents.kt
...main/java/com/topjohnwu/magisk/model/events/ViewEvents.kt
+11
-11
BiometricDialog.kt
...m/topjohnwu/magisk/model/events/dialog/BiometricDialog.kt
+3
-3
DarkThemeDialog.kt
...m/topjohnwu/magisk/model/events/dialog/DarkThemeDialog.kt
+3
-3
EnvFixDialog.kt
.../com/topjohnwu/magisk/model/events/dialog/EnvFixDialog.kt
+4
-26
MagiskInstallDialog.kt
...pjohnwu/magisk/model/events/dialog/MagiskInstallDialog.kt
+4
-4
ManagerInstallDialog.kt
...johnwu/magisk/model/events/dialog/ManagerInstallDialog.kt
+3
-3
ModuleInstallDialog.kt
...pjohnwu/magisk/model/events/dialog/ModuleInstallDialog.kt
+3
-3
UninstallDialog.kt
...m/topjohnwu/magisk/model/events/dialog/UninstallDialog.kt
+4
-4
Flashing.kt
...rc/main/java/com/topjohnwu/magisk/model/flash/Flashing.kt
+2
-2
Patching.kt
...rc/main/java/com/topjohnwu/magisk/model/flash/Patching.kt
+5
-8
MagiskNavigationEvent.kt
...opjohnwu/magisk/model/navigation/MagiskNavigationEvent.kt
+3
-3
Navigation.kt
.../java/com/topjohnwu/magisk/model/navigation/Navigation.kt
+5
-3
Zip.kt
app/src/main/java/com/topjohnwu/magisk/model/zip/Zip.kt
+0
-75
MainActivity.kt
app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt
+3
-3
MainViewModel.kt
app/src/main/java/com/topjohnwu/magisk/ui/MainViewModel.kt
+1
-1
BaseUIActivity.kt
.../main/java/com/topjohnwu/magisk/ui/base/BaseUIActivity.kt
+39
-0
BaseUIFragment.kt
.../main/java/com/topjohnwu/magisk/ui/base/BaseUIFragment.kt
+4
-4
BaseViewModel.kt
...c/main/java/com/topjohnwu/magisk/ui/base/BaseViewModel.kt
+4
-3
CompatActivity.kt
.../main/java/com/topjohnwu/magisk/ui/base/CompatActivity.kt
+3
-4
CompatDelegate.kt
.../main/java/com/topjohnwu/magisk/ui/base/CompatDelegate.kt
+3
-4
CompatFragment.kt
.../main/java/com/topjohnwu/magisk/ui/base/CompatFragment.kt
+4
-4
CompatHelpers.kt
...c/main/java/com/topjohnwu/magisk/ui/base/CompatHelpers.kt
+1
-1
CompatNavigationDelegate.kt
.../com/topjohnwu/magisk/ui/base/CompatNavigationDelegate.kt
+1
-1
CompatView.kt
app/src/main/java/com/topjohnwu/magisk/ui/base/CompatView.kt
+1
-2
Queryable.kt
app/src/main/java/com/topjohnwu/magisk/ui/base/Queryable.kt
+1
-1
FlashFragment.kt
.../main/java/com/topjohnwu/magisk/ui/flash/FlashFragment.kt
+1
-1
FlashViewModel.kt
...main/java/com/topjohnwu/magisk/ui/flash/FlashViewModel.kt
+1
-1
HideFragment.kt
...rc/main/java/com/topjohnwu/magisk/ui/hide/HideFragment.kt
+2
-2
HideViewModel.kt
...c/main/java/com/topjohnwu/magisk/ui/hide/HideViewModel.kt
+5
-5
HomeFragment.kt
...rc/main/java/com/topjohnwu/magisk/ui/home/HomeFragment.kt
+1
-1
HomeViewModel.kt
...c/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt
+8
-8
InstallFragment.kt
...n/java/com/topjohnwu/magisk/ui/install/InstallFragment.kt
+1
-1
InstallViewModel.kt
.../java/com/topjohnwu/magisk/ui/install/InstallViewModel.kt
+3
-3
LogFragment.kt
app/src/main/java/com/topjohnwu/magisk/ui/log/LogFragment.kt
+1
-1
LogViewModel.kt
...src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt
+5
-5
ModuleFragment.kt
...ain/java/com/topjohnwu/magisk/ui/module/ModuleFragment.kt
+2
-2
ModuleViewModel.kt
...in/java/com/topjohnwu/magisk/ui/module/ModuleViewModel.kt
+8
-11
RequestActivity.kt
...n/java/com/topjohnwu/magisk/ui/request/RequestActivity.kt
+1
-1
RequestViewModel.kt
.../java/com/topjohnwu/magisk/ui/request/RequestViewModel.kt
+1
-1
SafetynetFragment.kt
...va/com/topjohnwu/magisk/ui/safetynet/SafetynetFragment.kt
+1
-1
SafetynetViewModel.kt
...a/com/topjohnwu/magisk/ui/safetynet/SafetynetViewModel.kt
+2
-2
SettingsFragment.kt
...java/com/topjohnwu/magisk/ui/settings/SettingsFragment.kt
+1
-1
SettingsItems.kt
...in/java/com/topjohnwu/magisk/ui/settings/SettingsItems.kt
+15
-3
SettingsViewModel.kt
...ava/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt
+7
-7
SuperuserFragment.kt
...va/com/topjohnwu/magisk/ui/superuser/SuperuserFragment.kt
+1
-1
SuperuserViewModel.kt
...a/com/topjohnwu/magisk/ui/superuser/SuperuserViewModel.kt
+8
-8
Theme.kt
app/src/main/java/com/topjohnwu/magisk/ui/theme/Theme.kt
+1
-1
ThemeFragment.kt
.../main/java/com/topjohnwu/magisk/ui/theme/ThemeFragment.kt
+1
-1
ThemeViewModel.kt
...main/java/com/topjohnwu/magisk/ui/theme/ThemeViewModel.kt
+1
-1
MotionRevealHelper.kt
...ain/java/com/topjohnwu/magisk/utils/MotionRevealHelper.kt
+2
-1
PinchZoomTouchListener.kt
...java/com/topjohnwu/magisk/utils/PinchZoomTouchListener.kt
+2
-2
MagiskDialog.kt
app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt
+1
-1
fragment_home_md2.xml
app/src/main/res/layout/fragment_home_md2.xml
+3
-3
fragment_module_md2.xml
app/src/main/res/layout/fragment_module_md2.xml
+1
-1
fragment_safetynet_md2.xml
app/src/main/res/layout/fragment_safetynet_md2.xml
+1
-1
include_install_options.xml
app/src/main/res/layout/include_install_options.xml
+2
-2
item_module_md2.xml
app/src/main/res/layout/item_module_md2.xml
+1
-1
No files found.
app/proguard-rules.pro
View file @
707d7b33
...
@@ -17,9 +17,9 @@
...
@@ -17,9 +17,9 @@
#}
#}
# Snet
# Snet
-
keepclassmembers
class
com
.
topjohnwu
.
magisk
.
utils
.
SafetyNetHelper
{
*
;
}
-
keepclassmembers
class
com
.
topjohnwu
.
magisk
.
core
.
utils
.
SafetyNetHelper
{
*
;
}
-
keep
,
allowobfuscation
interface
com
.
topjohnwu
.
magisk
.
utils
.
SafetyNetHelper
$
Callback
-
keep
,
allowobfuscation
interface
com
.
topjohnwu
.
magisk
.
core
.
utils
.
SafetyNetHelper
$
Callback
-
keepclassmembers
class
*
implements
com
.
topjohnwu
.
magisk
.
utils
.
SafetyNetHelper
$
Callback
{
-
keepclassmembers
class
*
implements
com
.
topjohnwu
.
magisk
.
core
.
utils
.
SafetyNetHelper
$
Callback
{
void
onResponse
(
int
);
void
onResponse
(
int
);
}
}
...
@@ -29,13 +29,13 @@
...
@@ -29,13 +29,13 @@
}
}
# DelegateWorker
# DelegateWorker
-
keep
,
allowobfuscation
class
*
extends
com
.
topjohnwu
.
magisk
.
base
.
DelegateWork
er
-
keep
,
allowobfuscation
class
*
extends
com
.
topjohnwu
.
magisk
.
core
.
base
.
BaseWorkerWrapp
er
# BootSigner
# BootSigner
-
keep
class
a
.
a
{
*
;
}
-
keep
class
a
.
a
{
*
;
}
# Workaround R8 bug
# Workaround R8 bug
-
keep
,
allowobfuscation
class
com
.
topjohnwu
.
magisk
.
model
.
receiver
.
GeneralReceiver
-
keep
,
allowobfuscation
class
com
.
topjohnwu
.
magisk
.
core
.
GeneralReceiver
-
keepclassmembers
class
a
.
e
{
*
;
}
-
keepclassmembers
class
a
.
e
{
*
;
}
# Strip logging
# Strip logging
...
...
app/src/main/java/a/a.java
View file @
707d7b33
package
a
;
package
a
;
import
com.topjohnwu.magisk.utils.PatchAPK
;
import
com.topjohnwu.magisk.
core.
utils.PatchAPK
;
import
com.topjohnwu.signing.BootSigner
;
import
com.topjohnwu.signing.BootSigner
;
public
class
a
{
public
class
a
{
...
...
app/src/main/java/a/c.java
View file @
707d7b33
package
a
;
package
a
;
import
com.topjohnwu.magisk.
ui
.SplashActivity
;
import
com.topjohnwu.magisk.
core
.SplashActivity
;
public
class
c
extends
SplashActivity
{
public
class
c
extends
SplashActivity
{
/* stub */
/* stub */
...
...
app/src/main/java/a/e.java
View file @
707d7b33
package
a
;
package
a
;
import
com.topjohnwu.magisk.App
;
import
com.topjohnwu.magisk.
core.
App
;
public
class
e
extends
App
{
public
class
e
extends
App
{
public
e
()
{
public
e
()
{
...
...
app/src/main/java/a/g.java
View file @
707d7b33
...
@@ -5,7 +5,7 @@ import android.content.Context;
...
@@ -5,7 +5,7 @@ import android.content.Context;
import
androidx.annotation.NonNull
;
import
androidx.annotation.NonNull
;
import
androidx.work.WorkerParameters
;
import
androidx.work.WorkerParameters
;
import
com.topjohnwu.magisk.
model.updat
e.UpdateCheckService
;
import
com.topjohnwu.magisk.
cor
e.UpdateCheckService
;
public
class
g
extends
w
<
UpdateCheckService
>
{
public
class
g
extends
w
<
UpdateCheckService
>
{
/* Stub */
/* Stub */
...
...
app/src/main/java/a/h.java
View file @
707d7b33
package
a
;
package
a
;
import
com.topjohnwu.magisk.
model.receiver
.GeneralReceiver
;
import
com.topjohnwu.magisk.
core
.GeneralReceiver
;
public
class
h
extends
GeneralReceiver
{
public
class
h
extends
GeneralReceiver
{
/* stub */
/* stub */
...
...
app/src/main/java/a/j.java
View file @
707d7b33
package
a
;
package
a
;
import
com.topjohnwu.magisk.
model
.download.DownloadService
;
import
com.topjohnwu.magisk.
core
.download.DownloadService
;
public
class
j
extends
DownloadService
{
public
class
j
extends
DownloadService
{
/* stub */
/* stub */
...
...
app/src/main/java/a/w.java
View file @
707d7b33
...
@@ -6,11 +6,11 @@ import androidx.annotation.NonNull;
...
@@ -6,11 +6,11 @@ import androidx.annotation.NonNull;
import
androidx.work.Worker
;
import
androidx.work.Worker
;
import
androidx.work.WorkerParameters
;
import
androidx.work.WorkerParameters
;
import
com.topjohnwu.magisk.
base.DelegateWork
er
;
import
com.topjohnwu.magisk.
core.base.BaseWorkerWrapp
er
;
import
java.lang.reflect.ParameterizedType
;
import
java.lang.reflect.ParameterizedType
;
public
abstract
class
w
<
T
extends
DelegateWork
er
>
extends
Worker
{
public
abstract
class
w
<
T
extends
BaseWorkerWrapp
er
>
extends
Worker
{
/* Wrapper class to workaround Proguard -keep class * extends Worker */
/* Wrapper class to workaround Proguard -keep class * extends Worker */
...
...
app/src/main/java/com/topjohnwu/magisk/App.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
App.kt
View file @
707d7b33
package
com.topjohnwu.magisk
package
com.topjohnwu.magisk
.core
import
android.app.Application
import
android.app.Application
import
android.content.Context
import
android.content.Context
...
@@ -9,6 +9,12 @@ import androidx.room.Room
...
@@ -9,6 +9,12 @@ import androidx.room.Room
import
androidx.work.WorkManager
import
androidx.work.WorkManager
import
androidx.work.impl.WorkDatabase
import
androidx.work.impl.WorkDatabase
import
androidx.work.impl.WorkDatabase_Impl
import
androidx.work.impl.WorkDatabase_Impl
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.DynAPK
import
com.topjohnwu.magisk.FileProvider
import
com.topjohnwu.magisk.core.su.SuCallbackHandler
import
com.topjohnwu.magisk.core.utils.RootInit
import
com.topjohnwu.magisk.core.utils.updateConfig
import
com.topjohnwu.magisk.data.database.RepoDatabase
import
com.topjohnwu.magisk.data.database.RepoDatabase
import
com.topjohnwu.magisk.data.database.RepoDatabase_Impl
import
com.topjohnwu.magisk.data.database.RepoDatabase_Impl
import
com.topjohnwu.magisk.data.database.SuLogDatabase
import
com.topjohnwu.magisk.data.database.SuLogDatabase
...
@@ -17,9 +23,6 @@ import com.topjohnwu.magisk.di.ActivityTracker
...
@@ -17,9 +23,6 @@ import com.topjohnwu.magisk.di.ActivityTracker
import
com.topjohnwu.magisk.di.koinModules
import
com.topjohnwu.magisk.di.koinModules
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.unwrap
import
com.topjohnwu.magisk.extensions.unwrap
import
com.topjohnwu.magisk.utils.RootInit
import
com.topjohnwu.magisk.utils.SuHandler
import
com.topjohnwu.magisk.utils.updateConfig
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
org.koin.android.ext.koin.androidContext
import
org.koin.android.ext.koin.androidContext
import
org.koin.core.context.startKoin
import
org.koin.core.context.startKoin
...
@@ -37,7 +40,7 @@ open class App() : Application() {
...
@@ -37,7 +40,7 @@ open class App() : Application() {
Shell
.
Config
.
verboseLogging
(
BuildConfig
.
DEBUG
)
Shell
.
Config
.
verboseLogging
(
BuildConfig
.
DEBUG
)
Shell
.
Config
.
addInitializers
(
RootInit
::
class
.
java
)
Shell
.
Config
.
addInitializers
(
RootInit
::
class
.
java
)
Shell
.
Config
.
setTimeout
(
2
)
Shell
.
Config
.
setTimeout
(
2
)
FileProvider
.
callHandler
=
SuHandler
FileProvider
.
callHandler
=
Su
Callback
Handler
Room
.
setFactory
{
Room
.
setFactory
{
when
(
it
)
{
when
(
it
)
{
WorkDatabase
::
class
.
java
->
WorkDatabase_Impl
()
WorkDatabase
::
class
.
java
->
WorkDatabase_Impl
()
...
...
app/src/main/java/com/topjohnwu/magisk/Config.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
Config.kt
View file @
707d7b33
package
com.topjohnwu.magisk
package
com.topjohnwu.magisk
.core
import
android.content.Context
import
android.content.Context
import
android.content.SharedPreferences
import
android.content.SharedPreferences
...
@@ -6,16 +6,17 @@ import android.os.Environment
...
@@ -6,16 +6,17 @@ import android.os.Environment
import
android.util.Xml
import
android.util.Xml
import
androidx.appcompat.app.AppCompatDelegate
import
androidx.appcompat.app.AppCompatDelegate
import
androidx.core.content.edit
import
androidx.core.content.edit
import
com.topjohnwu.magisk.data.database.SettingsDao
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.data.database.StringDao
import
com.topjohnwu.magisk.core.magiskdb.SettingsDao
import
com.topjohnwu.magisk.core.magiskdb.StringDao
import
com.topjohnwu.magisk.data.repository.DBConfig
import
com.topjohnwu.magisk.data.repository.DBConfig
import
com.topjohnwu.magisk.di.Protected
import
com.topjohnwu.magisk.di.Protected
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.inject
import
com.topjohnwu.magisk.extensions.inject
import
com.topjohnwu.magisk.model.preference.PreferenceModel
import
com.topjohnwu.magisk.model.preference.PreferenceModel
import
com.topjohnwu.magisk.ui.theme.Theme
import
com.topjohnwu.magisk.ui.theme.Theme
import
com.topjohnwu.magisk.utils.BiometricHelper
import
com.topjohnwu.magisk.
core.
utils.BiometricHelper
import
com.topjohnwu.magisk.utils.Utils
import
com.topjohnwu.magisk.
core.
utils.Utils
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.io.SuFile
import
com.topjohnwu.superuser.io.SuFile
import
com.topjohnwu.superuser.io.SuFileInputStream
import
com.topjohnwu.superuser.io.SuFileInputStream
...
@@ -115,12 +116,24 @@ object Config : PreferenceModel, DBConfig {
...
@@ -115,12 +116,24 @@ object Config : PreferenceModel, DBConfig {
var
bootId
by
preference
(
Key
.
BOOT_ID
,
""
)
var
bootId
by
preference
(
Key
.
BOOT_ID
,
""
)
var
downloadPath
by
preference
(
Key
.
DOWNLOAD_PATH
,
Environment
.
DIRECTORY_DOWNLOADS
)
var
downloadPath
by
preference
(
Key
.
DOWNLOAD_PATH
,
Environment
.
DIRECTORY_DOWNLOADS
)
var
repoOrder
by
preference
(
Key
.
REPO_ORDER
,
Value
.
ORDER_DATE
)
var
repoOrder
by
preference
(
Key
.
REPO_ORDER
,
Value
.
ORDER_DATE
)
var
suDefaultTimeout
by
preferenceStrInt
(
Key
.
SU_REQUEST_TIMEOUT
,
10
)
var
suDefaultTimeout
by
preferenceStrInt
(
Key
.
SU_REQUEST_TIMEOUT
,
10
)
var
suAutoReponse
by
preferenceStrInt
(
Key
.
SU_AUTO_RESPONSE
,
Value
.
SU_PROMPT
)
var
suAutoReponse
by
preferenceStrInt
(
var
suNotification
by
preferenceStrInt
(
Key
.
SU_NOTIFICATION
,
Value
.
NOTIFICATION_TOAST
)
Key
.
SU_AUTO_RESPONSE
,
var
updateChannel
by
preferenceStrInt
(
Key
.
UPDATE_CHANNEL
,
defaultChannel
)
Value
.
SU_PROMPT
)
var
suNotification
by
preferenceStrInt
(
Key
.
SU_NOTIFICATION
,
Value
.
NOTIFICATION_TOAST
)
var
updateChannel
by
preferenceStrInt
(
Key
.
UPDATE_CHANNEL
,
defaultChannel
)
var
safetyNotice
by
preference
(
Key
.
SAFETY
,
true
)
var
safetyNotice
by
preference
(
Key
.
SAFETY
,
true
)
var
darkThemeExtended
by
preference
(
var
darkThemeExtended
by
preference
(
...
@@ -139,9 +152,18 @@ object Config : PreferenceModel, DBConfig {
...
@@ -139,9 +152,18 @@ object Config : PreferenceModel, DBConfig {
var
customChannelUrl
by
preference
(
Key
.
CUSTOM_CHANNEL
,
""
)
var
customChannelUrl
by
preference
(
Key
.
CUSTOM_CHANNEL
,
""
)
var
locale
by
preference
(
Key
.
LOCALE
,
""
)
var
locale
by
preference
(
Key
.
LOCALE
,
""
)
var
rootMode
by
dbSettings
(
Key
.
ROOT_ACCESS
,
Value
.
ROOT_ACCESS_APPS_AND_ADB
)
var
rootMode
by
dbSettings
(
var
suMntNamespaceMode
by
dbSettings
(
Key
.
SU_MNT_NS
,
Value
.
NAMESPACE_MODE_REQUESTER
)
Key
.
ROOT_ACCESS
,
var
suMultiuserMode
by
dbSettings
(
Key
.
SU_MULTIUSER_MODE
,
Value
.
MULTIUSER_MODE_OWNER_ONLY
)
Value
.
ROOT_ACCESS_APPS_AND_ADB
)
var
suMntNamespaceMode
by
dbSettings
(
Key
.
SU_MNT_NS
,
Value
.
NAMESPACE_MODE_REQUESTER
)
var
suMultiuserMode
by
dbSettings
(
Key
.
SU_MULTIUSER_MODE
,
Value
.
MULTIUSER_MODE_OWNER_ONLY
)
var
suBiometric
by
dbSettings
(
Key
.
SU_BIOMETRIC
,
false
)
var
suBiometric
by
dbSettings
(
Key
.
SU_BIOMETRIC
,
false
)
var
suManager
by
dbStrings
(
Key
.
SU_MANAGER
,
""
,
true
)
var
suManager
by
dbStrings
(
Key
.
SU_MANAGER
,
""
,
true
)
var
keyStoreRaw
by
dbStrings
(
Key
.
KEYSTORE
,
""
,
true
)
var
keyStoreRaw
by
dbStrings
(
Key
.
KEYSTORE
,
""
,
true
)
...
@@ -177,7 +199,9 @@ object Config : PreferenceModel, DBConfig {
...
@@ -177,7 +199,9 @@ object Config : PreferenceModel, DBConfig {
}
}
private
fun
parsePrefs
(
editor
:
SharedPreferences
.
Editor
)
=
editor
.
apply
{
private
fun
parsePrefs
(
editor
:
SharedPreferences
.
Editor
)
=
editor
.
apply
{
val
config
=
SuFile
.
open
(
"/data/adb"
,
Const
.
MANAGER_CONFIGS
)
val
config
=
SuFile
.
open
(
"/data/adb"
,
Const
.
MANAGER_CONFIGS
)
if
(
config
.
exists
())
runCatching
{
if
(
config
.
exists
())
runCatching
{
val
input
=
SuFileInputStream
(
config
)
val
input
=
SuFileInputStream
(
config
)
val
parser
=
Xml
.
newPullParser
()
val
parser
=
Xml
.
newPullParser
()
...
...
app/src/main/java/com/topjohnwu/magisk/Const.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
Const.kt
View file @
707d7b33
package
com.topjohnwu.magisk
package
com.topjohnwu.magisk
.core
import
android.os.Process
import
android.os.Process
import
java.io.File
import
java.io.File
...
...
app/src/main/java/com/topjohnwu/magisk/
model/receiver
/GeneralReceiver.kt
→
app/src/main/java/com/topjohnwu/magisk/
core
/GeneralReceiver.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
model.receiver
package
com.topjohnwu.magisk.
core
import
android.content.ContextWrapper
import
android.content.ContextWrapper
import
android.content.Intent
import
android.content.Intent
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.core.base.BaseReceiver
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.core.download.DownloadService
import
com.topjohnwu.magisk.Info
import
com.topjohnwu.magisk.core.magiskdb.PolicyDao
import
com.topjohnwu.magisk.base.BaseReceiver
import
com.topjohnwu.magisk.core.su.SuCallbackHandler
import
com.topjohnwu.magisk.data.database.PolicyDao
import
com.topjohnwu.magisk.extensions.reboot
import
com.topjohnwu.magisk.extensions.reboot
import
com.topjohnwu.magisk.model.download.DownloadService
import
com.topjohnwu.magisk.core.model.ManagerJson
import
com.topjohnwu.magisk.model.entity.ManagerJson
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.utils.SuHandler
import
com.topjohnwu.magisk.core.view.Shortcuts
import
com.topjohnwu.magisk.view.Shortcuts
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
org.koin.core.inject
import
org.koin.core.inject
...
@@ -30,7 +27,11 @@ open class GeneralReceiver : BaseReceiver() {
...
@@ -30,7 +27,11 @@ open class GeneralReceiver : BaseReceiver() {
when
(
intent
.
action
?:
return
)
{
when
(
intent
.
action
?:
return
)
{
Intent
.
ACTION_REBOOT
->
{
Intent
.
ACTION_REBOOT
->
{
SuHandler
(
context
,
intent
.
getStringExtra
(
"action"
),
intent
.
extras
)
SuCallbackHandler
(
context
,
intent
.
getStringExtra
(
"action"
),
intent
.
extras
)
}
}
Intent
.
ACTION_PACKAGE_REPLACED
->
{
Intent
.
ACTION_PACKAGE_REPLACED
->
{
// This will only work pre-O
// This will only work pre-O
...
...
app/src/main/java/com/topjohnwu/magisk/Hacks.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
Hacks.kt
View file @
707d7b33
@file
:
Suppress
(
"DEPRECATION"
)
@file
:
Suppress
(
"DEPRECATION"
)
package
com.topjohnwu.magisk
package
com.topjohnwu.magisk
.core
import
android.annotation.SuppressLint
import
android.annotation.SuppressLint
import
android.app.job.JobInfo
import
android.app.job.JobInfo
...
@@ -14,16 +14,15 @@ import android.content.res.AssetManager
...
@@ -14,16 +14,15 @@ import android.content.res.AssetManager
import
android.content.res.Configuration
import
android.content.res.Configuration
import
android.content.res.Resources
import
android.content.res.Resources
import
androidx.annotation.RequiresApi
import
androidx.annotation.RequiresApi
import
com.topjohnwu.magisk.DynAPK
import
com.topjohnwu.magisk.ProcessPhoenix
import
com.topjohnwu.magisk.core.download.DownloadService
import
com.topjohnwu.magisk.core.utils.refreshLocale
import
com.topjohnwu.magisk.core.utils.updateConfig
import
com.topjohnwu.magisk.extensions.forceGetDeclaredField
import
com.topjohnwu.magisk.extensions.forceGetDeclaredField
import
com.topjohnwu.magisk.model.download.DownloadService
import
com.topjohnwu.magisk.model.receiver.GeneralReceiver
import
com.topjohnwu.magisk.model.update.UpdateCheckService
import
com.topjohnwu.magisk.ui.MainActivity
import
com.topjohnwu.magisk.ui.SplashActivity
import
com.topjohnwu.magisk.legacy.flash.FlashActivity
import
com.topjohnwu.magisk.legacy.flash.FlashActivity
import
com.topjohnwu.magisk.legacy.surequest.SuRequestActivity
import
com.topjohnwu.magisk.legacy.surequest.SuRequestActivity
import
com.topjohnwu.magisk.utils.refreshLocale
import
com.topjohnwu.magisk.ui.MainActivity
import
com.topjohnwu.magisk.utils.updateConfig
fun
AssetManager
.
addAssetPath
(
path
:
String
)
{
fun
AssetManager
.
addAssetPath
(
path
:
String
)
{
DynAPK
.
addAssetPath
(
this
,
path
)
DynAPK
.
addAssetPath
(
this
,
path
)
...
...
app/src/main/java/com/topjohnwu/magisk/Info.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
Info.kt
View file @
707d7b33
package
com.topjohnwu.magisk
package
com.topjohnwu.magisk
.core
import
com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork
import
com.github.pwittchen.reactivenetwork.library.rx2.ReactiveNetwork
import
com.topjohnwu.magisk.DynAPK
import
com.topjohnwu.magisk.core.model.UpdateInfo
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.model.entity.UpdateInfo
import
com.topjohnwu.magisk.utils.CachedValue
import
com.topjohnwu.magisk.utils.CachedValue
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
...
...
app/src/main/java/com/topjohnwu/magisk/
ui
/SplashActivity.kt
→
app/src/main/java/com/topjohnwu/magisk/
core
/SplashActivity.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
ui
package
com.topjohnwu.magisk.
core
import
android.app.Activity
import
android.app.Activity
import
android.content.Context
import
android.content.Context
import
android.os.Bundle
import
android.os.Bundle
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.Info
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.utils.Utils
import
com.topjohnwu.magisk.core.utils.Utils
import
com.topjohnwu.magisk.view.Notifications
import
com.topjohnwu.magisk.core.view.Notifications
import
com.topjohnwu.magisk.view.Shortcuts
import
com.topjohnwu.magisk.core.view.Shortcuts
import
com.topjohnwu.magisk.wrap
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.ShellUtils
import
com.topjohnwu.superuser.ShellUtils
...
...
app/src/main/java/com/topjohnwu/magisk/
model/updat
e/UpdateCheckService.kt
→
app/src/main/java/com/topjohnwu/magisk/
cor
e/UpdateCheckService.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
model.updat
e
package
com.topjohnwu.magisk.
cor
e
import
androidx.work.ListenableWorker
import
androidx.work.ListenableWorker
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.
Info
import
com.topjohnwu.magisk.
core.base.BaseWorkerWrapper
import
com.topjohnwu.magisk.
base.DelegateWorker
import
com.topjohnwu.magisk.
core.view.Notifications
import
com.topjohnwu.magisk.data.repository.MagiskRepository
import
com.topjohnwu.magisk.data.repository.MagiskRepository
import
com.topjohnwu.magisk.extensions.inject
import
com.topjohnwu.magisk.extensions.inject
import
com.topjohnwu.magisk.view.Notifications
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
class
UpdateCheckService
:
DelegateWork
er
()
{
class
UpdateCheckService
:
BaseWorkerWrapp
er
()
{
private
val
magiskRepo
:
MagiskRepository
by
inject
()
private
val
magiskRepo
:
MagiskRepository
by
inject
()
...
...
app/src/main/java/com/topjohnwu/magisk/base/BaseActivity.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
base/BaseActivity.kt
View file @
707d7b33
package
com.topjohnwu.magisk.base
package
com.topjohnwu.magisk.
core.
base
import
android.Manifest
import
android.Manifest
import
android.content.Context
import
android.content.Context
import
android.content.Intent
import
android.content.Intent
import
android.content.pm.PackageManager
import
android.content.pm.PackageManager
import
android.content.res.Configuration
import
android.content.res.Configuration
import
android.os.Bundle
import
androidx.appcompat.app.AppCompatActivity
import
androidx.appcompat.app.AppCompatActivity
import
androidx.appcompat.app.AppCompatDelegate
import
androidx.collection.SparseArrayCompat
import
androidx.collection.SparseArrayCompat
import
androidx.core.app.ActivityCompat
import
androidx.core.app.ActivityCompat
import
androidx.core.content.ContextCompat
import
androidx.core.content.ContextCompat
import
androidx.databinding.DataBindingUtil
import
com.topjohnwu.magisk.core.utils.currentLocale
import
androidx.databinding.ViewDataBinding
import
com.topjohnwu.magisk.core.wrap
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.extensions.set
import
com.topjohnwu.magisk.extensions.set
import
com.topjohnwu.magisk.model.events.EventHandler
import
com.topjohnwu.magisk.model.permissions.PermissionRequestBuilder
import
com.topjohnwu.magisk.model.permissions.PermissionRequestBuilder
import
com.topjohnwu.magisk.utils.currentLocale
import
com.topjohnwu.magisk.wrap
import
kotlin.random.Random
import
kotlin.random.Random
typealias
RequestCallback
=
BaseActivity
<*,
*>
.(
Int
,
Intent
?)
->
Unit
typealias
RequestCallback
=
BaseActivity
.(
Int
,
Intent
?)
->
Unit
abstract
class
BaseActivity
<
ViewModel
:
BaseViewModel
,
Binding
:
ViewDataBinding
>
:
abstract
class
BaseActivity
:
AppCompatActivity
()
{
AppCompatActivity
(),
EventHandler
{
protected
lateinit
var
binding
:
Binding
protected
abstract
val
layoutRes
:
Int
protected
abstract
val
viewModel
:
ViewModel
protected
open
val
themeRes
:
Int
=
R
.
style
.
MagiskTheme
open
val
snackbarView
get
()
=
binding
.
root
private
val
resultCallbacks
by
lazy
{
SparseArrayCompat
<
RequestCallback
>()
}
private
val
resultCallbacks
by
lazy
{
SparseArrayCompat
<
RequestCallback
>()
}
init
{
val
theme
=
Config
.
darkThemeExtended
AppCompatDelegate
.
setDefaultNightMode
(
theme
)
}
override
fun
applyOverrideConfiguration
(
config
:
Configuration
?)
{
override
fun
applyOverrideConfiguration
(
config
:
Configuration
?)
{
// Force applying our preferred local
// Force applying our preferred local
config
?.
setLocale
(
currentLocale
)
config
?.
setLocale
(
currentLocale
)
...
@@ -52,18 +31,6 @@ abstract class BaseActivity<ViewModel : BaseViewModel, Binding : ViewDataBinding
...
@@ -52,18 +31,6 @@ abstract class BaseActivity<ViewModel : BaseViewModel, Binding : ViewDataBinding
super
.
attachBaseContext
(
base
.
wrap
(
false
))
super
.
attachBaseContext
(
base
.
wrap
(
false
))
}
}
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
setTheme
(
themeRes
)
super
.
onCreate
(
savedInstanceState
)
viewModel
.
viewEvents
.
observe
(
this
,
viewEventObserver
)
binding
=
DataBindingUtil
.
setContentView
<
Binding
>(
this
,
layoutRes
).
apply
{
setVariable
(
BR
.
viewModel
,
viewModel
)
lifecycleOwner
=
this
@BaseActivity
}
}
fun
withPermissions
(
vararg
permissions
:
String
,
builder
:
PermissionRequestBuilder
.()
->
Unit
)
{
fun
withPermissions
(
vararg
permissions
:
String
,
builder
:
PermissionRequestBuilder
.()
->
Unit
)
{
val
request
=
PermissionRequestBuilder
().
apply
(
builder
).
build
()
val
request
=
PermissionRequestBuilder
().
apply
(
builder
).
build
()
val
ungranted
=
permissions
.
filter
{
val
ungranted
=
permissions
.
filter
{
...
@@ -97,18 +64,18 @@ abstract class BaseActivity<ViewModel : BaseViewModel, Binding : ViewDataBinding
...
@@ -97,18 +64,18 @@ abstract class BaseActivity<ViewModel : BaseViewModel, Binding : ViewDataBinding
break
break
}
}
}
}
resultCallbacks
[
requestCode
]
?.
a
pply
{
resultCallbacks
[
requestCode
]
?.
a
lso
{
resultCallbacks
.
remove
(
requestCode
)
resultCallbacks
.
remove
(
requestCode
)
i
nvoke
(
this
@BaseActivity
,
if
(
success
)
1
else
-
1
,
null
)
i
t
(
this
@BaseActivity
,
if
(
success
)
1
else
-
1
,
null
)
}
}
}
}
override
fun
onActivityResult
(
requestCode
:
Int
,
resultCode
:
Int
,
data
:
Intent
?)
{
override
fun
onActivityResult
(
requestCode
:
Int
,
resultCode
:
Int
,
data
:
Intent
?)
{
super
.
onActivityResult
(
requestCode
,
resultCode
,
data
)
super
.
onActivityResult
(
requestCode
,
resultCode
,
data
)
resultCallbacks
[
requestCode
]
?.
a
pply
{
resultCallbacks
[
requestCode
]
?.
a
lso
{
resultCallbacks
.
remove
(
requestCode
)
resultCallbacks
.
remove
(
requestCode
)
i
nvoke
(
this
@BaseActivity
,
resultCode
,
data
)
i
t
(
this
@BaseActivity
,
resultCode
,
data
)
}
}
}
}
...
...
app/src/main/java/com/topjohnwu/magisk/base/BaseReceiver.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
base/BaseReceiver.kt
View file @
707d7b33
package
com.topjohnwu.magisk.base
package
com.topjohnwu.magisk.
core.
base
import
android.content.BroadcastReceiver
import
android.content.BroadcastReceiver
import
android.content.Context
import
android.content.Context
import
android.content.ContextWrapper
import
android.content.ContextWrapper
import
android.content.Intent
import
android.content.Intent
import
com.topjohnwu.magisk.wrap
import
com.topjohnwu.magisk.
core.
wrap
import
org.koin.core.KoinComponent
import
org.koin.core.KoinComponent
abstract
class
BaseReceiver
:
BroadcastReceiver
(),
KoinComponent
{
abstract
class
BaseReceiver
:
BroadcastReceiver
(),
KoinComponent
{
...
...
app/src/main/java/com/topjohnwu/magisk/base/BaseService.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
base/BaseService.kt
View file @
707d7b33
package
com.topjohnwu.magisk.base
package
com.topjohnwu.magisk.
core.
base
import
android.app.Service
import
android.app.Service
import
android.content.Context
import
android.content.Context
import
com.topjohnwu.magisk.wrap
import
com.topjohnwu.magisk.
core.
wrap
import
org.koin.core.KoinComponent
import
org.koin.core.KoinComponent
abstract
class
BaseService
:
Service
(),
KoinComponent
{
abstract
class
BaseService
:
Service
(),
KoinComponent
{
...
...
app/src/main/java/com/topjohnwu/magisk/
base/DelegateWork
er.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/base/BaseWorkerWrapp
er.kt
View file @
707d7b33
package
com.topjohnwu.magisk.base
package
com.topjohnwu.magisk.
core.
base
import
android.content.Context
import
android.content.Context
import
android.net.Network
import
android.net.Network
...
@@ -10,7 +10,7 @@ import androidx.work.ListenableWorker
...
@@ -10,7 +10,7 @@ import androidx.work.ListenableWorker
import
com.google.common.util.concurrent.ListenableFuture
import
com.google.common.util.concurrent.ListenableFuture
import
java.util.*
import
java.util.*
abstract
class
DelegateWork
er
{
abstract
class
BaseWorkerWrapp
er
{
private
lateinit
var
worker
:
ListenableWorker
private
lateinit
var
worker
:
ListenableWorker
...
...
app/src/main/java/com/topjohnwu/magisk/
model
/download/DownloadService.kt
→
app/src/main/java/com/topjohnwu/magisk/
core
/download/DownloadService.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
model
.download
package
com.topjohnwu.magisk.
core
.download
import
android.annotation.SuppressLint
import
android.annotation.SuppressLint
import
android.app.Notification
import
android.app.Notification
...
@@ -8,15 +8,15 @@ import android.content.Intent
...
@@ -8,15 +8,15 @@ import android.content.Intent
import
android.os.Build
import
android.os.Build
import
android.webkit.MimeTypeMap
import
android.webkit.MimeTypeMap
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.intent
import
com.topjohnwu.magisk.extensions.chooser
import
com.topjohnwu.magisk.extensions.chooser
import
com.topjohnwu.magisk.extensions.exists
import
com.topjohnwu.magisk.extensions.exists
import
com.topjohnwu.magisk.extensions.provide
import
com.topjohnwu.magisk.extensions.provide
import
com.topjohnwu.magisk.
intent
import
com.topjohnwu.magisk.
legacy.flash.FlashActivity
import
com.topjohnwu.magisk.model.entity.internal.Configuration.*
import
com.topjohnwu.magisk.model.entity.internal.Configuration.*
import
com.topjohnwu.magisk.model.entity.internal.Configuration.Flash.Secondary
import
com.topjohnwu.magisk.model.entity.internal.Configuration.Flash.Secondary
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject.*
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject.*
import
com.topjohnwu.magisk.legacy.flash.FlashActivity
import
com.topjohnwu.magisk.utils.APKInstall
import
com.topjohnwu.magisk.utils.APKInstall
import
org.koin.core.get
import
org.koin.core.get
import
java.io.File
import
java.io.File
...
...
app/src/main/java/com/topjohnwu/magisk/
model
/download/ManagerUpgrade.kt
→
app/src/main/java/com/topjohnwu/magisk/
core
/download/ManagerUpgrade.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
model
.download
package
com.topjohnwu.magisk.
core
.download
import
com.topjohnwu.magisk.*
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.DynAPK
import
com.topjohnwu.magisk.ProcessPhoenix
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.Info
import
com.topjohnwu.magisk.core.intent
import
com.topjohnwu.magisk.core.isRunningAsStub
import
com.topjohnwu.magisk.core.utils.PatchAPK
import
com.topjohnwu.magisk.extensions.writeTo
import
com.topjohnwu.magisk.extensions.writeTo
import
com.topjohnwu.magisk.model.entity.internal.Configuration.APK.Restore
import
com.topjohnwu.magisk.model.entity.internal.Configuration.APK.Restore
import
com.topjohnwu.magisk.model.entity.internal.Configuration.APK.Upgrade
import
com.topjohnwu.magisk.model.entity.internal.Configuration.APK.Upgrade
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.utils.PatchAPK
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
java.io.File
import
java.io.File
...
...
app/src/main/java/com/topjohnwu/magisk/
model
/download/ModuleProcessor.kt
→
app/src/main/java/com/topjohnwu/magisk/
core
/download/ModuleProcessor.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
model
.download
package
com.topjohnwu.magisk.
core
.download
import
com.topjohnwu.magisk.extensions.withStreams
import
com.topjohnwu.magisk.extensions.withStreams
import
java.io.File
import
java.io.File
...
...
app/src/main/java/com/topjohnwu/magisk/
model
/download/NotificationService.kt
→
app/src/main/java/com/topjohnwu/magisk/
core
/download/NotificationService.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
model
.download
package
com.topjohnwu.magisk.
core
.download
import
android.app.Notification
import
android.app.Notification
import
android.content.Intent
import
android.content.Intent
import
android.os.IBinder
import
android.os.IBinder
import
com.topjohnwu.magisk.base.BaseService
import
com.topjohnwu.magisk.
core.
base.BaseService
import
com.topjohnwu.magisk.view.Notifications
import
com.topjohnwu.magisk.
core.
view.Notifications
import
org.koin.core.KoinComponent
import
org.koin.core.KoinComponent
import
java.util.*
import
java.util.*
import
kotlin.random.Random.Default.nextInt
import
kotlin.random.Random.Default.nextInt
...
...
app/src/main/java/com/topjohnwu/magisk/
model
/download/RemoteFileService.kt
→
app/src/main/java/com/topjohnwu/magisk/
core
/download/RemoteFileService.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
model
.download
package
com.topjohnwu.magisk.
core
.download
import
android.app.Activity
import
android.app.Activity
import
android.app.Notification
import
android.app.Notification
...
@@ -13,8 +13,8 @@ import com.topjohnwu.magisk.extensions.subscribeK
...
@@ -13,8 +13,8 @@ import com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.writeTo
import
com.topjohnwu.magisk.extensions.writeTo
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject.*
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject.*
import
com.topjohnwu.magisk.utils.ProgressInputStream
import
com.topjohnwu.magisk.
core.
utils.ProgressInputStream
import
com.topjohnwu.magisk.view.Notifications
import
com.topjohnwu.magisk.
core.
view.Notifications
import
com.topjohnwu.superuser.ShellUtils
import
com.topjohnwu.superuser.ShellUtils
import
io.reactivex.Completable
import
io.reactivex.Completable
import
okhttp3.ResponseBody
import
okhttp3.ResponseBody
...
...
app/src/main/java/com/topjohnwu/magisk/
data/databas
e/magiskdb/BaseDao.kt
→
app/src/main/java/com/topjohnwu/magisk/
cor
e/magiskdb/BaseDao.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
data.databas
e.magiskdb
package
com.topjohnwu.magisk.
cor
e.magiskdb
import
androidx.annotation.StringDef
import
androidx.annotation.StringDef
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
...
...
app/src/main/java/com/topjohnwu/magisk/
data/database
/PolicyDao.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/magiskdb
/PolicyDao.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
data.database
package
com.topjohnwu.magisk.
core.magiskdb
import
android.content.Context
import
android.content.Context
import
android.content.pm.PackageManager
import
android.content.pm.PackageManager
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.data.database.magiskdb.BaseDao
import
com.topjohnwu.magisk.core.model.MagiskPolicy
import
com.topjohnwu.magisk.data.database.magiskdb.Delete
import
com.topjohnwu.magisk.core.model.toMap
import
com.topjohnwu.magisk.data.database.magiskdb.Replace
import
com.topjohnwu.magisk.core.model.toPolicy
import
com.topjohnwu.magisk.data.database.magiskdb.Select
import
com.topjohnwu.magisk.extensions.now
import
com.topjohnwu.magisk.extensions.now
import
com.topjohnwu.magisk.model.entity.MagiskPolicy
import
com.topjohnwu.magisk.model.entity.toMap
import
com.topjohnwu.magisk.model.entity.toPolicy
import
timber.log.Timber
import
timber.log.Timber
import
java.util.concurrent.TimeUnit
import
java.util.concurrent.TimeUnit
...
...
app/src/main/java/com/topjohnwu/magisk/
data/databas
e/magiskdb/Query.kt
→
app/src/main/java/com/topjohnwu/magisk/
cor
e/magiskdb/Query.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
data.databas
e.magiskdb
package
com.topjohnwu.magisk.
cor
e.magiskdb
import
androidx.annotation.StringDef
import
androidx.annotation.StringDef
...
...
app/src/main/java/com/topjohnwu/magisk/
data/database
/SettingsDao.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/magiskdb
/SettingsDao.kt
View file @
707d7b33
package
com.topjohnwu.magisk.data.database
package
com.topjohnwu.magisk.core.magiskdb
import
com.topjohnwu.magisk.data.database.magiskdb.BaseDao
import
com.topjohnwu.magisk.data.database.magiskdb.Delete
import
com.topjohnwu.magisk.data.database.magiskdb.Replace
import
com.topjohnwu.magisk.data.database.magiskdb.Select
class
SettingsDao
:
BaseDao
()
{
class
SettingsDao
:
BaseDao
()
{
...
...
app/src/main/java/com/topjohnwu/magisk/
data/database
/StringDao.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/magiskdb
/StringDao.kt
View file @
707d7b33
package
com.topjohnwu.magisk.data.database
package
com.topjohnwu.magisk.core.magiskdb
import
com.topjohnwu.magisk.data.database.magiskdb.BaseDao
import
com.topjohnwu.magisk.data.database.magiskdb.Delete
import
com.topjohnwu.magisk.data.database.magiskdb.Replace
import
com.topjohnwu.magisk.data.database.magiskdb.Select
class
StringDao
:
BaseDao
()
{
class
StringDao
:
BaseDao
()
{
...
...
app/src/main/java/com/topjohnwu/magisk/
model/entity
/MagiskPolicy.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/model
/MagiskPolicy.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
model.entity
package
com.topjohnwu.magisk.
core.model
import
android.content.pm.ApplicationInfo
import
android.content.pm.ApplicationInfo
import
android.content.pm.PackageManager
import
android.content.pm.PackageManager
import
com.topjohnwu.magisk.core.model.MagiskPolicy.Companion.INTERACTIVE
import
com.topjohnwu.magisk.extensions.getLabel
import
com.topjohnwu.magisk.extensions.getLabel
import
com.topjohnwu.magisk.model.entity.MagiskPolicy.Companion.INTERACTIVE
data class
MagiskPolicy
(
data class
MagiskPolicy
(
...
...
app/src/main/java/com/topjohnwu/magisk/
model/entity
/UpdateInfo.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/model
/UpdateInfo.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
model.entity
package
com.topjohnwu.magisk.
core.model
import
android.os.Parcelable
import
android.os.Parcelable
import
kotlinx.android.parcel.Parcelize
import
kotlinx.android.parcel.Parcelize
...
...
app/src/main/java/com/topjohnwu/magisk/
model/entity
/module/BaseModule.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/model
/module/BaseModule.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
model.entity
.module
package
com.topjohnwu.magisk.
core.model
.module
abstract
class
BaseModule
:
Comparable
<
BaseModule
>
{
abstract
class
BaseModule
:
Comparable
<
BaseModule
>
{
abstract
var
id
:
String
abstract
var
id
:
String
...
...
app/src/main/java/com/topjohnwu/magisk/
model/entity
/module/Module.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/model
/module/Module.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
model.entity
.module
package
com.topjohnwu.magisk.
core.model
.module
import
androidx.annotation.WorkerThread
import
androidx.annotation.WorkerThread
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.
core.
Const
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.io.SuFile
import
com.topjohnwu.superuser.io.SuFile
...
...
app/src/main/java/com/topjohnwu/magisk/
model/entity
/module/Repo.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/model
/module/Repo.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
model.entity
.module
package
com.topjohnwu.magisk.
core.model
.module
import
android.os.Parcelable
import
android.os.Parcelable
import
androidx.room.Entity
import
androidx.room.Entity
import
androidx.room.PrimaryKey
import
androidx.room.PrimaryKey
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.
core.
Const
import
com.topjohnwu.magisk.data.repository.StringRepository
import
com.topjohnwu.magisk.data.repository.StringRepository
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.legalFilename
import
com.topjohnwu.magisk.extensions.legalFilename
...
...
app/src/main/java/com/topjohnwu/magisk/
utils/Su
Handler.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/su/SuCallback
Handler.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
utils
package
com.topjohnwu.magisk.
core.su
import
android.content.Context
import
android.content.Context
import
android.content.Intent
import
android.content.Intent
...
@@ -6,20 +6,26 @@ import android.os.Build
...
@@ -6,20 +6,26 @@ import android.os.Build
import
android.os.Bundle
import
android.os.Bundle
import
android.os.Process
import
android.os.Process
import
android.widget.Toast
import
android.widget.Toast
import
com.topjohnwu.magisk.*
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.ProviderCallHandler
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.intent
import
com.topjohnwu.magisk.core.model.MagiskPolicy
import
com.topjohnwu.magisk.core.model.toPolicy
import
com.topjohnwu.magisk.core.wrap
import
com.topjohnwu.magisk.data.repository.LogRepository
import
com.topjohnwu.magisk.data.repository.LogRepository
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.startActivity
import
com.topjohnwu.magisk.extensions.startActivity
import
com.topjohnwu.magisk.extensions.startActivityWithRoot
import
com.topjohnwu.magisk.extensions.startActivityWithRoot
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.model.entity.MagiskPolicy
import
com.topjohnwu.magisk.model.entity.toLog
import
com.topjohnwu.magisk.model.entity.toPolicy
import
com.topjohnwu.magisk.legacy.surequest.SuRequestActivity
import
com.topjohnwu.magisk.legacy.surequest.SuRequestActivity
import
com.topjohnwu.magisk.model.entity.toLog
import
com.topjohnwu.magisk.core.utils.Utils
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
timber.log.Timber
import
timber.log.Timber
object
SuHandler
:
ProviderCallHandler
{
object
Su
Callback
Handler
:
ProviderCallHandler
{
const
val
REQUEST
=
"request"
const
val
REQUEST
=
"request"
const
val
LOG
=
"log"
const
val
LOG
=
"log"
...
...
app/src/main/java/com/topjohnwu/magisk/
utils
/SuConnector.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/su
/SuConnector.kt
View file @
707d7b33
package
com.topjohnwu.magisk.
utils
package
com.topjohnwu.magisk.
core.su
import
android.net.LocalSocket
import
android.net.LocalSocket
import
android.net.LocalSocketAddress
import
android.net.LocalSocketAddress
...
...
app/src/main/java/com/topjohnwu/magisk/core/su/SuRequestHandler.kt
0 → 100644
View file @
707d7b33
package
com.topjohnwu.magisk.core.su
import
android.content.Intent
import
android.content.pm.PackageManager
import
android.os.CountDownTimer
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.core.magiskdb.PolicyDao
import
com.topjohnwu.magisk.core.model.MagiskPolicy
import
com.topjohnwu.magisk.core.model.toPolicy
import
com.topjohnwu.magisk.extensions.now
import
timber.log.Timber
import
java.util.concurrent.TimeUnit
abstract
class
SuRequestHandler
(
private
val
packageManager
:
PackageManager
,
private
val
policyDB
:
PolicyDao
)
{
protected
var
timer
:
CountDownTimer
=
object
:
CountDownTimer
(
TimeUnit
.
MINUTES
.
toMillis
(
1
),
TimeUnit
.
MINUTES
.
toMillis
(
1
))
{
override
fun
onFinish
()
{
respond
(
MagiskPolicy
.
DENY
,
0
)
}
override
fun
onTick
(
remains
:
Long
)
{}
}
set
(
value
)
{
field
.
cancel
()
field
=
value
field
.
start
()
}
protected
lateinit
var
policy
:
MagiskPolicy
private
val
cleanupTasks
=
mutableListOf
<()
->
Unit
>()
private
lateinit
var
connector
:
SuConnector
abstract
fun
onStart
()
abstract
fun
onRespond
()
fun
start
(
intent
:
Intent
):
Boolean
{
val
socketName
=
intent
.
getStringExtra
(
"socket"
)
?:
return
false
try
{
connector
=
object
:
SuConnector
(
socketName
)
{
override
fun
onResponse
()
{
out
.
writeInt
(
policy
.
policy
)
}
}
val
map
=
connector
.
readRequest
()
val
uid
=
map
[
"uid"
]
?.
toIntOrNull
()
?:
return
false
policy
=
uid
.
toPolicy
(
packageManager
)
}
catch
(
e
:
Exception
)
{
Timber
.
e
(
e
)
return
false
}
// Never allow com.topjohnwu.magisk (could be malware)
if
(
policy
.
packageName
==
BuildConfig
.
APPLICATION_ID
)
return
false
when
(
Config
.
suAutoReponse
)
{
Config
.
Value
.
SU_AUTO_DENY
->
{
respond
(
MagiskPolicy
.
DENY
,
0
)
return
true
}
Config
.
Value
.
SU_AUTO_ALLOW
->
{
respond
(
MagiskPolicy
.
ALLOW
,
0
)
return
true
}
}
timer
.
start
()
cleanupTasks
.
add
{
timer
.
cancel
()
}
onStart
()
return
true
}
private
fun
respond
()
{
connector
.
response
()
cleanupTasks
.
forEach
{
it
()
}
onRespond
()
}
fun
respond
(
action
:
Int
,
time
:
Int
)
{
val
until
=
if
(
time
>
0
)
TimeUnit
.
MILLISECONDS
.
toSeconds
(
now
)
+
TimeUnit
.
MINUTES
.
toSeconds
(
time
.
toLong
())
else
time
.
toLong
()
policy
.
policy
=
action
policy
.
until
=
until
policy
.
uid
=
policy
.
uid
%
100000
+
Const
.
USER_ID
*
100000
if
(
until
>=
0
)
policyDB
.
update
(
policy
).
blockingAwait
()
respond
()
}
}
app/src/main/java/com/topjohnwu/magisk/tasks/FlashZip.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
tasks/FlashZip.kt
View file @
707d7b33
package
com.topjohnwu.magisk.tasks
package
com.topjohnwu.magisk.
core.
tasks
import
android.content.Context
import
android.content.Context
import
android.net.Uri
import
android.net.Uri
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.
core.
Const
import
com.topjohnwu.magisk.extensions.fileName
import
com.topjohnwu.magisk.extensions.fileName
import
com.topjohnwu.magisk.extensions.inject
import
com.topjohnwu.magisk.extensions.inject
import
com.topjohnwu.magisk.extensions.readUri
import
com.topjohnwu.magisk.extensions.readUri
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.utils.unzip
import
com.topjohnwu.magisk.
core.
utils.unzip
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
io.reactivex.Single
import
io.reactivex.Single
import
java.io.File
import
java.io.File
...
...
app/src/main/java/com/topjohnwu/magisk/tasks/MagiskInstaller.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
tasks/MagiskInstaller.kt
View file @
707d7b33
package
com.topjohnwu.magisk.tasks
package
com.topjohnwu.magisk.
core.
tasks
import
android.content.Context
import
android.content.Context
import
android.net.Uri
import
android.net.Uri
...
@@ -6,11 +6,13 @@ import android.os.Build
...
@@ -6,11 +6,13 @@ import android.os.Build
import
android.text.TextUtils
import
android.text.TextUtils
import
androidx.annotation.MainThread
import
androidx.annotation.MainThread
import
androidx.annotation.WorkerThread
import
androidx.annotation.WorkerThread
import
com.topjohnwu.magisk.Config
import
androidx.core.net.toUri
import
com.topjohnwu.magisk.Info
import
com.topjohnwu.magisk.core.Info
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.data.network.GithubRawServices
import
com.topjohnwu.magisk.data.network.GithubRawServices
import
com.topjohnwu.magisk.di.Protected
import
com.topjohnwu.magisk.di.Protected
import
com.topjohnwu.magisk.extensions.*
import
com.topjohnwu.magisk.extensions.*
import
com.topjohnwu.magisk.net.Networking
import
com.topjohnwu.signing.SignBoot
import
com.topjohnwu.signing.SignBoot
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.ShellUtils
import
com.topjohnwu.superuser.ShellUtils
...
@@ -34,10 +36,10 @@ import java.util.zip.ZipInputStream
...
@@ -34,10 +36,10 @@ import java.util.zip.ZipInputStream
abstract
class
MagiskInstaller
{
abstract
class
MagiskInstaller
{
protected
lateinit
var
srcBoot
:
String
protected
lateinit
var
destFile
:
File
protected
lateinit
var
installDir
:
File
protected
lateinit
var
installDir
:
File
protected
lateinit
var
zipUri
:
Uri
private
lateinit
var
srcBoot
:
String
private
lateinit
var
destFile
:
File
private
lateinit
var
zipUri
:
Uri
private
val
console
:
MutableList
<
String
>
private
val
console
:
MutableList
<
String
>
private
val
logs
:
MutableList
<
String
>
private
val
logs
:
MutableList
<
String
>
...
@@ -60,7 +62,7 @@ abstract class MagiskInstaller {
...
@@ -60,7 +62,7 @@ abstract class MagiskInstaller {
installDir
.
mkdirs
()
installDir
.
mkdirs
()
}
}
pr
otected
fun
findImage
():
Boolean
{
pr
ivate
fun
findImage
():
Boolean
{
srcBoot
=
"find_boot_image; echo \"\$BOOTIMAGE\""
.
fsh
()
srcBoot
=
"find_boot_image; echo \"\$BOOTIMAGE\""
.
fsh
()
if
(
srcBoot
.
isEmpty
())
{
if
(
srcBoot
.
isEmpty
())
{
console
.
add
(
"! Unable to detect target image"
)
console
.
add
(
"! Unable to detect target image"
)
...
@@ -70,7 +72,7 @@ abstract class MagiskInstaller {
...
@@ -70,7 +72,7 @@ abstract class MagiskInstaller {
return
true
return
true
}
}
pr
otected
fun
findSecondaryImage
():
Boolean
{
pr
ivate
fun
findSecondaryImage
():
Boolean
{
val
slot
=
"echo \$SLOT"
.
fsh
()
val
slot
=
"echo \$SLOT"
.
fsh
()
val
target
=
if
(
slot
==
"_a"
)
"_b"
else
"_a"
val
target
=
if
(
slot
==
"_a"
)
"_b"
else
"_a"
console
.
add
(
"- Target slot: $target"
)
console
.
add
(
"- Target slot: $target"
)
...
@@ -87,7 +89,7 @@ abstract class MagiskInstaller {
...
@@ -87,7 +89,7 @@ abstract class MagiskInstaller {
return
true
return
true
}
}
pr
otected
fun
extractZip
():
Boolean
{
pr
ivate
fun
extractZip
():
Boolean
{
val
arch
:
String
val
arch
:
String
arch
=
if
(
Build
.
VERSION
.
SDK_INT
>=
21
)
{
arch
=
if
(
Build
.
VERSION
.
SDK_INT
>=
21
)
{
val
abis
=
listOf
(*
Build
.
SUPPORTED_ABIS
)
val
abis
=
listOf
(*
Build
.
SUPPORTED_ABIS
)
...
@@ -208,7 +210,7 @@ abstract class MagiskInstaller {
...
@@ -208,7 +210,7 @@ abstract class MagiskInstaller {
}
}
}
}
pr
otected
fun
handleFile
(
uri
:
Uri
):
Boolean
{
pr
ivate
fun
handleFile
(
uri
:
Uri
):
Boolean
{
try
{
try
{
context
.
readUri
(
uri
).
buffered
().
use
{
context
.
readUri
(
uri
).
buffered
().
use
{
it
.
mark
(
500
)
it
.
mark
(
500
)
...
@@ -238,7 +240,7 @@ abstract class MagiskInstaller {
...
@@ -238,7 +240,7 @@ abstract class MagiskInstaller {
return
true
return
true
}
}
pr
otected
fun
patchBoot
():
Boolean
{
pr
ivate
fun
patchBoot
():
Boolean
{
var
isSigned
=
false
var
isSigned
=
false
try
{
try
{
SuFileInputStream
(
srcBoot
).
use
{
SuFileInputStream
(
srcBoot
).
use
{
...
@@ -284,7 +286,7 @@ abstract class MagiskInstaller {
...
@@ -284,7 +286,7 @@ abstract class MagiskInstaller {
return
true
return
true
}
}
pr
otected
fun
flashBoot
():
Boolean
{
pr
ivate
fun
flashBoot
():
Boolean
{
if
(!
"direct_install $installDir $srcBoot"
.
sh
().
isSuccess
)
if
(!
"direct_install $installDir $srcBoot"
.
sh
().
isSuccess
)
return
false
return
false
arrayOf
(
arrayOf
(
...
@@ -294,7 +296,7 @@ abstract class MagiskInstaller {
...
@@ -294,7 +296,7 @@ abstract class MagiskInstaller {
return
true
return
true
}
}
pr
otected
fun
storeBoot
():
Boolean
{
pr
ivate
fun
storeBoot
():
Boolean
{
val
patched
=
SuFile
.
open
(
installDir
,
"new-boot.img"
)
val
patched
=
SuFile
.
open
(
installDir
,
"new-boot.img"
)
try
{
try
{
val
os
=
tarOut
?.
let
{
val
os
=
tarOut
?.
let
{
...
@@ -320,7 +322,7 @@ abstract class MagiskInstaller {
...
@@ -320,7 +322,7 @@ abstract class MagiskInstaller {
return
true
return
true
}
}
pr
otected
fun
postOTA
():
Boolean
{
pr
ivate
fun
postOTA
():
Boolean
{
val
bootctl
=
SuFile
(
"/data/adb/bootctl"
)
val
bootctl
=
SuFile
(
"/data/adb/bootctl"
)
try
{
try
{
withStreams
(
service
.
fetchBootctl
().
blockingGet
().
byteStream
(),
bootctl
.
suOutputStream
())
{
withStreams
(
service
.
fetchBootctl
().
blockingGet
().
byteStream
(),
bootctl
.
suOutputStream
())
{
...
@@ -345,6 +347,28 @@ abstract class MagiskInstaller {
...
@@ -345,6 +347,28 @@ abstract class MagiskInstaller {
private
fun
String
.
fsh
()
=
ShellUtils
.
fastCmd
(
this
)
private
fun
String
.
fsh
()
=
ShellUtils
.
fastCmd
(
this
)
private
fun
Array
<
String
>.
fsh
()
=
ShellUtils
.
fastCmd
(*
this
)
private
fun
Array
<
String
>.
fsh
()
=
ShellUtils
.
fastCmd
(*
this
)
protected
fun
doPatchFile
(
patchFile
:
Uri
)
=
extractZip
()
&&
handleFile
(
patchFile
)
&&
patchBoot
()
&&
storeBoot
()
protected
fun
direct
()
=
findImage
()
&&
extractZip
()
&&
patchBoot
()
&&
flashBoot
()
protected
fun
secondSlot
()
=
findSecondaryImage
()
&&
extractZip
()
&&
patchBoot
()
&&
flashBoot
()
&&
postOTA
()
protected
fun
fixEnv
():
Boolean
{
val
context
=
get
<
Context
>()
val
zip
:
File
=
context
.
cachedFile
(
"magisk.zip"
)
installDir
=
SuFile
(
"/data/adb/magisk"
)
Shell
.
su
(
"rm -rf /data/adb/magisk/*"
).
exec
()
if
(!
ShellUtils
.
checkSum
(
"MD5"
,
zip
,
Info
.
remote
.
magisk
.
md5
))
Networking
.
get
(
Info
.
remote
.
magisk
.
link
).
execForFile
(
zip
)
zipUri
=
zip
.
toUri
()
return
extractZip
()
&&
Shell
.
su
(
"fix_env"
).
exec
().
isSuccess
}
@WorkerThread
@WorkerThread
protected
abstract
fun
operations
():
Boolean
protected
abstract
fun
operations
():
Boolean
...
...
app/src/main/java/com/topjohnwu/magisk/tasks/RepoUpdater.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
tasks/RepoUpdater.kt
View file @
707d7b33
package
com.topjohnwu.magisk.tasks
package
com.topjohnwu.magisk.
core.
tasks
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.core.model.module.Repo
import
com.topjohnwu.magisk.data.database.RepoDao
import
com.topjohnwu.magisk.data.database.RepoDao
import
com.topjohnwu.magisk.data.network.GithubApiServices
import
com.topjohnwu.magisk.data.network.GithubApiServices
import
com.topjohnwu.magisk.model.entity.module.Repo
import
io.reactivex.Completable
import
io.reactivex.Flowable
import
io.reactivex.Flowable
import
io.reactivex.Single
import
io.reactivex.rxkotlin.toFlowable
import
io.reactivex.rxkotlin.toFlowable
import
io.reactivex.schedulers.Schedulers
import
io.reactivex.schedulers.Schedulers
import
se.ansman.kotshi.JsonSerializable
import
se.ansman.kotshi.JsonSerializable
...
@@ -19,7 +19,6 @@ class RepoUpdater(
...
@@ -19,7 +19,6 @@ class RepoUpdater(
private
val
api
:
GithubApiServices
,
private
val
api
:
GithubApiServices
,
private
val
repoDB
:
RepoDao
private
val
repoDB
:
RepoDao
)
{
)
{
private
fun
loadRepos
(
repos
:
List
<
GithubRepoInfo
>,
cached
:
MutableSet
<
String
>)
=
private
fun
loadRepos
(
repos
:
List
<
GithubRepoInfo
>,
cached
:
MutableSet
<
String
>)
=
repos
.
toFlowable
().
parallel
().
runOn
(
Schedulers
.
io
()).
map
{
repos
.
toFlowable
().
parallel
().
runOn
(
Schedulers
.
io
()).
map
{
// Skip submission
// Skip submission
...
@@ -64,7 +63,7 @@ class RepoUpdater(
...
@@ -64,7 +63,7 @@ class RepoUpdater(
private
fun
String
.
trimEtag
()
=
substring
(
indexOf
(
'\"'
),
lastIndexOf
(
'\"'
)
+
1
)
private
fun
String
.
trimEtag
()
=
substring
(
indexOf
(
'\"'
),
lastIndexOf
(
'\"'
)
+
1
)
@Suppress
(
"RedundantLambdaArrow"
)
@Suppress
(
"RedundantLambdaArrow"
)
operator
fun
invoke
(
forced
:
Boolean
=
false
)
:
Single
<
Unit
>
{
operator
fun
invoke
(
forced
:
Boolean
=
false
)
:
Completable
{
val
cached
=
Collections
.
synchronizedSet
(
HashSet
(
repoDB
.
repoIDList
))
val
cached
=
Collections
.
synchronizedSet
(
HashSet
(
repoDB
.
repoIDList
))
return
loadPage
(
cached
,
etag
=
repoDB
.
etagKey
).
doOnComplete
{
return
loadPage
(
cached
,
etag
=
repoDB
.
etagKey
).
doOnComplete
{
repoDB
.
removeRepos
(
cached
)
repoDB
.
removeRepos
(
cached
)
...
@@ -76,7 +75,7 @@ class RepoUpdater(
...
@@ -76,7 +75,7 @@ class RepoUpdater(
Timber
.
e
(
it
)
Timber
.
e
(
it
)
}
}
Flowable
.
empty
()
Flowable
.
empty
()
}.
ignoreElements
()
.
toSingleDefault
(
Unit
)
}.
ignoreElements
()
}
}
object
CachedException
:
Exception
()
object
CachedException
:
Exception
()
...
...
app/src/main/java/com/topjohnwu/magisk/utils/BiometricHelper.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
utils/BiometricHelper.kt
View file @
707d7b33
package
com.topjohnwu.magisk.utils
package
com.topjohnwu.magisk.
core.
utils
import
androidx.biometric.BiometricManager
import
androidx.biometric.BiometricManager
import
androidx.biometric.BiometricPrompt
import
androidx.biometric.BiometricPrompt
import
androidx.core.content.ContextCompat
import
androidx.core.content.ContextCompat
import
androidx.fragment.app.FragmentActivity
import
androidx.fragment.app.FragmentActivity
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.Config
import
org.koin.core.KoinComponent
import
org.koin.core.KoinComponent
import
org.koin.core.get
import
org.koin.core.get
...
...
app/src/main/java/com/topjohnwu/magisk/utils/Keygen.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
utils/Keygen.kt
View file @
707d7b33
package
com.topjohnwu.magisk.utils
package
com.topjohnwu.magisk.
core.
utils
import
android.content.pm.PackageManager
import
android.content.pm.PackageManager
import
android.util.Base64
import
android.util.Base64
import
android.util.Base64OutputStream
import
android.util.Base64OutputStream
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.utils.PatchAPK.ALPHANUM
import
com.topjohnwu.magisk.di.koinModules
import
com.topjohnwu.magisk.di.koinModules
import
com.topjohnwu.magisk.utils.PatchAPK.ALPHANUM
import
com.topjohnwu.signing.CryptoUtils.readCertificate
import
com.topjohnwu.signing.CryptoUtils.readCertificate
import
com.topjohnwu.signing.CryptoUtils.readPrivateKey
import
com.topjohnwu.signing.CryptoUtils.readPrivateKey
import
com.topjohnwu.superuser.internal.InternalUtils
import
com.topjohnwu.superuser.internal.InternalUtils
...
@@ -50,10 +50,14 @@ class Keygen: CertKeyProvider {
...
@@ -50,10 +50,14 @@ class Keygen: CertKeyProvider {
private
val
provider
:
CertKeyProvider
private
val
provider
:
CertKeyProvider
inner
class
KeyStoreProvider
:
CertKeyProvider
{
inner
class
KeyStoreProvider
:
CertKeyProvider
{
private
val
ks
by
lazy
{
init
()
}
private
val
ks
by
lazy
{
init
()
}
override
val
cert
by
lazy
{
ks
.
getCertificate
(
ALIAS
)
as
X509Certificate
}
override
val
cert
by
lazy
{
ks
.
getCertificate
(
ALIAS
)
as
X509Certificate
}
override
val
key
by
lazy
{
ks
.
getKey
(
ALIAS
,
PASSWORD
)
as
PrivateKey
}
override
val
key
by
lazy
{
ks
.
getKey
(
ALIAS
,
PASSWORD
)
as
PrivateKey
}
}
}
class
TestProvider
:
CertKeyProvider
{
class
TestProvider
:
CertKeyProvider
{
...
@@ -113,8 +117,12 @@ class Keygen: CertKeyProvider {
...
@@ -113,8 +117,12 @@ class Keygen: CertKeyProvider {
if
(
raw
.
isEmpty
())
{
if
(
raw
.
isEmpty
())
{
ks
.
load
(
null
)
ks
.
load
(
null
)
}
else
{
}
else
{
GZIPInputStream
(
Base64
.
decode
(
raw
,
BASE64_FLAG
).
inputStream
()).
use
{
GZIPInputStream
(
Base64
.
decode
(
raw
,
ks
.
load
(
it
,
PASSWORD
)
BASE64_FLAG
).
inputStream
()).
use
{
ks
.
load
(
it
,
PASSWORD
)
}
}
}
}
...
@@ -131,10 +139,16 @@ class Keygen: CertKeyProvider {
...
@@ -131,10 +139,16 @@ class Keygen: CertKeyProvider {
val
cert
=
JcaX509CertificateConverter
().
getCertificate
(
builder
.
build
(
signer
))
val
cert
=
JcaX509CertificateConverter
().
getCertificate
(
builder
.
build
(
signer
))
// Store them into keystore
// Store them into keystore
ks
.
setKeyEntry
(
ALIAS
,
kp
.
private
,
PASSWORD
,
arrayOf
(
cert
))
ks
.
setKeyEntry
(
ALIAS
,
kp
.
private
,
PASSWORD
,
arrayOf
(
cert
))
val
bytes
=
ByteArrayOutputStream
()
val
bytes
=
ByteArrayOutputStream
()
GZIPOutputStream
(
Base64OutputStream
(
bytes
,
BASE64_FLAG
)).
use
{
GZIPOutputStream
(
Base64OutputStream
(
bytes
,
ks
.
store
(
it
,
PASSWORD
)
BASE64_FLAG
)).
use
{
ks
.
store
(
it
,
PASSWORD
)
}
}
Config
.
keyStoreRaw
=
bytes
.
toString
(
"UTF-8"
)
Config
.
keyStoreRaw
=
bytes
.
toString
(
"UTF-8"
)
...
...
app/src/main/java/com/topjohnwu/magisk/utils/Locales.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
utils/Locales.kt
View file @
707d7b33
@file
:
Suppress
(
"DEPRECATION"
)
@file
:
Suppress
(
"DEPRECATION"
)
package
com.topjohnwu.magisk.utils
package
com.topjohnwu.magisk.
core.
utils
import
android.annotation.SuppressLint
import
android.annotation.SuppressLint
import
android.content.res.Configuration
import
android.content.res.Configuration
import
android.content.res.Resources
import
android.content.res.Resources
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.ResourceMgr
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.ResourceMgr
import
com.topjohnwu.magisk.extensions.langTagToLocale
import
com.topjohnwu.magisk.extensions.langTagToLocale
import
com.topjohnwu.magisk.extensions.toLangTag
import
com.topjohnwu.magisk.extensions.toLangTag
import
io.reactivex.Single
import
io.reactivex.Single
...
...
app/src/main/java/com/topjohnwu/magisk/utils/PatchAPK.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
utils/PatchAPK.kt
View file @
707d7b33
package
com.topjohnwu.magisk.utils
package
com.topjohnwu.magisk.
core.
utils
import
android.content.Context
import
android.content.Context
import
android.os.Build.VERSION.SDK_INT
import
android.os.Build.VERSION.SDK_INT
import
android.widget.Toast
import
android.widget.Toast
import
com.topjohnwu.magisk.*
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.core.Info
import
com.topjohnwu.magisk.core.isRunningAsStub
import
com.topjohnwu.magisk.data.network.GithubRawServices
import
com.topjohnwu.magisk.data.network.GithubRawServices
import
com.topjohnwu.magisk.extensions.DynamicClassLoader
import
com.topjohnwu.magisk.extensions.DynamicClassLoader
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.writeTo
import
com.topjohnwu.magisk.extensions.writeTo
import
com.topjohnwu.magisk.view.Notifications
import
com.topjohnwu.magisk.
core.
view.Notifications
import
com.topjohnwu.signing.JarMap
import
com.topjohnwu.signing.JarMap
import
com.topjohnwu.signing.SignAPK
import
com.topjohnwu.signing.SignAPK
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
...
...
app/src/main/java/com/topjohnwu/magisk/utils/ProgressInputStream.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
utils/ProgressInputStream.kt
View file @
707d7b33
package
com.topjohnwu.magisk.utils
package
com.topjohnwu.magisk.
core.
utils
import
com.topjohnwu.superuser.internal.UiThreadHandler
import
com.topjohnwu.superuser.internal.UiThreadHandler
import
java.io.FilterInputStream
import
java.io.FilterInputStream
...
...
app/src/main/java/com/topjohnwu/magisk/utils/RootInit.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
utils/RootInit.kt
View file @
707d7b33
package
com.topjohnwu.magisk.utils
package
com.topjohnwu.magisk.
core.
utils
import
android.content.Context
import
android.content.Context
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.core.wrap
import
com.topjohnwu.magisk.extensions.rawResource
import
com.topjohnwu.magisk.extensions.rawResource
import
com.topjohnwu.magisk.wrap
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.io.SuFile
import
com.topjohnwu.superuser.io.SuFile
...
...
app/src/main/java/com/topjohnwu/magisk/utils/SafetyNetHelper.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
utils/SafetyNetHelper.kt
View file @
707d7b33
package
com.topjohnwu.magisk.utils
package
com.topjohnwu.magisk.
core.
utils
interface
SafetyNetHelper
{
interface
SafetyNetHelper
{
...
...
app/src/main/java/com/topjohnwu/magisk/utils/Utils.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
utils/Utils.kt
View file @
707d7b33
package
com.topjohnwu.magisk.utils
package
com.topjohnwu.magisk.
core.
utils
import
android.content.Context
import
android.content.Context
import
android.content.Intent
import
android.content.Intent
...
@@ -7,10 +7,10 @@ import android.net.Uri
...
@@ -7,10 +7,10 @@ import android.net.Uri
import
android.os.Environment
import
android.os.Environment
import
android.widget.Toast
import
android.widget.Toast
import
androidx.work.*
import
androidx.work.*
import
com.topjohnwu.magisk.
*
import
com.topjohnwu.magisk.
BuildConfig
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.*
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.model.update.UpdateCheckService
import
com.topjohnwu.superuser.internal.UiThreadHandler
import
com.topjohnwu.superuser.internal.UiThreadHandler
import
java.io.File
import
java.io.File
import
java.util.concurrent.TimeUnit
import
java.util.concurrent.TimeUnit
...
@@ -62,7 +62,10 @@ object Utils {
...
@@ -62,7 +62,10 @@ object Utils {
if
(
intent
.
resolveActivity
(
context
.
packageManager
)
!=
null
)
{
if
(
intent
.
resolveActivity
(
context
.
packageManager
)
!=
null
)
{
context
.
startActivity
(
intent
)
context
.
startActivity
(
intent
)
}
else
{
}
else
{
toast
(
R
.
string
.
open_link_failed_toast
,
Toast
.
LENGTH_SHORT
)
toast
(
R
.
string
.
open_link_failed_toast
,
Toast
.
LENGTH_SHORT
)
}
}
}
}
...
...
app/src/main/java/com/topjohnwu/magisk/utils/ZipUtils.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
utils/ZipUtils.kt
View file @
707d7b33
package
com.topjohnwu.magisk.utils
package
com.topjohnwu.magisk.
core.
utils
import
com.topjohnwu.superuser.io.SuFile
import
com.topjohnwu.superuser.io.SuFile
import
com.topjohnwu.superuser.io.SuFileOutputStream
import
com.topjohnwu.superuser.io.SuFileOutputStream
...
...
app/src/main/java/com/topjohnwu/magisk/view/Notifications.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
view/Notifications.kt
View file @
707d7b33
package
com.topjohnwu.magisk.view
package
com.topjohnwu.magisk.
core.
view
import
android.app.Notification
import
android.app.Notification
import
android.app.NotificationChannel
import
android.app.NotificationChannel
...
@@ -9,13 +9,12 @@ import android.os.Build.VERSION.SDK_INT
...
@@ -9,13 +9,12 @@ import android.os.Build.VERSION.SDK_INT
import
androidx.core.app.TaskStackBuilder
import
androidx.core.app.TaskStackBuilder
import
androidx.core.content.getSystemService
import
androidx.core.content.getSystemService
import
androidx.core.graphics.drawable.toIcon
import
androidx.core.graphics.drawable.toIcon
import
com.topjohnwu.magisk.*
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.Const.ID.PROGRESS_NOTIFICATION_CHANNEL
import
com.topjohnwu.magisk.core.*
import
com.topjohnwu.magisk.Const.ID.UPDATE_NOTIFICATION_CHANNEL
import
com.topjohnwu.magisk.core.Const.ID.PROGRESS_NOTIFICATION_CHANNEL
import
com.topjohnwu.magisk.core.Const.ID.UPDATE_NOTIFICATION_CHANNEL
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.getBitmap
import
com.topjohnwu.magisk.extensions.getBitmap
import
com.topjohnwu.magisk.model.receiver.GeneralReceiver
import
com.topjohnwu.magisk.ui.SplashActivity
object
Notifications
{
object
Notifications
{
...
@@ -52,10 +51,13 @@ object Notifications {
...
@@ -52,10 +51,13 @@ object Notifications {
val
stackBuilder
=
TaskStackBuilder
.
create
(
context
)
val
stackBuilder
=
TaskStackBuilder
.
create
(
context
)
stackBuilder
.
addParentStack
(
SplashActivity
::
class
.
java
.
cmp
(
context
.
packageName
))
stackBuilder
.
addParentStack
(
SplashActivity
::
class
.
java
.
cmp
(
context
.
packageName
))
stackBuilder
.
addNextIntent
(
intent
)
stackBuilder
.
addNextIntent
(
intent
)
val
pendingIntent
=
stackBuilder
.
getPendingIntent
(
Const
.
ID
.
MAGISK_UPDATE_NOTIFICATION_ID
,
val
pendingIntent
=
stackBuilder
.
getPendingIntent
(
Const
.
ID
.
MAGISK_UPDATE_NOTIFICATION_ID
,
PendingIntent
.
FLAG_UPDATE_CURRENT
)
PendingIntent
.
FLAG_UPDATE_CURRENT
)
val
builder
=
updateBuilder
(
context
)
val
builder
=
updateBuilder
(
context
)
.
setContentTitle
(
context
.
getString
(
R
.
string
.
magisk_update_title
))
.
setContentTitle
(
context
.
getString
(
R
.
string
.
magisk_update_title
))
.
setContentText
(
context
.
getString
(
R
.
string
.
manager_download_install
))
.
setContentText
(
context
.
getString
(
R
.
string
.
manager_download_install
))
.
setAutoCancel
(
true
)
.
setAutoCancel
(
true
)
...
@@ -72,7 +74,9 @@ object Notifications {
...
@@ -72,7 +74,9 @@ object Notifications {
val
pendingIntent
=
PendingIntent
.
getBroadcast
(
context
,
val
pendingIntent
=
PendingIntent
.
getBroadcast
(
context
,
Const
.
ID
.
APK_UPDATE_NOTIFICATION_ID
,
intent
,
PendingIntent
.
FLAG_UPDATE_CURRENT
)
Const
.
ID
.
APK_UPDATE_NOTIFICATION_ID
,
intent
,
PendingIntent
.
FLAG_UPDATE_CURRENT
)
val
builder
=
updateBuilder
(
context
)
val
builder
=
updateBuilder
(
context
)
.
setContentTitle
(
context
.
getString
(
R
.
string
.
manager_update_title
))
.
setContentTitle
(
context
.
getString
(
R
.
string
.
manager_update_title
))
.
setContentText
(
context
.
getString
(
R
.
string
.
manager_download_install
))
.
setContentText
(
context
.
getString
(
R
.
string
.
manager_download_install
))
.
setAutoCancel
(
true
)
.
setAutoCancel
(
true
)
...
@@ -87,7 +91,9 @@ object Notifications {
...
@@ -87,7 +91,9 @@ object Notifications {
val
pendingIntent
=
PendingIntent
.
getBroadcast
(
context
,
val
pendingIntent
=
PendingIntent
.
getBroadcast
(
context
,
Const
.
ID
.
DTBO_NOTIFICATION_ID
,
intent
,
PendingIntent
.
FLAG_UPDATE_CURRENT
)
Const
.
ID
.
DTBO_NOTIFICATION_ID
,
intent
,
PendingIntent
.
FLAG_UPDATE_CURRENT
)
val
builder
=
updateBuilder
(
context
)
val
builder
=
updateBuilder
(
context
)
.
setContentTitle
(
context
.
getString
(
R
.
string
.
dtbo_patched_title
))
.
setContentTitle
(
context
.
getString
(
R
.
string
.
dtbo_patched_title
))
.
setContentText
(
context
.
getString
(
R
.
string
.
dtbo_patched_reboot
))
.
setContentText
(
context
.
getString
(
R
.
string
.
dtbo_patched_reboot
))
...
...
app/src/main/java/com/topjohnwu/magisk/view/Shortcuts.kt
→
app/src/main/java/com/topjohnwu/magisk/
core/
view/Shortcuts.kt
View file @
707d7b33
package
com.topjohnwu.magisk.view
package
com.topjohnwu.magisk.
core.
view
import
android.content.Context
import
android.content.Context
import
android.content.Intent
import
android.content.Intent
...
@@ -10,17 +10,18 @@ import androidx.annotation.RequiresApi
...
@@ -10,17 +10,18 @@ import androidx.annotation.RequiresApi
import
androidx.core.content.getSystemService
import
androidx.core.content.getSystemService
import
androidx.core.graphics.drawable.toAdaptiveIcon
import
androidx.core.graphics.drawable.toAdaptiveIcon
import
androidx.core.graphics.drawable.toIcon
import
androidx.core.graphics.drawable.toIcon
import
com.topjohnwu.magisk.*
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.*
import
com.topjohnwu.magisk.core.utils.Utils
import
com.topjohnwu.magisk.extensions.getBitmap
import
com.topjohnwu.magisk.extensions.getBitmap
import
com.topjohnwu.magisk.ui.SplashActivity
import
com.topjohnwu.magisk.utils.Utils
object
Shortcuts
{
object
Shortcuts
{
fun
setup
(
context
:
Context
)
{
fun
setup
(
context
:
Context
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
25
)
{
if
(
Build
.
VERSION
.
SDK_INT
>=
25
)
{
val
manager
=
context
.
getSystemService
<
ShortcutManager
>()
val
manager
=
context
.
getSystemService
<
ShortcutManager
>()
manager
?.
dynamicShortcuts
=
getShortCuts
(
context
)
manager
?.
dynamicShortcuts
=
getShortCuts
(
context
)
}
}
}
}
...
...
app/src/main/java/com/topjohnwu/magisk/data/database/Repo.kt
View file @
707d7b33
...
@@ -4,7 +4,7 @@ package com.topjohnwu.magisk.data.database
...
@@ -4,7 +4,7 @@ package com.topjohnwu.magisk.data.database
import
androidx.room.Dao
import
androidx.room.Dao
import
androidx.room.Query
import
androidx.room.Query
import
com.topjohnwu.magisk.
model.entity
.module.Repo
import
com.topjohnwu.magisk.
core.model
.module.Repo
interface
RepoBase
{
interface
RepoBase
{
...
...
app/src/main/java/com/topjohnwu/magisk/data/database/RepoDao.kt
View file @
707d7b33
package
com.topjohnwu.magisk.data.database
package
com.topjohnwu.magisk.data.database
import
androidx.room.*
import
androidx.room.*
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.
core.
Config
import
com.topjohnwu.magisk.
model.entity
.module.Repo
import
com.topjohnwu.magisk.
core.model
.module.Repo
@Database
(
version
=
6
,
entities
=
[
Repo
::
class
,
RepoEtag
::
class
])
@Database
(
version
=
6
,
entities
=
[
Repo
::
class
,
RepoEtag
::
class
])
abstract
class
RepoDatabase
:
RoomDatabase
()
{
abstract
class
RepoDatabase
:
RoomDatabase
()
{
...
...
app/src/main/java/com/topjohnwu/magisk/data/network/GithubServices.kt
View file @
707d7b33
package
com.topjohnwu.magisk.data.network
package
com.topjohnwu.magisk.data.network
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.
core.
Const
import
com.topjohnwu.magisk.
model.entity.Update
Info
import
com.topjohnwu.magisk.
core.tasks.GithubRepo
Info
import
com.topjohnwu.magisk.
tasks.GithubRepo
Info
import
com.topjohnwu.magisk.
core.model.Update
Info
import
io.reactivex.Flowable
import
io.reactivex.Flowable
import
io.reactivex.Single
import
io.reactivex.Single
import
okhttp3.ResponseBody
import
okhttp3.ResponseBody
...
...
app/src/main/java/com/topjohnwu/magisk/data/repository/DBConfig.kt
View file @
707d7b33
package
com.topjohnwu.magisk.data.repository
package
com.topjohnwu.magisk.data.repository
import
com.topjohnwu.magisk.
data.database
.SettingsDao
import
com.topjohnwu.magisk.
core.magiskdb
.SettingsDao
import
com.topjohnwu.magisk.
data.database
.StringDao
import
com.topjohnwu.magisk.
core.magiskdb
.StringDao
import
io.reactivex.schedulers.Schedulers
import
io.reactivex.schedulers.Schedulers
import
kotlin.properties.ReadWriteProperty
import
kotlin.properties.ReadWriteProperty
import
kotlin.reflect.KProperty
import
kotlin.reflect.KProperty
...
...
app/src/main/java/com/topjohnwu/magisk/data/repository/LogRepository.kt
View file @
707d7b33
package
com.topjohnwu.magisk.data.repository
package
com.topjohnwu.magisk.data.repository
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.
core.
Const
import
com.topjohnwu.magisk.data.database.SuLogDao
import
com.topjohnwu.magisk.data.database.SuLogDao
import
com.topjohnwu.magisk.model.entity.MagiskLog
import
com.topjohnwu.magisk.model.entity.MagiskLog
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
...
...
app/src/main/java/com/topjohnwu/magisk/data/repository/MagiskRepository.kt
View file @
707d7b33
package
com.topjohnwu.magisk.data.repository
package
com.topjohnwu.magisk.data.repository
import
android.content.pm.PackageManager
import
android.content.pm.PackageManager
import
com.topjohnwu.magisk.
Config
import
com.topjohnwu.magisk.
core.Info
import
com.topjohnwu.magisk.
Info
import
com.topjohnwu.magisk.
core.Config
import
com.topjohnwu.magisk.data.network.GithubRawServices
import
com.topjohnwu.magisk.data.network.GithubRawServices
import
com.topjohnwu.magisk.extensions.getLabel
import
com.topjohnwu.magisk.extensions.getLabel
import
com.topjohnwu.magisk.extensions.packageName
import
com.topjohnwu.magisk.extensions.packageName
...
@@ -24,7 +24,8 @@ class MagiskRepository(
...
@@ -24,7 +24,8 @@ class MagiskRepository(
Config
.
Value
.
BETA_CHANNEL
->
apiRaw
.
fetchBetaUpdate
()
Config
.
Value
.
BETA_CHANNEL
->
apiRaw
.
fetchBetaUpdate
()
Config
.
Value
.
CANARY_CHANNEL
->
apiRaw
.
fetchCanaryUpdate
()
Config
.
Value
.
CANARY_CHANNEL
->
apiRaw
.
fetchCanaryUpdate
()
Config
.
Value
.
CANARY_DEBUG_CHANNEL
->
apiRaw
.
fetchCanaryDebugUpdate
()
Config
.
Value
.
CANARY_DEBUG_CHANNEL
->
apiRaw
.
fetchCanaryDebugUpdate
()
Config
.
Value
.
CUSTOM_CHANNEL
->
apiRaw
.
fetchCustomUpdate
(
Config
.
customChannelUrl
)
Config
.
Value
.
CUSTOM_CHANNEL
->
apiRaw
.
fetchCustomUpdate
(
Config
.
customChannelUrl
)
else
->
throw
IllegalArgumentException
()
else
->
throw
IllegalArgumentException
()
}.
flatMap
{
}.
flatMap
{
// If remote version is lower than current installed, try switching to beta
// If remote version is lower than current installed, try switching to beta
...
...
app/src/main/java/com/topjohnwu/magisk/data/repository/StringRepository.kt
View file @
707d7b33
package
com.topjohnwu.magisk.data.repository
package
com.topjohnwu.magisk.data.repository
import
com.topjohnwu.magisk.core.model.module.Repo
import
com.topjohnwu.magisk.data.network.GithubRawServices
import
com.topjohnwu.magisk.data.network.GithubRawServices
import
com.topjohnwu.magisk.model.entity.module.Repo
class
StringRepository
(
class
StringRepository
(
private
val
api
:
GithubRawServices
private
val
api
:
GithubRawServices
...
...
app/src/main/java/com/topjohnwu/magisk/di/DatabaseModule.kt
View file @
707d7b33
...
@@ -2,8 +2,12 @@ package com.topjohnwu.magisk.di
...
@@ -2,8 +2,12 @@ package com.topjohnwu.magisk.di
import
android.content.Context
import
android.content.Context
import
androidx.room.Room
import
androidx.room.Room
import
com.topjohnwu.magisk.data.database.*
import
com.topjohnwu.magisk.core.magiskdb.PolicyDao
import
com.topjohnwu.magisk.tasks.RepoUpdater
import
com.topjohnwu.magisk.core.magiskdb.SettingsDao
import
com.topjohnwu.magisk.core.magiskdb.StringDao
import
com.topjohnwu.magisk.core.tasks.RepoUpdater
import
com.topjohnwu.magisk.data.database.RepoDatabase
import
com.topjohnwu.magisk.data.database.SuLogDatabase
import
org.koin.dsl.module
import
org.koin.dsl.module
...
...
app/src/main/java/com/topjohnwu/magisk/di/NetworkingModule.kt
View file @
707d7b33
...
@@ -4,7 +4,7 @@ import android.content.Context
...
@@ -4,7 +4,7 @@ import android.content.Context
import
com.squareup.moshi.JsonAdapter
import
com.squareup.moshi.JsonAdapter
import
com.squareup.moshi.Moshi
import
com.squareup.moshi.Moshi
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.
core.
Const
import
com.topjohnwu.magisk.data.network.GithubApiServices
import
com.topjohnwu.magisk.data.network.GithubApiServices
import
com.topjohnwu.magisk.data.network.GithubRawServices
import
com.topjohnwu.magisk.data.network.GithubRawServices
import
com.topjohnwu.magisk.net.Networking
import
com.topjohnwu.magisk.net.Networking
...
...
app/src/main/java/com/topjohnwu/magisk/extensions/XAndroid.kt
View file @
707d7b33
...
@@ -28,11 +28,11 @@ import androidx.appcompat.content.res.AppCompatResources
...
@@ -28,11 +28,11 @@ import androidx.appcompat.content.res.AppCompatResources
import
androidx.core.content.ContextCompat
import
androidx.core.content.ContextCompat
import
androidx.core.net.toFile
import
androidx.core.net.toFile
import
androidx.core.net.toUri
import
androidx.core.net.toUri
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.FileProvider
import
com.topjohnwu.magisk.FileProvider
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.core.utils.currentLocale
import
com.topjohnwu.magisk.utils.DynamicClassLoader
import
com.topjohnwu.magisk.utils.DynamicClassLoader
import
com.topjohnwu.magisk.utils.Utils
import
com.topjohnwu.magisk.core.utils.Utils
import
com.topjohnwu.magisk.utils.currentLocale
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.ShellUtils
import
com.topjohnwu.superuser.ShellUtils
import
java.io.File
import
java.io.File
...
@@ -317,7 +317,9 @@ fun Context.hasPermissions(vararg permissions: String) = permissions.all {
...
@@ -317,7 +317,9 @@ fun Context.hasPermissions(vararg permissions: String) = permissions.all {
ContextCompat
.
checkSelfPermission
(
this
,
it
)
==
PERMISSION_GRANTED
ContextCompat
.
checkSelfPermission
(
this
,
it
)
==
PERMISSION_GRANTED
}
}
private
val
securityLevelFormatter
get
()
=
SimpleDateFormat
(
"yyyy-MM-dd"
,
currentLocale
)
private
val
securityLevelFormatter
get
()
=
SimpleDateFormat
(
"yyyy-MM-dd"
,
currentLocale
)
/** Friendly reminder to seek newer roms or install oem updates. */
/** Friendly reminder to seek newer roms or install oem updates. */
val
isDeviceSecure
:
Boolean
val
isDeviceSecure
:
Boolean
...
...
app/src/main/java/com/topjohnwu/magisk/extensions/XSU.kt
View file @
707d7b33
package
com.topjohnwu.magisk.extensions
package
com.topjohnwu.magisk.extensions
import
com.topjohnwu.magisk.Info
import
com.topjohnwu.magisk.
core.
Info
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.io.SuFileInputStream
import
com.topjohnwu.superuser.io.SuFileInputStream
import
com.topjohnwu.superuser.io.SuFileOutputStream
import
com.topjohnwu.superuser.io.SuFileOutputStream
...
...
app/src/main/java/com/topjohnwu/magisk/extensions/XTime.kt
View file @
707d7b33
package
com.topjohnwu.magisk.extensions
package
com.topjohnwu.magisk.extensions
import
com.topjohnwu.magisk.utils.currentLocale
import
com.topjohnwu.magisk.
core.
utils.currentLocale
import
java.text.DateFormat
import
java.text.DateFormat
import
java.text.ParseException
import
java.text.ParseException
import
java.text.SimpleDateFormat
import
java.text.SimpleDateFormat
...
@@ -14,10 +14,18 @@ fun String.toTime(format: DateFormat) = try {
...
@@ -14,10 +14,18 @@ fun String.toTime(format: DateFormat) = try {
-
1L
-
1L
}
}
val
timeFormatFull
by
lazy
{
SimpleDateFormat
(
"yyyy/MM/dd_HH:mm:ss"
,
currentLocale
)
}
val
timeFormatFull
by
lazy
{
SimpleDateFormat
(
"yyyy/MM/dd_HH:mm:ss"
,
val
timeFormatStandard
by
lazy
{
SimpleDateFormat
(
"yyyy-MM-dd'T'HH:mm:ss'Z'"
,
currentLocale
)
}
currentLocale
val
timeFormatMedium
by
lazy
{
DateFormat
.
getDateInstance
(
DateFormat
.
MEDIUM
,
currentLocale
)
}
)
}
val
timeFormatTime
by
lazy
{
SimpleDateFormat
(
"h:mm a"
,
currentLocale
)
}
val
timeFormatStandard
by
lazy
{
SimpleDateFormat
(
"yyyy-MM-dd'T'HH:mm:ss'Z'"
,
currentLocale
)
}
val
timeFormatMedium
by
lazy
{
DateFormat
.
getDateInstance
(
DateFormat
.
MEDIUM
,
currentLocale
)
}
val
timeFormatTime
by
lazy
{
SimpleDateFormat
(
"h:mm a"
,
currentLocale
)
}
val
timeDateFormat
by
lazy
{
val
timeDateFormat
by
lazy
{
DateFormat
.
getDateTimeInstance
(
DateFormat
.
getDateTimeInstance
(
DateFormat
.
DEFAULT
,
DateFormat
.
DEFAULT
,
...
...
app/src/main/java/com/topjohnwu/magisk/legacy/flash/FlashActivity.kt
View file @
707d7b33
...
@@ -6,22 +6,22 @@ import android.content.pm.ActivityInfo
...
@@ -6,22 +6,22 @@ import android.content.pm.ActivityInfo
import
android.net.Uri
import
android.net.Uri
import
android.os.Bundle
import
android.os.Bundle
import
androidx.core.net.toUri
import
androidx.core.net.toUri
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.base.BaseActivity
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.core.intent
import
com.topjohnwu.magisk.databinding.ActivityFlashBinding
import
com.topjohnwu.magisk.databinding.ActivityFlashBinding
import
com.topjohnwu.magisk.extensions.snackbar
import
com.topjohnwu.magisk.extensions.snackbar
import
com.topjohnwu.magisk.intent
import
com.topjohnwu.magisk.model.events.BackPressEvent
import
com.topjohnwu.magisk.model.events.BackPressEvent
import
com.topjohnwu.magisk.model.events.PermissionEvent
import
com.topjohnwu.magisk.model.events.PermissionEvent
import
com.topjohnwu.magisk.model.events.SnackbarEvent
import
com.topjohnwu.magisk.model.events.SnackbarEvent
import
com.topjohnwu.magisk.model.events.ViewEvent
import
com.topjohnwu.magisk.model.events.ViewEvent
import
com.topjohnwu.magisk.view.Notifications
import
com.topjohnwu.magisk.ui.base.BaseUIActivity
import
com.topjohnwu.magisk.core.view.Notifications
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.core.parameter.parametersOf
import
org.koin.core.parameter.parametersOf
import
java.io.File
import
java.io.File
open
class
FlashActivity
:
BaseActivity
<
FlashViewModel
,
ActivityFlashBinding
>()
{
open
class
FlashActivity
:
Base
UI
Activity
<
FlashViewModel
,
ActivityFlashBinding
>()
{
override
val
layoutRes
:
Int
=
R
.
layout
.
activity_flash
override
val
layoutRes
:
Int
=
R
.
layout
.
activity_flash
override
val
themeRes
:
Int
=
R
.
style
.
MagiskTheme_Flashing
override
val
themeRes
:
Int
=
R
.
style
.
MagiskTheme_Flashing
...
...
app/src/main/java/com/topjohnwu/magisk/legacy/flash/FlashViewModel.kt
View file @
707d7b33
...
@@ -8,10 +8,9 @@ import android.os.Handler
...
@@ -8,10 +8,9 @@ import android.os.Handler
import
androidx.core.os.postDelayed
import
androidx.core.os.postDelayed
import
androidx.databinding.ObservableArrayList
import
androidx.databinding.ObservableArrayList
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.extensions.*
import
com.topjohnwu.magisk.extensions.*
import
com.topjohnwu.magisk.model.entity.recycler.ConsoleRvItem
import
com.topjohnwu.magisk.model.entity.recycler.ConsoleRvItem
...
@@ -19,6 +18,7 @@ import com.topjohnwu.magisk.model.events.SnackbarEvent
...
@@ -19,6 +18,7 @@ import com.topjohnwu.magisk.model.events.SnackbarEvent
import
com.topjohnwu.magisk.model.flash.FlashResultListener
import
com.topjohnwu.magisk.model.flash.FlashResultListener
import
com.topjohnwu.magisk.model.flash.Flashing
import
com.topjohnwu.magisk.model.flash.Flashing
import
com.topjohnwu.magisk.model.flash.Patching
import
com.topjohnwu.magisk.model.flash.Patching
import
com.topjohnwu.magisk.ui.base.BaseViewModel
import
com.topjohnwu.magisk.utils.DiffObservableList
import
com.topjohnwu.magisk.utils.DiffObservableList
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
...
...
app/src/main/java/com/topjohnwu/magisk/legacy/surequest/SuRequestActivity.kt
View file @
707d7b33
...
@@ -6,16 +6,16 @@ import android.os.Build
...
@@ -6,16 +6,16 @@ import android.os.Build
import
android.os.Bundle
import
android.os.Bundle
import
android.view.Window
import
android.view.Window
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.base.BaseActivity
import
com.topjohnwu.magisk.core.su.SuCallbackHandler
import
com.topjohnwu.magisk.core.su.SuCallbackHandler.REQUEST
import
com.topjohnwu.magisk.databinding.ActivityRequestBinding
import
com.topjohnwu.magisk.databinding.ActivityRequestBinding
import
com.topjohnwu.magisk.model.events.DieEvent
import
com.topjohnwu.magisk.model.events.DieEvent
import
com.topjohnwu.magisk.model.events.ViewActionEvent
import
com.topjohnwu.magisk.model.events.ViewActionEvent
import
com.topjohnwu.magisk.model.events.ViewEvent
import
com.topjohnwu.magisk.model.events.ViewEvent
import
com.topjohnwu.magisk.utils.SuHandler
import
com.topjohnwu.magisk.ui.base.BaseUIActivity
import
com.topjohnwu.magisk.utils.SuHandler.REQUEST
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.androidx.viewmodel.ext.android.viewModel
open
class
SuRequestActivity
:
BaseActivity
<
SuRequestViewModel
,
ActivityRequestBinding
>()
{
open
class
SuRequestActivity
:
Base
UI
Activity
<
SuRequestViewModel
,
ActivityRequestBinding
>()
{
override
val
layoutRes
:
Int
=
R
.
layout
.
activity_request
override
val
layoutRes
:
Int
=
R
.
layout
.
activity_request
override
val
themeRes
:
Int
=
R
.
style
.
MagiskTheme_SU
override
val
themeRes
:
Int
=
R
.
style
.
MagiskTheme_SU
...
@@ -36,7 +36,11 @@ open class SuRequestActivity : BaseActivity<SuRequestViewModel, ActivityRequestB
...
@@ -36,7 +36,11 @@ open class SuRequestActivity : BaseActivity<SuRequestViewModel, ActivityRequestB
}
}
fun
runHandler
(
action
:
String
?)
{
fun
runHandler
(
action
:
String
?)
{
SuHandler
(
this
,
action
,
intent
.
extras
)
SuCallbackHandler
(
this
,
action
,
intent
.
extras
)
finish
()
finish
()
}
}
...
...
app/src/main/java/com/topjohnwu/magisk/legacy/surequest/SuRequestViewModel.kt
View file @
707d7b33
...
@@ -6,41 +6,36 @@ import android.content.pm.PackageManager
...
@@ -6,41 +6,36 @@ import android.content.pm.PackageManager
import
android.content.res.Resources
import
android.content.res.Resources
import
android.graphics.drawable.Drawable
import
android.graphics.drawable.Drawable
import
android.os.CountDownTimer
import
android.os.CountDownTimer
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.data.database.PolicyDao
import
com.topjohnwu.magisk.core.magiskdb.PolicyDao
import
com.topjohnwu.magisk.core.model.MagiskPolicy.Companion.ALLOW
import
com.topjohnwu.magisk.core.model.MagiskPolicy.Companion.DENY
import
com.topjohnwu.magisk.core.su.SuRequestHandler
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.extensions.now
import
com.topjohnwu.magisk.model.entity.MagiskPolicy
import
com.topjohnwu.magisk.model.entity.recycler.SpinnerRvItem
import
com.topjohnwu.magisk.model.entity.recycler.SpinnerRvItem
import
com.topjohnwu.magisk.model.entity.toPolicy
import
com.topjohnwu.magisk.model.events.DieEvent
import
com.topjohnwu.magisk.model.events.DieEvent
import
com.topjohnwu.magisk.utils.BiometricHelper
import
com.topjohnwu.magisk.ui.base.BaseViewModel
import
com.topjohnwu.magisk.core.utils.BiometricHelper
import
com.topjohnwu.magisk.utils.DiffObservableList
import
com.topjohnwu.magisk.utils.DiffObservableList
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.SuConnector
import
me.tatarka.bindingcollectionadapter2.BindingListViewAdapter
import
me.tatarka.bindingcollectionadapter2.BindingListViewAdapter
import
me.tatarka.bindingcollectionadapter2.ItemBinding
import
me.tatarka.bindingcollectionadapter2.ItemBinding
import
timber.log.Timber
import
java.util.concurrent.TimeUnit.SECONDS
import
java.io.IOException
import
java.util.concurrent.TimeUnit.*
class
SuRequestViewModel
(
class
SuRequestViewModel
(
private
val
p
ackageManager
:
PackageManager
,
private
val
p
m
:
PackageManager
,
private
val
policyDB
:
PolicyDao
,
private
val
policyDB
:
PolicyDao
,
private
val
timeoutPrefs
:
SharedPreferences
,
private
val
timeoutPrefs
:
SharedPreferences
,
private
val
res
ources
:
Resources
private
val
res
:
Resources
)
:
BaseViewModel
()
{
)
:
BaseViewModel
()
{
val
icon
=
KObservableField
<
Drawable
?>(
null
)
val
icon
=
KObservableField
<
Drawable
?>(
null
)
val
title
=
KObservableField
(
""
)
val
title
=
KObservableField
(
""
)
val
packageName
=
KObservableField
(
""
)
val
packageName
=
KObservableField
(
""
)
val
denyText
=
KObservableField
(
res
ources
.
getString
(
R
.
string
.
deny
))
val
denyText
=
KObservableField
(
res
.
getString
(
R
.
string
.
deny
))
val
warningText
=
KObservableField
<
CharSequence
>(
res
ources
.
getString
(
R
.
string
.
su_warning
))
val
warningText
=
KObservableField
<
CharSequence
>(
res
.
getString
(
R
.
string
.
su_warning
))
val
selectedItemPosition
=
KObservableField
(
0
)
val
selectedItemPosition
=
KObservableField
(
0
)
...
@@ -54,131 +49,75 @@ class SuRequestViewModel(
...
@@ -54,131 +49,75 @@ class SuRequestViewModel(
setItems
(
items
)
setItems
(
items
)
}
}
private
val
cancelTasks
=
mutableListOf
<()
->
Unit
>()
private
val
handler
=
Handler
()
private
lateinit
var
timer
:
CountDownTimer
private
lateinit
var
policy
:
MagiskPolicy
private
lateinit
var
connector
:
SuConnector
private
fun
cancelTimer
()
{
timer
.
cancel
()
denyText
.
value
=
resources
.
getString
(
R
.
string
.
deny
)
}
fun
grantPressed
()
{
fun
grantPressed
()
{
cancelTimer
()
handler
.
cancelTimer
()
if
(
BiometricHelper
.
isEnabled
)
{
if
(
BiometricHelper
.
isEnabled
)
{
withView
{
withView
{
BiometricHelper
.
authenticate
(
this
)
{
BiometricHelper
.
authenticate
(
this
)
{
handle
Action
(
MagiskPolicy
.
ALLOW
)
handle
r
.
respond
(
ALLOW
)
}
}
}
}
}
else
{
}
else
{
handle
Action
(
MagiskPolicy
.
ALLOW
)
handle
r
.
respond
(
ALLOW
)
}
}
}
}
fun
denyPressed
()
{
fun
denyPressed
()
{
handleAction
(
MagiskPolicy
.
DENY
)
handler
.
respond
(
DENY
)
timer
.
cancel
()
}
}
fun
spinnerTouched
():
Boolean
{
fun
spinnerTouched
():
Boolean
{
cancelTimer
()
handler
.
cancelTimer
()
return
false
return
false
}
}
fun
handleRequest
(
intent
:
Intent
):
Boolean
{
fun
handleRequest
(
intent
:
Intent
):
Boolean
{
val
socketName
=
intent
.
getStringExtra
(
"socket"
)
?:
return
false
return
handler
.
start
(
intent
)
try
{
connector
=
Connector
(
socketName
)
val
map
=
connector
.
readRequest
()
val
uid
=
map
[
"uid"
]
?.
toIntOrNull
()
?:
return
false
policy
=
uid
.
toPolicy
(
packageManager
)
}
catch
(
e
:
Exception
)
{
Timber
.
e
(
e
)
return
false
}
}
// Never allow com.topjohnwu.magisk (could be malware)
private
inner
class
Handler
:
SuRequestHandler
(
pm
,
policyDB
)
{
if
(
policy
.
packageName
==
BuildConfig
.
APPLICATION_ID
)
return
false
when
(
Config
.
suAutoReponse
)
{
fun
respond
(
action
:
Int
)
{
Config
.
Value
.
SU_AUTO_DENY
->
{
val
pos
=
selectedItemPosition
.
value
handleAction
(
MagiskPolicy
.
DENY
,
0
)
timeoutPrefs
.
edit
().
putInt
(
policy
.
packageName
,
pos
).
apply
()
return
true
respond
(
action
,
Config
.
Value
.
TIMEOUT_LIST
[
pos
])
}
Config
.
Value
.
SU_AUTO_ALLOW
->
{
handleAction
(
MagiskPolicy
.
ALLOW
,
0
)
return
true
}
}
}
showUI
()
fun
cancelTimer
()
{
return
true
timer
.
cancel
()
denyText
.
value
=
res
.
getString
(
R
.
string
.
deny
)
}
}
private
fun
showUI
()
{
override
fun
onStart
()
{
resourc
es
.
getStringArray
(
R
.
array
.
allow_timeout
)
r
es
.
getStringArray
(
R
.
array
.
allow_timeout
)
.
map
{
SpinnerRvItem
(
it
)
}
.
map
{
SpinnerRvItem
(
it
)
}
.
let
{
items
.
update
(
it
)
}
.
let
{
items
.
update
(
it
)
}
icon
.
value
=
policy
.
applicationInfo
.
loadIcon
(
packageManager
)
icon
.
value
=
policy
.
applicationInfo
.
loadIcon
(
pm
)
title
.
value
=
policy
.
appName
title
.
value
=
policy
.
appName
packageName
.
value
=
policy
.
packageName
packageName
.
value
=
policy
.
packageName
selectedItemPosition
.
value
=
timeoutPrefs
.
getInt
(
policy
.
packageName
,
0
)
selectedItemPosition
.
value
=
timeoutPrefs
.
getInt
(
policy
.
packageName
,
0
)
// Override timer
val
millis
=
SECONDS
.
toMillis
(
Config
.
suDefaultTimeout
.
toLong
())
val
millis
=
SECONDS
.
toMillis
(
Config
.
suDefaultTimeout
.
toLong
())
timer
=
object
:
CountDownTimer
(
millis
,
1000
)
{
timer
=
object
:
CountDownTimer
(
millis
,
1000
)
{
override
fun
onTick
(
remains
:
Long
)
{
override
fun
onTick
(
remains
:
Long
)
{
denyText
.
value
=
"${resourc
es.getString(R.string.deny)} (${remains / 1000})"
denyText
.
value
=
"${r
es.getString(R.string.deny)} (${remains / 1000})"
}
}
override
fun
onFinish
()
{
override
fun
onFinish
()
{
denyText
.
value
=
resourc
es
.
getString
(
R
.
string
.
deny
)
denyText
.
value
=
r
es
.
getString
(
R
.
string
.
deny
)
handleAction
(
MagiskPolicy
.
DENY
)
respond
(
DENY
)
}
}
}
}
timer
.
start
()
cancelTasks
.
add
{
cancelTimer
()
}
}
}
private
fun
handleAction
()
{
override
fun
onRespond
()
{
connector
.
response
()
// Kill activity after response
cancelTasks
.
forEach
{
it
()
}
DieEvent
().
publish
()
DieEvent
().
publish
()
}
}
private
fun
handleAction
(
action
:
Int
)
{
val
pos
=
selectedItemPosition
.
value
timeoutPrefs
.
edit
().
putInt
(
policy
.
packageName
,
pos
).
apply
()
handleAction
(
action
,
Config
.
Value
.
TIMEOUT_LIST
[
pos
])
}
private
fun
handleAction
(
action
:
Int
,
time
:
Int
)
{
val
until
=
if
(
time
>
0
)
MILLISECONDS
.
toSeconds
(
now
)
+
MINUTES
.
toSeconds
(
time
.
toLong
())
else
time
.
toLong
()
policy
.
policy
=
action
policy
.
until
=
until
policy
.
uid
=
policy
.
uid
%
100000
+
Const
.
USER_ID
*
100000
if
(
until
>=
0
)
policyDB
.
update
(
policy
).
blockingAwait
()
handleAction
()
}
private
inner
class
Connector
@Throws
(
Exception
::
class
)
internal
constructor
(
name
:
String
)
:
SuConnector
(
name
)
{
@Throws
(
IOException
::
class
)
override
fun
onResponse
()
{
out
.
writeInt
(
policy
.
policy
)
}
}
}
}
}
app/src/main/java/com/topjohnwu/magisk/model/entity/MagiskLog.kt
View file @
707d7b33
...
@@ -3,10 +3,11 @@ package com.topjohnwu.magisk.model.entity
...
@@ -3,10 +3,11 @@ package com.topjohnwu.magisk.model.entity
import
androidx.room.Entity
import
androidx.room.Entity
import
androidx.room.Ignore
import
androidx.room.Ignore
import
androidx.room.PrimaryKey
import
androidx.room.PrimaryKey
import
com.topjohnwu.magisk.core.model.MagiskPolicy
import
com.topjohnwu.magisk.core.model.MagiskPolicy.Companion.ALLOW
import
com.topjohnwu.magisk.extensions.now
import
com.topjohnwu.magisk.extensions.now
import
com.topjohnwu.magisk.extensions.timeFormatTime
import
com.topjohnwu.magisk.extensions.timeFormatTime
import
com.topjohnwu.magisk.extensions.toTime
import
com.topjohnwu.magisk.extensions.toTime
import
com.topjohnwu.magisk.model.entity.MagiskPolicy.Companion.ALLOW
@Entity
(
tableName
=
"logs"
)
@Entity
(
tableName
=
"logs"
)
data class
MagiskLog
(
data class
MagiskLog
(
...
@@ -23,11 +24,6 @@ data class MagiskLog(
...
@@ -23,11 +24,6 @@ data class MagiskLog(
@Ignore
val
timeString
=
time
.
toTime
(
timeFormatTime
)
@Ignore
val
timeString
=
time
.
toTime
(
timeFormatTime
)
}
}
data class
WrappedMagiskLog
(
val
time
:
Long
,
val
items
:
List
<
MagiskLog
>
)
fun
MagiskPolicy
.
toLog
(
fun
MagiskPolicy
.
toLog
(
toUid
:
Int
,
toUid
:
Int
,
fromPid
:
Int
,
fromPid
:
Int
,
...
...
app/src/main/java/com/topjohnwu/magisk/model/entity/internal/DownloadSubject.kt
View file @
707d7b33
...
@@ -2,13 +2,13 @@ package com.topjohnwu.magisk.model.entity.internal
...
@@ -2,13 +2,13 @@ package com.topjohnwu.magisk.model.entity.internal
import
android.content.Context
import
android.content.Context
import
android.os.Parcelable
import
android.os.Parcelable
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.core.Info
import
com.topjohnwu.magisk.Info
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.model.module.Repo
import
com.topjohnwu.magisk.extensions.cachedFile
import
com.topjohnwu.magisk.extensions.cachedFile
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.model.entity.MagiskJson
import
com.topjohnwu.magisk.core.model.MagiskJson
import
com.topjohnwu.magisk.model.entity.ManagerJson
import
com.topjohnwu.magisk.core.model.ManagerJson
import
com.topjohnwu.magisk.model.entity.module.Repo
import
kotlinx.android.parcel.IgnoredOnParcel
import
kotlinx.android.parcel.IgnoredOnParcel
import
kotlinx.android.parcel.Parcelize
import
kotlinx.android.parcel.Parcelize
import
java.io.File
import
java.io.File
...
...
app/src/main/java/com/topjohnwu/magisk/model/entity/recycler/HomeItems.kt
View file @
707d7b33
package
com.topjohnwu.magisk.model.entity.recycler
package
com.topjohnwu.magisk.model.entity.recycler
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.databinding.ComparableRvItem
sealed
class
HomeItem
:
ComparableRvItem
<
HomeItem
>()
{
sealed
class
HomeItem
:
ComparableRvItem
<
HomeItem
>()
{
...
...
app/src/main/java/com/topjohnwu/magisk/model/entity/recycler/ModuleRvItem.kt
View file @
707d7b33
...
@@ -7,9 +7,9 @@ import androidx.databinding.ViewDataBinding
...
@@ -7,9 +7,9 @@ import androidx.databinding.ViewDataBinding
import
androidx.recyclerview.widget.StaggeredGridLayoutManager
import
androidx.recyclerview.widget.StaggeredGridLayoutManager
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.model.module.Module
import
com.topjohnwu.magisk.core.model.module.Repo
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.model.entity.module.Module
import
com.topjohnwu.magisk.model.entity.module.Repo
import
com.topjohnwu.magisk.ui.module.ModuleViewModel
import
com.topjohnwu.magisk.ui.module.ModuleViewModel
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.KObservableField
...
...
app/src/main/java/com/topjohnwu/magisk/model/entity/recycler/PolicyRvItem.kt
View file @
707d7b33
...
@@ -2,9 +2,9 @@ package com.topjohnwu.magisk.model.entity.recycler
...
@@ -2,9 +2,9 @@ package com.topjohnwu.magisk.model.entity.recycler
import
android.graphics.drawable.Drawable
import
android.graphics.drawable.Drawable
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.model.MagiskPolicy
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.extensions.toggle
import
com.topjohnwu.magisk.extensions.toggle
import
com.topjohnwu.magisk.model.entity.MagiskPolicy
import
com.topjohnwu.magisk.model.events.PolicyUpdateEvent
import
com.topjohnwu.magisk.model.events.PolicyUpdateEvent
import
com.topjohnwu.magisk.ui.superuser.SuperuserViewModel
import
com.topjohnwu.magisk.ui.superuser.SuperuserViewModel
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.KObservableField
...
...
app/src/main/java/com/topjohnwu/magisk/model/events/EventExecutors.kt
View file @
707d7b33
...
@@ -2,7 +2,7 @@ package com.topjohnwu.magisk.model.events
...
@@ -2,7 +2,7 @@ package com.topjohnwu.magisk.model.events
import
android.content.Context
import
android.content.Context
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.Fragment
import
com.topjohnwu.magisk.base.BaseActivity
import
com.topjohnwu.magisk.
core.
base.BaseActivity
interface
ContextExecutor
{
interface
ContextExecutor
{
...
@@ -12,7 +12,7 @@ interface ContextExecutor {
...
@@ -12,7 +12,7 @@ interface ContextExecutor {
interface
ActivityExecutor
{
interface
ActivityExecutor
{
operator
fun
invoke
(
activity
:
BaseActivity
<
*
,
*
>
)
operator
fun
invoke
(
activity
:
BaseActivity
)
}
}
...
...
app/src/main/java/com/topjohnwu/magisk/model/events/InstallExternalModuleEvent.kt
View file @
707d7b33
...
@@ -3,14 +3,14 @@ package com.topjohnwu.magisk.model.events
...
@@ -3,14 +3,14 @@ package com.topjohnwu.magisk.model.events
import
android.app.Activity
import
android.app.Activity
import
android.content.Context
import
android.content.Context
import
android.content.Intent
import
android.content.Intent
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.
core.
Const
import
com.topjohnwu.magisk.base.BaseActivity
import
com.topjohnwu.magisk.
core.
base.BaseActivity
import
com.topjohnwu.magisk.intent
import
com.topjohnwu.magisk.
core.
intent
import
com.topjohnwu.magisk.legacy.flash.FlashActivity
import
com.topjohnwu.magisk.legacy.flash.FlashActivity
class
InstallExternalModuleEvent
:
ViewEvent
(),
ActivityExecutor
{
class
InstallExternalModuleEvent
:
ViewEvent
(),
ActivityExecutor
{
override
fun
invoke
(
activity
:
BaseActivity
<
*
,
*
>
)
{
override
fun
invoke
(
activity
:
BaseActivity
)
{
activity
.
withExternalRW
{
activity
.
withExternalRW
{
onSuccess
{
onSuccess
{
val
intent
=
Intent
(
Intent
.
ACTION_GET_CONTENT
)
val
intent
=
Intent
(
Intent
.
ACTION_GET_CONTENT
)
...
...
app/src/main/java/com/topjohnwu/magisk/model/events/RxEvents.kt
View file @
707d7b33
package
com.topjohnwu.magisk.model.events
package
com.topjohnwu.magisk.model.events
import
com.topjohnwu.magisk.
model.entity
.MagiskPolicy
import
com.topjohnwu.magisk.
core.model
.MagiskPolicy
import
com.topjohnwu.magisk.utils.RxBus
import
com.topjohnwu.magisk.utils.RxBus
sealed
class
PolicyUpdateEvent
(
val
item
:
MagiskPolicy
)
:
RxBus
.
Event
{
sealed
class
PolicyUpdateEvent
(
val
item
:
MagiskPolicy
)
:
RxBus
.
Event
{
...
...
app/src/main/java/com/topjohnwu/magisk/model/events/SnackbarEvent.kt
View file @
707d7b33
...
@@ -3,8 +3,9 @@ package com.topjohnwu.magisk.model.events
...
@@ -3,8 +3,9 @@ package com.topjohnwu.magisk.model.events
import
android.content.Context
import
android.content.Context
import
androidx.annotation.StringRes
import
androidx.annotation.StringRes
import
com.google.android.material.snackbar.Snackbar
import
com.google.android.material.snackbar.Snackbar
import
com.topjohnwu.magisk.base.BaseActivity
import
com.topjohnwu.magisk.
core.
base.BaseActivity
import
com.topjohnwu.magisk.extensions.snackbar
import
com.topjohnwu.magisk.extensions.snackbar
import
com.topjohnwu.magisk.ui.base.BaseUIActivity
class
SnackbarEvent
private
constructor
(
class
SnackbarEvent
private
constructor
(
@StringRes
private
val
messageRes
:
Int
,
@StringRes
private
val
messageRes
:
Int
,
...
@@ -27,8 +28,8 @@ class SnackbarEvent private constructor(
...
@@ -27,8 +28,8 @@ class SnackbarEvent private constructor(
fun
message
(
context
:
Context
):
String
=
messageString
?:
context
.
getString
(
messageRes
)
fun
message
(
context
:
Context
):
String
=
messageString
?:
context
.
getString
(
messageRes
)
override
fun
invoke
(
activity
:
BaseActivity
<
*
,
*
>
)
{
override
fun
invoke
(
activity
:
BaseActivity
)
{
if
(
activity
is
BaseActivity
<*,
*>)
{
if
(
activity
is
Base
UI
Activity
<*,
*>)
{
activity
.
snackbar
(
activity
.
snackbarView
,
message
(
activity
),
length
,
f
)
activity
.
snackbar
(
activity
.
snackbarView
,
message
(
activity
),
length
,
f
)
}
}
}
}
...
...
app/src/main/java/com/topjohnwu/magisk/model/events/ViewEvents.kt
View file @
707d7b33
...
@@ -3,16 +3,16 @@ package com.topjohnwu.magisk.model.events
...
@@ -3,16 +3,16 @@ package com.topjohnwu.magisk.model.events
import
android.app.Activity
import
android.app.Activity
import
android.content.Context
import
android.content.Context
import
android.content.Intent
import
android.content.Intent
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.base.BaseActivity
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.core.base.BaseActivity
import
com.topjohnwu.magisk.core.model.module.Repo
import
com.topjohnwu.magisk.data.repository.MagiskRepository
import
com.topjohnwu.magisk.data.repository.MagiskRepository
import
com.topjohnwu.magisk.extensions.DynamicClassLoader
import
com.topjohnwu.magisk.extensions.DynamicClassLoader
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.writeTo
import
com.topjohnwu.magisk.extensions.writeTo
import
com.topjohnwu.magisk.model.entity.module.Repo
import
com.topjohnwu.magisk.utils.RxBus
import
com.topjohnwu.magisk.utils.RxBus
import
com.topjohnwu.magisk.utils.SafetyNetHelper
import
com.topjohnwu.magisk.
core.
utils.SafetyNetHelper
import
com.topjohnwu.magisk.view.MagiskDialog
import
com.topjohnwu.magisk.view.MagiskDialog
import
com.topjohnwu.magisk.view.MarkDownWindow
import
com.topjohnwu.magisk.view.MarkDownWindow
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
...
@@ -118,8 +118,8 @@ class UpdateSafetyNetEvent : ViewEvent(), ContextExecutor, KoinComponent, Safety
...
@@ -118,8 +118,8 @@ class UpdateSafetyNetEvent : ViewEvent(), ContextExecutor, KoinComponent, Safety
}
}
}
}
class
ViewActionEvent
(
val
action
:
BaseActivity
<*,
*>
.()
->
Unit
)
:
ViewEvent
(),
ActivityExecutor
{
class
ViewActionEvent
(
val
action
:
BaseActivity
.()
->
Unit
)
:
ViewEvent
(),
ActivityExecutor
{
override
fun
invoke
(
activity
:
BaseActivity
<
*
,
*
>
)
=
activity
.
run
(
action
)
override
fun
invoke
(
activity
:
BaseActivity
)
=
activity
.
run
(
action
)
}
}
class
OpenChangelogEvent
(
val
item
:
Repo
)
:
ViewEvent
(),
ContextExecutor
{
class
OpenChangelogEvent
(
val
item
:
Repo
)
:
ViewEvent
(),
ContextExecutor
{
...
@@ -133,7 +133,7 @@ class PermissionEvent(
...
@@ -133,7 +133,7 @@ class PermissionEvent(
val
callback
:
PublishSubject
<
Boolean
>
val
callback
:
PublishSubject
<
Boolean
>
)
:
ViewEvent
(),
ActivityExecutor
{
)
:
ViewEvent
(),
ActivityExecutor
{
override
fun
invoke
(
activity
:
BaseActivity
<
*
,
*
>
)
=
override
fun
invoke
(
activity
:
BaseActivity
)
=
activity
.
withPermissions
(*
permissions
.
toTypedArray
())
{
activity
.
withPermissions
(*
permissions
.
toTypedArray
())
{
onSuccess
{
onSuccess
{
callback
.
onNext
(
true
)
callback
.
onNext
(
true
)
...
@@ -146,25 +146,25 @@ class PermissionEvent(
...
@@ -146,25 +146,25 @@ class PermissionEvent(
}
}
class
BackPressEvent
:
ViewEvent
(),
ActivityExecutor
{
class
BackPressEvent
:
ViewEvent
(),
ActivityExecutor
{
override
fun
invoke
(
activity
:
BaseActivity
<
*
,
*
>
)
{
override
fun
invoke
(
activity
:
BaseActivity
)
{
activity
.
onBackPressed
()
activity
.
onBackPressed
()
}
}
}
}
class
DieEvent
:
ViewEvent
(),
ActivityExecutor
{
class
DieEvent
:
ViewEvent
(),
ActivityExecutor
{
override
fun
invoke
(
activity
:
BaseActivity
<
*
,
*
>
)
{
override
fun
invoke
(
activity
:
BaseActivity
)
{
activity
.
finish
()
activity
.
finish
()
}
}
}
}
class
RecreateEvent
:
ViewEvent
(),
ActivityExecutor
{
class
RecreateEvent
:
ViewEvent
(),
ActivityExecutor
{
override
fun
invoke
(
activity
:
BaseActivity
<
*
,
*
>
)
{
override
fun
invoke
(
activity
:
BaseActivity
)
{
activity
.
recreate
()
activity
.
recreate
()
}
}
}
}
class
RequestFileEvent
:
ViewEvent
(),
ActivityExecutor
{
class
RequestFileEvent
:
ViewEvent
(),
ActivityExecutor
{
override
fun
invoke
(
activity
:
BaseActivity
<
*
,
*
>
)
{
override
fun
invoke
(
activity
:
BaseActivity
)
{
Intent
(
Intent
.
ACTION_GET_CONTENT
)
Intent
(
Intent
.
ACTION_GET_CONTENT
)
.
setType
(
"*/*"
)
.
setType
(
"*/*"
)
.
addCategory
(
Intent
.
CATEGORY_OPENABLE
)
.
addCategory
(
Intent
.
CATEGORY_OPENABLE
)
...
...
app/src/main/java/com/topjohnwu/magisk/model/events/dialog/BiometricDialog.kt
View file @
707d7b33
package
com.topjohnwu.magisk.model.events.dialog
package
com.topjohnwu.magisk.model.events.dialog
import
com.topjohnwu.magisk.base.BaseActivity
import
com.topjohnwu.magisk.
core.
base.BaseActivity
import
com.topjohnwu.magisk.model.events.ActivityExecutor
import
com.topjohnwu.magisk.model.events.ActivityExecutor
import
com.topjohnwu.magisk.model.events.ViewEvent
import
com.topjohnwu.magisk.model.events.ViewEvent
import
com.topjohnwu.magisk.utils.BiometricHelper
import
com.topjohnwu.magisk.
core.
utils.BiometricHelper
class
BiometricDialog
(
class
BiometricDialog
(
builder
:
Builder
.()
->
Unit
builder
:
Builder
.()
->
Unit
...
@@ -16,7 +16,7 @@ class BiometricDialog(
...
@@ -16,7 +16,7 @@ class BiometricDialog(
builder
(
Builder
())
builder
(
Builder
())
}
}
override
fun
invoke
(
activity
:
BaseActivity
<
*
,
*
>
)
{
override
fun
invoke
(
activity
:
BaseActivity
)
{
BiometricHelper
.
authenticate
(
BiometricHelper
.
authenticate
(
activity
,
activity
,
onError
=
listenerOnFailure
,
onError
=
listenerOnFailure
,
...
...
app/src/main/java/com/topjohnwu/magisk/model/events/dialog/DarkThemeDialog.kt
View file @
707d7b33
...
@@ -2,9 +2,9 @@ package com.topjohnwu.magisk.model.events.dialog
...
@@ -2,9 +2,9 @@ package com.topjohnwu.magisk.model.events.dialog
import
android.app.Activity
import
android.app.Activity
import
androidx.appcompat.app.AppCompatDelegate
import
androidx.appcompat.app.AppCompatDelegate
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.base.BaseActivity
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.base.BaseActivity
import
com.topjohnwu.magisk.model.events.ActivityExecutor
import
com.topjohnwu.magisk.model.events.ActivityExecutor
import
com.topjohnwu.magisk.view.MagiskDialog
import
com.topjohnwu.magisk.view.MagiskDialog
import
java.lang.ref.WeakReference
import
java.lang.ref.WeakReference
...
@@ -13,7 +13,7 @@ class DarkThemeDialog : DialogEvent(), ActivityExecutor {
...
@@ -13,7 +13,7 @@ class DarkThemeDialog : DialogEvent(), ActivityExecutor {
private
var
activity
:
WeakReference
<
Activity
>?
=
null
private
var
activity
:
WeakReference
<
Activity
>?
=
null
override
fun
invoke
(
activity
:
BaseActivity
<
*
,
*
>
)
{
override
fun
invoke
(
activity
:
BaseActivity
)
{
this
.
activity
=
WeakReference
(
activity
)
this
.
activity
=
WeakReference
(
activity
)
}
}
...
...
app/src/main/java/com/topjohnwu/magisk/model/events/dialog/EnvFixDialog.kt
View file @
707d7b33
package
com.topjohnwu.magisk.model.events.dialog
package
com.topjohnwu.magisk.model.events.dialog
import
android.content.Context
import
android.content.DialogInterface
import
android.content.DialogInterface
import
android.widget.Toast
import
android.widget.Toast
import
androidx.core.net.toUri
import
com.topjohnwu.magisk.Info
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.
extensions.cachedFile
import
com.topjohnwu.magisk.
core.tasks.MagiskInstaller
import
com.topjohnwu.magisk.extensions.reboot
import
com.topjohnwu.magisk.extensions.reboot
import
com.topjohnwu.magisk.net.Networking
import
com.topjohnwu.magisk.core.utils.Utils
import
com.topjohnwu.magisk.tasks.MagiskInstaller
import
com.topjohnwu.magisk.utils.Utils
import
com.topjohnwu.magisk.view.MagiskDialog
import
com.topjohnwu.magisk.view.MagiskDialog
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.ShellUtils
import
com.topjohnwu.superuser.internal.UiThreadHandler
import
com.topjohnwu.superuser.internal.UiThreadHandler
import
com.topjohnwu.superuser.io.SuFile
import
org.koin.core.KoinComponent
import
org.koin.core.KoinComponent
import
org.koin.core.get
import
java.io.File
class
EnvFixDialog
:
DialogEvent
()
{
class
EnvFixDialog
:
DialogEvent
()
{
...
@@ -48,19 +38,7 @@ class EnvFixDialog : DialogEvent() {
...
@@ -48,19 +38,7 @@ class EnvFixDialog : DialogEvent() {
private
fun
fixEnv
(
dialog
:
DialogInterface
)
{
private
fun
fixEnv
(
dialog
:
DialogInterface
)
{
object
:
MagiskInstaller
(),
KoinComponent
{
object
:
MagiskInstaller
(),
KoinComponent
{
override
fun
operations
():
Boolean
{
override
fun
operations
()
=
fixEnv
()
val
context
=
get
<
Context
>()
val
zip
:
File
=
context
.
cachedFile
(
"magisk.zip"
)
installDir
=
SuFile
(
"/data/adb/magisk"
)
Shell
.
su
(
"rm -rf /data/adb/magisk/*"
).
exec
()
if
(!
ShellUtils
.
checkSum
(
"MD5"
,
zip
,
Info
.
remote
.
magisk
.
md5
))
Networking
.
get
(
Info
.
remote
.
magisk
.
link
).
execForFile
(
zip
)
zipUri
=
zip
.
toUri
()
return
extractZip
()
&&
Shell
.
su
(
"fix_env"
).
exec
().
isSuccess
}
override
fun
onResult
(
success
:
Boolean
)
{
override
fun
onResult
(
success
:
Boolean
)
{
dialog
.
dismiss
()
dialog
.
dismiss
()
...
...
app/src/main/java/com/topjohnwu/magisk/model/events/dialog/MagiskInstallDialog.kt
View file @
707d7b33
...
@@ -4,16 +4,16 @@ import android.Manifest
...
@@ -4,16 +4,16 @@ import android.Manifest
import
android.net.Uri
import
android.net.Uri
import
android.view.LayoutInflater
import
android.view.LayoutInflater
import
android.widget.Toast
import
android.widget.Toast
import
com.topjohnwu.magisk.Info
import
com.topjohnwu.magisk.
core.
Info
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.download.DownloadService
import
com.topjohnwu.magisk.databinding.IncludeInstallOptionsBinding
import
com.topjohnwu.magisk.databinding.IncludeInstallOptionsBinding
import
com.topjohnwu.magisk.extensions.hasPermissions
import
com.topjohnwu.magisk.extensions.hasPermissions
import
com.topjohnwu.magisk.extensions.res
import
com.topjohnwu.magisk.extensions.res
import
com.topjohnwu.magisk.model.download.DownloadService
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.events.OpenInappLinkEvent
import
com.topjohnwu.magisk.model.events.OpenInappLinkEvent
import
com.topjohnwu.magisk.utils.Utils
import
com.topjohnwu.magisk.
core.
utils.Utils
import
com.topjohnwu.magisk.view.MagiskDialog
import
com.topjohnwu.magisk.view.MagiskDialog
import
com.topjohnwu.magisk.view.MarkDownWindow
import
com.topjohnwu.magisk.view.MarkDownWindow
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
...
...
app/src/main/java/com/topjohnwu/magisk/model/events/dialog/ManagerInstallDialog.kt
View file @
707d7b33
package
com.topjohnwu.magisk.model.events.dialog
package
com.topjohnwu.magisk.model.events.dialog
import
com.topjohnwu.magisk.Info
import
com.topjohnwu.magisk.
core.
Info
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.download.DownloadService
import
com.topjohnwu.magisk.extensions.res
import
com.topjohnwu.magisk.extensions.res
import
com.topjohnwu.magisk.model.download.DownloadService
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.view.MagiskDialog
import
com.topjohnwu.magisk.view.MagiskDialog
...
...
app/src/main/java/com/topjohnwu/magisk/model/events/dialog/ModuleInstallDialog.kt
View file @
707d7b33
package
com.topjohnwu.magisk.model.events.dialog
package
com.topjohnwu.magisk.model.events.dialog
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.model.download.DownloadService
import
com.topjohnwu.magisk.core.download.DownloadService
import
com.topjohnwu.magisk.core.model.module.Repo
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.module.Repo
import
com.topjohnwu.magisk.view.MagiskDialog
import
com.topjohnwu.magisk.view.MagiskDialog
class
ModuleInstallDialog
(
private
val
item
:
Repo
)
:
DialogEvent
()
{
class
ModuleInstallDialog
(
private
val
item
:
Repo
)
:
DialogEvent
()
{
...
...
app/src/main/java/com/topjohnwu/magisk/model/events/dialog/UninstallDialog.kt
View file @
707d7b33
package
com.topjohnwu.magisk.model.events.dialog
package
com.topjohnwu.magisk.model.events.dialog
import
android.widget.Toast
import
android.widget.Toast
import
com.topjohnwu.magisk.Info
import
com.topjohnwu.magisk.
core.
Info
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.
model
.download.DownloadService
import
com.topjohnwu.magisk.
core
.download.DownloadService
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.utils.Utils
import
com.topjohnwu.magisk.
core.
utils.Utils
import
com.topjohnwu.magisk.view.MagiskDialog
import
com.topjohnwu.magisk.view.MagiskDialog
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
...
...
app/src/main/java/com/topjohnwu/magisk/model/flash/Flashing.kt
View file @
707d7b33
...
@@ -3,8 +3,8 @@ package com.topjohnwu.magisk.model.flash
...
@@ -3,8 +3,8 @@ package com.topjohnwu.magisk.model.flash
import
android.content.Context
import
android.content.Context
import
android.net.Uri
import
android.net.Uri
import
androidx.core.os.postDelayed
import
androidx.core.os.postDelayed
import
com.topjohnwu.magisk.core.tasks.FlashZip
import
com.topjohnwu.magisk.extensions.inject
import
com.topjohnwu.magisk.extensions.inject
import
com.topjohnwu.magisk.tasks.FlashZip
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.internal.UiThreadHandler
import
com.topjohnwu.superuser.internal.UiThreadHandler
...
...
app/src/main/java/com/topjohnwu/magisk/model/flash/Patching.kt
View file @
707d7b33
package
com.topjohnwu.magisk.model.flash
package
com.topjohnwu.magisk.model.flash
import
android.net.Uri
import
android.net.Uri
import
com.topjohnwu.magisk.tasks.MagiskInstaller
import
com.topjohnwu.magisk.
core.
tasks.MagiskInstaller
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
sealed
class
Patching
(
sealed
class
Patching
(
...
@@ -28,8 +28,7 @@ sealed class Patching(
...
@@ -28,8 +28,7 @@ sealed class Patching(
logs
:
MutableList
<
String
>,
logs
:
MutableList
<
String
>,
resultListener
:
FlashResultListener
resultListener
:
FlashResultListener
)
:
Patching
(
file
,
console
,
logs
,
resultListener
)
{
)
:
Patching
(
file
,
console
,
logs
,
resultListener
)
{
override
fun
operations
()
=
override
fun
operations
()
=
doPatchFile
(
uri
)
extractZip
()
&&
handleFile
(
uri
)
&&
patchBoot
()
&&
storeBoot
()
}
}
class
SecondSlot
(
class
SecondSlot
(
...
@@ -38,8 +37,7 @@ sealed class Patching(
...
@@ -38,8 +37,7 @@ sealed class Patching(
logs
:
MutableList
<
String
>,
logs
:
MutableList
<
String
>,
resultListener
:
FlashResultListener
resultListener
:
FlashResultListener
)
:
Patching
(
file
,
console
,
logs
,
resultListener
)
{
)
:
Patching
(
file
,
console
,
logs
,
resultListener
)
{
override
fun
operations
()
=
override
fun
operations
()
=
secondSlot
()
findSecondaryImage
()
&&
extractZip
()
&&
patchBoot
()
&&
flashBoot
()
&&
postOTA
()
}
}
class
Direct
(
class
Direct
(
...
@@ -48,8 +46,7 @@ sealed class Patching(
...
@@ -48,8 +46,7 @@ sealed class Patching(
logs
:
MutableList
<
String
>,
logs
:
MutableList
<
String
>,
resultListener
:
FlashResultListener
resultListener
:
FlashResultListener
)
:
Patching
(
file
,
console
,
logs
,
resultListener
)
{
)
:
Patching
(
file
,
console
,
logs
,
resultListener
)
{
override
fun
operations
()
=
override
fun
operations
()
=
direct
()
findImage
()
&&
extractZip
()
&&
patchBoot
()
&&
flashBoot
()
}
}
}
}
app/src/main/java/com/topjohnwu/magisk/model/navigation/MagiskNavigationEvent.kt
View file @
707d7b33
...
@@ -4,10 +4,10 @@ import android.os.Bundle
...
@@ -4,10 +4,10 @@ import android.os.Bundle
import
androidx.annotation.AnimRes
import
androidx.annotation.AnimRes
import
androidx.annotation.AnimatorRes
import
androidx.annotation.AnimatorRes
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.Fragment
import
com.topjohnwu.magisk.base.BaseActivity
import
com.topjohnwu.magisk.
core.
base.BaseActivity
import
com.topjohnwu.magisk.model.events.ActivityExecutor
import
com.topjohnwu.magisk.model.events.ActivityExecutor
import
com.topjohnwu.magisk.model.events.ViewEvent
import
com.topjohnwu.magisk.model.events.ViewEvent
import
com.topjohnwu.magisk.ui.
compat
.CompatActivity
import
com.topjohnwu.magisk.ui.
base
.CompatActivity
import
kotlin.reflect.KClass
import
kotlin.reflect.KClass
@DslMarker
@DslMarker
...
@@ -23,7 +23,7 @@ class MagiskNavigationEvent(
...
@@ -23,7 +23,7 @@ class MagiskNavigationEvent(
operator
fun
invoke
(
builder
:
Builder
.()
->
Unit
)
=
Builder
().
apply
(
builder
).
build
()
operator
fun
invoke
(
builder
:
Builder
.()
->
Unit
)
=
Builder
().
apply
(
builder
).
build
()
}
}
override
fun
invoke
(
activity
:
BaseActivity
<
*
,
*
>
)
{
override
fun
invoke
(
activity
:
BaseActivity
)
{
if
(
activity
!
is
CompatActivity
<*,
*>)
return
if
(
activity
!
is
CompatActivity
<*,
*>)
return
activity
.
navigation
?.
navigateTo
(
this
)
activity
.
navigation
?.
navigateTo
(
this
)
}
}
...
...
app/src/main/java/com/topjohnwu/magisk/model/navigation/Navigation.kt
View file @
707d7b33
...
@@ -3,8 +3,8 @@ package com.topjohnwu.magisk.model.navigation
...
@@ -3,8 +3,8 @@ package com.topjohnwu.magisk.model.navigation
import
android.content.Context
import
android.content.Context
import
android.content.Intent
import
android.content.Intent
import
android.os.Build
import
android.os.Build
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.
core.
Const
import
com.topjohnwu.magisk.intent
import
com.topjohnwu.magisk.
core.
intent
import
com.topjohnwu.magisk.ui.MainActivity
import
com.topjohnwu.magisk.ui.MainActivity
import
com.topjohnwu.magisk.ui.hide.HideFragment
import
com.topjohnwu.magisk.ui.hide.HideFragment
import
com.topjohnwu.magisk.ui.home.HomeFragment
import
com.topjohnwu.magisk.ui.home.HomeFragment
...
@@ -82,7 +82,9 @@ object Navigation {
...
@@ -82,7 +82,9 @@ object Navigation {
fun
start
(
launchIntent
:
Intent
,
context
:
Context
)
{
fun
start
(
launchIntent
:
Intent
,
context
:
Context
)
{
context
.
intent
<
MainActivity
>()
context
.
intent
<
MainActivity
>()
.
putExtra
(
Const
.
Key
.
OPEN_SECTION
,
launchIntent
.
getStringExtra
(
Const
.
Key
.
OPEN_SECTION
))
.
putExtra
(
Const
.
Key
.
OPEN_SECTION
,
launchIntent
.
getStringExtra
(
Const
.
Key
.
OPEN_SECTION
))
.
putExtra
(
.
putExtra
(
Const
.
Key
.
OPEN_SETTINGS
,
Const
.
Key
.
OPEN_SETTINGS
,
launchIntent
.
action
==
ACTION_APPLICATION_PREFERENCES
launchIntent
.
action
==
ACTION_APPLICATION_PREFERENCES
...
...
app/src/main/java/com/topjohnwu/magisk/model/zip/Zip.kt
deleted
100644 → 0
View file @
ba1a2fbc
package
com.topjohnwu.magisk.model.zip
import
com.topjohnwu.magisk.extensions.forEach
import
com.topjohnwu.magisk.extensions.withStreams
import
com.topjohnwu.superuser.io.SuFile
import
java.io.File
import
java.util.zip.ZipInputStream
class
Zip
private
constructor
(
private
val
values
:
Builder
)
{
companion
object
{
operator
fun
invoke
(
builder
:
Builder
.()
->
Unit
):
Zip
{
return
Zip
(
Builder
().
apply
(
builder
))
}
}
class
Builder
{
lateinit
var
zip
:
File
lateinit
var
destination
:
File
var
excludeDirs
=
true
}
data class
Path
(
val
path
:
String
,
val
pullFromDir
:
Boolean
=
true
)
fun
unzip
(
vararg
paths
:
Pair
<
String
,
Boolean
>)
=
unzip
(*
paths
.
map
{
Path
(
it
.
first
,
it
.
second
)
}.
toTypedArray
())
@Suppress
(
"RedundantLambdaArrow"
)
fun
unzip
(
vararg
paths
:
Path
)
{
ensureRequiredParams
()
values
.
zip
.
zipStream
().
use
{
it
.
forEach
{
e
->
val
currentPath
=
paths
.
firstOrNull
{
e
.
name
.
startsWith
(
it
.
path
)
}
val
isDirectory
=
values
.
excludeDirs
&&
e
.
isDirectory
if
(
currentPath
==
null
||
isDirectory
)
{
// Ignore directories, only create files
return
@forEach
}
val
name
=
if
(
currentPath
.
pullFromDir
)
{
e
.
name
.
substring
(
e
.
name
.
lastIndexOf
(
'/'
)
+
1
)
}
else
{
e
.
name
}
val
out
=
File
(
values
.
destination
,
name
)
.
ensureExists
()
.
outputStream
()
//.suOutputStream()
withStreams
(
it
,
out
)
{
reader
,
writer
->
reader
.
copyTo
(
writer
)
}
}
}
}
private
fun
ensureRequiredParams
()
{
if
(!
values
.
zip
.
exists
())
{
throw
RuntimeException
(
"Zip file does not exist"
)
}
}
private
fun
File
.
ensureExists
()
=
if
((!
parentFile
.
exists
()
&&
!
parentFile
.
mkdirs
())
||
parentFile
is
SuFile
)
{
SuFile
(
parentFile
,
name
).
apply
{
parentFile
.
mkdirs
()
}
}
else
{
this
}
private
fun
File
.
zipStream
()
=
ZipInputStream
(
inputStream
())
}
\ No newline at end of file
app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt
View file @
707d7b33
...
@@ -12,13 +12,13 @@ import androidx.core.view.updateLayoutParams
...
@@ -12,13 +12,13 @@ import androidx.core.view.updateLayoutParams
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.Fragment
import
com.google.android.material.card.MaterialCardView
import
com.google.android.material.card.MaterialCardView
import
com.ncapdevi.fragnav.FragNavController
import
com.ncapdevi.fragnav.FragNavController
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.databinding.ActivityMainMd2Binding
import
com.topjohnwu.magisk.databinding.ActivityMainMd2Binding
import
com.topjohnwu.magisk.extensions.startAnimations
import
com.topjohnwu.magisk.extensions.startAnimations
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.ui.
compat
.CompatActivity
import
com.topjohnwu.magisk.ui.
base
.CompatActivity
import
com.topjohnwu.magisk.ui.
compat
.CompatNavigationDelegate
import
com.topjohnwu.magisk.ui.
base
.CompatNavigationDelegate
import
com.topjohnwu.magisk.ui.home.HomeFragment
import
com.topjohnwu.magisk.ui.home.HomeFragment
import
com.topjohnwu.magisk.ui.module.ModuleFragment
import
com.topjohnwu.magisk.ui.module.ModuleFragment
import
com.topjohnwu.magisk.ui.superuser.SuperuserFragment
import
com.topjohnwu.magisk.ui.superuser.SuperuserFragment
...
...
app/src/main/java/com/topjohnwu/magisk/ui/MainViewModel.kt
View file @
707d7b33
package
com.topjohnwu.magisk.ui
package
com.topjohnwu.magisk.ui
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.
ui.
base.BaseViewModel
class
MainViewModel
:
BaseViewModel
()
class
MainViewModel
:
BaseViewModel
()
app/src/main/java/com/topjohnwu/magisk/ui/base/BaseUIActivity.kt
0 → 100644
View file @
707d7b33
package
com.topjohnwu.magisk.ui.base
import
android.os.Bundle
import
androidx.appcompat.app.AppCompatDelegate
import
androidx.databinding.DataBindingUtil
import
androidx.databinding.ViewDataBinding
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.base.BaseActivity
import
com.topjohnwu.magisk.model.events.EventHandler
abstract
class
BaseUIActivity
<
ViewModel
:
BaseViewModel
,
Binding
:
ViewDataBinding
>
:
BaseActivity
(),
EventHandler
{
protected
lateinit
var
binding
:
Binding
protected
abstract
val
layoutRes
:
Int
protected
abstract
val
viewModel
:
ViewModel
protected
open
val
themeRes
:
Int
=
R
.
style
.
MagiskTheme
open
val
snackbarView
get
()
=
binding
.
root
init
{
val
theme
=
Config
.
darkThemeExtended
AppCompatDelegate
.
setDefaultNightMode
(
theme
)
}
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
setTheme
(
themeRes
)
super
.
onCreate
(
savedInstanceState
)
viewModel
.
viewEvents
.
observe
(
this
,
viewEventObserver
)
binding
=
DataBindingUtil
.
setContentView
<
Binding
>(
this
,
layoutRes
).
apply
{
setVariable
(
BR
.
viewModel
,
viewModel
)
lifecycleOwner
=
this
@BaseUIActivity
}
}
}
app/src/main/java/com/topjohnwu/magisk/
base/Base
Fragment.kt
→
app/src/main/java/com/topjohnwu/magisk/
ui/base/BaseUI
Fragment.kt
View file @
707d7b33
package
com.topjohnwu.magisk.base
package
com.topjohnwu.magisk.
ui.
base
import
android.os.Bundle
import
android.os.Bundle
import
android.view.LayoutInflater
import
android.view.LayoutInflater
...
@@ -11,10 +11,10 @@ import com.topjohnwu.magisk.BR
...
@@ -11,10 +11,10 @@ import com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.model.events.EventHandler
import
com.topjohnwu.magisk.model.events.EventHandler
import
com.topjohnwu.magisk.model.events.ViewEvent
import
com.topjohnwu.magisk.model.events.ViewEvent
abstract
class
BaseFragment
<
ViewModel
:
BaseViewModel
,
Binding
:
ViewDataBinding
>
:
abstract
class
Base
UI
Fragment
<
ViewModel
:
BaseViewModel
,
Binding
:
ViewDataBinding
>
:
Fragment
(),
EventHandler
{
Fragment
(),
EventHandler
{
protected
val
activity
get
()
=
requireActivity
()
as
BaseActivity
<*,
*>
protected
val
activity
get
()
=
requireActivity
()
as
Base
UI
Activity
<*,
*>
protected
lateinit
var
binding
:
Binding
protected
lateinit
var
binding
:
Binding
protected
abstract
val
layoutRes
:
Int
protected
abstract
val
layoutRes
:
Int
protected
abstract
val
viewModel
:
ViewModel
protected
abstract
val
viewModel
:
ViewModel
...
@@ -31,7 +31,7 @@ abstract class BaseFragment<ViewModel : BaseViewModel, Binding : ViewDataBinding
...
@@ -31,7 +31,7 @@ abstract class BaseFragment<ViewModel : BaseViewModel, Binding : ViewDataBinding
):
View
?
{
):
View
?
{
binding
=
DataBindingUtil
.
inflate
<
Binding
>(
inflater
,
layoutRes
,
container
,
false
).
apply
{
binding
=
DataBindingUtil
.
inflate
<
Binding
>(
inflater
,
layoutRes
,
container
,
false
).
apply
{
setVariable
(
BR
.
viewModel
,
viewModel
)
setVariable
(
BR
.
viewModel
,
viewModel
)
lifecycleOwner
=
this
@BaseFragment
lifecycleOwner
=
this
@Base
UI
Fragment
}
}
return
binding
.
root
return
binding
.
root
...
...
app/src/main/java/com/topjohnwu/magisk/base/BaseViewModel.kt
→
app/src/main/java/com/topjohnwu/magisk/
ui/
base/BaseViewModel.kt
View file @
707d7b33
package
com.topjohnwu.magisk.base
package
com.topjohnwu.magisk.
ui.
base
import
androidx.annotation.CallSuper
import
androidx.annotation.CallSuper
import
androidx.core.graphics.Insets
import
androidx.core.graphics.Insets
...
@@ -8,7 +8,8 @@ import androidx.lifecycle.LiveData
...
@@ -8,7 +8,8 @@ import androidx.lifecycle.LiveData
import
androidx.lifecycle.MutableLiveData
import
androidx.lifecycle.MutableLiveData
import
androidx.lifecycle.ViewModel
import
androidx.lifecycle.ViewModel
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.Info
import
com.topjohnwu.magisk.core.Info
import
com.topjohnwu.magisk.core.base.BaseActivity
import
com.topjohnwu.magisk.extensions.doOnSubscribeUi
import
com.topjohnwu.magisk.extensions.doOnSubscribeUi
import
com.topjohnwu.magisk.model.events.*
import
com.topjohnwu.magisk.model.events.*
import
com.topjohnwu.magisk.model.observer.Observer
import
com.topjohnwu.magisk.model.observer.Observer
...
@@ -79,7 +80,7 @@ abstract class BaseViewModel(
...
@@ -79,7 +80,7 @@ abstract class BaseViewModel(
super
.
onCleared
()
super
.
onCleared
()
}
}
fun
withView
(
action
:
BaseActivity
<
*
,
*
>
.()
->
Unit
)
{
fun
withView
(
action
:
BaseActivity
.()
->
Unit
)
{
ViewActionEvent
(
action
).
publish
()
ViewActionEvent
(
action
).
publish
()
}
}
...
...
app/src/main/java/com/topjohnwu/magisk/ui/
compat
/CompatActivity.kt
→
app/src/main/java/com/topjohnwu/magisk/ui/
base
/CompatActivity.kt
View file @
707d7b33
package
com.topjohnwu.magisk.ui.
compat
package
com.topjohnwu.magisk.ui.
base
import
android.app.Activity
import
android.app.Activity
import
android.content.Intent
import
android.content.Intent
...
@@ -10,8 +10,6 @@ import androidx.core.content.getSystemService
...
@@ -10,8 +10,6 @@ import androidx.core.content.getSystemService
import
androidx.databinding.OnRebindCallback
import
androidx.databinding.OnRebindCallback
import
androidx.databinding.ViewDataBinding
import
androidx.databinding.ViewDataBinding
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.Fragment
import
com.topjohnwu.magisk.base.BaseActivity
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.extensions.snackbar
import
com.topjohnwu.magisk.extensions.snackbar
import
com.topjohnwu.magisk.extensions.startAnimations
import
com.topjohnwu.magisk.extensions.startAnimations
import
com.topjohnwu.magisk.model.events.SnackbarEvent
import
com.topjohnwu.magisk.model.events.SnackbarEvent
...
@@ -20,9 +18,10 @@ import com.topjohnwu.magisk.model.navigation.Navigator
...
@@ -20,9 +18,10 @@ import com.topjohnwu.magisk.model.navigation.Navigator
import
com.topjohnwu.magisk.ui.theme.Theme
import
com.topjohnwu.magisk.ui.theme.Theme
import
kotlin.reflect.KClass
import
kotlin.reflect.KClass
// TODO (diareuse): Merge into BaseUIActivity after all legacy UI is migrated
abstract
class
CompatActivity
<
ViewModel
:
BaseViewModel
,
Binding
:
ViewDataBinding
>
:
abstract
class
CompatActivity
<
ViewModel
:
BaseViewModel
,
Binding
:
ViewDataBinding
>
:
BaseActivity
<
ViewModel
,
Binding
>(),
CompatView
<
ViewModel
>,
Navigator
{
Base
UI
Activity
<
ViewModel
,
Binding
>(),
CompatView
<
ViewModel
>,
Navigator
{
override
val
themeRes
=
Theme
.
selected
.
themeRes
override
val
themeRes
=
Theme
.
selected
.
themeRes
override
val
viewRoot
:
View
get
()
=
binding
.
root
override
val
viewRoot
:
View
get
()
=
binding
.
root
...
...
app/src/main/java/com/topjohnwu/magisk/ui/
compat
/CompatDelegate.kt
→
app/src/main/java/com/topjohnwu/magisk/ui/
base
/CompatDelegate.kt
View file @
707d7b33
package
com.topjohnwu.magisk.ui.
compat
package
com.topjohnwu.magisk.ui.
base
import
android.view.View
import
android.view.View
import
androidx.core.graphics.Insets
import
androidx.core.graphics.Insets
import
androidx.core.view.ViewCompat
import
androidx.core.view.ViewCompat
import
androidx.core.view.WindowInsetsCompat
import
androidx.core.view.WindowInsetsCompat
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.Fragment
import
com.topjohnwu.magisk.base.BaseActivity
import
com.topjohnwu.magisk.model.events.ActivityExecutor
import
com.topjohnwu.magisk.model.events.ActivityExecutor
import
com.topjohnwu.magisk.model.events.ContextExecutor
import
com.topjohnwu.magisk.model.events.ContextExecutor
import
com.topjohnwu.magisk.model.events.FragmentExecutor
import
com.topjohnwu.magisk.model.events.FragmentExecutor
...
@@ -26,7 +25,7 @@ class CompatDelegate internal constructor(
...
@@ -26,7 +25,7 @@ class CompatDelegate internal constructor(
view
.
viewModel
.
requestRefresh
()
view
.
viewModel
.
requestRefresh
()
}
}
fun
onEventExecute
(
event
:
ViewEvent
,
activity
:
BaseActivity
<
*
,
*
>)
{
fun
onEventExecute
(
event
:
ViewEvent
,
activity
:
Base
UI
Activity
<
*
,
*
>)
{
(
event
as
?
ContextExecutor
)
?.
invoke
(
activity
)
(
event
as
?
ContextExecutor
)
?.
invoke
(
activity
)
(
event
as
?
ActivityExecutor
)
?.
invoke
(
activity
)
(
event
as
?
ActivityExecutor
)
?.
invoke
(
activity
)
(
event
as
?
FragmentExecutor
)
?.
let
{
(
event
as
?
FragmentExecutor
)
?.
let
{
...
@@ -37,7 +36,7 @@ class CompatDelegate internal constructor(
...
@@ -37,7 +36,7 @@ class CompatDelegate internal constructor(
fun
onEventExecute
(
event
:
ViewEvent
,
fragment
:
Fragment
)
{
fun
onEventExecute
(
event
:
ViewEvent
,
fragment
:
Fragment
)
{
(
event
as
?
ContextExecutor
)
?.
invoke
(
fragment
.
requireContext
())
(
event
as
?
ContextExecutor
)
?.
invoke
(
fragment
.
requireContext
())
(
event
as
?
FragmentExecutor
)
?.
invoke
(
fragment
)
(
event
as
?
FragmentExecutor
)
?.
invoke
(
fragment
)
(
event
as
?
ActivityExecutor
)
?.
invoke
(
fragment
.
requireActivity
()
as
BaseActivity
<*,
*>)
(
event
as
?
ActivityExecutor
)
?.
invoke
(
fragment
.
requireActivity
()
as
Base
UI
Activity
<*,
*>)
}
}
private
fun
ensureInsets
()
{
private
fun
ensureInsets
()
{
...
...
app/src/main/java/com/topjohnwu/magisk/ui/
compat
/CompatFragment.kt
→
app/src/main/java/com/topjohnwu/magisk/ui/
base
/CompatFragment.kt
View file @
707d7b33
package
com.topjohnwu.magisk.ui.
compat
package
com.topjohnwu.magisk.ui.
base
import
android.os.Bundle
import
android.os.Bundle
import
android.view.View
import
android.view.View
...
@@ -6,13 +6,13 @@ import android.view.ViewGroup
...
@@ -6,13 +6,13 @@ import android.view.ViewGroup
import
androidx.databinding.OnRebindCallback
import
androidx.databinding.OnRebindCallback
import
androidx.databinding.ViewDataBinding
import
androidx.databinding.ViewDataBinding
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.Fragment
import
com.topjohnwu.magisk.base.BaseFragment
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.extensions.startAnimations
import
com.topjohnwu.magisk.extensions.startAnimations
import
com.topjohnwu.magisk.model.events.ViewEvent
import
com.topjohnwu.magisk.model.events.ViewEvent
// TODO (diareuse): Merge into BaseUIFragment after all legacy UI is migrated
abstract
class
CompatFragment
<
ViewModel
:
BaseViewModel
,
Binding
:
ViewDataBinding
>
abstract
class
CompatFragment
<
ViewModel
:
BaseViewModel
,
Binding
:
ViewDataBinding
>
:
BaseFragment
<
ViewModel
,
Binding
>(),
CompatView
<
ViewModel
>
{
:
Base
UI
Fragment
<
ViewModel
,
Binding
>(),
CompatView
<
ViewModel
>
{
override
val
viewRoot
:
View
get
()
=
binding
.
root
override
val
viewRoot
:
View
get
()
=
binding
.
root
override
val
navigation
by
lazy
{
compatActivity
.
navigation
}
override
val
navigation
by
lazy
{
compatActivity
.
navigation
}
...
...
app/src/main/java/com/topjohnwu/magisk/ui/
compat
/CompatHelpers.kt
→
app/src/main/java/com/topjohnwu/magisk/ui/
base
/CompatHelpers.kt
View file @
707d7b33
package
com.topjohnwu.magisk.ui.
compat
package
com.topjohnwu.magisk.ui.
base
import
androidx.databinding.ViewDataBinding
import
androidx.databinding.ViewDataBinding
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.databinding.ComparableRvItem
...
...
app/src/main/java/com/topjohnwu/magisk/ui/
compat
/CompatNavigationDelegate.kt
→
app/src/main/java/com/topjohnwu/magisk/ui/
base
/CompatNavigationDelegate.kt
View file @
707d7b33
package
com.topjohnwu.magisk.ui.
compat
package
com.topjohnwu.magisk.ui.
base
import
android.content.Intent
import
android.content.Intent
import
android.os.Bundle
import
android.os.Bundle
...
...
app/src/main/java/com/topjohnwu/magisk/ui/
compat
/CompatView.kt
→
app/src/main/java/com/topjohnwu/magisk/ui/
base
/CompatView.kt
View file @
707d7b33
package
com.topjohnwu.magisk.ui.
compat
package
com.topjohnwu.magisk.ui.
base
import
android.view.View
import
android.view.View
import
androidx.core.graphics.Insets
import
androidx.core.graphics.Insets
import
com.topjohnwu.magisk.base.BaseViewModel
internal
interface
CompatView
<
ViewModel
:
BaseViewModel
>
{
internal
interface
CompatView
<
ViewModel
:
BaseViewModel
>
{
...
...
app/src/main/java/com/topjohnwu/magisk/ui/
compat
/Queryable.kt
→
app/src/main/java/com/topjohnwu/magisk/ui/
base
/Queryable.kt
View file @
707d7b33
package
com.topjohnwu.magisk.ui.
compat
package
com.topjohnwu.magisk.ui.
base
import
android.os.Handler
import
android.os.Handler
import
android.os.Looper
import
android.os.Looper
...
...
app/src/main/java/com/topjohnwu/magisk/ui/flash/FlashFragment.kt
View file @
707d7b33
...
@@ -2,7 +2,7 @@ package com.topjohnwu.magisk.ui.flash
...
@@ -2,7 +2,7 @@ package com.topjohnwu.magisk.ui.flash
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.FragmentFlashMd2Binding
import
com.topjohnwu.magisk.databinding.FragmentFlashMd2Binding
import
com.topjohnwu.magisk.ui.
compat
.CompatFragment
import
com.topjohnwu.magisk.ui.
base
.CompatFragment
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.androidx.viewmodel.ext.android.viewModel
class
FlashFragment
:
CompatFragment
<
FlashViewModel
,
FragmentFlashMd2Binding
>()
{
class
FlashFragment
:
CompatFragment
<
FlashViewModel
,
FragmentFlashMd2Binding
>()
{
...
...
app/src/main/java/com/topjohnwu/magisk/ui/flash/FlashViewModel.kt
View file @
707d7b33
package
com.topjohnwu.magisk.ui.flash
package
com.topjohnwu.magisk.ui.flash
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.
ui.
base.BaseViewModel
class
FlashViewModel
:
BaseViewModel
()
class
FlashViewModel
:
BaseViewModel
()
app/src/main/java/com/topjohnwu/magisk/ui/hide/HideFragment.kt
View file @
707d7b33
...
@@ -12,8 +12,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
...
@@ -12,8 +12,8 @@ import androidx.recyclerview.widget.LinearLayoutManager
import
androidx.recyclerview.widget.RecyclerView
import
androidx.recyclerview.widget.RecyclerView
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.FragmentHideMd2Binding
import
com.topjohnwu.magisk.databinding.FragmentHideMd2Binding
import
com.topjohnwu.magisk.ui.
compat
.CompatFragment
import
com.topjohnwu.magisk.ui.
base
.CompatFragment
import
com.topjohnwu.magisk.ui.
compat
.hideKeyboard
import
com.topjohnwu.magisk.ui.
base
.hideKeyboard
import
com.topjohnwu.magisk.utils.MotionRevealHelper
import
com.topjohnwu.magisk.utils.MotionRevealHelper
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.androidx.viewmodel.ext.android.viewModel
...
...
app/src/main/java/com/topjohnwu/magisk/ui/hide/HideViewModel.kt
View file @
707d7b33
...
@@ -3,6 +3,7 @@ package com.topjohnwu.magisk.ui.hide
...
@@ -3,6 +3,7 @@ package com.topjohnwu.magisk.ui.hide
import
android.content.pm.ApplicationInfo
import
android.content.pm.ApplicationInfo
import
androidx.databinding.Bindable
import
androidx.databinding.Bindable
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.core.utils.currentLocale
import
com.topjohnwu.magisk.data.repository.MagiskRepository
import
com.topjohnwu.magisk.data.repository.MagiskRepository
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.toggle
import
com.topjohnwu.magisk.extensions.toggle
...
@@ -12,12 +13,11 @@ import com.topjohnwu.magisk.model.entity.ProcessHideApp
...
@@ -12,12 +13,11 @@ import com.topjohnwu.magisk.model.entity.ProcessHideApp
import
com.topjohnwu.magisk.model.entity.StatefulProcess
import
com.topjohnwu.magisk.model.entity.StatefulProcess
import
com.topjohnwu.magisk.model.entity.recycler.HideItem
import
com.topjohnwu.magisk.model.entity.recycler.HideItem
import
com.topjohnwu.magisk.model.entity.recycler.HideProcessItem
import
com.topjohnwu.magisk.model.entity.recycler.HideProcessItem
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.
ui.
base.BaseViewModel
import
com.topjohnwu.magisk.ui.
compat
.Queryable
import
com.topjohnwu.magisk.ui.
base
.Queryable
import
com.topjohnwu.magisk.ui.
compat
.filterableListOf
import
com.topjohnwu.magisk.ui.
base
.filterableListOf
import
com.topjohnwu.magisk.ui.
compat
.itemBindingOf
import
com.topjohnwu.magisk.ui.
base
.itemBindingOf
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.currentLocale
class
HideViewModel
(
class
HideViewModel
(
private
val
magiskRepo
:
MagiskRepository
private
val
magiskRepo
:
MagiskRepository
...
...
app/src/main/java/com/topjohnwu/magisk/ui/home/HomeFragment.kt
View file @
707d7b33
...
@@ -7,7 +7,7 @@ import androidx.core.graphics.Insets
...
@@ -7,7 +7,7 @@ import androidx.core.graphics.Insets
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.FragmentHomeMd2Binding
import
com.topjohnwu.magisk.databinding.FragmentHomeMd2Binding
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.ui.
compat
.CompatFragment
import
com.topjohnwu.magisk.ui.
base
.CompatFragment
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.androidx.viewmodel.ext.android.viewModel
class
HomeFragment
:
CompatFragment
<
HomeViewModel
,
FragmentHomeMd2Binding
>()
{
class
HomeFragment
:
CompatFragment
<
HomeViewModel
,
FragmentHomeMd2Binding
>()
{
...
...
app/src/main/java/com/topjohnwu/magisk/ui/home/HomeViewModel.kt
View file @
707d7b33
...
@@ -3,15 +3,15 @@ package com.topjohnwu.magisk.ui.home
...
@@ -3,15 +3,15 @@ package com.topjohnwu.magisk.ui.home
import
android.Manifest
import
android.Manifest
import
android.os.Build
import
android.os.Build
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.Info
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.Info
import
com.topjohnwu.magisk.core.download.RemoteFileService
import
com.topjohnwu.magisk.data.repository.MagiskRepository
import
com.topjohnwu.magisk.data.repository.MagiskRepository
import
com.topjohnwu.magisk.extensions.*
import
com.topjohnwu.magisk.extensions.*
import
com.topjohnwu.magisk.model.download.RemoteFileService
import
com.topjohnwu.magisk.core.model.MagiskJson
import
com.topjohnwu.magisk.model.entity.MagiskJson
import
com.topjohnwu.magisk.core.model.ManagerJson
import
com.topjohnwu.magisk.model.entity.ManagerJson
import
com.topjohnwu.magisk.core.model.UpdateInfo
import
com.topjohnwu.magisk.model.entity.UpdateInfo
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject.Magisk
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject.Magisk
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject.Manager
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject.Manager
import
com.topjohnwu.magisk.model.entity.recycler.DeveloperItem
import
com.topjohnwu.magisk.model.entity.recycler.DeveloperItem
...
@@ -22,8 +22,8 @@ import com.topjohnwu.magisk.model.events.dialog.ManagerInstallDialog
...
@@ -22,8 +22,8 @@ import com.topjohnwu.magisk.model.events.dialog.ManagerInstallDialog
import
com.topjohnwu.magisk.model.events.dialog.UninstallDialog
import
com.topjohnwu.magisk.model.events.dialog.UninstallDialog
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.model.observer.Observer
import
com.topjohnwu.magisk.model.observer.Observer
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.
ui.
base.BaseViewModel
import
com.topjohnwu.magisk.ui.
compat
.itemBindingOf
import
com.topjohnwu.magisk.ui.
base
.itemBindingOf
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
me.tatarka.bindingcollectionadapter2.BR
import
me.tatarka.bindingcollectionadapter2.BR
...
...
app/src/main/java/com/topjohnwu/magisk/ui/install/InstallFragment.kt
View file @
707d7b33
...
@@ -5,7 +5,7 @@ import androidx.core.graphics.Insets
...
@@ -5,7 +5,7 @@ import androidx.core.graphics.Insets
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.FragmentInstallMd2Binding
import
com.topjohnwu.magisk.databinding.FragmentInstallMd2Binding
import
com.topjohnwu.magisk.model.events.RequestFileEvent
import
com.topjohnwu.magisk.model.events.RequestFileEvent
import
com.topjohnwu.magisk.ui.
compat
.CompatFragment
import
com.topjohnwu.magisk.ui.
base
.CompatFragment
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.androidx.viewmodel.ext.android.viewModel
class
InstallFragment
:
CompatFragment
<
InstallViewModel
,
FragmentInstallMd2Binding
>()
{
class
InstallFragment
:
CompatFragment
<
InstallViewModel
,
FragmentInstallMd2Binding
>()
{
...
...
app/src/main/java/com/topjohnwu/magisk/ui/install/InstallViewModel.kt
View file @
707d7b33
...
@@ -2,13 +2,13 @@ package com.topjohnwu.magisk.ui.install
...
@@ -2,13 +2,13 @@ package com.topjohnwu.magisk.ui.install
import
android.net.Uri
import
android.net.Uri
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.download.DownloadService
import
com.topjohnwu.magisk.core.download.RemoteFileService
import
com.topjohnwu.magisk.extensions.addOnPropertyChangedCallback
import
com.topjohnwu.magisk.extensions.addOnPropertyChangedCallback
import
com.topjohnwu.magisk.model.download.DownloadService
import
com.topjohnwu.magisk.model.download.RemoteFileService
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.events.RequestFileEvent
import
com.topjohnwu.magisk.model.events.RequestFileEvent
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.
ui.
base.BaseViewModel
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.ShellUtils
import
com.topjohnwu.superuser.ShellUtils
...
...
app/src/main/java/com/topjohnwu/magisk/ui/log/LogFragment.kt
View file @
707d7b33
...
@@ -10,7 +10,7 @@ import androidx.core.view.isVisible
...
@@ -10,7 +10,7 @@ import androidx.core.view.isVisible
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.FragmentLogMd2Binding
import
com.topjohnwu.magisk.databinding.FragmentLogMd2Binding
import
com.topjohnwu.magisk.ui.MainActivity
import
com.topjohnwu.magisk.ui.MainActivity
import
com.topjohnwu.magisk.ui.
compat
.CompatFragment
import
com.topjohnwu.magisk.ui.
base
.CompatFragment
import
com.topjohnwu.magisk.utils.MotionRevealHelper
import
com.topjohnwu.magisk.utils.MotionRevealHelper
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.androidx.viewmodel.ext.android.viewModel
...
...
app/src/main/java/com/topjohnwu/magisk/ui/log/LogViewModel.kt
View file @
707d7b33
package
com.topjohnwu.magisk.ui.log
package
com.topjohnwu.magisk.ui.log
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.Const
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.data.repository.LogRepository
import
com.topjohnwu.magisk.data.repository.LogRepository
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.subscribeK
...
@@ -12,9 +12,9 @@ import com.topjohnwu.magisk.model.entity.recycler.ConsoleItem
...
@@ -12,9 +12,9 @@ import com.topjohnwu.magisk.model.entity.recycler.ConsoleItem
import
com.topjohnwu.magisk.model.entity.recycler.LogItem
import
com.topjohnwu.magisk.model.entity.recycler.LogItem
import
com.topjohnwu.magisk.model.entity.recycler.TextItem
import
com.topjohnwu.magisk.model.entity.recycler.TextItem
import
com.topjohnwu.magisk.model.events.SnackbarEvent
import
com.topjohnwu.magisk.model.events.SnackbarEvent
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.
ui.
base.BaseViewModel
import
com.topjohnwu.magisk.ui.
compat
.diffListOf
import
com.topjohnwu.magisk.ui.
base
.diffListOf
import
com.topjohnwu.magisk.ui.
compat
.itemBindingOf
import
com.topjohnwu.magisk.ui.
base
.itemBindingOf
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
io.reactivex.Completable
import
io.reactivex.Completable
import
io.reactivex.android.schedulers.AndroidSchedulers
import
io.reactivex.android.schedulers.AndroidSchedulers
...
...
app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleFragment.kt
View file @
707d7b33
...
@@ -16,8 +16,8 @@ import com.topjohnwu.magisk.model.events.InstallExternalModuleEvent
...
@@ -16,8 +16,8 @@ import com.topjohnwu.magisk.model.events.InstallExternalModuleEvent
import
com.topjohnwu.magisk.model.events.ViewEvent
import
com.topjohnwu.magisk.model.events.ViewEvent
import
com.topjohnwu.magisk.ui.MainActivity
import
com.topjohnwu.magisk.ui.MainActivity
import
com.topjohnwu.magisk.ui.ReselectionTarget
import
com.topjohnwu.magisk.ui.ReselectionTarget
import
com.topjohnwu.magisk.ui.
compat
.CompatFragment
import
com.topjohnwu.magisk.ui.
base
.CompatFragment
import
com.topjohnwu.magisk.ui.
compat
.hideKeyboard
import
com.topjohnwu.magisk.ui.
base
.hideKeyboard
import
com.topjohnwu.magisk.utils.EndlessRecyclerScrollListener
import
com.topjohnwu.magisk.utils.EndlessRecyclerScrollListener
import
com.topjohnwu.magisk.utils.MotionRevealHelper
import
com.topjohnwu.magisk.utils.MotionRevealHelper
import
com.topjohnwu.magisk.utils.PinchZoomTouchListener
import
com.topjohnwu.magisk.utils.PinchZoomTouchListener
...
...
app/src/main/java/com/topjohnwu/magisk/ui/module/ModuleViewModel.kt
View file @
707d7b33
...
@@ -4,27 +4,26 @@ import androidx.annotation.WorkerThread
...
@@ -4,27 +4,26 @@ import androidx.annotation.WorkerThread
import
androidx.databinding.Bindable
import
androidx.databinding.Bindable
import
androidx.databinding.ObservableArrayList
import
androidx.databinding.ObservableArrayList
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.download.RemoteFileService
import
com.topjohnwu.magisk.core.model.module.Module
import
com.topjohnwu.magisk.core.model.module.Repo
import
com.topjohnwu.magisk.core.tasks.RepoUpdater
import
com.topjohnwu.magisk.core.utils.currentLocale
import
com.topjohnwu.magisk.data.database.RepoByNameDao
import
com.topjohnwu.magisk.data.database.RepoByNameDao
import
com.topjohnwu.magisk.data.database.RepoByUpdatedDao
import
com.topjohnwu.magisk.data.database.RepoByUpdatedDao
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.extensions.reboot
import
com.topjohnwu.magisk.extensions.reboot
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.model.download.RemoteFileService
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.module.Module
import
com.topjohnwu.magisk.model.entity.module.Repo
import
com.topjohnwu.magisk.model.entity.recycler.*
import
com.topjohnwu.magisk.model.entity.recycler.*
import
com.topjohnwu.magisk.model.events.InstallExternalModuleEvent
import
com.topjohnwu.magisk.model.events.InstallExternalModuleEvent
import
com.topjohnwu.magisk.model.events.OpenChangelogEvent
import
com.topjohnwu.magisk.model.events.OpenChangelogEvent
import
com.topjohnwu.magisk.model.events.dialog.ModuleInstallDialog
import
com.topjohnwu.magisk.model.events.dialog.ModuleInstallDialog
import
com.topjohnwu.magisk.tasks.RepoUpdater
import
com.topjohnwu.magisk.ui.base.*
import
com.topjohnwu.magisk.ui.compat.*
import
com.topjohnwu.magisk.utils.EndlessRecyclerScrollListener
import
com.topjohnwu.magisk.utils.EndlessRecyclerScrollListener
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.currentLocale
import
io.reactivex.Completable
import
io.reactivex.Completable
import
io.reactivex.Single
import
io.reactivex.Single
import
io.reactivex.android.schedulers.AndroidSchedulers
import
io.reactivex.android.schedulers.AndroidSchedulers
...
@@ -248,9 +247,7 @@ class ModuleViewModel(
...
@@ -248,9 +247,7 @@ class ModuleViewModel(
}
}
}
}
private
fun
downloadRepos
()
=
Single
.
just
(
Unit
)
private
fun
downloadRepos
()
=
repoUpdater
()
.
flatMap
{
repoUpdater
()
}
.
ignoreElement
()
// ---
// ---
...
...
app/src/main/java/com/topjohnwu/magisk/ui/request/RequestActivity.kt
View file @
707d7b33
...
@@ -2,7 +2,7 @@ package com.topjohnwu.magisk.ui.request
...
@@ -2,7 +2,7 @@ package com.topjohnwu.magisk.ui.request
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.ActivityRequestMd2Binding
import
com.topjohnwu.magisk.databinding.ActivityRequestMd2Binding
import
com.topjohnwu.magisk.ui.
compat
.CompatActivity
import
com.topjohnwu.magisk.ui.
base
.CompatActivity
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.androidx.viewmodel.ext.android.viewModel
class
RequestActivity
:
CompatActivity
<
RequestViewModel
,
ActivityRequestMd2Binding
>()
{
class
RequestActivity
:
CompatActivity
<
RequestViewModel
,
ActivityRequestMd2Binding
>()
{
...
...
app/src/main/java/com/topjohnwu/magisk/ui/request/RequestViewModel.kt
View file @
707d7b33
package
com.topjohnwu.magisk.ui.request
package
com.topjohnwu.magisk.ui.request
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.
ui.
base.BaseViewModel
class
RequestViewModel
:
BaseViewModel
()
class
RequestViewModel
:
BaseViewModel
()
app/src/main/java/com/topjohnwu/magisk/ui/safetynet/SafetynetFragment.kt
View file @
707d7b33
...
@@ -2,7 +2,7 @@ package com.topjohnwu.magisk.ui.safetynet
...
@@ -2,7 +2,7 @@ package com.topjohnwu.magisk.ui.safetynet
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.FragmentSafetynetMd2Binding
import
com.topjohnwu.magisk.databinding.FragmentSafetynetMd2Binding
import
com.topjohnwu.magisk.ui.
compat
.CompatFragment
import
com.topjohnwu.magisk.ui.
base
.CompatFragment
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.androidx.viewmodel.ext.android.viewModel
class
SafetynetFragment
:
CompatFragment
<
SafetynetViewModel
,
FragmentSafetynetMd2Binding
>()
{
class
SafetynetFragment
:
CompatFragment
<
SafetynetViewModel
,
FragmentSafetynetMd2Binding
>()
{
...
...
app/src/main/java/com/topjohnwu/magisk/ui/safetynet/SafetynetViewModel.kt
View file @
707d7b33
...
@@ -6,11 +6,11 @@ import com.topjohnwu.magisk.R
...
@@ -6,11 +6,11 @@ import com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.model.events.SafetyNetResult
import
com.topjohnwu.magisk.model.events.SafetyNetResult
import
com.topjohnwu.magisk.model.events.UpdateSafetyNetEvent
import
com.topjohnwu.magisk.model.events.UpdateSafetyNetEvent
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.
ui.
base.BaseViewModel
import
com.topjohnwu.magisk.ui.safetynet.SafetyNetState.*
import
com.topjohnwu.magisk.ui.safetynet.SafetyNetState.*
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.RxBus
import
com.topjohnwu.magisk.utils.RxBus
import
com.topjohnwu.magisk.utils.SafetyNetHelper
import
com.topjohnwu.magisk.
core.
utils.SafetyNetHelper
enum
class
SafetyNetState
{
enum
class
SafetyNetState
{
LOADING
,
PASS
,
FAILED
,
IDLE
LOADING
,
PASS
,
FAILED
,
IDLE
...
...
app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsFragment.kt
View file @
707d7b33
...
@@ -5,7 +5,7 @@ import android.view.View
...
@@ -5,7 +5,7 @@ import android.view.View
import
androidx.core.graphics.Insets
import
androidx.core.graphics.Insets
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.FragmentSettingsMd2Binding
import
com.topjohnwu.magisk.databinding.FragmentSettingsMd2Binding
import
com.topjohnwu.magisk.ui.
compat
.CompatFragment
import
com.topjohnwu.magisk.ui.
base
.CompatFragment
import
com.topjohnwu.magisk.utils.PinchZoomTouchListener
import
com.topjohnwu.magisk.utils.PinchZoomTouchListener
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.androidx.viewmodel.ext.android.viewModel
...
...
app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsItems.kt
View file @
707d7b33
...
@@ -6,14 +6,24 @@ import android.os.Environment
...
@@ -6,14 +6,24 @@ import android.os.Environment
import
android.view.LayoutInflater
import
android.view.LayoutInflater
import
android.widget.Toast
import
android.widget.Toast
import
androidx.databinding.Bindable
import
androidx.databinding.Bindable
import
com.topjohnwu.magisk.*
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.BuildConfig
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.Config
import
com.topjohnwu.magisk.core.Const
import
com.topjohnwu.magisk.core.Info
import
com.topjohnwu.magisk.core.utils.availableLocales
import
com.topjohnwu.magisk.core.utils.currentLocale
import
com.topjohnwu.magisk.core.utils.refreshLocale
import
com.topjohnwu.magisk.databinding.DialogSettingsAppNameBinding
import
com.topjohnwu.magisk.databinding.DialogSettingsAppNameBinding
import
com.topjohnwu.magisk.databinding.DialogSettingsDownloadPathBinding
import
com.topjohnwu.magisk.databinding.DialogSettingsDownloadPathBinding
import
com.topjohnwu.magisk.databinding.DialogSettingsUpdateChannelBinding
import
com.topjohnwu.magisk.databinding.DialogSettingsUpdateChannelBinding
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.get
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.model.entity.recycler.SettingsItem
import
com.topjohnwu.magisk.model.entity.recycler.SettingsItem
import
com.topjohnwu.magisk.utils.*
import
com.topjohnwu.magisk.core.utils.BiometricHelper
import
com.topjohnwu.magisk.core.utils.Utils
import
com.topjohnwu.magisk.utils.asTransitive
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
java.io.File
import
java.io.File
import
kotlin.math.max
import
kotlin.math.max
...
@@ -36,7 +46,9 @@ object Language : SettingsItem.Selector() {
...
@@ -36,7 +46,9 @@ object Language : SettingsItem.Selector() {
init
{
init
{
availableLocales
.
subscribeK
{
(
names
,
values
)
->
availableLocales
.
subscribeK
{
(
names
,
values
)
->
setValues
(
names
,
values
)
setValues
(
names
,
values
)
val
selectedLocale
=
currentLocale
.
getDisplayName
(
currentLocale
)
val
selectedLocale
=
currentLocale
.
getDisplayName
(
currentLocale
)
value
=
names
.
indexOfFirst
{
it
==
selectedLocale
}.
let
{
if
(
it
==
-
1
)
0
else
it
}
value
=
names
.
indexOfFirst
{
it
==
selectedLocale
}.
let
{
if
(
it
==
-
1
)
0
else
it
}
}
}
}
}
...
...
app/src/main/java/com/topjohnwu/magisk/ui/settings/SettingsViewModel.kt
View file @
707d7b33
...
@@ -5,9 +5,10 @@ import android.view.View
...
@@ -5,9 +5,10 @@ import android.view.View
import
android.widget.Toast
import
android.widget.Toast
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.download.DownloadService
import
com.topjohnwu.magisk.core.utils.PatchAPK
import
com.topjohnwu.magisk.data.database.RepoDao
import
com.topjohnwu.magisk.data.database.RepoDao
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.model.download.DownloadService
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.Configuration
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.internal.DownloadSubject
import
com.topjohnwu.magisk.model.entity.recycler.SettingsItem
import
com.topjohnwu.magisk.model.entity.recycler.SettingsItem
...
@@ -15,12 +16,11 @@ import com.topjohnwu.magisk.model.events.PermissionEvent
...
@@ -15,12 +16,11 @@ import com.topjohnwu.magisk.model.events.PermissionEvent
import
com.topjohnwu.magisk.model.events.RecreateEvent
import
com.topjohnwu.magisk.model.events.RecreateEvent
import
com.topjohnwu.magisk.model.events.dialog.BiometricDialog
import
com.topjohnwu.magisk.model.events.dialog.BiometricDialog
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.ui.base.BaseViewModel
import
com.topjohnwu.magisk.ui.compat.adapterOf
import
com.topjohnwu.magisk.ui.base.adapterOf
import
com.topjohnwu.magisk.ui.compat.diffListOf
import
com.topjohnwu.magisk.ui.base.diffListOf
import
com.topjohnwu.magisk.ui.compat.itemBindingOf
import
com.topjohnwu.magisk.ui.base.itemBindingOf
import
com.topjohnwu.magisk.utils.PatchAPK
import
com.topjohnwu.magisk.core.utils.Utils
import
com.topjohnwu.magisk.utils.Utils
import
com.topjohnwu.superuser.Shell
import
com.topjohnwu.superuser.Shell
import
io.reactivex.Completable
import
io.reactivex.Completable
import
io.reactivex.subjects.PublishSubject
import
io.reactivex.subjects.PublishSubject
...
...
app/src/main/java/com/topjohnwu/magisk/ui/superuser/SuperuserFragment.kt
View file @
707d7b33
...
@@ -9,7 +9,7 @@ import androidx.core.graphics.Insets
...
@@ -9,7 +9,7 @@ import androidx.core.graphics.Insets
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.FragmentSuperuserMd2Binding
import
com.topjohnwu.magisk.databinding.FragmentSuperuserMd2Binding
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.ui.
compat
.CompatFragment
import
com.topjohnwu.magisk.ui.
base
.CompatFragment
import
com.topjohnwu.magisk.utils.PinchZoomTouchListener
import
com.topjohnwu.magisk.utils.PinchZoomTouchListener
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.androidx.viewmodel.ext.android.viewModel
...
...
app/src/main/java/com/topjohnwu/magisk/ui/superuser/SuperuserViewModel.kt
View file @
707d7b33
...
@@ -5,12 +5,13 @@ import android.content.res.Resources
...
@@ -5,12 +5,13 @@ import android.content.res.Resources
import
androidx.databinding.ObservableArrayList
import
androidx.databinding.ObservableArrayList
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.data.database.PolicyDao
import
com.topjohnwu.magisk.core.magiskdb.PolicyDao
import
com.topjohnwu.magisk.core.model.MagiskPolicy
import
com.topjohnwu.magisk.core.utils.currentLocale
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.extensions.applySchedulers
import
com.topjohnwu.magisk.extensions.applySchedulers
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.subscribeK
import
com.topjohnwu.magisk.extensions.toggle
import
com.topjohnwu.magisk.extensions.toggle
import
com.topjohnwu.magisk.model.entity.MagiskPolicy
import
com.topjohnwu.magisk.model.entity.recycler.PolicyItem
import
com.topjohnwu.magisk.model.entity.recycler.PolicyItem
import
com.topjohnwu.magisk.model.entity.recycler.TappableHeadlineItem
import
com.topjohnwu.magisk.model.entity.recycler.TappableHeadlineItem
import
com.topjohnwu.magisk.model.entity.recycler.TextItem
import
com.topjohnwu.magisk.model.entity.recycler.TextItem
...
@@ -19,12 +20,11 @@ import com.topjohnwu.magisk.model.events.SnackbarEvent
...
@@ -19,12 +20,11 @@ import com.topjohnwu.magisk.model.events.SnackbarEvent
import
com.topjohnwu.magisk.model.events.dialog.BiometricDialog
import
com.topjohnwu.magisk.model.events.dialog.BiometricDialog
import
com.topjohnwu.magisk.model.events.dialog.SuperuserRevokeDialog
import
com.topjohnwu.magisk.model.events.dialog.SuperuserRevokeDialog
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.model.navigation.Navigation
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.ui.base.BaseViewModel
import
com.topjohnwu.magisk.ui.compat.adapterOf
import
com.topjohnwu.magisk.ui.base.adapterOf
import
com.topjohnwu.magisk.ui.compat.diffListOf
import
com.topjohnwu.magisk.ui.base.diffListOf
import
com.topjohnwu.magisk.ui.compat.itemBindingOf
import
com.topjohnwu.magisk.ui.base.itemBindingOf
import
com.topjohnwu.magisk.utils.BiometricHelper
import
com.topjohnwu.magisk.core.utils.BiometricHelper
import
com.topjohnwu.magisk.utils.currentLocale
import
io.reactivex.Single
import
io.reactivex.Single
import
me.tatarka.bindingcollectionadapter2.collections.MergeObservableList
import
me.tatarka.bindingcollectionadapter2.collections.MergeObservableList
...
...
app/src/main/java/com/topjohnwu/magisk/ui/theme/Theme.kt
View file @
707d7b33
package
com.topjohnwu.magisk.ui.theme
package
com.topjohnwu.magisk.ui.theme
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.core.Config
enum
class
Theme
(
enum
class
Theme
(
val
themeName
:
String
,
val
themeName
:
String
,
...
...
app/src/main/java/com/topjohnwu/magisk/ui/theme/ThemeFragment.kt
View file @
707d7b33
...
@@ -3,7 +3,7 @@ package com.topjohnwu.magisk.ui.theme
...
@@ -3,7 +3,7 @@ package com.topjohnwu.magisk.ui.theme
import
androidx.core.graphics.Insets
import
androidx.core.graphics.Insets
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.FragmentThemeMd2Binding
import
com.topjohnwu.magisk.databinding.FragmentThemeMd2Binding
import
com.topjohnwu.magisk.ui.
compat
.CompatFragment
import
com.topjohnwu.magisk.ui.
base
.CompatFragment
import
org.koin.androidx.viewmodel.ext.android.viewModel
import
org.koin.androidx.viewmodel.ext.android.viewModel
class
ThemeFragment
:
CompatFragment
<
ThemeViewModel
,
FragmentThemeMd2Binding
>()
{
class
ThemeFragment
:
CompatFragment
<
ThemeViewModel
,
FragmentThemeMd2Binding
>()
{
...
...
app/src/main/java/com/topjohnwu/magisk/ui/theme/ThemeViewModel.kt
View file @
707d7b33
...
@@ -3,7 +3,7 @@ package com.topjohnwu.magisk.ui.theme
...
@@ -3,7 +3,7 @@ package com.topjohnwu.magisk.ui.theme
import
com.topjohnwu.magisk.model.entity.recycler.TappableHeadlineItem
import
com.topjohnwu.magisk.model.entity.recycler.TappableHeadlineItem
import
com.topjohnwu.magisk.model.events.RecreateEvent
import
com.topjohnwu.magisk.model.events.RecreateEvent
import
com.topjohnwu.magisk.model.events.dialog.DarkThemeDialog
import
com.topjohnwu.magisk.model.events.dialog.DarkThemeDialog
import
com.topjohnwu.magisk.base.BaseViewModel
import
com.topjohnwu.magisk.
ui.
base.BaseViewModel
class
ThemeViewModel
:
BaseViewModel
(),
TappableHeadlineItem
.
Listener
{
class
ThemeViewModel
:
BaseViewModel
(),
TappableHeadlineItem
.
Listener
{
...
...
app/src/main/java/com/topjohnwu/magisk/utils/MotionRevealHelper.kt
View file @
707d7b33
...
@@ -14,6 +14,7 @@ import androidx.interpolator.view.animation.FastOutSlowInInterpolator
...
@@ -14,6 +14,7 @@ import androidx.interpolator.view.animation.FastOutSlowInInterpolator
import
com.google.android.material.circularreveal.CircularRevealCompat
import
com.google.android.material.circularreveal.CircularRevealCompat
import
com.google.android.material.circularreveal.CircularRevealWidget
import
com.google.android.material.circularreveal.CircularRevealWidget
import
com.google.android.material.floatingactionbutton.FloatingActionButton
import
com.google.android.material.floatingactionbutton.FloatingActionButton
import
com.topjohnwu.magisk.core.utils.currentLocale
import
kotlin.math.hypot
import
kotlin.math.hypot
object
MotionRevealHelper
{
object
MotionRevealHelper
{
...
...
app/src/main/java/com/topjohnwu/magisk/utils/PinchZoomTouchListener.kt
View file @
707d7b33
...
@@ -8,7 +8,7 @@ import androidx.recyclerview.widget.GridLayoutManager
...
@@ -8,7 +8,7 @@ import androidx.recyclerview.widget.GridLayoutManager
import
androidx.recyclerview.widget.RecyclerView
import
androidx.recyclerview.widget.RecyclerView
import
androidx.recyclerview.widget.StaggeredGridLayoutManager
import
androidx.recyclerview.widget.StaggeredGridLayoutManager
import
androidx.transition.TransitionManager
import
androidx.transition.TransitionManager
import
com.topjohnwu.magisk.Config
import
com.topjohnwu.magisk.
core.
Config
import
kotlin.math.max
import
kotlin.math.max
import
kotlin.math.min
import
kotlin.math.min
...
...
app/src/main/java/com/topjohnwu/magisk/view/MagiskDialog.kt
View file @
707d7b33
...
@@ -22,7 +22,7 @@ import com.topjohnwu.magisk.BR
...
@@ -22,7 +22,7 @@ import com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.R
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.databinding.ComparableRvItem
import
com.topjohnwu.magisk.databinding.DialogMagiskBaseBinding
import
com.topjohnwu.magisk.databinding.DialogMagiskBaseBinding
import
com.topjohnwu.magisk.ui.
compat
.itemBindingOf
import
com.topjohnwu.magisk.ui.
base
.itemBindingOf
import
com.topjohnwu.magisk.utils.KObservableField
import
com.topjohnwu.magisk.utils.KObservableField
import
me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapters
import
me.tatarka.bindingcollectionadapter2.BindingRecyclerViewAdapters
import
me.tatarka.bindingcollectionadapter2.ItemBinding
import
me.tatarka.bindingcollectionadapter2.ItemBinding
...
...
app/src/main/res/layout/fragment_home_md2.xml
View file @
707d7b33
...
@@ -9,11 +9,11 @@
...
@@ -9,11 +9,11 @@
<import
type=
"com.topjohnwu.magisk.R"
/>
<import
type=
"com.topjohnwu.magisk.R"
/>
<import
type=
"com.topjohnwu.magisk.Info"
/>
<import
type=
"com.topjohnwu.magisk.
core.
Info"
/>
<import
type=
"com.topjohnwu.magisk.InfoKt"
/>
<import
type=
"com.topjohnwu.magisk.
core.
InfoKt"
/>
<import
type=
"com.topjohnwu.magisk.Config"
/>
<import
type=
"com.topjohnwu.magisk.
core.
Config"
/>
<import
type=
"com.topjohnwu.magisk.BuildConfig"
/>
<import
type=
"com.topjohnwu.magisk.BuildConfig"
/>
...
...
app/src/main/res/layout/fragment_module_md2.xml
View file @
707d7b33
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
<import
type=
"com.topjohnwu.magisk.R"
/>
<import
type=
"com.topjohnwu.magisk.R"
/>
<import
type=
"com.topjohnwu.magisk.Config"
/>
<import
type=
"com.topjohnwu.magisk.
core.
Config"
/>
<variable
<variable
name=
"viewModel"
name=
"viewModel"
...
...
app/src/main/res/layout/fragment_safetynet_md2.xml
View file @
707d7b33
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
<data>
<data>
<import
type=
"android.os.Build"
/>
<import
type=
"android.os.Build"
/>
<import
type=
"com.topjohnwu.magisk.Info"
/>
<import
type=
"com.topjohnwu.magisk.
core.
Info"
/>
<import
type=
"com.topjohnwu.magisk.BuildConfig"
/>
<import
type=
"com.topjohnwu.magisk.BuildConfig"
/>
...
...
app/src/main/res/layout/include_install_options.xml
View file @
707d7b33
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
<data>
<data>
<import
type=
"com.topjohnwu.magisk.Info"
/>
<import
type=
"com.topjohnwu.magisk.
core.
Info"
/>
</data>
</data>
...
...
app/src/main/res/layout/item_module_md2.xml
View file @
707d7b33
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
<import
type=
"com.topjohnwu.magisk.R"
/>
<import
type=
"com.topjohnwu.magisk.R"
/>
<import
type=
"com.topjohnwu.magisk.Config"
/>
<import
type=
"com.topjohnwu.magisk.
core.
Config"
/>
<variable
<variable
name=
"item"
name=
"item"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment