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

Commit 7b286a4f authored by Jeremy Sim's avatar Jeremy Sim Committed by Android (Google) Code Review
Browse files

Merge "Revert "Revert "Create TAPL test suite for splitscreen""" into tm-qpr-dev

parents 2741c7be da75737d
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -147,6 +147,8 @@ import com.android.launcher3.logging.StatsLogManager;
import com.android.launcher3.statehandlers.DepthController;
import com.android.launcher3.statemanager.BaseState;
import com.android.launcher3.statemanager.StatefulActivity;
import com.android.launcher3.testing.TestLogging;
import com.android.launcher3.testing.shared.TestProtocol;
import com.android.launcher3.touch.OverScroll;
import com.android.launcher3.touch.PagedOrientationHandler;
import com.android.launcher3.util.DynamicResource;
@@ -4497,6 +4499,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
     * Attempts to initiate split with an existing taskView, if one exists
     */
    public void initiateSplitSelect(SplitSelectSource splitSelectSource) {
        TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "enterSplitSelect");
        mSplitSelectSource = splitSelectSource;
        mSplitHiddenTaskView = getTaskViewByTaskId(splitSelectSource.alreadyRunningTaskId);
        mSplitHiddenTaskViewIndex = indexOfChild(mSplitHiddenTaskView);
+82 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.quickstep;

import android.content.Intent;

import com.android.launcher3.ui.TaplTestsLauncher3;
import com.android.launcher3.util.rule.TestStabilityRule;
import com.android.quickstep.TaskbarModeSwitchRule.TaskbarModeSwitch;

import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
import org.junit.Test;

public class TaplTestsSplitscreen extends AbstractQuickStepTest {
    private static final String CALCULATOR_APP_NAME = "Calculator";
    private static final String CALCULATOR_APP_PACKAGE =
            resolveSystemApp(Intent.CATEGORY_APP_CALCULATOR);

    @Override
    @Before
    public void setUp() throws Exception {
        super.setUp();
        TaplTestsLauncher3.initialize(this);

        mLauncher.getWorkspace()
                .deleteAppIcon(mLauncher.getWorkspace().getHotseatAppIcon(0))
                .switchToAllApps()
                .getAppIcon(CALCULATOR_APP_NAME)
                .dragToHotseat(0);

        startAppFast(CALCULATOR_APP_PACKAGE);
        if (mLauncher.isTablet()) {
            mLauncher.enableBlockTimeout(true);
            mLauncher.showTaskbarIfHidden();
        }
    }

    @After
    public void tearDown() {
        if (mLauncher.isTablet()) {
            mLauncher.enableBlockTimeout(false);
        }
    }

    @Test
    // TODO (b/270201357): When this test is proven stable, remove this TestStabilityRule and
    // introduce into presubmit as well.
    @TestStabilityRule.Stability(
            flavors = TestStabilityRule.LOCAL | TestStabilityRule.PLATFORM_POSTSUBMIT)
    @PortraitLandscape
    @TaskbarModeSwitch
    public void testSplitAppFromHomeWithItself() throws Exception {
        Assume.assumeTrue(mLauncher.isTablet());

        mLauncher.goHome()
                .switchToAllApps()
                .getAppIcon(CALCULATOR_APP_NAME)
                .openMenu()
                .getSplitScreenMenuItem()
                .click();

        mLauncher.getLaunchedAppState()
                .getTaskbar()
                .getAppIcon(CALCULATOR_APP_NAME)
                .launchIntoSplitScreen();
    }
}
+9 −0
Original line number Diff line number Diff line
@@ -54,5 +54,14 @@ public abstract class AppIconMenu {
        return createMenuItem(menuItem);
    }

    /**
     * Returns a menu item that matches the text "Split screen". Fails if it doesn't exist.
     */
    public SplitScreenMenuItem getSplitScreenMenuItem() {
        final UiObject2 menuItem = mLauncher.waitForObjectInContainer(mDeepShortcutsContainer,
                AppIcon.getAppIconSelector("Split screen", mLauncher));
        return new SplitScreenMenuItem(mLauncher, menuItem);
    }

    protected abstract AppIconMenuItem createMenuItem(UiObject2 menuItem);
}
+21 −0
Original line number Diff line number Diff line
@@ -76,6 +76,27 @@ public abstract class Launchable {
        }
    }

    /**
     * Clicks a launcher object to initiate splitscreen, where the selected app will be one of two
     * apps running on the screen. Should be called when Launcher is in a "split staging" state
     * and is waiting for the user's selection of a second app. Expects a SPLIT_START_EVENT to be
     * fired when the click is executed.
     */
    public LaunchedAppState launchIntoSplitScreen() {
        try (LauncherInstrumentation.Closable c1 = mLauncher.addContextLayer(
                "want to launch split tasks from " + launchableType())) {
            LauncherInstrumentation.log("Launchable.launch before click "
                    + mObject.getVisibleCenter() + " in " + mLauncher.getVisibleBounds(mObject));

            mLauncher.clickLauncherObject(mObject);

            try (LauncherInstrumentation.Closable c2 = mLauncher.addContextLayer("clicked")) {
                mLauncher.expectEvent(TestProtocol.SEQUENCE_MAIN, OverviewTask.SPLIT_START_EVENT);
                return new LaunchedAppState(mLauncher);
            }
        }
    }

    protected LaunchedAppState assertAppLaunched(BySelector selector) {
        mLauncher.assertTrue(
                "App didn't start: (" + selector + ")",
+3 −4
Original line number Diff line number Diff line
@@ -37,10 +37,9 @@ import java.util.stream.Collectors;
public final class OverviewTask {
    private static final String SYSTEMUI_PACKAGE = "com.android.systemui";

    static final Pattern TASK_START_EVENT =
            Pattern.compile("startActivityFromRecentsAsync");
    static final Pattern SPLIT_START_EVENT =
            Pattern.compile("launchSplitTasks");
    static final Pattern TASK_START_EVENT = Pattern.compile("startActivityFromRecentsAsync");
    static final Pattern SPLIT_SELECT_EVENT = Pattern.compile("enterSplitSelect");
    static final Pattern SPLIT_START_EVENT = Pattern.compile("launchSplitTasks");
    private final LauncherInstrumentation mLauncher;
    private final UiObject2 mTask;
    private final BaseOverview mOverview;
Loading