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

Commit e70ccc14 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 7947231 from a656a4e4 to sc-v2-release

Change-Id: I112a2f6f1991b570e7dfc558410817bb9312389d
parents 39ffde24 a656a4e4
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -124,7 +124,12 @@ public final class ImeInsetsSourceConsumer extends InsetsSourceConsumer {
    public void setControl(@Nullable InsetsSourceControl control, int[] showTypes,
            int[] hideTypes) {
        super.setControl(control, showTypes, hideTypes);
        if (control == null && !isRequestedVisibleAwaitingControl()) {
        // TODO(b/204524304): clean-up how to deal with the timing issues of hiding IME:
        //  1) Already requested show IME, in the meantime of WM callback the control but got null
        //  control when relayout comes first
        //  2) Make sure no regression on some implicit request IME visibility calls (e.g.
        //  toggleSoftInput)
        if (control == null && !mIsRequestedVisibleAwaitingControl) {
            hide();
            removeSurface();
        }
+49 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager.RunningTaskInfo;
import android.app.TaskInfo;
import android.app.WindowConfiguration;
import android.content.Context;
import android.content.LocusId;
import android.content.pm.ActivityInfo;
@@ -121,6 +122,16 @@ public class ShellTaskOrganizer extends TaskOrganizer implements
        void onVisibilityChanged(int taskId, LocusId locus, boolean visible);
    }

    /**
     * Callbacks for events in which the focus has changed.
     */
    public interface FocusListener {
        /**
         * Notifies when the task which is focused has changed.
         */
        void onFocusTaskChanged(RunningTaskInfo taskInfo);
    }

    /**
     * Keys map from either a task id or {@link TaskListenerType}.
     * @see #addListenerForTaskId
@@ -142,6 +153,8 @@ public class ShellTaskOrganizer extends TaskOrganizer implements
    /** @see #addLocusIdListener */
    private final ArraySet<LocusIdListener> mLocusIdListeners = new ArraySet<>();

    private final ArraySet<FocusListener> mFocusListeners = new ArraySet<>();

    private final Object mLock = new Object();
    private StartingWindowController mStartingWindow;

@@ -155,6 +168,9 @@ public class ShellTaskOrganizer extends TaskOrganizer implements
    @Nullable
    private final Optional<RecentTasksController> mRecentTasks;

    @Nullable
    private RunningTaskInfo mLastFocusedTaskInfo;

    public ShellTaskOrganizer(ShellExecutor mainExecutor, Context context) {
        this(null /* taskOrganizerController */, mainExecutor, context, null /* sizeCompatUI */,
                Optional.empty() /* recentTasksController */);
@@ -331,6 +347,27 @@ public class ShellTaskOrganizer extends TaskOrganizer implements
        }
    }

    /**
     * Adds a listener to be notified for task focus changes.
     */
    public void addFocusListener(FocusListener listener) {
        synchronized (mLock) {
            mFocusListeners.add(listener);
            if (mLastFocusedTaskInfo != null) {
                listener.onFocusTaskChanged(mLastFocusedTaskInfo);
            }
        }
    }

    /**
     * Removes listener.
     */
    public void removeLocusIdListener(FocusListener listener) {
        synchronized (mLock) {
            mFocusListeners.remove(listener);
        }
    }

    @Override
    public void addStartingWindow(StartingWindowInfo info, IBinder appToken) {
        if (mStartingWindow != null) {
@@ -422,6 +459,18 @@ public class ShellTaskOrganizer extends TaskOrganizer implements
                mRecentTasks.ifPresent(recentTasks ->
                        recentTasks.onTaskWindowingModeChanged(taskInfo));
            }
            // TODO (b/207687679): Remove check for HOME once bug is fixed
            final boolean isFocusedOrHome = taskInfo.isFocused
                    || (taskInfo.topActivityType == WindowConfiguration.ACTIVITY_TYPE_HOME
                    && taskInfo.isVisible);
            final boolean focusTaskChanged = (mLastFocusedTaskInfo == null
                    || mLastFocusedTaskInfo.taskId != taskInfo.taskId) && isFocusedOrHome;
            if (focusTaskChanged) {
                for (int i = 0; i < mFocusListeners.size(); i++) {
                    mFocusListeners.valueAt(i).onFocusTaskChanged(taskInfo);
                }
                mLastFocusedTaskInfo = taskInfo;
            }
        }
    }

+2 −1
Original line number Diff line number Diff line
@@ -241,10 +241,11 @@ public class WMShellModule {
    static PhonePipMenuController providesPipPhoneMenuController(Context context,
            PipBoundsState pipBoundsState, PipMediaController pipMediaController,
            SystemWindows systemWindows,
            Optional<SplitScreenController> splitScreenOptional,
            @ShellMainThread ShellExecutor mainExecutor,
            @ShellMainThread Handler mainHandler) {
        return new PhonePipMenuController(context, pipBoundsState, pipMediaController,
                systemWindows, mainExecutor, mainHandler);
                systemWindows, splitScreenOptional, mainExecutor, mainHandler);
    }

    @WMSingleton
+5 −0
Original line number Diff line number Diff line
@@ -89,6 +89,11 @@ public interface PipMenuController {
     */
    default void updateMenuBounds(Rect destinationBounds) {}

    /**
     * Update when the current focused task changes.
     */
    default void onFocusTaskChanged(RunningTaskInfo taskInfo) {}

    /**
     * Returns a default LayoutParams for the PIP Menu.
     * @param width the PIP stack width.
+7 −1
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ import java.util.function.IntConsumer;
 * see also {@link PipMotionHelper}.
 */
public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
        DisplayController.OnDisplaysChangedListener {
        DisplayController.OnDisplaysChangedListener, ShellTaskOrganizer.FocusListener {
    private static final String TAG = PipTaskOrganizer.class.getSimpleName();
    private static final boolean DEBUG = false;
    /**
@@ -286,6 +286,7 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
        mMainExecutor.execute(() -> {
            mTaskOrganizer.addListenerForType(this, TASK_LISTENER_TYPE_PIP);
        });
        mTaskOrganizer.addFocusListener(this);
        mPipTransitionController.setPipOrganizer(this);
        displayController.addDisplayWindowListener(this);
    }
@@ -771,6 +772,11 @@ public class PipTaskOrganizer implements ShellTaskOrganizer.TaskListener,
                null /* updateBoundsCallback */);
    }

    @Override
    public void onFocusTaskChanged(ActivityManager.RunningTaskInfo taskInfo) {
        mPipMenuController.onFocusTaskChanged(taskInfo);
    }

    @Override
    public boolean supportSizeCompatUI() {
        // PIP doesn't support size compat.
Loading