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

Commit fa3b121e authored by Michael Kolb's avatar Michael Kolb Committed by Android (Google) Code Review
Browse files

Merge "Pie design update" into gb-ub-photos-bryce

parents ce9ca226 f79ef61a
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -79,6 +79,9 @@
    <dimen name="pie_touch_slop">12dp</dimen>
    <dimen name="pie_touch_offset">40dp</dimen>
    <dimen name="pie_view_size">48dp</dimen>
    <dimen name="pie_arc_offset">48dp</dimen>
    <dimen name="pie_item_radius">206dp</dimen>
    <dimen name="pie_arc_radius">362dp</dimen>
    <dimen name="focus_radius_offset">8dp</dimen>
    <dimen name="focus_inner_offset">24dp</dimen>
    <dimen name="focus_outer_stroke">3dp</dimen>
+31 −14
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@ public class PhotoMenu extends PieController
        TimerSettingPopup.Listener,
        ListPrefSettingPopup.Listener {
    private static String TAG = "CAM_photomenu";
    private static float FLOAT_PI_DIVIDED_BY_TWO = (float) Math.PI / 2;
    private final String mSettingOff;

    private PhotoUI mUI;
@@ -54,13 +53,20 @@ public class PhotoMenu extends PieController
        super.initialize(group);
        mPopup = null;
        mSecondPopup = null;
        float sweep = FLOAT_PI_DIVIDED_BY_TWO / 2;
        addItem(CameraSettings.KEY_FLASH_MODE, FLOAT_PI_DIVIDED_BY_TWO - sweep, sweep);
        addItem(CameraSettings.KEY_EXPOSURE, 3 * FLOAT_PI_DIVIDED_BY_TWO - sweep, sweep);
        addItem(CameraSettings.KEY_WHITE_BALANCE, 3 * FLOAT_PI_DIVIDED_BY_TWO + sweep, sweep);
        float sweep = (float) (SWEEP * Math.PI);
        PieItem item = null;
        // flash
        if (group.findPreference(CameraSettings.KEY_FLASH_MODE) != null) {
            item = makeItem(CameraSettings.KEY_FLASH_MODE, CENTER - sweep, sweep);
            mRenderer.addItem(item);
        }
        // exposure compensation
        item = makeItem(CameraSettings.KEY_EXPOSURE, CENTER + sweep, sweep);
        mRenderer.addItem(item);
        // camera switcher
        if (group.findPreference(CameraSettings.KEY_CAMERA_ID) != null) {
            PieItem item = makeItem(R.drawable.ic_switch_photo_facing_holo_light);
            item.setFixedSlice(FLOAT_PI_DIVIDED_BY_TWO + sweep, sweep);
            item = makeItem(R.drawable.ic_switch_photo_facing_holo_light);
            item.setFixedSlice(CENTER - 2 * sweep, sweep);
            item.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(PieItem item) {
@@ -79,10 +85,11 @@ public class PhotoMenu extends PieController
            });
            mRenderer.addItem(item);
        }
        // hdr
        if (group.findPreference(CameraSettings.KEY_CAMERA_HDR) != null) {
            PieItem hdr = makeItem(R.drawable.ic_hdr);
            hdr.setFixedSlice(FLOAT_PI_DIVIDED_BY_TWO, sweep);
            hdr.setOnClickListener(new OnClickListener() {
            item = makeItem(R.drawable.ic_hdr);
            item.setFixedSlice(CENTER + 2 * sweep, sweep);
            item.setOnClickListener(new OnClickListener() {
                @Override
                public void onClick(PieItem item) {
                    // Find the index of next camera.
@@ -96,8 +103,18 @@ public class PhotoMenu extends PieController
                    }
                }
            });
            mRenderer.addItem(hdr);
            mRenderer.addItem(item);
        }

        // more settings
        PieItem more = makeItem(R.drawable.ic_settings_holo_light);
        more.setFixedSlice(CENTER, sweep);
        mRenderer.addItem(more);
        // white balance
        item = makeItem(CameraSettings.KEY_WHITE_BALANCE,
                CENTER + sweep, sweep);
        more.addItem(item);
        // settings popup
        mOtherKeys = new String[] {
                CameraSettings.KEY_SCENE_MODE,
                CameraSettings.KEY_RECORD_LOCATION,
@@ -106,8 +123,8 @@ public class PhotoMenu extends PieController
                CameraSettings.KEY_TIMER,
                CameraSettings.KEY_TIMER_SOUND_EFFECTS,
                };
        PieItem item = makeItem(R.drawable.ic_settings_holo_light);
        item.setFixedSlice(FLOAT_PI_DIVIDED_BY_TWO * 3, sweep);
        item = makeItem(R.drawable.ic_settings_holo_light);
        item.setFixedSlice(CENTER, sweep);
        item.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(PieItem item) {
@@ -117,7 +134,7 @@ public class PhotoMenu extends PieController
                mUI.showPopup(mPopup);
            }
        });
        mRenderer.addItem(item);
        more.addItem(item);
    }

    @Override
+23 −10
Original line number Diff line number Diff line
@@ -56,7 +56,8 @@ public class PhotoUI implements PieListener,
    PreviewGestures.SingleTapListener,
    FocusUI,
    LocationManager.Listener,
    FaceDetectionListener {
    FaceDetectionListener,
    PreviewGestures.SwipeListener {

    private static final String TAG = "CAM_UI";

@@ -175,7 +176,8 @@ public class PhotoUI implements PieListener,
        }
        if (mGestures == null) {
            // this will handle gesture disambiguation and dispatching
            mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer);
            mGestures = new PreviewGestures(mActivity, this, mZoomRenderer, mPieRenderer,
                    this);
        }
        mGestures.clearTouchReceivers();
        mGestures.setRenderOverlay(mRenderOverlay);
@@ -196,12 +198,7 @@ public class PhotoUI implements PieListener,
        updateOnScreenIndicators(params, prefs);
    }

    public void initializeControlByIntent() {
        mBlocker = mActivity.findViewById(R.id.blocker);
        mMenuButton = mActivity.findViewById(R.id.menu);
        mMenuButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
    private void openMenu() {
        if (mPieRenderer != null) {
            // If autofocus is not finished, cancel autofocus so that the
            // subsequent touch can be handled by PreviewGestures
@@ -211,6 +208,15 @@ public class PhotoUI implements PieListener,
            mPieRenderer.showInCenter();
        }
    }

    public void initializeControlByIntent() {
        mBlocker = mActivity.findViewById(R.id.blocker);
        mMenuButton = mActivity.findViewById(R.id.menu);
        mMenuButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                openMenu();
            }
        });
        if (mController.isImageCaptureIntent()) {
            mActivity.hideSwitcher();
@@ -723,4 +729,11 @@ public class PhotoUI implements PieListener,
        mFaceView.setFaces(faces);
    }

    @Override
    public void onSwipe(int direction) {
        if (direction == PreviewGestures.DIR_UP) {
            openMenu();
        }
    }

}
+24 −3
Original line number Diff line number Diff line
@@ -37,6 +37,10 @@ public class PieController {
    protected static final int MODE_PHOTO = 0;
    protected static final int MODE_VIDEO = 1;

    protected static float CENTER = (float) Math.PI / 2;
    protected static final float SWEEP = 0.06f;


    protected CameraActivity mActivity;
    protected PreferenceGroup mPreferenceGroup;
    protected OnPreferenceChangedListener mListener;
@@ -84,10 +88,10 @@ public class PieController {
        return new PieItem(drawable, 0);
    }

    public void addItem(String prefKey, float center, float sweep) {
    public PieItem makeItem(String prefKey, float center, float sweep) {
        final IconListPreference pref =
                (IconListPreference) mPreferenceGroup.findPreference(prefKey);
        if (pref == null) return;
        if (pref == null) return null;
        int[] iconIds = pref.getLargeIconIds();
        int resid = -1;
        if (!pref.getUseSingleIcon() && iconIds != null) {
@@ -101,7 +105,6 @@ public class PieController {
        PieItem item = makeItem(resid);
        // use center and sweep to determine layout
        item.setFixedSlice(center, sweep);
        mRenderer.addItem(item);
        mPreferences.add(pref);
        mPreferenceMap.put(pref, item);
        int nOfEntries = pref.getEntries().length;
@@ -113,6 +116,7 @@ public class PieController {
                } else {
                    inner = makeItem(pref.getEntries()[i]);
                }
                layoutInner(inner, i, nOfEntries);
                item.addItem(inner);
                final int index = i;
                inner.setOnClickListener(new OnClickListener() {
@@ -125,6 +129,23 @@ public class PieController {
                });
            }
        }
        return item;
    }

    public PieItem makeDialItem(ListPreference pref, int iconId, float center, float sweep) {
        PieItem item = makeItem(iconId);
        return item;
    }

    protected void layoutInner(PieItem item, int ix, int n) {
        float sweep = (float) (SWEEP * Math.PI);//FLOAT_PI_DIVIDED_BY_TWO / Math.max(n, 5);
        float start = CENTER + (n - 1) * (sweep / 2f);
        item.setFixedSlice(start - ix * sweep, sweep);
    }

    public void addItem(String prefKey, float center, float sweep) {
        PieItem item = makeItem(prefKey, center, sweep);
        mRenderer.addItem(item);
    }

    public void setPreferenceGroup(PreferenceGroup group) {
+30 −20
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ package com.android.camera;

import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.view.View;
@@ -44,6 +43,12 @@ public class PreviewGestures
    private static final int MODE_ZOOM = 2;
    private static final int MODE_MODULE = 3;
    private static final int MODE_ALL = 4;
    private static final int MODE_SWIPE = 5;

    public static final int DIR_UP = 0;
    public static final int DIR_DOWN = 1;
    public static final int DIR_LEFT = 2;
    public static final int DIR_RIGHT = 3;

    private CameraActivity mActivity;
    private SingleTapListener mTapListener;
@@ -61,6 +66,7 @@ public class PreviewGestures
    private boolean mZoomOnly;
    private int mOrientation;
    private int[] mLocation;
    private SwipeListener mSwipeListener;

    private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) {
@@ -76,8 +82,12 @@ public class PreviewGestures
        public void onSingleTapUp(View v, int x, int y);
    }

    interface SwipeListener {
        public void onSwipe(int direction);
    }

    public PreviewGestures(CameraActivity ctx, SingleTapListener tapListener,
            ZoomRenderer zoom, PieRenderer pie) {
            ZoomRenderer zoom, PieRenderer pie, SwipeListener swipe) {
        mActivity = ctx;
        mTapListener = tapListener;
        mPie = pie;
@@ -88,6 +98,7 @@ public class PreviewGestures
        mTapTimeout = ViewConfiguration.getTapTimeout();
        mEnabled = true;
        mLocation = new int[2];
        mSwipeListener = swipe;
    }

    public void setRenderOverlay(RenderOverlay overlay) {
@@ -149,6 +160,11 @@ public class PreviewGestures
            }
        } else if (mMode == MODE_NONE) {
            return false;
        } else if (mMode == MODE_SWIPE) {
            if (MotionEvent.ACTION_UP == m.getActionMasked()) {
                mSwipeListener.onSwipe(getSwipeDirection(m));
            }
            return true;
        } else if (mMode == MODE_PIE) {
            if (MotionEvent.ACTION_POINTER_DOWN == m.getActionMasked()) {
                sendToPie(makeCancelEvent(m));
@@ -215,18 +231,13 @@ public class PreviewGestures
                        || Math.abs(m.getY() - mDown.getY()) > mSlop) {
                    // moved too far and no timeout yet, no focus or pie
                    cancelPie();
                    if (isSwipe(m, true)) {
                    int dir = getSwipeDirection(m);
                    if (dir == DIR_LEFT) {
                        mMode = MODE_MODULE;
                        return mActivity.superDispatchTouchEvent(m);
                    } else {
                        cancelActivityTouchHandling(m);
                        if (isSwipe(m , false)) {
                        mMode = MODE_NONE;
                        } else if (!mZoomOnly) {
                            mMode = MODE_PIE;
                            openPie();
                            sendToPie(m);
                        }
                    }
                }
            }
@@ -246,32 +257,31 @@ public class PreviewGestures
    }

    // left tests for finger moving right to left
    private boolean isSwipe(MotionEvent m, boolean left) {
    private int getSwipeDirection(MotionEvent m) {
        float dx = 0;
        float dy = 0;
        switch (mOrientation) {
        case 0:
            dx = m.getX() - mDown.getX();
            dy = Math.abs(m.getY() - mDown.getY());
            dy = m.getY() - mDown.getY();
            break;
        case 90:
            dx = - (m.getY() - mDown.getY());
            dy = Math.abs(m.getX() - mDown.getX());
            dy = m.getX() - mDown.getX();
            break;
        case 180:
            dx = -(m.getX() - mDown.getX());
            dy = Math.abs(m.getY() - mDown.getY());
            dy = m.getY() - mDown.getY();
            break;
        case 270:
            dx = m.getY() - mDown.getY();
            dy = Math.abs(m.getX() - mDown.getX());
            dy = m.getX() - mDown.getX();
            break;
        }
        if (left) {
            return (dx < 0 && dy / -dx < 0.6f);
        } else {
            return (dx > 0 && dy / dx < 0.6f);
        }
        if (dx < 0 && (Math.abs(dy) / -dx < 2)) return DIR_LEFT;
        if (dx > 0 && (Math.abs(dy) / dx < 2)) return DIR_RIGHT;
        if (dy > 0) return DIR_DOWN;
        return DIR_UP;
    }

    private boolean isInside(MotionEvent evt, View v) {
Loading