Merge "DO NOT MERGE Force slowJpegMode on certain camera1 apps" into tm-qpr-dev
This commit is contained in:
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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) */
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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));
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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",
|
||||
|
||||
@@ -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. -->
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user