diff options
| author | Ezio Lacandia Bijelkic <brabus84@gmail.com> | 2018-05-22 15:40:24 -0400 |
|---|---|---|
| committer | Ali B <abittin@gmail.com> | 2018-05-26 13:44:43 +0300 |
| commit | 5adcc23120fdb80e5b7e91cb6bb5e0d79a8f4db3 (patch) | |
| tree | ba9ab9aa1c2c71c6fa0693ccd3a286e8174f1a88 /src/com/android/internal/utils/du/ActionHandler.java | |
| parent | 268a8aaaa311e762ac736cf9adfd33a20fff4ce2 (diff) | |
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/du/ActionHandler.java')
| -rw-r--r-- | src/com/android/internal/utils/du/ActionHandler.java | 27 |
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) { |
