Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9d4e266c authored by Chengfei Tao's avatar Chengfei Tao Committed by Automerger Merge Worker
Browse files

Merge "Force slowJpegMode on certain camera1 apps" into udc-dev am: 63fd54bb

parents 3cacf7e6 63fd54bb
Loading
Loading
Loading
Loading
+17 −2
Original line number Original line Diff line number Diff line
@@ -51,6 +51,7 @@ import android.util.Log;
import android.view.Surface;
import android.view.Surface;
import android.view.SurfaceHolder;
import android.view.SurfaceHolder;


import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.app.IAppOpsCallback;
import com.android.internal.app.IAppOpsCallback;
import com.android.internal.app.IAppOpsService;
import com.android.internal.app.IAppOpsService;
@@ -486,8 +487,22 @@ public class Camera {


        boolean overrideToPortrait = CameraManager.shouldOverrideToPortrait(
        boolean overrideToPortrait = CameraManager.shouldOverrideToPortrait(
                ActivityThread.currentApplication().getApplicationContext());
                ActivityThread.currentApplication().getApplicationContext());
        boolean forceSlowJpegMode = shouldForceSlowJpegMode();
        return native_setup(new WeakReference<Camera>(this), cameraId,
        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) */
    /** used by Camera#open, Camera#open(int) */
@@ -558,7 +573,7 @@ public class Camera {


    @UnsupportedAppUsage
    @UnsupportedAppUsage
    private native int native_setup(Object cameraThis, int cameraId, String packageName,
    private native int native_setup(Object cameraThis, int cameraId, String packageName,
            boolean overrideToPortrait);
            boolean overrideToPortrait, boolean forceSlowJpegMode);


    private native final void native_release();
    private native final void native_release();


+4 −3
Original line number Original line Diff line number Diff line
@@ -556,7 +556,8 @@ static void android_hardware_Camera_getCameraInfo(JNIEnv *env, jobject thiz, jin
// connect to camera service
// connect to camera service
static jint android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, jobject weak_this,
static jint android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, jobject weak_this,
                                                 jint cameraId, jstring clientPackageName,
                                                 jint cameraId, jstring clientPackageName,
                                                 jboolean overrideToPortrait) {
                                                 jboolean overrideToPortrait,
                                                 jboolean forceSlowJpegMode) {
    // Convert jstring to String16
    // Convert jstring to String16
    const char16_t *rawClientName = reinterpret_cast<const char16_t*>(
    const char16_t *rawClientName = reinterpret_cast<const char16_t*>(
        env->GetStringChars(clientPackageName, NULL));
        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();
    int targetSdkVersion = android_get_application_target_sdk_version();
    sp<Camera> camera =
    sp<Camera> camera =
            Camera::connect(cameraId, clientName, Camera::USE_CALLING_UID, Camera::USE_CALLING_PID,
            Camera::connect(cameraId, clientName, Camera::USE_CALLING_UID, Camera::USE_CALLING_PID,
                            targetSdkVersion, overrideToPortrait);
                            targetSdkVersion, overrideToPortrait, forceSlowJpegMode);
    if (camera == NULL) {
    if (camera == NULL) {
        return -EACCES;
        return -EACCES;
    }
    }
@@ -1054,7 +1055,7 @@ static const JNINativeMethod camMethods[] = {
        {"getNumberOfCameras", "()I", (void *)android_hardware_Camera_getNumberOfCameras},
        {"getNumberOfCameras", "()I", (void *)android_hardware_Camera_getNumberOfCameras},
        {"_getCameraInfo", "(IZLandroid/hardware/Camera$CameraInfo;)V",
        {"_getCameraInfo", "(IZLandroid/hardware/Camera$CameraInfo;)V",
         (void *)android_hardware_Camera_getCameraInfo},
         (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},
         (void *)android_hardware_Camera_native_setup},
        {"native_release", "()V", (void *)android_hardware_Camera_release},
        {"native_release", "()V", (void *)android_hardware_Camera_release},
        {"setPreviewSurface", "(Landroid/view/Surface;)V",
        {"setPreviewSurface", "(Landroid/view/Surface;)V",
+5 −0
Original line number Original line Diff line number Diff line
@@ -5223,6 +5223,11 @@
         of known compatibility issues. -->
         of known compatibility issues. -->
    <string-array name="config_highRefreshRateBlacklist"></string-array>
    <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
    <!-- 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
         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. -->
         to have a confirmed way to dismiss the keyboard when desired. -->
+1 −0
Original line number Original line Diff line number Diff line
@@ -4196,6 +4196,7 @@


  <java-symbol type="string" name="config_factoryResetPackage" />
  <java-symbol type="string" name="config_factoryResetPackage" />
  <java-symbol type="array" name="config_highRefreshRateBlacklist" />
  <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" />
  <java-symbol type="layout" name="chooser_dialog_item" />
  <java-symbol type="layout" name="chooser_dialog_item" />
+2 −1
Original line number Original line Diff line number Diff line
@@ -161,7 +161,8 @@ public class CameraBinderTest extends AndroidTestCase {
                            ICameraService.USE_CALLING_UID,
                            ICameraService.USE_CALLING_UID,
                            ICameraService.USE_CALLING_PID,
                            ICameraService.USE_CALLING_PID,
                            getContext().getApplicationInfo().targetSdkVersion,
                            getContext().getApplicationInfo().targetSdkVersion,
                            /*overrideToPortrait*/false);
                            /*overrideToPortrait*/false,
                            /*forceSlowJpegMode*/false);
            assertNotNull(String.format("Camera %s was null", cameraId), cameraUser);
            assertNotNull(String.format("Camera %s was null", cameraId), cameraUser);


            Log.v(TAG, String.format("Camera %s connected", cameraId));
            Log.v(TAG, String.format("Camera %s connected", cameraId));