From cf275c1bd7c48d4bb2ba6b74049a2740b7b6b5b7 Mon Sep 17 00:00:00 2001 From: vadimt Date: Wed, 15 Apr 2020 12:43:01 -0700 Subject: [PATCH] Choosing better points to output "start" events for TAPL Now doing this before branching points, thus avoiding flakes when the execution can go to an unexpected branch and not produce an event. Bug: 153824894 Change-Id: If117da0498eaf2d94c9610552724981be34c6569 --- src/com/android/launcher3/BaseActivity.java | 3 --- src/com/android/launcher3/BaseDraggingActivity.java | 3 --- src/com/android/launcher3/Launcher.java | 1 + src/com/android/launcher3/LauncherAppWidgetHost.java | 3 +++ src/com/android/launcher3/touch/ItemClickHandler.java | 4 ++++ src/com/android/launcher3/views/OptionsPopupView.java | 3 +++ tests/src/com/android/launcher3/ui/TaplTestsLauncher3.java | 4 ++-- .../android/launcher3/ui/widget/AddConfigWidgetTest.java | 2 +- .../src/com/android/launcher3/ui/widget/AddWidgetTest.java | 4 ++-- tests/tapl/com/android/launcher3/tapl/AppIcon.java | 3 +-- tests/tapl/com/android/launcher3/tapl/AppIconMenuItem.java | 4 +--- tests/tapl/com/android/launcher3/tapl/Launchable.java | 4 +++- .../android/launcher3/tapl/LauncherInstrumentation.java | 1 + .../com/android/launcher3/tapl/OptionsPopupMenuItem.java | 1 + tests/tapl/com/android/launcher3/tapl/Workspace.java | 7 ++++++- 15 files changed, 29 insertions(+), 18 deletions(-) diff --git a/src/com/android/launcher3/BaseActivity.java b/src/com/android/launcher3/BaseActivity.java index 814b72882b..7de44a3fce 100644 --- a/src/com/android/launcher3/BaseActivity.java +++ b/src/com/android/launcher3/BaseActivity.java @@ -40,8 +40,6 @@ import com.android.launcher3.logging.StatsLogManager; import com.android.launcher3.logging.StatsLogUtils; import com.android.launcher3.logging.StatsLogUtils.LogStateProvider; import com.android.launcher3.logging.UserEventDispatcher; -import com.android.launcher3.testing.TestLogging; -import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.util.SystemUiController; import com.android.launcher3.util.ViewCache; @@ -332,7 +330,6 @@ public abstract class BaseActivity extends Activity implements LogStateProvider, return; } try { - TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "start: shortcut", packageName); getSystemService(LauncherApps.class).startShortcut(packageName, id, sourceBounds, startActivityOptions, user); } catch (SecurityException | IllegalStateException e) { diff --git a/src/com/android/launcher3/BaseDraggingActivity.java b/src/com/android/launcher3/BaseDraggingActivity.java index 2dc783672d..f69c8ed62a 100644 --- a/src/com/android/launcher3/BaseDraggingActivity.java +++ b/src/com/android/launcher3/BaseDraggingActivity.java @@ -41,8 +41,6 @@ import com.android.launcher3.LauncherSettings.Favorites; import com.android.launcher3.model.AppLaunchTracker; import com.android.launcher3.model.data.ItemInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; -import com.android.launcher3.testing.TestLogging; -import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.touch.ItemClickHandler; import com.android.launcher3.uioverrides.WallpaperColorInfo; import com.android.launcher3.util.DefaultDisplay; @@ -173,7 +171,6 @@ public abstract class BaseDraggingActivity extends BaseActivity startShortcutIntentSafely(intent, optsBundle, item, sourceContainer); } else if (user == null || user.equals(Process.myUserHandle())) { // Could be launching some bookkeeping activity - TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "start: activity", intent); startActivity(intent, optsBundle); AppLaunchTracker.INSTANCE.get(this).onStartApp(intent.getComponent(), Process.myUserHandle(), sourceContainer); diff --git a/src/com/android/launcher3/Launcher.java b/src/com/android/launcher3/Launcher.java index f69940b92e..205245e768 100644 --- a/src/com/android/launcher3/Launcher.java +++ b/src/com/android/launcher3/Launcher.java @@ -1674,6 +1674,7 @@ public class Launcher extends BaseDraggingActivity implements LauncherExterns, private void processShortcutFromDrop(PendingAddShortcutInfo info) { Intent intent = new Intent(Intent.ACTION_CREATE_SHORTCUT).setComponent(info.componentName); setWaitingForResult(PendingRequestArgs.forIntent(REQUEST_CREATE_SHORTCUT, intent, info)); + TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "start: processShortcutFromDrop"); if (!info.activityInfo.startConfigActivity(this, REQUEST_CREATE_SHORTCUT)) { handleActivityResult(REQUEST_CREATE_SHORTCUT, RESULT_CANCELED, null); } diff --git a/src/com/android/launcher3/LauncherAppWidgetHost.java b/src/com/android/launcher3/LauncherAppWidgetHost.java index 9921f76f0c..7ea68512ee 100644 --- a/src/com/android/launcher3/LauncherAppWidgetHost.java +++ b/src/com/android/launcher3/LauncherAppWidgetHost.java @@ -30,6 +30,8 @@ import android.util.SparseArray; import android.widget.Toast; import com.android.launcher3.model.WidgetsModel; +import com.android.launcher3.testing.TestLogging; +import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.widget.DeferredAppWidgetHostView; import com.android.launcher3.widget.LauncherAppWidgetHostView; import com.android.launcher3.widget.PendingAppWidgetHostView; @@ -298,6 +300,7 @@ public class LauncherAppWidgetHost extends AppWidgetHost { } try { + TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "start: startConfigActivity"); startAppWidgetConfigureActivityForResult(activity, widgetId, 0, requestCode, null); } catch (ActivityNotFoundException | SecurityException e) { Toast.makeText(activity, R.string.activity_not_found, Toast.LENGTH_SHORT).show(); diff --git a/src/com/android/launcher3/touch/ItemClickHandler.java b/src/com/android/launcher3/touch/ItemClickHandler.java index f7091fc3ad..6abca767ae 100644 --- a/src/com/android/launcher3/touch/ItemClickHandler.java +++ b/src/com/android/launcher3/touch/ItemClickHandler.java @@ -52,6 +52,8 @@ import com.android.launcher3.model.data.LauncherAppWidgetInfo; import com.android.launcher3.model.data.PromiseAppInfo; import com.android.launcher3.model.data.WorkspaceItemInfo; import com.android.launcher3.pm.InstallSessionHelper; +import com.android.launcher3.testing.TestLogging; +import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.util.PackageManagerHelper; import com.android.launcher3.views.FloatingIconView; import com.android.launcher3.widget.PendingAppWidgetHostView; @@ -240,6 +242,8 @@ public class ItemClickHandler { private static void startAppShortcutOrInfoActivity(View v, ItemInfo item, Launcher launcher, @Nullable String sourceContainer) { + TestLogging.recordEvent( + TestProtocol.SEQUENCE_MAIN, "start: startAppShortcutOrInfoActivity"); Intent intent; if (item instanceof PromiseAppInfo) { PromiseAppInfo promiseAppInfo = (PromiseAppInfo) item; diff --git a/src/com/android/launcher3/views/OptionsPopupView.java b/src/com/android/launcher3/views/OptionsPopupView.java index 880f1237f8..d5c3c1d30e 100644 --- a/src/com/android/launcher3/views/OptionsPopupView.java +++ b/src/com/android/launcher3/views/OptionsPopupView.java @@ -40,6 +40,8 @@ import com.android.launcher3.Utilities; import com.android.launcher3.model.WidgetsModel; import com.android.launcher3.popup.ArrowPopup; import com.android.launcher3.shortcuts.DeepShortcutView; +import com.android.launcher3.testing.TestLogging; +import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.userevent.nano.LauncherLogProto.Action; import com.android.launcher3.userevent.nano.LauncherLogProto.ControlType; import com.android.launcher3.widget.WidgetsFullSheet; @@ -184,6 +186,7 @@ public class OptionsPopupView extends ArrowPopup } public static boolean startSettings(View view) { + TestLogging.recordEvent(TestProtocol.SEQUENCE_MAIN, "start: startSettings"); Launcher launcher = Launcher.getLauncher(view.getContext()); launcher.startActivity(new Intent(Intent.ACTION_APPLICATION_PREFERENCES) .setPackage(launcher.getPackageName()) diff --git a/tests/src/com/android/launcher3/ui/TaplTestsLauncher3.java b/tests/src/com/android/launcher3/ui/TaplTestsLauncher3.java index de1ada4d6a..57000a06c3 100644 --- a/tests/src/com/android/launcher3/ui/TaplTestsLauncher3.java +++ b/tests/src/com/android/launcher3/ui/TaplTestsLauncher3.java @@ -314,7 +314,7 @@ public class TaplTestsLauncher3 extends AbstractLauncherUiTest { switchToAllApps(); allApps.freeze(); try { - allApps.getAppIcon(APP_NAME).dragToWorkspace(false); + allApps.getAppIcon(APP_NAME).dragToWorkspace(false, false); mLauncher.getWorkspace().getWorkspaceAppIcon(APP_NAME).launch(getAppPackageName()); } finally { allApps.unfreeze(); @@ -342,7 +342,7 @@ public class TaplTestsLauncher3 extends AbstractLauncherUiTest { getMenuItem(0); final String shortcutName = menuItem.getText(); - menuItem.dragToWorkspace(false); + menuItem.dragToWorkspace(false, false); mLauncher.getWorkspace().getWorkspaceAppIcon(shortcutName).launch(getAppPackageName()); } finally { allApps.unfreeze(); diff --git a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java index 0a6579a37c..9d4ccff974 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java @@ -94,7 +94,7 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest { WidgetConfigStartupMonitor monitor = new WidgetConfigStartupMonitor(); widgets. getWidget(mWidgetInfo.getLabel(mTargetContext.getPackageManager())). - dragToWorkspace(true); + dragToWorkspace(true, false); // Widget id for which the config activity was opened mWidgetId = monitor.getWidgetId(); diff --git a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java index 5e26aa62e6..f146db5947 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java @@ -57,7 +57,7 @@ public class AddWidgetTest extends AbstractLauncherUiTest { getWorkspace(). openAllWidgets(). getWidget(widgetInfo.getLabel(mTargetContext.getPackageManager())). - dragToWorkspace(false); + dragToWorkspace(false, false); assertTrue(mActivityMonitor.itemExists( (info, view) -> info instanceof LauncherAppWidgetInfo && @@ -83,7 +83,7 @@ public class AddWidgetTest extends AbstractLauncherUiTest { mDevice.pressHome(); mLauncher.getWorkspace().openAllWidgets() .getWidget("com.android.launcher3.testcomponent.CustomShortcutConfigActivity") - .dragToWorkspace(false); + .dragToWorkspace(false, true); mLauncher.getWorkspace().getWorkspaceAppIcon("Shortcut") .launch(getAppPackageName()); } diff --git a/tests/tapl/com/android/launcher3/tapl/AppIcon.java b/tests/tapl/com/android/launcher3/tapl/AppIcon.java index bdfd563943..5de5b4a0a6 100644 --- a/tests/tapl/com/android/launcher3/tapl/AppIcon.java +++ b/tests/tapl/com/android/launcher3/tapl/AppIcon.java @@ -31,7 +31,6 @@ import java.util.regex.Pattern; */ public final class AppIcon extends Launchable { - private static final Pattern START_EVENT = Pattern.compile("start:"); private static final Pattern LONG_CLICK_EVENT = Pattern.compile("onAllAppsItemLongClick"); AppIcon(LauncherInstrumentation launcher, UiObject2 icon) { @@ -64,6 +63,6 @@ public final class AppIcon extends Launchable { @Override protected void expectActivityStartEvents() { - mLauncher.expectEvent(TestProtocol.SEQUENCE_MAIN, START_EVENT); + mLauncher.expectEvent(TestProtocol.SEQUENCE_MAIN, LauncherInstrumentation.EVENT_START); } } diff --git a/tests/tapl/com/android/launcher3/tapl/AppIconMenuItem.java b/tests/tapl/com/android/launcher3/tapl/AppIconMenuItem.java index 37a7b91c62..a40919b1bd 100644 --- a/tests/tapl/com/android/launcher3/tapl/AppIconMenuItem.java +++ b/tests/tapl/com/android/launcher3/tapl/AppIconMenuItem.java @@ -27,8 +27,6 @@ import java.util.regex.Pattern; */ public class AppIconMenuItem extends Launchable { - private static final Pattern START_SHORTCUT_EVENT = Pattern.compile("start: shortcut:"); - AppIconMenuItem(LauncherInstrumentation launcher, UiObject2 shortcut) { super(launcher, shortcut); } @@ -51,6 +49,6 @@ public class AppIconMenuItem extends Launchable { @Override protected void expectActivityStartEvents() { - mLauncher.expectEvent(TestProtocol.SEQUENCE_MAIN, START_SHORTCUT_EVENT); + mLauncher.expectEvent(TestProtocol.SEQUENCE_MAIN, LauncherInstrumentation.EVENT_START); } } diff --git a/tests/tapl/com/android/launcher3/tapl/Launchable.java b/tests/tapl/com/android/launcher3/tapl/Launchable.java index 2922acf73c..df7436ce8f 100644 --- a/tests/tapl/com/android/launcher3/tapl/Launchable.java +++ b/tests/tapl/com/android/launcher3/tapl/Launchable.java @@ -77,8 +77,9 @@ abstract class Launchable { /** * Drags an object to the center of homescreen. * @param startsActivity whether it's expected to start an activity. + * @param isWidgetShortcut whether we drag a widget shortcut */ - public void dragToWorkspace(boolean startsActivity) { + public void dragToWorkspace(boolean startsActivity, boolean isWidgetShortcut) { try (LauncherInstrumentation.Closable e = mLauncher.eventsCheck()) { final Point launchableCenter = getObject().getVisibleCenter(); final Point displaySize = mLauncher.getRealDisplaySize(); @@ -93,6 +94,7 @@ abstract class Launchable { displaySize.y / 2), getLongPressIndicator(), startsActivity, + isWidgetShortcut, () -> addExpectedEventsForLongClick()); } } diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java index 710ce9ee2b..ab8f5e6115 100644 --- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java @@ -99,6 +99,7 @@ public final class LauncherInstrumentation { private static final Pattern EVENT_PILFER_POINTERS = Pattern.compile("pilferPointers"); static final Pattern EVENT_START_ACTIVITY = Pattern.compile("Activity\\.onStart"); static final Pattern EVENT_STOP_ACTIVITY = Pattern.compile("Activity\\.onStop"); + static final Pattern EVENT_START = Pattern.compile("start:"); static final Pattern EVENT_TOUCH_DOWN_TIS = getTouchEventPatternTIS("ACTION_DOWN"); static final Pattern EVENT_TOUCH_UP_TIS = getTouchEventPatternTIS("ACTION_UP"); diff --git a/tests/tapl/com/android/launcher3/tapl/OptionsPopupMenuItem.java b/tests/tapl/com/android/launcher3/tapl/OptionsPopupMenuItem.java index 63a97f4ec4..d1268ccc2c 100644 --- a/tests/tapl/com/android/launcher3/tapl/OptionsPopupMenuItem.java +++ b/tests/tapl/com/android/launcher3/tapl/OptionsPopupMenuItem.java @@ -43,6 +43,7 @@ public class OptionsPopupMenuItem { LauncherInstrumentation.log("OptionsPopupMenuItem before click " + mObject.getVisibleCenter() + " in " + mLauncher.getVisibleBounds(mObject)); mLauncher.clickLauncherObject(mObject); + mLauncher.expectEvent(TestProtocol.SEQUENCE_MAIN, LauncherInstrumentation.EVENT_START); if (!Build.MODEL.contains("Cuttlefish") || Build.VERSION.SDK_INT <= Build.VERSION_CODES.Q && !"R".equals(Build.VERSION.CODENAME)) { diff --git a/tests/tapl/com/android/launcher3/tapl/Workspace.java b/tests/tapl/com/android/launcher3/tapl/Workspace.java index b3b5e3215a..0d91dc2db8 100644 --- a/tests/tapl/com/android/launcher3/tapl/Workspace.java +++ b/tests/tapl/com/android/launcher3/tapl/Workspace.java @@ -180,6 +180,7 @@ public final class Workspace extends Home { mLauncher.getVisibleBounds(workspace).centerY()), "deep_shortcuts_container", false, + false, () -> mLauncher.expectEvent( TestProtocol.SEQUENCE_MAIN, LONG_CLICK_EVENT)); verifyActiveContainer(); @@ -202,7 +203,8 @@ public final class Workspace extends Home { static void dragIconToWorkspace( LauncherInstrumentation launcher, Launchable launchable, Point dest, - String longPressIndicator, boolean startsActivity, Runnable expectLongClickEvents) { + String longPressIndicator, boolean startsActivity, boolean isWidgetShortcut, + Runnable expectLongClickEvents) { LauncherInstrumentation.log("dragIconToWorkspace: begin"); final Point launchableCenter = launchable.getObject().getVisibleCenter(); final long downTime = SystemClock.uptimeMillis(); @@ -224,6 +226,9 @@ public final class Workspace extends Home { downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, dest, LauncherInstrumentation.GestureScope.INSIDE), NORMAL_STATE_ORDINAL); + if (startsActivity || isWidgetShortcut) { + launcher.expectEvent(TestProtocol.SEQUENCE_MAIN, LauncherInstrumentation.EVENT_START); + } if (startsActivity) { launcher.expectEvent( TestProtocol.SEQUENCE_MAIN, LauncherInstrumentation.EVENT_STOP_ACTIVITY);