diff --git a/LineageActions/res/values-pt-rBR/strings.xml b/LineageActions/res/values-pt-rBR/strings.xml index 8a8af86..23f6e82 100644 --- a/LineageActions/res/values-pt-rBR/strings.xml +++ b/LineageActions/res/values-pt-rBR/strings.xml @@ -54,6 +54,7 @@ Acordar o dispositivo Voltar Recentes + Ăšltimo app Aumentar volume Diminuir volume Assistente de voz diff --git a/LineageActions/res/values/array.xml b/LineageActions/res/values/array.xml index 2843b4b..fed1737 100644 --- a/LineageActions/res/values/array.xml +++ b/LineageActions/res/values/array.xml @@ -21,6 +21,7 @@ @string/action_power @string/action_back @string/action_recents + @string/action_last_app @string/action_volume_up @string/action_volume_down @string/action_voice_assistant @@ -38,6 +39,7 @@ 101 102 103 + 121 104 105 106 diff --git a/LineageActions/res/values/strings.xml b/LineageActions/res/values/strings.xml index 56bd4ed..82da8f5 100644 --- a/LineageActions/res/values/strings.xml +++ b/LineageActions/res/values/strings.xml @@ -54,6 +54,7 @@ Wake Back Recents + Last app Volume up Volume down Voice assistant diff --git a/LineageActions/src/org/lineageos/settings/device/KeyHandler.java b/LineageActions/src/org/lineageos/settings/device/KeyHandler.java index bb98733..610ffce 100644 --- a/LineageActions/src/org/lineageos/settings/device/KeyHandler.java +++ b/LineageActions/src/org/lineageos/settings/device/KeyHandler.java @@ -217,6 +217,40 @@ public class KeyHandler implements DeviceKeyHandler { } } + private static void switchToLastApp(Context context) { + final ActivityManager am = + (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); + ActivityManager.RunningTaskInfo lastTask = getLastTask(context, am); + + if (lastTask != null) { + am.moveTaskToFront(lastTask.id, ActivityManager.MOVE_TASK_NO_USER_ACTION); + } + } + + private static ActivityManager.RunningTaskInfo getLastTask(Context context, + final ActivityManager am) { + final String defaultHomePackage = resolveCurrentLauncherPackage(context); + List tasks = am.getRunningTasks(5); + + for (int i = 1; i < tasks.size(); i++) { + String packageName = tasks.get(i).topActivity.getPackageName(); + if (!packageName.equals(defaultHomePackage) + && !packageName.equals(context.getPackageName()) + && !packageName.equals("com.android.systemui")) { + return tasks.get(i); + } + } + return null; + } + + private static String resolveCurrentLauncherPackage(Context context) { + final Intent launcherIntent = new Intent(Intent.ACTION_MAIN) + .addCategory(Intent.CATEGORY_HOME); + final PackageManager pm = context.getPackageManager(); + final ResolveInfo launcherInfo = pm.resolveActivity(launcherIntent, 0); + return launcherInfo.activityInfo.packageName; + } + private void setHapticFeedbackEnabledOnSystem(boolean enabled) { Settings.System.putIntForUser(mContext.getContentResolver(), Settings.System.HAPTIC_FEEDBACK_ENABLED, enabled ? 1 : 0, UserHandle.USER_CURRENT); @@ -565,6 +599,11 @@ public class KeyHandler implements DeviceKeyHandler { goToPipMode(); } break; + case ACTION_LAST_APP: + if (!mKeyguardManager.inKeyguardRestrictedInputMode()) { + switchToLastApp(mContext); + } + break; } if (isHapticFeedbackEnabledOnFP && action != ACTION_VOICE_ASSISTANT && action != ACTION_CAMERA && action != ACTION_FLASHLIGHT && action != ACTION_POWER) { // prevent double vibration doHapticFeedbackFP(false); diff --git a/LineageActions/src/org/lineageos/settings/device/actions/Constants.java b/LineageActions/src/org/lineageos/settings/device/actions/Constants.java index 3c0aeee..1d78d19 100644 --- a/LineageActions/src/org/lineageos/settings/device/actions/Constants.java +++ b/LineageActions/src/org/lineageos/settings/device/actions/Constants.java @@ -64,6 +64,7 @@ public class Constants { public static final int ACTION_EMAIL = 118; public static final int ACTION_MESSAGES = 119; public static final int ACTION_PIP = 120; + public static final int ACTION_LAST_APP = 121; public static final int[] sFPSupportedActions = new int[]{ ACTION_HOME, ACTION_POWER, @@ -78,7 +79,8 @@ public class Constants { ACTION_FLASHLIGHT, ACTION_CAMERA, ACTION_SCREENSHOT, - ACTION_PIP + ACTION_PIP, + ACTION_LAST_APP }; public static final int[] sFPSupportedActionsScreenOff = new int[]{ ACTION_POWER,