From 1ce0bdc680dd73939cbff10a1f9db92588b4eaa1 Mon Sep 17 00:00:00 2001 From: Ark74 Date: Sat, 4 Apr 2026 14:34:54 -0600 Subject: [PATCH] =?UTF-8?q?[controller]=20reacomodo=20de=20cadenas=20y=20t?= =?UTF-8?q?raducci=C3=B3n.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apk/controller/app/build.gradle | 4 +- .../app/release/output-metadata.json | 10 +- .../app/src/main/AndroidManifest.xml | 1 + .../org/iiab/controller/IIABWatchdog.java | 10 +- .../java/org/iiab/controller/LogManager.java | 8 +- .../org/iiab/controller/MainActivity.java | 20 +- .../org/iiab/controller/PortalActivity.java | 18 +- .../org/iiab/controller/SetupActivity.java | 10 +- .../org/iiab/controller/TProxyService.java | 24 +- .../iiab/controller/VpnRecoveryReceiver.java | 6 +- .../org/iiab/controller/WatchdogService.java | 21 +- .../app/src/main/res/values-es/strings.xml | 239 +++++++++++------- .../src/main/res/values-ru-rRU/strings.xml | 239 +++++++++++------- .../app/src/main/res/values/strings.xml | 226 ++++++++++------- 14 files changed, 505 insertions(+), 331 deletions(-) diff --git a/apk/controller/app/build.gradle b/apk/controller/app/build.gradle index ed5cdf0..fa313b6 100644 --- a/apk/controller/app/build.gradle +++ b/apk/controller/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "org.iiab.controller" minSdkVersion 24 targetSdkVersion 34 - versionCode 27 - versionName "v0.1.31beta" + versionCode 28 + versionName "v0.1.32beta" setProperty("archivesBaseName", "$applicationId-$versionName") ndk { abiFilters "armeabi-v7a", "arm64-v8a", "x86", "x86_64" diff --git a/apk/controller/app/release/output-metadata.json b/apk/controller/app/release/output-metadata.json index 8239e44..cff0147 100644 --- a/apk/controller/app/release/output-metadata.json +++ b/apk/controller/app/release/output-metadata.json @@ -11,9 +11,9 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 27, - "versionName": "v0.1.31beta", - "outputFile": "org.iiab.controller-v0.1.31beta-release.apk" + "versionCode": 28, + "versionName": "v0.1.32beta", + "outputFile": "org.iiab.controller-v0.1.32beta-release.apk" } ], "elementType": "File", @@ -22,14 +22,14 @@ "minApi": 28, "maxApi": 30, "baselineProfiles": [ - "baselineProfiles/1/org.iiab.controller-v0.1.31beta-release.dm" + "baselineProfiles/1/org.iiab.controller-v0.1.32beta-release.dm" ] }, { "minApi": 31, "maxApi": 2147483647, "baselineProfiles": [ - "baselineProfiles/0/org.iiab.controller-v0.1.31beta-release.dm" + "baselineProfiles/0/org.iiab.controller-v0.1.32beta-release.dm" ] } ], diff --git a/apk/controller/app/src/main/AndroidManifest.xml b/apk/controller/app/src/main/AndroidManifest.xml index 3940303..72845c8 100644 --- a/apk/controller/app/src/main/AndroidManifest.xml +++ b/apk/controller/app/src/main/AndroidManifest.xml @@ -92,4 +92,5 @@ tools:ignore="QueryAllPackagesPermission" /> + diff --git a/apk/controller/app/src/main/java/org/iiab/controller/IIABWatchdog.java b/apk/controller/app/src/main/java/org/iiab/controller/IIABWatchdog.java index eb9bf43..c0adcb4 100644 --- a/apk/controller/app/src/main/java/org/iiab/controller/IIABWatchdog.java +++ b/apk/controller/app/src/main/java/org/iiab/controller/IIABWatchdog.java @@ -86,11 +86,11 @@ public class IIABWatchdog { context.startService(intent); } catch (SecurityException e) { // This catches specific permission errors on newer Android versions - Log.e(TAG, "Permission Denied: Ensure manifest has RUN_COMMAND and app is not restricted.", e); + Log.e(TAG, context.getString(R.string.permission_denied_log), e); writeToBlackBox(context, context.getString(R.string.critical_os_blocked)); } catch (Exception e) { - Log.e(TAG, "Unexpected error sending intent to Termux", e); - writeToBlackBox(context, "Pulse Error: " + e.getMessage()); + Log.e(TAG, context.getString(R.string.unexpected_error_termux), e); + writeToBlackBox(context, context.getString(R.string.pulse_error_log, e.getMessage())); } } @@ -143,7 +143,7 @@ public class IIABWatchdog { writer.append(datePrefix).append(" - ").append(message).append("\n"); broadcastLog(context, message); } catch (IOException e) { - Log.e(TAG, "Failed to write to BlackBox", e); + Log.e(TAG, context.getString(R.string.failed_write_blackbox), e); } } @@ -199,7 +199,7 @@ public class IIABWatchdog { pw.println(l); } } catch (IOException e) { - Log.e(TAG, "Maintenance write failed", e); + Log.e(TAG, context.getString(R.string.maintenance_write_failed), e); } } diff --git a/apk/controller/app/src/main/java/org/iiab/controller/LogManager.java b/apk/controller/app/src/main/java/org/iiab/controller/LogManager.java index c3a1f8e..4c48512 100644 --- a/apk/controller/app/src/main/java/org/iiab/controller/LogManager.java +++ b/apk/controller/app/src/main/java/org/iiab/controller/LogManager.java @@ -74,11 +74,11 @@ public class LogManager { long size = logFile.exists() ? logFile.length() : 0; if (size < 1024) { - return size + " B"; + return context.getString(R.string.log_size_bytes, size); } else if (size < 1024 * 1024) { - return String.format(Locale.getDefault(), "%.1f KB", size / 1024.0); + return String.format(Locale.getDefault(), context.getString(R.string.log_size_kb), size / 1024.0); } else { - return String.format(Locale.getDefault(), "%.2f MB", size / (1024.0 * 1024.0)); + return String.format(Locale.getDefault(), context.getString(R.string.log_size_mb), size / (1024.0 * 1024.0)); } } -} \ No newline at end of file +} diff --git a/apk/controller/app/src/main/java/org/iiab/controller/MainActivity.java b/apk/controller/app/src/main/java/org/iiab/controller/MainActivity.java index d8e8fcb..2f7d1a2 100644 --- a/apk/controller/app/src/main/java/org/iiab/controller/MainActivity.java +++ b/apk/controller/app/src/main/java/org/iiab/controller/MainActivity.java @@ -220,9 +220,9 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe result -> { for (Map.Entry entry : result.entrySet()) { if (entry.getKey().equals(TERMUX_PERMISSION)) { - addToLog(entry.getValue() ? "Termux permission granted" : "Termux permission denied"); + addToLog(getString(entry.getValue() ? R.string.termux_perm_granted : R.string.termux_perm_denied)); } else if (entry.getKey().equals(Manifest.permission.POST_NOTIFICATIONS)) { - addToLog(entry.getValue() ? "Notification permission granted" : "Notification permission denied"); + addToLog(getString(entry.getValue() ? R.string.notif_perm_granted : R.string.notif_perm_denied)); } } prepareVpn(); @@ -298,7 +298,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe if (targetServerState != null) return; // Freeze the transition text and define the TARGET state - serverTransitionText = !isServerAlive ? "Booting..." : "Shutting down..."; + serverTransitionText = !isServerAlive ? getString(R.string.server_booting) : getString(R.string.server_shutting_down); targetServerState = !isServerAlive; // Lock the UI and start infinite animation @@ -311,7 +311,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe targetServerState = null; // Abort transition btnServerControl.stopProgress(); updateUIColorsAndVisibility(); - addToLog("Warning: Server state transition timed out."); + addToLog(getString(R.string.server_timeout_warning)); } }; timeoutHandler.postDelayed(timeoutRunnable, getResources().getInteger(R.integer.server_cool_off_duration_ms)); @@ -560,7 +560,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe String version = pInfo.versionName; versionFooter.setText(version); } catch (PackageManager.NameNotFoundException e) { - versionFooter.setText("v0.1.x"); + versionFooter.setText(R.string.default_version); } } @@ -629,7 +629,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe private void toggleVisibility(View view, TextView label, String text) { boolean isGone = view.getVisibility() == View.GONE; view.setVisibility(isGone ? View.VISIBLE : View.GONE); - label.setText((isGone ? "▼ " : "▶ ") + text); + label.setText(String.format(getString(isGone ? R.string.label_separator_down : R.string.label_separator_up), text)); } @Override @@ -931,7 +931,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe // STATE: NORMAL (Unlocked) btnServerControl.setAlpha(1.0f); if (isServerAlive) { - btnServerControl.setText("🛑 Stop Server"); + btnServerControl.setText(R.string.stop_server); if (isWatchdogOn) { deckContainer.setBackgroundColor(Color.parseColor("#44FF9800")); btnServerControl.setBackgroundTintList(ContextCompat.getColorStateList(this, R.color.btn_watchdog_on)); @@ -943,7 +943,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe } } else { deckContainer.setBackgroundColor(Color.TRANSPARENT); - btnServerControl.setText("🚀 Launch Server"); + btnServerControl.setText(R.string.launch_server); btnServerControl.setBackgroundTintList(ContextCompat.getColorStateList(this, R.color.btn_success)); watchdogControl.setBackgroundTintList(ContextCompat.getColorStateList(this, isWatchdogOn ? R.color.btn_watchdog_on : R.color.btn_watchdog_off)); } @@ -1040,9 +1040,9 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe } else { startService(intent); } - addToLog("Sent to Termux: " + actionFlag); + addToLog(getString(R.string.sent_to_termux, actionFlag)); } catch (Exception e) { - addToLog("CRITICAL: Failed Termux Intent: " + e.getMessage()); + addToLog(getString(R.string.failed_termux_intent, e.getMessage())); } } diff --git a/apk/controller/app/src/main/java/org/iiab/controller/PortalActivity.java b/apk/controller/app/src/main/java/org/iiab/controller/PortalActivity.java index cd5a903..98738ad 100644 --- a/apk/controller/app/src/main/java/org/iiab/controller/PortalActivity.java +++ b/apk/controller/app/src/main/java/org/iiab/controller/PortalActivity.java @@ -95,11 +95,11 @@ public class PortalActivity extends AppCompatActivity { rawUrl = "http://localhost:8085/home"; } - // 1. Damos alcance global seguro a la URL para todos los lambdas de aquí en adelante + // We are giving the URL secure global reach for all lambdas from now on final String finalTargetUrl = rawUrl; btnHome.setOnClickListener(v -> { - webView.loadUrl(finalTargetUrl); // Usamos la variable final + webView.loadUrl(finalTargetUrl); resetTimer.run(); }); @@ -108,9 +108,9 @@ public class PortalActivity extends AppCompatActivity { if (isPageLoading) { webView.stopLoading(); } else { - // 1. Disable cache temporarily + // Disable cache temporarily webView.getSettings().setCacheMode(android.webkit.WebSettings.LOAD_NO_CACHE); - // 2. Force download from scratch + // Force download from scratch webView.reload(); } resetTimer.run(); @@ -123,12 +123,12 @@ public class PortalActivity extends AppCompatActivity { String url = request.getUrl().toString(); String host = request.getUrl().getHost(); - // 1. Internal server link (Box) + // Internal server link (Box) if (host != null && (host.equals("box") || host.equals("127.0.0.1") || host.equals("localhost"))) { return false; // Remains in our app and travels through the proxy } - // 2. External link (Real Internet) + // External link (Real Internet) try { // Tell Android to find the correct app to open this (Chrome, YouTube, etc.) Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl()); @@ -184,11 +184,11 @@ public class PortalActivity extends AppCompatActivity { webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setDomStorageEnabled(true); - // 2. Port and Mirror logic + // Port and Mirror logic int tempPort = prefs.getSocksPort(); if (tempPort <= 0) tempPort = 1080; - // 3. Restauramos la variable segura para el puerto + // We restored the secure variable for the port final int finalProxyPort = tempPort; // 4. Proxy block (ONLY IF VPN IS ACTIVE) @@ -216,7 +216,7 @@ public class PortalActivity extends AppCompatActivity { } } - // 4. Cleanup (Important to not leave the proxy active) + // Cleanup (Important to not leave the proxy active) @Override protected void onDestroy() { super.onDestroy(); diff --git a/apk/controller/app/src/main/java/org/iiab/controller/SetupActivity.java b/apk/controller/app/src/main/java/org/iiab/controller/SetupActivity.java index 9518241..e43b722 100644 --- a/apk/controller/app/src/main/java/org/iiab/controller/SetupActivity.java +++ b/apk/controller/app/src/main/java/org/iiab/controller/SetupActivity.java @@ -154,7 +154,7 @@ public class SetupActivity extends AppCompatActivity { intent.setData(Uri.parse("package:com.termux")); startActivity(intent); } catch (Exception e) { - Snackbar.make(v, "Termux is not installed or device not supported.", Snackbar.LENGTH_LONG).show(); + Snackbar.make(v, R.string.termux_not_installed_error, Snackbar.LENGTH_LONG).show(); } }); @@ -165,7 +165,7 @@ public class SetupActivity extends AppCompatActivity { intent.setData(Uri.parse("package:com.termux")); startActivity(intent); } catch (Exception e) { - Snackbar.make(v, "Termux is not installed.", Snackbar.LENGTH_LONG).show(); + Snackbar.make(v, R.string.termux_not_installed, Snackbar.LENGTH_LONG).show(); } }); } @@ -189,8 +189,8 @@ public class SetupActivity extends AppCompatActivity { switchView.startAnimation(shake); // Show Snackbar with action to go to Settings - Snackbar.make(findViewById(android.R.id.content), "To revoke permissions, you must do it from system settings.", Snackbar.LENGTH_LONG) - .setAction("SETTINGS", v -> openAppSettings()).show(); + Snackbar.make(findViewById(android.R.id.content), R.string.revoke_permission_warning, Snackbar.LENGTH_LONG) + .setAction(R.string.settings_label, v -> openAppSettings()).show(); } private void openAppSettings() { @@ -242,4 +242,4 @@ public class SetupActivity extends AppCompatActivity { } return true; } -} \ No newline at end of file +} diff --git a/apk/controller/app/src/main/java/org/iiab/controller/TProxyService.java b/apk/controller/app/src/main/java/org/iiab/controller/TProxyService.java index 141c30a..8e08804 100644 --- a/apk/controller/app/src/main/java/org/iiab/controller/TProxyService.java +++ b/apk/controller/app/src/main/java/org/iiab/controller/TProxyService.java @@ -76,7 +76,7 @@ public class TProxyService extends VpnService { private void syncWatchdogLocks() { Preferences prefs = new Preferences(this); boolean watchdogEnabled = prefs.getWatchdogEnable(); - Log.d(TAG, "Syncing Watchdog state. Enabled: " + watchdogEnabled); + Log.d(TAG, getString(R.string.syncing_watchdog, watchdogEnabled)); if (watchdogEnabled) { acquireLocks(); @@ -94,7 +94,7 @@ public class TProxyService extends VpnService { IIABWatchdog.logSessionStart(this); watchdogThread = new Thread(() -> { - Log.i(TAG, "Watchdog Thread: Started loop"); + Log.i(TAG, getString(R.string.watchdog_thread_started)); while (isWatchdogRunning) { try { // Perform only the heartbeat stimulus (Intent-based) @@ -106,13 +106,13 @@ public class TProxyService extends VpnService { // Sleep for 30 seconds Thread.sleep(30000); } catch (InterruptedException e) { - Log.i(TAG, "Watchdog Thread: Interrupted, stopping..."); + Log.i(TAG, getString(R.string.watchdog_thread_interrupted)); break; } catch (Exception e) { - Log.e(TAG, "Watchdog Thread: Error in loop", e); + Log.e(TAG, getString(R.string.watchdog_thread_error), e); } } - Log.i(TAG, "Watchdog Thread: Loop ended"); + Log.i(TAG, getString(R.string.watchdog_thread_ended)); }); watchdogThread.setName("IIAB-Watchdog-Thread"); watchdogThread.start(); @@ -133,16 +133,16 @@ public class TProxyService extends VpnService { PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "IIAB:TProxyWakeLock"); wakeLock.acquire(); - Log.i(TAG, "CPU WakeLock acquired under VPN shield"); + Log.i(TAG, getString(R.string.cpu_wakelock_acquired)); } if (wifiLock == null) { WifiManager wm = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); wifiLock = wm.createWifiLock(WifiManager.WIFI_MODE_FULL_HIGH_PERF, "IIAB:TProxyWifiLock"); wifiLock.acquire(); - Log.i(TAG, "Wi-Fi Lock acquired under VPN shield"); + Log.i(TAG, getString(R.string.wifi_lock_acquired)); } } catch (Exception e) { - Log.e(TAG, "Error acquiring locks", e); + Log.e(TAG, getString(R.string.error_acquiring_locks), e); } } @@ -150,12 +150,12 @@ public class TProxyService extends VpnService { if (wakeLock != null && wakeLock.isHeld()) { wakeLock.release(); wakeLock = null; - Log.i(TAG, "CPU WakeLock released"); + Log.i(TAG, getString(R.string.cpu_wakelock_released)); } if (wifiLock != null && wifiLock.isHeld()) { wifiLock.release(); wifiLock = null; - Log.i(TAG, "Wi-Fi Lock released"); + Log.i(TAG, getString(R.string.wifi_lock_released)); } } @@ -228,7 +228,7 @@ public class TProxyService extends VpnService { builder.addDisallowedApplication(selfName); if (prefs.getMaintenanceMode()) { // Verify if the maintenance mode is enabled builder.addDisallowedApplication("com.termux"); - Log.i(TAG, "Maintenance mode enabled: Termux has direct Internet access"); + Log.i(TAG, getString(R.string.maintenance_mode_enabled)); } } catch (NameNotFoundException e) { } @@ -283,7 +283,7 @@ public class TProxyService extends VpnService { TProxyStartService(tproxy_file.getAbsolutePath(), tunFd.getFd()); prefs.setEnable(true); - String channelName = "socks5"; + String channelName = getString(R.string.tproxy_channel_name); initNotificationChannel(channelName); createNotification(channelName); diff --git a/apk/controller/app/src/main/java/org/iiab/controller/VpnRecoveryReceiver.java b/apk/controller/app/src/main/java/org/iiab/controller/VpnRecoveryReceiver.java index 709db7e..85f47f2 100644 --- a/apk/controller/app/src/main/java/org/iiab/controller/VpnRecoveryReceiver.java +++ b/apk/controller/app/src/main/java/org/iiab/controller/VpnRecoveryReceiver.java @@ -34,7 +34,7 @@ public class VpnRecoveryReceiver extends BroadcastReceiver { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel( - CHANNEL_ID, "VPN Recovery", + CHANNEL_ID, context.getString(R.string.recovery_channel_name), NotificationManager.IMPORTANCE_HIGH ); channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC); @@ -52,8 +52,8 @@ public class VpnRecoveryReceiver extends BroadcastReceiver { NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID) .setSmallIcon(android.R.drawable.ic_dialog_alert) - .setContentTitle("Safe Pocket Web Interrupted") - .setContentText("Tap to restore secure environment immediately.") + .setContentTitle(context.getString(R.string.recovery_notif_title)) + .setContentText(context.getString(R.string.recovery_notif_text)) .setPriority(NotificationCompat.PRIORITY_HIGH) .setCategory(NotificationCompat.CATEGORY_ALARM) .setAutoCancel(true) diff --git a/apk/controller/app/src/main/java/org/iiab/controller/WatchdogService.java b/apk/controller/app/src/main/java/org/iiab/controller/WatchdogService.java index 38b3eb0..9b79487 100644 --- a/apk/controller/app/src/main/java/org/iiab/controller/WatchdogService.java +++ b/apk/controller/app/src/main/java/org/iiab/controller/WatchdogService.java @@ -63,12 +63,12 @@ public class WatchdogService extends Service { @Override public void onDestroy() { - // 1. Avisamos inmediatamente a la UI que nos estamos apagando + // We immediately notify the UI that we are shutting down. Intent stopIntent = new Intent(ACTION_STATE_STOPPED); stopIntent.setPackage(getPackageName()); sendBroadcast(stopIntent); - // 2. Limpiamos la basura + // We clean up the trash cancelHeartbeat(); IIABWatchdog.logSessionStop(this); stopForeground(true); @@ -85,6 +85,7 @@ public class WatchdogService extends Service { return PendingIntent.getService(this, 0, intent, flags); } + @android.annotation.SuppressLint("ScheduleExactAlarm") private void scheduleHeartbeat() { AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE); PendingIntent pendingIntent = getHeartbeatPendingIntent(); @@ -92,12 +93,12 @@ public class WatchdogService extends Service { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // This wakes up the device even in Doze Mode alarmManager.setExactAndAllowWhileIdle(AlarmManager.ELAPSED_REALTIME_WAKEUP, - SystemClock.elapsedRealtime() + HEARTBEAT_INTERVAL_MS, - pendingIntent); + SystemClock.elapsedRealtime() + HEARTBEAT_INTERVAL_MS, + pendingIntent); } else { alarmManager.setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP, - SystemClock.elapsedRealtime() + HEARTBEAT_INTERVAL_MS, - pendingIntent); + SystemClock.elapsedRealtime() + HEARTBEAT_INTERVAL_MS, + pendingIntent); } } @@ -117,10 +118,10 @@ public class WatchdogService extends Service { private void createNotificationChannel() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel( - CHANNEL_ID, "IIAB Watchdog Service", + CHANNEL_ID, getString(R.string.watchdog_channel_name), NotificationManager.IMPORTANCE_HIGH ); - channel.setDescription("Ensures services remain active when screen is off."); + channel.setDescription(getString(R.string.watchdog_channel_desc)); NotificationManager manager = getSystemService(NotificationManager.class); if (manager != null) { manager.createNotificationChannel(channel); @@ -134,8 +135,8 @@ public class WatchdogService extends Service { PendingIntent.FLAG_IMMUTABLE); return new NotificationCompat.Builder(this, CHANNEL_ID) - .setContentTitle("IIAB Watchdog Active") - .setContentText("Protecting Termux environment...") + .setContentTitle(getString(R.string.watchdog_notif_title)) + .setContentText(getString(R.string.watchdog_notif_text)) .setSmallIcon(android.R.drawable.ic_lock_idle_lock) .setContentIntent(pendingIntent) .setPriority(NotificationCompat.PRIORITY_HIGH) diff --git a/apk/controller/app/src/main/res/values-es/strings.xml b/apk/controller/app/src/main/res/values-es/strings.xml index d773a31..b3151d1 100644 --- a/apk/controller/app/src/main/res/values-es/strings.xml +++ b/apk/controller/app/src/main/res/values-es/strings.xml @@ -1,96 +1,155 @@ - Initial Setup - Welcome to the %1$s setup wizard.\n\nIn order to work properly, we need the following permissions: - Push Notifications - Termux Execution - Safe Pocket Web (VPN) - Disable Battery Optimization - Continue - IIAB-oA Controller - Dirección Socks: - Dirección UDP Socks: - Puerto Socks: - Usuario Socks: - Contraseña Socks: - DNS IPv4: - DNS IPv6: - Relé UDP sobre TCP - DNS Remoto - IPv4 - IPv6 - Global - Aplicaciones - Guardar - Activar Safe Pocket Web - Desactivar Safe Pocket Web - Habilite URLs amigables. Bloquee las amenazas. - Activar\nWatchdog Maestro - Desactivar\nWatchdog Maestro - ¿Reiniciar historial de log? - Esto borrará permanentemente todos los logs de conexión guardados. Esta acción no se puede deshacer. - El archivo de log está creciendo demasiado rápido, verifique si algo está fallando + + IIAB-oA Controller + v0.1.x + Guardar + Cancelar + Guardado + Ajustes Guardados + CORREGIR + Configuración + Ajustes del Túnel + Log de Conexión + AJUSTES - - 🚀 Explorar Contenido - Protege Termux del modo Doze y mantiene el Wi-Fi activo. - Reiniciar Log - Copiar Todo - Sistema listo...\n - Configuración - Ajustes del Túnel - Log de Conexión - Aplicación Iniciada - --- No se encontró el archivo BlackBox --- - --- Cargando Historial --- - Error al leer el historial: %s - --- Fin del Historial --- - Pulso de recuperación recibido del sistema. Forzando VPN... - Optimización de Batería - Para que el Watchdog funcione de manera confiable, desactive las optimizaciones de batería para esta aplicación. - Ir a Ajustes - Cancelar - Guardado - Ajustes Guardados - Log reiniciado - Log reiniciado por el usuario - Log copiado al portapapeles - Watchdog Detenido - Watchdog Iniciado - Deteniendo VPN... - Iniciando VPN... - Log borrado - Error al reiniciar log: %s - Desbloquear Watchdog Maestro - Se requiere autenticación para detener la protección de Termux - Autenticación exitosa. Desconectando... - Autenticación requerida - Autentíquese para desactivar el entorno seguro - Seguridad Requerida - Debe configurar un PIN, Patrón o Huella digital en su dispositivo antes de activar el entorno seguro. - Conexión iniciada por el usuario - Permiso de VPN concedido. Conectando... + + Configuración Inicial + Bienvenido al asistente de configuración de %1$s.\n\nPara funcionar correctamente, necesitamos los siguientes permisos: + Notificaciones Push + Ejecución de Termux + Safe Pocket Web (VPN) + Desactivar Optimización de Batería + Continuar + Para revocar permisos, debe hacerlo desde los ajustes del sistema. + Termux no está instalado o el dispositivo no es compatible. + Termux no está instalado. - - Pulso: Estimulando Termux... - CRÍTICO: El SO bloqueó el estímulo a Termux (SecurityException). - PING 8085: OK - PING 8085: ERROR (%s) - SESIÓN DE LATIDO INICIADA - SESIÓN DE LATIDO DETENIDA + + Activar Safe Pocket Web + Desactivar Safe Pocket Web + Habilite URLs amigables. Bloquee las amenazas. + Dirección Socks: + Dirección UDP Socks: + Puerto Socks: + Usuario Socks: + Contraseña Socks: + DNS IPv4: + DNS IPv6: + Relé UDP sobre TCP + DNS Remoto + IPv4 + IPv6 + Global + Aplicaciones + Deteniendo VPN... + Iniciando VPN... + Conexión iniciada por el usuario + Permiso de VPN concedido. Conectando... + socks5 - - [Termux] Estímulo OK (exit 0) - [Termux] Error de pulso (exit %1$d): %2$s + + Activar\nWatchdog Maestro + Desactivar\nWatchdog Maestro + Protege Termux del modo Doze y mantiene el Wi-Fi activo. + Watchdog Detenido + Watchdog Iniciado + Servicio IIAB Watchdog + Asegura que los servicios permanezcan activos cuando la pantalla está apagada. + IIAB Watchdog Activo + Protegiendo el entorno Termux... + Sincronizando estado del Watchdog. Activado: %b + Watchdog Thread: Bucle iniciado + Watchdog Thread: Interrumpido, deteniéndose... + Watchdog Thread: Error en el bucle + Watchdog Thread: Bucle finalizado + CPU WakeLock adquirido bajo protección VPN + Wi-Fi Lock adquirido bajo protección VPN + Error al adquirir bloqueos + CPU WakeLock liberado + Wi-Fi Lock liberado - Tamaño: %1$s / 10MB - [...] - For the app to work 100%, please disable battery optimization. - FIX - Please launch the server to share over the network. - Please enable Wi-Fi or Hotspot to share over the network. - Wi-Fi Network - Hotspot Network - Switch Network - [...] - \ No newline at end of file + + Pulso: Estimulando Termux... + CRÍTICO: El SO bloqueó el estímulo a Termux (SecurityException). + PING 8085: OK + PING 8085: FALLO (%s) + SESIÓN DE LATIDO INICIADA + SESIÓN DE LATIDO DETENIDA + Permiso denegado: Asegúrese de que el manifiesto tiene RUN_COMMAND y la app no está restringida. + Error inesperado enviando intent a Termux + Error de Pulso: %s + Fallo en la escritura de mantenimiento + Fallo al escribir en BlackBox + Pulso de recuperación recibido del sistema. Forzando VPN... + + + [Termux] Estímulo OK (exit 0) + [Termux] Error de pulso (exit %1$d): %2$s + Advertencia: Tiempo de espera agotado en la transición de estado del servidor. + Iniciando... + Apagando... + CRÍTICO: Fallo en el Intent de Termux: %s + Enviado a Termux: %s + Modo de mantenimiento activado: Termux tiene acceso directo a Internet + 🛑 Detener Servidor + 🚀 Iniciar Servidor + Permiso de Termux concedido + Permiso de Termux denegado + Permiso de notificaciones concedido + Permiso de notificaciones denegado + + + ¿Reiniciar historial de log? + Esto borrará permanentemente todos los logs de conexión guardados. Esta acción no se puede deshacer. + El archivo de log está creciendo demasiado rápido, verifique si algo está fallando + Reiniciar Log + Copiar Todo + Log reiniciado + Log reiniciado por el usuario + Log copiado al portapapeles + Log borrado + Fallo al reiniciar el log: %s + Tamaño: %1$s / 10MB + %d B + %.1f KB + %.2f MB + --- No se encontró el archivo BlackBox --- + --- Cargando Historial --- + Error al leer el historial: %s + --- Fin del Historial --- + + + Optimización de Batería + Para que el Watchdog funcione de manera confiable, desactive las optimizaciones de batería para esta aplicación. + Ir a Ajustes + \n\nOPPO/Realme detectado: Asegúrese de activar \'Permitir actividad en segundo plano\' en los ajustes de esta aplicación. + \n\nXiaomi detectado: Establezca el ahorro de batería a \'Sin restricciones\' en los ajustes. + Para que la app funcione al 100%, desactive la optimización de batería. + + + 🚀 Explorar Contenido + Sistema listo...\n + Aplicación Iniciada + ▼ %s + ▶ %s + Inicie el servidor para compartir contenido a través de la red. + Active Wi-Fi o Hotspot para compartir contenido a través de la red. + Red Wi-Fi + Red Hotspot + Cambiar Red + + + Desbloquear Watchdog Maestro + Se requiere autenticación para detener la protección de Termux + Autenticación exitosa. Desconectando... + Autenticación requerida + Autentíquese para desactivar el entorno seguro + Seguridad Requerida + Debe configurar un PIN, Patrón o Huella digital en su dispositivo antes de activar el entorno seguro. + + + Recuperación VPN + Safe Pocket Web Interrumpido + Toque para restaurar el entorno seguro inmediatamente. + diff --git a/apk/controller/app/src/main/res/values-ru-rRU/strings.xml b/apk/controller/app/src/main/res/values-ru-rRU/strings.xml index 46516ca..429dede 100644 --- a/apk/controller/app/src/main/res/values-ru-rRU/strings.xml +++ b/apk/controller/app/src/main/res/values-ru-rRU/strings.xml @@ -1,98 +1,155 @@ - Initial Setup - Welcome to the %1$s setup wizard.\n\nIn order to work properly, we need the following permissions: - Push Notifications - Termux Execution - Safe Pocket Web (VPN) - Disable Battery Optimization - Continue - IIAB-oA Controller - Socks Address: - Socks UDP Address: - Socks Port: - Socks Username: - Socks Password: - DNS IPv4: - DNS IPv6: - UDP relay over TCP - Remote DNS - IPv4 - IPv6 - Global - Apps - Save - Enable Safe Pocket Web - Disable Safe Pocket Web - Enable friendly URLs. Lock out the threats. - Enable\nMaster Watchdog - Disable\nMaster Watchdog - Reset Log History? - This will permanently delete all stored connection logs. This action cannot be undone. - The logging file is growing too rapidly, you might want to check if something is failing + + IIAB-oA Controller + v0.1.x + Сохранить + Отмена + Сохранено + Настройки сохранены + ИСПРАВИТЬ + Конфигурация + Настройки туннеля + Журнал подключений + НАСТРОЙКИ - - 🚀 Explore Content - Protects Termux from Doze mode and keeps Wi-Fi active. - Reset Log - Copy All - System ready...\n - Configuration - Tunnel Settings - Connection Log - Application Started - --- No BlackBox file found --- - --- Loading History --- - Error reading history: %s - --- End of History --- - Recovery Pulse Received from System. Enforcing VPN... - Battery Optimization - For the Watchdog to work reliably, please disable battery optimizations for this app. - Go to Settings - Cancel - Saved - Settings Saved - Log reset - Log reset by user - Log copied to clipboard - Watchdog Stopped - Watchdog Started - VPN Stopping... - VPN Starting... - Log cleared - Failed to reset log: %s - Unlock Master Watchdog - Authentication required to stop Termux protection - Authentication Success. Disconnecting... - Authentication required - Authenticate to disable the secure environment - Security Required - You must set up a PIN, Pattern, or Fingerprint on your device before enabling the secure environment. - User initiated connection - VPN Permission Granted. Connecting... + + Начальная настройка + Добро пожаловать в мастер настройки %1$s.\n\nДля правильной работы нам нужны следующие разрешения: + Push-уведомления + Выполнение Termux + Safe Pocket Web (VPN) + Отключить оптимизацию батареи + Продолжить + Чтобы отозвать разрешения, это нужно сделать в настройках системы. + Termux не установлен или устройство не поддерживается. + Termux не установлен. - - Pulse: Stimulating Termux... - CRITICAL: OS blocked Termux stimulus (SecurityException). - PING 8085: OK - PING 8085: FAIL (%s) - HEARTBEAT SESSION STARTED - HEARTBEAT SESSION STOPPED + + Включить Safe Pocket Web + Выключить Safe Pocket Web + Включить дружественные URL. Блокировать угрозы. + Адрес Socks: + UDP адрес Socks: + Порт Socks: + Имя пользователя Socks: + Пароль Socks: + DNS IPv4: + DNS IPv6: + UDP ретрансляция через TCP + Удаленный DNS + IPv4 + IPv6 + Глобально + Приложения + Остановка VPN... + Запуск VPN... + Соединение инициировано пользователем + Разрешение VPN получено. Подключение... + socks5 - - [Termux] Stimulus OK (exit 0) - [Termux] Pulse Error (exit %1$d): %2$s + + Включить\nМастер Watchdog + Выключить\nМастер Watchdog + Защищает Termux от режима Doze и поддерживает Wi-Fi активным. + Watchdog остановлен + Watchdog запущен + Служба IIAB Watchdog + Гарантирует, что службы остаются активными при выключенном экране. + IIAB Watchdog активен + Защита окружения Termux... + Синхронизация состояния Watchdog. Включено: %b + Watchdog Thread: Цикл запущен + Watchdog Thread: Прервано, остановка... + Watchdog Thread: Ошибка в цикле + Watchdog Thread: Цикл завершен + CPU WakeLock получен под защитой VPN + Wi-Fi Lock получен под защитой VPN + Ошибка получения блокировок + CPU WakeLock освобожден + Wi-Fi Lock освобожден - Size: %1$s / 10MB + + Пульс: Стимуляция Termux... + КРИТИЧЕСКАЯ ОШИБКА: ОС заблокировала стимуляцию Termux (SecurityException). + PING 8085: OK + PING 8085: ОШИБКА (%s) + СЕАНС СЕРДЦЕБИЕНИЯ ЗАПУЩЕН + СЕАНС СЕРДЦЕБИЕНИЯ ОСТАНОВЛЕН + В доступе отказано: убедитесь, что в манифесте есть RUN_COMMAND и приложение не ограничено. + Непредвиденная ошибка при отправке intent в Termux + Ошибка пульса: %s + Ошибка записи обслуживания + Ошибка записи в BlackBox + Пульс восстановления получен от системы. Принудительный VPN... - - \n\nOPPO/Realme detected: Please ensure you also enable \'Allow background activity\' in this app\'s settings. - \n\nXiaomi detected: Please set battery saver to \'No restrictions\' in settings. - For the app to work 100%, please disable battery optimization. - FIX - Please launch the server to share over the network. - Please enable Wi-Fi or Hotspot to share over the network. - Wi-Fi Network - Hotspot Network - Switch Network - \ No newline at end of file + + [Termux] Стимул OK (exit 0) + [Termux] Ошибка пульса (exit %1$d): %2$s + Предупреждение: Время ожидания перехода состояния сервера истекло. + Загрузка... + Выключение... + КРИТИЧЕСКАЯ ОШИБКА: Ошибка Intent Termux: %s + Отправлено в Termux: %s + Режим обслуживания включен: Termux имеет прямой доступ в Интернет + 🛑 Остановить сервер + 🚀 Запустить сервер + Разрешение Termux предоставлено + Разрешение Termux отклонено + Разрешение на уведомления предоставлено + Разрешение на уведомления отклонено + + + Сбросить историю журнала? + Это безвозвратно удалит все сохраненные журналы подключений. Это действие нельзя отменить. + Файл журнала растет слишком быстро, возможно, стоит проверить, нет ли ошибки + Сбросить журнал + Скопировать все + Журнал сброшен + Журнал сброшен пользователем + Журнал скопирован в буфер обмена + Журнал очищен + Ошибка сброса журнала: %s + Размер: %1$s / 10MB + %d B + %.1f KB + %.2f MB + --- Файл BlackBox не найден --- + --- Загрузка истории --- + Ошибка чтения истории: %s + --- Конец истории --- + + + Оптимизация батареи + Для надежной работы Watchdog, пожалуйста, отключите оптимизацию батареи для этого приложения. + Перейти к настройкам + \n\nOPPO/Realme обнаружен: Пожалуйста, убедитесь, что вы включили "Разрешить фоновую активность" в настройках этого приложения. + \n\nXiaomi обнаружен: Пожалуйста, установите экономию заряда батареи на "Без ограничений" в настройках. + Для 100% работы приложения, пожалуйста, отключите оптимизацию батареи. + + + 🚀 Исследовать контент + Система готова...\n + Приложение запущено + ▼ %s + ▶ %s + Запустите сервер, чтобы поделиться контентом по сети. + Включите Wi-Fi или точку доступа, чтобы поделиться контентом по сети. + Сеть Wi-Fi + Сеть точки доступа + Переключить сеть + + + Разблокировать Мастер Watchdog + Требуется аутентификация для остановки защиты Termux + Аутентификация успешна. Отключение... + Требуется аутентификация + Пройдите аутентификацию, чтобы отключить безопасное окружение + Требуется безопасность + Перед активацией безопасного окружения необходимо установить PIN-код, графический ключ или отпечаток пальца на устройстве. + + + Восстановление VPN + Safe Pocket Web прерван + Нажмите, чтобы немедленно восстановить безопасное окружение. + diff --git a/apk/controller/app/src/main/res/values/strings.xml b/apk/controller/app/src/main/res/values/strings.xml index da8c395..4630937 100644 --- a/apk/controller/app/src/main/res/values/strings.xml +++ b/apk/controller/app/src/main/res/values/strings.xml @@ -1,99 +1,155 @@ - Initial Setup - Welcome to the %1$s setup wizard.\n\nIn order to work properly, we need the following permissions: + + IIAB-oA Controller + v0.1.x + Save + Cancel + Saved + Settings Saved + FIX + Configuration + Tunnel Settings + Connection Log + SETTINGS + + + Initial Setup + Welcome to the %1$s setup wizard.\n\nIn order to work properly, we need the following permissions: Push Notifications Termux Execution Safe Pocket Web (VPN) Disable Battery Optimization Continue - IIAB-oA Controller - Socks Address: - Socks UDP Address: - Socks Port: - Socks Username: - Socks Password: - DNS IPv4: - DNS IPv6: - UDP relay over TCP - Remote DNS - IPv4 - IPv6 - Global - Apps - Save - Enable Safe Pocket Web - Disable Safe Pocket Web - Enable friendly URLs. Lock out the threats. - Enable\nMaster Watchdog - Disable\nMaster Watchdog - Reset Log History? - This will permanently delete all stored connection logs. This action cannot be undone. - The logging file is growing too rapidly, you might want to check if something is failing + To revoke permissions, you must do it from system settings. + Termux is not installed or device not supported. + Termux is not installed. - - 🚀 Explore Content - Protects Termux from Doze mode and keeps Wi-Fi active. - Reset Log - Copy All - System ready...\n - Configuration - Tunnel Settings - Connection Log - Application Started - --- No BlackBox file found --- - --- Loading History --- - Error reading history: %s - --- End of History --- - Recovery Pulse Received from System. Enforcing VPN... - Battery Optimization - For the Watchdog to work reliably, please disable battery optimizations for this app. - Go to Settings - Cancel - Saved - Settings Saved - Log reset - Log reset by user - Log copied to clipboard - Watchdog Stopped - Watchdog Started - VPN Stopping... - VPN Starting... - Log cleared - Failed to reset log: %s - Unlock Master Watchdog - Authentication required to stop Termux protection - Authentication Success. Disconnecting... - Authentication required - Authenticate to disable the secure environment - Security Required - You must set up a PIN, Pattern, or Fingerprint on your device before enabling the secure environment. - User initiated connection - VPN Permission Granted. Connecting... + + Enable Safe Pocket Web + Disable Safe Pocket Web + Enable friendly URLs. Lock out the threats. + Socks Address: + Socks UDP Address: + Socks Port: + Socks Username: + Socks Password: + DNS IPv4: + DNS IPv6: + UDP relay over TCP + Remote DNS + IPv4 + IPv6 + Global + Apps + VPN Stopping... + VPN Starting... + User initiated connection + VPN Permission Granted. Connecting... + socks5 - - Pulse: Stimulating Termux... - CRITICAL: OS blocked Termux stimulus (SecurityException). - PING 8085: OK - PING 8085: FAIL (%s) - HEARTBEAT SESSION STARTED - HEARTBEAT SESSION STOPPED + + Enable\nMaster Watchdog + Disable\nMaster Watchdog + Protects Termux from Doze mode and keeps Wi-Fi active. + Watchdog Stopped + Watchdog Started + IIAB Watchdog Service + Ensures services remain active when screen is off. + IIAB Watchdog Active + Protecting Termux environment... + Syncing Watchdog state. Enabled: %b + Watchdog Thread: Started loop + Watchdog Thread: Interrupted, stopping... + Watchdog Thread: Error in loop + Watchdog Thread: Loop ended + CPU WakeLock acquired under VPN shield + Wi-Fi Lock acquired under VPN shield + Error acquiring locks + CPU WakeLock released + Wi-Fi Lock released - - [Termux] Stimulus OK (exit 0) - [Termux] Pulse Error (exit %1$d): %2$s + + Pulse: Stimulating Termux... + CRITICAL: OS blocked Termux stimulus (SecurityException). + PING 8085: OK + PING 8085: FAIL (%s) + HEARTBEAT SESSION STARTED + HEARTBEAT SESSION STOPPED + Permission Denied: Ensure manifest has RUN_COMMAND and app is not restricted. + Unexpected error sending intent to Termux + Pulse Error: %s + Maintenance write failed + Failed to write to BlackBox + Recovery Pulse Received from System. Enforcing VPN... - Size: %1$s / 10MB + + [Termux] Stimulus OK (exit 0) + [Termux] Pulse Error (exit %1$d): %2$s + Warning: Server state transition timed out. + Booting... + Shutting down... + CRITICAL: Failed Termux Intent: %s + Sent to Termux: %s + Maintenance mode enabled: Termux has direct Internet access + 🛑 Stop Server + 🚀 Launch Server + Termux permission granted + Termux permission denied + Notification permission granted + Notification permission denied - - \n\nOPPO/Realme detected: Please ensure you also enable \'Allow background activity\' in this app\'s settings. - \n\nXiaomi detected: Please set battery saver to \'No restrictions\' in settings. + + Reset Log History? + This will permanently delete all stored connection logs. This action cannot be undone. + The logging file is growing too rapidly, you might want to check if something is failing + Reset Log + Copy All + Log reset + Log reset by user + Log copied to clipboard + Log cleared + Failed to reset log: %s + Size: %1$s / 10MB + %d B + %.1f KB + %.2f MB + --- No BlackBox file found --- + --- Loading History --- + Error reading history: %s + --- End of History --- + + + Battery Optimization + For the Watchdog to work reliably, please disable battery optimizations for this app. + Go to Settings + \n\nOPPO/Realme detected: Please ensure you also enable \'Allow background activity\' in this app\'s settings. + \n\nXiaomi detected: Please set battery saver to \'No restrictions\' in settings. For the app to work 100%, please disable battery optimization. - FIX - Please launch the server to share over the network. - Please enable Wi-Fi or Hotspot to share over the network. - Wi-Fi Network - Hotspot Network - Switch Network - \ No newline at end of file + + 🚀 Explore Content + System ready...\n + Application Started + ▼ %s + ▶ %s + Launch the server to share content over the network. + Enable Wi-Fi or Hotspot to share content over the network. + Wi-Fi Network + Hotspot Network + Switch Network + + + Unlock Master Watchdog + Authentication required to stop Termux protection + Authentication Success. Disconnecting... + Authentication required + Authenticate to disable the secure environment + Security Required + You must set up a PIN, Pattern, or Fingerprint on your device before enabling the secure environment. + + + VPN Recovery + Safe Pocket Web Interrupted + Tap to restore secure environment immediately. +