Support for selection of only Private DNS in Option Dialog (#21)

This commit is contained in:
Praveen Kumar 2024-06-27 16:51:21 +05:30 committed by GitHub
parent 52fc30e96d
commit d9ad7d2030
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 49 additions and 42 deletions

View file

@ -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,

View file

@ -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
}
}

View file

@ -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"

View file

@ -38,6 +38,12 @@
android:layout_height="wrap_content"
android:text="@string/auto_option_off_and_auto" />
<RadioButton
android:id="@+id/autoOptionPrivate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/auto_option_only_private" />
</RadioGroup>

View file

@ -22,6 +22,7 @@
<string name="auto_option_only_off">Only off</string>
<string name="auto_option_only_auto">Only auto</string>
<string name="auto_option_off_and_auto">Off and auto</string>
<string name="auto_option_only_private">Only Private DNS</string>
<string name="open_app">Open app</string>
<string name="set_to_off_toast">Private DNS turned off</string>
<string name="set_to_auto_toast">Private DNS set to auto</string>