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

Commit c84cf77d authored by wilsonshih's avatar wilsonshih
Browse files

Update home visibility status once receive close transition

Still need to update home's visibility to HomeVisibilityState, so the
HomeVisibilityState#isHomeVisible can be updated.
Defer the update visibility event for back gesture until close
transition ready.

Flag: com.android.window.flags.migrate_predictive_back_transition
Bug: 364869547
Test: atest HomeTransitionObserverTest
Test: atest TaplTestsQuickstep
Change-Id: Ib74556948422a5a064532540675cbde99a9c66bb
parent 9f8f7252
Loading
Loading
Loading
Loading
+6 −2
Original line number Diff line number Diff line
@@ -74,8 +74,12 @@ public class HomeTransitionObserver implements TransitionObserver,
            final boolean isBackGesture = change.hasFlags(FLAG_BACK_GESTURE_ANIMATED);
            if (taskInfo.getActivityType() == ACTIVITY_TYPE_HOME) {
                if (Flags.migratePredictiveBackTransition()) {
                    if (!isBackGesture && TransitionUtil.isOpenOrCloseMode(mode)) {
                        notifyHomeVisibilityChanged(TransitionUtil.isOpeningType(mode));
                    final boolean gestureToHomeTransition = isBackGesture
                            && TransitionUtil.isClosingType(info.getType());
                    if (gestureToHomeTransition
                            || (!isBackGesture && TransitionUtil.isOpenOrCloseMode(mode))) {
                        notifyHomeVisibilityChanged(gestureToHomeTransition
                                || TransitionUtil.isOpeningType(mode));
                    }
                } else {
                    if (TransitionUtil.isOpenOrCloseMode(mode) || isBackGesture) {
+31 −0
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME;
import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED;
import static android.view.WindowManager.TRANSIT_CHANGE;
import static android.view.WindowManager.TRANSIT_OPEN;
import static android.view.WindowManager.TRANSIT_PREPARE_BACK_NAVIGATION;
import static android.view.WindowManager.TRANSIT_TO_BACK;
import static android.window.TransitionInfo.FLAG_BACK_GESTURE_ANIMATED;

@@ -39,6 +40,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
import android.platform.test.annotations.RequiresFlagsDisabled;
import android.platform.test.annotations.RequiresFlagsEnabled;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.view.SurfaceControl;
@@ -213,6 +215,35 @@ public class HomeTransitionObserverTest extends ShellTestCase {
        verify(mListener, times(1)).onHomeVisibilityChanged(true);
    }

    @Test
    @RequiresFlagsEnabled(Flags.FLAG_MIGRATE_PREDICTIVE_BACK_TRANSITION)
    public void testHomeActivityWithBackGestureNotifiesHomeIsVisibleAfterClose()
            throws RemoteException {
        TransitionInfo info = mock(TransitionInfo.class);
        TransitionInfo.Change change = mock(TransitionInfo.Change.class);
        ActivityManager.RunningTaskInfo taskInfo = mock(ActivityManager.RunningTaskInfo.class);
        when(change.getTaskInfo()).thenReturn(taskInfo);
        when(info.getChanges()).thenReturn(new ArrayList<>(List.of(change)));
        when(info.getType()).thenReturn(TRANSIT_PREPARE_BACK_NAVIGATION);

        when(change.hasFlags(FLAG_BACK_GESTURE_ANIMATED)).thenReturn(true);
        setupTransitionInfo(taskInfo, change, ACTIVITY_TYPE_HOME, TRANSIT_OPEN, true);

        mHomeTransitionObserver.onTransitionReady(mock(IBinder.class),
                info,
                mock(SurfaceControl.Transaction.class),
                mock(SurfaceControl.Transaction.class));
        verify(mListener, times(0)).onHomeVisibilityChanged(anyBoolean());

        when(info.getType()).thenReturn(TRANSIT_TO_BACK);
        setupTransitionInfo(taskInfo, change, ACTIVITY_TYPE_HOME, TRANSIT_CHANGE, true);
        mHomeTransitionObserver.onTransitionReady(mock(IBinder.class),
                info,
                mock(SurfaceControl.Transaction.class),
                mock(SurfaceControl.Transaction.class));
        verify(mListener, times(1)).onHomeVisibilityChanged(true);
    }

    /**
     * Helper class to initialize variables for the rest.
     */