diff --git a/app/src/main/java/ru/karasevm/privatednstoggle/DnsTileService.kt b/app/src/main/java/ru/karasevm/privatednstoggle/DnsTileService.kt
index 746c025..40bc77f 100644
--- a/app/src/main/java/ru/karasevm/privatednstoggle/DnsTileService.kt
+++ b/app/src/main/java/ru/karasevm/privatednstoggle/DnsTileService.kt
@@ -11,6 +11,7 @@ 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
+import ru.karasevm.privatednstoggle.utils.PrivateDNSUtils.AUTO_MODE_OPTION_PRIVATE
import ru.karasevm.privatednstoggle.utils.PrivateDNSUtils.DNS_MODE_AUTO
import ru.karasevm.privatednstoggle.utils.PrivateDNSUtils.DNS_MODE_OFF
import ru.karasevm.privatednstoggle.utils.PrivateDNSUtils.DNS_MODE_PRIVATE
@@ -38,6 +39,43 @@ class DnsTileService : TileService() {
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) {
+ changeDNSServer(DNS_MODE_AUTO, dnsProvider)
+ } else {
+ changeDNSServer(DNS_MODE_PRIVATE, dnsProvider)
+ }
+
+ } else if (dnsMode == null || dnsMode.equals(DNS_MODE_AUTO, ignoreCase = true)) {
+ changeDNSServer(DNS_MODE_PRIVATE, null)
+ } else if (dnsMode.equals(DNS_MODE_PRIVATE, ignoreCase = true)) {
+ if (getNextAddress(dnsProvider) == null) {
+ if (sharedPrefs.autoMode == AUTO_MODE_OPTION_PRIVATE) {
+ changeDNSServer(DNS_MODE_PRIVATE, null)
+ } else {
+ if (sharedPrefs.autoMode == AUTO_MODE_OPTION_AUTO) {
+ changeDNSServer(DNS_MODE_AUTO,dnsProvider)
+ } else {
+ changeDNSServer(DNS_MODE_OFF, dnsProvider)
+ }
+ }
+ } else {
+ changeDNSServer(DNS_MODE_PRIVATE, dnsProvider)
+ }
+ }
+ }
+
+ private fun changeDNSServer(server: String, dnsProvider: String?) {
+ when (server) {
+ DNS_MODE_OFF -> {
+ changeTileState(
+ qsTile,
+ Tile.STATE_INACTIVE,
+ getString(R.string.dns_off),
+ R.drawable.ic_off_black_24dp,
+ DNS_MODE_OFF,
+ getNextAddress(dnsProvider)
+ )
+ }
+ DNS_MODE_AUTO -> {
changeTileState(
qsTile,
Tile.STATE_INACTIVE,
@@ -46,49 +84,8 @@ class DnsTileService : TileService() {
DNS_MODE_AUTO,
dnsProvider
)
- } else {
- changeTileState(
- qsTile,
- Tile.STATE_ACTIVE,
- getNextAddress(dnsProvider),
- R.drawable.ic_private_black_24dp,
- DNS_MODE_PRIVATE,
- getNextAddress(dnsProvider)
- )
}
-
- } else if (dnsMode == null || dnsMode.equals(DNS_MODE_AUTO, ignoreCase = true)) {
- changeTileState(
- qsTile,
- Tile.STATE_ACTIVE,
- getNextAddress(null),
- R.drawable.ic_private_black_24dp,
- DNS_MODE_PRIVATE,
- getNextAddress(null)
- )
- } else if (dnsMode.equals(DNS_MODE_PRIVATE, ignoreCase = true)) {
- if (getNextAddress(dnsProvider) == null) {
- if (sharedPrefs.autoMode == AUTO_MODE_OPTION_AUTO) {
- changeTileState(
- qsTile,
- Tile.STATE_INACTIVE,
- getString(R.string.dns_auto),
- R.drawable.ic_auto_black_24dp,
- DNS_MODE_AUTO,
- dnsProvider
- )
- } else {
- changeTileState(
- qsTile,
- Tile.STATE_INACTIVE,
- getString(R.string.dns_off),
- R.drawable.ic_off_black_24dp,
- DNS_MODE_OFF,
- getNextAddress(dnsProvider)
- )
- }
-
- } else {
+ DNS_MODE_PRIVATE -> {
changeTileState(
qsTile,
Tile.STATE_ACTIVE,
diff --git a/app/src/main/java/ru/karasevm/privatednstoggle/OptionsDialogFragment.kt b/app/src/main/java/ru/karasevm/privatednstoggle/OptionsDialogFragment.kt
index 24abbfa..2a074ea 100644
--- a/app/src/main/java/ru/karasevm/privatednstoggle/OptionsDialogFragment.kt
+++ b/app/src/main/java/ru/karasevm/privatednstoggle/OptionsDialogFragment.kt
@@ -38,6 +38,7 @@ class OptionsDialogFragment : DialogFragment() {
PrivateDNSUtils.AUTO_MODE_OPTION_OFF -> binding.autoOptionRadioGroup.check(R.id.autoOptionOff)
PrivateDNSUtils.AUTO_MODE_OPTION_AUTO -> binding.autoOptionRadioGroup.check(R.id.autoOptionAuto)
PrivateDNSUtils.AUTO_MODE_OPTION_OFF_AUTO -> binding.autoOptionRadioGroup.check(R.id.autoOptionOffAuto)
+ PrivateDNSUtils.AUTO_MODE_OPTION_PRIVATE -> binding.autoOptionRadioGroup.check(R.id.autoOptionPrivate)
}
binding.autoOptionRadioGroup.setOnCheckedChangeListener { _, checkedId ->
when (checkedId) {
@@ -45,6 +46,7 @@ class OptionsDialogFragment : DialogFragment() {
R.id.autoOptionAuto -> sharedPrefs.autoMode = PrivateDNSUtils.AUTO_MODE_OPTION_AUTO
R.id.autoOptionOffAuto -> sharedPrefs.autoMode =
PrivateDNSUtils.AUTO_MODE_OPTION_OFF_AUTO
+ R.id.autoOptionPrivate -> sharedPrefs.autoMode = PrivateDNSUtils.AUTO_MODE_OPTION_PRIVATE
}
}
diff --git a/app/src/main/java/ru/karasevm/privatednstoggle/utils/PrivateDNSUtils.kt b/app/src/main/java/ru/karasevm/privatednstoggle/utils/PrivateDNSUtils.kt
index 5f9459d..79ae536 100644
--- a/app/src/main/java/ru/karasevm/privatednstoggle/utils/PrivateDNSUtils.kt
+++ b/app/src/main/java/ru/karasevm/privatednstoggle/utils/PrivateDNSUtils.kt
@@ -18,6 +18,7 @@ object PrivateDNSUtils {
const val AUTO_MODE_OPTION_OFF = 0
const val AUTO_MODE_OPTION_AUTO = 1
const val AUTO_MODE_OPTION_OFF_AUTO = 2
+ const val AUTO_MODE_OPTION_PRIVATE = 3
private const val PRIVATE_DNS_MODE = "private_dns_mode"
private const val PRIVATE_DNS_PROVIDER = "private_dns_specifier"
diff --git a/app/src/main/res/layout/dialog_options.xml b/app/src/main/res/layout/dialog_options.xml
index b42bd71..e207954 100644
--- a/app/src/main/res/layout/dialog_options.xml
+++ b/app/src/main/res/layout/dialog_options.xml
@@ -38,6 +38,12 @@
android:layout_height="wrap_content"
android:text="@string/auto_option_off_and_auto" />
+
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index c8fd5fa..be87a7e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -22,6 +22,7 @@
Only off
Only auto
Off and auto
+ Only Private DNS
Open app
Private DNS turned off
Private DNS set to auto