From 45ecf29484b7919886eaf62e39622cf557cc915b Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Mon, 22 Feb 2016 13:55:34 -0800 Subject: [PATCH] Fix issue #26695393: Remove NEW_PICTURE and NEW_VIDEO broadcast Ignored! Removed! A non-broadcast! Any attempt to send these will be silently (except a log) ignored. Change-Id: Ia19357d4c90fdcd18e45f2b41c57e654ef94edb1 --- api/current.txt | 4 ++-- api/system-current.txt | 4 ++-- api/test-current.txt | 4 ++-- core/java/android/hardware/Camera.java | 9 +++++++++ .../com/android/server/am/ActivityManagerService.java | 9 +++++++++ 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/api/current.txt b/api/current.txt index adad61aa89a3a..c6e5c1818063e 100644 --- a/api/current.txt +++ b/api/current.txt @@ -13201,8 +13201,8 @@ package android.hardware { method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); method public final void unlock(); - field public static final java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; - field public static final java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; + field public static final deprecated java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; + field public static final deprecated java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; field public static final int CAMERA_ERROR_EVICTED = 2; // 0x2 field public static final int CAMERA_ERROR_SERVER_DIED = 100; // 0x64 field public static final int CAMERA_ERROR_UNKNOWN = 1; // 0x1 diff --git a/api/system-current.txt b/api/system-current.txt index 024398a8ec391..ea5184e252069 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -13603,8 +13603,8 @@ package android.hardware { method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); method public final void unlock(); - field public static final java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; - field public static final java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; + field public static final deprecated java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; + field public static final deprecated java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; field public static final int CAMERA_ERROR_EVICTED = 2; // 0x2 field public static final int CAMERA_ERROR_SERVER_DIED = 100; // 0x64 field public static final int CAMERA_ERROR_UNKNOWN = 1; // 0x1 diff --git a/api/test-current.txt b/api/test-current.txt index 8444e3217592f..f6ad42cceda60 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -13209,8 +13209,8 @@ package android.hardware { method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); method public final void unlock(); - field public static final java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; - field public static final java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; + field public static final deprecated java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; + field public static final deprecated java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; field public static final int CAMERA_ERROR_EVICTED = 2; // 0x2 field public static final int CAMERA_ERROR_SERVER_DIED = 100; // 0x64 field public static final int CAMERA_ERROR_UNKNOWN = 1; // 0x1 diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index 02d4e59af6e40..3dbe437a6c434 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -19,6 +19,7 @@ package android.hardware; import android.app.ActivityThread; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.app.job.JobInfo; import android.content.Context; import android.graphics.ImageFormat; import android.graphics.Point; @@ -177,19 +178,27 @@ public class Camera { private static final int NO_ERROR = 0; /** + * @deprecated This broadcast is no longer delivered by the system; use + * {@link android.app.job.JobInfo.Builder JobInfo.Builder}.{@link android.app.job.JobInfo.Builder#addTriggerContentUri} + * instead. * Broadcast Action: A new picture is taken by the camera, and the entry of * the picture has been added to the media store. * {@link android.content.Intent#getData} is URI of the picture. */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + @Deprecated public static final String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; /** + * @deprecated This broadcast is no longer delivered by the system; use + * {@link android.app.job.JobInfo.Builder JobInfo.Builder}.{@link android.app.job.JobInfo.Builder#addTriggerContentUri} + * instead. * Broadcast Action: A new video is recorded by the camera, and the entry * of the video has been added to the media store. * {@link android.content.Intent#getData} is URI of the video. */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + @Deprecated public static final String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; /** diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 8c04fbc17e052..db0e4dbe9cec2 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -17212,6 +17212,15 @@ public final class ActivityManagerService extends ActivityManagerNative ProxyInfo proxy = intent.getParcelableExtra(Proxy.EXTRA_PROXY_INFO); mHandler.sendMessage(mHandler.obtainMessage(UPDATE_HTTP_PROXY_MSG, proxy)); break; + case android.hardware.Camera.ACTION_NEW_PICTURE: + case android.hardware.Camera.ACTION_NEW_VIDEO: + // These broadcasts are no longer allowed by the system, since they can + // cause significant thrashing at a crictical point (using the camera). + // Apps should use JobScehduler to monitor for media provider changes. + Slog.w(TAG, action + " no longer allowed; dropping from " + + UserHandle.formatUid(callingUid)); + // Lie; we don't want to crash the app. + return ActivityManager.BROADCAST_SUCCESS; } }