Merge "Apply package visibility to AppWidgetManager#getInstalledProviders" into sc-dev
This commit is contained in:
@@ -1589,6 +1589,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
|
|||||||
public ParceledListSlice<AppWidgetProviderInfo> getInstalledProvidersForProfile(int categoryFilter,
|
public ParceledListSlice<AppWidgetProviderInfo> getInstalledProvidersForProfile(int categoryFilter,
|
||||||
int profileId, String packageName) {
|
int profileId, String packageName) {
|
||||||
final int userId = UserHandle.getCallingUserId();
|
final int userId = UserHandle.getCallingUserId();
|
||||||
|
final int callingUid = Binder.getCallingUid();
|
||||||
|
|
||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Slog.i(TAG, "getInstalledProvidersForProfiles() " + userId);
|
Slog.i(TAG, "getInstalledProvidersForProfiles() " + userId);
|
||||||
@@ -1601,7 +1602,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
|
|||||||
|
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
if (mSecurityPolicy.isCallerInstantAppLocked()) {
|
if (mSecurityPolicy.isCallerInstantAppLocked()) {
|
||||||
Slog.w(TAG, "Instant uid " + Binder.getCallingUid()
|
Slog.w(TAG, "Instant uid " + callingUid
|
||||||
+ " cannot access widget providers");
|
+ " cannot access widget providers");
|
||||||
return ParceledListSlice.emptyList();
|
return ParceledListSlice.emptyList();
|
||||||
}
|
}
|
||||||
@@ -1614,11 +1615,12 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
|
|||||||
for (int i = 0; i < providerCount; i++) {
|
for (int i = 0; i < providerCount; i++) {
|
||||||
Provider provider = mProviders.get(i);
|
Provider provider = mProviders.get(i);
|
||||||
AppWidgetProviderInfo info = provider.getInfoLocked(mContext);
|
AppWidgetProviderInfo info = provider.getInfoLocked(mContext);
|
||||||
|
final String providerPackageName = provider.id.componentName.getPackageName();
|
||||||
|
|
||||||
// Ignore an invalid provider, one not matching the filter,
|
// Ignore an invalid provider, one not matching the filter,
|
||||||
// or one that isn't in the given package, if any.
|
// or one that isn't in the given package, if any.
|
||||||
boolean inPackage = packageName == null
|
boolean inPackage = packageName == null
|
||||||
|| provider.id.componentName.getPackageName().equals(packageName);
|
|| providerPackageName.equals(packageName);
|
||||||
if (provider.zombie || (info.widgetCategory & categoryFilter) == 0 || !inPackage) {
|
if (provider.zombie || (info.widgetCategory & categoryFilter) == 0 || !inPackage) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -1627,7 +1629,9 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
|
|||||||
final int providerProfileId = info.getProfile().getIdentifier();
|
final int providerProfileId = info.getProfile().getIdentifier();
|
||||||
if (providerProfileId == profileId
|
if (providerProfileId == profileId
|
||||||
&& mSecurityPolicy.isProviderInCallerOrInProfileAndWhitelListed(
|
&& mSecurityPolicy.isProviderInCallerOrInProfileAndWhitelListed(
|
||||||
provider.id.componentName.getPackageName(), providerProfileId)) {
|
providerPackageName, providerProfileId)
|
||||||
|
&& !mPackageManagerInternal.filterAppAccess(providerPackageName, callingUid,
|
||||||
|
userId)) {
|
||||||
result.add(cloneIfLocalBinder(info));
|
result.add(cloneIfLocalBinder(info));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user