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

Commit 477bf18f authored by Youkichi Hosoi's avatar Youkichi Hosoi Committed by Android (Google) Code Review
Browse files

Merge "Register FocusTransitionObserver.dump through ShellCommandHandler" into main

parents e52c82a9 9c7982ad
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -817,8 +817,10 @@ public abstract class WMShellBaseModule {

    @WMSingleton
    @Provides
    static FocusTransitionObserver provideFocusTransitionObserver() {
        return new FocusTransitionObserver();
    static FocusTransitionObserver provideFocusTransitionObserver(
            ShellInit shellInit,
            ShellCommandHandler shellCommandHandler) {
        return new FocusTransitionObserver(shellInit, shellCommandHandler);
    }

    @WMSingleton
+0 −1
Original line number Diff line number Diff line
@@ -5915,7 +5915,6 @@ class DesktopTasksController(
        pw.println("${prefix}DesktopTasksController")
        desktopConfig.dump(pw, innerPrefix)
        userRepositories.dump(pw, innerPrefix)
        focusTransitionObserver.dump(pw, innerPrefix)
        if (Flags.showDesktopExperienceDevOption()) {
            dumpFlags(pw, prefix)
        }
+14 −1
Original line number Diff line number Diff line
@@ -41,6 +41,8 @@ import android.window.TransitionInfo;
import com.android.wm.shell.shared.FocusTransitionListener;
import com.android.wm.shell.shared.IFocusTransitionListener;
import com.android.wm.shell.shared.TransitionUtil.LeafTaskFilter;
import com.android.wm.shell.sysui.ShellCommandHandler;
import com.android.wm.shell.sysui.ShellInit;

import java.io.PrintWriter;
import java.util.ArrayList;
@@ -57,6 +59,8 @@ import java.util.concurrent.Executor;
public class FocusTransitionObserver {
    private static final String TAG = FocusTransitionObserver.class.getSimpleName();

    private final ShellCommandHandler mShellCommandHandler;

    private IFocusTransitionListener mRemoteListener;
    private final Map<FocusTransitionListener, Executor> mLocalListeners =
            new HashMap<>();
@@ -66,7 +70,16 @@ public class FocusTransitionObserver {

    private final ArraySet<RunningTaskInfo> mTmpTasksToBeNotified = new ArraySet<>();

    public FocusTransitionObserver() {}
    public FocusTransitionObserver(
            @NonNull ShellInit shellInit,
            @NonNull ShellCommandHandler shellCommandHandler) {
        mShellCommandHandler = shellCommandHandler;
        shellInit.addInitCallback(this::onInit, this);
    }

    private void onInit() {
        mShellCommandHandler.addDumpCallback(this::dump, this);
    }

    /**
     * Update display/window focus state from the given transition info and notifies changes if any.
+17 −1
Original line number Diff line number Diff line
@@ -25,12 +25,15 @@ import static android.window.TransitionInfo.FLAG_MOVED_TO_TOP;

import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.isA;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.when;

@@ -48,6 +51,8 @@ import com.android.window.flags.Flags;
import com.android.wm.shell.ShellTestCase;
import com.android.wm.shell.TestShellExecutor;
import com.android.wm.shell.shared.FocusTransitionListener;
import com.android.wm.shell.sysui.ShellCommandHandler;
import com.android.wm.shell.sysui.ShellInit;

import org.junit.Before;
import org.junit.Test;
@@ -69,13 +74,18 @@ public class FocusTransitionObserverTest extends ShellTestCase {

    private FocusTransitionListener mListener;
    private final TestShellExecutor mShellExecutor = new TestShellExecutor();
    private ShellInit mShellInit;
    private ShellCommandHandler mShellCommandHandler;
    private FocusTransitionObserver mFocusTransitionObserver;

    @Before
    public void setUp() {
        mListener = mock(FocusTransitionListener.class);
        mFocusTransitionObserver = new FocusTransitionObserver();
        mShellInit = spy(new ShellInit(mShellExecutor));
        mShellCommandHandler = mock(ShellCommandHandler.class);
        mFocusTransitionObserver = new FocusTransitionObserver(mShellInit, mShellCommandHandler);
        mFocusTransitionObserver.setLocalFocusTransitionListener(mListener, mShellExecutor);
        mShellInit.init();
        mShellExecutor.flushAll();
        clearInvocations(mListener);
    }
@@ -254,6 +264,12 @@ public class FocusTransitionObserverTest extends ShellTestCase {
        clearInvocations(mListener);
    }

    @Test
    public void testAddDump() {
        verify(mShellCommandHandler, times(1)).addDumpCallback(
                any(), isA(FocusTransitionObserver.class));
    }

    private TransitionInfo.Change setupTaskChange(List<TransitionInfo.Change> changes, int taskId,
            @TransitionMode int mode, int displayId, boolean focused) {
        return setupTaskChange(changes, taskId, mode, displayId, displayId, focused);