Merge "Fixing recents animation not getting completed sometimes when using 3P launcher" into ub-launcher3-rvc-dev
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2efa66f..935bb40 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -172,8 +172,10 @@
<string name="folder_closed">Folder closed</string>
<!-- Folder renamed format -->
<string name="folder_renamed">Folder renamed to <xliff:g id="name" example="Games">%1$s</xliff:g></string>
- <!-- Folder name format -->
- <string name="folder_name_format">Folder: <xliff:g id="name" example="Games">%1$s</xliff:g></string>
+ <!-- Folder name format when folder has less than 4 items -->
+ <string name="folder_name_format_exact">Folder: <xliff:g id="name" example="Games">%1$s</xliff:g>, <xliff:g id="size" example="2">%2$d</xliff:g> items</string>
+ <!-- Folder name format when folder has 4 or more items shown in preview-->
+ <string name="folder_name_format_overflow">Folder: <xliff:g id="name" example="Games">%1$s</xliff:g>, <xliff:g id="size" example="2">%2$d</xliff:g> or more items</string>
<!-- Strings for the customization mode -->
<!-- Text for widget add button -->
diff --git a/src/com/android/launcher3/anim/FlingSpringAnim.java b/src/com/android/launcher3/anim/FlingSpringAnim.java
index 06d0f1c..6ea38ec 100644
--- a/src/com/android/launcher3/anim/FlingSpringAnim.java
+++ b/src/com/android/launcher3/anim/FlingSpringAnim.java
@@ -35,6 +35,7 @@
private final FlingAnimation mFlingAnim;
private SpringAnimation mSpringAnim;
+ private final boolean mSkipFlingAnim;
private float mTargetPosition;
@@ -57,6 +58,10 @@
.setMaxValue(maxValue);
mTargetPosition = targetPosition;
+ // We are already past the fling target, so skip it to avoid losing a frame of the spring.
+ mSkipFlingAnim = startPosition <= minValue && startVelocity < 0
+ || startPosition >= maxValue && startVelocity > 0;
+
mFlingAnim.addEndListener(((animation, canceled, value, velocity) -> {
mSpringAnim = new SpringAnimation(object, property)
.setStartValue(value)
@@ -84,6 +89,9 @@
public void start() {
mFlingAnim.start();
+ if (mSkipFlingAnim) {
+ mFlingAnim.cancel();
+ }
}
public void end() {
diff --git a/src/com/android/launcher3/folder/FolderIcon.java b/src/com/android/launcher3/folder/FolderIcon.java
index 098ce50..2be5883 100644
--- a/src/com/android/launcher3/folder/FolderIcon.java
+++ b/src/com/android/launcher3/folder/FolderIcon.java
@@ -201,8 +201,7 @@
icon.mActivity = activity;
icon.mDotRenderer = grid.mDotRendererWorkSpace;
- icon.setContentDescription(
- group.getContext().getString(R.string.folder_name_format, folderInfo.title));
+ icon.setContentDescription(icon.getAccessiblityTitle(folderInfo.title));
// Keep the notification dot up to date with the sum of all the content's dots.
FolderDotInfo folderDotInfo = new FolderDotInfo();
@@ -665,6 +664,7 @@
mDotInfo.addDotInfo(mActivity.getDotInfoForItem(item));
boolean isDotted = mDotInfo.hasDot();
updateDotScale(wasDotted, isDotted);
+ setContentDescription(getAccessiblityTitle(mInfo.title));
invalidate();
requestLayout();
}
@@ -675,13 +675,14 @@
mDotInfo.subtractDotInfo(mActivity.getDotInfoForItem(item));
boolean isDotted = mDotInfo.hasDot();
updateDotScale(wasDotted, isDotted);
+ setContentDescription(getAccessiblityTitle(mInfo.title));
invalidate();
requestLayout();
}
public void onTitleChanged(CharSequence title) {
mFolderName.setText(title);
- setContentDescription(getContext().getString(R.string.folder_name_format, title));
+ setContentDescription(getAccessiblityTitle(title));
}
@Override
@@ -775,4 +776,17 @@
public void getWorkspaceVisualDragBounds(Rect bounds) {
getPreviewBounds(bounds);
}
+
+ /**
+ * Returns a formatted accessibility title for folder
+ */
+ public String getAccessiblityTitle(CharSequence title) {
+ int size = mInfo.contents.size();
+ if (size < MAX_NUM_ITEMS_IN_PREVIEW) {
+ return getContext().getString(R.string.folder_name_format_exact, title, size);
+ } else {
+ return getContext().getString(R.string.folder_name_format_overflow, title,
+ MAX_NUM_ITEMS_IN_PREVIEW);
+ }
+ }
}