diff --git a/app/src/main/java/com/sameerasw/essentials/EssentialsApp.kt b/app/src/main/java/com/sameerasw/essentials/EssentialsApp.kt index ab9149b4..616f17a8 100644 --- a/app/src/main/java/com/sameerasw/essentials/EssentialsApp.kt +++ b/app/src/main/java/com/sameerasw/essentials/EssentialsApp.kt @@ -9,10 +9,16 @@ import com.sameerasw.essentials.services.ScreenOffReceiver import com.sameerasw.essentials.utils.ShizukuUtils class EssentialsApp : Application() { + companion object { + lateinit var context: Context + private set + } + private val screenOffReceiver = ScreenOffReceiver() override fun onCreate() { super.onCreate() + context = applicationContext ShizukuUtils.initialize() com.sameerasw.essentials.utils.LogManager.init(this) val intentFilter = IntentFilter(Intent.ACTION_SCREEN_OFF) diff --git a/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt b/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt index 09197c7f..b8f40a00 100644 --- a/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/FeatureSettingsActivity.kt @@ -189,7 +189,7 @@ class FeatureSettingsActivity : FragmentActivity() { "Snooze system notifications" -> !isNotificationListenerEnabled "Screen locked security" -> !isAccessibilityEnabled || !isWriteSecureSettingsEnabled || !viewModel.isDeviceAdminEnabled.value "App lock" -> !isAccessibilityEnabled - "Freeze" -> !viewModel.isShizukuAvailable.value || !viewModel.isShizukuPermissionGranted.value + "Freeze" -> !com.sameerasw.essentials.utils.ShellUtils.hasPermission(context) "Location reached" -> !viewModel.isLocationPermissionGranted.value || !viewModel.isBackgroundLocationPermissionGranted.value else -> false } @@ -376,17 +376,32 @@ class FeatureSettingsActivity : FragmentActivity() { isGranted = isAccessibilityEnabled ) ) - "Freeze" -> listOf( - PermissionItem( - iconRes = R.drawable.rounded_mode_cool_24, - title = R.string.perm_shizuku_title, - description = R.string.perm_shizuku_desc, - dependentFeatures = PermissionRegistry.getFeatures("SHIZUKU"), - actionLabel = R.string.perm_action_grant, - action = { viewModel.requestShizukuPermission() }, - isGranted = viewModel.isShizukuPermissionGranted.value + "Freeze" -> { + val isRootEnabled = com.sameerasw.essentials.utils.ShellUtils.isRootEnabled(context) + listOf( + if (isRootEnabled) { + PermissionItem( + iconRes = R.drawable.rounded_numbers_24, + title = R.string.perm_root_title, + description = R.string.perm_root_desc, + dependentFeatures = PermissionRegistry.getFeatures("ROOT"), + actionLabel = R.string.perm_action_grant, + action = { viewModel.check(context) }, + isGranted = viewModel.isRootPermissionGranted.value + ) + } else { + PermissionItem( + iconRes = R.drawable.rounded_mode_cool_24, + title = R.string.perm_shizuku_title, + description = R.string.perm_shizuku_desc, + dependentFeatures = PermissionRegistry.getFeatures("SHIZUKU"), + actionLabel = R.string.perm_action_grant, + action = { viewModel.requestShizukuPermission() }, + isGranted = viewModel.isShizukuPermissionGranted.value + ) + } ) - ) + } "Location reached" -> listOf( PermissionItem( iconRes = R.drawable.rounded_navigation_24, diff --git a/app/src/main/java/com/sameerasw/essentials/SettingsActivity.kt b/app/src/main/java/com/sameerasw/essentials/SettingsActivity.kt index ae859da2..619df9ae 100644 --- a/app/src/main/java/com/sameerasw/essentials/SettingsActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/SettingsActivity.kt @@ -71,6 +71,7 @@ import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.ui.draw.clip +import androidx.compose.ui.res.stringResource import com.sameerasw.essentials.domain.registry.PermissionRegistry import com.sameerasw.essentials.ui.components.sheets.InstructionsBottomSheet import java.text.SimpleDateFormat @@ -189,6 +190,9 @@ fun SettingsContent(viewModel: MainViewModel, modifier: Modifier = Modifier) { val isAutoUpdateEnabled by viewModel.isAutoUpdateEnabled val isUpdateNotificationEnabled by viewModel.isUpdateNotificationEnabled val isPreReleaseCheckEnabled by viewModel.isPreReleaseCheckEnabled + val isRootEnabled by viewModel.isRootEnabled + val isRootAvailable by viewModel.isRootAvailable + val isRootPermissionGranted by viewModel.isRootPermissionGranted val isDeveloperModeEnabled by viewModel.isDeveloperModeEnabled var showInstructionsSheet by remember { mutableStateOf(false) } @@ -267,6 +271,13 @@ fun SettingsContent(viewModel: MainViewModel, modifier: Modifier = Modifier) { HapticUtil.saveAppHapticsEnabled(context, isChecked) } ) + IconToggleItem( + iconRes = R.drawable.rounded_numbers_24, + title = stringResource(R.string.setting_use_root_title), + description = stringResource(R.string.setting_use_root_desc), + isChecked = viewModel.isRootEnabled.value, + onCheckedChange = { viewModel.setRootEnabled(it, context) } + ) } Text( @@ -346,7 +357,18 @@ fun SettingsContent(viewModel: MainViewModel, modifier: Modifier = Modifier) { }, ) - if (isShizukuAvailable) { + if (isRootEnabled) { + PermissionCard( + iconRes = R.drawable.rounded_numbers_24, + title = stringResource(R.string.perm_root_title), + dependentFeatures = PermissionRegistry.getFeatures("ROOT"), + actionLabel = if (isRootPermissionGranted) "Granted" else "Grant Access", + isGranted = isRootPermissionGranted, + onActionClick = { + viewModel.check(context) + } + ) + } else if (isShizukuAvailable) { PermissionCard( iconRes = R.drawable.rounded_adb_24, title = "Shizuku", diff --git a/app/src/main/java/com/sameerasw/essentials/ShortcutHandlerActivity.kt b/app/src/main/java/com/sameerasw/essentials/ShortcutHandlerActivity.kt index f1e48cfe..6c16aef9 100644 --- a/app/src/main/java/com/sameerasw/essentials/ShortcutHandlerActivity.kt +++ b/app/src/main/java/com/sameerasw/essentials/ShortcutHandlerActivity.kt @@ -52,7 +52,7 @@ class ShortcutHandlerActivity : ComponentActivity() { CoroutineScope(Dispatchers.IO).launch { val isFrozen = FreezeManager.isAppFrozen(this@ShortcutHandlerActivity, packageName) if (isFrozen) { - FreezeManager.unfreezeApp(packageName) + FreezeManager.unfreezeApp(this@ShortcutHandlerActivity, packageName) // Small delay to ensure system registers the change delay(500) // Slightly longer delay to show the nice loader if frozen } diff --git a/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt b/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt index 9982f817..be643b0e 100644 --- a/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt +++ b/app/src/main/java/com/sameerasw/essentials/data/repository/SettingsRepository.kt @@ -92,6 +92,7 @@ class SettingsRepository(private val context: Context) { const val KEY_DEVELOPER_MODE_ENABLED = "developer_mode_enabled" const val KEY_HAPTIC_FEEDBACK_TYPE = "haptic_feedback_type" const val KEY_DEFAULT_TAB = "default_tab" + const val KEY_USE_ROOT = "use_root" } // Observe changes diff --git a/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt b/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt index 306bcaf3..d5a51d39 100644 --- a/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt +++ b/app/src/main/java/com/sameerasw/essentials/domain/registry/FeatureRegistry.kt @@ -4,6 +4,7 @@ import android.content.Context import com.sameerasw.essentials.R import com.sameerasw.essentials.domain.model.Feature import com.sameerasw.essentials.domain.model.SearchSetting +import com.sameerasw.essentials.utils.ShellUtils import com.sameerasw.essentials.viewmodels.MainViewModel object FeatureRegistry { @@ -90,12 +91,12 @@ object FeatureRegistry { iconRes = R.drawable.rounded_navigation_24, category = R.string.cat_tools, description = R.string.feat_maps_power_saving_desc, - permissionKeys = listOf("SHIZUKU", "NOTIFICATION_LISTENER"), + permissionKeys = if (ShellUtils.isRootEnabled(com.sameerasw.essentials.EssentialsApp.context)) listOf("ROOT", "NOTIFICATION_LISTENER") else listOf("SHIZUKU", "NOTIFICATION_LISTENER"), hasMoreSettings = false ) { override fun isEnabled(viewModel: MainViewModel) = viewModel.isMapsPowerSavingEnabled.value override fun isToggleEnabled(viewModel: MainViewModel, context: Context) = - viewModel.isShizukuAvailable.value && viewModel.isShizukuPermissionGranted.value && viewModel.isNotificationListenerEnabled.value + com.sameerasw.essentials.utils.ShellUtils.hasPermission(context) && viewModel.isNotificationListenerEnabled.value override fun onToggle(viewModel: MainViewModel, context: Context, enabled: Boolean) = viewModel.setMapsPowerSavingEnabled(enabled, context) override fun onClick(context: Context, viewModel: MainViewModel) {} }, @@ -323,7 +324,7 @@ object FeatureRegistry { iconRes = R.drawable.rounded_switch_access_3_24, category = R.string.cat_system, description = R.string.feat_button_remap_desc, - permissionKeys = listOf("ACCESSIBILITY"), + permissionKeys = if (ShellUtils.isRootEnabled(com.sameerasw.essentials.EssentialsApp.context)) listOf("ACCESSIBILITY", "ROOT") else listOf("ACCESSIBILITY", "SHIZUKU"), showToggle = false, searchableSettings = listOf( SearchSetting( @@ -434,7 +435,7 @@ object FeatureRegistry { iconRes = R.drawable.rounded_mode_cool_24, category = R.string.cat_tools, description = R.string.feat_freeze_desc, - permissionKeys = listOf("SHIZUKU"), + permissionKeys = if (ShellUtils.isRootEnabled(com.sameerasw.essentials.EssentialsApp.context)) listOf("ROOT") else listOf("SHIZUKU"), searchableSettings = listOf( SearchSetting( R.string.search_freeze_pick_title, @@ -466,7 +467,7 @@ object FeatureRegistry { ) { override fun isEnabled(viewModel: MainViewModel) = true override fun isToggleEnabled(viewModel: MainViewModel, context: Context) = - viewModel.isShizukuAvailable.value && viewModel.isShizukuPermissionGranted.value + com.sameerasw.essentials.utils.ShellUtils.hasPermission(context) override fun onToggle(viewModel: MainViewModel, context: Context, enabled: Boolean) {} } ) diff --git a/app/src/main/java/com/sameerasw/essentials/domain/registry/PermissionRegistry.kt b/app/src/main/java/com/sameerasw/essentials/domain/registry/PermissionRegistry.kt index 8dbf3ca4..9ace36d6 100644 --- a/app/src/main/java/com/sameerasw/essentials/domain/registry/PermissionRegistry.kt +++ b/app/src/main/java/com/sameerasw/essentials/domain/registry/PermissionRegistry.kt @@ -29,8 +29,13 @@ fun initPermissionRegistry() { PermissionRegistry.register("WRITE_SECURE_SETTINGS", R.string.feat_screen_locked_security_title) // Shizuku permission - PermissionRegistry.register("SHIZUKU", R.string.feat_maps_power_saving_title) PermissionRegistry.register("SHIZUKU", R.string.feat_freeze_title) + PermissionRegistry.register("SHIZUKU", R.string.feat_maps_power_saving_title) + + // Root permission + PermissionRegistry.register("ROOT", R.string.feat_maps_power_saving_title) + PermissionRegistry.register("ROOT", R.string.feat_freeze_title) + PermissionRegistry.register("ROOT", R.string.feat_button_remap_title) // Notification listener permission PermissionRegistry.register("NOTIFICATION_LISTENER", R.string.feat_maps_power_saving_title) diff --git a/app/src/main/java/com/sameerasw/essentials/input/InputEventReader.kt b/app/src/main/java/com/sameerasw/essentials/input/InputEventReader.kt index 8b884d62..a7cfc263 100644 --- a/app/src/main/java/com/sameerasw/essentials/input/InputEventReader.kt +++ b/app/src/main/java/com/sameerasw/essentials/input/InputEventReader.kt @@ -20,7 +20,10 @@ class InputEventReader(private val devicePath: String) { private val buffer = ByteArray(INPUT_EVENT_SIZE) fun open(): Boolean = try { - process = ShizukuProcessHelper.newProcess(arrayOf("cat", devicePath)) + process = com.sameerasw.essentials.utils.ShellUtils.newProcess( + com.sameerasw.essentials.EssentialsApp.context, + arrayOf("cat", devicePath) + ) inputStream = process?.inputStream inputStream != null } catch (e: Exception) { diff --git a/app/src/main/java/com/sameerasw/essentials/services/InputEventListenerService.kt b/app/src/main/java/com/sameerasw/essentials/services/InputEventListenerService.kt index f9e48d75..326b05cb 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/InputEventListenerService.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/InputEventListenerService.kt @@ -71,8 +71,8 @@ class InputEventListenerService : Service() { private fun startListening() { scope?.launch { - if (shizukuHelper.getStatus() != ShizukuStatus.READY) { - Log.e("InputEventListener", "Shizuku not ready") + if (!com.sameerasw.essentials.utils.ShellUtils.hasPermission(this@InputEventListenerService)) { + Log.e("InputEventListener", "Shell permission not granted") return@launch } diff --git a/app/src/main/java/com/sameerasw/essentials/services/ScreenOffReceiver.kt b/app/src/main/java/com/sameerasw/essentials/services/ScreenOffReceiver.kt index dd925966..a6f6e317 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/ScreenOffReceiver.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/ScreenOffReceiver.kt @@ -4,12 +4,12 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import com.sameerasw.essentials.domain.MapsState -import com.sameerasw.essentials.utils.ShizukuUtils +import com.sameerasw.essentials.utils.ShellUtils class ScreenOffReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent) { if (intent.action == Intent.ACTION_SCREEN_OFF && MapsState.isEnabled && MapsState.hasNavigationNotification) { - ShizukuUtils.runCommand("am start -n com.google.android.apps.maps/com.google.android.apps.gmm.features.minmode.MinModeActivity") + ShellUtils.runCommand(context, "am start -n com.google.android.apps.maps/com.google.android.apps.gmm.features.minmode.MinModeActivity") } } } \ No newline at end of file diff --git a/app/src/main/java/com/sameerasw/essentials/services/handlers/ButtonRemapHandler.kt b/app/src/main/java/com/sameerasw/essentials/services/handlers/ButtonRemapHandler.kt index 143748b9..03b2cf65 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/handlers/ButtonRemapHandler.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/handlers/ButtonRemapHandler.kt @@ -51,7 +51,7 @@ class ButtonRemapHandler( // Typically AOD check is: Display.STATE_DOZE or STATE_DOZE_SUSPEND val isAod = isAodShowing() - val shizukuReady = ShizukuUtils.isShizukuAvailable() && ShizukuUtils.hasPermission() + val shellReady = com.sameerasw.essentials.utils.ShellUtils.isAvailable(service) && com.sameerasw.essentials.utils.ShellUtils.hasPermission(service) val devicePathDetected = !prefs.getString("shizuku_detected_device_path", null).isNullOrEmpty() // If using Shizuku and screen off, verify if we should INTERCEPT or let Shizuku handle it? @@ -66,7 +66,9 @@ class ButtonRemapHandler( // NO, the return true means "CONSUME". So if Shizuku is handling it, we consume it here to prevent default volume action? // Let's stick to the original logic flow. - if (isButtonRemapUseShizuku && isButtonRemapEnabled && shizukuReady && devicePathDetected && !isScreenInteractive && !isAod) { + val useShell = isButtonRemapUseShizuku || com.sameerasw.essentials.utils.ShellUtils.isRootEnabled(service) + + if (useShell && isButtonRemapEnabled && shellReady && devicePathDetected && !isScreenInteractive && !isAod) { val isTorchControl = flashlightHandler.isTorchOn && (isAdjustEnabled || isGlobalEnabled) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU val suffix = "_off" diff --git a/app/src/main/java/com/sameerasw/essentials/services/tiles/MonoAudioTileService.kt b/app/src/main/java/com/sameerasw/essentials/services/tiles/MonoAudioTileService.kt index 7db79e78..b8e5d9b3 100644 --- a/app/src/main/java/com/sameerasw/essentials/services/tiles/MonoAudioTileService.kt +++ b/app/src/main/java/com/sameerasw/essentials/services/tiles/MonoAudioTileService.kt @@ -17,7 +17,7 @@ class MonoAudioTileService : BaseTileService() { override fun hasFeaturePermission(): Boolean { // Private secure settings can only be modified by ADB, system apps, or // apps with a target sdk of Android 5.1 and lower. - return ShizukuUtils.hasPermission() && ShizukuUtils.isShizukuAvailable() + return com.sameerasw.essentials.utils.ShellUtils.hasPermission(this) && com.sameerasw.essentials.utils.ShellUtils.isAvailable(this) } override fun getTileIcon(): Icon { @@ -30,7 +30,7 @@ class MonoAudioTileService : BaseTileService() { override fun onTileClick() { val newState = if (isMonoAudioEnabled()) 0 else 1 - ShizukuUtils.runCommand("settings put system master_mono $newState") + com.sameerasw.essentials.utils.ShellUtils.runCommand(this, "settings put system master_mono $newState") } private fun isMonoAudioEnabled(): Boolean { diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/SetupFeatures.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/SetupFeatures.kt index a11f6395..16f01d64 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/SetupFeatures.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/SetupFeatures.kt @@ -72,6 +72,9 @@ fun SetupFeatures( val isNotificationListenerEnabled by viewModel.isNotificationListenerEnabled val isOverlayPermissionGranted by viewModel.isOverlayPermissionGranted val isNotificationLightingAccessibilityEnabled by viewModel.isNotificationLightingAccessibilityEnabled + val isRootEnabled by viewModel.isRootEnabled + val isRootPermissionGranted by viewModel.isRootPermissionGranted + val isRootAvailable by viewModel.isRootAvailable viewModel.isButtonRemapEnabled.value viewModel.isDynamicNightLightEnabled.value @@ -80,35 +83,54 @@ fun SetupFeatures( fun buildMapsPowerSavingPermissionItems(): List { val items = mutableListOf() - if (!isShizukuAvailable) { - items.add( - PermissionItem( - iconRes = R.drawable.rounded_adb_24, - title = R.string.perm_shizuku_title, - description = R.string.perm_shizuku_desc, - dependentFeatures = PermissionRegistry.getFeatures("SHIZUKU"), - actionLabel = R.string.perm_shizuku_install_action, - action = { - val intent = Intent(Intent.ACTION_VIEW, - "https://play.google.com/store/apps/details?id=moe.shizuku.privileged.api".toUri()) - intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK - context.startActivity(intent) - }, - isGranted = isShizukuAvailable + + if (isRootEnabled) { + if (!isRootPermissionGranted) { + items.add( + PermissionItem( + iconRes = R.drawable.rounded_security_24, + title = R.string.perm_root_title, + description = R.string.perm_root_desc, + dependentFeatures = PermissionRegistry.getFeatures("ROOT"), + actionLabel = R.string.perm_action_grant, + action = { + viewModel.isRootPermissionGranted.value = com.sameerasw.essentials.utils.RootUtils.isRootPermissionGranted() + }, + isGranted = isRootPermissionGranted + ) ) - ) - } else if (!isShizukuPermissionGranted) { - items.add( - PermissionItem( - iconRes = R.drawable.rounded_adb_24, - title = R.string.perm_shizuku_grant_title, - description = R.string.perm_shizuku_grant_desc, - dependentFeatures = PermissionRegistry.getFeatures("SHIZUKU"), - actionLabel = R.string.perm_action_grant, - action = { viewModel.requestShizukuPermission() }, - isGranted = isShizukuPermissionGranted + } + } else { + if (!isShizukuAvailable) { + items.add( + PermissionItem( + iconRes = R.drawable.rounded_adb_24, + title = R.string.perm_shizuku_title, + description = R.string.perm_shizuku_desc, + dependentFeatures = PermissionRegistry.getFeatures("SHIZUKU"), + actionLabel = R.string.perm_shizuku_install_action, + action = { + val intent = Intent(Intent.ACTION_VIEW, + "https://play.google.com/store/apps/details?id=moe.shizuku.privileged.api".toUri()) + intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK + context.startActivity(intent) + }, + isGranted = isShizukuAvailable + ) ) - ) + } else if (!isShizukuPermissionGranted) { + items.add( + PermissionItem( + iconRes = R.drawable.rounded_adb_24, + title = R.string.perm_shizuku_grant_title, + description = R.string.perm_shizuku_grant_desc, + dependentFeatures = PermissionRegistry.getFeatures("SHIZUKU"), + actionLabel = R.string.perm_action_grant, + action = { viewModel.requestShizukuPermission() }, + isGranted = isShizukuPermissionGranted + ) + ) + } } if (!isNotificationListenerEnabled) { diff --git a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/ButtonRemapSettingsUI.kt b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/ButtonRemapSettingsUI.kt index c3716574..4c26c2af 100644 --- a/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/ButtonRemapSettingsUI.kt +++ b/app/src/main/java/com/sameerasw/essentials/ui/composables/configs/ButtonRemapSettingsUI.kt @@ -112,104 +112,130 @@ fun ButtonRemapSettingsUI( exit = shrinkVertically() + fadeOut() ) { Column(verticalArrangement = Arrangement.spacedBy(2.dp)) { - IconToggleItem( - iconRes = R.drawable.rounded_adb_24, - title = stringResource(R.string.button_remap_use_shizuku_title), - description = stringResource(R.string.button_remap_use_shizuku_desc), - isChecked = viewModel.isButtonRemapUseShizuku.value, - onCheckedChange = { enabled -> - if (enabled) { - if (shizukuHelper.getStatus() == ShizukuStatus.READY) { + val isRootEnabled = com.sameerasw.essentials.utils.ShellUtils.isRootEnabled(context) + IconToggleItem( + iconRes = if (isRootEnabled) R.drawable.rounded_numbers_24 else R.drawable.rounded_adb_24, + title = stringResource(R.string.button_remap_use_shizuku_title), + description = stringResource(R.string.button_remap_use_shizuku_desc), + isChecked = viewModel.isButtonRemapUseShizuku.value, + onCheckedChange = { enabled -> + if (enabled) { + val shellHasPermission = com.sameerasw.essentials.utils.ShellUtils.hasPermission(context) + val shellIsAvailable = com.sameerasw.essentials.utils.ShellUtils.isAvailable(context) + + if (shellHasPermission) { + viewModel.setButtonRemapUseShizuku(true, context) + ContextCompat.startForegroundService( + context, + Intent(context, InputEventListenerService::class.java) + ) + } else if (shellIsAvailable && !isRootEnabled) { + // Shizuku logic (still needed for specific permission request if not granted) + shizukuHelper.requestPermission { _, grantResult -> + if (grantResult == android.content.pm.PackageManager.PERMISSION_GRANTED) { viewModel.setButtonRemapUseShizuku(true, context) ContextCompat.startForegroundService( context, Intent(context, InputEventListenerService::class.java) ) - } else if (shizukuHelper.getStatus() == ShizukuStatus.PERMISSION_NEEDED) { - shizukuHelper.requestPermission { requestCode, grantResult -> - if (grantResult == android.content.pm.PackageManager.PERMISSION_GRANTED) { - viewModel.setButtonRemapUseShizuku(true, context) - ContextCompat.startForegroundService( - context, - Intent(context, InputEventListenerService::class.java) - ) - } - } - } else { - // Shizuku not running - viewModel.setButtonRemapUseShizuku(true, context) - android.widget.Toast.makeText( - context, - context.getString(R.string.shizuku_not_running_toast), - android.widget.Toast.LENGTH_SHORT - ).show() } - } else { - viewModel.setButtonRemapUseShizuku(false, context) - context.stopService(Intent(context, InputEventListenerService::class.java)) } - }, - modifier = Modifier.highlight(highlightSetting == "shizuku_remap") - ) - - if (viewModel.isButtonRemapUseShizuku.value) { - // Status indicator - Row( - modifier = Modifier - .fillMaxWidth() - .background( - color = MaterialTheme.colorScheme.surfaceBright, - shape = RoundedCornerShape(MaterialTheme.shapes.extraSmall.bottomEnd) + } else if (isRootEnabled && !shellHasPermission) { + // Root logic - try to run a command to trigger su prompt + viewModel.setButtonRemapUseShizuku(true, context) + com.sameerasw.essentials.utils.ShellUtils.runCommand(context, "id") + if (com.sameerasw.essentials.utils.ShellUtils.hasPermission(context)) { + ContextCompat.startForegroundService( + context, + Intent(context, InputEventListenerService::class.java) ) - .padding(12.dp), - verticalAlignment = Alignment.CenterVertically, - horizontalArrangement = Arrangement.SpaceBetween - ) { - val statusText = - if (viewModel.shizukuDetectedDevicePath.value != null && shizukuStatus == ShizukuStatus.READY) { - stringResource( - R.string.shizuku_detected_prefix, - viewModel.shizukuDetectedDevicePath.value ?: "" - ) - } else { - stringResource(R.string.shizuku_status_prefix, shizukuStatus.name) - } + } + } else { + // Provider not running + viewModel.setButtonRemapUseShizuku(true, context) + val toastRes = if (isRootEnabled) R.string.root_not_available_toast else R.string.shizuku_not_running_toast + android.widget.Toast.makeText( + context, + context.getString(toastRes), + android.widget.Toast.LENGTH_SHORT + ).show() + } + } else { + viewModel.setButtonRemapUseShizuku(false, context) + context.stopService(Intent(context, InputEventListenerService::class.java)) + } + }, + modifier = Modifier.highlight(highlightSetting == "shizuku_remap") + ) + AnimatedVisibility( + visible = viewModel.isButtonRemapUseShizuku.value, + enter = expandVertically() + fadeIn(), + exit = shrinkVertically() + fadeOut() + ) { + // Status indicator + Row( + modifier = Modifier + .fillMaxWidth() + .background( + color = MaterialTheme.colorScheme.surfaceBright, + shape = RoundedCornerShape(MaterialTheme.shapes.extraSmall.bottomEnd) + ) + .padding(12.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween + ) { + val shellAvailable = com.sameerasw.essentials.utils.ShellUtils.isAvailable(context) + val shellPermission = com.sameerasw.essentials.utils.ShellUtils.hasPermission(context) + + val statusText = if (shellPermission && viewModel.shizukuDetectedDevicePath.value != null) { + stringResource( + R.string.shizuku_detected_prefix, + viewModel.shizukuDetectedDevicePath.value ?: "" + ) + } else if (isRootEnabled) { + if (shellPermission) "Root Access: Granted" else if (shellAvailable) "Root Access: Found" else "Root Access: Not Found" + } else { + stringResource(R.string.shizuku_status_prefix, shizukuStatus.name) + } + + Text( + text = statusText, + style = MaterialTheme.typography.bodySmall, + color = if (shellPermission) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.error, + maxLines = 1, + overflow = androidx.compose.ui.text.style.TextOverflow.Ellipsis, + modifier = Modifier.weight(1f) + ) + + if (!shellPermission && !isRootEnabled && shizukuStatus != ShizukuStatus.READY && shizukuStatus != ShizukuStatus.PERMISSION_NEEDED) { + Button( + onClick = { + try { + val intent = + context.packageManager.getLaunchIntentForPackage("moe.shizuku.privileged.api") + if (intent != null) context.startActivity(intent) + } catch (_: Exception) { + } + }, + modifier = Modifier.height(32.dp), + contentPadding = androidx.compose.foundation.layout.PaddingValues( + horizontal = 12.dp, + vertical = 0.dp + ) + ) { Text( - text = statusText, - style = MaterialTheme.typography.bodySmall, - color = if (shizukuStatus == ShizukuStatus.READY) MaterialTheme.colorScheme.primary else MaterialTheme.colorScheme.error, - maxLines = 1, - overflow = androidx.compose.ui.text.style.TextOverflow.Ellipsis, - modifier = Modifier.weight(1f) + stringResource(R.string.shizuku_open_button), + style = MaterialTheme.typography.labelSmall ) - if (shizukuStatus != ShizukuStatus.READY && shizukuStatus != ShizukuStatus.PERMISSION_NEEDED) { - Button( - onClick = { - try { - val intent = - context.packageManager.getLaunchIntentForPackage("moe.shizuku.privileged.api") - if (intent != null) context.startActivity(intent) - } catch (_: Exception) { - } - }, - modifier = Modifier.height(32.dp), - contentPadding = androidx.compose.foundation.layout.PaddingValues( - horizontal = 12.dp, - vertical = 0.dp - ) - ) { - Text( - stringResource(R.string.shizuku_open_button), - style = MaterialTheme.typography.labelSmall - ) - } - } } } } } } + } + } + } AnimatedVisibility( visible = viewModel.isButtonRemapEnabled.value, @@ -381,7 +407,6 @@ fun ButtonRemapSettingsUI( color = MaterialTheme.colorScheme.onSurfaceVariant ) } - } // Flashlight Options Bottom Sheet if (showFlashlightOptions) { diff --git a/app/src/main/java/com/sameerasw/essentials/utils/FreezeManager.kt b/app/src/main/java/com/sameerasw/essentials/utils/FreezeManager.kt index 8a8b57ac..5a00c739 100644 --- a/app/src/main/java/com/sameerasw/essentials/utils/FreezeManager.kt +++ b/app/src/main/java/com/sameerasw/essentials/utils/FreezeManager.kt @@ -24,16 +24,16 @@ object FreezeManager { * Freeze an application using Shizuku. * Sets state to COMPONENT_ENABLED_STATE_DISABLED_USER (3). */ - fun freezeApp(packageName: String): Boolean { - return setApplicationEnabledSetting(packageName, COMPONENT_ENABLED_STATE_DISABLED_USER) + fun freezeApp(context: Context, packageName: String): Boolean { + return setApplicationEnabledSetting(context, packageName, COMPONENT_ENABLED_STATE_DISABLED_USER) } /** * Unfreeze an application using Shizuku. * Sets state to COMPONENT_ENABLED_STATE_ENABLED (1). */ - fun unfreezeApp(packageName: String): Boolean { - return setApplicationEnabledSetting(packageName, COMPONENT_ENABLED_STATE_ENABLED) + fun unfreezeApp(context: Context, packageName: String): Boolean { + return setApplicationEnabledSetting(context, packageName, COMPONENT_ENABLED_STATE_ENABLED) } /** @@ -58,7 +58,7 @@ object FreezeManager { apps.forEach { app -> // Freezing happens if it's in the list AND not excluded if (!excludedSet.contains(app.packageName)) { - freezeApp(app.packageName) + freezeApp(context, app.packageName) } } } catch (e: Exception) { @@ -79,7 +79,7 @@ object FreezeManager { try { val apps: List = gson.fromJson(json, type) apps.forEach { app -> - freezeApp(app.packageName) + freezeApp(context, app.packageName) } } catch (e: Exception) { e.printStackTrace() @@ -108,7 +108,7 @@ object FreezeManager { apps.forEach { app -> if (!excludedSet.contains(app.packageName)) { - unfreezeApp(app.packageName) + unfreezeApp(context, app.packageName) } } } catch (e: Exception) { @@ -129,7 +129,7 @@ object FreezeManager { try { val apps: List = gson.fromJson(json, type) apps.forEach { app -> - unfreezeApp(app.packageName) + unfreezeApp(context, app.packageName) } } catch (e: Exception) { e.printStackTrace() @@ -149,33 +149,19 @@ object FreezeManager { } } - private fun setApplicationEnabledSetting(packageName: String, newState: Int): Boolean { - if (!ShizukuUtils.isShizukuAvailable() || !ShizukuUtils.hasPermission()) { + private fun setApplicationEnabledSetting(context: Context, packageName: String, newState: Int): Boolean { + if (!ShellUtils.hasPermission(context)) { return false } - return try { - // Get the Package Manager service through Shizuku - val service = ShizukuBinderWrapper(rikka.shizuku.SystemServiceHelper.getSystemService("package")) - val pmClass = Class.forName("android.content.pm.IPackageManager") - val stubClass = Class.forName("android.content.pm.IPackageManager\$Stub") - val asInterfaceMethod = stubClass.getMethod("asInterface", IBinder::class.java) - val ipm = asInterfaceMethod.invoke(null, service) + val cmd = when (newState) { + COMPONENT_ENABLED_STATE_DISABLED_USER -> "pm disable-user --user 0 $packageName" + COMPONENT_ENABLED_STATE_ENABLED -> "pm enable $packageName" + else -> return false + } - // IPackageManager.setApplicationEnabledSetting(packageName, newState, flags, userId, callingPackage) - // Note: Method signature varies across Android versions. - // Standard: setApplicationEnabledSetting(String packageName, int newState, int flags, int userId, String callingPackage) - - val method = ipm.javaClass.getMethod( - "setApplicationEnabledSetting", - String::class.java, - Int::class.java, - Int::class.java, - Int::class.java, - String::class.java - ) - - method.invoke(ipm, packageName, newState, 0, 0, "com.android.shell") + return try { + ShellUtils.runCommand(context, cmd) true } catch (e: Exception) { e.printStackTrace() diff --git a/app/src/main/java/com/sameerasw/essentials/utils/RootUtils.kt b/app/src/main/java/com/sameerasw/essentials/utils/RootUtils.kt new file mode 100644 index 00000000..5ea5bd79 --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/utils/RootUtils.kt @@ -0,0 +1,59 @@ +package com.sameerasw.essentials.utils + +import java.io.DataOutputStream +import java.io.IOException + +object RootUtils { + + fun isRootAvailable(): Boolean { + return try { + val process = Runtime.getRuntime().exec("su") + val os = DataOutputStream(process.outputStream) + os.writeBytes("exit\n") + os.flush() + val exitCode = process.waitFor() + exitCode == 0 + } catch (e: Exception) { + false + } + } + + fun isRootPermissionGranted(): Boolean { + // In many root managers, 'su -c id' will return 0 if granted + return try { + val process = Runtime.getRuntime().exec(arrayOf("su", "-c", "id")) + val exitCode = process.waitFor() + exitCode == 0 + } catch (e: Exception) { + false + } + } + + fun runCommand(command: String): Boolean { + var process: Process? = null + var os: DataOutputStream? = null + return try { + process = Runtime.getRuntime().exec("su") + os = DataOutputStream(process.outputStream) + os.writeBytes("$command\n") + os.writeBytes("exit\n") + os.flush() + process.waitFor() == 0 + } catch (e: IOException) { + false + } catch (e: InterruptedException) { + false + } finally { + try { os?.close() } catch (e: Exception) {} + try { process?.destroy() } catch (e: Exception) {} + } + } + + fun newProcess(cmd: Array): Process? { + return try { + Runtime.getRuntime().exec(arrayOf("su", "-c", cmd.joinToString(" "))) + } catch (e: Exception) { + null + } + } +} diff --git a/app/src/main/java/com/sameerasw/essentials/utils/ShellUtils.kt b/app/src/main/java/com/sameerasw/essentials/utils/ShellUtils.kt new file mode 100644 index 00000000..2d73590b --- /dev/null +++ b/app/src/main/java/com/sameerasw/essentials/utils/ShellUtils.kt @@ -0,0 +1,44 @@ +package com.sameerasw.essentials.utils + +import android.content.Context +import com.sameerasw.essentials.data.repository.SettingsRepository + +object ShellUtils { + + fun isRootEnabled(context: Context): Boolean { + val prefs = context.getSharedPreferences(SettingsRepository.PREFS_NAME, Context.MODE_PRIVATE) + return prefs.getBoolean(SettingsRepository.KEY_USE_ROOT, false) + } + + fun isAvailable(context: Context): Boolean { + return if (isRootEnabled(context)) { + RootUtils.isRootAvailable() + } else { + ShizukuUtils.isShizukuAvailable() + } + } + + fun hasPermission(context: Context): Boolean { + return if (isRootEnabled(context)) { + RootUtils.isRootPermissionGranted() + } else { + ShizukuUtils.hasPermission() + } + } + + fun runCommand(context: Context, command: String) { + if (isRootEnabled(context)) { + RootUtils.runCommand(command) + } else { + ShizukuUtils.runCommand(command) + } + } + + fun newProcess(context: Context, command: Array): Process? { + return if (isRootEnabled(context)) { + RootUtils.newProcess(command) + } else { + com.sameerasw.essentials.shizuku.ShizukuProcessHelper.newProcess(command) + } + } +} diff --git a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt index 8b696683..02248eec 100644 --- a/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt +++ b/app/src/main/java/com/sameerasw/essentials/viewmodels/MainViewModel.kt @@ -119,6 +119,9 @@ class MainViewModel : ViewModel() { val isAutoUpdateEnabled = mutableStateOf(true) val isUpdateNotificationEnabled = mutableStateOf(true) val isPreReleaseCheckEnabled = mutableStateOf(false) + val isRootEnabled = mutableStateOf(false) + val isRootAvailable = mutableStateOf(false) + val isRootPermissionGranted = mutableStateOf(false) private var lastUpdateCheckTime: Long = 0 private lateinit var settingsRepository: SettingsRepository private lateinit var updateRepository: UpdateRepository @@ -143,6 +146,7 @@ class MainViewModel : ViewModel() { SettingsRepository.KEY_FREEZE_AUTO_EXCLUDED_APPS -> { freezeAutoExcludedApps.value = settingsRepository.getFreezeAutoExcludedApps() } + SettingsRepository.KEY_USE_ROOT -> isRootEnabled.value = settingsRepository.getBoolean(key) SettingsRepository.KEY_CHECK_PRE_RELEASES_ENABLED -> isPreReleaseCheckEnabled.value = settingsRepository.getBoolean(key) SettingsRepository.KEY_DEVELOPER_MODE_ENABLED -> { isDeveloperModeEnabled.value = settingsRepository.getBoolean(key) @@ -178,6 +182,9 @@ class MainViewModel : ViewModel() { isBackgroundLocationPermissionGranted.value = PermissionUtils.hasBackgroundLocationPermission(context) isFullScreenIntentPermissionGranted.value = PermissionUtils.canUseFullScreenIntent(context) + isRootAvailable.value = com.sameerasw.essentials.utils.RootUtils.isRootAvailable() + isRootPermissionGranted.value = com.sameerasw.essentials.utils.RootUtils.isRootPermissionGranted() + settingsRepository.unregisterOnSharedPreferenceChangeListener(preferenceChangeListener) settingsRepository.registerOnSharedPreferenceChangeListener(preferenceChangeListener) @@ -198,6 +205,7 @@ class MainViewModel : ViewModel() { notificationLightingPulseDuration.value = settingsRepository.getFloat(SettingsRepository.KEY_EDGE_LIGHTING_PULSE_DURATION, 3000f) notificationLightingIndicatorX.value = settingsRepository.getFloat(SettingsRepository.KEY_EDGE_LIGHTING_INDICATOR_X, 50f) notificationLightingIndicatorY.value = settingsRepository.getFloat(SettingsRepository.KEY_EDGE_LIGHTING_INDICATOR_Y, 2f) + isRootEnabled.value = settingsRepository.getBoolean(SettingsRepository.KEY_USE_ROOT) notificationLightingIndicatorScale.value = settingsRepository.getFloat(SettingsRepository.KEY_EDGE_LIGHTING_INDICATOR_SCALE, 1.0f) notificationLightingGlowSides.value = settingsRepository.getNotificationLightingGlowSides() @@ -303,6 +311,12 @@ class MainViewModel : ViewModel() { settingsRepository.putBoolean(SettingsRepository.KEY_DEVELOPER_MODE_ENABLED, enabled) } + fun setRootEnabled(enabled: Boolean, context: Context) { + settingsRepository.putBoolean(SettingsRepository.KEY_USE_ROOT, enabled) + isRootEnabled.value = enabled + check(context) + } + fun checkForUpdates(context: Context, manual: Boolean = false) { if (isCheckingUpdate.value) return @@ -866,7 +880,7 @@ class MainViewModel : ViewModel() { viewModelScope.launch(Dispatchers.IO) { val isFrozen = com.sameerasw.essentials.utils.FreezeManager.isAppFrozen(context, packageName) if (isFrozen) { - com.sameerasw.essentials.utils.FreezeManager.unfreezeApp(packageName) + com.sameerasw.essentials.utils.FreezeManager.unfreezeApp(context, packageName) // Small delay to ensure system registers the change before launch delay(100) } diff --git a/app/src/main/res/drawable/rounded_numbers_24.xml b/app/src/main/res/drawable/rounded_numbers_24.xml new file mode 100644 index 00000000..a819c868 --- /dev/null +++ b/app/src/main/res/drawable/rounded_numbers_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/values-ach/strings.xml b/app/src/main/res/values-ach/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-ach/strings.xml +++ b/app/src/main/res/values-ach/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-af/strings.xml b/app/src/main/res/values-af/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-af/strings.xml +++ b/app/src/main/res/values-af/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-ca/strings.xml b/app/src/main/res/values-ca/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-ca/strings.xml +++ b/app/src/main/res/values-ca/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-da/strings.xml +++ b/app/src/main/res/values-da/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-el/strings.xml b/app/src/main/res/values-el/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-el/strings.xml +++ b/app/src/main/res/values-el/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-fi/strings.xml +++ b/app/src/main/res/values-fi/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index d41966f0..57263298 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Le contrôle de la luminosité de la lampe-torche ne marche pas Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu C\'est quoi cette application ? diff --git a/app/src/main/res/values-he/strings.xml b/app/src/main/res/values-he/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-he/strings.xml +++ b/app/src/main/res/values-he/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-hu/strings.xml +++ b/app/src/main/res/values-hu/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 534ab340..4d3fb5f8 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -641,7 +641,7 @@ Le app bloccate richiederanno l\'autenticazione all\'apertura. L\'app rimarrà s Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-ja/strings.xml b/app/src/main/res/values-ja/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-ja/strings.xml +++ b/app/src/main/res/values-ja/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-ko/strings.xml +++ b/app/src/main/res/values-ko/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-no/strings.xml b/app/src/main/res/values-no/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-no/strings.xml +++ b/app/src/main/res/values-no/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-si/strings.xml +++ b/app/src/main/res/values-si/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-sr/strings.xml b/app/src/main/res/values-sr/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-sr/strings.xml +++ b/app/src/main/res/values-sr/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 1b09007e..607ce70e 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -26,7 +26,7 @@ Another note, the biometric authentication prompt only lets you use STRONG secure class methods. Face unlock security methods in WEAK class in devices such as Pixel 7 will only be able to utilize the available other STRONG auth methods such as fingerprint or pin. Enable Button Remap - Use Shizuku + Use Shizuku or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -640,7 +640,7 @@ Notification lighting does not work It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu What the hell is this app? diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 48f1b176..4a43243d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -28,7 +28,7 @@ Enable Button Remap - Use Shizuku + Use Shizuku or Root or Root Works with screen off (Recommended) Shizuku is not running Detected %1$s @@ -357,8 +357,10 @@ Shizuku Required for advanced commands. Install Shizuku from the Play Store. Install Shizuku - Shizuku permission + Grant Permission Required to run power-saving commands while maps is navigating. + Root Access + Permissions required for system actions using Root privileges. Notification Listener Required to detect when Maps is navigating. Required to detect new notifications @@ -688,7 +690,7 @@ It depends on the OEM. Some like OneUI does not seem to allow overlays above the AOD preventing the lighting effects being shown. In this case, try the ambient display as a workaround. Button remap does not work while display is off - Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. + Some OEMs limit the accessibility service reporting once the display is actually off but they may still work while the AOD is on. \nIn this case, you may able to use button remaps with AOD on but not with off. \n\nAs a workaround, you will need to use Shizuku permissions and turn on the \'Use Shizuku or Root\' toggle in button remap settings which identifies and listen to hardware input events.\nThis is not guaranteed to work on all devices and needs testing.\n\nAnd even if it\'s on, Shizuku method only will be used when it\'s needed. Otherwise it will always fallback to Accessibility which also handles the blocking of the actual input during long press. Flashlight brightness does not work Only a limited number of devices got hardware and software support adjusting the flashlight intensity. \n\n\'The minimum version of Android is 13 (SDK33).\nFlashlight brightness control only supports HAL version 3.8 and higher, so among the supported devices, the latest ones (For example, Pixel 6/7, Samsung S23, etc.)\'\npolodarb/Flashlight-Tiramisu @@ -751,4 +753,7 @@ Prepare to get off Dismiss Destination set: %1$.4f, %2$.4f + Use Root + Instead of Shizuku + Root access not available. Please check your root manager. \ No newline at end of file