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

Commit 4eb4f05e authored by Bryce Lee's avatar Bryce Lee
Browse files

Revert "Do not make strong reference to Resources."

This reverts commit 2d2315a6.

Reason for revert: possible cause for b/37156733

Change-Id: I02d468449f0632d1281ab5ad2a381e7e36a5b0ea
parent 2d2315a6
Loading
Loading
Loading
Loading
+6 −37
Original line number Diff line number Diff line
@@ -44,8 +44,6 @@ import com.android.internal.util.ArrayUtils;

import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;
import java.util.Objects;
import java.util.WeakHashMap;
import java.util.function.Predicate;
@@ -116,7 +114,7 @@ public class ResourcesManager {
     * A cache of DisplayId, Resources to Display. These display adjustments associated with these
     * {@link Display}s will change as the resources change.
     */
    private final ArrayMap<Pair<Integer, ResourcesKey>, WeakReference<Display>> mResourceDisplays =
    private final ArrayMap<Pair<Integer, Resources>, WeakReference<Display>> mResourceDisplays =
        new ArrayMap<>();

    public static ResourcesManager getInstance() {
@@ -139,7 +137,10 @@ public class ResourcesManager {
            for (int i = 0; i < mResourceImpls.size();) {
                final ResourcesKey key = mResourceImpls.keyAt(i);
                if (key.isPathReferenced(path)) {
                    cleanupResourceImpl(key);
                    final ResourcesImpl res = mResourceImpls.removeAt(i).get();
                    if (res != null) {
                        res.flushLayoutCache();
                    }
                    count++;
                } else {
                    i++;
@@ -250,14 +251,8 @@ public class ResourcesManager {
     * @param resources The {@link Resources} backing the display adjustments.
     */
    public Display getAdjustedDisplay(final int displayId, Resources resources) {
        final Pair<Integer, Resources> key = Pair.create(displayId, resources);
        synchronized (this) {
            // Note that the ResourcesKey might be {@code null} in the case that the
            // {@link Resources} is actually from {@link Resources#getSystem}. In this case, it is
            // not managed by {@link ResourcesManager}, but we still want to cache the display
            // object.
            final Pair<Integer, ResourcesKey> key = Pair.create(displayId,
                    findKeyForResourceImplLocked(resources.getImpl()));

            WeakReference<Display> wd = mResourceDisplays.get(key);
            if (wd != null) {
                final Display display = wd.get();
@@ -278,32 +273,6 @@ public class ResourcesManager {
        }
    }

    private void cleanupResourceImpl(ResourcesKey removedKey) {
        // Remove any resource to display mapping based on this key.
        final Iterator<Map.Entry<Pair<Integer, ResourcesKey>, WeakReference<Display>>> iter =
                mResourceDisplays.entrySet().iterator();
        while (iter.hasNext()) {
            final Map.Entry<Pair<Integer, ResourcesKey>, WeakReference<Display>> entry =
                    iter.next();
            final ResourcesKey key = entry.getKey().second;

            // Do not touch system resource displays (indicated by a {@code null} key) or
            // non-matching keys.
            if (key == null || !key.equals(removedKey)) {
                continue;
            }

            iter.remove();
        }

        // Remove resource key to resource impl mapping and flush cache
        final ResourcesImpl res = mResourceImpls.remove(removedKey).get();

        if (res != null) {
            res.flushLayoutCache();
        }
    }

    /**
     * Creates an AssetManager from the paths within the ResourcesKey.
     *