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

Commit 65dcd5ff authored by John Spurlock's avatar John Spurlock Committed by Android Git Automerger
Browse files

am 77de176b: am fc6902b6: Merge "StatusBar: Improve framerate on reveal animation." into jb-dev

* commit '77de176b':
  StatusBar: Improve framerate on reveal animation.
parents 0fc37e46 77de176b
Loading
Loading
Loading
Loading
+1 −2
Original line number Diff line number Diff line
@@ -33,9 +33,8 @@

    <include layout="@layout/status_bar_expanded"
        android:layout_width="@dimen/notification_panel_width"
        android:layout_height="match_parent"
        android:layout_height="0dp"
        android:layout_gravity="center_horizontal|top"
        android:visibility="invisible"
        />

</com.android.systemui.statusbar.phone.StatusBarWindowView>
+1 −1
Original line number Diff line number Diff line
@@ -37,7 +37,7 @@

        <include layout="@layout/status_bar_expanded_header"
            android:layout_width="match_parent"
            android:layout_height="48dp"
            android:layout_height="@dimen/notification_panel_header_height"
            />
     
        <ScrollView
+2 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@
    android:focusable="true"
    android:descendantFocusability="afterDescendants"
    android:fitsSystemWindows="true"
    android:background="@android:color/transparent"
    >

    <include layout="@layout/status_bar"
@@ -33,8 +34,7 @@

    <include layout="@layout/status_bar_expanded"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:visibility="invisible"
        android:layout_height="0dp"
        />

</com.android.systemui.statusbar.phone.StatusBarWindowView>
+69 −26
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.graphics.PixelFormat;
import android.graphics.PorterDuff;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.NinePatchDrawable;
import android.inputmethodservice.InputMethodService;
import android.os.IBinder;
import android.os.Message;
@@ -161,6 +162,7 @@ public class PhoneStatusBar extends BaseStatusBar {
    View mExpandedContents;
    int mNotificationPanelMarginBottomPx, mNotificationPanelMarginLeftPx;
    int mNotificationPanelGravity;
    int mNotificationPanelMinHeight;

    // top bar
    View mClearButton;
@@ -208,6 +210,8 @@ public class PhoneStatusBar extends BaseStatusBar {
    long mAnimLastTimeNanos;
    boolean mAnimatingReveal = false;
    int mViewDelta;
    float mFlingVelocity;
    int mFlingY;
    int[] mAbsPos = new int[2];
    Runnable mPostCollapseCleanup = null;

@@ -236,6 +240,33 @@ public class PhoneStatusBar extends BaseStatusBar {
        }
    };

    private final Runnable mStartRevealAnimation = new Runnable() {
        @Override
        public void run() {
            mAnimAccel = mExpandAccelPx;
            mAnimVel = mFlingExpandMinVelocityPx;
            mAnimY = getStatusBarHeight();
            updateExpandedViewPos((int)mAnimY);

            mAnimating = true;
            mAnimatingReveal = true;
            resetLastAnimTime();
            mChoreographer.removeCallbacks(Choreographer.CALLBACK_ANIMATION,
                mAnimationCallback, null);
            mChoreographer.removeCallbacks(Choreographer.CALLBACK_ANIMATION,
                mRevealAnimationCallback, null);
            mChoreographer.postCallback(Choreographer.CALLBACK_ANIMATION,
                mRevealAnimationCallback, null);
        }
    };

    private final Runnable mPerformFling = new Runnable() {
        @Override
        public void run() {
            performFling(mFlingY + mViewDelta, mFlingVelocity, false);
        }
    };

    private class ExpandedDialog extends Dialog {
        ExpandedDialog(Context context) {
            super(context, com.android.internal.R.style.Theme_Translucent_NoTitleBar);
@@ -321,7 +352,6 @@ public class PhoneStatusBar extends BaseStatusBar {
            mNotificationPanel.setBackground(new FastColorDrawable(context.getResources().getColor(
                    R.color.notification_panel_solid_background)));
        }

        if (ENABLE_INTRUDERS) {
            mIntruderAlertView = (IntruderAlertView) View.inflate(context, R.layout.intruder_alert, null);
            mIntruderAlertView.setVisibility(View.GONE);
@@ -1039,14 +1069,13 @@ public class PhoneStatusBar extends BaseStatusBar {
        }
    };

    private void makeExpandedVisible() {
    private void makeExpandedVisible(boolean revealAfterDraw) {
        if (SPEW) Slog.d(TAG, "Make expanded visible: expanded visible=" + mExpandedVisible);
        if (mExpandedVisible) {
            return;
        }

        mExpandedVisible = true;
        mNotificationPanel.setVisibility(View.VISIBLE);
        makeSlippery(mNavigationBarView, true);

        updateExpandedViewPos(EXPANDED_LEAVE_ALONE);
@@ -1060,6 +1089,12 @@ public class PhoneStatusBar extends BaseStatusBar {
        final WindowManager wm = WindowManagerImpl.getDefault();
        wm.updateViewLayout(mStatusBarWindow, lp);

        // Updating the window layout will force an expensive traversal/redraw.
        // Kick off the reveal animation after this is complete to avoid animation latency.
        if (revealAfterDraw) {
            mHandler.post(mStartRevealAnimation);
        }

        visibilityChanged(true);
    }

@@ -1145,7 +1180,7 @@ public class PhoneStatusBar extends BaseStatusBar {
        }

        mExpanded = true;
        makeExpandedVisible();
        makeExpandedVisible(false);
        updateExpandedViewPos(EXPANDED_FULL_OPEN);

        if (false) postStartTracing();
@@ -1160,7 +1195,6 @@ public class PhoneStatusBar extends BaseStatusBar {
        }
        mExpandedVisible = false;
        visibilityChanged(false);
        mNotificationPanel.setVisibility(View.INVISIBLE);
        makeSlippery(mNavigationBarView, false);

        // Shrink the window to the size of the status bar only
@@ -1241,6 +1275,8 @@ public class PhoneStatusBar extends BaseStatusBar {
    }

    void stopTracking() {
        if (!mTracking)
            return;
        mTracking = false;
        mPile.setLayerType(View.LAYER_TYPE_NONE, null);
        mVelocityTracker.recycle();
@@ -1265,7 +1301,7 @@ public class PhoneStatusBar extends BaseStatusBar {
        if (SPEW) {
            Slog.d(TAG, "doRevealAnimation: dt=" + (frameTimeNanos - mAnimLastTimeNanos));
        }
        final int h = getCloseViewHeight() + getStatusBarHeight();
        final int h = mNotificationPanelMinHeight;
        if (mAnimatingReveal && mAnimating && mAnimY < h) {
            incrementAnim(frameTimeNanos);
            if (mAnimY >= h) {
@@ -1290,20 +1326,7 @@ public class PhoneStatusBar extends BaseStatusBar {
        mPile.setLayerType(View.LAYER_TYPE_HARDWARE, null);
        mVelocityTracker = VelocityTracker.obtain();
        if (opening) {
            mAnimAccel = mExpandAccelPx;
            mAnimVel = mFlingExpandMinVelocityPx;
            mAnimY = getStatusBarHeight();
            updateExpandedViewPos((int)mAnimY);
            mAnimating = true;
            mAnimatingReveal = true;
            resetLastAnimTime();
            mChoreographer.removeCallbacks(Choreographer.CALLBACK_ANIMATION,
                    mAnimationCallback, null);
            mChoreographer.removeCallbacks(Choreographer.CALLBACK_ANIMATION,
                    mRevealAnimationCallback, null);
            mChoreographer.postCallback(Choreographer.CALLBACK_ANIMATION,
                    mRevealAnimationCallback, null);
            makeExpandedVisible();
            makeExpandedVisible(true);
        } else {
            // it's open, close it?
            if (mAnimating) {
@@ -1317,7 +1340,7 @@ public class PhoneStatusBar extends BaseStatusBar {

    void performFling(int y, float vel, boolean always) {
        if (CHATTY) {
            Slog.d(TAG, "panel: will fling, y=" + y + " vel=" + vel);
            Slog.d(TAG, "panel: will fling, y=" + y + " vel=" + vel + " mExpanded=" + mExpanded);
        }

        mAnimatingReveal = false;
@@ -1386,7 +1409,7 @@ public class PhoneStatusBar extends BaseStatusBar {
    boolean interceptTouchEvent(MotionEvent event) {
        if (SPEW) {
            Slog.d(TAG, "Touch: rawY=" + event.getRawY() + " event=" + event + " mDisabled="
                + mDisabled);
                + mDisabled + " mTracking=" + mTracking);
        } else if (CHATTY) {
            if (event.getAction() != MotionEvent.ACTION_MOVE) {
                Slog.d(TAG, String.format(
@@ -1431,9 +1454,8 @@ public class PhoneStatusBar extends BaseStatusBar {
            }
        } else if (mTracking) {
            trackMovement(event);
            final int minY = statusBarSize + getCloseViewHeight();
            if (action == MotionEvent.ACTION_MOVE) {
                if (mAnimatingReveal && (y + mViewDelta) < minY) {
                if (mAnimatingReveal && (y + mViewDelta) < mNotificationPanelMinHeight) {
                    // nothing
                } else  {
                    mAnimatingReveal = false;
@@ -1467,7 +1489,15 @@ public class PhoneStatusBar extends BaseStatusBar {
                        vel));
                }

                performFling(y + mViewDelta, vel, false);
                if (mTrackingPosition == mNotificationPanelMinHeight) {
                    // start the fling from the tracking position, ignore y and view delta
                    mFlingY = mTrackingPosition;
                    mViewDelta = 0;
                } else {
                    mFlingY = y;
                }
                mFlingVelocity = vel;
                mHandler.post(mPerformFling);
            }

        }
@@ -1870,7 +1900,6 @@ public class PhoneStatusBar extends BaseStatusBar {
                    + " mTrackingPosition=" + mTrackingPosition
                    + " gravity=" + mNotificationPanelGravity);
        }

        int panelh = 0;
        final int disph = getExpandedViewMaxHeight();

@@ -2156,10 +2185,24 @@ public class PhoneStatusBar extends BaseStatusBar {
        if (mNotificationPanelGravity <= 0) {
            mNotificationPanelGravity = Gravity.CENTER_VERTICAL | Gravity.TOP;
        }
        mNotificationPanelMinHeight =
              res.getDimensionPixelSize(R.dimen.notification_panel_padding_top)
            + res.getDimensionPixelSize(R.dimen.notification_panel_header_height)
            + res.getDimensionPixelSize(R.dimen.close_handle_underlap)
            + getNinePatchPadding(res.getDrawable(R.drawable.notification_panel_bg)).bottom;

        if (false) Slog.v(TAG, "updateResources");
    }

    private static Rect getNinePatchPadding(Drawable d) {
        Rect padding = new Rect();
        if (d instanceof NinePatchDrawable) {
            NinePatchDrawable ninePatch = (NinePatchDrawable) d;
            ninePatch.getPadding(padding);
        }
        return padding;
    }

    //
    // tracing
    //