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