Loading core/java/android/hardware/Camera.java +17 −7 Original line number Diff line number Diff line Loading @@ -17,12 +17,7 @@ package android.hardware; import static android.system.OsConstants.EACCES; import static android.system.OsConstants.EBUSY; import static android.system.OsConstants.EINVAL; import static android.system.OsConstants.ENODEV; import static android.system.OsConstants.ENOSYS; import static android.system.OsConstants.EOPNOTSUPP; import static android.system.OsConstants.EUSERS; import android.annotation.Nullable; import android.annotation.SdkConstant; Loading Loading @@ -56,6 +51,7 @@ import android.util.Log; import android.view.Surface; import android.view.SurfaceHolder; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IAppOpsCallback; import com.android.internal.app.IAppOpsService; Loading Loading @@ -491,8 +487,22 @@ public class Camera { boolean overrideToPortrait = CameraManager.shouldOverrideToPortrait( ActivityThread.currentApplication().getApplicationContext()); boolean forceSlowJpegMode = shouldForceSlowJpegMode(); return native_setup(new WeakReference<Camera>(this), cameraId, ActivityThread.currentOpPackageName(), overrideToPortrait); ActivityThread.currentOpPackageName(), overrideToPortrait, forceSlowJpegMode); } private boolean shouldForceSlowJpegMode() { Context applicationContext = ActivityThread.currentApplication().getApplicationContext(); String[] slowJpegPackageNames = applicationContext.getResources().getStringArray( R.array.config_forceSlowJpegModeList); String callingPackageName = applicationContext.getPackageName(); for (String packageName : slowJpegPackageNames) { if (TextUtils.equals(packageName, callingPackageName)) { return true; } } return false; } /** used by Camera#open, Camera#open(int) */ Loading Loading @@ -563,7 +573,7 @@ public class Camera { @UnsupportedAppUsage private native int native_setup(Object cameraThis, int cameraId, String packageName, boolean overrideToPortrait); boolean overrideToPortrait, boolean forceSlowJpegMode); private native final void native_release(); Loading core/jni/android_hardware_Camera.cpp +4 −3 Original line number Diff line number Diff line Loading @@ -556,7 +556,8 @@ static void android_hardware_Camera_getCameraInfo(JNIEnv *env, jobject thiz, jin // connect to camera service static jint android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, jobject weak_this, jint cameraId, jstring clientPackageName, jboolean overrideToPortrait) { jboolean overrideToPortrait, jboolean forceSlowJpegMode) { // Convert jstring to String16 const char16_t *rawClientName = reinterpret_cast<const char16_t*>( env->GetStringChars(clientPackageName, NULL)); Loading @@ -568,7 +569,7 @@ static jint android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, jobj int targetSdkVersion = android_get_application_target_sdk_version(); sp<Camera> camera = Camera::connect(cameraId, clientName, Camera::USE_CALLING_UID, Camera::USE_CALLING_PID, targetSdkVersion, overrideToPortrait); targetSdkVersion, overrideToPortrait, forceSlowJpegMode); if (camera == NULL) { return -EACCES; } Loading Loading @@ -1054,7 +1055,7 @@ static const JNINativeMethod camMethods[] = { {"getNumberOfCameras", "()I", (void *)android_hardware_Camera_getNumberOfCameras}, {"_getCameraInfo", "(IZLandroid/hardware/Camera$CameraInfo;)V", (void *)android_hardware_Camera_getCameraInfo}, {"native_setup", "(Ljava/lang/Object;ILjava/lang/String;Z)I", {"native_setup", "(Ljava/lang/Object;ILjava/lang/String;ZZ)I", (void *)android_hardware_Camera_native_setup}, {"native_release", "()V", (void *)android_hardware_Camera_release}, {"setPreviewSurface", "(Landroid/view/Surface;)V", Loading core/res/res/values/config.xml +5 −0 Original line number Diff line number Diff line Loading @@ -5050,6 +5050,11 @@ of known compatibility issues. --> <string-array name="config_highRefreshRateBlacklist"></string-array> <!-- The list of packages to force slowJpegMode for Apps using Camera API1 --> <string-array name="config_forceSlowJpegModeList" translatable="false"> <!-- Add packages here --> </string-array> <!-- Whether or not to hide the navigation bar when the soft keyboard is visible in order to create additional screen real estate outside beyond the keyboard. Note that the user needs to have a confirmed way to dismiss the keyboard when desired. --> Loading core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -4216,6 +4216,7 @@ <java-symbol type="string" name="config_factoryResetPackage" /> <java-symbol type="array" name="config_highRefreshRateBlacklist" /> <java-symbol type="array" name="config_forceSlowJpegModeList" /> <java-symbol type="layout" name="chooser_dialog" /> <java-symbol type="layout" name="chooser_dialog_item" /> Loading media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -161,7 +161,8 @@ public class CameraBinderTest extends AndroidTestCase { ICameraService.USE_CALLING_UID, ICameraService.USE_CALLING_PID, getContext().getApplicationInfo().targetSdkVersion, /*overrideToPortrait*/false); /*overrideToPortrait*/false, /*forceSlowJpegMode*/false); assertNotNull(String.format("Camera %s was null", cameraId), cameraUser); Log.v(TAG, String.format("Camera %s connected", cameraId)); Loading Loading
core/java/android/hardware/Camera.java +17 −7 Original line number Diff line number Diff line Loading @@ -17,12 +17,7 @@ package android.hardware; import static android.system.OsConstants.EACCES; import static android.system.OsConstants.EBUSY; import static android.system.OsConstants.EINVAL; import static android.system.OsConstants.ENODEV; import static android.system.OsConstants.ENOSYS; import static android.system.OsConstants.EOPNOTSUPP; import static android.system.OsConstants.EUSERS; import android.annotation.Nullable; import android.annotation.SdkConstant; Loading Loading @@ -56,6 +51,7 @@ import android.util.Log; import android.view.Surface; import android.view.SurfaceHolder; import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.app.IAppOpsCallback; import com.android.internal.app.IAppOpsService; Loading Loading @@ -491,8 +487,22 @@ public class Camera { boolean overrideToPortrait = CameraManager.shouldOverrideToPortrait( ActivityThread.currentApplication().getApplicationContext()); boolean forceSlowJpegMode = shouldForceSlowJpegMode(); return native_setup(new WeakReference<Camera>(this), cameraId, ActivityThread.currentOpPackageName(), overrideToPortrait); ActivityThread.currentOpPackageName(), overrideToPortrait, forceSlowJpegMode); } private boolean shouldForceSlowJpegMode() { Context applicationContext = ActivityThread.currentApplication().getApplicationContext(); String[] slowJpegPackageNames = applicationContext.getResources().getStringArray( R.array.config_forceSlowJpegModeList); String callingPackageName = applicationContext.getPackageName(); for (String packageName : slowJpegPackageNames) { if (TextUtils.equals(packageName, callingPackageName)) { return true; } } return false; } /** used by Camera#open, Camera#open(int) */ Loading Loading @@ -563,7 +573,7 @@ public class Camera { @UnsupportedAppUsage private native int native_setup(Object cameraThis, int cameraId, String packageName, boolean overrideToPortrait); boolean overrideToPortrait, boolean forceSlowJpegMode); private native final void native_release(); Loading
core/jni/android_hardware_Camera.cpp +4 −3 Original line number Diff line number Diff line Loading @@ -556,7 +556,8 @@ static void android_hardware_Camera_getCameraInfo(JNIEnv *env, jobject thiz, jin // connect to camera service static jint android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, jobject weak_this, jint cameraId, jstring clientPackageName, jboolean overrideToPortrait) { jboolean overrideToPortrait, jboolean forceSlowJpegMode) { // Convert jstring to String16 const char16_t *rawClientName = reinterpret_cast<const char16_t*>( env->GetStringChars(clientPackageName, NULL)); Loading @@ -568,7 +569,7 @@ static jint android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, jobj int targetSdkVersion = android_get_application_target_sdk_version(); sp<Camera> camera = Camera::connect(cameraId, clientName, Camera::USE_CALLING_UID, Camera::USE_CALLING_PID, targetSdkVersion, overrideToPortrait); targetSdkVersion, overrideToPortrait, forceSlowJpegMode); if (camera == NULL) { return -EACCES; } Loading Loading @@ -1054,7 +1055,7 @@ static const JNINativeMethod camMethods[] = { {"getNumberOfCameras", "()I", (void *)android_hardware_Camera_getNumberOfCameras}, {"_getCameraInfo", "(IZLandroid/hardware/Camera$CameraInfo;)V", (void *)android_hardware_Camera_getCameraInfo}, {"native_setup", "(Ljava/lang/Object;ILjava/lang/String;Z)I", {"native_setup", "(Ljava/lang/Object;ILjava/lang/String;ZZ)I", (void *)android_hardware_Camera_native_setup}, {"native_release", "()V", (void *)android_hardware_Camera_release}, {"setPreviewSurface", "(Landroid/view/Surface;)V", Loading
core/res/res/values/config.xml +5 −0 Original line number Diff line number Diff line Loading @@ -5050,6 +5050,11 @@ of known compatibility issues. --> <string-array name="config_highRefreshRateBlacklist"></string-array> <!-- The list of packages to force slowJpegMode for Apps using Camera API1 --> <string-array name="config_forceSlowJpegModeList" translatable="false"> <!-- Add packages here --> </string-array> <!-- Whether or not to hide the navigation bar when the soft keyboard is visible in order to create additional screen real estate outside beyond the keyboard. Note that the user needs to have a confirmed way to dismiss the keyboard when desired. --> Loading
core/res/res/values/symbols.xml +1 −0 Original line number Diff line number Diff line Loading @@ -4216,6 +4216,7 @@ <java-symbol type="string" name="config_factoryResetPackage" /> <java-symbol type="array" name="config_highRefreshRateBlacklist" /> <java-symbol type="array" name="config_forceSlowJpegModeList" /> <java-symbol type="layout" name="chooser_dialog" /> <java-symbol type="layout" name="chooser_dialog_item" /> Loading
media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/integration/CameraBinderTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -161,7 +161,8 @@ public class CameraBinderTest extends AndroidTestCase { ICameraService.USE_CALLING_UID, ICameraService.USE_CALLING_PID, getContext().getApplicationInfo().targetSdkVersion, /*overrideToPortrait*/false); /*overrideToPortrait*/false, /*forceSlowJpegMode*/false); assertNotNull(String.format("Camera %s was null", cameraId), cameraUser); Log.v(TAG, String.format("Camera %s connected", cameraId)); Loading