1d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal/* 2d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * Copyright (C) 2017 The Android Open Source Project 3d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * 4d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * Licensed under the Apache License, Version 2.0 (the "License"); you may not 5d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * use this file except in compliance with the License. You may obtain a copy of 6d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * the License at 7d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * 8d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * http://www.apache.org/licenses/LICENSE-2.0 9d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * 10d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * Unless required by applicable law or agreed to in writing, software 11d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * License for the specific language governing permissions and limitations under 14d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * the License. 15d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal */ 16d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalpackage com.android.launcher3.ui.widget; 17d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 18d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport android.app.Activity; 19d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport android.app.Application; 20d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport android.app.PendingIntent; 21d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport android.appwidget.AppWidgetManager; 22d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport android.content.Intent; 23c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyalimport android.graphics.Color; 24d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport android.support.test.uiautomator.By; 25d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport android.support.test.uiautomator.UiObject2; 26d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport android.support.test.uiautomator.Until; 27d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport android.test.suitebuilder.annotation.LargeTest; 28d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport android.view.View; 29d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 30d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.ItemInfo; 31d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.Launcher; 32d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.LauncherAppWidgetInfo; 33d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.LauncherSettings.Favorites; 34d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.MainThreadExecutor; 35d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.R; 36d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.ShortcutInfo; 37d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.Utilities; 38d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.Workspace.ItemOperator; 39d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.shortcuts.ShortcutKey; 40d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.testcomponent.AppWidgetNoConfig; 41d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.testcomponent.AppWidgetWithConfig; 42d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.testcomponent.RequestPinItemActivity; 43d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.ui.LauncherInstrumentationTestCase; 44d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.util.Condition; 45d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.util.SimpleActivityMonitor; 46d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.util.Wait; 47d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport com.android.launcher3.widget.WidgetCell; 48d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 49d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport java.util.UUID; 50d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalimport java.util.concurrent.Callable; 51d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 52d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal/** 53d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * Test to verify pin item request flow. 54d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal */ 55d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal@LargeTest 56d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyalpublic class RequestPinItemTest extends LauncherInstrumentationTestCase { 57d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 58d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal private SimpleActivityMonitor mActivityMonitor; 59d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal private MainThreadExecutor mMainThreadExecutor; 60d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 61d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal private String mCallbackAction; 62d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal private String mShortcutId; 63d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal private int mAppWidgetId; 64d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 65d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal @Override 66d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal protected void setUp() throws Exception { 67d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal super.setUp(); 68d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal grantWidgetPermission(); 69d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal setDefaultLauncher(); 70d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 71d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal mActivityMonitor = new SimpleActivityMonitor(); 72d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal ((Application) getInstrumentation().getTargetContext().getApplicationContext()) 73d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal .registerActivityLifecycleCallbacks(mActivityMonitor); 74d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal mMainThreadExecutor = new MainThreadExecutor(); 75d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 76d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal mCallbackAction = UUID.randomUUID().toString(); 77d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal mShortcutId = UUID.randomUUID().toString(); 78d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 79d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 80d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal @Override 81d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal protected void tearDown() throws Exception { 82d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal ((Application) getInstrumentation().getTargetContext().getApplicationContext()) 83d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal .unregisterActivityLifecycleCallbacks(mActivityMonitor); 84d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal super.tearDown(); 85d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 86d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 87d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal public void testPinWidgetNoConfig() throws Throwable { 88d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal runTest("pinWidgetNoConfig", true, new ItemOperator() { 89d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal @Override 90d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal public boolean evaluate(ItemInfo info, View view) { 91d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal return info instanceof LauncherAppWidgetInfo && 92d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal ((LauncherAppWidgetInfo) info).appWidgetId == mAppWidgetId && 93d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal ((LauncherAppWidgetInfo) info).providerName.getClassName() 94d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal .equals(AppWidgetNoConfig.class.getName()); 95d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 96d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal }); 97d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 98d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 99c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal public void testPinWidgetNoConfig_customPreview() throws Throwable { 100c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal // Command to set custom preview 101c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal Intent command = RequestPinItemActivity.getCommandIntent( 102c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal RequestPinItemActivity.class, "setRemoteViewColor").putExtra( 103c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal RequestPinItemActivity.EXTRA_PARAM + "0", Color.RED); 104c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal 105c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal runTest("pinWidgetNoConfig", true, new ItemOperator() { 106c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal @Override 107c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal public boolean evaluate(ItemInfo info, View view) { 108c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal return info instanceof LauncherAppWidgetInfo && 109c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal ((LauncherAppWidgetInfo) info).appWidgetId == mAppWidgetId && 110c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal ((LauncherAppWidgetInfo) info).providerName.getClassName() 111c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal .equals(AppWidgetNoConfig.class.getName()); 112c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal } 113c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal }, command); 114c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal } 115c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal 116d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal public void testPinWidgetWithConfig() throws Throwable { 117d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal runTest("pinWidgetWithConfig", true, new ItemOperator() { 118d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal @Override 119d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal public boolean evaluate(ItemInfo info, View view) { 120d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal return info instanceof LauncherAppWidgetInfo && 121d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal ((LauncherAppWidgetInfo) info).appWidgetId == mAppWidgetId && 122d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal ((LauncherAppWidgetInfo) info).providerName.getClassName() 123d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal .equals(AppWidgetWithConfig.class.getName()); 124d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 125d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal }); 126d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 127d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 128c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal public void testPinShortcut() throws Throwable { 129c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal // Command to set the shortcut id 130c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal Intent command = RequestPinItemActivity.getCommandIntent( 131c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal RequestPinItemActivity.class, "setShortcutId").putExtra( 132c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal RequestPinItemActivity.EXTRA_PARAM + "0", mShortcutId); 133d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 134d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal runTest("pinShortcut", false, new ItemOperator() { 135d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal @Override 136d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal public boolean evaluate(ItemInfo info, View view) { 137d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal return info instanceof ShortcutInfo && 138d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal info.itemType == Favorites.ITEM_TYPE_DEEP_SHORTCUT && 139d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal ShortcutKey.fromItemInfo(info).getId().equals(mShortcutId); 140d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 141c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal }, command); 142d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 143d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 144c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal private void runTest(String activityMethod, boolean isWidget, ItemOperator itemMatcher, 145c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal Intent... commandIntents) throws Throwable { 146d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal if (!Utilities.isAtLeastO()) { 147d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal return; 148d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 149d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal lockRotation(true); 150d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 151d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal clearHomescreen(); 152d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal startLauncher(); 153d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 154d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal // Open all apps and wait for load complete 155d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal final UiObject2 appsContainer = openAllApps(); 156d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal assertTrue(Wait.atMost(Condition.minChildCount(appsContainer, 2), DEFAULT_UI_TIMEOUT)); 157d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 158d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal // Open Pin item activity 159d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal BlockingBroadcastReceiver openMonitor = new BlockingBroadcastReceiver( 160d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal RequestPinItemActivity.class.getName()); 161d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal scrollAndFind(appsContainer, By.text("Test Pin Item")).click(); 162d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal assertNotNull(openMonitor.blockingGetExtraIntent()); 163d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 164d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal // Set callback 165d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal PendingIntent callback = PendingIntent.getBroadcast(mTargetContext, 0, 166d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal new Intent(mCallbackAction), PendingIntent.FLAG_ONE_SHOT); 167d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal mTargetContext.sendBroadcast(RequestPinItemActivity.getCommandIntent( 168d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal RequestPinItemActivity.class, "setCallback").putExtra( 169d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal RequestPinItemActivity.EXTRA_PARAM + "0", callback)); 170d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 171c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal for (Intent command : commandIntents) { 172c65a0085d77edd8e8821254f081eb94e9dcc5e75Sunny Goyal mTargetContext.sendBroadcast(command); 173d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 174d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 175d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal // call the requested method to start the flow 176d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal mTargetContext.sendBroadcast(RequestPinItemActivity.getCommandIntent( 177d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal RequestPinItemActivity.class, activityMethod)); 178d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal UiObject2 widgetCell = mDevice.wait( 179d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal Until.findObject(By.clazz(WidgetCell.class)), DEFAULT_ACTIVITY_TIMEOUT); 180d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal assertNotNull(widgetCell); 181d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 182d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal // Accept confirmation: 183d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal BlockingBroadcastReceiver resultReceiver = new BlockingBroadcastReceiver(mCallbackAction); 184d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal mDevice.wait(Until.findObject(By.text(mTargetContext.getString( 185d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal R.string.place_automatically).toUpperCase())), DEFAULT_UI_TIMEOUT).click(); 186d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal Intent result = resultReceiver.blockingGetIntent(); 187d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal assertNotNull(result); 188d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal mAppWidgetId = result.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, -1); 189d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal if (isWidget) { 190d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal assertNotSame(-1, mAppWidgetId); 191d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 192d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 193d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal // Go back to home 194d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal mTargetContext.startActivity(getHomeIntent()); 195d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal assertTrue(Wait.atMost(new ItemSearchCondition(itemMatcher), DEFAULT_ACTIVITY_TIMEOUT)); 196d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 197d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 198d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal /** 199d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal * Condition for for an item 200d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal */ 201d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal private class ItemSearchCondition extends Condition implements Callable<Boolean> { 202d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 203d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal private final ItemOperator mOp; 204d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 205d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal ItemSearchCondition(ItemOperator op) { 206d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal mOp = op; 207d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 208d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 209d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal @Override 210d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal public boolean isTrue() throws Throwable { 211d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal return mMainThreadExecutor.submit(this).get(); 212d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 213d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal 214d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal @Override 215d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal public Boolean call() throws Exception { 216d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal // Find the resumed launcher 217d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal Launcher launcher = null; 218d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal for (Activity a : mActivityMonitor.resumed) { 219d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal if (a instanceof Launcher) { 220d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal launcher = (Launcher) a; 221d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 222d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 223d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal if (launcher == null) { 224d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal return false; 225d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 226d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal return launcher.getWorkspace().getFirstMatch(mOp) != null; 227d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 228d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal } 229d9843357d0fa8e4bbe0d42007bfdfebe37db7451Sunny Goyal} 230