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

Commit 0847f140 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Clean up the hard cache in SettingSliceProvider."

parents b4ae464e a8291be3
Loading
Loading
Loading
Loading
+2 −13
Original line number Diff line number Diff line
@@ -28,12 +28,12 @@ import android.provider.Settings;
import android.provider.SettingsSlicesContract;
import android.text.TextUtils;
import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.KeyValueListParser;
import android.util.Log;
import android.util.Pair;

import androidx.annotation.VisibleForTesting;
import androidx.collection.ArraySet;
import androidx.slice.Slice;
import androidx.slice.SliceProvider;

@@ -53,7 +53,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.WeakHashMap;
import java.util.concurrent.ConcurrentHashMap;

/**
 * A {@link SliceProvider} for Settings to enabled inline results in system apps.
@@ -123,9 +122,6 @@ public class SettingsSliceProvider extends SliceProvider {
    @VisibleForTesting
    Map<Uri, SliceData> mSliceWeakDataCache;

    @VisibleForTesting
    Map<Uri, SliceData> mSliceDataCache;

    final Map<Uri, SliceBackgroundWorker> mPinnedWorkers = new ArrayMap<>();

    public SettingsSliceProvider() {
@@ -135,7 +131,6 @@ public class SettingsSliceProvider extends SliceProvider {
    @Override
    public boolean onCreateSliceProvider() {
        mSlicesDatabaseAccessor = new SlicesDatabaseAccessor(getContext());
        mSliceDataCache = new ConcurrentHashMap<>();
        mSliceWeakDataCache = new WeakHashMap<>();
        return true;
    }
@@ -170,7 +165,6 @@ public class SettingsSliceProvider extends SliceProvider {
    public void onSliceUnpinned(Uri sliceUri) {
        SliceBroadcastRelay.unregisterReceivers(getContext(), sliceUri);
        ThreadUtils.postOnMainThread(() -> stopBackgroundWorker(sliceUri));
        mSliceDataCache.remove(sliceUri);
    }

    @Override
@@ -226,7 +220,7 @@ public class SettingsSliceProvider extends SliceProvider {
            }

            // Remove the SliceData from the cache after it has been used to prevent a memory-leak.
            if (!mSliceDataCache.containsKey(sliceUri)) {
            if (!getPinnedSlices().contains(sliceUri)) {
                mSliceWeakDataCache.remove(sliceUri);
            }
            return SliceBuilderUtils.buildSlice(getContext(), cachedSliceData);
@@ -396,11 +390,6 @@ public class SettingsSliceProvider extends SliceProvider {

        ThreadUtils.postOnMainThread(() -> startBackgroundWorker(controller, uri));

        final List<Uri> pinnedSlices = getContext().getSystemService(
                SliceManager.class).getPinnedSlices();
        if (pinnedSlices.contains(uri)) {
            mSliceDataCache.put(uri, sliceData);
        }
        mSliceWeakDataCache.put(uri, sliceData);
        getContext().getContentResolver().notifyChange(uri, null /* content observer */);

+0 −37
Original line number Diff line number Diff line
@@ -133,7 +133,6 @@ public class SettingsSliceProviderTest {
        mProvider = spy(new SettingsSliceProvider());
        ShadowStrictMode.reset();
        mProvider.mSliceWeakDataCache = new HashMap<>();
        mProvider.mSliceDataCache = new HashMap<>();
        mProvider.mSlicesDatabaseAccessor = new SlicesDatabaseAccessor(mContext);
        when(mProvider.getContext()).thenReturn(mContext);

@@ -197,30 +196,6 @@ public class SettingsSliceProviderTest {
                .isEqualTo(FakeToggleController.TestWorker.class);
    }

    @Test
    public void testLoadSlice_doesNotCacheWithoutPin() {
        insertSpecialCase(KEY);
        final Uri uri = SliceBuilderUtils.getUri(INTENT_PATH, false);

        mProvider.loadSlice(uri);
        SliceData data = mProvider.mSliceDataCache.get(uri);

        assertThat(data).isNull();
    }

    @Test
    public void testLoadSlice_cachesWithPin() {
        insertSpecialCase(KEY);
        final Uri uri = SliceBuilderUtils.getUri(INTENT_PATH, false);
        when(mManager.getPinnedSlices()).thenReturn(Arrays.asList(uri));

        mProvider.loadSlice(uri);
        SliceData data = mProvider.mSliceDataCache.get(uri);

        assertThat(data.getKey()).isEqualTo(KEY);
        assertThat(data.getTitle()).isEqualTo(TITLE);
    }

    @Test
    public void testLoadSlice_cachedEntryRemovedOnBuild() {
        SliceData data = getDummyData();
@@ -276,18 +251,6 @@ public class SettingsSliceProviderTest {
        assertThat(slice).isNull();
    }

    @Test
    public void testLoadSlice_cachedEntryRemovedOnUnpin() {
        SliceData data = getDummyData();
        mProvider.mSliceDataCache.put(data.getUri(), data);
        mProvider.onSliceUnpinned(data.getUri());
        insertSpecialCase(data.getKey());

        SliceData cachedData = mProvider.mSliceWeakDataCache.get(data.getUri());

        assertThat(cachedData).isNull();
    }

    @Test
    public void getDescendantUris_fullActionUri_returnsSelf() {
        final Uri uri = SliceBuilderUtils.getUri(