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

Commit 98713a4f authored by Selim Cinek's avatar Selim Cinek
Browse files

Stopping chronometers now when the shade is closed

Bug: 23978877
Change-Id: I01a9e756d7eeef7aa239ca0c67d4084624aaed12
parent 70ea8578
Loading
Loading
Loading
Loading
+38 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.view.View;
import android.view.ViewStub;
import android.view.accessibility.AccessibilityEvent;
import android.view.animation.LinearInterpolator;
import android.widget.Chronometer;
import android.widget.ImageView;

import com.android.systemui.R;
@@ -88,6 +89,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
    private NotificationGuts mGuts;
    private StatusBarNotification mStatusBarNotification;
    private boolean mIsHeadsUp;
    private boolean mLastChronometerRunning = true;
    private View mExpandButton;
    private View mExpandButtonDivider;
    private ViewStub mExpandButtonStub;
@@ -294,6 +296,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
     */
    public void setPinned(boolean pinned) {
        mIsPinned = pinned;
        setChronometerRunning(mLastChronometerRunning);
    }

    public boolean isPinned() {
@@ -319,6 +322,41 @@ public class ExpandableNotificationRow extends ActivatableNotificationView {
        return mJustClicked;
    }

    public void setChronometerRunning(boolean running) {
        mLastChronometerRunning = running;
        setChronometerRunning(running, mPrivateLayout);
        setChronometerRunning(running, mPublicLayout);
        if (mChildrenContainer != null) {
            List<ExpandableNotificationRow> notificationChildren =
                    mChildrenContainer.getNotificationChildren();
            for (int i = 0; i < notificationChildren.size(); i++) {
                ExpandableNotificationRow child = notificationChildren.get(i);
                child.setChronometerRunning(running);
            }
        }
    }

    private void setChronometerRunning(boolean running, NotificationContentView layout) {
        if (layout != null) {
            running = running || isPinned();
            View contractedChild = layout.getContractedChild();
            View expandedChild = layout.getExpandedChild();
            View headsUpChild = layout.getHeadsUpChild();
            setChronometerRunningForChild(running, contractedChild);
            setChronometerRunningForChild(running, expandedChild);
            setChronometerRunningForChild(running, headsUpChild);
        }
    }

    private void setChronometerRunningForChild(boolean running, View child) {
        if (child != null) {
            View chronometer = child.findViewById(com.android.internal.R.id.chronometer);
            if (chronometer instanceof Chronometer) {
                ((Chronometer) chronometer).setStarted(running);
            }
        }
    }

    public interface ExpansionLogger {
        public void logNotificationExpansion(String key, boolean userAction, boolean expanded);
    }
+17 −0
Original line number Diff line number Diff line
@@ -1778,6 +1778,7 @@ public class NotificationStackScrollLayout extends ViewGroup
        ((ExpandableView) child).setOnHeightChangedListener(this);
        generateAddAnimation(child, false /* fromMoreCard */);
        updateAnimationState(child);
        updateChronometerForChild(child);
        if (canChildBeDismissed(child)) {
            // Make sure the dismissButton is visible and not in the animated state.
            // We need to do this to avoid a race where a clearable notification is added after the
@@ -2287,6 +2288,21 @@ public class NotificationStackScrollLayout extends ViewGroup
        mStackScrollAlgorithm.setIsExpanded(isExpanded);
        if (changed) {
            updateNotificationAnimationStates();
            updateChronometers();
        }
    }

    private void updateChronometers() {
        int childCount = getChildCount();
        for (int i = 0; i < childCount; i++) {
            updateChronometerForChild(getChildAt(i));
        }
    }

    private void updateChronometerForChild(View child) {
        if (child instanceof ExpandableNotificationRow) {
            ExpandableNotificationRow row = (ExpandableNotificationRow) child;
            row.setChronometerRunning(mIsExpanded);
        }
    }

@@ -2309,6 +2325,7 @@ public class NotificationStackScrollLayout extends ViewGroup
        }
        mStackScrollAlgorithm.onReset(view);
        updateAnimationState(view);
        updateChronometerForChild(view);
    }

    private void updateScrollPositionOnExpandInBottom(ExpandableView view) {