Loading core/java/android/content/pm/ILauncherApps.aidl +15 −8 Original line number Diff line number Diff line Loading @@ -38,15 +38,21 @@ import java.util.List; interface ILauncherApps { void addOnAppsChangedListener(String callingPackage, in IOnAppsChangedListener listener); void removeOnAppsChangedListener(in IOnAppsChangedListener listener); ParceledListSlice getLauncherActivities(String packageName, in UserHandle user); ActivityInfo resolveActivity(in ComponentName component, in UserHandle user); void startActivityAsUser(in ComponentName component, in Rect sourceBounds, ParceledListSlice getLauncherActivities( String callingPackage, String packageName, in UserHandle user); ActivityInfo resolveActivity( String callingPackage, in ComponentName component, in UserHandle user); void startActivityAsUser(String callingPackage, in ComponentName component, in Rect sourceBounds, in Bundle opts, in UserHandle user); void showAppDetailsAsUser(in ComponentName component, in Rect sourceBounds, void showAppDetailsAsUser( String callingPackage, in ComponentName component, in Rect sourceBounds, in Bundle opts, in UserHandle user); boolean isPackageEnabled(String packageName, in UserHandle user); boolean isActivityEnabled(in ComponentName component, in UserHandle user); ApplicationInfo getApplicationInfo(String packageName, int flags, in UserHandle user); boolean isPackageEnabled(String callingPackage, String packageName, in UserHandle user); boolean isActivityEnabled( String callingPackage, in ComponentName component, in UserHandle user); ApplicationInfo getApplicationInfo( String callingPackage, String packageName, int flags, in UserHandle user); ParceledListSlice getShortcuts(String callingPackage, long changedSince, String packageName, in List shortcutIds, in ComponentName componentName, int flags, in UserHandle user); Loading @@ -62,7 +68,8 @@ interface ILauncherApps { boolean hasShortcutHostPermission(String callingPackage); ParceledListSlice getShortcutConfigActivities(String packageName, in UserHandle user); ParceledListSlice getShortcutConfigActivities( String callingPackage, String packageName, in UserHandle user); IntentSender getShortcutConfigActivityIntent(String callingPackage, in ComponentName component, in UserHandle user); } core/java/android/content/pm/LauncherApps.java +13 −8 Original line number Diff line number Diff line Loading @@ -407,7 +407,8 @@ public class LauncherApps { */ public List<LauncherActivityInfo> getActivityList(String packageName, UserHandle user) { try { return convertToActivityList(mService.getLauncherActivities(packageName, user), user); return convertToActivityList(mService.getLauncherActivities(mContext.getPackageName(), packageName, user), user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading @@ -423,7 +424,8 @@ public class LauncherApps { */ public LauncherActivityInfo resolveActivity(Intent intent, UserHandle user) { try { ActivityInfo ai = mService.resolveActivity(intent.getComponent(), user); ActivityInfo ai = mService.resolveActivity(mContext.getPackageName(), intent.getComponent(), user); if (ai != null) { LauncherActivityInfo info = new LauncherActivityInfo(mContext, ai, user); return info; Loading @@ -448,7 +450,8 @@ public class LauncherApps { Log.i(TAG, "StartMainActivity " + component + " " + user.getIdentifier()); } try { mService.startActivityAsUser(component, sourceBounds, opts, user); mService.startActivityAsUser(mContext.getPackageName(), component, sourceBounds, opts, user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading @@ -466,7 +469,8 @@ public class LauncherApps { public void startAppDetailsActivity(ComponentName component, UserHandle user, Rect sourceBounds, Bundle opts) { try { mService.showAppDetailsAsUser(component, sourceBounds, opts, user); mService.showAppDetailsAsUser(mContext.getPackageName(), component, sourceBounds, opts, user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading @@ -486,7 +490,8 @@ public class LauncherApps { public List<LauncherActivityInfo> getShortcutConfigActivityList(@Nullable String packageName, @NonNull UserHandle user) { try { return convertToActivityList(mService.getShortcutConfigActivities(packageName, user), return convertToActivityList(mService.getShortcutConfigActivities( mContext.getPackageName(), packageName, user), user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); Loading Loading @@ -549,7 +554,7 @@ public class LauncherApps { */ public boolean isPackageEnabled(String packageName, UserHandle user) { try { return mService.isPackageEnabled(packageName, user); return mService.isPackageEnabled(mContext.getPackageName(), packageName, user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading @@ -569,7 +574,7 @@ public class LauncherApps { public ApplicationInfo getApplicationInfo(String packageName, @ApplicationInfoFlags int flags, UserHandle user) { try { return mService.getApplicationInfo(packageName, flags, user); return mService.getApplicationInfo(mContext.getPackageName(), packageName, flags, user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading @@ -585,7 +590,7 @@ public class LauncherApps { */ public boolean isActivityEnabled(ComponentName component, UserHandle user) { try { return mService.isActivityEnabled(component, user); return mService.isActivityEnabled(mContext.getPackageName(), component, user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading services/core/java/com/android/server/pm/LauncherAppsService.java +34 −27 Original line number Diff line number Diff line Loading @@ -219,11 +219,12 @@ public class LauncherAppsService extends SystemService { /** * Checks if the caller is in the same group as the userToCheck. */ private void ensureInUserProfiles(UserHandle userToCheck, String message) { ensureInUserProfiles(userToCheck.getIdentifier(), message); private void ensureInUserProfiles( String callingPackage, UserHandle userToCheck, String message) { ensureInUserProfiles(callingPackage, userToCheck.getIdentifier(), message); } private void ensureInUserProfiles(int targetUserId, String message) { private void ensureInUserProfiles(String callingPackage, int targetUserId, String message) { final int callingUserId = injectCallingUserId(); if (targetUserId == callingUserId) return; Loading @@ -236,8 +237,8 @@ public class LauncherAppsService extends SystemService { // throw new SecurityException(message + " for another profile " + targetUserId); // TODO: Report caller package name. Slog.wtfStack(TAG, message + " for another profile " + targetUserId + " from " + callingUserId); Slog.wtfStack(TAG, message + " by " + callingPackage + " for another profile " + targetUserId + " from " + callingUserId); } UserInfo targetUserInfo = mUm.getUserInfo(targetUserId); Loading Loading @@ -286,9 +287,10 @@ public class LauncherAppsService extends SystemService { } @Override public ParceledListSlice<ResolveInfo> getLauncherActivities(String packageName, UserHandle user) public ParceledListSlice<ResolveInfo> getLauncherActivities(String callingPackage, String packageName, UserHandle user) throws RemoteException { return queryActivitiesForUser( return queryActivitiesForUser(callingPackage, new Intent(Intent.ACTION_MAIN) .addCategory(Intent.CATEGORY_LAUNCHER) .setPackage(packageName), Loading @@ -296,9 +298,10 @@ public class LauncherAppsService extends SystemService { } @Override public ActivityInfo resolveActivity(ComponentName component, UserHandle user) public ActivityInfo resolveActivity( String callingPackage, ComponentName component, UserHandle user) throws RemoteException { ensureInUserProfiles(user, "Cannot resolve activity"); ensureInUserProfiles(callingPackage, user, "Cannot resolve activity"); if (!isUserEnabled(user)) { return null; } Loading @@ -316,15 +319,16 @@ public class LauncherAppsService extends SystemService { } @Override public ParceledListSlice getShortcutConfigActivities(String packageName, UserHandle user) public ParceledListSlice getShortcutConfigActivities( String callingPackage, String packageName, UserHandle user) throws RemoteException { return queryActivitiesForUser( return queryActivitiesForUser(callingPackage, new Intent(Intent.ACTION_CREATE_SHORTCUT).setPackage(packageName), user); } private ParceledListSlice<ResolveInfo> queryActivitiesForUser(Intent intent, UserHandle user) { ensureInUserProfiles(user, "Cannot retrieve activities"); private ParceledListSlice<ResolveInfo> queryActivitiesForUser(String callingPackage, Intent intent, UserHandle user) { ensureInUserProfiles(callingPackage, user, "Cannot retrieve activities"); if (!isUserEnabled(user)) { return null; } Loading Loading @@ -363,9 +367,9 @@ public class LauncherAppsService extends SystemService { } @Override public boolean isPackageEnabled(String packageName, UserHandle user) public boolean isPackageEnabled(String callingPackage, String packageName, UserHandle user) throws RemoteException { ensureInUserProfiles(user, "Cannot check package"); ensureInUserProfiles(callingPackage, user, "Cannot check package"); if (!isUserEnabled(user)) { return false; } Loading @@ -384,9 +388,10 @@ public class LauncherAppsService extends SystemService { } @Override public ApplicationInfo getApplicationInfo(String packageName, int flags, UserHandle user) public ApplicationInfo getApplicationInfo( String callingPackage, String packageName, int flags, UserHandle user) throws RemoteException { ensureInUserProfiles(user, "Cannot check package"); ensureInUserProfiles(callingPackage, user, "Cannot check package"); if (!isUserEnabled(user)) { return null; } Loading @@ -408,7 +413,7 @@ public class LauncherAppsService extends SystemService { private void ensureShortcutPermission(@NonNull String callingPackage, int userId) { verifyCallingPackage(callingPackage); ensureInUserProfiles(userId, "Cannot access shortcuts"); ensureInUserProfiles(callingPackage, userId, "Cannot access shortcuts"); if (!mShortcutServiceInternal.hasShortcutHostPermission(getCallingUserId(), callingPackage)) { Loading Loading @@ -484,7 +489,7 @@ public class LauncherAppsService extends SystemService { public boolean startShortcut(String callingPackage, String packageName, String shortcutId, Rect sourceBounds, Bundle startActivityOptions, int userId) { verifyCallingPackage(callingPackage); ensureInUserProfiles(userId, "Cannot start activity"); ensureInUserProfiles(callingPackage, userId, "Cannot start activity"); if (!isUserEnabled(userId)) { throw new IllegalStateException("Cannot start a shortcut for disabled profile " Loading Loading @@ -535,9 +540,10 @@ public class LauncherAppsService extends SystemService { } @Override public boolean isActivityEnabled(ComponentName component, UserHandle user) public boolean isActivityEnabled( String callingPackage, ComponentName component, UserHandle user) throws RemoteException { ensureInUserProfiles(user, "Cannot check component"); ensureInUserProfiles(callingPackage , user, "Cannot check component"); if (!isUserEnabled(user)) { return false; } Loading @@ -556,9 +562,10 @@ public class LauncherAppsService extends SystemService { } @Override public void startActivityAsUser(ComponentName component, Rect sourceBounds, public void startActivityAsUser(String callingPackage, ComponentName component, Rect sourceBounds, Bundle opts, UserHandle user) throws RemoteException { ensureInUserProfiles(user, "Cannot start activity"); ensureInUserProfiles(callingPackage, user, "Cannot start activity"); if (!isUserEnabled(user)) { throw new IllegalStateException("Cannot start activity for disabled profile " + user); } Loading Loading @@ -609,9 +616,9 @@ public class LauncherAppsService extends SystemService { } @Override public void showAppDetailsAsUser(ComponentName component, Rect sourceBounds, Bundle opts, UserHandle user) throws RemoteException { ensureInUserProfiles(user, "Cannot show app details"); public void showAppDetailsAsUser(String callingPackage, ComponentName component, Rect sourceBounds, Bundle opts, UserHandle user) throws RemoteException { ensureInUserProfiles(callingPackage, user, "Cannot show app details"); if (!isUserEnabled(user)) { throw new IllegalStateException("Cannot show app details for disabled profile " + user); Loading Loading
core/java/android/content/pm/ILauncherApps.aidl +15 −8 Original line number Diff line number Diff line Loading @@ -38,15 +38,21 @@ import java.util.List; interface ILauncherApps { void addOnAppsChangedListener(String callingPackage, in IOnAppsChangedListener listener); void removeOnAppsChangedListener(in IOnAppsChangedListener listener); ParceledListSlice getLauncherActivities(String packageName, in UserHandle user); ActivityInfo resolveActivity(in ComponentName component, in UserHandle user); void startActivityAsUser(in ComponentName component, in Rect sourceBounds, ParceledListSlice getLauncherActivities( String callingPackage, String packageName, in UserHandle user); ActivityInfo resolveActivity( String callingPackage, in ComponentName component, in UserHandle user); void startActivityAsUser(String callingPackage, in ComponentName component, in Rect sourceBounds, in Bundle opts, in UserHandle user); void showAppDetailsAsUser(in ComponentName component, in Rect sourceBounds, void showAppDetailsAsUser( String callingPackage, in ComponentName component, in Rect sourceBounds, in Bundle opts, in UserHandle user); boolean isPackageEnabled(String packageName, in UserHandle user); boolean isActivityEnabled(in ComponentName component, in UserHandle user); ApplicationInfo getApplicationInfo(String packageName, int flags, in UserHandle user); boolean isPackageEnabled(String callingPackage, String packageName, in UserHandle user); boolean isActivityEnabled( String callingPackage, in ComponentName component, in UserHandle user); ApplicationInfo getApplicationInfo( String callingPackage, String packageName, int flags, in UserHandle user); ParceledListSlice getShortcuts(String callingPackage, long changedSince, String packageName, in List shortcutIds, in ComponentName componentName, int flags, in UserHandle user); Loading @@ -62,7 +68,8 @@ interface ILauncherApps { boolean hasShortcutHostPermission(String callingPackage); ParceledListSlice getShortcutConfigActivities(String packageName, in UserHandle user); ParceledListSlice getShortcutConfigActivities( String callingPackage, String packageName, in UserHandle user); IntentSender getShortcutConfigActivityIntent(String callingPackage, in ComponentName component, in UserHandle user); }
core/java/android/content/pm/LauncherApps.java +13 −8 Original line number Diff line number Diff line Loading @@ -407,7 +407,8 @@ public class LauncherApps { */ public List<LauncherActivityInfo> getActivityList(String packageName, UserHandle user) { try { return convertToActivityList(mService.getLauncherActivities(packageName, user), user); return convertToActivityList(mService.getLauncherActivities(mContext.getPackageName(), packageName, user), user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading @@ -423,7 +424,8 @@ public class LauncherApps { */ public LauncherActivityInfo resolveActivity(Intent intent, UserHandle user) { try { ActivityInfo ai = mService.resolveActivity(intent.getComponent(), user); ActivityInfo ai = mService.resolveActivity(mContext.getPackageName(), intent.getComponent(), user); if (ai != null) { LauncherActivityInfo info = new LauncherActivityInfo(mContext, ai, user); return info; Loading @@ -448,7 +450,8 @@ public class LauncherApps { Log.i(TAG, "StartMainActivity " + component + " " + user.getIdentifier()); } try { mService.startActivityAsUser(component, sourceBounds, opts, user); mService.startActivityAsUser(mContext.getPackageName(), component, sourceBounds, opts, user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading @@ -466,7 +469,8 @@ public class LauncherApps { public void startAppDetailsActivity(ComponentName component, UserHandle user, Rect sourceBounds, Bundle opts) { try { mService.showAppDetailsAsUser(component, sourceBounds, opts, user); mService.showAppDetailsAsUser(mContext.getPackageName(), component, sourceBounds, opts, user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading @@ -486,7 +490,8 @@ public class LauncherApps { public List<LauncherActivityInfo> getShortcutConfigActivityList(@Nullable String packageName, @NonNull UserHandle user) { try { return convertToActivityList(mService.getShortcutConfigActivities(packageName, user), return convertToActivityList(mService.getShortcutConfigActivities( mContext.getPackageName(), packageName, user), user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); Loading Loading @@ -549,7 +554,7 @@ public class LauncherApps { */ public boolean isPackageEnabled(String packageName, UserHandle user) { try { return mService.isPackageEnabled(packageName, user); return mService.isPackageEnabled(mContext.getPackageName(), packageName, user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading @@ -569,7 +574,7 @@ public class LauncherApps { public ApplicationInfo getApplicationInfo(String packageName, @ApplicationInfoFlags int flags, UserHandle user) { try { return mService.getApplicationInfo(packageName, flags, user); return mService.getApplicationInfo(mContext.getPackageName(), packageName, flags, user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading @@ -585,7 +590,7 @@ public class LauncherApps { */ public boolean isActivityEnabled(ComponentName component, UserHandle user) { try { return mService.isActivityEnabled(component, user); return mService.isActivityEnabled(mContext.getPackageName(), component, user); } catch (RemoteException re) { throw re.rethrowFromSystemServer(); } Loading
services/core/java/com/android/server/pm/LauncherAppsService.java +34 −27 Original line number Diff line number Diff line Loading @@ -219,11 +219,12 @@ public class LauncherAppsService extends SystemService { /** * Checks if the caller is in the same group as the userToCheck. */ private void ensureInUserProfiles(UserHandle userToCheck, String message) { ensureInUserProfiles(userToCheck.getIdentifier(), message); private void ensureInUserProfiles( String callingPackage, UserHandle userToCheck, String message) { ensureInUserProfiles(callingPackage, userToCheck.getIdentifier(), message); } private void ensureInUserProfiles(int targetUserId, String message) { private void ensureInUserProfiles(String callingPackage, int targetUserId, String message) { final int callingUserId = injectCallingUserId(); if (targetUserId == callingUserId) return; Loading @@ -236,8 +237,8 @@ public class LauncherAppsService extends SystemService { // throw new SecurityException(message + " for another profile " + targetUserId); // TODO: Report caller package name. Slog.wtfStack(TAG, message + " for another profile " + targetUserId + " from " + callingUserId); Slog.wtfStack(TAG, message + " by " + callingPackage + " for another profile " + targetUserId + " from " + callingUserId); } UserInfo targetUserInfo = mUm.getUserInfo(targetUserId); Loading Loading @@ -286,9 +287,10 @@ public class LauncherAppsService extends SystemService { } @Override public ParceledListSlice<ResolveInfo> getLauncherActivities(String packageName, UserHandle user) public ParceledListSlice<ResolveInfo> getLauncherActivities(String callingPackage, String packageName, UserHandle user) throws RemoteException { return queryActivitiesForUser( return queryActivitiesForUser(callingPackage, new Intent(Intent.ACTION_MAIN) .addCategory(Intent.CATEGORY_LAUNCHER) .setPackage(packageName), Loading @@ -296,9 +298,10 @@ public class LauncherAppsService extends SystemService { } @Override public ActivityInfo resolveActivity(ComponentName component, UserHandle user) public ActivityInfo resolveActivity( String callingPackage, ComponentName component, UserHandle user) throws RemoteException { ensureInUserProfiles(user, "Cannot resolve activity"); ensureInUserProfiles(callingPackage, user, "Cannot resolve activity"); if (!isUserEnabled(user)) { return null; } Loading @@ -316,15 +319,16 @@ public class LauncherAppsService extends SystemService { } @Override public ParceledListSlice getShortcutConfigActivities(String packageName, UserHandle user) public ParceledListSlice getShortcutConfigActivities( String callingPackage, String packageName, UserHandle user) throws RemoteException { return queryActivitiesForUser( return queryActivitiesForUser(callingPackage, new Intent(Intent.ACTION_CREATE_SHORTCUT).setPackage(packageName), user); } private ParceledListSlice<ResolveInfo> queryActivitiesForUser(Intent intent, UserHandle user) { ensureInUserProfiles(user, "Cannot retrieve activities"); private ParceledListSlice<ResolveInfo> queryActivitiesForUser(String callingPackage, Intent intent, UserHandle user) { ensureInUserProfiles(callingPackage, user, "Cannot retrieve activities"); if (!isUserEnabled(user)) { return null; } Loading Loading @@ -363,9 +367,9 @@ public class LauncherAppsService extends SystemService { } @Override public boolean isPackageEnabled(String packageName, UserHandle user) public boolean isPackageEnabled(String callingPackage, String packageName, UserHandle user) throws RemoteException { ensureInUserProfiles(user, "Cannot check package"); ensureInUserProfiles(callingPackage, user, "Cannot check package"); if (!isUserEnabled(user)) { return false; } Loading @@ -384,9 +388,10 @@ public class LauncherAppsService extends SystemService { } @Override public ApplicationInfo getApplicationInfo(String packageName, int flags, UserHandle user) public ApplicationInfo getApplicationInfo( String callingPackage, String packageName, int flags, UserHandle user) throws RemoteException { ensureInUserProfiles(user, "Cannot check package"); ensureInUserProfiles(callingPackage, user, "Cannot check package"); if (!isUserEnabled(user)) { return null; } Loading @@ -408,7 +413,7 @@ public class LauncherAppsService extends SystemService { private void ensureShortcutPermission(@NonNull String callingPackage, int userId) { verifyCallingPackage(callingPackage); ensureInUserProfiles(userId, "Cannot access shortcuts"); ensureInUserProfiles(callingPackage, userId, "Cannot access shortcuts"); if (!mShortcutServiceInternal.hasShortcutHostPermission(getCallingUserId(), callingPackage)) { Loading Loading @@ -484,7 +489,7 @@ public class LauncherAppsService extends SystemService { public boolean startShortcut(String callingPackage, String packageName, String shortcutId, Rect sourceBounds, Bundle startActivityOptions, int userId) { verifyCallingPackage(callingPackage); ensureInUserProfiles(userId, "Cannot start activity"); ensureInUserProfiles(callingPackage, userId, "Cannot start activity"); if (!isUserEnabled(userId)) { throw new IllegalStateException("Cannot start a shortcut for disabled profile " Loading Loading @@ -535,9 +540,10 @@ public class LauncherAppsService extends SystemService { } @Override public boolean isActivityEnabled(ComponentName component, UserHandle user) public boolean isActivityEnabled( String callingPackage, ComponentName component, UserHandle user) throws RemoteException { ensureInUserProfiles(user, "Cannot check component"); ensureInUserProfiles(callingPackage , user, "Cannot check component"); if (!isUserEnabled(user)) { return false; } Loading @@ -556,9 +562,10 @@ public class LauncherAppsService extends SystemService { } @Override public void startActivityAsUser(ComponentName component, Rect sourceBounds, public void startActivityAsUser(String callingPackage, ComponentName component, Rect sourceBounds, Bundle opts, UserHandle user) throws RemoteException { ensureInUserProfiles(user, "Cannot start activity"); ensureInUserProfiles(callingPackage, user, "Cannot start activity"); if (!isUserEnabled(user)) { throw new IllegalStateException("Cannot start activity for disabled profile " + user); } Loading Loading @@ -609,9 +616,9 @@ public class LauncherAppsService extends SystemService { } @Override public void showAppDetailsAsUser(ComponentName component, Rect sourceBounds, Bundle opts, UserHandle user) throws RemoteException { ensureInUserProfiles(user, "Cannot show app details"); public void showAppDetailsAsUser(String callingPackage, ComponentName component, Rect sourceBounds, Bundle opts, UserHandle user) throws RemoteException { ensureInUserProfiles(callingPackage, user, "Cannot show app details"); if (!isUserEnabled(user)) { throw new IllegalStateException("Cannot show app details for disabled profile " + user); Loading