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,