diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java index be3bdfa1f4e..76129b7d187 100644 --- a/src/com/android/settings/applications/ManageApplications.java +++ b/src/com/android/settings/applications/ManageApplications.java @@ -418,14 +418,14 @@ public class ManageApplications extends InstrumentedPreferenceFragment mFilterAdapter.enableFilter(FILTER_APPS_POWER_WHITELIST_ALL); } - AppFilter overrideFilter = getOverrideFilter(mListType, mStorageType, mVolumeUuid); - if (overrideFilter != null) { - mApplications.setOverrideFilter(overrideFilter); + AppFilter compositeFilter = getCompositeFilter(mListType, mStorageType, mVolumeUuid); + if (compositeFilter != null) { + mApplications.setCompositeFilter(compositeFilter); } } @VisibleForTesting - static @Nullable AppFilter getOverrideFilter(int listType, int storageType, String volumeUuid) { + static @Nullable AppFilter getCompositeFilter(int listType, int storageType, String volumeUuid) { AppFilter filter = new VolumeFilter(volumeUuid); if (listType == LIST_TYPE_STORAGE) { if (storageType == STORAGE_TYPE_MUSIC) { @@ -845,7 +845,7 @@ public class ManageApplications extends InstrumentedPreferenceFragment private int mWhichSize = SIZE_TOTAL; CharSequence mCurFilterPrefix; private PackageManager mPm; - private AppFilter mOverrideFilter; + private AppFilter mCompositeFilter; private boolean mHasReceivedLoadEntries; private boolean mHasReceivedBridgeCallback; private FileViewHolderController mExtraViewController; @@ -909,8 +909,8 @@ public class ManageApplications extends InstrumentedPreferenceFragment } } - public void setOverrideFilter(AppFilter overrideFilter) { - mOverrideFilter = overrideFilter; + public void setCompositeFilter(AppFilter compositeFilter) { + mCompositeFilter = compositeFilter; rebuild(true); } @@ -988,8 +988,8 @@ public class ManageApplications extends InstrumentedPreferenceFragment mWhichSize = SIZE_INTERNAL; } filterObj = FILTERS[mFilterMode]; - if (mOverrideFilter != null) { - filterObj = mOverrideFilter; + if (mCompositeFilter != null) { + filterObj = new CompoundFilter(filterObj, mCompositeFilter); } if (!mManageApplications.mShowSystem) { if (LIST_TYPES_WITH_INSTANT.contains(mManageApplications.mListType)) { diff --git a/tests/unit/src/com/android/settings/applications/ManageApplicationsTest.java b/tests/unit/src/com/android/settings/applications/ManageApplicationsTest.java index 92e556eaee0..d2077015509 100644 --- a/tests/unit/src/com/android/settings/applications/ManageApplicationsTest.java +++ b/tests/unit/src/com/android/settings/applications/ManageApplicationsTest.java @@ -22,16 +22,20 @@ import static org.mockito.Mockito.mock; import android.content.pm.ApplicationInfo; +import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.ApplicationsState.AppFilter; +import com.android.settingslib.applications.ApplicationsState.CompoundFilter; +import com.android.settingslib.applications.instantapps.InstantAppDataProvider; +import java.lang.reflect.Field; import org.junit.Test; public class ManageApplicationsTest { @Test - public void getOverrideFilter_filtersVolumeForAudio() { + public void getCompositeFilter_filtersVolumeForAudio() { AppFilter filter = - ManageApplications.getOverrideFilter( + ManageApplications.getCompositeFilter( ManageApplications.LIST_TYPE_STORAGE, ManageApplications.STORAGE_TYPE_MUSIC, "uuid"); @@ -45,9 +49,9 @@ public class ManageApplicationsTest { } @Test - public void getOverrideFilter_filtersVolumeForVideo() { + public void getCompositeFilter_filtersVolumeForVideo() { AppFilter filter = - ManageApplications.getOverrideFilter( + ManageApplications.getCompositeFilter( ManageApplications.LIST_TYPE_MOVIES, ManageApplications.STORAGE_TYPE_DEFAULT, "uuid"); @@ -61,9 +65,9 @@ public class ManageApplicationsTest { } @Test - public void getOverrideFilter_filtersVolumeForGames() { + public void getCompositeFilter_filtersVolumeForGames() { ApplicationsState.AppFilter filter = - ManageApplications.getOverrideFilter( + ManageApplications.getCompositeFilter( ManageApplications.LIST_TYPE_GAMES, ManageApplications.STORAGE_TYPE_DEFAULT, "uuid"); @@ -77,12 +81,35 @@ public class ManageApplicationsTest { } @Test - public void getOverrideFilter_isEmptyNormally() { + public void getCompositeFilter_isEmptyNormally() { ApplicationsState.AppFilter filter = - ManageApplications.getOverrideFilter( + ManageApplications.getCompositeFilter( ManageApplications.LIST_TYPE_MAIN, ManageApplications.STORAGE_TYPE_DEFAULT, "uuid"); assertThat(filter).isNull(); } + + @Test + public void getCompositeFilter_worksWithInstantApps() throws Exception { + Field field = AppUtils.class.getDeclaredField("sInstantAppDataProvider"); + field.setAccessible(true); + field.set(AppUtils.class, (InstantAppDataProvider) (i -> true)); + + AppFilter filter = + ManageApplications.getCompositeFilter( + ManageApplications.LIST_TYPE_STORAGE, + ManageApplications.STORAGE_TYPE_MUSIC, + "uuid"); + AppFilter composedFilter = new CompoundFilter(ApplicationsState.FILTER_INSTANT, filter); + + final ApplicationInfo info = new ApplicationInfo(); + info.volumeUuid = "uuid"; + info.category = ApplicationInfo.CATEGORY_AUDIO; + info.privateFlags = ApplicationInfo.PRIVATE_FLAG_INSTANT; + final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); + appEntry.info = info; + + assertThat(composedFilter.filterApp(appEntry)).isTrue(); + } }