From 8b361d918ecf9f1d9c5ca3f22549c9058dc2fe37 Mon Sep 17 00:00:00 2001 From: Sunny Goyal Date: Fri, 9 Feb 2018 10:41:03 -0800 Subject: [PATCH] Adding utility method to check the current home app Test: Verified the libary with Launcher Change-Id: I37c0c0a6c74484e6a34497168d841e4a92207b5b --- .../shared/system/PackageManagerWrapper.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/PackageManagerWrapper.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/PackageManagerWrapper.java index d5e6e6efb3cf9..6fa7db3f2cdbb 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/PackageManagerWrapper.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/PackageManagerWrapper.java @@ -21,8 +21,12 @@ import android.content.ComponentName; import android.content.pm.ActivityInfo; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.os.RemoteException; +import java.util.ArrayList; +import java.util.List; + public class PackageManagerWrapper { private static final String TAG = "PackageManagerWrapper"; @@ -47,4 +51,42 @@ public class PackageManagerWrapper { return null; } } + + /** + * @return true if the packageName belongs to the current preferred home app on the device. + * + * If will also return false if there are multiple home apps and the user has not picked any + * preferred home, in which case the user would see a disambiguation screen on going to home. + */ + public boolean isDefaultHomeActivity(String packageName) { + List allHomeCandidates = new ArrayList<>(); + ComponentName home; + try { + home = mIPackageManager.getHomeActivities(allHomeCandidates); + } catch (RemoteException e) { + e.printStackTrace(); + return false; + } + + if (home != null && packageName.equals(home.getPackageName())) { + return true; + } + + // Find the launcher with the highest priority and return that component if there are no + // other home activity with the same priority. + int lastPriority = Integer.MIN_VALUE; + ComponentName lastComponent = null; + final int size = allHomeCandidates.size(); + for (int i = 0; i < size; i++) { + final ResolveInfo ri = allHomeCandidates.get(i); + if (ri.priority > lastPriority) { + lastComponent = ri.activityInfo.getComponentName(); + lastPriority = ri.priority; + } else if (ri.priority == lastPriority) { + // Two components found with same priority. + lastComponent = null; + } + } + return lastComponent != null && packageName.equals(lastComponent.getPackageName()); + } }