am 67ed0367: am 2b2e19fd: am 903f1840: Fix cross-user talk.

* commit '67ed03675961971052c93a2918adaf88e2a70203':
  Fix cross-user talk.
This commit is contained in:
Svetoslav
2014-08-07 05:28:19 +00:00
committed by Android Git Automerger
2 changed files with 18 additions and 11 deletions

View File

@@ -105,7 +105,17 @@ public class AdapterViewFlipper extends AdapterViewAnimator {
final IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_USER_PRESENT);
getContext().registerReceiver(mReceiver, filter);
// OK, this is gross but needed. This class is supported by the
// remote views machanism and as a part of that the remote views
// can be inflated by a context for another user without the app
// having interact users permission - just for loading resources.
// For exmaple, when adding widgets from a user profile to the
// home screen. Therefore, we register the receiver as the current
// user not the one the context is for.
getContext().registerReceiverAsUser(mReceiver, android.os.Process.myUserHandle(),
filter, null, mHandler);
if (mAutoStart) {
// Automatically start when requested

View File

@@ -3125,9 +3125,13 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
// Apps hosting the AppWidget get to bind to a remote view service in the provider.
return true;
}
if (mContext.checkCallingPermission(android.Manifest.permission.BIND_APPWIDGET)
final int userId = UserHandle.getUserId(uid);
if ((widget.host.getUserId() == userId || (widget.provider != null
&& widget.provider.getUserId() == userId))
&& mContext.checkCallingPermission(android.Manifest.permission.BIND_APPWIDGET)
== PackageManager.PERMISSION_GRANTED) {
// Apps that can bind have access to all appWidgetIds.
// Apps that run in the same user as either the host or the provider and
// have the bind widget permission have access to the widget.
return true;
}
return false;
@@ -3187,14 +3191,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku
}
public boolean isHostInPackageForUid(Host host, int uid, String packageName) {
if (UserHandle.getAppId(uid) == Process.myUid()) {
// For a host that's in the system process, ignore the user id.
return UserHandle.isSameApp(host.id.uid, uid)
&& host.id.packageName.equals(packageName);
} else {
return host.id.uid == uid
&& host.id.packageName.equals(packageName);
}
return host.id.uid == uid && host.id.packageName.equals(packageName);
}
public boolean isProviderInPackageForUid(Provider provider, int uid,