Implement automatic dns option

This commit is contained in:
Maksim Karasev 2024-03-07 14:33:51 +03:00
parent 1b321af43e
commit 04cc8ccf02
5 changed files with 67 additions and 10 deletions

View file

@ -44,8 +44,22 @@ class DnsTileService : TileService() {
val dnsMode = Settings.Global.getString(contentResolver, "private_dns_mode")
val dnsProvider = Settings.Global.getString(contentResolver, "private_dns_specifier")
val sharedPrefs = this.getSharedPreferences("app_prefs", 0)
val autoEnabled = sharedPrefs.getBoolean("auto_enabled", false)
if (dnsMode.equals(DNS_MODE_OFF, ignoreCase = true)) {
// refreshTile(qsTile, Tile.STATE_INACTIVE, getString(R.string.dns_off), R.drawable.ic_off_black_24dp)
if (autoEnabled) {
changeTileState(
qsTile,
Tile.STATE_ACTIVE,
getString(R.string.dns_auto),
R.drawable.ic_auto_black_24dp,
DNS_MODE_AUTO,
dnsProvider
)
} else {
changeTileState(
qsTile,
Tile.STATE_ACTIVE,
@ -54,6 +68,9 @@ class DnsTileService : TileService() {
DNS_MODE_PRIVATE,
getNextAddress(dnsProvider)
)
}
} else if (dnsMode == null || dnsMode.equals(DNS_MODE_AUTO, ignoreCase = true)) {
changeTileState(
qsTile,
@ -101,13 +118,20 @@ class DnsTileService : TileService() {
getString(R.string.dns_off),
R.drawable.ic_off_black_24dp
)
} else if (dnsMode == null || dnsMode.equals(DNS_MODE_AUTO, ignoreCase = true)) {
} else if (dnsMode == null) {
refreshTile(
qsTile,
Tile.STATE_INACTIVE,
getString(R.string.dns_unknown),
R.drawable.ic_unknown_black_24dp
)
} else if (dnsMode.equals(DNS_MODE_AUTO, ignoreCase = true)) {
refreshTile(
qsTile,
Tile.STATE_ACTIVE,
getString(R.string.dns_auto),
R.drawable.ic_auto_black_24dp
)
} else if (dnsMode.equals(DNS_MODE_PRIVATE, ignoreCase = true)) {
val dnsProvider = Settings.Global.getString(contentResolver, "private_dns_specifier")
if (dnsProvider != null) {

View file

@ -56,7 +56,11 @@ class MainActivity : AppCompatActivity(), AddServerDialogFragment.NoticeDialogLi
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
val curVal = sharedPrefs.getBoolean("auto_enabled", false)
menuInflater.inflate(R.menu.menu_main, menu)
menu?.findItem(R.id.enable_auto)?.setChecked(curVal)
return true
}
@ -104,6 +108,16 @@ class MainActivity : AppCompatActivity(), AddServerDialogFragment.NoticeDialogLi
true
}
R.id.enable_auto -> {
if (!item.isChecked){
Toast.makeText(this, R.string.auto_mode_clarification, Toast.LENGTH_LONG).show()
}
sharedPrefs.edit().putBoolean("auto_enabled", !item.isChecked).apply()
item.setChecked(!item.isChecked)
true
}
else -> {
// If we got here, the user's action was not recognized.
// Invoke the superclass to handle it.

View file

@ -0,0 +1,13 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M13.925,14.369L10.121,14.369L9.267,16.738L8.032,16.738L11.499,7.659h1.048l3.473,9.079h-1.228zM10.483,13.383h3.087L12.023,9.137Z"
android:strokeWidth="1.06419"
android:fillColor="#000000"/>
<path
android:pathData="m12,6c2.62,0 4.88,1.86 5.39,4.43l0.3,1.5 1.53,0.11c1.56,0.1 2.78,1.41 2.78,2.96 0,1.65 -1.35,3 -3,3H6C3.79,18 2,16.21 2,14 2,11.95 3.53,10.24 5.56,10.03L6.63,9.92 7.13,8.97C8.08,7.14 9.94,6 12,6M12,4C9.11,4 6.6,5.64 5.35,8.04 2.34,8.36 0,10.91 0,14c0,3.31 2.69,6 6,6h13c2.76,0 5,-2.24 5,-5 0,-2.64 -2.05,-4.78 -4.65,-4.96C18.67,6.59 15.64,4 12,4Z"
android:fillColor="#000000"/>
</vector>

View file

@ -5,6 +5,11 @@
android:icon="@drawable/ic_baseline_add_24"
android:title="@string/menu_add"
app:showAsAction="ifRoom" />
<item
android:id="@+id/enable_auto"
android:checkable="true"
android:title="@string/menu_auto_enabled"
app:showAsAction="never" />
<item android:id="@+id/privacy_policy"
android:title="@string/menu_privacy_policy"
app:showAsAction="never" />

View file

@ -6,9 +6,10 @@
<string name="dns_auto">Auto</string>
<string name="dns_unknown">Unknown</string>
<string name="add_server">Add Server</string>
<string name="add">Add</string>
<string name="menu_add">Add</string>
<string name="menu_privacy_policy">Privacy Policy</string>
<string name="menu_auto_enabled">Enable auto</string>
<string name="auto_mode_clarification">Automatic (opportunistic) DNS mode will now be available in the tile</string>
<string name="cancel">Cancel</string>
<string name="delete_question">Delete server?</string>
<string name="delete">Delete</string>