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

Commit b1a28418 authored by John Reck's avatar John Reck
Browse files

Fix SRI Pano orientation

 Bug: 7345511

Change-Id: I9a06f03b67ba820b86520588415ff3ab16f05829
parent f034e3d9
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.gallery3d.ui;

import android.content.Context;
import android.graphics.Matrix;

import com.android.gallery3d.anim.CanvasAnimation;
@@ -45,4 +46,6 @@ public interface GLRoot {
    public void freeze();
    public void unfreeze();
    public void setLightsOutMode(boolean enabled);

    public Context getContext();
}
+14 −3
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.gallery3d.ui;

import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Rect;
@@ -546,10 +547,20 @@ public class PhotoView extends GLView {
    }

    private int getPanoramaRotation() {
        // Panorama only support rotations of 0 and 90, so if it is greater
        // than that flip the output surface texture to compensate
        if (mDisplayRotation > 180)
        // This function is magic
        // The issue here is that Pano makes bad assumptions about rotation and
        // orientation. The first is it assumes only two rotations are possible,
        // 0 and 90. Thus, if display rotation is >= 180, we invert the output.
        // The second is that it assumes landscape is a 90 rotation from portrait,
        // however on landscape devices this is not true. Thus, if we are in portrait
        // on a landscape device, we need to invert the output
        int orientation = getGLRoot().getContext().getResources().getConfiguration().orientation;
        boolean invertPortrait = (orientation == Configuration.ORIENTATION_PORTRAIT
                && (mDisplayRotation == 90 || mDisplayRotation == 270));
        boolean invert = (mDisplayRotation >= 180);
        if (invert != invertPortrait) {
            return (mCompensation + 180) % 360;
        }
        return mCompensation;
    }