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

Commit 55fdc45e authored by Saumya Prakash's avatar Saumya Prakash Committed by Android (Google) Code Review
Browse files

Merge "Ensure Taskbar stashes when launching an app from folder" into main

parents fe22e7fa 86285d47
Loading
Loading
Loading
Loading
+28 −9
Original line number Diff line number Diff line
@@ -987,13 +987,18 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
            FolderIcon folderIcon = (FolderIcon) view;
            Folder folder = folderIcon.getFolder();

            folder.setOnFolderStateChangedListener(newState -> {
            folder.setPriorityOnFolderStateChangedListener(
                    new Folder.OnFolderStateChangedListener() {
                        @Override
                        public void onFolderStateChanged(int newState) {
                            if (newState == Folder.STATE_OPEN) {
                                setTaskbarWindowFocusableForIme(true);
                            } else if (newState == Folder.STATE_CLOSED) {
                    // Defer by a frame to ensure we're no longer fullscreen and thus won't jump.
                                // Defer by a frame to ensure we're no longer fullscreen and thus
                                // won't jump.
                                getDragLayer().post(() -> setTaskbarWindowFocusableForIme(false));
                    folder.setOnFolderStateChangedListener(null);
                                folder.setPriorityOnFolderStateChangedListener(null);
                            }
                        }
                    });

@@ -1055,7 +1060,21 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
                        Log.e(TAG, "Unable to launch. tag=" + info + " intent=" + intent, e);
                        return;
                    }
                }

                // If the app was launched from a folder, stash the taskbar after it closes
                Folder f = Folder.getOpen(this);
                if (f != null && f.getInfo().id == info.container) {
                    f.addOnFolderStateChangedListener(new Folder.OnFolderStateChangedListener() {
                        @Override
                        public void onFolderStateChanged(int newState) {
                            if (newState == Folder.STATE_CLOSED) {
                                f.removeOnFolderStateChangedListener(this);
                                mControllers.taskbarStashController
                                        .updateAndAnimateTransientTaskbar(true);
                            }
                        }
                    });
                }
                mControllers.uiController.onTaskbarIconLaunched(info);
                mControllers.taskbarStashController.updateAndAnimateTransientTaskbar(true);
+33 −6
Original line number Diff line number Diff line
@@ -210,7 +210,9 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo
                    @ViewDebug.IntToString(from = STATE_OPEN, to = "STATE_OPEN"),
            })
    private int mState = STATE_CLOSED;
    private OnFolderStateChangedListener mOnFolderStateChangedListener;
    private final List<OnFolderStateChangedListener> mOnFolderStateChangedListeners =
            new ArrayList<>();
    private OnFolderStateChangedListener mPriorityOnFolderStateChangedListener;
    @ViewDebug.ExportedProperty(category = "launcher")
    private boolean mRearrangeOnClose = false;
    boolean mItemsInvalidated = false;
@@ -1665,18 +1667,43 @@ public class Folder extends AbstractFloatingView implements ClipPathView, DragSo
        return windowBottomPx - folderBottomPx;
    }

    /**
     * Save this listener for the special case of when we update the state and concurrently
     * add another listener to {@link #mOnFolderStateChangedListeners} to avoid a
     * ConcurrentModificationException
     */
    public void setPriorityOnFolderStateChangedListener(OnFolderStateChangedListener listener) {
        mPriorityOnFolderStateChangedListener = listener;
    }

    private void setState(@FolderState int newState) {
        mState = newState;
        if (mOnFolderStateChangedListener != null) {
            mOnFolderStateChangedListener.onFolderStateChanged(mState);
        if (mPriorityOnFolderStateChangedListener != null) {
            mPriorityOnFolderStateChangedListener.onFolderStateChanged(mState);
        }
        for (OnFolderStateChangedListener listener : mOnFolderStateChangedListeners) {
            if (listener != null) {
                listener.onFolderStateChanged(mState);
            }
        }
    }

    /**
     * Adds the provided listener to the running list of Folder listeners
     * {@link #mOnFolderStateChangedListeners}
     */
    public void addOnFolderStateChangedListener(@Nullable OnFolderStateChangedListener listener) {
        if (listener != null) {
            mOnFolderStateChangedListeners.add(listener);
        }
    }

    public void setOnFolderStateChangedListener(@Nullable OnFolderStateChangedListener listener) {
        mOnFolderStateChangedListener = listener;
    /** Removes the provided listener from the running list of Folder listeners */
    public void removeOnFolderStateChangedListener(OnFolderStateChangedListener listener) {
        mOnFolderStateChangedListeners.remove(listener);
    }

    /** Listener that can be registered via {@link Folder#setOnFolderStateChangedListener} */
    /** Listener that can be registered via {@link #addOnFolderStateChangedListener} */
    public interface OnFolderStateChangedListener {
        /** See {@link Folder.FolderState} */
        void onFolderStateChanged(@FolderState int newState);