Add risky package warning with bypass switch

This commit is contained in:
frknkrc44 2025-09-01 20:32:26 +03:00 • committed by Cuynu
commit 3b1fb478ca
6 changed files with 41 additions and 1 deletions

View file

@ -19,6 +19,7 @@ object PrefManager {
private const val PREF_THEME_COLOR = "theme_color"
private const val PREF_HIDE_ICON = "hide_icon"
private const val PREF_BYPASS_RISKY_PACKAGE_WARNING = "bypass_risky_package_warning"
private const val PREF_APP_FILTER_SHOW_SYSTEM = "app_filter_show_system"
private const val PREF_APP_FILTER_SORT_METHOD = "app_filter_sort_method"
@ -67,6 +68,10 @@ object PrefManager {
hmaApp.packageManager.setComponentEnabledSetting(component, status, PackageManager.DONT_KILL_APP)
}
var bypassRiskyPackageWarning: Boolean
get() = pref.getBoolean(PREF_BYPASS_RISKY_PACKAGE_WARNING, false)
set(value) = pref.edit().putBoolean(PREF_BYPASS_RISKY_PACKAGE_WARNING, value).apply()
var appFilter_showSystem: Boolean
get() = pref.getBoolean(PREF_APP_FILTER_SHOW_SYSTEM, false)
set(value) = pref.edit().putBoolean(PREF_APP_FILTER_SHOW_SYSTEM, value).apply()

View file

@ -1,16 +1,35 @@
package icu.nullptr.hidemyapplist.ui.adapter
import android.view.ViewGroup
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import icu.nullptr.hidemyapplist.common.Constants.GMS_PACKAGE_NAME
import icu.nullptr.hidemyapplist.common.Constants.GSF_PACKAGE_NAME
import icu.nullptr.hidemyapplist.service.ConfigManager
import icu.nullptr.hidemyapplist.service.PrefManager
import icu.nullptr.hidemyapplist.ui.view.AppItemView
import org.frknkrc44.hma_oss.R
class AppManageAdapter(
private val onItemClickListener: (String) -> Unit
) : AppSelectAdapter() {
private val riskyPackages = arrayOf(GMS_PACKAGE_NAME, GSF_PACKAGE_NAME)
inner class ViewHolder(view: AppItemView) : AppSelectAdapter.ViewHolder(view) {
init {
view.setOnClickListener {
if (!PrefManager.bypassRiskyPackageWarning && riskyPackages.contains(view.binding.packageName.text)) {
MaterialAlertDialogBuilder(view.context)
.setTitle(R.string.app_warning_risky_package_title)
.setMessage(R.string.app_warning_risky_package_desc)
.setNegativeButton(android.R.string.cancel, null)
.setPositiveButton(android.R.string.ok) { _, _ ->
onItemClickListener.invoke(filteredList[absoluteAdapterPosition])
}
.show()
return@setOnClickListener
}
onItemClickListener.invoke(filteredList[absoluteAdapterPosition])
}
}

View file

@ -97,6 +97,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings), PreferenceFragmen
"blackDarkTheme" -> PrefManager.blackDarkTheme
"detailLog" -> ConfigManager.detailLog
"hideIcon" -> PrefManager.hideIcon
"bypassRiskyPackageWarning" -> PrefManager.bypassRiskyPackageWarning
"appDataIsolation" -> CommonUtils.isAppDataIsolationEnabled
"voldAppDataIsolation" -> CommonUtils.isVoldAppDataIsolationEnabled
"forceMountData" -> ConfigManager.forceMountData
@ -121,6 +122,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings), PreferenceFragmen
"detailLog" -> ConfigManager.detailLog = value
"forceMountData" -> ConfigManager.forceMountData = value
"hideIcon" -> PrefManager.hideIcon = value
"bypassRiskyPackageWarning" -> PrefManager.bypassRiskyPackageWarning = value
"appDataIsolation" -> Unit
"voldAppDataIsolation" -> Unit
else -> throw IllegalArgumentException("Invalid key: $key")
@ -267,6 +269,11 @@ class SettingsFragment : Fragment(R.layout.fragment_settings), PreferenceFragmen
configureDataIsolation()
findPreference<SwitchPreferenceCompat>("bypassRiskyPackageWarning")?.setOnPreferenceChangeListener { _, newValue ->
activity?.recreate()
true
}
findPreference<Preference>("stopSystemService")?.setOnPreferenceClickListener {
if (ServiceClient.serviceVersion != 0) {
MaterialAlertDialogBuilder(requireContext())

View file

@ -15,7 +15,7 @@ class AppItemView @JvmOverloads constructor(
defStyleRes: Int = 0
) : LinearLayout(context, attrs, defStyleAttr, defStyleRes) {
private val binding by viewBinding<AppItemViewBinding>(createMethod = CreateMethod.INFLATE)
val binding by viewBinding<AppItemViewBinding>(createMethod = CreateMethod.INFLATE)
var showEnabled: Boolean
get() = binding.enabled.visibility == VISIBLE

View file

@ -94,6 +94,8 @@
<string name="app_settings_preset_using">Using %d settings presets</string>
<string name="app_extra_apps_visible_count">%d additional apps visible</string>
<string name="app_extra_apps_invisible_count">%d additional apps invisible</string>
<string name="app_warning_risky_package_title">Risky package</string>
<string name="app_warning_risky_package_desc">This package is marked as risky and you can cause issues on hidden apps. Do you want to continue?</string>
<string name="app_warning_risky_package_title">Risky package</string>
@ -142,6 +144,8 @@
<string name="settings_max_log_size">Logger buffer sizes</string>
<string name="settings_hide_icon">Hide module icon in launcher</string>
<string name="settings_hide_icon_summary">You can still open the app in Xposed manager</string>
<string name="settings_bypass_risky_package_warning">Bypass risky package warning</string>
<string name="settings_bypass_risky_package_warning_summary">Note that the devs are not responsible for risky package related issues before or after you enabled this feature</string>
<string name="settings_language">Language</string>
<string name="settings_translate">Participate in translation</string>

View file

@ -33,6 +33,11 @@
</PreferenceCategory>
<PreferenceCategory android:title="@string/settings_module">
<SwitchPreferenceCompat
android:icon="@drawable/outline_bug_report_24"
android:key="bypassRiskyPackageWarning"
android:title="@string/settings_bypass_risky_package_warning"
android:summary="@string/settings_bypass_risky_package_warning_summary" />
<Preference
android:icon="@drawable/outline_storage_24"
android:key="dataIsolation"