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

Commit 7cf40fc0 authored by Sunny Goyal's avatar Sunny Goyal Committed by android-build-merger
Browse files

Merge "Resetting widget cache when some configurations change" into qt-dev

am: 5cb89967

Change-Id: I8f3b1ab541a0398191c1110dc1f8d6d1fb7786e5
parents dc4d3ec1 5cb89967
Loading
Loading
Loading
Loading
+20 −5
Original line number Original line Diff line number Diff line
@@ -28,7 +28,9 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.ServiceConnection;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ApplicationInfo;
import android.content.res.Configuration;
import android.os.Handler;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.IBinder;
@@ -554,6 +556,12 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback
        }
        }
    }
    }


    /**
     * Config diff flags for which the cache should be reset
     */
    private static final int CACHE_RESET_CONFIG_FLAGS = ActivityInfo.CONFIG_FONT_SCALE
            | ActivityInfo.CONFIG_UI_MODE | ActivityInfo.CONFIG_DENSITY
            | ActivityInfo.CONFIG_ASSETS_PATHS;
    /**
    /**
     *
     *
     */
     */
@@ -587,7 +595,6 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback
        // farthest items from when we hit the memory limit
        // farthest items from when we hit the memory limit
        private int mLastRequestedIndex;
        private int mLastRequestedIndex;



        // The lower and upper bounds of the preloaded range
        // The lower and upper bounds of the preloaded range
        private int mPreloadLowerBound;
        private int mPreloadLowerBound;
        private int mPreloadUpperBound;
        private int mPreloadUpperBound;
@@ -602,12 +609,17 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback
        private static final float sMaxCountSlackPercent = 0.75f;
        private static final float sMaxCountSlackPercent = 0.75f;
        private static final int sMaxMemoryLimitInBytes = 2 * 1024 * 1024;
        private static final int sMaxMemoryLimitInBytes = 2 * 1024 * 1024;


        public FixedSizeRemoteViewsCache(int maxCacheSize) {
        // Configuration for which the cache was created
        private final Configuration mConfiguration;

        FixedSizeRemoteViewsCache(int maxCacheSize, Configuration configuration) {
            mMaxCount = maxCacheSize;
            mMaxCount = maxCacheSize;
            mMaxCountSlack = Math.round(sMaxCountSlackPercent * (mMaxCount / 2));
            mMaxCountSlack = Math.round(sMaxCountSlackPercent * (mMaxCount / 2));
            mPreloadLowerBound = 0;
            mPreloadLowerBound = 0;
            mPreloadUpperBound = -1;
            mPreloadUpperBound = -1;
            mLastRequestedIndex = -1;
            mLastRequestedIndex = -1;

            mConfiguration = new Configuration(configuration);
        }
        }


        public void insert(int position, RemoteViews v, long itemId, int[] visibleWindow) {
        public void insert(int position, RemoteViews v, long itemId, int[] visibleWindow) {
@@ -852,7 +864,12 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback
                mAppWidgetId);
                mAppWidgetId);


        synchronized(sCachedRemoteViewsCaches) {
        synchronized(sCachedRemoteViewsCaches) {
            if (sCachedRemoteViewsCaches.containsKey(key)) {
            FixedSizeRemoteViewsCache cache = sCachedRemoteViewsCaches.get(key);
            Configuration config = context.getResources().getConfiguration();
            if (cache == null
                    || (cache.mConfiguration.diff(config) & CACHE_RESET_CONFIG_FLAGS) != 0) {
                mCache = new FixedSizeRemoteViewsCache(DEFAULT_CACHE_SIZE, config);
            } else {
                mCache = sCachedRemoteViewsCaches.get(key);
                mCache = sCachedRemoteViewsCaches.get(key);
                synchronized (mCache.mMetaData) {
                synchronized (mCache.mMetaData) {
                    if (mCache.mMetaData.count > 0) {
                    if (mCache.mMetaData.count > 0) {
@@ -861,8 +878,6 @@ public class RemoteViewsAdapter extends BaseAdapter implements Handler.Callback
                        mDataReady = true;
                        mDataReady = true;
                    }
                    }
                }
                }
            } else {
                mCache = new FixedSizeRemoteViewsCache(DEFAULT_CACHE_SIZE);
            }
            }
            if (!mDataReady) {
            if (!mDataReady) {
                requestBindService();
                requestBindService();