MagiskHide is no more

This commit is contained in:
topjohnwu
2021-09-12 12:40:34 -07:00
parent fc6b02f607
commit 65b0ea792e
79 changed files with 433 additions and 486 deletions

View File

@@ -59,9 +59,6 @@ object Config : PreferenceModel, DBConfig {
const val BOOT_ID = "boot_id"
const val ASKED_HOME = "asked_home"
const val DOH = "doh"
// system state
const val MAGISKHIDE = "magiskhide"
}
object Value {
@@ -133,7 +130,6 @@ object Config : PreferenceModel, DBConfig {
var suTapjack by preference(Key.SU_TAPJACK, true)
var checkUpdate by preference(Key.CHECK_UPDATES, true)
var doh by preference(Key.DOH, false)
var magiskHide by preference(Key.MAGISKHIDE, true)
var showSystemApp by preference(Key.SHOW_SYSTEM_APP, false)
var customChannelUrl by preference(Key.CUSTOM_CHANNEL, "")

View File

@@ -27,6 +27,7 @@ object Const {
// Misc
val USER_ID = Process.myUid() / 100000
val APP_IS_CANARY get() = Version.isCanary(BuildConfig.VERSION_CODE)
object Version {
const val MIN_VERSION = "v20.4"
@@ -34,7 +35,9 @@ object Const {
fun atLeast_21_0() = Info.env.magiskVersionCode >= 21000 || isCanary()
fun atLeast_21_2() = Info.env.magiskVersionCode >= 21200 || isCanary()
fun isCanary() = Info.env.magiskVersionCode % 100 != 0
fun isCanary() = isCanary(Info.env.magiskVersionCode)
fun isCanary(ver: Int) = ver > 0 && ver % 100 != 0
}
object ID {
@@ -49,7 +52,7 @@ object Const {
const val PATREON_URL = "https://www.patreon.com/topjohnwu"
const val SOURCE_CODE_URL = "https://github.com/topjohnwu/Magisk"
val CHANGELOG_URL = if (BuildConfig.VERSION_CODE % 100 != 0) Info.remote.magisk.note
val CHANGELOG_URL = if (APP_IS_CANARY) Info.remote.magisk.note
else "https://topjohnwu.github.io/Magisk/releases/${BuildConfig.VERSION_CODE}.md"
const val GITHUB_RAW_URL = "https://raw.githubusercontent.com/"
@@ -76,7 +79,6 @@ object Const {
object Nav {
const val HOME = "home"
const val SETTINGS = "settings"
const val HIDE = "hide"
const val MODULES = "modules"
const val SUPERUSER = "superuser"
}

View File

@@ -51,25 +51,22 @@ object Info {
private fun loadState() = Env(
fastCmd("magisk -v").split(":".toRegex())[0],
runCatching { fastCmd("magisk -V").toInt() }.getOrDefault(-1),
Shell.su("magiskhide status").exec().isSuccess
runCatching { fastCmd("magisk -V").toInt() }.getOrDefault(-1)
)
class Env(
val magiskVersionString: String = "",
code: Int = -1,
hide: Boolean = false
code: Int = -1
) {
val magiskHide get() = Config.magiskHide
val magiskVersionCode = when {
code < Const.Version.MIN_VERCODE -> -1
else -> if (Shell.rootAccess()) code else -1
}
val isUnsupported = code > 0 && code < Const.Version.MIN_VERCODE
val isActive = magiskVersionCode >= 0
init {
Config.magiskHide = hide
}
var denyListEnforced = if (Const.Version.isCanary(code))
Shell.su("magisk --denylist status").exec().isSuccess
else
false
}
}

View File

@@ -42,7 +42,7 @@ open class Receiver : BaseReceiver() {
getUid(intent)?.let { rmPolicy(it) }
}
Intent.ACTION_PACKAGE_FULLY_REMOVED -> {
getPkg(intent)?.let { Shell.su("magiskhide rm $it").submit() }
getPkg(intent)?.let { Shell.su("magisk --denylist rm $it").submit() }
}
Intent.ACTION_LOCALE_CHANGED -> Shortcuts.setupDynamic(context)
}

View File

@@ -60,7 +60,7 @@ open class MainActivity : BaseUIActivity<MainViewModel, ActivityMainMd2Binding>(
R.id.homeFragment,
R.id.modulesFragment,
R.id.superuserFragment,
R.id.hideFragment,
R.id.denyFragment,
R.id.logFragment -> true
else -> false
}
@@ -170,7 +170,6 @@ open class MainActivity : BaseUIActivity<MainViewModel, ActivityMainMd2Binding>(
private fun getScreen(name: String?): NavDirections? {
return when (name) {
Const.Nav.SUPERUSER -> MainDirections.actionSuperuserFragment()
Const.Nav.HIDE -> MainDirections.actionHideFragment()
Const.Nav.MODULES -> MainDirections.actionModuleFragment()
Const.Nav.SETTINGS -> HomeFragmentDirections.actionHomeFragmentToSettingsFragment()
else -> null
@@ -183,7 +182,7 @@ open class MainActivity : BaseUIActivity<MainViewModel, ActivityMainMd2Binding>(
R.id.modulesFragment -> MainDirections.actionModuleFragment()
R.id.superuserFragment -> MainDirections.actionSuperuserFragment()
R.id.logFragment -> MainDirections.actionLogFragment()
R.id.hideFragment -> MainDirections.actionHideFragment()
R.id.denyFragment -> MainDirections.actionDenylistFragment()
else -> null
}
}

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.ui.hide
package com.topjohnwu.magisk.ui.deny
import android.annotation.SuppressLint
import android.content.pm.ApplicationInfo
@@ -13,7 +13,7 @@ import com.topjohnwu.magisk.ktx.getLabel
import com.topjohnwu.magisk.ktx.isIsolated
import com.topjohnwu.magisk.ktx.useAppZygote
class CmdlineHiddenItem(line: String) {
class CmdlineListItem(line: String) {
val packageName: String
val process: String
@@ -27,19 +27,19 @@ class CmdlineHiddenItem(line: String) {
const val ISOLATED_MAGIC = "isolated"
@SuppressLint("InlinedApi")
class HideAppInfo(info: ApplicationInfo, pm: PackageManager, hideList: List<CmdlineHiddenItem>)
: ApplicationInfo(info), Comparable<HideAppInfo> {
class AppProcessInfo(info: ApplicationInfo, pm: PackageManager, denyList: List<CmdlineListItem>)
: ApplicationInfo(info), Comparable<AppProcessInfo> {
val label = info.getLabel(pm)
val iconImage: Drawable = info.loadIcon(pm)
val processes = fetchProcesses(pm, hideList)
val processes = fetchProcesses(pm, denyList)
override fun compareTo(other: HideAppInfo) = comparator.compare(this, other)
override fun compareTo(other: AppProcessInfo) = comparator.compare(this, other)
private fun fetchProcesses(
pm: PackageManager,
hideList: List<CmdlineHiddenItem>
): List<HideProcessInfo> {
denylist: List<CmdlineListItem>
): List<ProcessInfo> {
// Fetch full PackageInfo
val baseFlag = MATCH_DISABLED_COMPONENTS or MATCH_UNINSTALLED_PACKAGES
val packageInfo = try {
@@ -58,9 +58,9 @@ class HideAppInfo(info: ApplicationInfo, pm: PackageManager, hideList: List<Cmdl
}
}
val hidden = hideList.filter { it.packageName == packageName || it.packageName == ISOLATED_MAGIC }
fun createProcess(name: String, pkg: String = packageName): HideProcessInfo {
return HideProcessInfo(name, pkg, hidden.any { it.process == name && it.packageName == pkg })
val enabledList = denylist.filter { it.packageName == packageName || it.packageName == ISOLATED_MAGIC }
fun createProcess(name: String, pkg: String = packageName): ProcessInfo {
return ProcessInfo(name, pkg, enabledList.any { it.process == name && it.packageName == pkg })
}
var haveAppZygote = false
@@ -90,17 +90,17 @@ class HideAppInfo(info: ApplicationInfo, pm: PackageManager, hideList: List<Cmdl
}
companion object {
private val comparator = compareBy<HideAppInfo>(
{ it.label.toLowerCase(currentLocale) },
private val comparator = compareBy<AppProcessInfo>(
{ it.label.lowercase(currentLocale) },
{ it.packageName }
)
}
}
data class HideProcessInfo(
data class ProcessInfo(
val name: String,
val packageName: String,
var isHidden: Boolean
var isEnabled: Boolean
) {
val isIsolated get() = packageName == ISOLATED_MAGIC
val isAppZygote get() = name.endsWith("_zygote")

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.ui.hide
package com.topjohnwu.magisk.ui.deny
import android.content.Context
import android.os.Bundle
@@ -11,7 +11,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.topjohnwu.magisk.R
import com.topjohnwu.magisk.arch.BaseUIFragment
import com.topjohnwu.magisk.databinding.FragmentHideMd2Binding
import com.topjohnwu.magisk.databinding.FragmentDenyMd2Binding
import com.topjohnwu.magisk.di.viewModel
import com.topjohnwu.magisk.ktx.addSimpleItemDecoration
import com.topjohnwu.magisk.ktx.addVerticalPadding
@@ -19,34 +19,34 @@ import com.topjohnwu.magisk.ktx.fixEdgeEffect
import com.topjohnwu.magisk.ktx.hideKeyboard
import com.topjohnwu.magisk.utils.MotionRevealHelper
class HideFragment : BaseUIFragment<HideViewModel, FragmentHideMd2Binding>() {
class DenyListFragment : BaseUIFragment<DenyListViewModel, FragmentDenyMd2Binding>() {
override val layoutRes = R.layout.fragment_hide_md2
override val viewModel by viewModel<HideViewModel>()
override val layoutRes = R.layout.fragment_deny_md2
override val viewModel by viewModel<DenyListViewModel>()
private var isFilterVisible
get() = binding.hideFilter.isVisible
get() = binding.processFilter.isVisible
set(value) {
if (!value) hideKeyboard()
MotionRevealHelper.withViews(binding.hideFilter, binding.hideFilterToggle, value)
MotionRevealHelper.withViews(binding.processFilter, binding.filterToggle, value)
}
override fun onAttach(context: Context) {
super.onAttach(context)
activity.setTitle(R.string.magiskhide)
activity.setTitle(R.string.denylist)
setHasOptionsMenu(true)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.hideFilterToggle.setOnClickListener {
binding.filterToggle.setOnClickListener {
isFilterVisible = true
}
binding.hideFilterInclude.hideFilterDone.setOnClickListener {
binding.appFilterInclude.filterDone.setOnClickListener {
isFilterVisible = false
}
binding.hideContent.addOnScrollListener(object : RecyclerView.OnScrollListener() {
binding.appList.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) {
if (newState != RecyclerView.SCROLL_STATE_IDLE) hideKeyboard()
}
@@ -55,23 +55,23 @@ class HideFragment : BaseUIFragment<HideViewModel, FragmentHideMd2Binding>() {
val resource = requireContext().resources
val l_50 = resource.getDimensionPixelSize(R.dimen.l_50)
val l1 = resource.getDimensionPixelSize(R.dimen.l1)
binding.hideContent.addVerticalPadding(
binding.appList.addVerticalPadding(
l_50,
l1 + resource.getDimensionPixelSize(R.dimen.internal_action_bar_size)
)
binding.hideContent.addSimpleItemDecoration(
binding.appList.addSimpleItemDecoration(
left = l1,
top = l_50,
right = l1,
bottom = l_50,
)
binding.hideContent.fixEdgeEffect()
binding.appList.fixEdgeEffect()
val lama = binding.hideContent.layoutManager ?: return
val lama = binding.appList.layoutManager ?: return
lama.isAutoMeasureEnabled = false
}
override fun onPreBind(binding: FragmentHideMd2Binding) = Unit
override fun onPreBind(binding: FragmentDenyMd2Binding) = Unit
override fun onBackPressed(): Boolean {
if (isFilterVisible) {
@@ -89,10 +89,10 @@ class HideFragment : BaseUIFragment<HideViewModel, FragmentHideMd2Binding>() {
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.action_focus_up -> binding.hideContent
R.id.action_focus_up -> binding.appList
.takeIf { (it.layoutManager as? LinearLayoutManager)?.findFirstVisibleItemPosition() ?: 0 > 10 }
?.also { it.scrollToPosition(10) }
.let { binding.hideContent }
.let { binding.appList }
.also { it.post { it.smoothScrollToPosition(0) } }
}
return super.onOptionsItemSelected(item)

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.ui.hide
package com.topjohnwu.magisk.ui.deny
import android.view.View
import android.view.ViewGroup
@@ -13,13 +13,13 @@ import com.topjohnwu.magisk.ktx.startAnimations
import com.topjohnwu.superuser.Shell
import kotlin.math.roundToInt
class HideRvItem(
val info: HideAppInfo
) : ObservableDiffRvItem<HideRvItem>(), ComparableRv<HideRvItem> {
class DenyListRvItem(
val info: AppProcessInfo
) : ObservableDiffRvItem<DenyListRvItem>(), ComparableRv<DenyListRvItem> {
override val layoutRes get() = R.layout.item_hide_md2
val processes = info.processes.map { HideProcessRvItem(it) }
val processes = info.processes.map { ProcessRvItem(it) }
@get:Bindable
var isExpanded = false
@@ -31,25 +31,24 @@ class HideRvItem(
@get:Bindable
val checkedPercent get() = (itemsChecked.toFloat() / processes.size * 100).roundToInt()
private var state: Boolean? = false
set(value) = set(value, field, { field = it }, BR.hiddenState)
private var _state: Boolean? = false
set(value) = set(value, field, { field = it }, BR.state)
@get:Bindable
var hiddenState: Boolean?
get() = state
set(value) = set(value, state, { state = it }, BR.hiddenState) {
var state: Boolean?
get() = _state
set(value) = set(value, _state, { _state = it }, BR.state) {
if (value == true) {
processes
.filterNot { it.isHidden }
.filterNot { it.isEnabled }
.filter { isExpanded || it.defaultSelection }
} else {
processes
.filter { it.isHidden }
processes.filter { it.isEnabled }
}.forEach { it.toggle() }
}
init {
processes.forEach { it.addOnPropertyChangedCallback(BR.hidden) { recalculateChecked() } }
processes.forEach { it.addOnPropertyChangedCallback(BR.enabled) { recalculateChecked() } }
addOnPropertyChangedCallback(BR.expanded) { recalculateChecked() }
recalculateChecked()
}
@@ -60,8 +59,8 @@ class HideRvItem(
}
private fun recalculateChecked() {
itemsChecked = processes.count { it.isHidden }
state = if (isExpanded) {
itemsChecked = processes.count { it.isEnabled }
_state = if (isExpanded) {
when (itemsChecked) {
0 -> false
processes.size -> true
@@ -69,7 +68,7 @@ class HideRvItem(
}
} else {
val defaultProcesses = processes.filter { it.defaultSelection }
when (defaultProcesses.count { it.isHidden }) {
when (defaultProcesses.count { it.isEnabled }) {
0 -> false
defaultProcesses.size -> true
else -> null
@@ -77,10 +76,10 @@ class HideRvItem(
}
}
override fun compareTo(other: HideRvItem) = comparator.compare(this, other)
override fun compareTo(other: DenyListRvItem) = comparator.compare(this, other)
companion object {
private val comparator = compareBy<HideRvItem>(
private val comparator = compareBy<DenyListRvItem>(
{ it.itemsChecked == 0 },
{ it.info }
)
@@ -88,34 +87,34 @@ class HideRvItem(
}
class HideProcessRvItem(
val process: HideProcessInfo
) : ObservableDiffRvItem<HideProcessRvItem>() {
class ProcessRvItem(
val process: ProcessInfo
) : ObservableDiffRvItem<ProcessRvItem>() {
override val layoutRes get() = R.layout.item_hide_process_md2
val displayName = if (process.isIsolated) "(isolated) ${process.name}" else process.name
@get:Bindable
var isHidden
get() = process.isHidden
set(value) = set(value, process.isHidden, { process.isHidden = it }, BR.hidden) {
var isEnabled
get() = process.isEnabled
set(value) = set(value, process.isEnabled, { process.isEnabled = it }, BR.enabled) {
val arg = if (it) "add" else "rm"
val (name, pkg) = process
Shell.su("magiskhide $arg $pkg \'$name\'").submit()
Shell.su("magisk --denylist $arg $pkg \'$name\'").submit()
}
fun toggle() {
isHidden = !isHidden
isEnabled = !isEnabled
}
val defaultSelection get() =
process.isIsolated || process.isAppZygote || process.name == process.packageName
override fun contentSameAs(other: HideProcessRvItem) =
process.isHidden == other.process.isHidden
override fun contentSameAs(other: ProcessRvItem) =
process.isEnabled == other.process.isEnabled
override fun itemSameAs(other: HideProcessRvItem) =
override fun itemSameAs(other: ProcessRvItem) =
process.name == other.process.name && process.packageName == other.process.packageName
}

View File

@@ -1,4 +1,4 @@
package com.topjohnwu.magisk.ui.hide
package com.topjohnwu.magisk.ui.deny
import android.annotation.SuppressLint
import android.content.pm.ApplicationInfo
@@ -20,7 +20,7 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
class HideViewModel : BaseViewModel(), Queryable {
class DenyListViewModel : BaseViewModel(), Queryable {
override val queryDelay = 1000L
@@ -43,11 +43,11 @@ class HideViewModel : BaseViewModel(), Queryable {
submitQuery()
}
val items = filterableListOf<HideRvItem>()
val itemBinding = itemBindingOf<HideRvItem> {
val items = filterableListOf<DenyListRvItem>()
val itemBinding = itemBindingOf<DenyListRvItem> {
it.bindExtra(BR.viewModel, this)
}
val itemInternalBinding = itemBindingOf<HideProcessRvItem> {
val itemInternalBinding = itemBindingOf<ProcessRvItem> {
it.bindExtra(BR.viewModel, this)
}
@@ -60,14 +60,14 @@ class HideViewModel : BaseViewModel(), Queryable {
state = State.LOADING
val (apps, diff) = withContext(Dispatchers.Default) {
val pm = AppContext.packageManager
val hideList = Shell.su("magiskhide ls").exec().out.map { CmdlineHiddenItem(it) }
val hideList = Shell.su("magisk --denylist ls").exec().out.map { CmdlineListItem(it) }
val apps = pm.getInstalledApplications(MATCH_UNINSTALLED_PACKAGES)
.asSequence()
.filterNot { blacklist.contains(it.packageName) }
.map { HideAppInfo(it, pm, hideList) }
.map { AppProcessInfo(it, pm, hideList) }
.filter { it.processes.isNotEmpty() }
.filter { info -> info.enabled || info.processes.any { it.isHidden } }
.map { HideRvItem(it) }
.filter { info -> info.enabled || info.processes.any { it.isEnabled } }
.map { DenyListRvItem(it) }
.toList()
.sorted()
apps to items.calculateDiff(apps)

View File

@@ -252,14 +252,14 @@ object Magisk : BaseSettingsItem.Section() {
override val title = R.string.magisk.asText()
}
object MagiskHide : BaseSettingsItem.Toggle() {
override val title = R.string.magiskhide.asText()
override val description = R.string.settings_magiskhide_summary.asText()
override var value = Config.magiskHide
object DenyList : BaseSettingsItem.Toggle() {
override val title = R.string.denylist.asText()
override val description = R.string.settings_denylist_summary.asText()
override var value = Info.env.denyListEnforced
set(value) = setV(value, field, { field = it }) {
val cmd = if (it) "enable" else "disable"
Shell.su("magiskhide $cmd").submit { cb ->
if (cb.isSuccess) Config.magiskHide = it
Shell.su("magisk --denylist $cmd").submit { cb ->
if (cb.isSuccess) Info.env.denyListEnforced = it
else field = !it
}
}

View File

@@ -70,8 +70,11 @@ class SettingsViewModel(
if (Info.env.isActive) {
list.addAll(listOf(
Magisk,
MagiskHide, SystemlessHosts
SystemlessHosts
))
if (Const.Version.isCanary()) {
list.add(DenyList)
}
}
// Superuser

View File

@@ -64,18 +64,6 @@ object Shortcuts {
.build()
)
}
if (Info.env.magiskHide) {
shortCuts.add(
ShortcutInfo.Builder(context, Const.Nav.HIDE)
.setShortLabel(context.getString(R.string.magiskhide))
.setIntent(
Intent(intent).putExtra(Const.Key.OPEN_SECTION, Const.Nav.HIDE)
)
.setIcon(context.getIcon(R.drawable.sc_magiskhide))
.setRank(1)
.build()
)
}
if (Info.env.isActive) {
shortCuts.add(
ShortcutInfo.Builder(context, Const.Nav.MODULES)
@@ -84,7 +72,7 @@ object Shortcuts {
Intent(intent).putExtra(Const.Key.OPEN_SECTION, Const.Nav.MODULES)
)
.setIcon(context.getIcon(R.drawable.sc_extension))
.setRank(2)
.setRank(1)
.build()
)
}

View File

@@ -21,7 +21,7 @@ sealed class TappableHeadlineItem : DiffRvItem<TappableHeadlineItem>() {
// --- objects
object Hide : TappableHeadlineItem() {
override val title = R.string.magiskhide
override val title = R.string.denylist
override val icon = R.drawable.ic_hide_md2
}

View File

@@ -9,7 +9,7 @@
<variable
name="viewModel"
type="com.topjohnwu.magisk.ui.hide.HideViewModel" />
type="com.topjohnwu.magisk.ui.deny.DenyListViewModel" />
</data>
@@ -27,7 +27,7 @@
tools:paddingBottom="64dp">
<TextView
android:id="@+id/hide_filter_title_filter"
android:id="@+id/filter_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hide_filters"
@@ -45,7 +45,7 @@
app:chipSpacing="2dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/hide_filter_title_filter">
app:layout_constraintTop_toBottomOf="@+id/filter_title">
<com.google.android.material.chip.Chip
android:id="@+id/hide_filter_system_chip"
@@ -83,7 +83,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:checkable="false"
android:nextFocusRight="@id/hide_filter_done"
android:nextFocusRight="@id/filter_done"
android:nextFocusDown="@id/hide_filter_search_field"
android:text="@{viewModel.query}"
android:textAppearance="@style/AppearanceFoundation.Caption"
@@ -113,7 +113,7 @@
android:layout_marginBottom="@dimen/l_50"
app:cardCornerRadius="18dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/hide_filter_done"
app:layout_constraintEnd_toStartOf="@+id/filter_done"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/hide_filter_title_search">
@@ -136,7 +136,7 @@
android:hint="@string/hide_filter_hint"
android:inputType="textUri"
android:minHeight="36dp"
android:nextFocusRight="@id/hide_filter_done"
android:nextFocusRight="@id/filter_done"
android:paddingStart="0dp"
android:paddingEnd="@dimen/l1"
android:singleLine="true"
@@ -148,7 +148,7 @@
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/hide_filter_done"
android:id="@+id/filter_done"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:nextFocusLeft="@id/hide_filter_system_chip"

View File

@@ -7,7 +7,7 @@
<variable
name="viewModel"
type="com.topjohnwu.magisk.ui.hide.HideViewModel" />
type="com.topjohnwu.magisk.ui.deny.DenyListViewModel" />
</data>
@@ -16,7 +16,7 @@
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/hide_content"
android:id="@+id/app_list"
invisibleUnless="@{viewModel.loaded || !viewModel.items.empty}"
itemBinding="@{viewModel.itemBinding}"
items="@{viewModel.items}"
@@ -31,7 +31,7 @@
tools:paddingTop="40dp" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/hide_filter_toggle"
android:id="@+id/filter_toggle"
invisibleUnless="@{viewModel.loaded || !viewModel.items.empty}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@@ -46,7 +46,7 @@
tools:layout_marginBottom="64dp" />
<com.google.android.material.circularreveal.cardview.CircularRevealCardView
android:id="@+id/hide_filter"
android:id="@+id/process_filter"
style="@style/WidgetFoundation.Card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
@@ -56,8 +56,8 @@
app:cardCornerRadius="0dp">
<include
android:id="@+id/hide_filter_include"
layout="@layout/include_hide_filter"
android:id="@+id/app_filter_include"
layout="@layout/app_list_filter"
viewModel="@{viewModel}"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

View File

@@ -9,11 +9,11 @@
<variable
name="item"
type="com.topjohnwu.magisk.ui.hide.HideRvItem" />
type="com.topjohnwu.magisk.ui.deny.DenyListRvItem" />
<variable
name="viewModel"
type="com.topjohnwu.magisk.ui.hide.HideViewModel" />
type="com.topjohnwu.magisk.ui.deny.DenyListViewModel" />
</data>
@@ -80,7 +80,7 @@
<com.topjohnwu.widget.IndeterminateCheckBox
android:id="@+id/hide_expand_icon"
state="@={item.hiddenState}"
state="@={item.state}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/l1"

View File

@@ -7,11 +7,11 @@
<variable
name="item"
type="com.topjohnwu.magisk.ui.hide.HideProcessRvItem" />
type="com.topjohnwu.magisk.ui.deny.ProcessRvItem" />
<variable
name="viewModel"
type="com.topjohnwu.magisk.ui.hide.HideViewModel" />
type="com.topjohnwu.magisk.ui.deny.DenyListViewModel" />
</data>
@@ -19,7 +19,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:alpha="@{item.hidden ? 1f : .7f}">
android:alpha="@{item.enabled ? 1f : .7f}">
<TextView
android:layout_width="0dp"
@@ -40,7 +40,7 @@
<com.google.android.material.switchmaterial.SwitchMaterial
android:id="@+id/hide_process_checkbox"
android:checked="@={item.hidden}"
android:checked="@={item.enabled}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/l_50"

View File

@@ -48,7 +48,7 @@
app:layout_constraintEnd_toStartOf="@+id/headline_icon_pointer"
app:layout_constraintStart_toEndOf="@+id/tappable_icon"
app:layout_constraintTop_toTopOf="parent"
tools:text="@string/magiskhide" />
tools:text="@string/denylist" />
<ImageView
android:id="@+id/headline_icon_pointer"

View File

@@ -15,9 +15,9 @@
tools:showAsAction="always" />
<item
android:id="@+id/hideFragment"
android:id="@+id/denyFragment"
android:icon="@drawable/ic_hide_md2"
android:title="@string/magiskhide"
android:title="@string/denylist"
tools:showAsAction="always" />
<item

View File

@@ -6,10 +6,10 @@
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/hideFragment"
android:name="com.topjohnwu.magisk.ui.hide.HideFragment"
android:label="HideFragment"
tools:layout="@layout/fragment_hide_md2" />
android:id="@+id/denyFragment"
android:name="com.topjohnwu.magisk.ui.deny.DenyListFragment"
android:label="DenyListFragment"
tools:layout="@layout/fragment_deny_md2" />
<fragment
android:id="@+id/homeFragment"
@@ -165,8 +165,8 @@
app:popUpTo="@id/homeFragment" />
<action
android:id="@+id/action_hideFragment"
app:destination="@id/hideFragment"
android:id="@+id/action_denylistFragment"
app:destination="@id/denyFragment"
app:enterAnim="@anim/fragment_enter"
app:exitAnim="@anim/fragment_exit"
app:popEnterAnim="@anim/fragment_enter_pop"

View File

@@ -136,7 +136,6 @@
<string name="settings_update_beta">تجريبي</string>
<string name="settings_update_custom">مخصص</string>
<string name="settings_update_custom_msg">أدخل الرابط لمصدرك المخصص</string>
<string name="settings_magiskhide_summary">إخفاء مـاجـيسك من معظم طرق الاكتشاف</string>
<string name="settings_hosts_title">موانع الاعلانات</string>
<string name="settings_hosts_summary">حجب الاعلانات دون تعديل النظام</string>
<string name="settings_hosts_toast">تم تمكين خاصية حجب الاعلانات</string>

View File

@@ -82,7 +82,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Özəl</string>
<string name="settings_update_custom_msg">Özəl URL daxil edin</string>
<string name="settings_magiskhide_summary">Magisk\'i fərqli növdə aşkarlamalardan gizləyin.</string>
<string name="settings_hosts_title">Sistemsiz host\'lar</string>
<string name="settings_hosts_summary">Adblock tətbiqləri üçün Sistemsiz host dəstəyi.</string>
<string name="settings_hosts_toast">Sistemsiz host əlavəsi quraşdırıldı</string>

View File

@@ -136,7 +136,6 @@
<string name="settings_update_beta">Бэта</string>
<string name="settings_update_custom">Адвольны канал</string>
<string name="settings_update_custom_msg">Устаўце URL</string>
<string name="settings_magiskhide_summary">Хаваць Magisk ад выяўлення</string>
<string name="settings_hosts_title">Пазасістэмны файл hosts</string>
<string name="settings_hosts_summary">Падтрымка пазасістэмнага файла hosts для праграм, якія блакуюць рэкламу</string>
<string name="settings_hosts_toast">Дададзены модуль пазасістэмнага файла hosts</string>

View File

@@ -78,7 +78,6 @@
<string name="settings_update_beta">Бета</string>
<string name="settings_update_custom">Потребителски</string>
<string name="settings_update_custom_msg">Въведете потребителски URL</string>
<string name="settings_magiskhide_summary">Скриване на Magisk от различни детектори.</string>
<string name="settings_hosts_title">Несистемни хостове</string>
<string name="settings_hosts_summary">Поддръжка на несистемни хостове за използване на приложения, блокиращи реклами.</string>
<string name="settings_hosts_toast">Бе добавен модул с несистемни хостове.</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Canal personalitzat</string>
<string name="settings_update_custom_msg">Inserta un URL personalitzada</string>
<string name="settings_magiskhide_summary">Amagar Magisk de diverses deteccions</string>
<string name="settings_hosts_title">Systemless Hosts</string>
<string name="settings_hosts_summary">Suport per aplicacions tipus Adblock fora de la partició del sistema</string>
<string name="settings_hosts_toast">Agregat el mòdul Systemless Hosts</string>

View File

@@ -145,7 +145,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Vlastní</string>
<string name="settings_update_custom_msg">Vložte vlastní URL</string>
<string name="settings_magiskhide_summary">Skryjete Magisk před různými detekcemi.</string>
<string name="settings_hosts_title">Nesystémový hostitel</string>
<string name="settings_hosts_summary">Přidáte modul pro podporu nesystémových hostitelů v aplikaci AdBlock.</string>
<string name="settings_hosts_toast">Přidán systémový modul hostitelů</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Benutzerdefiniert</string>
<string name="settings_update_custom_msg">Eine benutzerdefinierte URL eingeben</string>
<string name="settings_magiskhide_summary">Versteckt Magisk vor diversen Entdeckungsmethoden</string>
<string name="settings_hosts_title">Systemlose Hosts-Datei</string>
<string name="settings_hosts_summary">Systemlose Unterstützung für Werbeblocker</string>
<string name="settings_hosts_toast">Systemloses Hosts-Modul hinzugefügt</string>

View File

@@ -50,7 +50,7 @@
<string name="reboot_delay_toast">Επανεκκίνηση σε 5 δευτερόλεπτα…</string>
<string name="flash_screen_title">Εγκατάσταση</string>
<!--Superuser-->
<!--Superuser-->
<string name="su_request_title">Αίτημα υπερχρήστη</string>
<string name="touch_filtered_warning">Επειδή μια εφαρμογή αποκρύπτει ένα αίτημα υπερχρήστη, το Magisk δεν μπορεί να επαληθεύσει την απάντησή σας</string>
<string name="deny">Άρνηση</string>
@@ -76,7 +76,7 @@
<string name="toast">Αναδυόμενο παράθυρο</string>
<string name="none">Κανένα</string>
<string name="superuser_toggle_notification">Ειδοποιήσεις</string>
<string name="superuser_toggle_notification">Ειδοποιήσεις</string>
<string name="superuser_toggle_revoke">Ανακάλεσε</string>
<string name="superuser_policy_none">Καμία εφαρμογή δεν έχει ζητήσει άδεια υπερχρήστη.</string>
<!--Logs-->
@@ -145,7 +145,6 @@
<string name="settings_update_beta">Δοκιμαστικό</string>
<string name="settings_update_custom">Προσαρμοσμένο</string>
<string name="settings_update_custom_msg">Εισαγωγή ενός custom URL</string>
<string name="settings_magiskhide_summary">Κρύβει το Magisk από διάφορες ανιχνεύσεις</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">Υποστήριξη Systemless hosts για εφαρμογές Adblock</string>
<string name="settings_hosts_toast">Προσθήκη αρθρώματος systemless hosts</string>
@@ -184,7 +183,7 @@
<string name="settings_user_independent">Ανεξάρτητη από τον χρήστη</string>
<string name="owner_only_summary">Μόνο ο ιδιοκτήτης έχει πρόσβαση root</string>
<string name="owner_manage_summary">Μόνο ο ιδιοκτήτης μπορεί να διαχειριστεί την πρόσβαση root και να δεχτεί προτροπές αίτημάτων</string>
<string name="user_indepenent_summary">Κάθε χρήστης έχει τους δικούς του ξεχωριστούς κανόνες root</string>
<string name="user_indepenent_summary">Κάθε χρήστης έχει τους δικούς του ξεχωριστούς κανόνες root</string>
<string name="mount_namespace_mode">Λειτουργία προσάρτησης χώρου ονομάτων</string>
<string name="settings_ns_global">Καθολικός Χώρος Ονομάτων</string>
@@ -199,7 +198,7 @@
<string name="progress_channel">Ειδοποιήσεις προόδου</string>
<string name="download_complete">Η λήψη ολοκληρώθηκε</string>
<string name="download_file_error">Σφάλμα στη λήψη του αρχείου</string>
<string name="magisk_update_title">Νέα Ενημέρωση Magisk Διαθέσιμη!</string>
<string name="magisk_update_title">Νέα Ενημέρωση Magisk Διαθέσιμη!</string>
<!--Toasts, Dialogs-->
<string name="yes">Ναι</string>
@@ -232,7 +231,7 @@
<string name="external_rw_permission_denied">Παραχωρήστε άδεια αποθήκευσης για να ενεργοποιήσετε αυτήν τη λειτουργία</string>
<string name="add_shortcut_title">Προσθέστε συντόμευση στην αρχική οθόνη</string>
<string name="add_shortcut_msg">Μετά την απόκρυψη αυτής της εφαρμογής, το όνομα και το εικονίδιο της ενδέχεται να είναι δύσκολο να αναγνωριστούν. Θέλετε να προσθέσετε μια όμορφη συντόμευση στην αρχική οθόνη;</string>
<string name="app_not_found">Δεν βρέθηκε εφαρμογή που να χειρίζεται αυτήν την ενέργεια</string>
</resources>
</resources>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Personalizado</string>
<string name="settings_update_custom_msg">Insertar una URL personalizada</string>
<string name="settings_magiskhide_summary">Ocultar Magisk de varias detecciones</string>
<string name="settings_hosts_title">Systemless Hosts</string>
<string name="settings_hosts_summary">Soporte para bloqueadores de publicidad fuera de la partición system</string>
<string name="settings_hosts_toast">Módulo systemless hosts agregado</string>

View File

@@ -137,7 +137,6 @@
<string name="settings_update_beta">Beeta</string>
<string name="settings_update_custom">Kohandatud</string>
<string name="settings_update_custom_msg">Sisesta kohandatud URL</string>
<string name="settings_magiskhide_summary">Peida Magisk erinevate tuvastuste eest</string>
<string name="settings_hosts_title">Süsteemivaba hosts</string>
<string name="settings_hosts_summary">Süsteemivaba hosts-tugi reklaamiblokeerijatest rakendustele</string>
<string name="settings_hosts_toast">Süsteemivaba hostsi moodul lisatud</string>

View File

@@ -134,7 +134,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Custom Channel</string>
<string name="settings_update_custom_msg">اضافه کردن یک URL سفارشی</string>
<string name="settings_magiskhide_summary">پنهان کردن Magisk از اشکال مختلف</string>
<string name="settings_hosts_title">نصب بدون حذف یا تغییر در فایل ها</string>
<string name="settings_hosts_summary">نصب بدون حذف یا تغییر در فایل ها رای ساپورت از برنامه های Adblock</string>
<string name="settings_hosts_toast">ماژول نصب بدون حذف یا تغییر در فایل ها اضافه شد</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">Bêta</string>
<string name="settings_update_custom">Canal personnalisé</string>
<string name="settings_update_custom_msg">Saisissez une URL personnalisée</string>
<string name="settings_magiskhide_summary">Rendre Magisk invisible face à diverses formes de détection.</string>
<string name="settings_hosts_title">Fichier dhôtes hors partition système</string>
<string name="settings_hosts_summary">Utilisation dun fichier dhôtes hors de la partition système pour les applications de blocage de publicité.</string>
<string name="settings_hosts_toast">Ajout dun module pour fichier hosts hors système</string>

View File

@@ -139,7 +139,6 @@
<string name="settings_update_beta">बीटा</string>
<string name="settings_update_custom">कस्टम चैनल</string>
<string name="settings_update_custom_msg">एक कस्टम URL डालें</string>
<string name="settings_magiskhide_summary">विभिन्न रूप की खोजों से बचने के लिए मैजिस्क को छिपाएं</string>
<string name="settings_hosts_title">सिस्टमलेस होस्ट</string>
<string name="settings_hosts_summary">Adblock ऐप्स के लिए सिस्टमलेस होस्ट सपोर्ट</string>
<string name="settings_hosts_toast">सिस्टमलेस होस्ट मॉड्यूल जोड़ा गया</string>

View File

@@ -137,7 +137,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Vlastiti kanal</string>
<string name="settings_update_custom_msg">Umetnite prilagođeni URL</string>
<string name="settings_magiskhide_summary">Sakrij Magisk od različitih oblika otkrivanja</string>
<string name="settings_hosts_title">Hostovi bez sistema</string>
<string name="settings_hosts_summary">Podrška za hostove bez sistema za Adblock aplikacije</string>
<string name="settings_hosts_toast">Dodan je modul hosta bez sistema</string>

View File

@@ -140,7 +140,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Kanal khusus</string>
<string name="settings_update_custom_msg">Masukkan URL khusus</string>
<string name="settings_magiskhide_summary">Sembunyikan Magisk dari berbagai bentuk pendeteksian</string>
<string name="settings_hosts_title">Host systemless</string>
<string name="settings_hosts_summary">Dukungan host secara systemless untuk aplikasi pemblokir iklan</string>
<string name="settings_hosts_toast">Menambahkan modul host systemless</string>

View File

@@ -141,7 +141,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Canale personalizzato</string>
<string name="settings_update_custom_msg">Inserisci un URL personalizzato</string>
<string name="settings_magiskhide_summary">Nasconde Magisk da numerosi sistemi di rilevazione</string>
<string name="settings_hosts_title">File hosts systemless</string>
<string name="settings_hosts_summary">Supporto al file hosts systemless per le app che bloccano le pubblicità</string>
<string name="settings_hosts_toast">Aggiunto modulo per il supporto al file hosts systemless</string>

View File

@@ -144,7 +144,6 @@
<string name="settings_update_beta">בטא</string>
<string name="settings_update_custom">ערוץ מותאם אישית</string>
<string name="settings_update_custom_msg">הזן כתובת מותאמת אישית</string>
<string name="settings_magiskhide_summary">הסתר את Magisk מצורות זיהוי שונות</string>
<string name="settings_hosts_title">מארחים חסרי מערכת</string>
<string name="settings_hosts_summary">מארחים חסרי מערכת תומכים ביישומים חוסמי פרסומות</string>
<string name="settings_hosts_toast">הוסף מודול מארחים חסרי מערכת</string>
@@ -190,7 +189,7 @@
<string name="global_summary">כלל חיבורי השורש משתמשים במרחב שם הגלובלי</string>
<string name="requester_summary">חיבורי השורש יירשו את מרחב השם של המבקש</string>
<string name="isolate_summary">לכל חיבור שורש יהיה מרחב שם מבודד</string>
<!--Notifications-->
<string name="update_channel">עדכוני Magisk</string>
<string name="progress_channel">התראות התקדמות</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">ベータ版</string>
<string name="settings_update_custom">カスタム</string>
<string name="settings_update_custom_msg">カスタム URL を入力</string>
<string name="settings_magiskhide_summary">さまざまな検出方法から Magisk を隠します</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">広告ブロックアプリのための Systemless hosts サポートを有効化します</string>
<string name="settings_hosts_toast">Systemless hosts モジュールを追加しました</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">ბეტა</string>
<string name="settings_update_custom">პერსონალიზირებული</string>
<string name="settings_update_custom_msg">სხვა URL-ის ჩასმა</string>
<string name="settings_magiskhide_summary">Magisk-ის დამალვა დაცვის ხერხებისგან</string>
<string name="settings_hosts_title">გარესისტემური ჰოსტები</string>
<string name="settings_hosts_summary">გარესისტემური ჰოსტები Adblock-ებისთვის</string>
<string name="settings_hosts_toast">გარესისტემური ჰოსტების მოდული დამატებულია</string>

View File

@@ -137,7 +137,6 @@
<string name="settings_update_beta">베타</string>
<string name="settings_update_custom">사용자 지정</string>
<string name="settings_update_custom_msg">사용자 지정 URL 입력</string>
<string name="settings_magiskhide_summary">다양한 감지로부터 Magisk를 숨깁니다.</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">광고 차단 앱에서 사용하는 systemless hosts를 지원합니다.</string>
<string name="settings_hosts_toast">Systemless hosts 모듈 추가됨</string>

View File

@@ -74,7 +74,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Pasirinktiniai</string>
<string name="settings_update_custom_msg">Įvesti pasirinktinį URL</string>
<string name="settings_magiskhide_summary">Paslėpti Magisk nuo įvairių susekimų</string>
<string name="settings_hosts_title">Sistemos padejėjai</string>
<string name="settings_hosts_summary">Įgalinti sistemos padejėjus Adblock programėlėms</string>

View File

@@ -86,7 +86,6 @@
<string name="settings_update_beta">Бета</string>
<string name="settings_update_custom">Прилагодено</string>
<string name="settings_update_custom_msg">Внеси прилагоден URL линк</string>
<string name="settings_magiskhide_summary">Сокриј го Magisk од различни форми на откривање.</string>
<string name="settings_hosts_title">Несистемски хостови</string>
<string name="settings_hosts_summary">Поддршка за несистемски хостови за Adblock апликации.</string>
<string name="settings_hosts_toast">Додаден е модул за несистемски хостови</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Egendefinert kanal</string>
<string name="settings_update_custom_msg">Sett inn en egendefinert nettadresse</string>
<string name="settings_magiskhide_summary">Skjul Magisk fra å bli oppdaget</string>
<string name="settings_hosts_title">Systemløs vertsfil</string>
<string name="settings_hosts_summary">Systemløs vertsfilstøtte for reklameblokkeringsprogrammer</string>
<string name="settings_hosts_toast">La til modul for systemløs vertsfil</string>

View File

@@ -136,7 +136,6 @@
<string name="settings_update_beta">Bèta</string>
<string name="settings_update_custom">Aangepast</string>
<string name="settings_update_custom_msg">Voer een aangepaste url in</string>
<string name="settings_magiskhide_summary">Maak Magisk onzichtbaar voor detectiesystemen.</string>
<string name="settings_hosts_title">Systeemloze hosts</string>
<string name="settings_hosts_summary">Systeemloze hosts-ondersteuning voor advertentieblokkeringsapps.</string>
<string name="settings_hosts_toast">De systeemloze hosts-module is toegevoegd</string>

View File

@@ -139,7 +139,6 @@
<string name="settings_update_beta">ਬੀਟਾ</string>
<string name="settings_update_custom">ਕਸਟਮ ਚੈਨਲ</string>
<string name="settings_update_custom_msg">ਇੱਕ ਕਸਟਮ URL ਦਾਖਲ ਕਰੋ</string>
<string name="settings_magiskhide_summary">ਵੱਖ ਵੱਖ ਕਿਸਮਾਂ ਦੀਆਂ ਖੋਜਾਂ ਤੋਂ ਬਚਣ ਲਈ ਮੈਜਿਸਕ ਨੂੰ ਓਹਲੇ ਕਰੋ</string>
<string name="settings_hosts_title">Systemless ਹੋਸਟ</string>
<string name="settings_hosts_summary">Adblock ਐਪਸ ਲਈ Systemless ਹੋਸਟ ਦੀ ਸਹਿਯੋਗ</string>
<string name="settings_hosts_toast">Systemless ਹੋਸਟ ਮੋਡੀਊਲ ਸ਼ਾਮਲ ਕੀਤਾ ਗਿਆ</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Własny kanał</string>
<string name="settings_update_custom_msg">Wprowadź adres URL własnego kanału</string>
<string name="settings_magiskhide_summary">Ukryj Magisk przed różnymi formami detekcji</string>
<string name="settings_hosts_title">Hosty Systemless</string>
<string name="settings_hosts_summary">Wsparcie hostów Systemless dla aplikacji typu Adblock</string>
<string name="settings_hosts_toast">Dodano moduł hostów Systemless</string>

View File

@@ -145,7 +145,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Canal personalizado</string>
<string name="settings_update_custom_msg">Insira um URL personalizado</string>
<string name="settings_magiskhide_summary">Esconda o Magisk de várias formas de detecção</string>
<string name="settings_hosts_title">Hosts sem sistema</string>
<string name="settings_hosts_summary">Suporte de hosts sem sistema para aplicativos Adblock</string>
<string name="settings_hosts_toast">Adicionado módulo de hosts sem sistema</string>

View File

@@ -56,7 +56,6 @@
<string name="system_default">(Padrão do Sistema)</string>
<string name="settings_update_stable">Estável</string>
<string name="settings_update_beta">Beta</string>
<string name="settings_magiskhide_summary">Oculta Magisk de várias deteções</string>
<string name="settings_hosts_title">Ativar systemless hosts</string>
<string name="settings_hosts_summary">Suporte de systemless para aplicações Adblock</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Canal personalizat</string>
<string name="settings_update_custom_msg">Inserează un URL personalizat</string>
<string name="settings_magiskhide_summary">Ascunde Magisk de diferite forme de detectare</string>
<string name="settings_hosts_title">Fișier hosts în afara partiției system</string>
<string name="settings_hosts_summary">Suport pentru fișierul hosts în afara partiției system, în cazul aplicațiilor adblock</string>
<string name="settings_hosts_toast">Modulul pentru fișierul hosts în afara partiției system, adăugat</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">Beta канал</string>
<string name="settings_update_custom">Сторонний канал</string>
<string name="settings_update_custom_msg">Укажите ссылку</string>
<string name="settings_magiskhide_summary">Скрывать Magisk от различных обнаружений</string>
<string name="settings_hosts_title">Внесистемный hosts файл</string>
<string name="settings_hosts_summary">Поддержка внесистемного hosts файла для приложений, блокирующих рекламу</string>
<string name="settings_hosts_toast">Добавлен модуль внесистемного hosts файла</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Vlastný kanál</string>
<string name="settings_update_custom_msg">Zadajte vlastnú URL</string>
<string name="settings_magiskhide_summary">Skryje Magisk pred rôznymi formami detekcie</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">Podpora pre Adblock aplikácie so systemless hosts</string>
<string name="settings_hosts_toast">Pridaný modul systemless hosts</string>

View File

@@ -140,7 +140,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Kanali i personalizuar</string>
<string name="settings_update_custom_msg">Vendos një URL të personalizuar</string>
<string name="settings_magiskhide_summary">Fshih Magisk nga forma të ndryshme të zbulimit</string>
<string name="settings_hosts_title">Pritës pa sistem</string>
<string name="settings_hosts_summary">Mbështetja e hostëve pa sistem për aplikacionet Adblock</string>
<string name="settings_hosts_toast">Moduli i pritur i sistemit pa sistem</string>

View File

@@ -63,7 +63,6 @@
<string name="settings_update_beta">Бета</string>
<string name="settings_update_custom">По наруџби</string>
<string name="settings_update_custom_msg">Унеси наруџбени УРЛ</string>
<string name="settings_magiskhide_summary">Сакриј Магиск од разних детекција</string>
<string name="settings_hosts_title">Без-системски домаћини (hosts)</string>
<string name="settings_hosts_summary">Подршка без-системских домаћина за апликације за блокирање реклама</string>

View File

@@ -9,7 +9,7 @@
<string name="section_home">Hem</string>
<string name="section_theme">Tema</string>
<string name="safetynet">SafetyNet</string>
<!--Home-->
<string name="no_connection">Ingen anslutning tillgänglig</string>
<string name="app_changelog">Ändringslogg</string>
@@ -145,7 +145,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Anpassad kanal</string>
<string name="settings_update_custom_msg">Lägg till en anpassad URL</string>
<string name="settings_magiskhide_summary">Dölj Magisk från att bli upptäckt</string>
<string name="settings_hosts_title">Systemfri hosts</string>
<string name="settings_hosts_summary">Stöd för Adblock-appar med systemfri hosts-fil</string>
<string name="settings_hosts_toast">Lagt till modul för systemfri hosts-fil</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">தற்காலிகமானது</string>
<string name="settings_update_custom">தனிப்பயன் வழி</string>
<string name="settings_update_custom_msg">தனிப்பயன் URL ஐ உள்ளிடவும்</string>
<string name="settings_magiskhide_summary">பல்வேறு வகையான கண்டறிதலில் இருந்து மேகிஸ்கை மறைக்கவும்</string>
<string name="settings_hosts_title">கணினி இல்லாத ஹோஸ்ட்கள்</string>
<string name="settings_hosts_summary">கணினி இல்லாத ஹோஸ்ட்கள் Adblock பயன்பாடுகளுக்கு ஆதரவளிக்கின்றன</string>
<string name="settings_hosts_toast">கணினி இல்லாத ஹோஸ்ட்கள் தொகுதி சேர்க்கப்பட்டது</string>

View File

@@ -79,7 +79,6 @@
<string name="settings_update_beta">เบต้า</string>
<string name="settings_update_custom">กำหนดเอง</string>
<string name="settings_update_custom_msg">ใส่ URL</string>
<string name="settings_magiskhide_summary">ซ่อน Magisk จากการตรวจสอบในหลากหลายรูปแบบ</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">การรองรับ Systemless hosts เพื่อแอพ Adblock ต่างๆ</string>
<string name="settings_hosts_toast">ทำการเพิ่มโมดูล systemless hosts แล้ว</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Özel Kanal</string>
<string name="settings_update_custom_msg">Özel URL ekleyin</string>
<string name="settings_magiskhide_summary">Magisk\'i çeşitli algılamalardan gizle</string>
<string name="settings_hosts_title">Sistemsiz hosts</string>
<string name="settings_hosts_summary">Reklam engelleme uygulamaları için sistemsiz hosts desteği</string>
<string name="settings_hosts_toast">Sistemsiz hosts modülü eklendi</string>

View File

@@ -140,7 +140,6 @@
<string name="settings_update_beta">Бета реліз</string>
<string name="settings_update_custom">Власний</string>
<string name="settings_update_custom_msg">Вставте власний URL</string>
<string name="settings_magiskhide_summary">Приховати Magisk від різних форм виявлень</string>
<string name="settings_hosts_title">Позасистемні хости</string>
<string name="settings_hosts_summary">Підтримка позасистемних хостів для застосунків блокування реклами</string>
<string name="settings_hosts_toast">Додано модуль позасистемних хостів</string>

View File

@@ -77,7 +77,6 @@
<string name="settings_update_beta">Dùng thử</string>
<string name="settings_update_custom">Tuỳ chỉnh</string>
<string name="settings_update_custom_msg">Chèn URL tuỳ chỉnh</string>
<string name="settings_magiskhide_summary">Ẩn Magisk khỏi nhiều phương thức phát hiện</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">Systemless hosts hỗ trợ các ứng dụng chặn quảng cáo</string>
<string name="settings_hosts_toast">Mô-đun được thêm vào systemless hosts</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">测试版</string>
<string name="settings_update_custom">自定义通道</string>
<string name="settings_update_custom_msg">自定义通道网址</string>
<string name="settings_magiskhide_summary">隐藏 Magisk 避免被检测</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">为广告屏蔽应用提供 Systemless hosts 支持</string>
<string name="settings_hosts_toast">已添加 systemless hosts 模块</string>

View File

@@ -146,7 +146,6 @@
<string name="settings_update_beta">測試版</string>
<string name="settings_update_custom">自訂頻道</string>
<string name="settings_update_custom_msg">輸入一個自訂的網址</string>
<string name="settings_magiskhide_summary">隱藏 Magisk 以避免被偵測</string>
<string name="settings_hosts_title">主機Hosts模組化</string>
<string name="settings_hosts_summary">為廣告阻擋程式提供主機模組</string>
<string name="settings_hosts_toast">已安裝主機模組</string>

View File

@@ -3,7 +3,6 @@
<!-- Static strings -->
<string name="magisk" translatable="false">Magisk</string>
<string name="magiskhide" translatable="false">MagiskHide</string>
<string name="empty" translatable="false"/>
<string name="topjohnwu" translatable="false">\@topjohnwu</string>

View File

@@ -10,6 +10,7 @@
<string name="section_home">Home</string>
<string name="section_theme">Themes</string>
<string name="safetynet">SafetyNet</string>
<string name="denylist">DenyList</string>
<!--Home-->
<string name="no_connection">No connection available</string>
@@ -146,7 +147,7 @@
<string name="settings_update_beta">Beta</string>
<string name="settings_update_custom">Custom Channel</string>
<string name="settings_update_custom_msg">Insert a custom URL</string>
<string name="settings_magiskhide_summary">Hide Magisk from various forms of detection</string>
<string name="settings_denylist_summary">Processes on the denylist will have all Magisk modifications reverted</string>
<string name="settings_hosts_title">Systemless hosts</string>
<string name="settings_hosts_summary">Systemless hosts support for Adblock apps</string>
<string name="settings_hosts_toast">Added systemless hosts module</string>