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

Commit 18158e64 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 9390188 from 416f9b7d to tm-qpr2-release

Change-Id: I3edea1f6b92d38cb206acf093e8aad3ac90b6c4e
parents 733d149f 416f9b7d
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1139,6 +1139,7 @@ package android.hardware.camera2 {
  public final class CameraManager {
    method public String[] getCameraIdListNoLazy() throws android.hardware.camera2.CameraAccessException;
    method @RequiresPermission(allOf={android.Manifest.permission.SYSTEM_CAMERA, android.Manifest.permission.CAMERA}) public void openCamera(@NonNull String, int, @NonNull java.util.concurrent.Executor, @NonNull android.hardware.camera2.CameraDevice.StateCallback) throws android.hardware.camera2.CameraAccessException;
    field public static final long OVERRIDE_FRONT_CAMERA_APP_COMPAT = 250678880L; // 0xef10e60L
  }

  public abstract static class CameraManager.AvailabilityCallback {
+20 −4
Original line number Diff line number Diff line
@@ -29,12 +29,14 @@ import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.app.ActivityThread;
import android.app.AppOpsManager;
import android.app.compat.CompatChanges;
import android.compat.annotation.UnsupportedAppUsage;
import android.content.Context;
import android.graphics.ImageFormat;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.SurfaceTexture;
import android.hardware.camera2.CameraManager;
import android.media.AudioAttributes;
import android.media.IAudioService;
import android.os.Build;
@@ -45,6 +47,7 @@ import android.os.Message;
import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemProperties;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RSIllegalArgumentException;
@@ -281,6 +284,14 @@ public class Camera {
     */
    public native static int getNumberOfCameras();

    private static final boolean sLandscapeToPortrait =
            SystemProperties.getBoolean(CameraManager.LANDSCAPE_TO_PORTRAIT_PROP, false);

    private static boolean shouldOverrideToPortrait() {
        return CompatChanges.isChangeEnabled(CameraManager.OVERRIDE_FRONT_CAMERA_APP_COMPAT)
                && sLandscapeToPortrait;
    }

    /**
     * Returns the information about a particular camera.
     * If {@link #getNumberOfCameras()} returns N, the valid id is 0 to N-1.
@@ -290,7 +301,9 @@ public class Camera {
     *    low-level failure).
     */
    public static void getCameraInfo(int cameraId, CameraInfo cameraInfo) {
        _getCameraInfo(cameraId, cameraInfo);
        boolean overrideToPortrait = shouldOverrideToPortrait();

        _getCameraInfo(cameraId, overrideToPortrait, cameraInfo);
        IBinder b = ServiceManager.getService(Context.AUDIO_SERVICE);
        IAudioService audioService = IAudioService.Stub.asInterface(b);
        try {
@@ -303,7 +316,8 @@ public class Camera {
            Log.e(TAG, "Audio service is unavailable for queries");
        }
    }
    private native static void _getCameraInfo(int cameraId, CameraInfo cameraInfo);
    private native static void _getCameraInfo(int cameraId, boolean overrideToPortrait,
            CameraInfo cameraInfo);

    /**
     * Information about a camera
@@ -484,8 +498,9 @@ public class Camera {
            mEventHandler = null;
        }

        boolean overrideToPortrait = shouldOverrideToPortrait();
        return native_setup(new WeakReference<Camera>(this), cameraId,
                ActivityThread.currentOpPackageName());
                ActivityThread.currentOpPackageName(), overrideToPortrait);
    }

    /** used by Camera#open, Camera#open(int) */
@@ -555,7 +570,8 @@ public class Camera {
    }

    @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);

    private native final void native_release();

+39 −4
Original line number Diff line number Diff line
@@ -23,6 +23,10 @@ import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.TestApi;
import android.app.compat.CompatChanges;
import android.compat.annotation.ChangeId;
import android.compat.annotation.Disabled;
import android.compat.annotation.Overridable;
import android.content.Context;
import android.content.pm.PackageManager;
import android.graphics.Point;
@@ -103,6 +107,24 @@ public final class CameraManager {
            "android.permission.CAMERA_OPEN_CLOSE_LISTENER";
    private final boolean mHasOpenCloseListenerPermission;

    /**
     * Force camera output to be rotated to portrait orientation on landscape cameras.
     * Many apps do not handle this situation and display stretched images otherwise.
     * @hide
     */
    @ChangeId
    @Overridable
    @Disabled
    @TestApi
    public static final long OVERRIDE_FRONT_CAMERA_APP_COMPAT = 250678880L;

    /**
     * System property for allowing the above
     * @hide
     */
    public static final String LANDSCAPE_TO_PORTRAIT_PROP =
            "camera.enable_landscape_to_portrait";

    /**
     * @hide
     */
@@ -520,7 +542,8 @@ public final class CameraManager {
            for (String physicalCameraId : physicalCameraIds) {
                CameraMetadataNative physicalCameraInfo =
                        cameraService.getCameraCharacteristics(physicalCameraId,
                                mContext.getApplicationInfo().targetSdkVersion);
                                mContext.getApplicationInfo().targetSdkVersion,
                                /*overrideToPortrait*/false);
                StreamConfiguration[] configs = physicalCameraInfo.get(
                        CameraCharacteristics.
                                SCALER_PHYSICAL_CAMERA_MULTI_RESOLUTION_STREAM_CONFIGURATIONS);
@@ -579,8 +602,9 @@ public final class CameraManager {
            try {
                Size displaySize = getDisplaySize();

                boolean overrideToPortrait = shouldOverrideToPortrait();
                CameraMetadataNative info = cameraService.getCameraCharacteristics(cameraId,
                        mContext.getApplicationInfo().targetSdkVersion);
                        mContext.getApplicationInfo().targetSdkVersion, overrideToPortrait);
                try {
                    info.setCameraId(Integer.parseInt(cameraId));
                } catch (NumberFormatException e) {
@@ -697,9 +721,12 @@ public final class CameraManager {
                        ICameraService.ERROR_DISCONNECTED,
                        "Camera service is currently unavailable");
                }

                boolean overrideToPortrait = shouldOverrideToPortrait();
                cameraUser = cameraService.connectDevice(callbacks, cameraId,
                    mContext.getOpPackageName(), mContext.getAttributionTag(), uid,
                    oomScoreOffset, mContext.getApplicationInfo().targetSdkVersion);
                    oomScoreOffset, mContext.getApplicationInfo().targetSdkVersion,
                    overrideToPortrait);
            } catch (ServiceSpecificException e) {
                if (e.errorCode == ICameraService.ERROR_DEPRECATED_HAL) {
                    throw new AssertionError("Should've gone down the shim path");
@@ -1127,6 +1154,11 @@ public final class CameraManager {
        return CameraManagerGlobal.get().getTorchStrengthLevel(cameraId);
    }

    private static boolean shouldOverrideToPortrait() {
        return CompatChanges.isChangeEnabled(OVERRIDE_FRONT_CAMERA_APP_COMPAT)
                && CameraManagerGlobal.sLandscapeToPortrait;
    }

    /**
     * A callback for camera devices becoming available or unavailable to open.
     *
@@ -1573,6 +1605,9 @@ public final class CameraManager {
        public static final boolean sCameraServiceDisabled =
                SystemProperties.getBoolean("config.disable_cameraservice", false);

        public static final boolean sLandscapeToPortrait =
                SystemProperties.getBoolean(LANDSCAPE_TO_PORTRAIT_PROP, false);

        public static CameraManagerGlobal get() {
            return gCameraManager;
        }
+13 −13
Original line number Diff line number Diff line
@@ -720,7 +720,7 @@ public final class ViewRootImpl implements ViewParent,
    private final InsetsState mTempInsets = new InsetsState();
    private final InsetsSourceControl[] mTempControls = new InsetsSourceControl[SIZE];
    private final WindowConfiguration mTempWinConfig = new WindowConfiguration();
    private float mInvSizeCompatScale = 1f;
    private float mInvCompatScale = 1f;
    final ViewTreeObserver.InternalInsetsInfo mLastGivenInsets
            = new ViewTreeObserver.InternalInsetsInfo();

@@ -1119,11 +1119,11 @@ public final class ViewRootImpl implements ViewParent,

    private WindowConfiguration getCompatWindowConfiguration() {
        final WindowConfiguration winConfig = getConfiguration().windowConfiguration;
        if (mInvSizeCompatScale == 1f) {
        if (mInvCompatScale == 1f) {
            return winConfig;
        }
        mTempWinConfig.setTo(winConfig);
        mTempWinConfig.scale(mInvSizeCompatScale);
        mTempWinConfig.scale(mInvCompatScale);
        return mTempWinConfig;
    }

@@ -1257,11 +1257,11 @@ public final class ViewRootImpl implements ViewParent,
                    controlInsetsForCompatibility(mWindowAttributes);

                    Rect attachedFrame = new Rect();
                    final float[] sizeCompatScale = { 1f };
                    final float[] compatScale = { 1f };
                    res = mWindowSession.addToDisplayAsUser(mWindow, mWindowAttributes,
                            getHostVisibility(), mDisplay.getDisplayId(), userId,
                            mInsetsController.getRequestedVisibilities(), inputChannel, mTempInsets,
                            mTempControls, attachedFrame, sizeCompatScale);
                            mTempControls, attachedFrame, compatScale);
                    if (!attachedFrame.isValid()) {
                        attachedFrame = null;
                    }
@@ -1271,8 +1271,8 @@ public final class ViewRootImpl implements ViewParent,
                        mTranslator.translateRectInScreenToAppWindow(attachedFrame);
                    }
                    mTmpFrames.attachedFrame = attachedFrame;
                    mTmpFrames.sizeCompatScale = sizeCompatScale[0];
                    mInvSizeCompatScale = 1f / sizeCompatScale[0];
                    mTmpFrames.compatScale = compatScale[0];
                    mInvCompatScale = 1f / compatScale[0];
                } catch (RemoteException e) {
                    mAdded = false;
                    mView = null;
@@ -1794,24 +1794,24 @@ public final class ViewRootImpl implements ViewParent,
            mTranslator.translateRectInScreenToAppWindow(displayFrame);
            mTranslator.translateRectInScreenToAppWindow(attachedFrame);
        }
        final float sizeCompatScale = frames.sizeCompatScale;
        final float compatScale = frames.compatScale;
        final boolean frameChanged = !mWinFrame.equals(frame);
        final boolean configChanged = !mLastReportedMergedConfiguration.equals(mergedConfiguration);
        final boolean attachedFrameChanged = LOCAL_LAYOUT
                && !Objects.equals(mTmpFrames.attachedFrame, attachedFrame);
        final boolean displayChanged = mDisplay.getDisplayId() != displayId;
        final boolean resizeModeChanged = mResizeMode != resizeMode;
        final boolean sizeCompatScaleChanged = mTmpFrames.sizeCompatScale != sizeCompatScale;
        final boolean compatScaleChanged = mTmpFrames.compatScale != compatScale;
        if (msg == MSG_RESIZED && !frameChanged && !configChanged && !attachedFrameChanged
                && !displayChanged && !resizeModeChanged && !forceNextWindowRelayout
                && !sizeCompatScaleChanged) {
                && !compatScaleChanged) {
            return;
        }

        mPendingDragResizing = resizeMode != RESIZE_MODE_INVALID;
        mResizeMode = resizeMode;
        mTmpFrames.sizeCompatScale = sizeCompatScale;
        mInvSizeCompatScale = 1f / sizeCompatScale;
        mTmpFrames.compatScale = compatScale;
        mInvCompatScale = 1f / compatScale;

        if (configChanged) {
            // If configuration changed - notify about that and, maybe, about move to display.
@@ -8240,7 +8240,7 @@ public final class ViewRootImpl implements ViewParent,
                mTranslator.translateInsetsStateInScreenToAppWindow(mTempInsets);
                mTranslator.translateSourceControlsInScreenToAppWindow(mTempControls);
            }
            mInvSizeCompatScale = 1f / mTmpFrames.sizeCompatScale;
            mInvCompatScale = 1f / mTmpFrames.compatScale;
            mInsetsController.onStateChanged(mTempInsets);
            mInsetsController.onControlsChanged(mTempControls);

+5 −5
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ public class ClientWindowFrames implements Parcelable {

    public boolean isParentFrameClippedByDisplayCutout;

    public float sizeCompatScale = 1f;
    public float compatScale = 1f;

    public ClientWindowFrames() {
    }
@@ -62,7 +62,7 @@ public class ClientWindowFrames implements Parcelable {
            attachedFrame = new Rect(other.attachedFrame);
        }
        isParentFrameClippedByDisplayCutout = other.isParentFrameClippedByDisplayCutout;
        sizeCompatScale = other.sizeCompatScale;
        compatScale = other.compatScale;
    }

    private ClientWindowFrames(Parcel in) {
@@ -76,7 +76,7 @@ public class ClientWindowFrames implements Parcelable {
        parentFrame.readFromParcel(in);
        attachedFrame = in.readTypedObject(Rect.CREATOR);
        isParentFrameClippedByDisplayCutout = in.readBoolean();
        sizeCompatScale = in.readFloat();
        compatScale = in.readFloat();
    }

    @Override
@@ -86,7 +86,7 @@ public class ClientWindowFrames implements Parcelable {
        parentFrame.writeToParcel(dest, flags);
        dest.writeTypedObject(attachedFrame, flags);
        dest.writeBoolean(isParentFrameClippedByDisplayCutout);
        dest.writeFloat(sizeCompatScale);
        dest.writeFloat(compatScale);
    }

    @Override
@@ -97,7 +97,7 @@ public class ClientWindowFrames implements Parcelable {
                + " parentFrame=" + parentFrame.toShortString(sb)
                + (attachedFrame != null ? " attachedFrame=" + attachedFrame.toShortString() : "")
                + (isParentFrameClippedByDisplayCutout ? " parentClippedByDisplayCutout" : "")
                + (sizeCompatScale != 1f ? " sizeCompatScale=" + sizeCompatScale : "") +  "}";
                + (compatScale != 1f ? " sizeCompatScale=" + compatScale : "") +  "}";
    }

    @Override
Loading