1 /* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.applications.manageapplications; 18 19 import static com.google.common.truth.Truth.assertThat; 20 21 import static org.mockito.Mockito.mock; 22 23 import android.content.pm.ApplicationInfo; 24 25 import androidx.test.filters.SmallTest; 26 import androidx.test.runner.AndroidJUnit4; 27 28 import com.android.settingslib.applications.AppUtils; 29 import com.android.settingslib.applications.ApplicationsState; 30 import com.android.settingslib.applications.ApplicationsState.AppFilter; 31 import com.android.settingslib.applications.ApplicationsState.CompoundFilter; 32 import com.android.settingslib.applications.instantapps.InstantAppDataProvider; 33 34 import org.junit.Test; 35 import org.junit.runner.RunWith; 36 37 import java.lang.reflect.Field; 38 39 @SmallTest 40 @RunWith(AndroidJUnit4.class) 41 public class ManageApplicationsUnitTest { 42 @Test getCompositeFilter_filtersVolumeForAudio()43 public void getCompositeFilter_filtersVolumeForAudio() { 44 AppFilter filter = 45 ManageApplications.getCompositeFilter( 46 ManageApplications.LIST_TYPE_STORAGE, 47 ManageApplications.STORAGE_TYPE_MUSIC, 48 "uuid"); 49 final ApplicationInfo info = new ApplicationInfo(); 50 info.volumeUuid = "uuid"; 51 info.category = ApplicationInfo.CATEGORY_AUDIO; 52 final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); 53 appEntry.info = info; 54 55 assertThat(filter.filterApp(appEntry)).isTrue(); 56 } 57 58 @Test getCompositeFilter_filtersVolumeForVideo()59 public void getCompositeFilter_filtersVolumeForVideo() { 60 AppFilter filter = 61 ManageApplications.getCompositeFilter( 62 ManageApplications.LIST_TYPE_MOVIES, 63 ManageApplications.STORAGE_TYPE_DEFAULT, 64 "uuid"); 65 final ApplicationInfo info = new ApplicationInfo(); 66 info.volumeUuid = "uuid"; 67 info.category = ApplicationInfo.CATEGORY_VIDEO; 68 final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); 69 appEntry.info = info; 70 71 assertThat(filter.filterApp(appEntry)).isTrue(); 72 } 73 74 @Test getCompositeFilter_filtersVolumeForGames()75 public void getCompositeFilter_filtersVolumeForGames() { 76 ApplicationsState.AppFilter filter = 77 ManageApplications.getCompositeFilter( 78 ManageApplications.LIST_TYPE_GAMES, 79 ManageApplications.STORAGE_TYPE_DEFAULT, 80 "uuid"); 81 final ApplicationInfo info = new ApplicationInfo(); 82 info.volumeUuid = "uuid"; 83 info.category = ApplicationInfo.CATEGORY_GAME; 84 final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); 85 appEntry.info = info; 86 87 assertThat(filter.filterApp(appEntry)).isTrue(); 88 } 89 90 @Test getCompositeFilter_isEmptyNormally()91 public void getCompositeFilter_isEmptyNormally() { 92 ApplicationsState.AppFilter filter = 93 ManageApplications.getCompositeFilter( 94 ManageApplications.LIST_TYPE_MAIN, 95 ManageApplications.STORAGE_TYPE_DEFAULT, 96 "uuid"); 97 assertThat(filter).isNull(); 98 } 99 100 @Test getCompositeFilter_worksWithInstantApps()101 public void getCompositeFilter_worksWithInstantApps() throws Exception { 102 Field field = AppUtils.class.getDeclaredField("sInstantAppDataProvider"); 103 field.setAccessible(true); 104 field.set(AppUtils.class, (InstantAppDataProvider) (i -> true)); 105 106 AppFilter filter = 107 ManageApplications.getCompositeFilter( 108 ManageApplications.LIST_TYPE_STORAGE, 109 ManageApplications.STORAGE_TYPE_MUSIC, 110 "uuid"); 111 AppFilter composedFilter = new CompoundFilter(ApplicationsState.FILTER_INSTANT, filter); 112 113 final ApplicationInfo info = new ApplicationInfo(); 114 info.volumeUuid = "uuid"; 115 info.category = ApplicationInfo.CATEGORY_AUDIO; 116 info.privateFlags = ApplicationInfo.PRIVATE_FLAG_INSTANT; 117 final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); 118 appEntry.info = info; 119 120 assertThat(composedFilter.filterApp(appEntry)).isTrue(); 121 } 122 123 @Test getCompositeFilter_worksForLegacyPrivateSettings()124 public void getCompositeFilter_worksForLegacyPrivateSettings() throws Exception { 125 ApplicationsState.AppFilter filter = 126 ManageApplications.getCompositeFilter( 127 ManageApplications.LIST_TYPE_STORAGE, 128 ManageApplications.STORAGE_TYPE_LEGACY, 129 "uuid"); 130 final ApplicationInfo info = new ApplicationInfo(); 131 info.volumeUuid = "uuid"; 132 info.category = ApplicationInfo.CATEGORY_GAME; 133 final ApplicationsState.AppEntry appEntry = mock(ApplicationsState.AppEntry.class); 134 appEntry.info = info; 135 136 assertThat(filter.filterApp(appEntry)).isTrue(); 137 } 138 } 139