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

Commit 0260c756 authored by Selim Cinek's avatar Selim Cinek
Browse files

Resetting the scroll position of the media players when allowed

Previously the scroll position would never be reset anymore
unless the user actively did so. We're now resetting the position
whenever the visual stability manager tells us we're allowed to
do so.

Bug: 154137987
Test: atest SystemUITests
Change-Id: Ifd5858f47827610a64a9a12cff777bd2440334a9
parent 8ae0cfe3
Loading
Loading
Loading
Loading
+13 −3
Original line number Diff line number Diff line
@@ -42,10 +42,10 @@ class MediaViewManager @Inject constructor(
    val mediaCarousel: HorizontalScrollView
    private val mediaContent: ViewGroup
    private val mediaPlayers: MutableMap<String, MediaControlPanel> = mutableMapOf()
    private val visualStabilityCallback = ::reorderAllPlayers
    private val visualStabilityCallback : VisualStabilityManager.Callback
    private var activeMediaIndex: Int = 0
    private var needsReordering: Boolean = false
    private var scrollIntoCurrentMedia: Int = 0

    private var currentlyExpanded = true
        set(value) {
            if (field != value) {
@@ -75,6 +75,16 @@ class MediaViewManager @Inject constructor(
        mediaCarousel = inflateMediaCarousel()
        mediaCarousel.setOnScrollChangeListener(scrollChangedListener)
        mediaContent = mediaCarousel.requireViewById(R.id.media_carousel)
        visualStabilityCallback = VisualStabilityManager.Callback {
            if (needsReordering) {
                needsReordering = false
                reorderAllPlayers()
            }
            // Let's reset our scroll position
            mediaCarousel.scrollX = 0
        }
        visualStabilityManager.addReorderingAllowedCallback(visualStabilityCallback,
                true /* persistent */)
        mediaManager.addListener(object : MediaDataManager.Listener {
            override fun onMediaDataLoaded(key: String, data: MediaData) {
                updateView(key, data)
@@ -169,7 +179,7 @@ class MediaViewManager @Inject constructor(
                mediaContent.removeView(existingPlayer.view?.player)
                mediaContent.addView(existingPlayer.view?.player, 0)
            } else {
                visualStabilityManager.addReorderingAllowedCallback(visualStabilityCallback)
                needsReordering = true
            }
        }
        existingPlayer.bind(data)
+6 −3
Original line number Diff line number Diff line
@@ -195,13 +195,15 @@ public class NotificationViewHierarchyManager implements DynamicPrivacyControlle
                boolean wasChildInGroup = ent.isChildInGroup();
                if (isChildInGroup && !wasChildInGroup) {
                    isChildInGroup = wasChildInGroup;
                    mVisualStabilityManager.addGroupChangesAllowedCallback(mEntryManager);
                    mVisualStabilityManager.addGroupChangesAllowedCallback(mEntryManager,
                            false /* persistent */);
                } else if (!isChildInGroup && wasChildInGroup) {
                    // We allow grouping changes if the group was collapsed
                    if (mGroupManager.isLogicalGroupExpanded(ent.getSbn())) {
                        isChildInGroup = wasChildInGroup;
                        parent = ent.getRow().getNotificationParent().getEntry();
                        mVisualStabilityManager.addGroupChangesAllowedCallback(mEntryManager);
                        mVisualStabilityManager.addGroupChangesAllowedCallback(mEntryManager,
                                false /* persistent */);
                    }
                }
            }
@@ -286,7 +288,8 @@ public class NotificationViewHierarchyManager implements DynamicPrivacyControlle
                if (mVisualStabilityManager.canReorderNotification(targetChild)) {
                    mListContainer.changeViewPosition(targetChild, i);
                } else {
                    mVisualStabilityManager.addReorderingAllowedCallback(mEntryManager);
                    mVisualStabilityManager.addReorderingAllowedCallback(mEntryManager,
                            false  /* persistent */);
                }
            }
            j++;
+28 −7
Original line number Diff line number Diff line
@@ -43,7 +43,9 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener, Dumpabl
    private static final long TEMPORARY_REORDERING_ALLOWED_DURATION = 1000;

    private final ArrayList<Callback> mReorderingAllowedCallbacks = new ArrayList<>();
    private final ArraySet<Callback> mPersistentReorderingCallbacks = new ArraySet<>();
    private final ArrayList<Callback> mGroupChangesAllowedCallbacks = new ArrayList<>();
    private final ArraySet<Callback> mPersistentGroupCallbacks = new ArraySet<>();
    private final Handler mHandler;

    private boolean mPanelExpanded;
@@ -85,8 +87,15 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener, Dumpabl

    /**
     * Add a callback to invoke when reordering is allowed again.
     *
     * @param callback the callback to add
     * @param persistent {@code true} if this callback should this callback be persisted, otherwise
     *                               it will be removed after a single invocation
     */
    public void addReorderingAllowedCallback(Callback callback) {
    public void addReorderingAllowedCallback(Callback callback, boolean persistent) {
        if (persistent) {
            mPersistentReorderingCallbacks.add(callback);
        }
        if (mReorderingAllowedCallbacks.contains(callback)) {
            return;
        }
@@ -95,8 +104,15 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener, Dumpabl

    /**
     * Add a callback to invoke when group changes are allowed again.
     *
     * @param callback the callback to add
     * @param persistent {@code true} if this callback should this callback be persisted, otherwise
     *                               it will be removed after a single invocation
     */
    public void addGroupChangesAllowedCallback(Callback callback) {
    public void addGroupChangesAllowedCallback(Callback callback, boolean persistent) {
        if (persistent) {
            mPersistentGroupCallbacks.add(callback);
        }
        if (mGroupChangesAllowedCallbacks.contains(callback)) {
            return;
        }
@@ -136,21 +152,26 @@ public class VisualStabilityManager implements OnHeadsUpChangedListener, Dumpabl
        boolean changedToTrue = reorderingAllowed && !mReorderingAllowed;
        mReorderingAllowed = reorderingAllowed;
        if (changedToTrue) {
            notifyChangeAllowed(mReorderingAllowedCallbacks);
            notifyChangeAllowed(mReorderingAllowedCallbacks, mPersistentReorderingCallbacks);
        }
        boolean groupChangesAllowed = (!mScreenOn || !mPanelExpanded) && !mPulsing;
        changedToTrue = groupChangesAllowed && !mGroupChangedAllowed;
        mGroupChangedAllowed = groupChangesAllowed;
        if (changedToTrue) {
            notifyChangeAllowed(mGroupChangesAllowedCallbacks);
            notifyChangeAllowed(mGroupChangesAllowedCallbacks, mPersistentGroupCallbacks);
        }
    }

    private void notifyChangeAllowed(ArrayList<Callback> callbacks) {
    private void notifyChangeAllowed(ArrayList<Callback> callbacks,
            ArraySet<Callback> persistentCallbacks) {
        for (int i = 0; i < callbacks.size(); i++) {
            callbacks.get(i).onChangeAllowed();
            Callback callback = callbacks.get(i);
            callback.onChangeAllowed();
            if (!persistentCallbacks.contains(callback)) {
                callbacks.remove(callback);
                i--;
            }
        }
        callbacks.clear();
    }

    /**
+2 −1
Original line number Diff line number Diff line
@@ -463,7 +463,8 @@ public class NotificationChildrenContainer extends ViewGroup {
                    mAttachedChildren.add(i, desiredChild);
                    result = true;
                } else {
                    visualStabilityManager.addReorderingAllowedCallback(callback);
                    visualStabilityManager.addReorderingAllowedCallback(callback,
                            false /* persistent */);
                }
            }
        }
+2 −1
Original line number Diff line number Diff line
@@ -439,7 +439,8 @@ public class HeadsUpManagerPhone extends HeadsUpManager implements Dumpable,
                        // time out anyway
                        && !entry.showingPulsing()) {
                    mEntriesToRemoveWhenReorderingAllowed.add(entry);
                    mVisualStabilityManager.addReorderingAllowedCallback(HeadsUpManagerPhone.this);
                    mVisualStabilityManager.addReorderingAllowedCallback(HeadsUpManagerPhone.this,
                            false  /* persistent */);
                } else if (mTrackingHeadsUp) {
                    mEntriesToRemoveAfterExpand.add(entry);
                } else if (mIsAutoHeadsUp && mStatusBarState == StatusBarState.KEYGUARD) {
Loading