diff --git a/app/src/main/res/drawable/ic_baseline_settings_24.xml b/app/src/main/res/drawable/ic_baseline_settings_24.xml
new file mode 100644
index 0000000..e7e3d4f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_baseline_settings_24.xml
@@ -0,0 +1,10 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_drag_handle_24.xml b/app/src/main/res/drawable/ic_drag_handle_24.xml
new file mode 100644
index 0000000..892b734
--- /dev/null
+++ b/app/src/main/res/drawable/ic_drag_handle_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/drawable/ic_unknown_black_24dp.xml b/app/src/main/res/drawable/ic_unknown_black_24dp.xml
new file mode 100644
index 0000000..3ddd864
--- /dev/null
+++ b/app/src/main/res/drawable/ic_unknown_black_24dp.xml
@@ -0,0 +1,13 @@
+
+
+
+
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 0ff5544..88e1536 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -4,12 +4,65 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".MainActivity">
+ tools:context=".ui.MainActivity"
+ android:fitsSystemWindows="true">
+
+
+
+
+
+
+ android:layout_height="wrap_content"
+ app:layout_constraintTop_toBottomOf="@+id/topAppBarLayout" />
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_add.xml b/app/src/main/res/layout/dialog_add.xml
index 1ec3b51..fe08fe9 100644
--- a/app/src/main/res/layout/dialog_add.xml
+++ b/app/src/main/res/layout/dialog_add.xml
@@ -4,18 +4,60 @@
android:layout_width="match_parent"
android:layout_height="wrap_content">
-
+
+
+
+
+
+
+
+
+ app:layout_constraintTop_toBottomOf="@+id/editTextServerHintLayout">
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_options.xml b/app/src/main/res/layout/dialog_options.xml
new file mode 100644
index 0000000..11f6ce1
--- /dev/null
+++ b/app/src/main/res/layout/dialog_options.xml
@@ -0,0 +1,65 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/recyclerview_row.xml b/app/src/main/res/layout/recyclerview_row.xml
index fa7bb16..4da379a 100644
--- a/app/src/main/res/layout/recyclerview_row.xml
+++ b/app/src/main/res/layout/recyclerview_row.xml
@@ -1,22 +1,45 @@
+ android:focusable="true"
+ android:foreground="?android:attr/selectableItemBackground">
+ app:layout_constraintTop_toTopOf="parent" />
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/sheet_dns_selector.xml b/app/src/main/res/layout/sheet_dns_selector.xml
new file mode 100644
index 0000000..bbe5b42
--- /dev/null
+++ b/app/src/main/res/layout/sheet_dns_selector.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml
index 49e94e8..fcfec62 100644
--- a/app/src/main/res/menu/menu_main.xml
+++ b/app/src/main/res/menu/menu_main.xml
@@ -1,11 +1,40 @@
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
deleted file mode 100644
index 7353dbd..0000000
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 05b82a8..0000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index cdd2b1b..0000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index b0a456c..0000000
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index f61ced5..0000000
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 4f1fa21..0000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 7d80cf5..0000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 89f96ba..0000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index bdb278e..0000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 1cd6644..0000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index 2c7bdb7..0000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap/ic_launcher.xml
similarity index 70%
rename from app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
rename to app/src/main/res/mipmap/ic_launcher.xml
index 7353dbd..5c84730 100644
--- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
+++ b/app/src/main/res/mipmap/ic_launcher.xml
@@ -1,5 +1,6 @@
-
-
-
\ No newline at end of file
+
+
+
+
diff --git a/app/src/main/res/resources.properties b/app/src/main/res/resources.properties
new file mode 100644
index 0000000..d5a3ddc
--- /dev/null
+++ b/app/src/main/res/resources.properties
@@ -0,0 +1 @@
+unqualifiedResLocale=en-US
\ No newline at end of file
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
new file mode 100644
index 0000000..048dcdf
--- /dev/null
+++ b/app/src/main/res/values-fr/strings.xml
@@ -0,0 +1,54 @@
+
+
+ Terminé
+ Private DNS Quick Toggle
+ Inconnu
+ Éteint
+ Ajouter un serveur
+ Ajouter
+ Politique de confidentialité
+ Êtes-vous sûr de vouloir supprimer le serveur ?
+ Supprimer
+ L\'adresse du serveur ne peut pas être vide
+ Étiquette du serveur DNS (Facultatif)
+ Adresse du serveur DNS
+ Options
+ OK
+ Seulement éteint
+ Seulement automatique
+ Éteint et automatique
+ Automatique
+ Commutateur de DNS privé
+ Enregistrer
+ Autorisation non accordée, vérifiez les instructions dans l\'application
+ Sélectionner le serveur
+ Définissez les options à inclure
+ DNS privé seulement
+ Ouvrir l\'application
+ DNS privé éteint
+ DNS privé réglé sur automatique
+ DNS privé réglé sur %1$s
+ Requiert le déverrouillage de l\'appareil pour changer de serveur
+ Activé
+ À partir du fichier
+ Aucun serveur ajouté
+ Copié
+ Éditer le serveur
+ Échec de la sauvegarde
+ Appuyez sur le bouton ci-dessous pour en ajouter un
+ Impossible d\'obtenir l\'autorisation, veuillez l\'accorder manuellement
+ Autorisation accordée, vous pouvez désormais révoquer l\'autorisation Shizuku
+ À partir du presse-papier
+ Vers le presse-papier
+ Partager
+ Vers le fichier
+ Sauvegarde réussie
+ Échec de l\'importation
+ Échec de l\'importation, le fichier JSON est incorrect
+ Importé
+ Exporter
+ Importer
+ Poignée
+ Supprimer
+ Annuler
+
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
new file mode 100644
index 0000000..3e9260d
--- /dev/null
+++ b/app/src/main/res/values-hu/strings.xml
@@ -0,0 +1,51 @@
+
+ Privát DNS Gyorskapcsoló
+ Privát DNS Kapcsoló
+ Nincs engedély megadva, nézd meg az alkalmazásban, hogyan adhatod meg
+ Ki
+ Automatikus
+ Ismeretlen
+ Szerver hozzáadása
+ Hozzáadás
+ Mentés
+ Adatvédelmi irányelvek
+ Szerver kiválasztása
+ Kész
+ Mégse
+ Törlés
+ Biztosan törölni szeretnéd a szervert?
+ Törlés
+ A szervercím nem lehet üres
+ DNS szerver neve (opcionális)
+ DNS szerver címe
+ Beállítások
+ OK
+ Válaszd ki, mely opciók jelenjenek meg a csempén
+ Csak ki
+ Csak automatikus
+ Ki és automatikus
+ Csak Privát DNS
+ Alkalmazás megnyitása
+ Privát DNS kikapcsolva
+ Privát DNS automatikus módra állítva
+ Privát DNS beállítva: %1$s
+ Eszköz feloldása szükséges a szerver módosításához
+ Húzási fogantyú
+ Importálás
+ Exportálás
+ Importálva
+ Importálás sikertelen
+ Importálás sikertelen, hibás JSON
+ Másolva
+ Fájlból
+ Vágólapról
+ Vágólapra
+ Megosztás
+ Fájlba
+ Mentés sikertelen
+ Sikeresen mentve
+ Szerver szerkesztése
+ Nincsenek szerverek hozzáadva
+ Koppints az alábbi gombra, hogy hozzáadj egyet
+ Engedélyezve
+
diff --git a/app/src/main/res/values-mn/strings.xml b/app/src/main/res/values-mn/strings.xml
new file mode 100644
index 0000000..10de470
--- /dev/null
+++ b/app/src/main/res/values-mn/strings.xml
@@ -0,0 +1,49 @@
+
+
+ Хувийн DNS солих
+ Унтраах
+ Тодорхойгүй
+ Сервер нэмэх
+ Хадгалах
+ Болсон
+ Болих
+ Устгах
+ Та серверийг устгахдаа итгэлтэй байна уу?
+ Устгах
+ Серверийн хаяг хоосон байж болохгүй
+ DNS серверийн шошго (заавал биш)
+ DNS серверийн хаяг
+ Сонголтууд
+ ОК
+ Хавтан дээр ямар сонголтыг оруулахаа сонгоно уу
+ Зөвхөн унтарсан
+ Зөвхөн авто
+ Унтарсан болон авто
+ Хувийн DNS-г %1$s болгож тохируулсан
+ Серверийг өөрчлөхийн тулд төхөөрөмжийн түгжээг тайлах шаардлагатай
+ Бариулыг чирэх
+ Импорт
+ Импортолсон
+ Импорт хийж чадсангүй
+ Файлаас
+ Хадгалж чадсангүй
+ Амжилттай хадгалсан
+ Сервер засах
+ Хувийн DNS хурдан сэлгэх
+ Нууцлалын бодлого
+ Зөвшөөрөл олгоогүй. Үүнийг хэрхэн хийхийг харна уу
+ Авто
+ Нэмэх
+ Сервер сонгох
+ Зөвхөн хувийн DNS
+ Апп нээх
+ Түр санах ой руу
+ Хувийн DNS унтарсан
+ Хувийн DNS-г автоматаар тохируулсан
+ Экспорт
+ Хуулагдсан
+ Хуваалцах
+ Импорт хийж чадсангүй, алдаатай JSON
+ Түр санах ойноос
+ Файлруу
+
\ No newline at end of file
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
index 203e219..715cab4 100644
--- a/app/src/main/res/values-night/themes.xml
+++ b/app/src/main/res/values-night/themes.xml
@@ -1,16 +1,12 @@
-
-
-
\ No newline at end of file
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
new file mode 100644
index 0000000..6c76614
--- /dev/null
+++ b/app/src/main/res/values-pl/strings.xml
@@ -0,0 +1,54 @@
+
+
+ Usuń
+ Zapisz
+ Polityka prywatności
+ Wybierz serwer
+ Anuluj
+ Adres serwera DNS
+ OK
+ Otwórz aplikację
+ Importuj
+ Eksportuj
+ Skopiowano
+ Z pliku
+ Ze schowka
+ Do schowka
+ Udostępnij
+ Do pliku
+ Edytuj serwer
+ Brak dodanych serwerów
+ Włączone
+ Dodaj serwer
+ Dodaj
+ Usuń
+ Nieznane
+ Gotowe
+ Opcje
+ Importowanie nie powiodło się
+ Automatycznie
+ Wyłącz
+ Zaimportowano
+ Adres serwera nie może być pusty
+ Import nie powiódł się, zniekształcony plik JSON
+ Zapisano pomyślnie
+ Czy na pewno chcesz usunąć serwer?
+ Private DNS Quick Toggle
+ Przełącznik prywatnego DNS
+ Nieprzydzielono uprawnienia, sprawdź w aplikacji, w jaki sposób można to zrobić
+ Opis serwera DNS (opcjonalnie)
+ Wybierz opcje, które będą dostępne w kafelku
+ Tylko wyłączenie
+ Tylko automatycznie
+ Wyłączenie i automatycznie
+ Tylko prywatny DNS
+ Prywatny DNS zmieniony na automatyczny
+ Prywatny DNS zmieniony na %1$s
+ Wymagaj odblokowania urządzenia do zmiany serwera
+ Wyłączono Prywatny DNS
+ Przeciągnij
+ Zapisywanie nie powiodło się
+ Kliknij na poniższy przycisk, aby dodać nowy
+ Udzielono zezwolenia, możesz teraz cofnąć zezwolenie w Shizuku
+ Uzyskanie uprawnień nie powiodło się, udziel ich ręcznie
+
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
new file mode 100644
index 0000000..c4691bd
--- /dev/null
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -0,0 +1,54 @@
+
+
+ Importado
+ Permissão não concedida, verifique o app para saber como prosseguir
+ Alteração de DNS privado
+ Cancelar
+ Adicionar servidor
+ Endereço do servidor DNS
+ Escolha opções disponível em atalho
+ Alteração de DNS privado
+ Desativado
+ Automático
+ Indeterminado
+ Adicionar
+ Salvar
+ Política de privacidade
+ Concluído
+ Apagar
+ Tem certeza de que quer apagar o servidor?
+ Apagar
+ O endereço do servidor não pode estar em branco
+ Identificação do servidor DNS (opcional)
+ Opções
+ Ok
+ Somente desativado
+ Desativado e automático
+ Somente DNS privado
+ Abrir app
+ DNS privado desativado
+ DNS privado definido para automático
+ DNS privado definido para %1$s
+ Arrastre
+ Importar
+ Exportar
+ Falha na importação, JSON malformado
+ Copiado
+ Da memória
+ Compartilhar
+ Para arquivo
+ Salvo com sucesso
+ Editar servidor
+ Nenhum servidor adicionado
+ Toque no botão abaixo para adicionar
+ Ativado
+ Escolha servidor
+ Para memória
+ De arquivo
+ Falha ao importar
+ Falha ao salvar
+ Necessário desbloquear o dispositivo para alterar servidor
+ Somente automático
+ Falha ao obter a permissão. Tente conceder manualmente
+ Permissão concedida, você pode revogar a permissão do Shizuku agora
+
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
new file mode 100644
index 0000000..cef59e3
--- /dev/null
+++ b/app/src/main/res/values-ru/strings.xml
@@ -0,0 +1,53 @@
+
+ Private DNS Quick Toggle
+ Переключить частный DNS
+ Разрешение не предоставлено, проверьте приложение для получения информации
+ Выкл
+ Авто
+ Неизвестно
+ Добавить сервер
+ Добавить
+ Сохранить
+ Политика конфиденциальности
+ Выбрать сервер
+ Готово
+ Отмена
+ Удалить
+ Вы уверены, что хотите удалить сервер?
+ Удалить
+ Адрес сервера не может быть пустым
+ Название DNS сервера (необязательно)
+ Адрес DNS сервера
+ Опции
+ OK
+ Выберите, какие опции включить в плитке
+ Только \"Выкл\"
+ Только \"Авто\"
+ \"Выкл\" и \"Авто\"
+ Только частный DNS
+ Открыть приложение
+ Частный DNS выключен
+ Частный DNS установлен на "Авто"
+ Частный DNS установлен на %1$s
+ Смена сервера требует разблокировки устройства
+ Ручка перетаскивания
+ Импорт
+ Экспорт
+ Успешно импортировано
+ Импорт не удался
+ Импорт не удался, некорректный JSON
+ Скопировано
+ Из файла
+ Из буфера обмена
+ В буфер обмена
+ Поделиться
+ В файл
+ Сохранение не удалось
+ Успешно сохранено
+ Редактировать сервер
+ Нет доступных серверов
+ Нажмите на кнопку ниже, чтобы добавить сервер
+ Включён
+ Разрешение получено, можно отозвать авторизацию Shizuku
+ Не удалось получить разрешение, предоставьте его вручную
+
\ No newline at end of file
diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml
new file mode 100644
index 0000000..1cb02d2
--- /dev/null
+++ b/app/src/main/res/values-ta/strings.xml
@@ -0,0 +1,54 @@
+
+
+ சரி
+ தனியார் டி.என்.எச் விரைவாக மாற்று
+ தனியார் டி.என் கள் மாறுகின்றன
+ இசைவு வழங்கப்படவில்லை, அதை எப்படி செய்வது என்று பார்க்க பயன்பாட்டை சரிபார்க்கவும்
+ அணை
+ தானி
+ தெரியவில்லை
+ சேவையகத்தைச் சேர்க்கவும்
+ கூட்டு
+ சேமி
+ தனியுரிமைக் கொள்கை
+ சேவையகத்தைத் தேர்ந்தெடுக்கவும்
+ முடிந்தது
+ ரத்துசெய்
+ நீக்கு
+ சேவையகத்தை நீக்க விரும்புகிறீர்களா?
+ நீக்கு
+ டிஎன்எச் சேவையக முகவரி
+ விருப்பங்கள்
+ ஓடுகளில் எந்த விருப்பங்களைச் சேர்க்க வேண்டும் என்பதைத் தேர்வுசெய்க
+ மட்டுமே
+ ஆட்டோ மட்டுமே
+ ஆஃப் மற்றும் ஆட்டோ
+ தனியார் டி.என்.எச் மட்டுமே
+ திறந்த பயன்பாடு
+ தனியார் டி.என்.எச் அணைக்கப்பட்டது
+ தனியார் டி.என்.எச் ஆட்டோவாக அமைக்கப்பட்டுள்ளது
+ தனியார் டி.என்.எச் %1$s என அமைக்கப்பட்டுள்ளது
+ சேவையகத்தை மாற்ற சாதனத்தைத் திறக்க வேண்டும்
+ இழுவை கைப்பிடி
+ இறக்குமதி
+ ஏற்றுமதி
+ இறக்குமதி செய்யப்பட்டது
+ இறக்குமதி தோல்வியடைந்தது
+ இறக்குமதி தோல்வியுற்றது, தவறாக சாதொபொகு
+ நகலெடுக்கப்பட்டது
+ கோப்பிலிருந்து
+ கிளிப்போர்டிலிருந்து
+ இடைநிலைப்பலகைக்கு
+ பங்கு
+ தாக்கல் செய்ய
+ சேமிப்பு தோல்வியடைந்தது
+ வெற்றிகரமாக சேமிக்கப்பட்டது
+ சேவையகத்தைத் திருத்து
+ சேவையகங்கள் எதுவும் சேர்க்கப்படவில்லை
+ ஒன்றைச் சேர்க்க கீழே உள்ள பொத்தானைத் தட்டவும்
+ இயக்கப்பட்டது
+ இசைவு வழங்கப்பட்டது, நீங்கள் இப்போது சிசுகு அனுமதியை ரத்து செய்யலாம்
+ இசைவு பெறுவதில் தோல்வி, தயவுசெய்து அதை கைமுறையாக வழங்கவும்
+ சேவையக முகவரி காலியாக இருக்க முடியாது
+ டிஎன்எச் சேவையக சிட்டை (விரும்பினால்)
+
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
new file mode 100644
index 0000000..57f2c8d
--- /dev/null
+++ b/app/src/main/res/values-tr/strings.xml
@@ -0,0 +1,54 @@
+
+
+ Sunucuyu silmek istediğinizden emin misiniz?
+ Sadece kapalı
+ Sunucuyu değiştirmek için cihazın kilidini açmanız gerekiyor
+ Oto
+ Bilinmeyen
+ Tamam
+ İptal
+ DNS sunucusu Etiketi (İsteğe bağlı)
+ Seçenekler
+ OK
+ Sadece oto
+ Kapalı ve oto
+ Özel DNS kapandı
+ Uygulamayı açınız
+ İçe aktar
+ Dışa aktar
+ içe aktarıldı
+ Dosyaya
+ Kaydetme başarısız oldu
+ Hiç Sunucu Eklenmedi
+ Eklemek için aşağıdaki düğmeye dokunun
+ İzin alınamadı, lütfen manuel olarak verin
+ Karoya hangi seçeneklerin dahil edileceğini seçiniz
+ Kapalı
+ Gizlilik Politikası
+ Sil
+ Sunucu adresi boş olamaz
+ Sil
+ DNS sunucu adresi
+ tutacağı sürükle
+ Ekle
+ Sunucu Ekleyiniz
+ İzin verilmedi, nasıl yapıldığını görmek için uygulamayı kontrol ediniz
+ İçe aktarma başarısız oldu, hatalı biçimlendirilmiş JSON
+ Özel DNS Hızlı Geçiş
+ İzin verildi, şimdi Shizuku iznini iptal edebilirsiniz
+ Aktarma başarısız
+ Panodan
+ Başarıyla kaydedildi
+ Kaydet
+ Özel DNS otomatik olarak ayarlandı
+ Özel DNS %1$s olarak ayarlandı
+ Sadece Özel DNS
+ Sunucuyu Seçin
+ Kopyalandı
+ Sunucuyu düzenle
+ Etkin
+ Özel DNS Geçişi
+ Dosyadan
+ Panoya
+ Paylaş
+
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
new file mode 100644
index 0000000..1f423ae
--- /dev/null
+++ b/app/src/main/res/values-vi/strings.xml
@@ -0,0 +1,52 @@
+
+
+ Thêm máy chủ
+ Chỉ tự động
+ Chưa được cấp quyền, hãy kiểm tra ứng dụng để biết cách thực hiện
+ Tắt
+ Tự động
+ Thêm
+ Chính sách bảo mật
+ Chọn máy chủ
+ Hoàn thành
+ Hủy
+ Bạn có chắc chắn muốn xóa máy chủ không?
+ Xoá
+ Địa chỉ máy chủ DNS
+ Tùy chọn
+ OK
+ Chọn các tùy chọn để đưa vào ô
+ Chỉ tắt
+ Tắt và tự động
+ Mở ứng dụng
+ DNS cá nhân được thiết lập tự động
+ Yêu cầu mở khóa thiết bị để thay đổi máy chủ
+ Tay cầm kéo
+ Xuất
+ Đã nhập
+ Nhập thất bại
+ Nhập thất bại, JSON bị lỗi
+ Đã sao chép
+ Từ tập tin
+ Chia sẻ
+ Thành tập tin
+ Lưu không thành công
+ Chỉnh sửa máy chủ
+ Chưa có máy chủ nào
+ Nhấn vào nút bên dưới để thêm
+ Đã bật
+ Chuyển đổi DNS cá nhân
+ Xoá
+ Chuyển đổi nhanh DNS cá nhân
+ Không rõ
+ Nhãn máy chủ DNS (Không bắt buộc)
+ Lưu
+ Địa chỉ máy chủ không được để trống
+ Chỉ DNS cá nhân
+ Đã tắt DNS cá nhân
+ DNS cá nhân được đặt thành %1$s
+ Nhập
+ Từ bảng nhớ tạm
+ Vào bảng nhớ tạm
+ Đã lưu thành công
+
\ No newline at end of file
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..a217315
--- /dev/null
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -0,0 +1,51 @@
+
+
+ 私有DNS触发
+ 必要权限未授予,请看相关说明
+ 关闭
+ 自动
+ 未知
+ 添加DNS服务器
+ 添加
+ 存储
+ 隐私策略
+ 选择服务器
+ 完成
+ 取消
+ 删除条目
+ 你确认要删除这个服务器条目吗?
+ 删除
+ 服务器地址不可为空
+ DNS服务器标识
+ DNS服务器地址
+ 选项
+ 确认
+ 选择要在磁贴中启用的选项
+ 仅“关闭”
+ 仅“自动”
+ “关闭“与”自动“
+ 仅设置的私有DNS
+ 打开软件
+ 不使用私有DNS
+ 自动使用私有DNS
+ 设置为使用私有DNS\"%1$s\"
+ 更改服务器设置要求设备解锁
+ 拖动把手
+ 导入
+ 导出
+ 已导入
+ 导入失败
+ 导入失败,json格式异常
+ 已复制
+ 从文件导入
+ 从剪贴板导入
+ 导出至剪贴板
+ 分享
+ 导出至文件
+ 保存失败
+ 保存成功
+ 编辑服务器条目
+ 无可用服务器
+ 点击下方\"+\"添加一个吧
+ 已启用
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index f8c6127..3643757 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,10 +1,15 @@
-
-
- #FFBB86FC
- #FF6200EE
- #FF3700B3
- #FF03DAC5
- #FF018786
- #FF000000
- #FFFFFFFF
-
\ No newline at end of file
+
+
+ #498EE8
+
+ #6750A4
+ #6750A4
+ #625B71
+ #7D5260
+ #FFFBFE
+
+ #D0BCFF
+ #CCC2DC
+ #EFB8C8
+ #1C1B1F
+
diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml
deleted file mode 100644
index cf31181..0000000
--- a/app/src/main/res/values/ic_launcher_background.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
- #498EE8
-
\ 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 462dcc2..8124a26 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -4,13 +4,50 @@
Permission not granted, check app to see how to do it
Off
Auto
+ Unknown
Add Server
- Add
+ Add
+ Save
+ Privacy Policy
+ Select Server
+ Done
Cancel
- Delete server?
+ Delete
+ Are you sure you want to delete server?
Delete
Server address cannot be empty
- Privacy Policy
+ DNS server Label (Optional)
DNS server address
-
+ Options
+ OK
+ Choose which options to include in the tile
+ Only off
+ Only auto
+ Off and auto
+ Only Private DNS
+ Open app
+ Private DNS turned off
+ Private DNS set to auto
+ Private DNS set to %1$s
+ Require unlocking the device to change server
+ Drag handle
+ Import
+ Export
+ Imported
+ Import failed
+ Import failed, malformed JSON
+ Copied
+ From file
+ From clipboard
+ To clipboard
+ Share
+ To file
+ Saving failed
+ Saved successfully
+ Edit server
+ No Servers Added
+ Tap on the button below to add one
+ Enabled
+ Permission granted, you can revoke the Shizuku permission now
+ Failed to acquire permission, please grant it manually
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index eebc2d0..ea05d60 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,16 +1,27 @@
-
-
-
+
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle.kts
similarity index 50%
rename from build.gradle
rename to build.gradle.kts
index d1dcc18..45827dc 100644
--- a/build.gradle
+++ b/build.gradle.kts
@@ -5,14 +5,15 @@ buildscript {
mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:7.3.1'
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.7.20"
+ classpath("com.android.tools.build:gradle:8.8.1")
+ classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:2.0.20")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
-}
\ No newline at end of file
+plugins {
+ id("org.jetbrains.kotlin.android") version "2.0.20" apply false
+ id("org.jetbrains.kotlin.plugin.serialization") version "2.0.20"
+ id("com.google.devtools.ksp") version "2.0.20-1.0.25" apply false
+}
diff --git a/fastlane/metadata/android/en-US/changelogs/11.txt b/fastlane/metadata/android/en-US/changelogs/11.txt
new file mode 100644
index 0000000..e7b902d
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/11.txt
@@ -0,0 +1,2 @@
+- Add option to require unlocking the device to use the tile
+- Fix invisible nav buttons on some devices
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/12.txt b/fastlane/metadata/android/en-US/changelogs/12.txt
new file mode 100644
index 0000000..46fe2d8
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/12.txt
@@ -0,0 +1,4 @@
+- Support for selection of only Private DNS in Option Dialog by @InfiniteCoder06
+- Support Labels by @InfiniteCoder06
+- Feature: Reordring by @InfiniteCoder06
+- Possible tile update fix
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/13.txt b/fastlane/metadata/android/en-US/changelogs/13.txt
new file mode 100644
index 0000000..c546656
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/13.txt
@@ -0,0 +1,2 @@
+- Settings export/import
+- Fix label not appearing in some cases
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/14.txt b/fastlane/metadata/android/en-US/changelogs/14.txt
new file mode 100644
index 0000000..d8ece24
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/14.txt
@@ -0,0 +1,3 @@
+- Add an option to edit servers
+- Add placeholder for empty server list
+- Fix layout for longer server addresses
diff --git a/fastlane/metadata/android/en-US/changelogs/15.txt b/fastlane/metadata/android/en-US/changelogs/15.txt
new file mode 100644
index 0000000..8541dd6
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/15.txt
@@ -0,0 +1,2 @@
+- Fix crashes on Android 11 and earlier
+- Fix list entry layout
diff --git a/fastlane/metadata/android/en-US/changelogs/16.txt b/fastlane/metadata/android/en-US/changelogs/16.txt
new file mode 100644
index 0000000..1005cb7
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/16.txt
@@ -0,0 +1,7 @@
+- Replaced server storage backend with Room, allowing for easier further expansion
+- Add option to disable saved servers
+- Improved backup handling
+- Fixed desync bug while dragging servers
+- Reorganized source file structure
+- Updated Kotlin version
+- Updated Java version
diff --git a/fastlane/metadata/android/en-US/changelogs/17.txt b/fastlane/metadata/android/en-US/changelogs/17.txt
new file mode 100644
index 0000000..3709a99
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/17.txt
@@ -0,0 +1,11 @@
+- Replaced server storage backend with Room, allowing for easier further expansion
+- Add option to disable saved servers
+- Improved backup handling
+- Fixed desync bug while dragging servers
+- Reorganized source file structure
+- Updated Kotlin version
+- Updated Java version
+- Replaced gson with kotlinx.serialization
+- Add Chinese Simplified translation (thanks @WeiguangTWK)
+- Add Russian translation
+- Fixed issue with provider not resetting when disabled through the dialog
diff --git a/fastlane/metadata/android/en-US/changelogs/18.txt b/fastlane/metadata/android/en-US/changelogs/18.txt
new file mode 100644
index 0000000..067cc8f
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/18.txt
@@ -0,0 +1,12 @@
+- Add Shizuku support for newer Android versions
+- Fix some crashes
+- Improve Shizuku process feedback
+- Fix Shizuku when not running as the primary user
+- Hungarian translation by @Pacuka in https://github.com/karasevm/PrivateDNSAndroid/pull/43
+- Add Polish translation (Michal L (@chuckmichael), Eryk Michalak (gnu-ewm))
+- Add Mongolian translation (Purevbaatar Tuvshinjargal (@puujee0238))
+- Add Portuguese (Brazil) translation (ajan, Víctor Assunção (@JoaoVictorAS))
+- Add Vietnamese translation (tuấn nguyễn (@Tuan1-2-3))
+- Add French translation (papaindiatango)
+- Add Tamil translation (தமிழ்நேரம் (@TamilNeram))
+- Add Turkish translation (Mustafa A. (mistiik99))
diff --git a/fastlane/metadata/android/en-US/changelogs/default.txt b/fastlane/metadata/android/en-US/changelogs/default.txt
new file mode 100644
index 0000000..300e44e
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/default.txt
@@ -0,0 +1,2 @@
+Changelog for latest release is available on GitHub:
+https://github.com/karasevm/PrivateDNSAndroid/releases/latest
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt
new file mode 100644
index 0000000..0f03cca
--- /dev/null
+++ b/fastlane/metadata/android/en-US/full_description.txt
@@ -0,0 +1,15 @@
+
+ Private DNS Quick Toggle is a quick settings tile to switch your private
+ dns provider.
+ Supports any number of providers. Makes it easy to turn ad-blocking
+ dns servers on or off with just a single tap.
+
+
+Permissions
+
+ Requires WRITE_SECURE_SETTINGS permission to change the private dns settings.
+ The permission must be provided either with Shizuku or
+
+ manually through adb
+ .
+
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/images/icon.png b/fastlane/metadata/android/en-US/images/icon.png
new file mode 100644
index 0000000..7f6b8f6
Binary files /dev/null and b/fastlane/metadata/android/en-US/images/icon.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/01.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/01.png
new file mode 100644
index 0000000..8d0d479
Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/01.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/02.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/02.png
new file mode 100644
index 0000000..e66eb7d
Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/02.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/03.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/03.png
new file mode 100644
index 0000000..7b78a4a
Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/03.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/04.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/04.png
new file mode 100644
index 0000000..bc04e45
Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/04.png differ
diff --git a/fastlane/metadata/android/en-US/images/phoneScreenshots/05.png b/fastlane/metadata/android/en-US/images/phoneScreenshots/05.png
new file mode 100644
index 0000000..abd46d3
Binary files /dev/null and b/fastlane/metadata/android/en-US/images/phoneScreenshots/05.png differ
diff --git a/fastlane/metadata/android/en-US/short_description.txt b/fastlane/metadata/android/en-US/short_description.txt
new file mode 100644
index 0000000..c5a798a
--- /dev/null
+++ b/fastlane/metadata/android/en-US/short_description.txt
@@ -0,0 +1 @@
+Quick settings tile to switch active private DNS server
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/title.txt b/fastlane/metadata/android/en-US/title.txt
new file mode 100644
index 0000000..e82d84b
--- /dev/null
+++ b/fastlane/metadata/android/en-US/title.txt
@@ -0,0 +1 @@
+Private DNS Quick Toggle
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index 98bed16..e6f2676 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -16,6 +16,9 @@ org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# https://developer.android.com/topic/libraries/support-library/androidx-rn
android.useAndroidX=true
# Automatically convert third-party libraries to use AndroidX
-android.enableJetifier=true
+android.enableJetifier=false
# Kotlin code style for this project: "official" or "obsolete":
-kotlin.code.style=official
\ No newline at end of file
+kotlin.code.style=official
+android.nonTransitiveRClass=true
+android.nonFinalResIds=true
+org.gradle.configuration-cache=true
\ No newline at end of file
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 8d1a8cf..f537c92 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Mon Aug 16 15:36:35 MSK 2021
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
diff --git a/readme.jpg b/readme.jpg
new file mode 100644
index 0000000..2119cd5
Binary files /dev/null and b/readme.jpg differ
diff --git a/readme.png b/readme.png
deleted file mode 100644
index 4dee806..0000000
Binary files a/readme.png and /dev/null differ
diff --git a/settings.gradle b/settings.gradle.kts
similarity index 70%
rename from settings.gradle
rename to settings.gradle.kts
index 9e0b6d2..72cb6bf 100644
--- a/settings.gradle
+++ b/settings.gradle.kts
@@ -3,8 +3,7 @@ dependencyResolutionManagement {
repositories {
google()
mavenCentral()
- jcenter() // Warning: this repository is going to shut down soon
}
}
rootProject.name = "Private DNS Quick Toggle"
-include ':app'
+include("app")