Add option to show OS apps

This commit is contained in:
vvb2060 2020-10-16 17:23:49 +08:00 committed by topjohnwu
parent 5833aadef5
commit 468796c23d
3 changed files with 33 additions and 10 deletions

View File

@ -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
@ -32,6 +33,12 @@ class HideViewModel : BaseViewModel(), Queryable {
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) {
@ -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 {
) } ) }
} }
} }

View File

@ -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"

View File

@ -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>