diff --git a/app/src/main/java/ru/karasevm/privatednstoggle/DnsTileService.kt b/app/src/main/java/ru/karasevm/privatednstoggle/DnsTileService.kt index ad16ece..746c025 100644 --- a/app/src/main/java/ru/karasevm/privatednstoggle/DnsTileService.kt +++ b/app/src/main/java/ru/karasevm/privatednstoggle/DnsTileService.kt @@ -7,6 +7,7 @@ import android.service.quicksettings.TileService import ru.karasevm.privatednstoggle.utils.PreferenceHelper import ru.karasevm.privatednstoggle.utils.PreferenceHelper.autoMode import ru.karasevm.privatednstoggle.utils.PreferenceHelper.dns_servers +import ru.karasevm.privatednstoggle.utils.PreferenceHelper.requireUnlock import ru.karasevm.privatednstoggle.utils.PrivateDNSUtils import ru.karasevm.privatednstoggle.utils.PrivateDNSUtils.AUTO_MODE_OPTION_AUTO import ru.karasevm.privatednstoggle.utils.PrivateDNSUtils.AUTO_MODE_OPTION_OFF_AUTO @@ -27,17 +28,14 @@ class DnsTileService : TileService() { qsTile.updateTile() } - override fun onClick() { - super.onClick() - if (!checkForPermission(this)) { - return - } - + /** + * Set's the state of the tile to the next state + */ + private fun cycleState() { val dnsMode = Settings.Global.getString(contentResolver, "private_dns_mode") val dnsProvider = Settings.Global.getString(contentResolver, "private_dns_specifier") val sharedPrefs = PreferenceHelper.defaultPreference(this) - if (dnsMode.equals(DNS_MODE_OFF, ignoreCase = true)) { if (sharedPrefs.autoMode == AUTO_MODE_OPTION_AUTO || sharedPrefs.autoMode == AUTO_MODE_OPTION_OFF_AUTO) { changeTileState( @@ -101,6 +99,21 @@ class DnsTileService : TileService() { ) } } + } + + override fun onClick() { + super.onClick() + if (!checkForPermission(this)) { + return + } + val sharedPrefs = PreferenceHelper.defaultPreference(this) + val requireUnlock = sharedPrefs.requireUnlock + if (isLocked && requireUnlock) { + unlockAndRun(this::cycleState) + } else { + cycleState() + } + } @@ -150,7 +163,7 @@ class DnsTileService : TileService() { } /** - * Updates tile to specified parameters + * Updates tile to specified parameters * * @param tile tile to update * @param state tile state diff --git a/app/src/main/java/ru/karasevm/privatednstoggle/OptionsDialogFragment.kt b/app/src/main/java/ru/karasevm/privatednstoggle/OptionsDialogFragment.kt index 622c33b..24abbfa 100644 --- a/app/src/main/java/ru/karasevm/privatednstoggle/OptionsDialogFragment.kt +++ b/app/src/main/java/ru/karasevm/privatednstoggle/OptionsDialogFragment.kt @@ -7,6 +7,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder import ru.karasevm.privatednstoggle.databinding.DialogOptionsBinding import ru.karasevm.privatednstoggle.utils.PreferenceHelper import ru.karasevm.privatednstoggle.utils.PreferenceHelper.autoMode +import ru.karasevm.privatednstoggle.utils.PreferenceHelper.requireUnlock import ru.karasevm.privatednstoggle.utils.PrivateDNSUtils class OptionsDialogFragment : DialogFragment() { @@ -46,5 +47,11 @@ class OptionsDialogFragment : DialogFragment() { PrivateDNSUtils.AUTO_MODE_OPTION_OFF_AUTO } } + + val requireUnlock = sharedPrefs.requireUnlock + binding.requireUnlockSwitch.isChecked = requireUnlock + binding.requireUnlockSwitch.setOnCheckedChangeListener { _, isChecked -> + sharedPrefs.requireUnlock = isChecked + } } } \ No newline at end of file diff --git a/app/src/main/java/ru/karasevm/privatednstoggle/utils/SharedPrefUtils.kt b/app/src/main/java/ru/karasevm/privatednstoggle/utils/SharedPrefUtils.kt index cff93f9..87cfa96 100644 --- a/app/src/main/java/ru/karasevm/privatednstoggle/utils/SharedPrefUtils.kt +++ b/app/src/main/java/ru/karasevm/privatednstoggle/utils/SharedPrefUtils.kt @@ -7,6 +7,8 @@ object PreferenceHelper { private const val DNS_SERVERS = "dns_servers" private const val AUTO_MODE = "auto_mode" + private const val REQUIRE_UNLOCK = "require_unlock" + fun defaultPreference(context: Context): SharedPreferences = context.getSharedPreferences("app_prefs", 0) @@ -44,4 +46,12 @@ object PreferenceHelper { } } + var SharedPreferences.requireUnlock + get() = getBoolean(REQUIRE_UNLOCK, false) + set(value) { + editMe { + it.put(REQUIRE_UNLOCK to value) + } + } + } diff --git a/app/src/main/res/layout/dialog_options.xml b/app/src/main/res/layout/dialog_options.xml index efe0048..b42bd71 100644 --- a/app/src/main/res/layout/dialog_options.xml +++ b/app/src/main/res/layout/dialog_options.xml @@ -1,35 +1,58 @@ - + android:orientation="vertical"> - + + + + + + + + + + + + + + + - - - - - - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5fe367e..c8fd5fa 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -26,4 +26,5 @@ Private DNS turned off Private DNS set to auto Private DNS set to %1$s + Require unlocking the device to change server \ No newline at end of file