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

Commit 629718fd authored by Jorim Jaggi's avatar Jorim Jaggi Committed by Android Git Automerger
Browse files

am 1698281b: am 91755f3f: am 54815675: Preview layouts for phone/camera affordance.

* commit '1698281bd8eabfc866655277283d446601cc4891':
  Preview layouts for phone/camera affordance.
parents fbf35c92 8d51a477
Loading
Loading
Loading
Loading
+17 −10
Original line number Diff line number Diff line
@@ -22,6 +22,23 @@
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    >

    <com.android.systemui.statusbar.phone.KeyguardIndicationTextView
        android:id="@+id/keyguard_indication_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="70dp"
        android:layout_gravity="bottom|center_horizontal"
        android:textStyle="italic"
        android:textColor="#ffffff"
        android:textAppearance="?android:attr/textAppearanceSmall"/>

    <FrameLayout
        android:id="@+id/preview_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </FrameLayout>

    <com.android.systemui.statusbar.KeyguardAffordanceView
        android:id="@+id/camera_button"
        android:layout_height="64dp"
@@ -42,16 +59,6 @@
        android:scaleType="center"
        android:contentDescription="@string/accessibility_phone_button" />

    <com.android.systemui.statusbar.phone.KeyguardIndicationTextView
        android:id="@+id/keyguard_indication_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="70dp"
        android:layout_gravity="bottom|center_horizontal"
        android:textStyle="italic"
        android:textColor="#ffffff"
        android:textAppearance="?android:attr/textAppearanceSmall"/>

    <com.android.systemui.statusbar.KeyguardAffordanceView
        android:id="@+id/lock_icon"
        android:layout_width="64dp"
+4 −3
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.statusbar;

import android.animation.Animator;
import android.animation.ValueAnimator;
import android.content.Context;
import android.view.ViewPropertyAnimator;
@@ -72,7 +73,7 @@ public class FlingAnimationUtils {
     * @param endValue the end value of the animator
     * @param velocity the current velocity of the motion
     */
    public void apply(ValueAnimator animator, float currValue, float endValue, float velocity) {
    public void apply(Animator animator, float currValue, float endValue, float velocity) {
        apply(animator, currValue, endValue, velocity, Math.abs(endValue - currValue));
    }

@@ -101,7 +102,7 @@ public class FlingAnimationUtils {
     * @param maxDistance the maximum distance for this interaction; the maximum animation length
     *                    gets multiplied by the ratio between the actual distance and this value
     */
    public void apply(ValueAnimator animator, float currValue, float endValue, float velocity,
    public void apply(Animator animator, float currValue, float endValue, float velocity,
            float maxDistance) {
        AnimatorProperties properties = getProperties(currValue, endValue, velocity,
                maxDistance);
@@ -168,7 +169,7 @@ public class FlingAnimationUtils {
     * @param maxDistance the maximum distance for this interaction; the maximum animation length
     *                    gets multiplied by the ratio between the actual distance and this value
     */
    public void applyDismissing(ValueAnimator animator, float currValue, float endValue,
    public void applyDismissing(Animator animator, float currValue, float endValue,
            float velocity, float maxDistance) {
        AnimatorProperties properties = getDismissingProperties(currValue, endValue, velocity,
                maxDistance);
+56 −0
Original line number Diff line number Diff line
@@ -28,6 +28,8 @@ import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewAnimationUtils;
import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator;
import android.widget.ImageView;
@@ -69,6 +71,16 @@ public class KeyguardAffordanceView extends ImageView {
    private int mCircleColor;
    private boolean mIsLeft;
    private float mArrowAlpha = 0.0f;
    private View mPreviewView;
    private float mCircleStartRadius;
    private float mMaxCircleSize;
    private Animator mPreviewClipper;
    private AnimatorListenerAdapter mClipEndListener = new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            mPreviewClipper = null;
        }
    };
    private AnimatorListenerAdapter mCircleEndListener = new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
@@ -136,6 +148,7 @@ public class KeyguardAffordanceView extends ImageView {
        super.onLayout(changed, left, top, right, bottom);
        mCenterX = getWidth() / 2;
        mCenterY = getHeight() / 2;
        mMaxCircleSize = getMaxCircleSize();
    }

    @Override
@@ -149,6 +162,10 @@ public class KeyguardAffordanceView extends ImageView {
        canvas.restore();
    }

    public void setPreviewView(View v) {
        mPreviewView = v;
    }

    private void drawArrow(Canvas canvas) {
        if (mArrowAlpha > 0) {
            canvas.save();
@@ -183,6 +200,11 @@ public class KeyguardAffordanceView extends ImageView {
    private void updateCircleColor() {
        float fraction = 0.5f + 0.5f * Math.max(0.0f, Math.min(1.0f,
                (mCircleRadius - mMinBackgroundRadius) / (0.5f * mMinBackgroundRadius)));
        if (mPreviewView != null) {
            float finishingFraction = 1 - Math.max(0, mCircleRadius - mCircleStartRadius)
                    / (mMaxCircleSize - mCircleStartRadius);
            fraction *= finishingFraction;
        }
        int color = Color.argb((int) (Color.alpha(mCircleColor) * fraction),
                Color.red(mCircleColor),
                Color.green(mCircleColor), Color.blue(mCircleColor));
@@ -191,6 +213,8 @@ public class KeyguardAffordanceView extends ImageView {

    public void finishAnimation(float velocity, final Runnable mAnimationEndRunnable) {
        cancelAnimator(mCircleAnimator);
        cancelAnimator(mPreviewClipper);
        mCircleStartRadius = mCircleRadius;
        float maxCircleSize = getMaxCircleSize();
        ValueAnimator animatorToRadius = getAnimatorToRadius(maxCircleSize);
        mFlingAnimationUtils.applyDismissing(animatorToRadius, mCircleRadius, maxCircleSize,
@@ -203,6 +227,16 @@ public class KeyguardAffordanceView extends ImageView {
        });
        animatorToRadius.start();
        setImageAlpha(0, true);
        if (mPreviewView != null) {
            mPreviewView.setVisibility(View.VISIBLE);
            mPreviewClipper = ViewAnimationUtils.createCircularReveal(
                    mPreviewView, getLeft() + mCenterX, getTop() + mCenterY, mCircleRadius,
                    maxCircleSize);
            mFlingAnimationUtils.applyDismissing(mPreviewClipper, mCircleRadius, maxCircleSize,
                    velocity, maxCircleSize);
            mPreviewClipper.addListener(mClipEndListener);
            mPreviewClipper.start();
        }
    }

    private float getMaxCircleSize() {
@@ -234,6 +268,11 @@ public class KeyguardAffordanceView extends ImageView {
            if (mCircleAnimator == null) {
                mCircleRadius = circleRadius;
                invalidate();
                if (nowHidden) {
                    if (mPreviewView != null) {
                        mPreviewView.setVisibility(View.INVISIBLE);
                    }
                }
            } else if (!mCircleWillBeHidden) {

                // We just update the end value
@@ -244,6 +283,7 @@ public class KeyguardAffordanceView extends ImageView {
            }
        } else {
            cancelAnimator(mCircleAnimator);
            cancelAnimator(mPreviewClipper);
            ValueAnimator animator = getAnimatorToRadius(circleRadius);
            Interpolator interpolator = circleRadius == 0.0f
                    ? mDisappearInterpolator
@@ -255,6 +295,22 @@ public class KeyguardAffordanceView extends ImageView {
            duration = Math.min(duration, CIRCLE_DISAPPEAR_MAX_DURATION);
            animator.setDuration(duration);
            animator.start();
            if (mPreviewView != null) {
                mPreviewView.setVisibility(View.VISIBLE);
                mPreviewClipper = ViewAnimationUtils.createCircularReveal(
                        mPreviewView, getLeft() + mCenterX, getTop() + mCenterY, mCircleRadius,
                        circleRadius);
                mPreviewClipper.setInterpolator(interpolator);
                mPreviewClipper.setDuration(duration);
                mPreviewClipper.addListener(mClipEndListener);
                mPreviewClipper.addListener(new AnimatorListenerAdapter() {
                    @Override
                    public void onAnimationEnd(Animator animation) {
                        mPreviewView.setVisibility(View.INVISIBLE);
                    }
                });
                mPreviewClipper.start();
            }
        }
    }

+6 −8
Original line number Diff line number Diff line
@@ -67,7 +67,6 @@ public class KeyguardAffordanceHelper {
    private Animator mSwipeAnimator;
    private int mMinBackgroundRadius;
    private boolean mMotionPerformedByUser;
    private PowerManager mPM;
    private AnimatorListenerAdapter mFlingEndListener = new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
@@ -89,11 +88,12 @@ public class KeyguardAffordanceHelper {
        mLeftIcon.setIsLeft(true);
        mCenterIcon = mCallback.getCenterIcon();
        mRightIcon = mCallback.getRightIcon();
        mLeftIcon.setPreviewView(mCallback.getLeftPreview());
        mRightIcon.setPreviewView(mCallback.getRightPreview());
        updateIcon(mLeftIcon, 0.0f, SWIPE_RESTING_ALPHA_AMOUNT, false);
        updateIcon(mCenterIcon, 0.0f, SWIPE_RESTING_ALPHA_AMOUNT, false);
        updateIcon(mRightIcon, 0.0f, SWIPE_RESTING_ALPHA_AMOUNT, false);
        initDimens();
        mPM = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
    }

    private void initDimens() {
@@ -334,7 +334,6 @@ public class KeyguardAffordanceHelper {
        float absTranslation = Math.abs(translation);
        if (absTranslation > Math.abs(mTranslationOnDown) + mMinTranslationAmount ||
                mMotionPerformedByUser) {
            userActivity();
            mMotionPerformedByUser = true;
        }
        if (translation != mTranslation || isReset) {
@@ -387,11 +386,6 @@ public class KeyguardAffordanceHelper {
        return translation * BACKGROUND_RADIUS_SCALE_FACTOR + mMinBackgroundRadius;
    }


    private void userActivity() {
        mPM.userActivity(SystemClock.uptimeMillis(), false);
    }

    public void animateHideLeftRightIcon() {
        updateIcon(mRightIcon, 0f, 0f, true);
        updateIcon(mLeftIcon, 0f, 0f, true);
@@ -475,5 +469,9 @@ public class KeyguardAffordanceHelper {
        KeyguardAffordanceView getCenterIcon();

        KeyguardAffordanceView getRightIcon();

        View getLeftPreview();

        View getRightPreview();
    }
}
+30 −0
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import android.provider.MediaStore;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.accessibility.AccessibilityManager;
import android.widget.FrameLayout;
import android.widget.ImageView;
@@ -40,6 +41,7 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.FlashlightController;
import com.android.systemui.statusbar.KeyguardAffordanceView;
import com.android.systemui.statusbar.policy.PreviewInflater;

/**
 * Implementation for the bottom area of the Keyguard, including camera/phone affordance and status
@@ -61,6 +63,10 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
    private KeyguardAffordanceView mPhoneImageView;
    private KeyguardAffordanceView mLockIcon;
    private View mIndicationText;
    private ViewGroup mPreviewContainer;

    private View mPhonePreview;
    private View mCameraPreview;

    private ActivityStarter mActivityStarter;
    private UnlockMethodCache mUnlockMethodCache;
@@ -88,6 +94,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
    protected void onFinishInflate() {
        super.onFinishInflate();
        mLockPatternUtils = new LockPatternUtils(mContext);
        mPreviewContainer = (ViewGroup) findViewById(R.id.preview_container);
        mCameraImageView = (KeyguardAffordanceView) findViewById(R.id.camera_button);
        mPhoneImageView = (KeyguardAffordanceView) findViewById(R.id.phone_button);
        mLockIcon = (KeyguardAffordanceView) findViewById(R.id.lock_icon);
@@ -101,6 +108,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
        updateTrust();
        setClipChildren(false);
        setClipToPadding(false);
        inflatePreviews();
    }

    public void setActivityStarter(ActivityStarter activityStarter) {
@@ -239,6 +247,14 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
        return mCameraImageView;
    }

    public View getPhonePreview() {
        return mPhonePreview;
    }

    public View getCameraPreview() {
        return mCameraPreview;
    }

    public KeyguardAffordanceView getLockIcon() {
        return mLockIcon;
    }
@@ -258,6 +274,20 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL
        updateCameraVisibility();
    }

    private void inflatePreviews() {
        PreviewInflater inflater = new PreviewInflater(mContext, new LockPatternUtils(mContext));
        mPhonePreview = inflater.inflatePreview(PHONE_INTENT);
        mCameraPreview = inflater.inflatePreview(getCameraIntent());
        if (mPhonePreview != null) {
            mPreviewContainer.addView(mPhonePreview);
            mPhonePreview.setVisibility(View.INVISIBLE);
        }
        if (mCameraPreview != null) {
            mPreviewContainer.addView(mCameraPreview);
            mCameraPreview.setVisibility(View.INVISIBLE);
        }
    }

    private final BroadcastReceiver mDevicePolicyReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
            post(new Runnable() {
Loading