/* * Copyright (C) 2021 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.launcher3.tapl; import androidx.annotation.NonNull; import androidx.test.uiautomator.UiObject2; public class Folder { protected static final String FOLDER_CONTENT_RES_ID = "folder_content"; private final UiObject2 mContainer; private final LauncherInstrumentation mLauncher; Folder(LauncherInstrumentation launcher) { this.mLauncher = launcher; this.mContainer = launcher.waitForLauncherObject(FOLDER_CONTENT_RES_ID); } /** * Find an app icon with given name or raise assertion error. */ @NonNull public HomeAppIcon getAppIcon(String appName) { try (LauncherInstrumentation.Closable ignored = mLauncher.addContextLayer( "Want to get app icon in folder")) { return new WorkspaceAppIcon(mLauncher, mLauncher.waitForObjectInContainer( mContainer, AppIcon.getAppIconSelector(appName, mLauncher))); } } /** * Close opened folder if possible. It throws assertion error if the folder is already closed. */ public Workspace close() { try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck(); LauncherInstrumentation.Closable c = mLauncher.addContextLayer( "Want to close opened folder")) { mLauncher.waitForLauncherObject(FOLDER_CONTENT_RES_ID); mLauncher.touchOutsideContainer(this.mContainer, false /* tapRight */); mLauncher.waitUntilLauncherObjectGone(FOLDER_CONTENT_RES_ID); return mLauncher.getWorkspace(); } } }