Merge "Send TaskBar touch events to tests" into sc-v2-dev
diff --git a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
index a8658a7..82eaecd 100644
--- a/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
+++ b/quickstep/src/com/android/quickstep/AbsSwipeUpHandler.java
@@ -1382,11 +1382,17 @@
/**
* Cancels any running animation so that the active target can be overriden by a new swipe
- * handle (in case of quick switch).
+ * handler (in case of quick switch).
*/
private void cancelCurrentAnimation() {
mCanceled = true;
mCurrentShift.cancelAnimation();
+
+ // Cleanup when switching handlers
+ mInputConsumerProxy.unregisterCallback();
+ mActivityInitListener.unregister();
+ ActivityManagerWrapper.getInstance().unregisterTaskStackListener(mActivityRestartListener);
+ mTaskSnapshot = null;
}
private void invalidateHandler() {
diff --git a/quickstep/src/com/android/quickstep/views/TaskView.java b/quickstep/src/com/android/quickstep/views/TaskView.java
index 8ed6c14..8b64105 100644
--- a/quickstep/src/com/android/quickstep/views/TaskView.java
+++ b/quickstep/src/com/android/quickstep/views/TaskView.java
@@ -337,6 +337,7 @@
private float mFullscreenProgress;
private float mGridProgress;
private float mNonGridScale = 1;
+ private float mDismissScale = 1;
private final FullscreenDrawParams mCurrentFullscreenParams;
private final StatefulActivity mActivity;
@@ -916,9 +917,6 @@
if (mActivity.getDeviceProfile().isTablet && FeatureFlags.ENABLE_OVERVIEW_GRID.get()) {
setPivotX(getLayoutDirection() == LAYOUT_DIRECTION_RTL ? 0 : right - left);
setPivotY(mSnapshotView.getTop());
- mSnapshotView.setPivotX(
- getLayoutDirection() == LAYOUT_DIRECTION_RTL ? 0 : right - left);
- mSnapshotView.setPivotY(0);
} else {
setPivotX((right - left) * 0.5f);
setPivotY(mSnapshotView.getTop() + mSnapshotView.getHeight() * 0.5f);
@@ -950,8 +948,8 @@
}
private void setSnapshotScale(float dismissScale) {
- mSnapshotView.setScaleX(dismissScale);
- mSnapshotView.setScaleY(dismissScale);
+ mDismissScale = dismissScale;
+ applyScale();
}
/**
@@ -969,6 +967,7 @@
private void applyScale() {
float scale = 1;
scale *= getPersistentScale();
+ scale *= mDismissScale;
setScaleX(scale);
setScaleY(scale);
}
diff --git a/src/com/android/launcher3/model/PackageUpdatedTask.java b/src/com/android/launcher3/model/PackageUpdatedTask.java
index 3c0a54a..82b0f7c 100644
--- a/src/com/android/launcher3/model/PackageUpdatedTask.java
+++ b/src/com/android/launcher3/model/PackageUpdatedTask.java
@@ -29,6 +29,7 @@
import android.os.UserManager;
import android.util.Log;
+import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherAppState;
import com.android.launcher3.LauncherSettings;
import com.android.launcher3.LauncherSettings.Favorites;
@@ -123,6 +124,14 @@
activitiesLists.put(
packages[i], appsList.updatePackage(context, packages[i], mUser));
app.getWidgetCache().removePackage(packages[i], mUser);
+
+ // The update may have changed which shortcuts/widgets are available.
+ // Refresh the widgets for the package if we have an activity running.
+ Launcher launcher = Launcher.ACTIVITY_TRACKER.getCreatedActivity();
+ if (launcher != null) {
+ launcher.refreshAndBindWidgetsForPackageUser(
+ new PackageUserKey(packages[i], mUser));
+ }
}
}
// Since package was just updated, the target must be available now.
diff --git a/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java b/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java
index 51c5b12..a66b031 100644
--- a/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java
+++ b/src_shortcuts_overrides/com/android/launcher3/model/WidgetsModel.java
@@ -15,6 +15,7 @@
import android.util.Log;
import androidx.annotation.Nullable;
+import androidx.collection.ArrayMap;
import com.android.launcher3.AppFilter;
import com.android.launcher3.InvariantDeviceProfile;
@@ -37,6 +38,7 @@
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -158,34 +160,29 @@
Log.d(TAG, "addWidgetsAndShortcuts, widgetsShortcuts#=" + rawWidgetsShortcuts.size());
}
- // Temporary list for {@link PackageItemInfos} to avoid having to go through
+ // Temporary cache for {@link PackageItemInfos} to avoid having to go through
// {@link mPackageItemInfos} to locate the key to be used for {@link #mWidgetsList}
- HashMap<WidgetPackageOrCategoryKey, PackageItemInfo> tmpPackageItemInfos = new HashMap<>();
+ PackageItemInfoCache packageItemInfoCache = new PackageItemInfoCache();
- // Clear the lists only if this is an update on all widgets and shortcuts. If packageUser
- // isn't null, only updates the shortcuts and widgets for the app represented in
- // packageUser.
if (packageUser == null) {
+ // Clear the list if this is an update on all widgets and shortcuts.
mWidgetsList.clear();
+ } else {
+ // Otherwise, only clear the widgets and shortcuts for the changed package.
+ mWidgetsList.remove(
+ packageItemInfoCache.getOrCreate(new WidgetPackageOrCategoryKey(packageUser)));
}
+
// add and update.
mWidgetsList.putAll(rawWidgetsShortcuts.stream()
.filter(new WidgetValidityCheck(app))
- .collect(Collectors.groupingBy(item -> {
- WidgetPackageOrCategoryKey packageUserKey = getWidgetPackageOrCategoryKey(item);
- PackageItemInfo pInfo = tmpPackageItemInfos.get(packageUserKey);
- if (pInfo == null) {
- pInfo = new PackageItemInfo(item.componentName.getPackageName(),
- packageUserKey.mCategory);
- pInfo.user = item.user;
- tmpPackageItemInfos.put(packageUserKey, pInfo);
- }
- return pInfo;
- })));
+ .collect(Collectors.groupingBy(item ->
+ packageItemInfoCache.getOrCreate(getWidgetPackageOrCategoryKey(item))
+ )));
// Update each package entry
IconCache iconCache = app.getIconCache();
- for (PackageItemInfo p : tmpPackageItemInfos.values()) {
+ for (PackageItemInfo p : packageItemInfoCache.values()) {
iconCache.getTitleAndIconForApp(p, true /* userLowResIcon */);
}
}
@@ -289,6 +286,10 @@
public final UserHandle mUser;
private final int mHashCode;
+ WidgetPackageOrCategoryKey(PackageUserKey key) {
+ this(key.mPackageName, key.mUser);
+ }
+
WidgetPackageOrCategoryKey(String packageName, UserHandle user) {
this(packageName, PackageItemInfo.NO_CATEGORY, user);
}
@@ -310,4 +311,22 @@
return mHashCode;
}
}
+
+ private static final class PackageItemInfoCache {
+ private final Map<WidgetPackageOrCategoryKey, PackageItemInfo> mMap = new ArrayMap<>();
+
+ PackageItemInfo getOrCreate(WidgetPackageOrCategoryKey key) {
+ PackageItemInfo pInfo = mMap.get(key);
+ if (pInfo == null) {
+ pInfo = new PackageItemInfo(key.mPackage, key.mCategory);
+ pInfo.user = key.mUser;
+ mMap.put(key, pInfo);
+ }
+ return pInfo;
+ }
+
+ Collection<PackageItemInfo> values() {
+ return mMap.values();
+ }
+ }
}
\ No newline at end of file