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
21be2f46
Commit
21be2f46
authored
May 09, 2019
by
Viktor De Pasquale
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Moved fetch/toggle logic for hiding to repo
Fixed sorting
parent
a6e76802
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
62 additions
and
47 deletions
+62
-47
MagiskRepository.kt
.../com/topjohnwu/magisk/data/repository/MagiskRepository.kt
+46
-1
RepositoryModule.kt
...src/main/java/com/topjohnwu/magisk/di/RepositoryModule.kt
+1
-1
HideViewModel.kt
...c/main/java/com/topjohnwu/magisk/ui/hide/HideViewModel.kt
+15
-45
No files found.
app/src/main/java/com/topjohnwu/magisk/data/repository/MagiskRepository.kt
View file @
21be2f46
package
com.topjohnwu.magisk.data.repository
package
com.topjohnwu.magisk.data.repository
import
android.content.Context
import
android.content.Context
import
android.content.pm.PackageManager
import
com.topjohnwu.magisk.App
import
com.topjohnwu.magisk.KConfig
import
com.topjohnwu.magisk.KConfig
import
com.topjohnwu.magisk.data.database.base.su
import
com.topjohnwu.magisk.data.database.base.suRaw
import
com.topjohnwu.magisk.data.database.base.suRaw
import
com.topjohnwu.magisk.data.network.GithubRawApiServices
import
com.topjohnwu.magisk.data.network.GithubRawApiServices
import
com.topjohnwu.magisk.model.entity.HideAppInfo
import
com.topjohnwu.magisk.model.entity.HideTarget
import
com.topjohnwu.magisk.model.entity.Version
import
com.topjohnwu.magisk.model.entity.Version
import
com.topjohnwu.magisk.utils.Utils
import
com.topjohnwu.magisk.utils.inject
import
com.topjohnwu.magisk.utils.toSingle
import
com.topjohnwu.magisk.utils.writeToFile
import
com.topjohnwu.magisk.utils.writeToFile
import
com.topjohnwu.superuser.Shell
import
io.reactivex.Single
import
io.reactivex.Single
import
io.reactivex.functions.BiFunction
import
io.reactivex.functions.BiFunction
class
MagiskRepository
(
class
MagiskRepository
(
private
val
context
:
Context
,
private
val
context
:
Context
,
private
val
apiRaw
:
GithubRawApiServices
private
val
apiRaw
:
GithubRawApiServices
,
private
val
packageManager
:
PackageManager
)
{
)
{
private
val
config
=
apiRaw
.
fetchConfig
()
private
val
config
=
apiRaw
.
fetchConfig
()
...
@@ -57,6 +67,25 @@ class MagiskRepository(
...
@@ -57,6 +67,25 @@ class MagiskRepository(
}
}
)
)
fun
fetchApps
()
=
Single
.
fromCallable
{
packageManager
.
getInstalledApplications
(
0
)
}
.
flattenAsFlowable
{
it
}
.
filter
{
it
.
enabled
&&
!
blacklist
.
contains
(
it
.
packageName
)
}
.
map
{
val
label
=
Utils
.
getAppLabel
(
it
,
packageManager
)
val
icon
=
it
.
loadIcon
(
packageManager
)
HideAppInfo
(
it
,
label
,
icon
)
}
.
filter
{
it
.
processes
.
isNotEmpty
()
}
.
toList
()
fun
fetchHideTargets
()
=
Shell
.
su
(
"magiskhide --ls"
).
toSingle
()
.
map
{
it
.
exec
().
out
}
.
flattenAsFlowable
{
it
}
.
map
{
HideTarget
(
it
)
}
.
toList
()
private
fun
fetchMagiskVersionName
()
=
"magisk -v"
.
suRaw
()
private
fun
fetchMagiskVersionName
()
=
"magisk -v"
.
suRaw
()
.
map
{
it
.
first
()
}
.
map
{
it
.
first
()
}
.
map
{
it
.
substring
(
0
until
it
.
indexOf
(
":"
))
}
.
map
{
it
.
substring
(
0
until
it
.
indexOf
(
":"
))
}
...
@@ -67,12 +96,28 @@ class MagiskRepository(
...
@@ -67,12 +96,28 @@ class MagiskRepository(
.
map
{
it
.
toIntOrNull
()
?:
-
1
}
.
map
{
it
.
toIntOrNull
()
?:
-
1
}
.
onErrorReturn
{
-
1
}
.
onErrorReturn
{
-
1
}
fun
toggleHide
(
isEnabled
:
Boolean
,
packageName
:
String
,
process
:
String
)
=
"magiskhide --%s %s %s"
.
format
(
isEnabled
.
state
,
packageName
,
process
).
su
().
ignoreElement
()
private
val
Boolean
.
state
get
()
=
if
(
this
)
"add"
else
"rm"
companion
object
{
companion
object
{
const
val
FILE_MAGISK_ZIP
=
"magisk.zip"
const
val
FILE_MAGISK_ZIP
=
"magisk.zip"
const
val
FILE_MAGISK_APK
=
"magisk.apk"
const
val
FILE_MAGISK_APK
=
"magisk.apk"
const
val
FILE_UNINSTALLER_ZIP
=
"uninstaller.zip"
const
val
FILE_UNINSTALLER_ZIP
=
"uninstaller.zip"
const
val
FILE_SAFETY_NET_APK
=
"safetynet.apk"
const
val
FILE_SAFETY_NET_APK
=
"safetynet.apk"
const
val
FILE_BOOTCTL_SH
=
"bootctl"
const
val
FILE_BOOTCTL_SH
=
"bootctl"
private
val
blacklist
=
listOf
(
let
{
val
app
:
App
by
inject
();
app
}.
packageName
,
"android"
,
"com.android.chrome"
,
"com.chrome.beta"
,
"com.chrome.dev"
,
"com.chrome.canary"
,
"com.android.webview"
,
"com.google.android.webview"
)
}
}
}
}
\ No newline at end of file
app/src/main/java/com/topjohnwu/magisk/di/RepositoryModule.kt
View file @
21be2f46
...
@@ -7,7 +7,7 @@ import org.koin.dsl.module
...
@@ -7,7 +7,7 @@ import org.koin.dsl.module
val
repositoryModule
=
module
{
val
repositoryModule
=
module
{
single
{
MagiskRepository
(
get
(),
get
())
}
single
{
MagiskRepository
(
get
(),
get
()
,
get
()
)
}
single
{
ModuleRepository
(
get
(),
get
(),
get
(),
get
())
}
single
{
ModuleRepository
(
get
(),
get
(),
get
(),
get
())
}
single
{
LogRepository
(
get
())
}
single
{
LogRepository
(
get
())
}
}
}
app/src/main/java/com/topjohnwu/magisk/ui/hide/HideViewModel.kt
View file @
21be2f46
package
com.topjohnwu.magisk.ui.hide
package
com.topjohnwu.magisk.ui.hide
import
android.content.pm.ApplicationInfo
import
android.content.pm.ApplicationInfo
import
android.content.pm.PackageManager
import
com.skoumal.teanity.databinding.ComparableRvItem
import
com.skoumal.teanity.databinding.ComparableRvItem
import
com.skoumal.teanity.extensions.addOnPropertyChangedCallback
import
com.skoumal.teanity.extensions.addOnPropertyChangedCallback
import
com.skoumal.teanity.extensions.subscribeK
import
com.skoumal.teanity.extensions.subscribeK
import
com.skoumal.teanity.rxbus.RxBus
import
com.skoumal.teanity.rxbus.RxBus
import
com.skoumal.teanity.util.DiffObservableList
import
com.skoumal.teanity.util.DiffObservableList
import
com.skoumal.teanity.util.KObservableField
import
com.skoumal.teanity.util.KObservableField
import
com.topjohnwu.magisk.App
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.BR
import
com.topjohnwu.magisk.model.entity.HideAppInfo
import
com.topjohnwu.magisk.data.repository.MagiskRepository
import
com.topjohnwu.magisk.model.entity.HideTarget
import
com.topjohnwu.magisk.model.entity.recycler.HideProcessRvItem
import
com.topjohnwu.magisk.model.entity.recycler.HideProcessRvItem
import
com.topjohnwu.magisk.model.entity.recycler.HideRvItem
import
com.topjohnwu.magisk.model.entity.recycler.HideRvItem
import
com.topjohnwu.magisk.model.entity.state.IndeterminateState
import
com.topjohnwu.magisk.model.entity.state.IndeterminateState
import
com.topjohnwu.magisk.model.events.HideProcessEvent
import
com.topjohnwu.magisk.model.events.HideProcessEvent
import
com.topjohnwu.magisk.ui.base.MagiskViewModel
import
com.topjohnwu.magisk.ui.base.MagiskViewModel
import
com.topjohnwu.magisk.utils.Utils
import
com.topjohnwu.magisk.utils.toSingle
import
com.topjohnwu.magisk.utils.toSingle
import
com.topjohnwu.magisk.utils.update
import
com.topjohnwu.magisk.utils.update
import
com.topjohnwu.superuser.Shell
import
io.reactivex.Single
import
me.tatarka.bindingcollectionadapter2.OnItemBind
import
me.tatarka.bindingcollectionadapter2.OnItemBind
import
timber.log.Timber
import
timber.log.Timber
class
HideViewModel
(
class
HideViewModel
(
private
val
packageManager
:
PackageManager
,
private
val
magiskRepo
:
MagiskRepository
,
rxBus
:
RxBus
rxBus
:
RxBus
)
:
MagiskViewModel
()
{
)
:
MagiskViewModel
()
{
...
@@ -55,26 +49,19 @@ class HideViewModel(
...
@@ -55,26 +49,19 @@ class HideViewModel(
// fetching this for every item is nonsensical, so we add .cache() so the response is all
// fetching this for every item is nonsensical, so we add .cache() so the response is all
// the same for every single mapped item, it only actually executes the whole thing the
// the same for every single mapped item, it only actually executes the whole thing the
// first time around.
// first time around.
val
hideTargets
=
Shell
.
su
(
"magiskhide --ls"
).
toSingle
()
val
hideTargets
=
magiskRepo
.
fetchHideTargets
().
cache
()
.
map
{
it
.
exec
().
out
}
.
flattenAsFlowable
{
it
}
.
map
{
HideTarget
(
it
)
}
.
toList
()
.
cache
()
Single
.
fromCallable
{
packageManager
.
getInstalledApplications
(
0
)
}
magiskRepo
.
fetchApps
()
.
flattenAsFlowable
{
it
}
.
flattenAsFlowable
{
it
}
.
filter
{
it
.
enabled
&&
!
blacklist
.
contains
(
it
.
packageName
)
}
.
map
{
val
label
=
Utils
.
getAppLabel
(
it
,
packageManager
)
val
icon
=
it
.
loadIcon
(
packageManager
)
HideAppInfo
(
it
,
label
,
icon
)
}
.
filter
{
it
.
processes
.
isNotEmpty
()
}
.
map
{
HideRvItem
(
it
,
hideTargets
.
blockingGet
())
}
.
map
{
HideRvItem
(
it
,
hideTargets
.
blockingGet
())
}
.
toList
()
.
toList
()
.
map
{
it
.
sortWith
(
compareBy
(
.
map
{
{
it
.
isHiddenState
.
value
},
{
it
.
item
.
info
.
name
},
{
it
.
packageName
}));
it
}
it
.
sortedWith
(
compareBy
(
{
it
.
isHiddenState
.
value
},
{
it
.
item
.
name
.
toLowerCase
()
},
{
it
.
packageName
}
))
}
.
doOnSuccess
{
allItems
.
update
(
it
)
}
.
doOnSuccess
{
allItems
.
update
(
it
)
}
.
flatMap
{
queryRaw
()
}
.
flatMap
{
queryRaw
()
}
.
applyViewModel
(
this
)
.
applyViewModel
(
this
)
...
@@ -103,26 +90,9 @@ class HideViewModel(
...
@@ -103,26 +90,9 @@ class HideViewModel(
.
toList
()
.
toList
()
.
map
{
it
to
items
.
calculateDiff
(
it
)
}
.
map
{
it
to
items
.
calculateDiff
(
it
)
}
private
fun
toggleItem
(
item
:
HideProcessRvItem
)
{
private
fun
toggleItem
(
item
:
HideProcessRvItem
)
=
magiskRepo
val
state
=
if
(
item
.
isHidden
.
value
)
"add"
else
"rm"
.
toggleHide
(
item
.
isHidden
.
value
,
item
.
packageName
,
item
.
process
)
"magiskhide --%s %s %s"
.
format
(
state
,
item
.
packageName
,
item
.
process
)
.
subscribeK
()
.
let
{
Shell
.
su
(
it
)
}
.
add
()
.
toSingle
()
.
map
{
it
.
submit
()
}
.
subscribeK
()
}
companion
object
{
private
val
blacklist
=
listOf
(
App
.
self
.
packageName
,
"android"
,
"com.android.chrome"
,
"com.chrome.beta"
,
"com.chrome.dev"
,
"com.chrome.canary"
,
"com.android.webview"
,
"com.google.android.webview"
)
}
}
}
\ No newline at end of file
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