diff options
author | Sunny Goyal <sunnygoyal@google.com> | 2017-02-28 15:14:58 -0800 |
---|---|---|
committer | Sunny Goyal <sunnygoyal@google.com> | 2017-03-01 17:17:40 -0800 |
commit | ad2e91a216edae0f25bce83a2b058c81953981af (patch) | |
tree | 0c72c0934aff0c23789d124998ea8534ac9d756a /src/com/android/launcher3/compat | |
parent | cf18c3c2d14b54896e51fec829ae2d89642a59eb (diff) | |
download | android_packages_apps_Trebuchet-ad2e91a216edae0f25bce83a2b058c81953981af.tar.gz android_packages_apps_Trebuchet-ad2e91a216edae0f25bce83a2b058c81953981af.tar.bz2 android_packages_apps_Trebuchet-ad2e91a216edae0f25bce83a2b058c81953981af.zip |
Fixing SDCard and package enabled state checks in PackageManagerHeler
Bug: 32365540
Change-Id: Iaac3e08ce55457ebbfb3633514ebc8ade6d200c5
Diffstat (limited to 'src/com/android/launcher3/compat')
3 files changed, 28 insertions, 6 deletions
diff --git a/src/com/android/launcher3/compat/LauncherAppsCompat.java b/src/com/android/launcher3/compat/LauncherAppsCompat.java index 44a3686ed..2eb5b023b 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompat.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompat.java @@ -73,7 +73,8 @@ public abstract class LauncherAppsCompat { UserHandle user); public abstract void startActivityForProfile(ComponentName component, UserHandle user, Rect sourceBounds, Bundle opts); - public abstract ApplicationInfo getApplicationInfo(String packageName, UserHandle user); + public abstract ApplicationInfo getApplicationInfo( + String packageName, int flags, UserHandle user); public abstract void showAppDetailsForProfile(ComponentName component, UserHandle user); public abstract void addOnAppsChangedCallback(OnAppsChangedCallbackCompat listener); public abstract void removeOnAppsChangedCallback(OnAppsChangedCallbackCompat listener); diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java index 776f59360..e5517a6c6 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompatVL.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompatVL.java @@ -27,6 +27,7 @@ import android.content.pm.ResolveInfo; import android.content.pm.ShortcutInfo; import android.graphics.Rect; import android.os.Bundle; +import android.os.Process; import android.os.UserHandle; import com.android.launcher3.compat.ShortcutConfigActivityInfo.ShortcutConfigActivityInfoVL; @@ -66,9 +67,28 @@ public class LauncherAppsCompatVL extends LauncherAppsCompat { } @Override - public ApplicationInfo getApplicationInfo(String packageName, UserHandle user) { - List<LauncherActivityInfo> activityList = mLauncherApps.getActivityList(packageName, user); - return activityList.size() > 0 ? activityList.get(0).getApplicationInfo() : null; + public ApplicationInfo getApplicationInfo(String packageName, int flags, UserHandle user) { + final boolean isPrimaryUser = Process.myUserHandle().equals(user); + if (!isPrimaryUser && (flags == 0)) { + // We are looking for an installed app on a secondary profile. Prior to O, the only + // entry point for work profiles is through the LauncherActivity. + List<LauncherActivityInfo> activityList = + mLauncherApps.getActivityList(packageName, user); + return activityList.size() > 0 ? activityList.get(0).getApplicationInfo() : null; + } + try { + ApplicationInfo info = + mContext.getPackageManager().getApplicationInfo(packageName, flags); + // There is no way to check if the app is installed for managed profile. But for + // primary profile, we can still have this check. + if (isPrimaryUser && ((info.flags & ApplicationInfo.FLAG_INSTALLED) == 0)) { + return null; + } + return info; + } catch (PackageManager.NameNotFoundException e) { + // Package not found + return null; + } } @Override diff --git a/src/com/android/launcher3/compat/LauncherAppsCompatVO.java b/src/com/android/launcher3/compat/LauncherAppsCompatVO.java index 377907aa9..c0f80d01c 100644 --- a/src/com/android/launcher3/compat/LauncherAppsCompatVO.java +++ b/src/com/android/launcher3/compat/LauncherAppsCompatVO.java @@ -35,8 +35,9 @@ public class LauncherAppsCompatVO extends LauncherAppsCompatVL { } @Override - public ApplicationInfo getApplicationInfo(String packageName, UserHandle user) { - return mLauncherApps.getApplicationInfo(packageName, 0, user); + public ApplicationInfo getApplicationInfo(String packageName, int flags, UserHandle user) { + ApplicationInfo info = mLauncherApps.getApplicationInfo(packageName, flags, user); + return info == null || (info.flags & ApplicationInfo.FLAG_INSTALLED) == 0 ? null : info; } @Override |