summaryrefslogtreecommitdiff
path: root/src/com/android/internal/utils
diff options
context:
space:
mode:
authorEzio Lacandia Bijelkic <brabus84@gmail.com>2018-05-22 15:40:24 -0400
committerAli B <abittin@gmail.com>2018-05-26 13:44:43 +0300
commit5adcc23120fdb80e5b7e91cb6bb5e0d79a8f4db3 (patch)
treeba9ab9aa1c2c71c6fa0693ccd3a286e8174f1a88 /src/com/android/internal/utils
parent268a8aaaa311e762ac736cf9adfd33a20fff4ce2 (diff)
Fix lastapp action going to homescreen when no default launcher is setHEADo8.1
when no launcher is set as default in: Settings - Apps and notifications - Advanced - Default apps - Home (can happen for example when the user starts trying more launchers without choosing the default one after pressing the home button, and this state is kept also after uninstalling all of them). if the user was on home screen before running the current app, then triggers a last app action (e.g. from recents double tap if set in du navbar settings), the home screen is shown instead of the previously running app. This happens because pm.resolveActivity gives "android" or the resolve activity as result in this case. We can use instead pm.getHomeActivities (a hidden api that basically triggers the public queryIntentActivities) to correctly skip all available launchers when comparing the list of last running apps. Tecnically this method could be slower than resolveActivity but it's more reliable and anyway i can't see any delay. Change-Id: I0569b5be4c1cc4b20fcc0499273b5d7b9395402f
Diffstat (limited to 'src/com/android/internal/utils')
-rw-r--r--src/com/android/internal/utils/du/ActionHandler.java27
1 files changed, 16 insertions, 11 deletions
diff --git a/src/com/android/internal/utils/du/ActionHandler.java b/src/com/android/internal/utils/du/ActionHandler.java
index 0f7a106..f8c0ad8 100644
--- a/src/com/android/internal/utils/du/ActionHandler.java
+++ b/src/com/android/internal/utils/du/ActionHandler.java
@@ -769,26 +769,31 @@ public class ActionHandler {
private static ActivityManager.RunningTaskInfo getLastTask(Context context,
final ActivityManager am) {
- final String defaultHomePackage = resolveCurrentLauncherPackage(context);
- List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(5);
-
+ final List<String> packageNames = getCurrentLauncherPackages(context);
+ final List<ActivityManager.RunningTaskInfo> 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(SYSTEMUI)) {
+ if (!packageName.equals(context.getPackageName())
+ && !packageName.equals(SYSTEMUI)
+ && !packageNames.contains(packageName)) {
return tasks.get(i);
}
}
return null;
}
- private static String resolveCurrentLauncherPackage(Context context) {
- final Intent launcherIntent = new Intent(Intent.ACTION_MAIN)
- .addCategory(Intent.CATEGORY_HOME);
+ private static List<String> getCurrentLauncherPackages(Context context) {
final PackageManager pm = context.getPackageManager();
- final ResolveInfo launcherInfo = pm.resolveActivity(launcherIntent, 0);
- return launcherInfo.activityInfo.packageName;
+ final List<ResolveInfo> homeActivities = new ArrayList<>();
+ pm.getHomeActivities(homeActivities);
+ final List<String> packageNames = new ArrayList<>();
+ for (ResolveInfo info : homeActivities) {
+ final String name = info.activityInfo.packageName;
+ if (!name.equals("com.android.settings")) {
+ packageNames.add(name);
+ }
+ }
+ return packageNames;
}
private static void sendCloseSystemWindows(String reason) {