Add option to show OS apps
This commit is contained in:
parent
5833aadef5
commit
468796c23d
@ -1,5 +1,6 @@
|
|||||||
package com.topjohnwu.magisk.ui.hide
|
package com.topjohnwu.magisk.ui.hide
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
import android.content.pm.ApplicationInfo
|
import android.content.pm.ApplicationInfo
|
||||||
import android.content.pm.PackageManager
|
import android.content.pm.PackageManager
|
||||||
import androidx.databinding.Bindable
|
import androidx.databinding.Bindable
|
||||||
@ -27,14 +28,20 @@ class HideViewModel : BaseViewModel(), Queryable {
|
|||||||
|
|
||||||
@get:Bindable
|
@get:Bindable
|
||||||
var isShowSystem = Config.showSystemApp
|
var isShowSystem = Config.showSystemApp
|
||||||
set(value) = set(value, field, { field = it }, BR.showSystem){
|
set(value) = set(value, field, { field = it }, BR.showSystem) {
|
||||||
Config.showSystemApp = it
|
Config.showSystemApp = it
|
||||||
submitQuery()
|
submitQuery()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@get:Bindable
|
||||||
|
var isShowOS = false
|
||||||
|
set(value) = set(value, field, { field = it }, BR.showOS) {
|
||||||
|
submitQuery()
|
||||||
|
}
|
||||||
|
|
||||||
@get:Bindable
|
@get:Bindable
|
||||||
var query = ""
|
var query = ""
|
||||||
set(value) = set(value, field, { field = it }, BR.query){
|
set(value) = set(value, field, { field = it }, BR.query) {
|
||||||
submitQuery()
|
submitQuery()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,6 +53,7 @@ class HideViewModel : BaseViewModel(), Queryable {
|
|||||||
it.bindExtra(BR.viewModel, this)
|
it.bindExtra(BR.viewModel, this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressLint("InlinedApi")
|
||||||
override fun refresh() = viewModelScope.launch {
|
override fun refresh() = viewModelScope.launch {
|
||||||
if (!Utils.showSuperUser()) {
|
if (!Utils.showSuperUser()) {
|
||||||
state = State.LOADING_FAILED
|
state = State.LOADING_FAILED
|
||||||
@ -55,9 +63,9 @@ class HideViewModel : BaseViewModel(), Queryable {
|
|||||||
val (apps, diff) = withContext(Dispatchers.Default) {
|
val (apps, diff) = withContext(Dispatchers.Default) {
|
||||||
val pm = get<PackageManager>()
|
val pm = get<PackageManager>()
|
||||||
val hides = Shell.su("magiskhide --ls").exec().out.map { HideTarget(it) }
|
val hides = Shell.su("magiskhide --ls").exec().out.map { HideTarget(it) }
|
||||||
val apps = pm.getInstalledApplications(0)
|
val apps = pm.getInstalledApplications(PackageManager.MATCH_UNINSTALLED_PACKAGES)
|
||||||
.asSequence()
|
.asSequence()
|
||||||
.filter { it.enabled && it.uid >= 10000 && !blacklist.contains(it.packageName) }
|
.filter { it.enabled && !blacklist.contains(it.packageName) }
|
||||||
.map { HideAppInfo(it, pm) }
|
.map { HideAppInfo(it, pm) }
|
||||||
.map { createTarget(it, hides) }
|
.map { createTarget(it, hides) }
|
||||||
.filter { it.processes.isNotEmpty() }
|
.filter { it.processes.isNotEmpty() }
|
||||||
@ -88,8 +96,9 @@ class HideViewModel : BaseViewModel(), Queryable {
|
|||||||
items.filter {
|
items.filter {
|
||||||
fun showHidden() = it.itemsChecked != 0
|
fun showHidden() = it.itemsChecked != 0
|
||||||
|
|
||||||
fun filterSystem() =
|
fun filterSystem() = isShowSystem || it.info.flags and ApplicationInfo.FLAG_SYSTEM == 0
|
||||||
isShowSystem || it.info.flags and ApplicationInfo.FLAG_SYSTEM == 0
|
|
||||||
|
fun filterOS() = (isShowSystem && isShowOS) || it.info.uid >= 10000
|
||||||
|
|
||||||
fun filterQuery(): Boolean {
|
fun filterQuery(): Boolean {
|
||||||
fun inName() = it.info.label.contains(query, true)
|
fun inName() = it.info.label.contains(query, true)
|
||||||
@ -98,7 +107,7 @@ class HideViewModel : BaseViewModel(), Queryable {
|
|||||||
return inName() || inPackage() || inProcesses()
|
return inName() || inPackage() || inProcesses()
|
||||||
}
|
}
|
||||||
|
|
||||||
showHidden() || (filterSystem() && filterQuery())
|
showHidden() || (filterSystem() && filterOS() && filterQuery())
|
||||||
}
|
}
|
||||||
state = State.LOADED
|
state = State.LOADED
|
||||||
}
|
}
|
||||||
@ -121,4 +130,3 @@ class HideViewModel : BaseViewModel(), Queryable {
|
|||||||
) }
|
) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@
|
|||||||
app:layout_constraintTop_toBottomOf="@+id/hide_filter_title_filter">
|
app:layout_constraintTop_toBottomOf="@+id/hide_filter_title_filter">
|
||||||
|
|
||||||
<com.google.android.material.chip.Chip
|
<com.google.android.material.chip.Chip
|
||||||
android:id="@+id/hide_filter_chip"
|
android:id="@+id/hide_filter_system_chip"
|
||||||
style="@style/Widget.MaterialComponents.Chip.Filter"
|
style="@style/Widget.MaterialComponents.Chip.Filter"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
@ -60,6 +60,20 @@
|
|||||||
app:chipBackgroundColor="?colorSurfaceVariant"
|
app:chipBackgroundColor="?colorSurfaceVariant"
|
||||||
tools:checked="true" />
|
tools:checked="true" />
|
||||||
|
|
||||||
|
<com.google.android.material.chip.Chip
|
||||||
|
android:id="@+id/hide_filter_os_chip"
|
||||||
|
style="@style/Widget.MaterialComponents.Chip.Filter"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:checked="@={viewModel.showOS}"
|
||||||
|
android:nextFocusRight="@id/hide_filter_chip_data"
|
||||||
|
android:nextFocusDown="@id/hide_filter_search_field"
|
||||||
|
android:text="@string/show_os_app"
|
||||||
|
android:textAppearance="@style/AppearanceFoundation.Caption"
|
||||||
|
app:checkedIcon="@drawable/ic_check_md2"
|
||||||
|
app:chipBackgroundColor="?colorSurfaceVariant"
|
||||||
|
tools:checked="true" />
|
||||||
|
|
||||||
<com.google.android.material.chip.Chip
|
<com.google.android.material.chip.Chip
|
||||||
android:id="@+id/hide_filter_chip_data"
|
android:id="@+id/hide_filter_chip_data"
|
||||||
style="@style/Widget.MaterialComponents.Chip.Entry"
|
style="@style/Widget.MaterialComponents.Chip.Entry"
|
||||||
@ -136,7 +150,7 @@
|
|||||||
android:id="@+id/hide_filter_done"
|
android:id="@+id/hide_filter_done"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:nextFocusLeft="@id/hide_filter_chip"
|
android:nextFocusLeft="@id/hide_filter_system_chip"
|
||||||
app:backgroundTint="?colorPrimary"
|
app:backgroundTint="?colorPrimary"
|
||||||
app:elevation="0dp"
|
app:elevation="0dp"
|
||||||
app:fabSize="mini"
|
app:fabSize="mini"
|
||||||
|
@ -102,6 +102,7 @@
|
|||||||
|
|
||||||
<!-- MagiskHide -->
|
<!-- MagiskHide -->
|
||||||
<string name="show_system_app">Show system apps</string>
|
<string name="show_system_app">Show system apps</string>
|
||||||
|
<string name="show_os_app">Show OS apps</string>
|
||||||
<string name="hide_filter_hint">Filter by name</string>
|
<string name="hide_filter_hint">Filter by name</string>
|
||||||
<string name="hide_scroll_up">Scroll up</string>
|
<string name="hide_scroll_up">Scroll up</string>
|
||||||
<string name="hide_filters">Filters</string>
|
<string name="hide_filters">Filters</string>
|
||||||
|
Loading…
Reference in New Issue
Block a user