From e784d515dc3df01b755e6832ce40e89ff68da19b Mon Sep 17 00:00:00 2001 From: Ark74 Date: Thu, 12 Mar 2026 11:35:14 -0600 Subject: [PATCH] [MA] revisar permisos via snackbar --- apk/controller/app/build.gradle | 1 + .../org/iiab/controller/MainActivity.java | 29 ++++++++++++++++++- .../app/src/main/res/values/strings.xml | 4 ++- 3 files changed, 32 insertions(+), 2 deletions(-) diff --git a/apk/controller/app/build.gradle b/apk/controller/app/build.gradle index 875d8bf..8f4082d 100644 --- a/apk/controller/app/build.gradle +++ b/apk/controller/app/build.gradle @@ -77,4 +77,5 @@ android { dependencies { implementation 'androidx.appcompat:appcompat:1.4.1' implementation 'androidx.biometric:biometric:1.1.0' + implementation 'com.google.android.material:material:1.11.0' } 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 d716ca6..ba079e8 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 @@ -49,6 +49,7 @@ import androidx.annotation.NonNull; import androidx.biometric.BiometricManager; import androidx.biometric.BiometricPrompt; import androidx.core.content.ContextCompat; +import com.google.android.material.snackbar.Snackbar; import java.io.BufferedReader; import java.io.File; @@ -99,6 +100,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe private ActivityResultLauncher vpnPermissionLauncher; private ActivityResultLauncher requestPermissionsLauncher; + private ActivityResultLauncher batteryOptLauncher; private boolean isReadingLogs = false; private final Handler sizeUpdateHandler = new Handler(); @@ -133,6 +135,14 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe } ); + batteryOptLauncher = registerForActivityResult( + new ActivityResultContracts.StartActivityForResult(), + result -> { + Log.d(TAG, "Regresamos de la pantalla de ajustes de batería"); + checkBatteryOptimizations(); + } + ); + requestPermissionsLauncher = registerForActivityResult( new ActivityResultContracts.RequestMultiplePermissions(), result -> { @@ -221,6 +231,13 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe }; } + private void showBatterySnackbar() { + View rootView = findViewById(android.R.id.content); + Snackbar.make(rootView, R.string.battery_opt_denied, Snackbar.LENGTH_INDEFINITE) + .setAction(R.string.fix_action, v -> checkBatteryOptimizations()) + .show(); + } + private void initiatePermissionChain() { List permissions = new ArrayList<>(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { @@ -356,6 +373,16 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe @Override protected void onResume() { super.onResume(); + // Comprobamos batería siempre que volvemos a la app + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); + if (pm != null && !pm.isIgnoringBatteryOptimizations(getPackageName())) { + // Si no está ignorado, mostramos el aviso (o Snackbar si ya se lanzó el diálogo) + Log.d(TAG, "onResume: Batería aún optimizada, mostrando aviso"); + showBatterySnackbar(); + } + } + if (getIntent() != null && getIntent().getBooleanExtra(VpnRecoveryReceiver.EXTRA_RECOVERY, false)) { addToLog(getString(R.string.recovery_pulse_received)); Intent vpnIntent = new Intent(this, TProxyService.class); @@ -398,7 +425,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe else { Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + getPackageName())); - startActivity(intent); + batteryOptLauncher.launch(intent); } } } diff --git a/apk/controller/app/src/main/res/values/strings.xml b/apk/controller/app/src/main/res/values/strings.xml index 726a819..b3036aa 100644 --- a/apk/controller/app/src/main/res/values/strings.xml +++ b/apk/controller/app/src/main/res/values/strings.xml @@ -79,5 +79,7 @@ \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\' for this app. + \n\nXiaomi detected: Please set battery saver to \'No restrictions\' in settings. + Para que la app funcione al 100%, desactiva la optimización de batería. + SOLUCIONAR