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

Commit a829e166 authored by Jeff Brown's avatar Jeff Brown Committed by Android (Google) Code Review
Browse files

Merge "Handle orientation changes more systematically. Bug: 4981385"

parents df8e00ff 01a98ddb
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -163,15 +163,13 @@ interface IWindowManager

    // These can only be called with the SET_ORIENTATION permission.
    /**
     * Change the current screen rotation, constants as per
     * {@link android.view.Surface}.
     * @param rotation the intended rotation.
     * Update the current screen rotation based on the current state of
     * the world.
     * @param alwaysSendConfiguration Flag to force a new configuration to
     * be evaluated.  This can be used when there are other parameters in
     * configuration that are changing.
     * @param animFlags Animation flags as per {@link android.view.Surface}.
     */
    void setRotation(int rotation, boolean alwaysSendConfiguration, int animFlags);
    void updateRotation(boolean alwaysSendConfiguration);

    /**
     * Retrieve the current screen orientation, constants as per
+1 −4
Original line number Diff line number Diff line
@@ -208,9 +208,6 @@ public class Surface implements Parcelable {
    /** Enable dithering when compositing this surface @hide */
    public static final int SURFACE_DITHER    = 0x04;

    /** Disable the orientation animation @hide */
    public static final int FLAGS_ORIENTATION_ANIMATION_DISABLE = 0x000000001;

    // The mSurfaceControl will only be present for Surfaces used by the window
    // server or system processes. When this class is parceled we defer to the
    // mSurfaceControl to do the parceling. Otherwise we parcel the
@@ -393,7 +390,7 @@ public class Surface implements Parcelable {
     * set the orientation of the given display.
     * @param display
     * @param orientation
     * @param flags
     * @param flags Currently unused, set to 0.
     * @hide
     */
    public static native   void setOrientation(int display, int orientation, int flags);
+21 −19
Original line number Diff line number Diff line
@@ -375,12 +375,6 @@ public interface WindowManagerPolicy {
    /** Screen turned off because of proximity sensor */
    public final int OFF_BECAUSE_OF_PROX_SENSOR = 4;

    /**
     * Magic constant to {@link IWindowManager#setRotation} to not actually
     * modify the rotation.
     */
    public final int USE_LAST_ROTATION = -1000;

    /** When not otherwise specified by the activity's screenOrientation, rotation should be
     * determined by the system (that is, using sensors). */
    public final int USER_ROTATION_FREE = 0;
@@ -856,22 +850,30 @@ public interface WindowManagerPolicy {
    public boolean inKeyguardRestrictedKeyInputMode();

    /**
     * Given an orientation constant
     * ({@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE
     * ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE} or
     * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_PORTRAIT
     * ActivityInfo.SCREEN_ORIENTATION_PORTRAIT}), return a surface
     * rotation.
     * Given an orientation constant, returns the appropriate surface rotation,
     * taking into account sensors, docking mode, rotation lock, and other factors.
     *
     * @param orientation An orientation constant, such as
     * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}.
     * @param lastRotation The most recently used rotation.
     * @return The surface rotation to use.
     */
    public int rotationForOrientationLw(int orientation, int lastRotation,
            boolean displayEnabled);
    public int rotationForOrientationLw(int orientation, int lastRotation);

    /**
     * Return the currently locked screen rotation, if any.  Return
     * Surface.ROTATION_0, Surface.ROTATION_90, Surface.ROTATION_180, or
     * Surface.ROTATION_270 if locked; return -1 if not locked.
     * Given an orientation constant and a rotation, returns true if the rotation
     * has compatible metrics to the requested orientation.  For example, if
     * the application requested landscape and got seascape, then the rotation
     * has compatible metrics; if the application requested portrait and got landscape,
     * then the rotation has incompatible metrics; if the application did not specify
     * a preference, then anything goes.
     *
     * @param orientation An orientation constant, such as
     * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}.
     * @param rotation The rotation to check.
     * @return True if the rotation is compatible with the requested orientation.
     */
    public int getLockedRotationLw();
    public boolean rotationHasCompatibleMetricsLw(int orientation, int rotation);

    /**
     * Called when the system is mostly done booting to determine whether
+6 −7
Original line number Diff line number Diff line
@@ -118,14 +118,13 @@ public abstract class WindowOrientationListener {

    /**
     * Gets the current orientation.
     * @param lastRotation
     * @return
     * @return The current rotation, or -1 if unknown.
     */
    public int getCurrentRotation(int lastRotation) {
    public int getCurrentRotation() {
        if (mEnabled) {
            return mSensorEventListener.getCurrentRotation(lastRotation);
            return mSensorEventListener.getCurrentRotation();
        }
        return lastRotation;
        return -1;
    }

    /**
@@ -342,8 +341,8 @@ public abstract class WindowOrientationListener {
            mOrientationListener = orientationListener;
        }

        public int getCurrentRotation(int lastRotation) {
            return mRotation != ROTATION_UNKNOWN ? mRotation : lastRotation;
        public int getCurrentRotation() {
            return mRotation; // may be -1, if unknown
        }

        @Override
+2 −6
Original line number Diff line number Diff line
@@ -88,11 +88,6 @@ public:
        eElectronBeamAnimationOff = 0x10
    };

    // flags for setOrientation
    enum {
        eOrientationAnimationDisable = 0x00000001
    };

    /* create connection with surface flinger, requires
     * ACCESS_SURFACE_FLINGER permission
     */
@@ -112,7 +107,8 @@ public:
    virtual status_t freezeDisplay(DisplayID dpy, uint32_t flags) = 0;
    virtual status_t unfreezeDisplay(DisplayID dpy, uint32_t flags) = 0;

    /* Set display orientation. requires ACCESS_SURFACE_FLINGER permission */
    /* Set display orientation. requires ACCESS_SURFACE_FLINGER permission
     * No flags are currently defined.  Set flags to 0. */
    virtual int setOrientation(DisplayID dpy, int orientation, uint32_t flags) = 0;

    /* signal that we're done booting.
Loading