Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 28f61b51 authored by Stefan Andonian's avatar Stefan Andonian
Browse files

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
parent 4608bd00
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -37,4 +37,5 @@

    <item type="id" name="quick_settings_button" />
    <item type="id" name="notifications_button" />
    <item type="id" name="cache_entry_tag_id" />
</resources>
+14 −4
Original line number Diff line number Diff line
@@ -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++;