Fix folder app icon truncation after rotating to landscape.

The folder bubble text views were being recycled after the launcher's
cache was cleared. This caused the new orientation's folders to re-use
the old views with their stale configuration. After this change, the
cache won't recycle views whose cache entry has been recreated,
implying that their environment might have changed and new setup is
required.

Bug: 230304658
Test: Verified erroneous UX on device was no longer reproducible after fix.
Change-Id: Ib01cf5792d83df752e05534e5aa08ab8e8763bdc
This commit is contained in:
Stefan Andonian
2022-05-20 23:30:02 +00:00
parent 1803095c7a
commit 140ed429ea
2 changed files with 15 additions and 4 deletions

View File

@@ -21,6 +21,8 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.android.launcher3.R;
/**
* Utility class to cache views at an activity level
*/
@@ -39,18 +41,26 @@ public class ViewCache {
mCache.put(layoutId, entry);
}
T result;
if (entry.mCurrentSize > 0) {
entry.mCurrentSize --;
T result = (T) entry.mViews[entry.mCurrentSize];
result = (T) entry.mViews[entry.mCurrentSize];
entry.mViews[entry.mCurrentSize] = null;
return result;
} else {
result = (T) LayoutInflater.from(context).inflate(layoutId, parent, false);
result.setTag(R.id.cache_entry_tag_id, entry);
}
return (T) LayoutInflater.from(context).inflate(layoutId, parent, false);
return result;
}
public void recycleView(int layoutId, View view) {
CacheEntry entry = mCache.get(layoutId);
if (entry != view.getTag(R.id.cache_entry_tag_id)) {
// Since this view was created, the cache has been reset. The view should not be
// recycled since this means the environment could also have changed, requiring new
// view setup.
return;
}
if (entry != null && entry.mCurrentSize < entry.mMaxSize) {
entry.mViews[entry.mCurrentSize] = view;
entry.mCurrentSize++;