Skip to content

Commit 65b0ea7

Browse files
committedSep 13, 2021
MagiskHide is no more
1 parent fc6b02f commit 65b0ea7

File tree

79 files changed

+433
-486
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

79 files changed

+433
-486
lines changed
 

‎app/src/main/java/com/topjohnwu/magisk/core/Config.kt‎

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,6 @@ object Config : PreferenceModel, DBConfig {
5959
const val BOOT_ID = "boot_id"
6060
const val ASKED_HOME = "asked_home"
6161
const val DOH = "doh"
62-
63-
// system state
64-
const val MAGISKHIDE = "magiskhide"
6562
}
6663

6764
object Value {
@@ -133,7 +130,6 @@ object Config : PreferenceModel, DBConfig {
133130
var suTapjack by preference(Key.SU_TAPJACK, true)
134131
var checkUpdate by preference(Key.CHECK_UPDATES, true)
135132
var doh by preference(Key.DOH, false)
136-
var magiskHide by preference(Key.MAGISKHIDE, true)
137133
var showSystemApp by preference(Key.SHOW_SYSTEM_APP, false)
138134

139135
var customChannelUrl by preference(Key.CUSTOM_CHANNEL, "")

‎app/src/main/java/com/topjohnwu/magisk/core/Const.kt‎

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,17 @@ object Const {
2727

2828
// Misc
2929
val USER_ID = Process.myUid() / 100000
30+
val APP_IS_CANARY get() = Version.isCanary(BuildConfig.VERSION_CODE)
3031

3132
object Version {
3233
const val MIN_VERSION = "v20.4"
3334
const val MIN_VERCODE = 20400
3435

3536
fun atLeast_21_0() = Info.env.magiskVersionCode >= 21000 || isCanary()
3637
fun atLeast_21_2() = Info.env.magiskVersionCode >= 21200 || isCanary()
37-
fun isCanary() = Info.env.magiskVersionCode % 100 != 0
38+
fun isCanary() = isCanary(Info.env.magiskVersionCode)
39+
40+
fun isCanary(ver: Int) = ver > 0 && ver % 100 != 0
3841
}
3942

4043
object ID {
@@ -49,7 +52,7 @@ object Const {
4952
const val PATREON_URL = "https://www.patreon.com/topjohnwu"
5053
const val SOURCE_CODE_URL = "https://github.com/topjohnwu/Magisk"
5154

52-
val CHANGELOG_URL = if (BuildConfig.VERSION_CODE % 100 != 0) Info.remote.magisk.note
55+
val CHANGELOG_URL = if (APP_IS_CANARY) Info.remote.magisk.note
5356
else "https://topjohnwu.github.io/Magisk/releases/${BuildConfig.VERSION_CODE}.md"
5457

5558
const val GITHUB_RAW_URL = "https://raw.githubusercontent.com/"
@@ -76,7 +79,6 @@ object Const {
7679
object Nav {
7780
const val HOME = "home"
7881
const val SETTINGS = "settings"
79-
const val HIDE = "hide"
8082
const val MODULES = "modules"
8183
const val SUPERUSER = "superuser"
8284
}

‎app/src/main/java/com/topjohnwu/magisk/core/Info.kt‎

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -51,25 +51,22 @@ object Info {
5151

5252
private fun loadState() = Env(
5353
fastCmd("magisk -v").split(":".toRegex())[0],
54-
runCatching { fastCmd("magisk -V").toInt() }.getOrDefault(-1),
55-
Shell.su("magiskhide status").exec().isSuccess
54+
runCatching { fastCmd("magisk -V").toInt() }.getOrDefault(-1)
5655
)
5756

5857
class Env(
5958
val magiskVersionString: String = "",
60-
code: Int = -1,
61-
hide: Boolean = false
59+
code: Int = -1
6260
) {
63-
val magiskHide get() = Config.magiskHide
6461
val magiskVersionCode = when {
6562
code < Const.Version.MIN_VERCODE -> -1
6663
else -> if (Shell.rootAccess()) code else -1
6764
}
6865
val isUnsupported = code > 0 && code < Const.Version.MIN_VERCODE
6966
val isActive = magiskVersionCode >= 0
70-
71-
init {
72-
Config.magiskHide = hide
73-
}
67+
var denyListEnforced = if (Const.Version.isCanary(code))
68+
Shell.su("magisk --denylist status").exec().isSuccess
69+
else
70+
false
7471
}
7572
}

‎app/src/main/java/com/topjohnwu/magisk/core/Receiver.kt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ open class Receiver : BaseReceiver() {
4242
getUid(intent)?.let { rmPolicy(it) }
4343
}
4444
Intent.ACTION_PACKAGE_FULLY_REMOVED -> {
45-
getPkg(intent)?.let { Shell.su("magiskhide rm $it").submit() }
45+
getPkg(intent)?.let { Shell.su("magisk --denylist rm $it").submit() }
4646
}
4747
Intent.ACTION_LOCALE_CHANGED -> Shortcuts.setupDynamic(context)
4848
}

‎app/src/main/java/com/topjohnwu/magisk/ui/MainActivity.kt‎

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ open class MainActivity : BaseUIActivity<MainViewModel, ActivityMainMd2Binding>(
6060
R.id.homeFragment,
6161
R.id.modulesFragment,
6262
R.id.superuserFragment,
63-
R.id.hideFragment,
63+
R.id.denyFragment,
6464
R.id.logFragment -> true
6565
else -> false
6666
}
@@ -170,7 +170,6 @@ open class MainActivity : BaseUIActivity<MainViewModel, ActivityMainMd2Binding>(
170170
private fun getScreen(name: String?): NavDirections? {
171171
return when (name) {
172172
Const.Nav.SUPERUSER -> MainDirections.actionSuperuserFragment()
173-
Const.Nav.HIDE -> MainDirections.actionHideFragment()
174173
Const.Nav.MODULES -> MainDirections.actionModuleFragment()
175174
Const.Nav.SETTINGS -> HomeFragmentDirections.actionHomeFragmentToSettingsFragment()
176175
else -> null
@@ -183,7 +182,7 @@ open class MainActivity : BaseUIActivity<MainViewModel, ActivityMainMd2Binding>(
183182
R.id.modulesFragment -> MainDirections.actionModuleFragment()
184183
R.id.superuserFragment -> MainDirections.actionSuperuserFragment()
185184
R.id.logFragment -> MainDirections.actionLogFragment()
186-
R.id.hideFragment -> MainDirections.actionHideFragment()
185+
R.id.denyFragment -> MainDirections.actionDenylistFragment()
187186
else -> null
188187
}
189188
}

app/src/main/java/com/topjohnwu/magisk/ui/hide/HideInfo.kt renamed to app/src/main/java/com/topjohnwu/magisk/ui/deny/AppProcessInfo.kt

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.topjohnwu.magisk.ui.hide
1+
package com.topjohnwu.magisk.ui.deny
22

33
import android.annotation.SuppressLint
44
import android.content.pm.ApplicationInfo
@@ -13,7 +13,7 @@ import com.topjohnwu.magisk.ktx.getLabel
1313
import com.topjohnwu.magisk.ktx.isIsolated
1414
import com.topjohnwu.magisk.ktx.useAppZygote
1515

16-
class CmdlineHiddenItem(line: String) {
16+
class CmdlineListItem(line: String) {
1717
val packageName: String
1818
val process: String
1919

@@ -27,19 +27,19 @@ class CmdlineHiddenItem(line: String) {
2727
const val ISOLATED_MAGIC = "isolated"
2828

2929
@SuppressLint("InlinedApi")
30-
class HideAppInfo(info: ApplicationInfo, pm: PackageManager, hideList: List<CmdlineHiddenItem>)
31-
: ApplicationInfo(info), Comparable<HideAppInfo> {
30+
class AppProcessInfo(info: ApplicationInfo, pm: PackageManager, denyList: List<CmdlineListItem>)
31+
: ApplicationInfo(info), Comparable<AppProcessInfo> {
3232

3333
val label = info.getLabel(pm)
3434
val iconImage: Drawable = info.loadIcon(pm)
35-
val processes = fetchProcesses(pm, hideList)
35+
val processes = fetchProcesses(pm, denyList)
3636

37-
override fun compareTo(other: HideAppInfo) = comparator.compare(this, other)
37+
override fun compareTo(other: AppProcessInfo) = comparator.compare(this, other)
3838

3939
private fun fetchProcesses(
4040
pm: PackageManager,
41-
hideList: List<CmdlineHiddenItem>
42-
): List<HideProcessInfo> {
41+
denylist: List<CmdlineListItem>
42+
): List<ProcessInfo> {
4343
// Fetch full PackageInfo
4444
val baseFlag = MATCH_DISABLED_COMPONENTS or MATCH_UNINSTALLED_PACKAGES
4545
val packageInfo = try {
@@ -58,9 +58,9 @@ class HideAppInfo(info: ApplicationInfo, pm: PackageManager, hideList: List<Cmdl
5858
}
5959
}
6060

61-
val hidden = hideList.filter { it.packageName == packageName || it.packageName == ISOLATED_MAGIC }
62-
fun createProcess(name: String, pkg: String = packageName): HideProcessInfo {
63-
return HideProcessInfo(name, pkg, hidden.any { it.process == name && it.packageName == pkg })
61+
val enabledList = denylist.filter { it.packageName == packageName || it.packageName == ISOLATED_MAGIC }
62+
fun createProcess(name: String, pkg: String = packageName): ProcessInfo {
63+
return ProcessInfo(name, pkg, enabledList.any { it.process == name && it.packageName == pkg })
6464
}
6565

6666
var haveAppZygote = false
@@ -90,17 +90,17 @@ class HideAppInfo(info: ApplicationInfo, pm: PackageManager, hideList: List<Cmdl
9090
}
9191

9292
companion object {
93-
private val comparator = compareBy<HideAppInfo>(
94-
{ it.label.toLowerCase(currentLocale) },
93+
private val comparator = compareBy<AppProcessInfo>(
94+
{ it.label.lowercase(currentLocale) },
9595
{ it.packageName }
9696
)
9797
}
9898
}
9999

100-
data class HideProcessInfo(
100+
data class ProcessInfo(
101101
val name: String,
102102
val packageName: String,
103-
var isHidden: Boolean
103+
var isEnabled: Boolean
104104
) {
105105
val isIsolated get() = packageName == ISOLATED_MAGIC
106106
val isAppZygote get() = name.endsWith("_zygote")

app/src/main/java/com/topjohnwu/magisk/ui/hide/HideFragment.kt renamed to app/src/main/java/com/topjohnwu/magisk/ui/deny/DenyListFragment.kt

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.topjohnwu.magisk.ui.hide
1+
package com.topjohnwu.magisk.ui.deny
22

33
import android.content.Context
44
import android.os.Bundle
@@ -11,42 +11,42 @@ import androidx.recyclerview.widget.LinearLayoutManager
1111
import androidx.recyclerview.widget.RecyclerView
1212
import com.topjohnwu.magisk.R
1313
import com.topjohnwu.magisk.arch.BaseUIFragment
14-
import com.topjohnwu.magisk.databinding.FragmentHideMd2Binding
14+
import com.topjohnwu.magisk.databinding.FragmentDenyMd2Binding
1515
import com.topjohnwu.magisk.di.viewModel
1616
import com.topjohnwu.magisk.ktx.addSimpleItemDecoration
1717
import com.topjohnwu.magisk.ktx.addVerticalPadding
1818
import com.topjohnwu.magisk.ktx.fixEdgeEffect
1919
import com.topjohnwu.magisk.ktx.hideKeyboard
2020
import com.topjohnwu.magisk.utils.MotionRevealHelper
2121

22-
class HideFragment : BaseUIFragment<HideViewModel, FragmentHideMd2Binding>() {
22+
class DenyListFragment : BaseUIFragment<DenyListViewModel, FragmentDenyMd2Binding>() {
2323

24-
override val layoutRes = R.layout.fragment_hide_md2
25-
override val viewModel by viewModel<HideViewModel>()
24+
override val layoutRes = R.layout.fragment_deny_md2
25+
override val viewModel by viewModel<DenyListViewModel>()
2626

2727
private var isFilterVisible
28-
get() = binding.hideFilter.isVisible
28+
get() = binding.processFilter.isVisible
2929
set(value) {
3030
if (!value) hideKeyboard()
31-
MotionRevealHelper.withViews(binding.hideFilter, binding.hideFilterToggle, value)
31+
MotionRevealHelper.withViews(binding.processFilter, binding.filterToggle, value)
3232
}
3333

3434
override fun onAttach(context: Context) {
3535
super.onAttach(context)
36-
activity.setTitle(R.string.magiskhide)
36+
activity.setTitle(R.string.denylist)
3737
setHasOptionsMenu(true)
3838
}
3939

4040
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
4141
super.onViewCreated(view, savedInstanceState)
4242

43-
binding.hideFilterToggle.setOnClickListener {
43+
binding.filterToggle.setOnClickListener {
4444
isFilterVisible = true
4545
}
46-
binding.hideFilterInclude.hideFilterDone.setOnClickListener {
46+
binding.appFilterInclude.filterDone.setOnClickListener {
4747
isFilterVisible = false
4848
}
49-
binding.hideContent.addOnScrollListener(object : RecyclerView.OnScrollListener() {
49+
binding.appList.addOnScrollListener(object : RecyclerView.OnScrollListener() {
5050
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
5151
if (newState != RecyclerView.SCROLL_STATE_IDLE) hideKeyboard()
5252
}
@@ -55,23 +55,23 @@ class HideFragment : BaseUIFragment<HideViewModel, FragmentHideMd2Binding>() {
5555
val resource = requireContext().resources
5656
val l_50 = resource.getDimensionPixelSize(R.dimen.l_50)
5757
val l1 = resource.getDimensionPixelSize(R.dimen.l1)
58-
binding.hideContent.addVerticalPadding(
58+
binding.appList.addVerticalPadding(
5959
l_50,
6060
l1 + resource.getDimensionPixelSize(R.dimen.internal_action_bar_size)
6161
)
62-
binding.hideContent.addSimpleItemDecoration(
62+
binding.appList.addSimpleItemDecoration(
6363
left = l1,
6464
top = l_50,
6565
right = l1,
6666
bottom = l_50,
6767
)
68-
binding.hideContent.fixEdgeEffect()
68+
binding.appList.fixEdgeEffect()
6969

70-
val lama = binding.hideContent.layoutManager ?: return
70+
val lama = binding.appList.layoutManager ?: return
7171
lama.isAutoMeasureEnabled = false
7272
}
7373

74-
override fun onPreBind(binding: FragmentHideMd2Binding) = Unit
74+
override fun onPreBind(binding: FragmentDenyMd2Binding) = Unit
7575

7676
override fun onBackPressed(): Boolean {
7777
if (isFilterVisible) {
@@ -89,10 +89,10 @@ class HideFragment : BaseUIFragment<HideViewModel, FragmentHideMd2Binding>() {
8989

9090
override fun onOptionsItemSelected(item: MenuItem): Boolean {
9191
when (item.itemId) {
92-
R.id.action_focus_up -> binding.hideContent
92+
R.id.action_focus_up -> binding.appList
9393
.takeIf { (it.layoutManager as? LinearLayoutManager)?.findFirstVisibleItemPosition() ?: 0 > 10 }
9494
?.also { it.scrollToPosition(10) }
95-
.let { binding.hideContent }
95+
.let { binding.appList }
9696
.also { it.post { it.smoothScrollToPosition(0) } }
9797
}
9898
return super.onOptionsItemSelected(item)

app/src/main/java/com/topjohnwu/magisk/ui/hide/HideRvItems.kt renamed to app/src/main/java/com/topjohnwu/magisk/ui/deny/DenyListRvItem.kt

Lines changed: 29 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.topjohnwu.magisk.ui.hide
1+
package com.topjohnwu.magisk.ui.deny
22

33
import android.view.View
44
import android.view.ViewGroup
@@ -13,13 +13,13 @@ import com.topjohnwu.magisk.ktx.startAnimations
1313
import com.topjohnwu.superuser.Shell
1414
import kotlin.math.roundToInt
1515

16-
class HideRvItem(
17-
val info: HideAppInfo
18-
) : ObservableDiffRvItem<HideRvItem>(), ComparableRv<HideRvItem> {
16+
class DenyListRvItem(
17+
val info: AppProcessInfo
18+
) : ObservableDiffRvItem<DenyListRvItem>(), ComparableRv<DenyListRvItem> {
1919

2020
override val layoutRes get() = R.layout.item_hide_md2
2121

22-
val processes = info.processes.map { HideProcessRvItem(it) }
22+
val processes = info.processes.map { ProcessRvItem(it) }
2323

2424
@get:Bindable
2525
var isExpanded = false
@@ -31,25 +31,24 @@ class HideRvItem(
3131
@get:Bindable
3232
val checkedPercent get() = (itemsChecked.toFloat() / processes.size * 100).roundToInt()
3333

34-
private var state: Boolean? = false
35-
set(value) = set(value, field, { field = it }, BR.hiddenState)
34+
private var _state: Boolean? = false
35+
set(value) = set(value, field, { field = it }, BR.state)
3636

3737
@get:Bindable
38-
var hiddenState: Boolean?
39-
get() = state
40-
set(value) = set(value, state, { state = it }, BR.hiddenState) {
38+
var state: Boolean?
39+
get() = _state
40+
set(value) = set(value, _state, { _state = it }, BR.state) {
4141
if (value == true) {
4242
processes
43-
.filterNot { it.isHidden }
43+
.filterNot { it.isEnabled }
4444
.filter { isExpanded || it.defaultSelection }
4545
} else {
46-
processes
47-
.filter { it.isHidden }
46+
processes.filter { it.isEnabled }
4847
}.forEach { it.toggle() }
4948
}
5049

5150
init {
52-
processes.forEach { it.addOnPropertyChangedCallback(BR.hidden) { recalculateChecked() } }
51+
processes.forEach { it.addOnPropertyChangedCallback(BR.enabled) { recalculateChecked() } }
5352
addOnPropertyChangedCallback(BR.expanded) { recalculateChecked() }
5453
recalculateChecked()
5554
}
@@ -60,62 +59,62 @@ class HideRvItem(
6059
}
6160

6261
private fun recalculateChecked() {
63-
itemsChecked = processes.count { it.isHidden }
64-
state = if (isExpanded) {
62+
itemsChecked = processes.count { it.isEnabled }
63+
_state = if (isExpanded) {
6564
when (itemsChecked) {
6665
0 -> false
6766
processes.size -> true
6867
else -> null
6968
}
7069
} else {
7170
val defaultProcesses = processes.filter { it.defaultSelection }
72-
when (defaultProcesses.count { it.isHidden }) {
71+
when (defaultProcesses.count { it.isEnabled }) {
7372
0 -> false
7473
defaultProcesses.size -> true
7574
else -> null
7675
}
7776
}
7877
}
7978

80-
override fun compareTo(other: HideRvItem) = comparator.compare(this, other)
79+
override fun compareTo(other: DenyListRvItem) = comparator.compare(this, other)
8180

8281
companion object {
83-
private val comparator = compareBy<HideRvItem>(
82+
private val comparator = compareBy<DenyListRvItem>(
8483
{ it.itemsChecked == 0 },
8584
{ it.info }
8685
)
8786
}
8887

8988
}
9089

91-
class HideProcessRvItem(
92-
val process: HideProcessInfo
93-
) : ObservableDiffRvItem<HideProcessRvItem>() {
90+
class ProcessRvItem(
91+
val process: ProcessInfo
92+
) : ObservableDiffRvItem<ProcessRvItem>() {
9493

9594
override val layoutRes get() = R.layout.item_hide_process_md2
9695

9796
val displayName = if (process.isIsolated) "(isolated) ${process.name}" else process.name
9897

9998
@get:Bindable
100-
var isHidden
101-
get() = process.isHidden
102-
set(value) = set(value, process.isHidden, { process.isHidden = it }, BR.hidden) {
99+
var isEnabled
100+
get() = process.isEnabled
101+
set(value) = set(value, process.isEnabled, { process.isEnabled = it }, BR.enabled) {
103102
val arg = if (it) "add" else "rm"
104103
val (name, pkg) = process
105-
Shell.su("magiskhide $arg $pkg \'$name\'").submit()
104+
Shell.su("magisk --denylist $arg $pkg \'$name\'").submit()
106105
}
107106

108107
fun toggle() {
109-
isHidden = !isHidden
108+
isEnabled = !isEnabled
110109
}
111110

112111
val defaultSelection get() =
113112
process.isIsolated || process.isAppZygote || process.name == process.packageName
114113

115-
override fun contentSameAs(other: HideProcessRvItem) =
116-
process.isHidden == other.process.isHidden
114+
override fun contentSameAs(other: ProcessRvItem) =
115+
process.isEnabled == other.process.isEnabled
117116

118-
override fun itemSameAs(other: HideProcessRvItem) =
117+
override fun itemSameAs(other: ProcessRvItem) =
119118
process.name == other.process.name && process.packageName == other.process.packageName
120119

121120
}

app/src/main/java/com/topjohnwu/magisk/ui/hide/HideViewModel.kt renamed to app/src/main/java/com/topjohnwu/magisk/ui/deny/DenyListViewModel.kt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.topjohnwu.magisk.ui.hide
1+
package com.topjohnwu.magisk.ui.deny
22

33
import android.annotation.SuppressLint
44
import android.content.pm.ApplicationInfo
@@ -20,7 +20,7 @@ import kotlinx.coroutines.Dispatchers
2020
import kotlinx.coroutines.launch
2121
import kotlinx.coroutines.withContext
2222

23-
class HideViewModel : BaseViewModel(), Queryable {
23+
class DenyListViewModel : BaseViewModel(), Queryable {
2424

2525
override val queryDelay = 1000L
2626

@@ -43,11 +43,11 @@ class HideViewModel : BaseViewModel(), Queryable {
4343
submitQuery()
4444
}
4545

46-
val items = filterableListOf<HideRvItem>()
47-
val itemBinding = itemBindingOf<HideRvItem> {
46+
val items = filterableListOf<DenyListRvItem>()
47+
val itemBinding = itemBindingOf<DenyListRvItem> {
4848
it.bindExtra(BR.viewModel, this)
4949
}
50-
val itemInternalBinding = itemBindingOf<HideProcessRvItem> {
50+
val itemInternalBinding = itemBindingOf<ProcessRvItem> {
5151
it.bindExtra(BR.viewModel, this)
5252
}
5353

@@ -60,14 +60,14 @@ class HideViewModel : BaseViewModel(), Queryable {
6060
state = State.LOADING
6161
val (apps, diff) = withContext(Dispatchers.Default) {
6262
val pm = AppContext.packageManager
63-
val hideList = Shell.su("magiskhide ls").exec().out.map { CmdlineHiddenItem(it) }
63+
val hideList = Shell.su("magisk --denylist ls").exec().out.map { CmdlineListItem(it) }
6464
val apps = pm.getInstalledApplications(MATCH_UNINSTALLED_PACKAGES)
6565
.asSequence()
6666
.filterNot { blacklist.contains(it.packageName) }
67-
.map { HideAppInfo(it, pm, hideList) }
67+
.map { AppProcessInfo(it, pm, hideList) }
6868
.filter { it.processes.isNotEmpty() }
69-
.filter { info -> info.enabled || info.processes.any { it.isHidden } }
70-
.map { HideRvItem(it) }
69+
.filter { info -> info.enabled || info.processes.any { it.isEnabled } }
70+
.map { DenyListRvItem(it) }
7171
.toList()
7272
.sorted()
7373
apps to items.calculateDiff(apps)

5 commit comments

Comments
 (5)

BlastboomStrice commented on Sep 13, 2021

@BlastboomStrice

F

p3yot3 commented on Sep 15, 2021

@p3yot3

Why?

BlastboomStrice commented on Sep 15, 2021

@BlastboomStrice

Why?

Lol you're probably not following the news of magisk for a few months.. Here are some links to see what's happening:
https://topjohnwu.medium.com/state-of-magisk-2021-fe29fdaee458
65b0ea7
https://twitter.com/i/web/status/1431948577627119618
https://github.com/kdrag0n/safetynet-fix/releases/tag/v2.1.0

Also since google nows seems to detect an unlocked bootloader better on mew devices:
Https://t.me/modulesrepo/2023

Nitrovenom commented on Sep 17, 2021

Contributor

Will we get hide magisk app option?

BlastboomStrice commented on Sep 17, 2021

Will we get hide magisk app option?

.. Just a message above; https://github.com/kdrag0n/safetynet-fix/releases/tag/v2.1.0

Please sign in to comment.