import android.os.PersistableBundle;
import android.os.Process;
import android.os.RemoteException;
+import android.os.StrictMode;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
@Override
public PackageInfo getPackageInfo(String packageName, int flags)
throws NameNotFoundException {
- return getPackageInfoAsUser(packageName, flags, mContext.getUserId());
+ return getPackageInfoAsUser(packageName, flags, getUserId());
}
@Override
public PackageInfo getPackageInfo(VersionedPackage versionedPackage, int flags)
throws NameNotFoundException {
+ final int userId = getUserId();
try {
- PackageInfo pi = mPM.getPackageInfoVersioned(versionedPackage, flags,
- mContext.getUserId());
+ PackageInfo pi = mPM.getPackageInfoVersioned(versionedPackage,
+ updateFlagsForPackage(flags, userId), userId);
if (pi != null) {
return pi;
}
public PackageInfo getPackageInfoAsUser(String packageName, int flags, int userId)
throws NameNotFoundException {
try {
- PackageInfo pi = mPM.getPackageInfo(packageName, flags, userId);
+ PackageInfo pi = mPM.getPackageInfo(packageName,
+ updateFlagsForPackage(flags, userId), userId);
if (pi != null) {
return pi;
}
@Override
public int[] getPackageGids(String packageName, int flags)
throws NameNotFoundException {
+ final int userId = getUserId();
try {
- int[] gids = mPM.getPackageGids(packageName, flags, mContext.getUserId());
+ int[] gids = mPM.getPackageGids(packageName,
+ updateFlagsForPackage(flags, userId), userId);
if (gids != null) {
return gids;
}
@Override
public int getPackageUid(String packageName, int flags) throws NameNotFoundException {
- return getPackageUidAsUser(packageName, flags, mContext.getUserId());
+ return getPackageUidAsUser(packageName, flags, getUserId());
}
@Override
public int getPackageUidAsUser(String packageName, int flags, int userId)
throws NameNotFoundException {
try {
- int uid = mPM.getPackageUid(packageName, flags, userId);
+ int uid = mPM.getPackageUid(packageName,
+ updateFlagsForPackage(flags, userId), userId);
if (uid >= 0) {
return uid;
}
@Override
public ApplicationInfo getApplicationInfo(String packageName, int flags)
throws NameNotFoundException {
- return getApplicationInfoAsUser(packageName, flags, mContext.getUserId());
+ return getApplicationInfoAsUser(packageName, flags, getUserId());
}
@Override
public ApplicationInfo getApplicationInfoAsUser(String packageName, int flags, int userId)
throws NameNotFoundException {
try {
- ApplicationInfo ai = mPM.getApplicationInfo(packageName, flags, userId);
+ ApplicationInfo ai = mPM.getApplicationInfo(packageName,
+ updateFlagsForApplication(flags, userId), userId);
if (ai != null) {
// This is a temporary hack. Callers must use
// createPackageContext(packageName).getApplicationInfo() to
@Override
public ActivityInfo getActivityInfo(ComponentName className, int flags)
throws NameNotFoundException {
+ final int userId = getUserId();
try {
- ActivityInfo ai = mPM.getActivityInfo(className, flags, mContext.getUserId());
+ ActivityInfo ai = mPM.getActivityInfo(className,
+ updateFlagsForComponent(flags, userId, null), userId);
if (ai != null) {
return ai;
}
@Override
public ActivityInfo getReceiverInfo(ComponentName className, int flags)
throws NameNotFoundException {
+ final int userId = getUserId();
try {
- ActivityInfo ai = mPM.getReceiverInfo(className, flags, mContext.getUserId());
+ ActivityInfo ai = mPM.getReceiverInfo(className,
+ updateFlagsForComponent(flags, userId, null), userId);
if (ai != null) {
return ai;
}
@Override
public ServiceInfo getServiceInfo(ComponentName className, int flags)
throws NameNotFoundException {
+ final int userId = getUserId();
try {
- ServiceInfo si = mPM.getServiceInfo(className, flags, mContext.getUserId());
+ ServiceInfo si = mPM.getServiceInfo(className,
+ updateFlagsForComponent(flags, userId, null), userId);
if (si != null) {
return si;
}
@Override
public ProviderInfo getProviderInfo(ComponentName className, int flags)
throws NameNotFoundException {
+ final int userId = getUserId();
try {
- ProviderInfo pi = mPM.getProviderInfo(className, flags, mContext.getUserId());
+ ProviderInfo pi = mPM.getProviderInfo(className,
+ updateFlagsForComponent(flags, userId, null), userId);
if (pi != null) {
return pi;
}
/** @hide */
@Override
public @NonNull List<SharedLibraryInfo> getSharedLibraries(int flags) {
- return getSharedLibrariesAsUser(flags, mContext.getUserId());
+ return getSharedLibrariesAsUser(flags, getUserId());
}
/** @hide */
@Override
public ChangedPackages getChangedPackages(int sequenceNumber) {
try {
- return mPM.getChangedPackages(sequenceNumber, mContext.getUserId());
+ return mPM.getChangedPackages(sequenceNumber, getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@Override
public int checkPermission(String permName, String pkgName) {
try {
- return mPM.checkPermission(permName, pkgName, mContext.getUserId());
+ return mPM.checkPermission(permName, pkgName, getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@Override
public boolean isPermissionRevokedByPolicy(String permName, String pkgName) {
try {
- return mPM.isPermissionRevokedByPolicy(permName, pkgName, mContext.getUserId());
+ return mPM.isPermissionRevokedByPolicy(permName, pkgName, getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
public boolean shouldShowRequestPermissionRationale(String permission) {
try {
return mPM.shouldShowRequestPermissionRationale(permission,
- mContext.getPackageName(), mContext.getUserId());
+ mContext.getPackageName(), getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@SuppressWarnings("unchecked")
@Override
public List<PackageInfo> getInstalledPackages(int flags) {
- return getInstalledPackagesAsUser(flags, mContext.getUserId());
+ return getInstalledPackagesAsUser(flags, getUserId());
}
/** @hide */
public List<PackageInfo> getInstalledPackagesAsUser(int flags, int userId) {
try {
ParceledListSlice<PackageInfo> parceledList =
- mPM.getInstalledPackages(flags, userId);
+ mPM.getInstalledPackages(updateFlagsForPackage(flags, userId), userId);
if (parceledList == null) {
return Collections.emptyList();
}
@Override
public List<PackageInfo> getPackagesHoldingPermissions(
String[] permissions, int flags) {
- final int userId = mContext.getUserId();
+ final int userId = getUserId();
try {
ParceledListSlice<PackageInfo> parceledList =
- mPM.getPackagesHoldingPermissions(permissions, flags, userId);
+ mPM.getPackagesHoldingPermissions(permissions,
+ updateFlagsForPackage(flags, userId), userId);
if (parceledList == null) {
return Collections.emptyList();
}
@SuppressWarnings("unchecked")
@Override
public List<ApplicationInfo> getInstalledApplications(int flags) {
- return getInstalledApplicationsAsUser(flags, mContext.getUserId());
+ return getInstalledApplicationsAsUser(flags, getUserId());
}
/** @hide */
public List<ApplicationInfo> getInstalledApplicationsAsUser(int flags, int userId) {
try {
ParceledListSlice<ApplicationInfo> parceledList =
- mPM.getInstalledApplications(flags, userId);
+ mPM.getInstalledApplications(updateFlagsForApplication(flags, userId), userId);
if (parceledList == null) {
return Collections.emptyList();
}
@Override
public List<InstantAppInfo> getInstantApps() {
try {
- ParceledListSlice<InstantAppInfo> slice =
- mPM.getInstantApps(mContext.getUserId());
+ ParceledListSlice<InstantAppInfo> slice = mPM.getInstantApps(getUserId());
if (slice != null) {
return slice.getList();
}
@Override
public Drawable getInstantAppIcon(String packageName) {
try {
- Bitmap bitmap = mPM.getInstantAppIcon(
- packageName, mContext.getUserId());
+ Bitmap bitmap = mPM.getInstantAppIcon(packageName, getUserId());
if (bitmap != null) {
return new BitmapDrawable(null, bitmap);
}
@Override
public boolean isInstantApp(String packageName) {
try {
- return mPM.isInstantApp(packageName, mContext.getUserId());
+ return mPM.isInstantApp(packageName, getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@Override
public @NonNull byte[] getInstantAppCookie() {
try {
- final byte[] cookie = mPM.getInstantAppCookie(
- mContext.getPackageName(), mContext.getUserId());
+ final byte[] cookie = mPM.getInstantAppCookie(mContext.getPackageName(), getUserId());
if (cookie != null) {
return cookie;
} else {
+ getInstantAppCookieMaxBytes());
}
try {
- mPM.setInstantAppCookie(mContext.getPackageName(),
- cookie, mContext.getUserId());
+ mPM.setInstantAppCookie(mContext.getPackageName(), cookie, getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@Override
public boolean setInstantAppCookie(@NonNull byte[] cookie) {
try {
- return mPM.setInstantAppCookie(mContext.getPackageName(),
- cookie, mContext.getUserId());
+ return mPM.setInstantAppCookie(mContext.getPackageName(), cookie, getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@Override
public ResolveInfo resolveActivity(Intent intent, int flags) {
- return resolveActivityAsUser(intent, flags, mContext.getUserId());
+ return resolveActivityAsUser(intent, flags, getUserId());
}
@Override
return mPM.resolveIntent(
intent,
intent.resolveTypeIfNeeded(mContext.getContentResolver()),
- flags,
+ updateFlagsForComponent(flags, userId, intent),
userId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@Override
public List<ResolveInfo> queryIntentActivities(Intent intent,
int flags) {
- return queryIntentActivitiesAsUser(intent, flags, mContext.getUserId());
+ return queryIntentActivitiesAsUser(intent, flags, getUserId());
}
/** @hide Same as above but for a specific user */
public List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent,
int flags, int userId) {
try {
- ParceledListSlice<ResolveInfo> parceledList =
- mPM.queryIntentActivities(intent,
- intent.resolveTypeIfNeeded(mContext.getContentResolver()),
- flags, userId);
+ ParceledListSlice<ResolveInfo> parceledList = mPM.queryIntentActivities(
+ intent,
+ intent.resolveTypeIfNeeded(mContext.getContentResolver()),
+ updateFlagsForComponent(flags, userId, intent),
+ userId);
if (parceledList == null) {
return Collections.emptyList();
}
@Override
@SuppressWarnings("unchecked")
- public List<ResolveInfo> queryIntentActivityOptions(
- ComponentName caller, Intent[] specifics, Intent intent,
- int flags) {
+ public List<ResolveInfo> queryIntentActivityOptions(ComponentName caller, Intent[] specifics,
+ Intent intent, int flags) {
+ final int userId = getUserId();
final ContentResolver resolver = mContext.getContentResolver();
String[] specificTypes = null;
}
try {
- ParceledListSlice<ResolveInfo> parceledList =
- mPM.queryIntentActivityOptions(caller, specifics, specificTypes, intent,
- intent.resolveTypeIfNeeded(resolver), flags, mContext.getUserId());
+ ParceledListSlice<ResolveInfo> parceledList = mPM.queryIntentActivityOptions(
+ caller,
+ specifics,
+ specificTypes,
+ intent,
+ intent.resolveTypeIfNeeded(resolver),
+ updateFlagsForComponent(flags, userId, intent),
+ userId);
if (parceledList == null) {
return Collections.emptyList();
}
@SuppressWarnings("unchecked")
public List<ResolveInfo> queryBroadcastReceiversAsUser(Intent intent, int flags, int userId) {
try {
- ParceledListSlice<ResolveInfo> parceledList =
- mPM.queryIntentReceivers(intent,
- intent.resolveTypeIfNeeded(mContext.getContentResolver()),
- flags, userId);
+ ParceledListSlice<ResolveInfo> parceledList = mPM.queryIntentReceivers(
+ intent,
+ intent.resolveTypeIfNeeded(mContext.getContentResolver()),
+ updateFlagsForComponent(flags, userId, intent),
+ userId);
if (parceledList == null) {
return Collections.emptyList();
}
@Override
public List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags) {
- return queryBroadcastReceiversAsUser(intent, flags, mContext.getUserId());
+ return queryBroadcastReceiversAsUser(intent, flags, getUserId());
}
@Override
return mPM.resolveService(
intent,
intent.resolveTypeIfNeeded(mContext.getContentResolver()),
- flags,
+ updateFlagsForComponent(flags, userId, intent),
userId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@Override
public ResolveInfo resolveService(Intent intent, int flags) {
- return resolveServiceAsUser(intent, flags, mContext.getUserId());
+ return resolveServiceAsUser(intent, flags, getUserId());
}
@Override
@SuppressWarnings("unchecked")
public List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int flags, int userId) {
try {
- ParceledListSlice<ResolveInfo> parceledList =
- mPM.queryIntentServices(intent,
+ ParceledListSlice<ResolveInfo> parceledList = mPM.queryIntentServices(
+ intent,
intent.resolveTypeIfNeeded(mContext.getContentResolver()),
- flags, userId);
+ updateFlagsForComponent(flags, userId, intent),
+ userId);
if (parceledList == null) {
return Collections.emptyList();
}
@Override
public List<ResolveInfo> queryIntentServices(Intent intent, int flags) {
- return queryIntentServicesAsUser(intent, flags, mContext.getUserId());
+ return queryIntentServicesAsUser(intent, flags, getUserId());
}
@Override
public List<ResolveInfo> queryIntentContentProvidersAsUser(
Intent intent, int flags, int userId) {
try {
- ParceledListSlice<ResolveInfo> parceledList =
- mPM.queryIntentContentProviders(intent,
- intent.resolveTypeIfNeeded(mContext.getContentResolver()),
- flags, userId);
+ ParceledListSlice<ResolveInfo> parceledList = mPM.queryIntentContentProviders(
+ intent,
+ intent.resolveTypeIfNeeded(mContext.getContentResolver()),
+ updateFlagsForComponent(flags, userId, intent),
+ userId);
if (parceledList == null) {
return Collections.emptyList();
}
@Override
public List<ResolveInfo> queryIntentContentProviders(Intent intent, int flags) {
- return queryIntentContentProvidersAsUser(intent, flags, mContext.getUserId());
+ return queryIntentContentProvidersAsUser(intent, flags, getUserId());
}
@Override
public ProviderInfo resolveContentProvider(String name, int flags) {
- return resolveContentProviderAsUser(name, flags, mContext.getUserId());
+ return resolveContentProviderAsUser(name, flags, getUserId());
}
/** @hide **/
@Override
public ProviderInfo resolveContentProviderAsUser(String name, int flags, int userId) {
try {
- return mPM.resolveContentProvider(name, flags, userId);
+ return mPM.resolveContentProvider(name,
+ updateFlagsForComponent(flags, userId, null), userId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
public List<ProviderInfo> queryContentProviders(String processName,
int uid, int flags, String metaDataKey) {
try {
- ParceledListSlice<ProviderInfo> slice =
- mPM.queryContentProviders(processName, uid, flags, metaDataKey);
+ ParceledListSlice<ProviderInfo> slice = mPM.queryContentProviders(processName, uid,
+ updateFlagsForComponent(flags, UserHandle.getUserId(uid), null), metaDataKey);
return slice != null ? slice.getList() : Collections.<ProviderInfo>emptyList();
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
mPM = pm;
}
+ /**
+ * Update given flags when being used to request {@link PackageInfo}.
+ */
+ private int updateFlagsForPackage(int flags, int userId) {
+ if ((flags & (GET_ACTIVITIES | GET_RECEIVERS | GET_SERVICES | GET_PROVIDERS)) != 0) {
+ // Caller is asking for component details, so they'd better be
+ // asking for specific Direct Boot matching behavior
+ if ((flags & (MATCH_DIRECT_BOOT_UNAWARE
+ | MATCH_DIRECT_BOOT_AWARE
+ | MATCH_DIRECT_BOOT_AUTO)) == 0) {
+ onImplicitDirectBoot(userId);
+ }
+ }
+ return flags;
+ }
+
+ /**
+ * Update given flags when being used to request {@link ApplicationInfo}.
+ */
+ private int updateFlagsForApplication(int flags, int userId) {
+ return updateFlagsForPackage(flags, userId);
+ }
+
+ /**
+ * Update given flags when being used to request {@link ComponentInfo}.
+ */
+ private int updateFlagsForComponent(int flags, int userId, Intent intent) {
+ if (intent != null) {
+ if ((intent.getFlags() & Intent.FLAG_DIRECT_BOOT_AUTO) != 0) {
+ flags |= MATCH_DIRECT_BOOT_AUTO;
+ }
+ }
+
+ // Caller is asking for component details, so they'd better be
+ // asking for specific Direct Boot matching behavior
+ if ((flags & (MATCH_DIRECT_BOOT_UNAWARE
+ | MATCH_DIRECT_BOOT_AWARE
+ | MATCH_DIRECT_BOOT_AUTO)) == 0) {
+ onImplicitDirectBoot(userId);
+ }
+ return flags;
+ }
+
+ private void onImplicitDirectBoot(int userId) {
+ // Only report if someone is relying on implicit behavior while the user
+ // is locked; code running when unlocked is going to see both aware and
+ // unaware components.
+ if (StrictMode.vmImplicitDirectBootEnabled()) {
+ // We can cache the unlocked state for the userId we're running as,
+ // since any relocking of that user will always result in our
+ // process being killed to release any CE FDs we're holding onto.
+ if (userId == UserHandle.myUserId()) {
+ if (mUserUnlocked) {
+ return;
+ } else if (mContext.getSystemService(UserManager.class)
+ .isUserUnlockingOrUnlocked(userId)) {
+ mUserUnlocked = true;
+ } else {
+ StrictMode.onImplicitDirectBoot();
+ }
+ } else if (!mContext.getSystemService(UserManager.class)
+ .isUserUnlockingOrUnlocked(userId)) {
+ StrictMode.onImplicitDirectBoot();
+ }
+ }
+ }
+
@Nullable
private Drawable getCachedIcon(@NonNull ResourceName name) {
synchronized (sSync) {
@Override
public int installExistingPackage(String packageName, int installReason)
throws NameNotFoundException {
- return installExistingPackageAsUser(packageName, installReason, mContext.getUserId());
+ return installExistingPackageAsUser(packageName, installReason, getUserId());
}
@Override
@Override
public void deletePackage(String packageName, IPackageDeleteObserver observer, int flags) {
- deletePackageAsUser(packageName, observer, flags, mContext.getUserId());
+ deletePackageAsUser(packageName, observer, flags, getUserId());
}
@Override
public void clearApplicationUserData(String packageName,
IPackageDataObserver observer) {
try {
- mPM.clearApplicationUserData(packageName, observer, mContext.getUserId());
+ mPM.clearApplicationUserData(packageName, observer, getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
try {
return mPM.setPackagesSuspendedAsUser(packageNames, suspended, appExtras,
launcherExtras, dialogMessage, mContext.getOpPackageName(),
- mContext.getUserId());
+ getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
final PersistableBundle extras;
try {
extras = mPM.getSuspendedPackageAppExtras(mContext.getOpPackageName(),
- mContext.getUserId());
+ getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@Override
public boolean isPackageSuspended(String packageName) throws NameNotFoundException {
try {
- return isPackageSuspendedForUser(packageName, mContext.getUserId());
+ return isPackageSuspendedForUser(packageName, getUserId());
} catch (IllegalArgumentException ie) {
throw new NameNotFoundException(packageName);
}
@Override
public boolean isPackageSuspended() {
- return isPackageSuspendedForUser(mContext.getOpPackageName(), mContext.getUserId());
+ return isPackageSuspendedForUser(mContext.getOpPackageName(), getUserId());
}
/** @hide */
public void addPreferredActivity(IntentFilter filter,
int match, ComponentName[] set, ComponentName activity) {
try {
- mPM.addPreferredActivity(filter, match, set, activity, mContext.getUserId());
+ mPM.addPreferredActivity(filter, match, set, activity, getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
public void replacePreferredActivity(IntentFilter filter,
int match, ComponentName[] set, ComponentName activity) {
try {
- mPM.replacePreferredActivity(filter, match, set, activity, mContext.getUserId());
+ mPM.replacePreferredActivity(filter, match, set, activity, getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
public void setComponentEnabledSetting(ComponentName componentName,
int newState, int flags) {
try {
- mPM.setComponentEnabledSetting(componentName, newState, flags, mContext.getUserId());
+ mPM.setComponentEnabledSetting(componentName, newState, flags, getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@Override
public int getComponentEnabledSetting(ComponentName componentName) {
try {
- return mPM.getComponentEnabledSetting(componentName, mContext.getUserId());
+ return mPM.getComponentEnabledSetting(componentName, getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
int newState, int flags) {
try {
mPM.setApplicationEnabledSetting(packageName, newState, flags,
- mContext.getUserId(), mContext.getOpPackageName());
+ getUserId(), mContext.getOpPackageName());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@Override
public int getApplicationEnabledSetting(String packageName) {
try {
- return mPM.getApplicationEnabledSetting(packageName, mContext.getUserId());
+ return mPM.getApplicationEnabledSetting(packageName, getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
if (mInstaller == null) {
try {
mInstaller = new PackageInstaller(mPM.getPackageInstaller(),
- mContext.getPackageName(), mContext.getUserId());
+ mContext.getPackageName(), getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@Override
public boolean isPackageAvailable(String packageName) {
try {
- return mPM.isPackageAvailable(packageName, mContext.getUserId());
+ return mPM.isPackageAvailable(packageName, getUserId());
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
if (itemInfo.showUserIcon != UserHandle.USER_NULL) {
return dr;
}
- return getUserBadgedIcon(dr, new UserHandle(mContext.getUserId()));
+ return getUserBadgedIcon(dr, new UserHandle(getUserId()));
}
/**
private final ContextImpl mContext;
private final IPackageManager mPM;
+ /** Assume locked until we hear otherwise */
+ private volatile boolean mUserUnlocked = false;
+
private static final Object sSync = new Object();
private static ArrayMap<ResourceName, WeakReference<Drawable.ConstantState>> sIconCache
= new ArrayMap<ResourceName, WeakReference<Drawable.ConstantState>>();
@Override
public boolean canRequestPackageInstalls() {
try {
- return mPM.canRequestPackageInstalls(mContext.getPackageName(), mContext.getUserId());
+ return mPM.canRequestPackageInstalls(mContext.getPackageName(), getUserId());
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
}
@Override
public CharSequence getHarmfulAppWarning(String packageName) {
try {
- return mPM.getHarmfulAppWarning(packageName, mContext.getUserId());
+ return mPM.getHarmfulAppWarning(packageName, getUserId());
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
}
@Override
public void setHarmfulAppWarning(String packageName, CharSequence warning) {
try {
- mPM.setHarmfulAppWarning(packageName, warning, mContext.getUserId());
+ mPM.setHarmfulAppWarning(packageName, warning, getUserId());
} catch (RemoteException e) {
throw e.rethrowAsRuntimeException();
}