Loading core/java/android/appwidget/AppWidgetManager.java +16 −4 Original line number Diff line number Diff line Loading @@ -49,8 +49,8 @@ public class AppWidgetManager { static final String TAG = "AppWidgetManager"; /** * Send this from your {@link AppWidgetHost} activity when you want to pick an AppWidget to display. * The AppWidget picker activity will be launched. * Activity action to launch from your {@link AppWidgetHost} activity when you want to * pick an AppWidget to display. The AppWidget picker activity will be launched. * <p> * You must supply the following extras: * <table> Loading Loading @@ -89,8 +89,8 @@ public class AppWidgetManager { ACTION_KEYGUARD_APPWIDGET_PICK = "android.appwidget.action.KEYGUARD_APPWIDGET_PICK"; /** * Send this from your {@link AppWidgetHost} activity when you want to bind an AppWidget to * display and bindAppWidgetIdIfAllowed returns false. * Activity action to launch from your {@link AppWidgetHost} activity when you want to bind * an AppWidget to display and bindAppWidgetIdIfAllowed returns false. * <p> * You must supply the following extras: * <table> Loading Loading @@ -269,6 +269,9 @@ public class AppWidgetManager { /** * Sent when the custom extras for an AppWidget change. * * <p class="note">This is a protected intent that can only be sent * by the system. * * @see AppWidgetProvider#onAppWidgetOptionsChanged * AppWidgetProvider.onAppWidgetOptionsChanged(Context context, * AppWidgetManager appWidgetManager, int appWidgetId, Bundle newExtras) Loading @@ -278,6 +281,9 @@ public class AppWidgetManager { /** * Sent when an instance of an AppWidget is deleted from its host. * * <p class="note">This is a protected intent that can only be sent * by the system. * * @see AppWidgetProvider#onDeleted AppWidgetProvider.onDeleted(Context context, int[] appWidgetIds) */ public static final String ACTION_APPWIDGET_DELETED = "android.appwidget.action.APPWIDGET_DELETED"; Loading @@ -285,6 +291,9 @@ public class AppWidgetManager { /** * Sent when an instance of an AppWidget is removed from the last host. * * <p class="note">This is a protected intent that can only be sent * by the system. * * @see AppWidgetProvider#onEnabled AppWidgetProvider.onEnabled(Context context) */ public static final String ACTION_APPWIDGET_DISABLED = "android.appwidget.action.APPWIDGET_DISABLED"; Loading @@ -294,6 +303,9 @@ public class AppWidgetManager { * This broadcast is sent at boot time if there is a AppWidgetHost installed with * an instance for this provider. * * <p class="note">This is a protected intent that can only be sent * by the system. * * @see AppWidgetProvider#onEnabled AppWidgetProvider.onEnabled(Context context) */ public static final String ACTION_APPWIDGET_ENABLED = "android.appwidget.action.APPWIDGET_ENABLED"; Loading core/res/AndroidManifest.xml +5 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,11 @@ <protected-broadcast android:name="android.app.action.ENTER_DESK_MODE" /> <protected-broadcast android:name="android.app.action.EXIT_DESK_MODE" /> <protected-broadcast android:name="android.appwidget.action.APPWIDGET_UPDATE_OPTIONS" /> <protected-broadcast android:name="android.appwidget.action.APPWIDGET_DELETED" /> <protected-broadcast android:name="android.appwidget.action.APPWIDGET_DISABLED" /> <protected-broadcast android:name="android.appwidget.action.APPWIDGET_ENABLED" /> <protected-broadcast android:name="android.backup.intent.RUN" /> <protected-broadcast android:name="android.backup.intent.CLEAR" /> <protected-broadcast android:name="android.backup.intent.INIT" /> Loading services/java/com/android/server/am/ActivityManagerService.java +27 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.am; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import android.app.AppOpsManager; import android.appwidget.AppWidgetManager; import com.android.internal.R; import com.android.internal.os.BatteryStatsImpl; import com.android.internal.os.ProcessStats; Loading Loading @@ -11791,6 +11792,32 @@ public final class ActivityManagerService extends ActivityManagerNative + callingPid + ", uid=" + callingUid; Slog.w(TAG, msg); throw new SecurityException(msg); } else if (AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(intent.getAction())) { // Special case for compatibility: we don't want apps to send this, // but historically it has not been protected and apps may be using it // to poke their own app widget. So, instead of making it protected, // just limit it to the caller. if (callerApp == null) { String msg = "Permission Denial: not allowed to send broadcast " + intent.getAction() + " from unknown caller."; Slog.w(TAG, msg); throw new SecurityException(msg); } else if (intent.getComponent() != null) { // They are good enough to send to an explicit component... verify // it is being sent to the calling app. if (!intent.getComponent().getPackageName().equals( callerApp.info.packageName)) { String msg = "Permission Denial: not allowed to send broadcast " + intent.getAction() + " to " + intent.getComponent().getPackageName() + " from " + callerApp.info.packageName; Slog.w(TAG, msg); throw new SecurityException(msg); } } else { // Limit broadcast to their own package. intent.setPackage(callerApp.info.packageName); } } } catch (RemoteException e) { Slog.w(TAG, "Remote exception", e); Loading services/java/com/android/server/am/BroadcastQueue.java +3 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; Loading Loading @@ -1080,6 +1079,9 @@ public class BroadcastQueue { pw.print(" #"); pw.print(i); pw.print(": "); pw.println(r); pw.print(" "); pw.println(r.intent.toShortString(false, true, true, false)); if (r.targetComp != null && r.targetComp != r.intent.getComponent()) { pw.print(" targetComp: "); pw.println(r.targetComp.toShortString()); } Bundle bundle = r.intent.getExtras(); if (bundle != null) { pw.print(" extras: "); pw.println(bundle.toString()); Loading services/java/com/android/server/am/BroadcastRecord.java +6 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import java.util.List; */ class BroadcastRecord extends Binder { final Intent intent; // the original intent that generated us final ComponentName targetComp; // original component name set on the intent final ProcessRecord callerApp; // process that sent this final String callerPackage; // who sent this final int callingPid; // the pid of who sent this Loading Loading @@ -84,6 +85,9 @@ class BroadcastRecord extends Binder { pw.print(prefix); pw.print(this); pw.print(" to user "); pw.println(userId); pw.print(prefix); pw.println(intent.toInsecureString()); if (targetComp != null && targetComp != intent.getComponent()) { pw.print(prefix); pw.print(" targetComp: "); pw.println(targetComp.toShortString()); } Bundle bundle = intent.getExtras(); if (bundle != null) { pw.print(prefix); pw.print(" extras: "); pw.println(bundle.toString()); Loading Loading @@ -174,6 +178,7 @@ class BroadcastRecord extends Binder { int _userId) { queue = _queue; intent = _intent; targetComp = _intent.getComponent(); callerApp = _callerApp; callerPackage = _callerPackage; callingPid = _callingPid; Loading Loading
core/java/android/appwidget/AppWidgetManager.java +16 −4 Original line number Diff line number Diff line Loading @@ -49,8 +49,8 @@ public class AppWidgetManager { static final String TAG = "AppWidgetManager"; /** * Send this from your {@link AppWidgetHost} activity when you want to pick an AppWidget to display. * The AppWidget picker activity will be launched. * Activity action to launch from your {@link AppWidgetHost} activity when you want to * pick an AppWidget to display. The AppWidget picker activity will be launched. * <p> * You must supply the following extras: * <table> Loading Loading @@ -89,8 +89,8 @@ public class AppWidgetManager { ACTION_KEYGUARD_APPWIDGET_PICK = "android.appwidget.action.KEYGUARD_APPWIDGET_PICK"; /** * Send this from your {@link AppWidgetHost} activity when you want to bind an AppWidget to * display and bindAppWidgetIdIfAllowed returns false. * Activity action to launch from your {@link AppWidgetHost} activity when you want to bind * an AppWidget to display and bindAppWidgetIdIfAllowed returns false. * <p> * You must supply the following extras: * <table> Loading Loading @@ -269,6 +269,9 @@ public class AppWidgetManager { /** * Sent when the custom extras for an AppWidget change. * * <p class="note">This is a protected intent that can only be sent * by the system. * * @see AppWidgetProvider#onAppWidgetOptionsChanged * AppWidgetProvider.onAppWidgetOptionsChanged(Context context, * AppWidgetManager appWidgetManager, int appWidgetId, Bundle newExtras) Loading @@ -278,6 +281,9 @@ public class AppWidgetManager { /** * Sent when an instance of an AppWidget is deleted from its host. * * <p class="note">This is a protected intent that can only be sent * by the system. * * @see AppWidgetProvider#onDeleted AppWidgetProvider.onDeleted(Context context, int[] appWidgetIds) */ public static final String ACTION_APPWIDGET_DELETED = "android.appwidget.action.APPWIDGET_DELETED"; Loading @@ -285,6 +291,9 @@ public class AppWidgetManager { /** * Sent when an instance of an AppWidget is removed from the last host. * * <p class="note">This is a protected intent that can only be sent * by the system. * * @see AppWidgetProvider#onEnabled AppWidgetProvider.onEnabled(Context context) */ public static final String ACTION_APPWIDGET_DISABLED = "android.appwidget.action.APPWIDGET_DISABLED"; Loading @@ -294,6 +303,9 @@ public class AppWidgetManager { * This broadcast is sent at boot time if there is a AppWidgetHost installed with * an instance for this provider. * * <p class="note">This is a protected intent that can only be sent * by the system. * * @see AppWidgetProvider#onEnabled AppWidgetProvider.onEnabled(Context context) */ public static final String ACTION_APPWIDGET_ENABLED = "android.appwidget.action.APPWIDGET_ENABLED"; Loading
core/res/AndroidManifest.xml +5 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,11 @@ <protected-broadcast android:name="android.app.action.ENTER_DESK_MODE" /> <protected-broadcast android:name="android.app.action.EXIT_DESK_MODE" /> <protected-broadcast android:name="android.appwidget.action.APPWIDGET_UPDATE_OPTIONS" /> <protected-broadcast android:name="android.appwidget.action.APPWIDGET_DELETED" /> <protected-broadcast android:name="android.appwidget.action.APPWIDGET_DISABLED" /> <protected-broadcast android:name="android.appwidget.action.APPWIDGET_ENABLED" /> <protected-broadcast android:name="android.backup.intent.RUN" /> <protected-broadcast android:name="android.backup.intent.CLEAR" /> <protected-broadcast android:name="android.backup.intent.INIT" /> Loading
services/java/com/android/server/am/ActivityManagerService.java +27 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ package com.android.server.am; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import android.app.AppOpsManager; import android.appwidget.AppWidgetManager; import com.android.internal.R; import com.android.internal.os.BatteryStatsImpl; import com.android.internal.os.ProcessStats; Loading Loading @@ -11791,6 +11792,32 @@ public final class ActivityManagerService extends ActivityManagerNative + callingPid + ", uid=" + callingUid; Slog.w(TAG, msg); throw new SecurityException(msg); } else if (AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(intent.getAction())) { // Special case for compatibility: we don't want apps to send this, // but historically it has not been protected and apps may be using it // to poke their own app widget. So, instead of making it protected, // just limit it to the caller. if (callerApp == null) { String msg = "Permission Denial: not allowed to send broadcast " + intent.getAction() + " from unknown caller."; Slog.w(TAG, msg); throw new SecurityException(msg); } else if (intent.getComponent() != null) { // They are good enough to send to an explicit component... verify // it is being sent to the calling app. if (!intent.getComponent().getPackageName().equals( callerApp.info.packageName)) { String msg = "Permission Denial: not allowed to send broadcast " + intent.getAction() + " to " + intent.getComponent().getPackageName() + " from " + callerApp.info.packageName; Slog.w(TAG, msg); throw new SecurityException(msg); } } else { // Limit broadcast to their own package. intent.setPackage(callerApp.info.packageName); } } } catch (RemoteException e) { Slog.w(TAG, "Remote exception", e); Loading
services/java/com/android/server/am/BroadcastQueue.java +3 −1 Original line number Diff line number Diff line Loading @@ -29,7 +29,6 @@ import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.os.Bundle; import android.os.Handler; import android.os.IBinder; Loading Loading @@ -1080,6 +1079,9 @@ public class BroadcastQueue { pw.print(" #"); pw.print(i); pw.print(": "); pw.println(r); pw.print(" "); pw.println(r.intent.toShortString(false, true, true, false)); if (r.targetComp != null && r.targetComp != r.intent.getComponent()) { pw.print(" targetComp: "); pw.println(r.targetComp.toShortString()); } Bundle bundle = r.intent.getExtras(); if (bundle != null) { pw.print(" extras: "); pw.println(bundle.toString()); Loading
services/java/com/android/server/am/BroadcastRecord.java +6 −1 Original line number Diff line number Diff line Loading @@ -38,6 +38,7 @@ import java.util.List; */ class BroadcastRecord extends Binder { final Intent intent; // the original intent that generated us final ComponentName targetComp; // original component name set on the intent final ProcessRecord callerApp; // process that sent this final String callerPackage; // who sent this final int callingPid; // the pid of who sent this Loading Loading @@ -84,6 +85,9 @@ class BroadcastRecord extends Binder { pw.print(prefix); pw.print(this); pw.print(" to user "); pw.println(userId); pw.print(prefix); pw.println(intent.toInsecureString()); if (targetComp != null && targetComp != intent.getComponent()) { pw.print(prefix); pw.print(" targetComp: "); pw.println(targetComp.toShortString()); } Bundle bundle = intent.getExtras(); if (bundle != null) { pw.print(prefix); pw.print(" extras: "); pw.println(bundle.toString()); Loading Loading @@ -174,6 +178,7 @@ class BroadcastRecord extends Binder { int _userId) { queue = _queue; intent = _intent; targetComp = _intent.getComponent(); callerApp = _callerApp; callerPackage = _callerPackage; callingPid = _callingPid; Loading