From b59f65d2d8c14028048ad6de2c4f9169bed8efa7 Mon Sep 17 00:00:00 2001 From: vadimt Date: Thu, 12 Sep 2019 17:05:39 -0700 Subject: [PATCH 1/8] Disable failing widget tests Bug: 140837771 Change-Id: Ibba7769543e682315ea23640f68416defa85f365 --- .../com/android/launcher3/ui/widget/AddConfigWidgetTest.java | 2 ++ tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java | 1 + 2 files changed, 3 insertions(+) diff --git a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java index 7f427b303b..489b035a37 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java @@ -70,12 +70,14 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest { @Test @PortraitLandscape + @Ignore public void testWidgetConfig() throws Throwable { runTest(true); } @Test @PortraitLandscape + @Ignore public void testConfigCancelled() throws Throwable { runTest(false); } diff --git a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java index 1c99f3198c..3be29fdaf5 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java @@ -42,6 +42,7 @@ public class AddWidgetTest extends AbstractLauncherUiTest { @Test @PortraitLandscape + @Ignore public void testDragIcon() throws Throwable { clearHomescreen(); mDevice.pressHome(); From b1ccbd9def7c1baa92ffb8a5d16ec623bb6acd5d Mon Sep 17 00:00:00 2001 From: vadimt Date: Thu, 12 Sep 2019 17:46:17 -0700 Subject: [PATCH 2/8] Fully qualifying @Ignore Strangely, @Ignore-s won't be recognized in ub-launcher-master Bug: 140837771 Change-Id: Ie5e4911d4812d396826b50024943c14c6bfe3376 --- .../com/android/launcher3/ui/widget/AddConfigWidgetTest.java | 4 ++-- tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java index 489b035a37..3f35a3a73a 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddConfigWidgetTest.java @@ -70,14 +70,14 @@ public class AddConfigWidgetTest extends AbstractLauncherUiTest { @Test @PortraitLandscape - @Ignore + @org.junit.Ignore public void testWidgetConfig() throws Throwable { runTest(true); } @Test @PortraitLandscape - @Ignore + @org.junit.Ignore public void testConfigCancelled() throws Throwable { runTest(false); } diff --git a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java index 816457f40c..1edce22ec6 100644 --- a/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/AddWidgetTest.java @@ -46,7 +46,7 @@ public class AddWidgetTest extends AbstractLauncherUiTest { @Test @PortraitLandscape - @Ignore + @org.junit.Ignore public void testDragIcon() throws Throwable { clearHomescreen(); mDevice.pressHome(); From 6b272369e7ff4fd5ccacc1a1054990347940cfab Mon Sep 17 00:00:00 2001 From: Tracy Zhou Date: Mon, 19 Aug 2019 22:42:32 -0700 Subject: [PATCH 3/8] Make sure that live tile overlay is added only once. Users report seeing empty launcher. After adding some logging, live tile overlay can be added twice and removed only once. I added some logic to make sure that it can only be added once. Test: manual Fixes: 135864059 Change-Id: I9d3325c56e76654f1397cc65979b97a6c0a80aee (cherry picked from commit d3ef57b4ddb635580fc5898d22b31193894cda60) (cherry picked from commit 4fa6f63ffd7a5ab230d17e8401d29cae3e5440b8) --- .../WindowTransformSwipeHandler.java | 24 +++++++++++++++---- .../android/quickstep/views/RecentsView.java | 2 +- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java index 0d29e5df84..a3bd348e20 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/WindowTransformSwipeHandler.java @@ -217,6 +217,7 @@ public class WindowTransformSwipeHandler private AnimationFactory mAnimationFactory = (t) -> { }; private LiveTileOverlay mLiveTileOverlay = new LiveTileOverlay(); + private boolean mLiveTileOverlayAttached = false; private boolean mWasLauncherAlreadyVisible; @@ -323,8 +324,7 @@ public class WindowTransformSwipeHandler mRecentsView = activity.getOverviewPanel(); linkRecentsViewScroll(); - mRecentsView.setLiveTileOverlay(mLiveTileOverlay); - mActivity.getRootView().getOverlay().add(mLiveTileOverlay); + addLiveTileOverlay(); mStateCallback.setState(STATE_LAUNCHER_PRESENT); if (alreadyOnHome) { @@ -972,7 +972,7 @@ public class WindowTransformSwipeHandler @Override public void onAnimationStart(Animator animation) { if (mActivity != null) { - mActivity.getRootView().getOverlay().remove(mLiveTileOverlay); + removeLiveTileOverlay(); } } @@ -1071,7 +1071,7 @@ public class WindowTransformSwipeHandler mRecentsView.onGestureAnimationEnd(); mActivity.getRootView().setOnApplyWindowInsetsListener(null); - mActivity.getRootView().getOverlay().remove(mLiveTileOverlay); + removeLiveTileOverlay(); } private void endLauncherTransitionController() { @@ -1201,6 +1201,22 @@ public class WindowTransformSwipeHandler updateFinalShift(); } + private synchronized void addLiveTileOverlay() { + if (!mLiveTileOverlayAttached) { + mActivity.getRootView().getOverlay().add(mLiveTileOverlay); + mRecentsView.setLiveTileOverlay(mLiveTileOverlay); + mLiveTileOverlayAttached = true; + } + } + + private synchronized void removeLiveTileOverlay() { + if (mLiveTileOverlayAttached) { + mActivity.getRootView().getOverlay().remove(mLiveTileOverlay); + mRecentsView.setLiveTileOverlay(null); + mLiveTileOverlayAttached = false; + } + } + public static float getHiddenTargetAlpha(RemoteAnimationTargetCompat app, float expectedAlpha) { if (!isNotInRecents(app)) { return 0; diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java index 1bf77f53cb..3e1d61aca1 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java @@ -825,7 +825,7 @@ public abstract class RecentsView extends PagedView impl */ public void onSwipeUpAnimationSuccess() { if (getRunningTaskView() != null) { - float startProgress = ENABLE_QUICKSTEP_LIVE_TILE.get() + float startProgress = ENABLE_QUICKSTEP_LIVE_TILE.get() && mLiveTileOverlay != null ? mLiveTileOverlay.cancelIconAnimation() : 0f; animateUpRunningTaskIconScale(startProgress); From c1322b6ac8677582355e700180ab554225f63952 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Mon, 16 Sep 2019 21:38:28 -0700 Subject: [PATCH 4/8] Key by both package and user for list of active install sessions. This fixes the bug where items are left on the home screen for the wrong user. Bug: 139281702 Change-Id: I03c31bb308fc496b9fc633c2fde23ae4568f8c44 --- .../launcher3/compat/PackageInstallerCompat.java | 14 ++++++++------ .../compat/PackageInstallerCompatVL.java | 7 ++++--- .../launcher3/model/FirstScreenBroadcast.java | 15 ++++++++++----- .../launcher3/model/GridSizeMigrationTask.java | 7 +++++-- src/com/android/launcher3/model/LoaderTask.java | 8 ++++++-- .../android/launcher3/util/PackageUserKey.java | 2 +- .../launcher3/ui/widget/BindWidgetTest.java | 12 +++++++++--- 7 files changed, 43 insertions(+), 22 deletions(-) diff --git a/src/com/android/launcher3/compat/PackageInstallerCompat.java b/src/com/android/launcher3/compat/PackageInstallerCompat.java index 11cb1f88d0..55df98b48f 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompat.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompat.java @@ -19,6 +19,7 @@ package com.android.launcher3.compat; import android.content.ComponentName; import android.content.Context; import android.content.pm.PackageInstaller; +import android.content.pm.PackageInstaller.SessionInfo; import android.os.Process; import android.os.UserHandle; @@ -29,6 +30,7 @@ import java.util.List; import androidx.annotation.NonNull; import com.android.launcher3.Utilities; +import com.android.launcher3.util.PackageUserKey; public abstract class PackageInstallerCompat { @@ -52,19 +54,19 @@ public abstract class PackageInstallerCompat { } } - public static UserHandle getUserHandle(PackageInstaller.SessionInfo info) { + public static UserHandle getUserHandle(SessionInfo info) { return Utilities.ATLEAST_Q ? info.getUser() : Process.myUserHandle(); } /** * @return a map of active installs to their progress */ - public abstract HashMap updateAndGetActiveSessionCache(); + public abstract HashMap updateAndGetActiveSessionCache(); /** * @return an active SessionInfo for {@param pkg} or null if none exists. */ - public abstract PackageInstaller.SessionInfo getActiveSessionInfo(UserHandle user, String pkg); + public abstract SessionInfo getActiveSessionInfo(UserHandle user, String pkg); public abstract void onStop(); @@ -75,7 +77,7 @@ public abstract class PackageInstallerCompat { public final int progress; public final UserHandle user; - private PackageInstallInfo(@NonNull PackageInstaller.SessionInfo info) { + private PackageInstallInfo(@NonNull SessionInfo info) { this.state = STATUS_INSTALLING; this.packageName = info.getAppPackageName(); this.componentName = new ComponentName(packageName, ""); @@ -91,7 +93,7 @@ public abstract class PackageInstallerCompat { this.user = user; } - public static PackageInstallInfo fromInstallingState(PackageInstaller.SessionInfo info) { + public static PackageInstallInfo fromInstallingState(SessionInfo info) { return new PackageInstallInfo(info); } @@ -101,7 +103,7 @@ public abstract class PackageInstallerCompat { } - public abstract List getAllVerifiedSessions(); + public abstract List getAllVerifiedSessions(); /** * Returns true if a promise icon was already added to the home screen for {@param sessionId}. diff --git a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java index ee9da73727..879d963c7c 100644 --- a/src/com/android/launcher3/compat/PackageInstallerCompatVL.java +++ b/src/com/android/launcher3/compat/PackageInstallerCompatVL.java @@ -90,12 +90,13 @@ public class PackageInstallerCompatVL extends PackageInstallerCompat { } @Override - public HashMap updateAndGetActiveSessionCache() { - HashMap activePackages = new HashMap<>(); + public HashMap updateAndGetActiveSessionCache() { + HashMap activePackages = new HashMap<>(); for (SessionInfo info : getAllVerifiedSessions()) { addSessionInfoToCache(info, getUserHandle(info)); if (info.getAppPackageName() != null) { - activePackages.put(info.getAppPackageName(), info); + activePackages.put(new PackageUserKey(info.getAppPackageName(), + getUserHandle(info)), info); mActiveSessions.put(info.getSessionId(), new PackageUserKey(info.getAppPackageName(), getUserHandle(info))); } diff --git a/src/com/android/launcher3/model/FirstScreenBroadcast.java b/src/com/android/launcher3/model/FirstScreenBroadcast.java index 1149b553f6..a0b7177630 100644 --- a/src/com/android/launcher3/model/FirstScreenBroadcast.java +++ b/src/com/android/launcher3/model/FirstScreenBroadcast.java @@ -26,6 +26,7 @@ import com.android.launcher3.ItemInfo; import com.android.launcher3.LauncherAppWidgetInfo; import com.android.launcher3.LauncherSettings; import com.android.launcher3.util.MultiHashMap; +import com.android.launcher3.util.PackageUserKey; import java.util.ArrayList; import java.util.HashMap; @@ -34,6 +35,8 @@ import java.util.List; import java.util.Map; import java.util.Set; +import static android.os.Process.myUserHandle; + /** * Helper class to send broadcasts to package installers that have: * - Items on the first screen @@ -60,7 +63,7 @@ public class FirstScreenBroadcast { private final MultiHashMap mPackagesForInstaller; - public FirstScreenBroadcast(HashMap sessionInfoForPackage) { + public FirstScreenBroadcast(HashMap sessionInfoForPackage) { mPackagesForInstaller = getPackagesForInstaller(sessionInfoForPackage); } @@ -69,11 +72,13 @@ public class FirstScreenBroadcast { * of packages with active sessions for that installer. */ private MultiHashMap getPackagesForInstaller( - HashMap sessionInfoForPackage) { + HashMap sessionInfoForPackage) { MultiHashMap packagesForInstaller = new MultiHashMap<>(); - for (Map.Entry entry : sessionInfoForPackage.entrySet()) { - packagesForInstaller.addToList(entry.getValue().getInstallerPackageName(), - entry.getKey()); + for (Map.Entry entry : sessionInfoForPackage.entrySet()) { + if (myUserHandle().equals(entry.getKey().mUser)) { + packagesForInstaller.addToList(entry.getValue().getInstallerPackageName(), + entry.getKey().mPackageName); + } } return packagesForInstaller; } diff --git a/src/com/android/launcher3/model/GridSizeMigrationTask.java b/src/com/android/launcher3/model/GridSizeMigrationTask.java index faecc067e4..783e908e30 100644 --- a/src/com/android/launcher3/model/GridSizeMigrationTask.java +++ b/src/com/android/launcher3/model/GridSizeMigrationTask.java @@ -34,10 +34,12 @@ import com.android.launcher3.provider.LauncherDbUtils.SQLiteTransaction; import com.android.launcher3.util.GridOccupancy; import com.android.launcher3.util.IntArray; import com.android.launcher3.util.IntSparseArrayMap; +import com.android.launcher3.util.PackageUserKey; import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; +import java.util.function.Consumer; import androidx.annotation.VisibleForTesting; @@ -970,8 +972,9 @@ public class GridSizeMigrationTask { .getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES)) { validPackages.add(info.packageName); } - validPackages.addAll(PackageInstallerCompat.getInstance(context) - .updateAndGetActiveSessionCache().keySet()); + PackageInstallerCompat.getInstance(context) + .updateAndGetActiveSessionCache().keySet() + .forEach(packageUserKey -> validPackages.add(packageUserKey.mPackageName)); return validPackages; } diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index 4b01b5ed17..18d17a58b7 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -19,6 +19,7 @@ package com.android.launcher3.model; import static com.android.launcher3.ItemInfoWithIcon.FLAG_DISABLED_LOCKED_USER; import static com.android.launcher3.ItemInfoWithIcon.FLAG_DISABLED_SAFEMODE; import static com.android.launcher3.ItemInfoWithIcon.FLAG_DISABLED_SUSPENDED; +import static com.android.launcher3.compat.PackageInstallerCompat.getUserHandle; import static com.android.launcher3.model.LoaderResults.filterCurrentWorkspaceItems; import android.appwidget.AppWidgetProviderInfo; @@ -72,6 +73,7 @@ import com.android.launcher3.util.ComponentKey; import com.android.launcher3.util.LooperIdleLock; import com.android.launcher3.util.MultiHashMap; import com.android.launcher3.util.PackageManagerHelper; +import com.android.launcher3.util.PackageUserKey; import com.android.launcher3.util.TraceHelper; import java.util.ArrayList; @@ -281,8 +283,9 @@ public class LoaderTask implements Runnable { synchronized (mBgDataModel) { mBgDataModel.clear(); - final HashMap installingPkgs = + final HashMap installingPkgs = mPackageInstaller.updateAndGetActiveSessionCache(); + final PackageUserKey tempPackageKey = new PackageUserKey(null, null); mFirstScreenBroadcast = new FirstScreenBroadcast(installingPkgs); Map shortcutKeyToPinnedShortcuts = new HashMap<>(); @@ -419,9 +422,10 @@ public class LoaderTask implements Runnable { // installed later. FileLog.d(TAG, "package not yet restored: " + targetPkg); + tempPackageKey.update(targetPkg, c.user); if (c.hasRestoreFlag(WorkspaceItemInfo.FLAG_RESTORE_STARTED)) { // Restore has started once. - } else if (installingPkgs.containsKey(targetPkg)) { + } else if (installingPkgs.containsKey(tempPackageKey)) { // App restore has started. Update the flag c.restoreFlag |= WorkspaceItemInfo.FLAG_RESTORE_STARTED; c.updater().put(LauncherSettings.Favorites.RESTORED, diff --git a/src/com/android/launcher3/util/PackageUserKey.java b/src/com/android/launcher3/util/PackageUserKey.java index 8dc45f5476..aa11968e41 100644 --- a/src/com/android/launcher3/util/PackageUserKey.java +++ b/src/com/android/launcher3/util/PackageUserKey.java @@ -31,7 +31,7 @@ public class PackageUserKey { update(packageName, user); } - private void update(String packageName, UserHandle user) { + public void update(String packageName, UserHandle user) { mPackageName = packageName; mUser = user; mHashCode = Arrays.hashCode(new Object[] {packageName, user}); diff --git a/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java b/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java index 3a7df64e81..e6348d9c02 100644 --- a/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java +++ b/tests/src/com/android/launcher3/ui/widget/BindWidgetTest.java @@ -44,6 +44,7 @@ import com.android.launcher3.tapl.Workspace; import com.android.launcher3.ui.AbstractLauncherUiTest; import com.android.launcher3.ui.TestViewHelpers; import com.android.launcher3.util.ContentWriter; +import com.android.launcher3.util.PackageUserKey; import com.android.launcher3.util.rule.ShellCommandRule; import com.android.launcher3.widget.PendingAddWidgetInfo; import com.android.launcher3.widget.WidgetHostViewLoader; @@ -54,7 +55,9 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import java.util.HashSet; import java.util.Set; +import java.util.function.Consumer; /** * Tests for bind widget flow. @@ -326,9 +329,12 @@ public class BindWidgetTest extends AbstractLauncherUiTest { int count = 0; String pkg = invalidPackage; - Set activePackage = getOnUiThread(() -> - PackageInstallerCompat.getInstance(mTargetContext) - .updateAndGetActiveSessionCache().keySet()); + Set activePackage = getOnUiThread(() -> { + Set packages = new HashSet<>(); + PackageInstallerCompat.getInstance(mTargetContext).updateAndGetActiveSessionCache() + .keySet().forEach(packageUserKey -> packages.add(packageUserKey.mPackageName)); + return packages; + }); while(true) { try { mTargetContext.getPackageManager().getPackageInfo( From 8c2ae545cf13d6c0aff6ecef1d6b0a0e87f0f980 Mon Sep 17 00:00:00 2001 From: vadimt Date: Wed, 14 Aug 2019 17:45:45 -0700 Subject: [PATCH 5/8] Support for tests that a leak is detected Bug: 139137636 Change-Id: Ib4f02d6b3798e3fdf3d8e5758c09d2b642404af5 Merged-in: Ib4f02d6b3798e3fdf3d8e5758c09d2b642404af5 --- .../testing/TestInformationHandler.java | 29 +++++++++++++++++++ .../launcher3/testing/TestProtocol.java | 2 ++ .../tapl/LauncherInstrumentation.java | 8 +++++ 3 files changed, 39 insertions(+) diff --git a/src/com/android/launcher3/testing/TestInformationHandler.java b/src/com/android/launcher3/testing/TestInformationHandler.java index 243ff6f965..790a2e8448 100644 --- a/src/com/android/launcher3/testing/TestInformationHandler.java +++ b/src/com/android/launcher3/testing/TestInformationHandler.java @@ -15,7 +15,11 @@ */ package com.android.launcher3.testing; +import static android.graphics.Bitmap.Config.ARGB_8888; + import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Color; import android.os.Bundle; import android.os.Debug; @@ -29,6 +33,7 @@ import com.android.launcher3.R; import com.android.launcher3.allapps.AllAppsStore; import com.android.launcher3.util.ResourceBasedOverride; +import java.util.LinkedList; import java.util.concurrent.ExecutionException; public class TestInformationHandler implements ResourceBasedOverride { @@ -42,6 +47,7 @@ public class TestInformationHandler implements ResourceBasedOverride { protected DeviceProfile mDeviceProfile; protected LauncherAppState mLauncherAppState; protected Launcher mLauncher; + private static LinkedList mLeaks; public void init(Context context) { mContext = context; @@ -120,6 +126,29 @@ public class TestInformationHandler implements ResourceBasedOverride { response.putInt(TestProtocol.TEST_INFO_RESPONSE_FIELD, mem.getTotalPss()); break; } + + case TestProtocol.REQUEST_JAVA_LEAK: { + if (mLeaks == null) mLeaks = new LinkedList(); + + // Allocate and dirty the memory. + final int leakSize = 1024 * 1024; + final byte[] bytes = new byte[leakSize]; + for (int i = 0; i < leakSize; i += 239) { + bytes[i] = (byte) (i % 256); + } + mLeaks.add(bytes); + break; + } + + case TestProtocol.REQUEST_NATIVE_LEAK: { + if (mLeaks == null) mLeaks = new LinkedList(); + + // Allocate and dirty a bitmap. + final Bitmap bitmap = Bitmap.createBitmap(512, 512, ARGB_8888); + bitmap.eraseColor(Color.RED); + mLeaks.add(bitmap); + break; + } } return response; } diff --git a/src/com/android/launcher3/testing/TestProtocol.java b/src/com/android/launcher3/testing/TestProtocol.java index 60a59ddfac..232a764e01 100644 --- a/src/com/android/launcher3/testing/TestProtocol.java +++ b/src/com/android/launcher3/testing/TestProtocol.java @@ -74,6 +74,8 @@ public final class TestProtocol { public static final String REQUEST_OVERVIEW_LEFT_GESTURE_MARGIN = "overview-left-margin"; public static final String REQUEST_OVERVIEW_RIGHT_GESTURE_MARGIN = "overview-right-margin"; public static final String REQUEST_TOTAL_PSS_KB = "total_pss"; + public static final String REQUEST_JAVA_LEAK = "java-leak"; + public static final String REQUEST_NATIVE_LEAK = "native-leak"; public static boolean sDebugTracing = false; public static final String REQUEST_ENABLE_DEBUG_TRACING = "enable-debug-tracing"; diff --git a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java index c6e7daceb3..15615fc6b6 100644 --- a/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java +++ b/tests/tapl/com/android/launcher3/tapl/LauncherInstrumentation.java @@ -961,4 +961,12 @@ public final class LauncherInstrumentation { return getTestInfo(TestProtocol.REQUEST_TOTAL_PSS_KB). getInt(TestProtocol.TEST_INFO_RESPONSE_FIELD); } + + public void produceJavaLeak() { + getTestInfo(TestProtocol.REQUEST_JAVA_LEAK); + } + + public void produceNativeLeak() { + getTestInfo(TestProtocol.REQUEST_NATIVE_LEAK); + } } \ No newline at end of file From 0638249b3eeb714b74645c63e42db302d1b6af4c Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Tue, 17 Sep 2019 15:02:52 -0700 Subject: [PATCH 6/8] Allow scroll to clear all in 3 button+fallback mode We weren't calling onSwipeUpToRecentsComplete(), which meant we kept the disallowScrollToClearAll from prepareRecentsUi indefinitely. Also don't update the icon scale if it is supposed to be scaled down, to avoid it from scaling up and overlapping with the app window. Fixes: 141184247 Change-Id: I49406764373e7121e289da7477dcbb58d0b98fd5 --- .../quickstep/AppToOverviewAnimationProvider.java | 1 + .../src/com/android/quickstep/views/RecentsView.java | 4 ++++ .../src/com/android/quickstep/views/TaskView.java | 9 +++++---- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java index 5ebefa337f..ad90e1686e 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/AppToOverviewAnimationProvider.java @@ -102,6 +102,7 @@ final class AppToOverviewAnimationProvider imple anim.addListener(new AnimationSuccessListener() { @Override public void onAnimationSuccess(Animator animator) { + mHelper.onSwipeUpToRecentsComplete(mActivity); if (mRecentsView != null) { mRecentsView.animateUpRunningTaskIconScale(); } diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java index 1bf77f53cb..d6117c1a7b 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java @@ -941,6 +941,10 @@ public abstract class RecentsView extends PagedView impl } } + public boolean isTaskIconScaledDown(TaskView taskView) { + return mRunningTaskIconScaledDown && getRunningTaskView() == taskView; + } + private void applyRunningTaskIconScale() { TaskView firstTask = getRunningTaskView(); if (firstTask != null) { diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java index 2211eb4dd7..bfb961320d 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/TaskView.java @@ -28,7 +28,6 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.TimeInterpolator; import android.animation.ValueAnimator; -import android.animation.ValueAnimator.AnimatorUpdateListener; import android.app.ActivityOptions; import android.content.Context; import android.content.res.Resources; @@ -54,7 +53,6 @@ import com.android.launcher3.Utilities; import com.android.launcher3.anim.AnimatorPlaybackController; import com.android.launcher3.anim.Interpolators; import com.android.launcher3.logging.UserEventDispatcher; -import com.android.launcher3.testing.TestProtocol; import com.android.launcher3.userevent.nano.LauncherLogProto; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Direction; import com.android.launcher3.userevent.nano.LauncherLogProto.Action.Touch; @@ -818,8 +816,11 @@ public class TaskView extends FrameLayout implements PageCallbacks, Reusable { / (getWidth() + currentInsetsLeft + currentInsetsRight)); } - // Some of the items in here are dependent on the current fullscreen params - setIconScaleAndDim(progress, true /* invert */); + if (!getRecentsView().isTaskIconScaledDown(this)) { + // Some of the items in here are dependent on the current fullscreen params, but don't + // update them if the icon is supposed to be scaled down. + setIconScaleAndDim(progress, true /* invert */); + } thumbnail.setFullscreenParams(mCurrentFullscreenParams); mOutlineProvider.setFullscreenParams(mCurrentFullscreenParams); From 6ed680258e13553623526ec956f5d81b79b4cbd9 Mon Sep 17 00:00:00 2001 From: Jon Miranda Date: Tue, 17 Sep 2019 19:16:52 -0700 Subject: [PATCH 7/8] Fix BindWidgetTests. Broken by change I03c31bb308fc496b9fc633c2fde23ae4568f8c44. Bug: 139281702 Test: Ran BindWidgetTest with 8/8 successful. Change-Id: I6a03744c9cd919316ff27b12c50acc70c91d47fa --- src/com/android/launcher3/model/LoaderTask.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/com/android/launcher3/model/LoaderTask.java b/src/com/android/launcher3/model/LoaderTask.java index 18d17a58b7..7593a3371a 100644 --- a/src/com/android/launcher3/model/LoaderTask.java +++ b/src/com/android/launcher3/model/LoaderTask.java @@ -540,7 +540,8 @@ public class LoaderTask implements Runnable { } if (c.restoreFlag != 0 && !TextUtils.isEmpty(targetPkg)) { - SessionInfo si = installingPkgs.get(targetPkg); + tempPackageKey.update(targetPkg, c.user); + SessionInfo si = installingPkgs.get(tempPackageKey); if (si == null) { info.status &= ~WorkspaceItemInfo.FLAG_INSTALL_SESSION_ACTIVE; } else { @@ -634,8 +635,10 @@ public class LoaderTask implements Runnable { appWidgetInfo = new LauncherAppWidgetInfo(appWidgetId, component); appWidgetInfo.restoreStatus = c.restoreFlag; + + tempPackageKey.update(component.getPackageName(), c.user); SessionInfo si = - installingPkgs.get(component.getPackageName()); + installingPkgs.get(tempPackageKey); Integer installProgress = si == null ? null : (int) (si.getProgress() * 100); From a0aee21fcd9efe24e974c46827fef2f14cb30119 Mon Sep 17 00:00:00 2001 From: Tony Wickham Date: Wed, 18 Sep 2019 09:24:03 -0700 Subject: [PATCH 8/8] Update mIsBeingDragged in onTouchEvent(ACTION_DOWN) The logic to keep mIsBeingDragged when touching down during a scroll animation was in onInterceptTouchEvent(), which we were bypassing by using onTouchEvent() directly. Now we update mIsBeingDragged on touch down in both onInterceptTouchEvent() and in onTouchEvent(). Bug: 141024521 Change-Id: I77abd4c36f3ccee27e160c817dadb3923e6cfc06 --- src/com/android/launcher3/PagedView.java | 39 +++++++++++++----------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/src/com/android/launcher3/PagedView.java b/src/com/android/launcher3/PagedView.java index bbb3915b58..70b55a44d2 100644 --- a/src/com/android/launcher3/PagedView.java +++ b/src/com/android/launcher3/PagedView.java @@ -890,23 +890,7 @@ public abstract class PagedView extends ViewGrou mTotalMotionX = 0; mActivePointerId = ev.getPointerId(0); - /* - * If being flinged and user touches the screen, initiate drag; - * otherwise don't. mScroller.isFinished should be false when - * being flinged. - */ - final int xDist = Math.abs(mScroller.getFinalPos() - mScroller.getCurrPos()); - final boolean finishedScrolling = (mScroller.isFinished() || xDist < mTouchSlop / 3); - - if (finishedScrolling) { - mIsBeingDragged = false; - if (!mScroller.isFinished() && !mFreeScroll) { - setCurrentPage(getNextPage()); - pageEndTransition(); - } - } else { - mIsBeingDragged = true; - } + updateIsBeingDraggedOnTouchDown(); break; } @@ -929,6 +913,25 @@ public abstract class PagedView extends ViewGrou return mIsBeingDragged; } + /** + * If being flinged and user touches the screen, initiate drag; otherwise don't. + */ + private void updateIsBeingDraggedOnTouchDown() { + // mScroller.isFinished should be false when being flinged. + final int xDist = Math.abs(mScroller.getFinalPos() - mScroller.getCurrPos()); + final boolean finishedScrolling = (mScroller.isFinished() || xDist < mTouchSlop / 3); + + if (finishedScrolling) { + mIsBeingDragged = false; + if (!mScroller.isFinished() && !mFreeScroll) { + setCurrentPage(getNextPage()); + pageEndTransition(); + } + } else { + mIsBeingDragged = true; + } + } + public boolean isHandlingTouch() { return mIsBeingDragged; } @@ -1104,6 +1107,8 @@ public abstract class PagedView extends ViewGrou switch (action & MotionEvent.ACTION_MASK) { case MotionEvent.ACTION_DOWN: + updateIsBeingDraggedOnTouchDown(); + /* * If being flinged and user touches, stop the fling. isFinished * will be false if being flinged.