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