Loading packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java +38 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -294,6 +296,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { */ public void setPinned(boolean pinned) { mIsPinned = pinned; setChronometerRunning(mLastChronometerRunning); } public boolean isPinned() { Loading @@ -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); } Loading packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +17 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); } } Loading @@ -2309,6 +2325,7 @@ public class NotificationStackScrollLayout extends ViewGroup } mStackScrollAlgorithm.onReset(view); updateAnimationState(view); updateChronometerForChild(view); } private void updateScrollPositionOnExpandInBottom(ExpandableView view) { Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java +38 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -294,6 +296,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { */ public void setPinned(boolean pinned) { mIsPinned = pinned; setChronometerRunning(mLastChronometerRunning); } public boolean isPinned() { Loading @@ -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); } Loading
packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +17 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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); } } Loading @@ -2309,6 +2325,7 @@ public class NotificationStackScrollLayout extends ViewGroup } mStackScrollAlgorithm.onReset(view); updateAnimationState(view); updateChronometerForChild(view); } private void updateScrollPositionOnExpandInBottom(ExpandableView view) { Loading