Merge "Removing unnecessary corner size caching in RecentsModel" into ub-launcher3-master
diff --git a/go/quickstep/src/com/android/quickstep/TaskListLoader.java b/go/quickstep/src/com/android/quickstep/TaskListLoader.java
index 1234989..51b73f1 100644
--- a/go/quickstep/src/com/android/quickstep/TaskListLoader.java
+++ b/go/quickstep/src/com/android/quickstep/TaskListLoader.java
@@ -68,16 +68,26 @@
}
/**
+ * Whether or not the loader needs to load data to be up to date. This can return true if the
+ * task list is already up to date OR there is already a load in progress for the task list to
+ * become up to date.
+ *
+ * @return true if already up to date or load in progress, false otherwise
+ */
+ public boolean needsToLoad() {
+ return !mRecentsModel.isTaskListValid(mTaskListChangeId);
+ }
+
+ /**
* Fetches the most recent tasks and updates the task list asynchronously. This call does not
* provide guarantees the task content (icon, thumbnail, label) are loaded but will fill in
* what it has. May run the callback immediately if there have been no changes in the task
- * list.
+ * list since the start of the last load.
*
* @param onLoadedCallback callback to run when task list is loaded
*/
public void loadTaskList(@Nullable Consumer<ArrayList<Task>> onLoadedCallback) {
- if (mRecentsModel.isTaskListValid(mTaskListChangeId)) {
- // Current task list is already up to date. No need to update.
+ if (!needsToLoad()) {
if (onLoadedCallback != null) {
onLoadedCallback.accept(mTaskList);
}
diff --git a/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java b/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java
index f525c9d..c06b6ec 100644
--- a/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java
+++ b/go/quickstep/src/com/android/quickstep/views/IconRecentsView.java
@@ -28,6 +28,10 @@
import android.util.FloatProperty;
import android.view.View;
import android.view.ViewDebug;
+import android.view.animation.AlphaAnimation;
+import android.view.animation.Animation;
+import android.view.animation.AnimationSet;
+import android.view.animation.LayoutAnimationController;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
@@ -69,6 +73,8 @@
}
};
private static final long CROSSFADE_DURATION = 300;
+ private static final long LAYOUT_ITEM_ANIMATE_IN_DURATION = 150;
+ private static final long LAYOUT_ITEM_ANIMATE_IN_DELAY_BETWEEN = 40;
private static final long ITEM_ANIMATE_OUT_DURATION = 150;
private static final long ITEM_ANIMATE_OUT_DELAY_BETWEEN = 40;
private static final float ITEM_ANIMATE_OUT_TRANSLATION_X_RATIO = .25f;
@@ -84,6 +90,7 @@
private final TaskListLoader mTaskLoader;
private final TaskAdapter mTaskAdapter;
private final TaskActionController mTaskActionController;
+ private final LayoutAnimationController mLayoutAnimation;
private RecentsToActivityHelper mActivityHelper;
private RecyclerView mTaskRecyclerView;
@@ -99,6 +106,7 @@
mTaskAdapter = new TaskAdapter(mTaskLoader);
mTaskActionController = new TaskActionController(mTaskLoader, mTaskAdapter);
mTaskAdapter.setActionController(mTaskActionController);
+ mLayoutAnimation = createLayoutAnimation();
}
@Override
@@ -112,6 +120,7 @@
ItemTouchHelper helper = new ItemTouchHelper(
new TaskSwipeCallback(mTaskActionController));
helper.attachToRecyclerView(mTaskRecyclerView);
+ mTaskRecyclerView.setLayoutAnimation(mLayoutAnimation);
mEmptyView = findViewById(R.id.recent_task_empty_view);
mContentView = findViewById(R.id.recent_task_content_view);
@@ -131,7 +140,6 @@
}
}
-
@Override
public void setEnabled(boolean enabled) {
super.setEnabled(enabled);
@@ -157,9 +165,14 @@
* becomes visible.
*/
public void onBeginTransitionToOverview() {
+ mTaskRecyclerView.scheduleLayoutAnimation();
+
+ // Load any task changes
+ if (!mTaskLoader.needsToLoad()) {
+ return;
+ }
mTaskAdapter.setIsShowingLoadingUi(true);
mTaskAdapter.notifyDataSetChanged();
- // Load any task changes
mTaskLoader.loadTaskList(tasks -> {
mTaskAdapter.setIsShowingLoadingUi(false);
// TODO: Animate the loading UI out and the loaded data in.
@@ -324,4 +337,18 @@
}
});
}
+
+ private static LayoutAnimationController createLayoutAnimation() {
+ AnimationSet anim = new AnimationSet(false /* shareInterpolator */);
+
+ Animation alphaAnim = new AlphaAnimation(0, 1);
+ alphaAnim.setDuration(LAYOUT_ITEM_ANIMATE_IN_DURATION);
+ anim.addAnimation(alphaAnim);
+
+ LayoutAnimationController layoutAnim = new LayoutAnimationController(anim);
+ layoutAnim.setDelay(
+ (float) LAYOUT_ITEM_ANIMATE_IN_DELAY_BETWEEN / LAYOUT_ITEM_ANIMATE_IN_DURATION);
+
+ return layoutAnim;
+ }
}
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 7822e05..7804133 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -37,8 +37,6 @@
<dimen name="dynamic_grid_hotseat_side_padding">0dp</dimen>
<!-- Hotseat/all-apps scrim -->
- <dimen name="all_apps_scrim_radius">8dp</dimen>
- <dimen name="all_apps_scrim_margin">8dp</dimen>
<dimen name="all_apps_scrim_blur">4dp</dimen>
<dimen name="vertical_drag_handle_size">24dp</dimen>
<dimen name="vertical_drag_handle_overlap_workspace">0dp</dimen>
diff --git a/src/com/android/launcher3/CheckLongPressHelper.java b/src/com/android/launcher3/CheckLongPressHelper.java
index 639c173..5424a8f 100644
--- a/src/com/android/launcher3/CheckLongPressHelper.java
+++ b/src/com/android/launcher3/CheckLongPressHelper.java
@@ -33,12 +33,20 @@
class CheckForLongPress implements Runnable {
public void run() {
+ if (com.android.launcher3.TestProtocol.sDebugTracing) {
+ android.util.Log.d(com.android.launcher3.TestProtocol.NO_DRAG_TAG,
+ "CheckForLongPress1");
+ }
if ((mView.getParent() != null) && mView.hasWindowFocus()
&& !mHasPerformedLongPress) {
boolean handled;
if (mListener != null) {
handled = mListener.onLongClick(mView);
} else {
+ if (com.android.launcher3.TestProtocol.sDebugTracing) {
+ android.util.Log.d(com.android.launcher3.TestProtocol.NO_DRAG_TAG,
+ "CheckForLongPress2");
+ }
handled = mView.performLongClick();
}
if (handled) {
@@ -73,11 +81,20 @@
}
mView.postDelayed(mPendingCheckForLongPress,
(long) (ViewConfiguration.getLongPressTimeout() * mLongPressTimeoutFactor));
+ if (com.android.launcher3.TestProtocol.sDebugTracing) {
+ android.util.Log.d(com.android.launcher3.TestProtocol.NO_DRAG_TAG,
+ "postCheckForLongPress: " + ViewConfiguration.getLongPressTimeout() + " "
+ + mLongPressTimeoutFactor);
+ }
}
public void cancelLongPress() {
mHasPerformedLongPress = false;
if (mPendingCheckForLongPress != null) {
+ if (com.android.launcher3.TestProtocol.sDebugTracing) {
+ android.util.Log.d(com.android.launcher3.TestProtocol.NO_DRAG_TAG,
+ "cancelLongPress");
+ }
mView.removeCallbacks(mPendingCheckForLongPress);
mPendingCheckForLongPress = null;
}
diff --git a/src/com/android/launcher3/popup/ArrowPopup.java b/src/com/android/launcher3/popup/ArrowPopup.java
index 0d499c1..a229207 100644
--- a/src/com/android/launcher3/popup/ArrowPopup.java
+++ b/src/com/android/launcher3/popup/ArrowPopup.java
@@ -82,7 +82,8 @@
public ArrowPopup(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
mInflater = LayoutInflater.from(context);
- mOutlineRadius = getResources().getDimension(R.dimen.bg_round_rect_radius);
+ mOutlineRadius = Themes.getDialogCornerRadius(context,
+ getResources().getDimension(R.dimen.bg_round_rect_radius));
mLauncher = Launcher.getLauncher(context);
mIsRtl = Utilities.isRtl(getResources());
diff --git a/src/com/android/launcher3/util/Themes.java b/src/com/android/launcher3/util/Themes.java
index 675e2f4..17b7e8d 100644
--- a/src/com/android/launcher3/util/Themes.java
+++ b/src/com/android/launcher3/util/Themes.java
@@ -25,11 +25,24 @@
import android.util.SparseArray;
import android.util.TypedValue;
+import com.android.launcher3.R;
+
/**
* Various utility methods associated with theming.
*/
public class Themes {
+ public static float getDialogCornerRadius(Context context, float defaultValue) {
+ return getDimension(context, android.R.attr.dialogCornerRadius, defaultValue);
+ }
+
+ public static float getDimension(Context context, int attr, float defaultValue) {
+ TypedArray ta = context.obtainStyledAttributes(new int[]{attr});
+ float value = ta.getDimension(0, defaultValue);
+ ta.recycle();
+ return value;
+ }
+
public static int getColorAccent(Context context) {
return getAttrColor(context, android.R.attr.colorAccent);
}