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

Commit 42617c37 authored by Winson Chung's avatar Winson Chung Committed by Android (Google) Code Review
Browse files

Merge "Cleaning up some old animation code, only setting view properties that have changed."

parents bc2a6dff b5ddfc37
Loading
Loading
Loading
Loading
+30 −4
Original line number Diff line number Diff line
@@ -30,18 +30,21 @@ import android.content.pm.ActivityInfo;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.Pair;
import android.view.Display;
import android.view.DisplayInfo;
import android.view.Surface;
import android.view.SurfaceControl;
import android.view.WindowManager;

@@ -55,6 +58,8 @@ import java.util.Random;
 * a point of injection when testing UI.
 */
public class SystemServicesProxy {
    final static String TAG = "SystemServicesProxy";

    ActivityManager mAm;
    AppWidgetManager mAwm;
    PackageManager mPm;
@@ -67,6 +72,8 @@ public class SystemServicesProxy {
    ComponentName mAssistComponent;

    Bitmap mDummyIcon;
    Paint mBgProtectionPaint;
    Canvas mBgProtectionCanvas;

    /** Private constructor */
    public SystemServicesProxy(Context context) {
@@ -80,6 +87,12 @@ public class SystemServicesProxy {
        mDisplay = mWm.getDefaultDisplay();
        mRecentsPackage = context.getPackageName();

        // Create the protection paints
        mBgProtectionPaint = new Paint();
        mBgProtectionPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_ATOP));
        mBgProtectionPaint.setColor(0xFFffffff);
        mBgProtectionCanvas = new Canvas();

        // Resolve the assist intent
        Intent assist = mSm.getAssistIntent(context, false);
        if (assist != null) {
@@ -195,7 +208,20 @@ public class SystemServicesProxy {
            return thumbnail;
        }

        return mAm.getTaskTopThumbnail(taskId);
        Bitmap thumbnail = mAm.getTaskTopThumbnail(taskId);
        if (thumbnail != null) {
            // We use a dumb heuristic for now, if the thumbnail is purely transparent in the top
            // left pixel, then assume the whole thumbnail is transparent. Generally, proper
            // screenshots are always composed onto a bitmap that has no alpha.
            if (Color.alpha(thumbnail.getPixel(0, 0)) == 0) {
                mBgProtectionCanvas.setBitmap(thumbnail);
                mBgProtectionCanvas.drawRect(0, 0, thumbnail.getWidth(), thumbnail.getHeight(),
                        mBgProtectionPaint);
                mBgProtectionCanvas.setBitmap(null);
                Log.e(TAG, "Invalid screenshot detected from getTaskThumbnail()");
            }
        }
        return thumbnail;
    }

    /** Moves a task to the front with the specified activity options */
+12 −11
Original line number Diff line number Diff line
@@ -22,10 +22,10 @@ import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewPropertyAnimator;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
@@ -103,23 +103,26 @@ class TaskBarView extends FrameLayout {
    }

    /** Synchronizes this bar view's properties with the task's transform */
    void updateViewPropertiesToTaskTransform(TaskViewTransform animateFromTransform,
                                             TaskViewTransform toTransform, int duration) {
    void updateViewPropertiesToTaskTransform(TaskViewTransform toTransform, int duration) {
        if (duration > 0 && (mDismissButton.getVisibility() == View.VISIBLE)) {
            if (animateFromTransform != null) {
                mDismissButton.setAlpha(animateFromTransform.dismissAlpha);
            }
            mDismissButton.animate()
                    .alpha(toTransform.dismissAlpha)
            ViewPropertyAnimator anim = mDismissButton.animate();

            // Animate to the final state
            if (toTransform.hasDismissAlphaChangedFrom(mDismissButton.getAlpha())) {
                anim.alpha(toTransform.dismissAlpha)
                    .setStartDelay(0)
                    .setDuration(duration)
                    .setInterpolator(mConfig.fastOutSlowInInterpolator)
                    .withLayer()
                    .start();
            }
        } else {
            // Set the changed properties
            if (toTransform.hasDismissAlphaChangedFrom(mDismissButton.getAlpha())) {
                mDismissButton.setAlpha(toTransform.dismissAlpha);
            }
        }
    }

    /** Binds the bar view to the task */
    void rebindToTask(Task t, boolean animate) {
@@ -169,7 +172,6 @@ class TaskBarView extends FrameLayout {
                .setStartDelay(delay)
                .setInterpolator(mConfig.fastOutSlowInInterpolator)
                .setDuration(mConfig.taskBarEnterAnimDuration)
                .withLayer()
                .withEndAction(postAnimRunnable)
                .start();
    }
@@ -182,7 +184,6 @@ class TaskBarView extends FrameLayout {
                .setStartDelay(0)
                .setInterpolator(mConfig.fastOutLinearInInterpolator)
                .setDuration(mConfig.taskBarExitAnimDuration)
                .withLayer()
                .withStartAction(preAnimRunnable)
                .withEndAction(new Runnable() {
                    @Override
+5 −5
Original line number Diff line number Diff line
@@ -322,7 +322,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
                        if (mStackViewsAnimationDuration > 0 && i != 0) {
                            int fromIndex = (transform.t < 0) ? (visibleRange[0] - 1) :
                                    (visibleRange[1] + 1);
                            tv.updateViewPropertiesToTaskTransform(null,
                            tv.updateViewPropertiesToTaskTransform(
                                    getStackTransform(fromIndex, stackScroll), 0);
                        }
                    }
@@ -343,7 +343,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
                if (taskIndex < 0 || !mTaskTransforms.get(taskIndex).visible) {
                    mViewPool.returnViewToPool(tv);
                } else {
                    tv.updateViewPropertiesToTaskTransform(null, mTaskTransforms.get(taskIndex),
                    tv.updateViewPropertiesToTaskTransform(mTaskTransforms.get(taskIndex),
                            mStackViewsAnimationDuration);
                }
            }
@@ -996,7 +996,7 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
                    // Compose a new transform to fade and slide the new task in
                    TaskViewTransform fromTransform = new TaskViewTransform(toTransform);
                    tv.prepareTaskTransformForFilterTaskHidden(fromTransform);
                    tv.updateViewPropertiesToTaskTransform(null, fromTransform, 0);
                    tv.updateViewPropertiesToTaskTransform(fromTransform, 0);

                    int startDelay = offset *
                            Constants.Values.TaskStackView.FilterStartDelay;
@@ -1059,13 +1059,13 @@ public class TaskStackView extends FrameLayout implements TaskStack.TaskStackCal
                                    for (final TaskView tv : childViewTransforms.keySet()) {
                                        Pair<Integer, TaskViewTransform> t = childViewTransforms.get(tv);
                                        tv.animate().setStartDelay(t.first);
                                        tv.updateViewPropertiesToTaskTransform(null, t.second, duration);
                                        tv.updateViewPropertiesToTaskTransform(t.second, duration);
                                    }
                                }
                            }
                        }
                    });
            tv.updateViewPropertiesToTaskTransform(null, t.second, duration);
            tv.updateViewPropertiesToTaskTransform(t.second, duration);
        }
    }

+48 −29
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.graphics.RectF;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewPropertyAnimator;
import android.view.animation.AccelerateInterpolator;
import android.widget.FrameLayout;
import com.android.systemui.R;
@@ -163,50 +164,64 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, View.On
    }

    /** Synchronizes this view's properties with the task's transform */
    void updateViewPropertiesToTaskTransform(TaskViewTransform animateFromTransform,
                                             TaskViewTransform toTransform, int duration) {
    void updateViewPropertiesToTaskTransform(TaskViewTransform toTransform, int duration) {
        if (Console.Enabled) {
            Console.log(Constants.Log.UI.Draw, "[TaskView|updateViewPropertiesToTaskTransform]",
                    "duration: " + duration, Console.AnsiPurple);
        }

        // Update the bar view
        mBarView.updateViewPropertiesToTaskTransform(animateFromTransform, toTransform, duration);
        mBarView.updateViewPropertiesToTaskTransform(toTransform, duration);

        // Update this task view
        // Check to see if any properties have changed, and update the task view
        if (duration > 0) {
            if (animateFromTransform != null) {
                setTranslationY(animateFromTransform.translationY);
                if (Constants.DebugFlags.App.EnableShadows) {
                    setTranslationZ(animateFromTransform.translationZ);
                }
                setScaleX(animateFromTransform.scale);
                setScaleY(animateFromTransform.scale);
                setAlpha(animateFromTransform.alpha);
            ViewPropertyAnimator anim = animate();
            boolean useLayers = false;

            // Animate to the final state
            if (toTransform.hasTranslationYChangedFrom(getTranslationY())) {
                anim.translationY(toTransform.translationY);
            }
            if (Constants.DebugFlags.App.EnableShadows) {
                animate().translationZ(toTransform.translationZ);
            if (Constants.DebugFlags.App.EnableShadows &&
                    toTransform.hasTranslationZChangedFrom(getTranslationZ())) {
                anim.translationZ(toTransform.translationZ);
            }
            animate().translationY(toTransform.translationY)
                    .scaleX(toTransform.scale)
            if (toTransform.hasScaleChangedFrom(getScaleX())) {
                anim.scaleX(toTransform.scale)
                    .scaleY(toTransform.scale)
                    .alpha(toTransform.alpha)
                    .setStartDelay(0)
                    .setUpdateListener(mUpdateDimListener);
                useLayers = true;
            }
            if (toTransform.hasAlphaChangedFrom(getAlpha())) {
                // Use layers if we animate alpha
                anim.alpha(toTransform.alpha);
                useLayers = true;
            }
            if (useLayers) {
                anim.withLayer();
            }
            anim.setStartDelay(0)
                .setDuration(duration)
                .setInterpolator(mConfig.fastOutSlowInInterpolator)
                    .setUpdateListener(mUpdateDimListener)
                .start();
        } else {
            // Set the changed properties
            if (toTransform.hasTranslationYChangedFrom(getTranslationY())) {
                setTranslationY(toTransform.translationY);
            if (Constants.DebugFlags.App.EnableShadows) {
            }
            if (Constants.DebugFlags.App.EnableShadows &&
                    toTransform.hasTranslationZChangedFrom(getTranslationZ())) {
                setTranslationZ(toTransform.translationZ);
            }
            if (toTransform.hasScaleChangedFrom(getScaleX())) {
                setScaleX(toTransform.scale);
                setScaleY(toTransform.scale);
                updateDimOverlayFromScale();
            }
            if (toTransform.hasAlphaChangedFrom(getAlpha())) {
                setAlpha(toTransform.alpha);
            }
        updateDimOverlayFromScale();
        invalidate();
        }
    }

    /** Resets this view's properties */
@@ -298,6 +313,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, View.On
                        .scaleY(transform.scale)
                        .translationY(transform.translationY)
                        .setStartDelay(0)
                        .setUpdateListener(null)
                        .setInterpolator(mConfig.linearOutSlowInInterpolator)
                        .setDuration(475)
                        .withLayer()
@@ -330,6 +346,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, View.On
                    .scaleY(transform.scale)
                    .translationY(transform.translationY)
                    .setStartDelay(delay)
                    .setUpdateListener(null)
                    .setInterpolator(mConfig.quintOutInterpolator)
                    .setDuration(mConfig.taskViewEnterFromHomeDuration)
                    .withLayer()
@@ -343,6 +360,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, View.On
        animate()
                .translationY(ctx.offscreenTranslationY)
                .setStartDelay(0)
                .setUpdateListener(null)
                .setInterpolator(mConfig.fastOutLinearInInterpolator)
                .setDuration(mConfig.taskViewExitToHomeDuration)
                .withLayer()
@@ -383,6 +401,7 @@ public class TaskView extends FrameLayout implements Task.TaskCallbacks, View.On
        animate().translationX(mConfig.taskViewRemoveAnimTranslationXPx)
            .alpha(0f)
            .setStartDelay(0)
            .setUpdateListener(null)
            .setInterpolator(mConfig.fastOutSlowInInterpolator)
            .setDuration(mConfig.taskViewRemoveAnimDuration)
            .withLayer()
+17 −0
Original line number Diff line number Diff line
@@ -45,6 +45,23 @@ public class TaskViewTransform {
        t = o.t;
    }

    /** Convenience functions to compare against current property values */
    public boolean hasAlphaChangedFrom(float v) {
        return (Float.compare(alpha, v) != 0);
    }
    public boolean hasDismissAlphaChangedFrom(float v) {
        return (Float.compare(dismissAlpha, v) != 0);
    }
    public boolean hasScaleChangedFrom(float v) {
        return (Float.compare(scale, v) != 0);
    }
    public boolean hasTranslationYChangedFrom(float v) {
        return (Float.compare(translationY, v) != 0);
    }
    public boolean hasTranslationZChangedFrom(float v) {
        return (Float.compare(translationZ, v) != 0);
    }

    @Override
    public String toString() {
        return "TaskViewTransform y: " + translationY + " z: " + translationZ + " scale: " + scale +