diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 279bf09..73ab45f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,7 @@ android:allowBackup="true" android:allowNativeHeapPointerTagging="false" android:dataExtractionRules="@xml/data_extraction_rules" + android:localeConfig="@xml/locales_config" android:extractNativeLibs="true" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/icon" diff --git a/app/src/main/cpp/main.cpp b/app/src/main/cpp/main.cpp index 9ec482d..f6bf7e0 100644 --- a/app/src/main/cpp/main.cpp +++ b/app/src/main/cpp/main.cpp @@ -212,6 +212,7 @@ Java_git_artdeell_skymodloader_MainActivity_settle( jboolean _hideCanvasMenu ) { fsel_setup(env); + Canvas::userLibs.clear(); Canvas::MainActivity = clazz; Canvas::CeserverEnabled = _ceserver_enabled; Canvas::hideCanvasMenu = _hideCanvasMenu; diff --git a/app/src/main/java/git/artdeell/skymodloader/AboutDialogHelper.java b/app/src/main/java/git/artdeell/skymodloader/AboutDialogHelper.java index 73e4e5b..dfd174f 100644 --- a/app/src/main/java/git/artdeell/skymodloader/AboutDialogHelper.java +++ b/app/src/main/java/git/artdeell/skymodloader/AboutDialogHelper.java @@ -31,16 +31,16 @@ public static void show(Activity activity) { LinearLayout timeline = dialog.findViewById(R.id.about_timeline); - addChapter(activity, timeline, "The Origin", "Built from scratch by two developers who love Sky.", true); - addPerson(activity, timeline, "artdeell", "Author", "artdeell", "https://github.com/artdeell"); - addPerson(activity, timeline, "lukas0x1", "Author · retired", "lukas0x1", "https://github.com/lukas0x1"); + addChapter(activity, timeline, activity.getString(R.string.about_chapter_origin), activity.getString(R.string.about_chapter_origin_sub), true); + addPerson(activity, timeline, "artdeell", activity.getString(R.string.role_author), "artdeell", "https://github.com/artdeell"); + addPerson(activity, timeline, "lukas0x1", activity.getString(R.string.role_author_retired), "lukas0x1", "https://github.com/lukas0x1"); endChapter(timeline); - addChapter(activity, timeline, "The Present", "Currently keeping Canvas alive.", true); - addPerson(activity, timeline, "MisterGatto", "Maintainer", "MisterGatto", "https://github.com/MisterGatto"); + addChapter(activity, timeline, activity.getString(R.string.about_chapter_present), activity.getString(R.string.about_chapter_present_sub), true); + addPerson(activity, timeline, "MisterGatto", activity.getString(R.string.role_maintainer), "MisterGatto", "https://github.com/MisterGatto"); endChapter(timeline); - addChapter(activity, timeline, "The Team", "Everyone who made Canvas better.", true); + addChapter(activity, timeline, activity.getString(R.string.about_chapter_team), activity.getString(R.string.about_chapter_team_sub), true); addPerson(activity, timeline, "RomanChamelo", null, "RomanChamelo", "https://github.com/RomanChamelo"); addPerson(activity, timeline, "Kiojeen", null, "Kiojeen", "https://github.com/Kiojeen"); addPerson(activity, timeline, "Gxosty", null, "Gxosty", "https://github.com/gxosty"); @@ -51,15 +51,15 @@ public static void show(Activity activity) { addPerson(activity, timeline, "alvindimas05", null, "alvindimas05", "https://github.com/alvindimas05"); endChapter(timeline); - addChapter(activity, timeline, "The Art", "The faces behind the visuals.", true); - addPersonCustomLink(activity, timeline, "Сон~", "Banner artwork", "VK ›", "https://vk.com/son583"); - addPersonCustomLink(activity, timeline, "Dysis", "App icon", "TG ›", "https://t.me/Eliatshaha"); + addChapter(activity, timeline, activity.getString(R.string.about_chapter_art), activity.getString(R.string.about_chapter_art_sub), true); + addPersonCustomLink(activity, timeline, "Сон~", activity.getString(R.string.role_banner_artwork), "VK ›", "https://vk.com/son583"); + addPersonCustomLink(activity, timeline, "Dysis", activity.getString(R.string.role_app_icon), "TG ›", "https://t.me/Eliatshaha"); endChapter(timeline); - addChapter(activity, timeline, "The Community", "Join thousands of players who use Canvas every day.", false); + addChapter(activity, timeline, activity.getString(R.string.about_chapter_community), activity.getString(R.string.about_chapter_community_sub), false); addCommunityCard(activity, timeline, "Discord", "https://discord.gg/FrHP57VRPs", "https://discord.gg/FrHP57VRPs"); - addCommunityCard(activity, timeline, "English Telegram", "t.me/skyautowax", "https://t.me/skyautowax"); - addCommunityCard(activity, timeline, "Russian Telegram", "t.me/skyruswax", "https://t.me/s/ruautowax"); + addCommunityCard(activity, timeline, activity.getString(R.string.community_english_telegram), "t.me/skyautowax", "https://t.me/skyautowax"); + addCommunityCard(activity, timeline, activity.getString(R.string.community_russian_telegram), "t.me/skyruswax", "https://t.me/s/ruautowax"); endChapter(timeline); dialog.findViewById(R.id.thatgamecompanyLink).setOnClickListener(v -> diff --git a/app/src/main/java/git/artdeell/skymodloader/MainActivity.java b/app/src/main/java/git/artdeell/skymodloader/MainActivity.java index 8ce6cb6..9aead9c 100644 --- a/app/src/main/java/git/artdeell/skymodloader/MainActivity.java +++ b/app/src/main/java/git/artdeell/skymodloader/MainActivity.java @@ -470,7 +470,7 @@ private void copyToClipboard(String stackTrace) { ClipData clip = ClipData.newPlainText("Stack Trace", stackTrace); clipboard.setPrimaryClip(clip); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { - Toast.makeText(this, "Stack trace copied to clipboard", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.toast_stack_trace_copied, Toast.LENGTH_SHORT).show(); } } diff --git a/app/src/main/java/git/artdeell/skymodloader/SettingsActivity.java b/app/src/main/java/git/artdeell/skymodloader/SettingsActivity.java index 619106b..8f0bdf2 100644 --- a/app/src/main/java/git/artdeell/skymodloader/SettingsActivity.java +++ b/app/src/main/java/git/artdeell/skymodloader/SettingsActivity.java @@ -90,10 +90,10 @@ public void afterTextChanged(Editable s) { } else { startService(logcatIntent); } - Toast.makeText(this, "Logcat monitoring enabled", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.toast_logcat_enabled, Toast.LENGTH_SHORT).show(); } else { stopService(logcatIntent); - Toast.makeText(this, "Logcat monitoring disabled", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.toast_logcat_disabled, Toast.LENGTH_SHORT).show(); } }); @@ -171,9 +171,7 @@ private void resetBootloaderToOriginal() { .putBoolean("use_custom_bootloader", false) .putInt("bootloader_version", -1) .apply(); - Toast.makeText(this, - "Reset applied. Original version will be extracted at the next launch.", - Toast.LENGTH_LONG).show(); + Toast.makeText(this, R.string.toast_bootloader_reset, Toast.LENGTH_LONG).show(); } private void copyBootloaderFromUri(Uri uri) { @@ -199,7 +197,7 @@ private void copyBootloaderFromUri(Uri uri) { Log.i(TAG, "Custom libBootloader.so copied: " + dest.length() / 1024 + " KB"); runOnUiThread(() -> Toast.makeText(this, - "✓ Custom libBootloader.so applied!", + R.string.toast_bootloader_applied, Toast.LENGTH_LONG).show()); } catch (Exception e) { @@ -220,7 +218,7 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } private void executeClearAppData() { - Toast.makeText(this, "Clearing data...", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.toast_clearing_data, Toast.LENGTH_SHORT).show(); new Thread(() -> { int deletedFiles = 0; int deletedDirs = 0; @@ -250,7 +248,7 @@ private void executeClearAppData() { runOnUiThread(() -> { Toast.makeText(this, - "Cleared " + totalFiles + " files, " + totalDirs + " dirs\nRestarting...", + getString(R.string.toast_cleared_data, totalFiles, totalDirs), Toast.LENGTH_LONG).show(); new android.os.Handler().postDelayed(() -> { Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName()); diff --git a/app/src/main/java/git/artdeell/skymodloader/elfmod/ModManagerActivity.java b/app/src/main/java/git/artdeell/skymodloader/elfmod/ModManagerActivity.java index 81dbddd..a6bec37 100644 --- a/app/src/main/java/git/artdeell/skymodloader/elfmod/ModManagerActivity.java +++ b/app/src/main/java/git/artdeell/skymodloader/elfmod/ModManagerActivity.java @@ -212,10 +212,10 @@ public void setLogcatEnabled(boolean flag) { } else { startService(logcatIntent); } - Toast.makeText(this, "Logcat monitoring enabled", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.toast_logcat_enabled, Toast.LENGTH_SHORT).show(); } else { stopService(logcatIntent); - Toast.makeText(this, "Logcat monitoring disabled", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.toast_logcat_disabled, Toast.LENGTH_SHORT).show(); } } @@ -427,7 +427,7 @@ private void clearAppDataSelective() { } runOnUiThread(() -> { - Toast.makeText(this, "Data cleared. Restarting...", Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.toast_data_cleared_restarting, Toast.LENGTH_SHORT).show(); new android.os.Handler().postDelayed(() -> { Intent intent = getPackageManager().getLaunchIntentForPackage(getPackageName()); if (intent != null) { diff --git a/app/src/main/res/layout/about_dialog.xml b/app/src/main/res/layout/about_dialog.xml index cf0e39f..60191da 100644 --- a/app/src/main/res/layout/about_dialog.xml +++ b/app/src/main/res/layout/about_dialog.xml @@ -82,7 +82,7 @@ android:id="@+id/thatgamecompanyLink" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Sky is made by thatgamecompany" + android:text="@string/sky_attribution" android:textSize="11sp" android:alpha="0.3" android:padding="8dp" @@ -93,7 +93,7 @@ android:id="@+id/dialog_info_close" android:layout_width="match_parent" android:layout_height="wrap_content" - android:text="Close" + android:text="@string/close" android:textSize="15sp" android:textStyle="bold" android:gravity="center" diff --git a/app/src/main/res/layout/dialog_clear_data.xml b/app/src/main/res/layout/dialog_clear_data.xml index 9900788..97c6377 100644 --- a/app/src/main/res/layout/dialog_clear_data.xml +++ b/app/src/main/res/layout/dialog_clear_data.xml @@ -10,7 +10,7 @@ @@ -72,7 +72,7 @@ @@ -45,14 +45,14 @@ @@ -90,14 +90,14 @@ @@ -117,7 +117,7 @@ android:id="@+id/dialog_bootloader_cancel" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="Cancel" + android:text="@string/cancel" android:textSize="13sp" android:alpha="0.4" android:layout_gravity="end" diff --git a/app/src/main/res/layout/dialog_x.xml b/app/src/main/res/layout/dialog_x.xml index fe763c6..f3436b7 100644 --- a/app/src/main/res/layout/dialog_x.xml +++ b/app/src/main/res/layout/dialog_x.xml @@ -34,7 +34,7 @@ android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginBottom="10dp" - android:text="TITLE" + android:text="@string/dialog_title_placeholder" android:textSize="20sp" android:textStyle="bold" /> @@ -66,7 +66,7 @@ android:layout_marginStart="16dp" android:layout_marginTop="16dp" android:layout_marginEnd="8dp" - android:text="DESCRIPTION" + android:text="@string/dialog_description_placeholder" tools:text="Description" /> @@ -119,7 +119,7 @@ android:layout_margin="10dp" android:layout_weight="1" android:background="@drawable/buttons_3" - android:text="Cancel" + android:text="@string/cancel" android:textAllCaps="false" android:textColor="@color/white" /> @@ -130,7 +130,7 @@ android:layout_margin="10dp" android:layout_weight="1" android:background="@drawable/buttons_2" - android:text="NATRUAL" + android:text="@string/dialog_button_natural" android:textAllCaps="false" android:textColor="@color/black" /> diff --git a/app/src/main/res/layout/mod_manager.xml b/app/src/main/res/layout/mod_manager.xml index 9cb3f45..fd0dfb7 100644 --- a/app/src/main/res/layout/mod_manager.xml +++ b/app/src/main/res/layout/mod_manager.xml @@ -122,7 +122,7 @@ @@ -195,7 +195,7 @@ android:layout_marginBottom="7dp" android:background="@drawable/buttons" android:gravity="center" - android:text="GOOGLE PLAY STORE | GLOBAL VERSION\nPLAY" + android:text="@string/launch_google_play" android:textSize="12sp" android:maxLines="2" /> @@ -216,7 +216,7 @@ android:layout_height="54dp" android:background="@drawable/buttons" android:gravity="center" - android:text="APP GALLERY | HUAWEI VERSION\nPLAY" + android:text="@string/launch_huawei" android:textSize="12sp" android:maxLines="2" /> diff --git a/app/src/main/res/layout/setting_layout.xml b/app/src/main/res/layout/setting_layout.xml index 0931400..22eb640 100644 --- a/app/src/main/res/layout/setting_layout.xml +++ b/app/src/main/res/layout/setting_layout.xml @@ -37,7 +37,7 @@ android:id="@+id/setting_title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="SETTINGS" + android:text="@string/settings_title" android:textSize="20sp" android:textStyle="bold" android:letterSpacing="0.06" /> @@ -58,7 +58,7 @@ android:layout_height="wrap_content" android:layout_marginStart="6dp" android:layout_marginBottom="6dp" - android:text="General" + android:text="@string/section_general" android:textSize="12sp" android:textStyle="bold" android:textAllCaps="true" @@ -78,7 +78,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:layout_gravity="center_vertical" - android:text="Hide Canvas menu" + android:text="@string/hide_canvas_menu" android:textSize="15sp" /> @@ -169,7 +169,7 @@ android:id="@+id/server_url_input" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="insert-url" + android:hint="@string/server_url_hint" android:singleLine="true" android:inputType="textUri" android:textSize="14sp" /> @@ -188,7 +188,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:layout_gravity="center_vertical" - android:text="Enable Logcat Monitoring" + android:text="@string/enable_logcat_monitoring" android:textSize="15sp" /> @@ -276,7 +276,7 @@ @@ -284,7 +284,7 @@ + Bitte den Mod-Manager starten und eine Version wählen (Live/Beta/Huawei). Sky ist nicht installiert — Canvas benötigt eine installierte Version von Sky! + Mod-Verwaltung + Mod hinzufügen + Ungültiger Mod. Fehlende Abhängigkeiten? + Mod konnte nicht entfernt werden + Andere Mods hängen davon ab — bitte zuerst diese entfernen! + %s hängt von dem Mod ab, den du entfernen möchtest + Ein-/Ausgabefehler + Allgemeiner Fehler + Mod konnte nicht hinzugefügt werden + Mod konnte nicht erkannt werden + Mod benötigt %s in Version %d.%d oder neuer, diese Abhängigkeit ist aber nicht verfügbar + Ein Mod mit diesem Namen existiert bereits + Updater überspringen + Anmelden mit %s + Sky Beta unterstützen + Spielen + Dev-Server + Bitte warten + Suche nach Updates… + Ein Update ist verfügbar! + Wird heruntergeladen… + Download abgeschlossen! + Überspringen + Aktualisieren + Installieren + Erneut versuchen + Update fehlgeschlagen + Heruntergeladene Daten sind beschädigt + Spiel ist nicht installiert + SPIELEN + MODS + Nach Updates für [%1$s] suchen? + Prüfung fehlgeschlagen + Update fehlgeschlagen + Das Update startet nach Bestätigung. + Prüfen + Neues Update für %s verfügbar! + Installieren + Ein Update läuft bereits + Download läuft + AKTUELL + Mod ist auf dem neuesten Stand\nVersion: %1$s + Entfernen + Nach Updates suchen + Canvas-Menü ausblenden und Mods automatisch aktivieren + Spiel-Updates überspringen + Cheat Engine Server aktivieren + Eigener Server + + Schließen + Mod-Symbol + Keine Update-Quelle vorhanden + Suche nach Updates… + Update gefunden! + Keine Updates verfügbar. + Update wird heruntergeladen… + Update wird installiert… + Update abgeschlossen! + Ein Fehler ist aufgetreten + EINSTELLUNGEN + + + Sky ist ein Spiel von thatgamecompany + + + ⚠️ App-Daten löschen + BLEIBT ERHALTEN + WIRD GELÖSCHT + ✕ Alles andere + Löschen + Abbrechen + + + Eigene libBootloader.so + Datei auswählen + Wähle eine eigene libBootloader.so aus dem Speicher, um den aktuellen Bootloader zu ersetzen + Original wiederherstellen + Eigene Datei löschen und das Original aus der Sky-APK neu entpacken + + + TITEL + BESCHREIBUNG + + + GOOGLE PLAY STORE | GLOBALE VERSION\nSPIELEN + APP GALLERY | HUAWEI-VERSION\nSPIELEN + + + Allgemein + Canvas-Menü ausblenden + Entwickleroptionen + Cheat Engine Server + Eigener Server + Server-Adresse + Logcat-Protokollierung + Erweitert + Eigene libBootloader.so + Eigenen Bootloader auswählen oder Original wiederherstellen + App-Daten löschen + Alle Daten löschen außer Mods, ThatSkyMod-Ordner und user.xml + + + Der Ursprung + Von zwei Entwicklern aus Liebe zu Sky erschaffen. + Heute + Canvas lebt dank ihnen weiter. + Das Team + Alle, die Canvas besser gemacht haben. + Gestaltung + Die kreativen Köpfe hinter dem Design. + Community + Werde Teil von Tausenden Spielern, die Canvas täglich nutzen. + + + Autor + Ehemaliger Autor + Maintainer + Banner-Design + App-Icon + + + Telegram (English) + Telegram (Russisch) + + + Stacktrace in Zwischenablage kopiert + Logcat-Protokollierung aktiviert + Logcat-Protokollierung deaktiviert + Zurückgesetzt. Das Original wird beim nächsten Start neu entpackt. + ✓ Eigene libBootloader.so angewendet! + Daten werden gelöscht… + %1$d Dateien, %2$d Ordner gelöscht\nNeustart… + Daten gelöscht. Neustart… + 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..26d5d12 --- /dev/null +++ b/app/src/main/res/values-ru/strings.xml @@ -0,0 +1,136 @@ + + Откройте менеджер модов и выберите версию (Live/Beta/Huawei). Sky не установлена — для работы Canvas необходима установленная игра! + Менеджер модов + Добавить мод + Некорректный мод. Отсутствуют зависимости? + Не удалось удалить мод + Другие моды зависят от этого — сначала удалите их! + %s зависит от мода, который вы пытаетесь удалить + Ошибка ввода/вывода + Общая ошибка + Не удалось добавить мод + Не удалось распознать мод + Мод требует %s версии %d.%d или новее, но эта зависимость недоступна + Мод с таким названием уже существует + Пропустить обновление + Войти через %s + Поддержка Sky Beta + Играть + Dev-сервер + Подождите + Проверка обновлений… + Доступно обновление! + Загрузка… + Загрузка завершена! + Пропустить + Обновить + Установить + Повторить + Не удалось обновить + Загруженные данные повреждены + Игра не установлена + ИГРАТЬ + МОДЫ + Проверить обновления для [%1$s]? + Ошибка проверки + Ошибка обновления + Обновление начнётся после подтверждения. + Проверить + Доступно обновление для %s! + Установить + Обновление уже выполняется + Идёт загрузка + АКТУАЛЬНАЯ ВЕРСИЯ + Мод обновлён до последней версии\nВерсия: %1$s + Удалить + Проверить обновления + Скрыть меню Canvas и автоматически включать моды + Пропускать обновления игры + Включить сервер Cheat Engine + Свой сервер + + Закрыть + иконка мода + Нет источника обновлений + Проверка обновлений… + Найдено обновление! + Обновлений нет. + Загрузка обновления… + Установка обновления… + Обновление завершено! + Произошла ошибка + НАСТРОЙКИ + + + Sky — игра от thatgamecompany + + + ⚠️ Очистка данных + СОХРАНЯЕТСЯ + УДАЛЯЕТСЯ + ✕ Всё остальное + Очистить + Отмена + + + Свой libBootloader.so + Выбрать файл + Выберите свой libBootloader.so из хранилища для замены текущего загрузчика + Вернуть оригинал + Удалить пользовательский файл и заново извлечь оригинал из APK Sky + + + ЗАГОЛОВОК + ОПИСАНИЕ + + + GOOGLE PLAY STORE | ГЛОБАЛЬНАЯ ВЕРСИЯ\nИГРАТЬ + APP GALLERY | ВЕРСИЯ HUAWEI\nИГРАТЬ + + + Основные + Скрыть меню Canvas + Для разработчиков + Сервер Cheat Engine + Свой сервер + Адрес сервера + Мониторинг Logcat + Дополнительно + Свой libBootloader.so + Выбрать свой загрузчик или вернуть оригинал + Очистка данных + Удалить все данные кроме модов, папок ThatSkyMod и user.xml + + + Корни + Создан с нуля двумя разработчиками, влюблёнными в Sky. + Сегодня + Canvas жив благодаря им. + Команда + Все, кто сделал Canvas лучше. + Оформление + Авторы визуального стиля. + Сообщество + Присоединяйтесь к тысячам игроков, использующих Canvas каждый день. + + + Автор + Автор · бывший + Мейнтейнер + Автор баннера + Автор иконки + + + Telegram (English) + Telegram (Русский) + + + Стек вызовов скопирован + Мониторинг Logcat включён + Мониторинг Logcat выключен + Сброс выполнен. Оригинал будет извлечён при следующем запуске. + ✓ Свой libBootloader.so применён! + Очистка данных… + Удалено файлов: %1$d, папок: %2$d\nПерезапуск… + Данные очищены. Перезапуск… + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3ff9ad4..1e5de4d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,9 +1,9 @@ - Canvas + Canvas Open Mod Manager and choose Live/Beta/Huawei. Sky is not installed. You must have Sky installed in order to use this! Mod Manager Add mod - %s (%s) + %s (%s) Invalid mod. Missing dependencies? Unable to remove mod You have mods that depend on this mod, please remove them first! @@ -14,8 +14,8 @@ Mod is not readable Mod depends on %s %d.%d or newer, but it is not available A mod under this name already exists - %d.%d.%d - Skip the updater + %d.%d.%d + Skip the updater Sign in with %s Enable Sky Beta support Play @@ -31,10 +31,10 @@ Retry Failed to update Downloaded data not readable - Canvas %s - huawei - Beta - Live + Canvas %s + Huawei + Beta + Live Game is not installed PLAY MODS @@ -43,7 +43,7 @@ "Updating Failed" Note: Update will start if you feel OK. Check - Version: %s\n%s + Version: %s\n%s %s Has a new update!! Install Updater is busy @@ -68,4 +68,85 @@ Update complete! An error has occurred SETTINGS + + + Sky is made by thatgamecompany + + + ⚠️ Clear App Data + PRESERVED + ✓ mods/ + ✓ Accounts/ + ✓ config/ + ✓ AccountAuthInfo.bin + ✓ shared_prefs/user.xml + DELETED + ✕ Everything else + Clear + Cancel + + + Custom libBootloader.so + Pick file + Choose a custom libBootloader.so file from the storage to replace the current bootloader + Reset to original + Delete the custom file and re-extract the original from Sky\'s APK + + + TITLE + DESCRIPTION + 0% + NATURAL + + + GOOGLE PLAY STORE | GLOBAL VERSION\nPLAY + APP GALLERY | HUAWEI VERSION\nPLAY + + + General + Hide Canvas menu + Developer Options + Cheat Engine Server + Custom server + Server URL + insert-url + Enable Logcat Monitoring + Advanced + Custom libBootloader.so + Pick a custom bootloader or reset to original + Clear App Data + Delete all data except mods, ThatSkyMod\'s folders and user.xml + + + The Origin + Built from scratch by two developers who love Sky. + The Present + Currently keeping Canvas alive. + The Team + Everyone who made Canvas better. + The Art + The faces behind the visuals. + The Community + Join thousands of players who use Canvas every day. + + + Author + Author · retired + Maintainer + Banner artwork + App icon + + + English Telegram + Russian Telegram + + + Stack trace copied to clipboard + Logcat monitoring enabled + Logcat monitoring disabled + Reset applied. Original version will be extracted at the next launch. + ✓ Custom libBootloader.so applied! + Clearing data… + Cleared %1$d files, %2$d dirs\nRestarting… + Data cleared. Restarting… \ No newline at end of file diff --git a/app/src/main/res/xml/locales_config.xml b/app/src/main/res/xml/locales_config.xml new file mode 100644 index 0000000..431166d --- /dev/null +++ b/app/src/main/res/xml/locales_config.xml @@ -0,0 +1,6 @@ + + + + + +