| /* |
| * Copyright (C) 2015 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License |
| */ |
| |
| package android.content.pm; |
| |
| import android.content.Context; |
| import android.content.Intent; |
| import android.os.UserHandle; |
| import android.test.AndroidTestCase; |
| import android.view.inputmethod.InputMethodInfo; |
| |
| import java.util.Arrays; |
| import java.util.HashSet; |
| import java.util.List; |
| |
| public class AppsQueryHelperTests extends AndroidTestCase { |
| |
| private AppsQueryHelper mAppsQueryHelper; |
| |
| @Override |
| public void setUp() throws Exception { |
| super.setUp(); |
| mAppsQueryHelper = new AppsQueryHelperTestable(); |
| } |
| |
| public void testQueryAppsSystemAppsOnly() { |
| List<String> apps = mAppsQueryHelper.queryApps(0, true, UserHandle.SYSTEM); |
| assertEqualsIgnoreOrder(Arrays.asList("sys_app1", "sys_app2", "sys_app3"), apps); |
| |
| apps = mAppsQueryHelper.queryApps(0, false, UserHandle.SYSTEM); |
| assertEqualsIgnoreOrder(Arrays.asList("sys_app1", "sys_app2", "sys_app3", "app4"), apps); |
| } |
| |
| public void testQueryAppsNonLaunchable() { |
| List<String> apps = mAppsQueryHelper.queryApps(AppsQueryHelper.GET_NON_LAUNCHABLE_APPS, |
| true, UserHandle.SYSTEM); |
| assertEqualsIgnoreOrder(Arrays.asList("sys_app1", "sys_app3"), apps); |
| |
| apps = mAppsQueryHelper.queryApps(AppsQueryHelper.GET_NON_LAUNCHABLE_APPS, |
| false, UserHandle.SYSTEM); |
| assertEqualsIgnoreOrder(Arrays.asList("sys_app1", "sys_app3"), apps); |
| } |
| |
| public void testQueryAppsInteractAcrossUser() { |
| List<String> apps = mAppsQueryHelper.queryApps( |
| AppsQueryHelper.GET_APPS_WITH_INTERACT_ACROSS_USERS_PERM, true, UserHandle.SYSTEM); |
| assertEqualsIgnoreOrder(Arrays.asList("sys_app1"), apps); |
| |
| apps = mAppsQueryHelper.queryApps( |
| AppsQueryHelper.GET_APPS_WITH_INTERACT_ACROSS_USERS_PERM, false, UserHandle.SYSTEM); |
| assertEqualsIgnoreOrder(Arrays.asList("sys_app1"), apps); |
| } |
| |
| public void testQueryApps() { |
| List<String> apps = mAppsQueryHelper.queryApps( |
| AppsQueryHelper.GET_NON_LAUNCHABLE_APPS |
| |AppsQueryHelper.GET_APPS_WITH_INTERACT_ACROSS_USERS_PERM, |
| true, UserHandle.SYSTEM); |
| assertEqualsIgnoreOrder(Arrays.asList("sys_app1", "sys_app3"), apps); |
| |
| apps = mAppsQueryHelper.queryApps( |
| AppsQueryHelper.GET_NON_LAUNCHABLE_APPS |
| |AppsQueryHelper.GET_APPS_WITH_INTERACT_ACROSS_USERS_PERM, |
| false, UserHandle.SYSTEM); |
| assertEqualsIgnoreOrder(Arrays.asList("sys_app1", "sys_app3"), apps); |
| } |
| |
| public void testQueryAppsImes() { |
| // Test query system IMEs |
| List<String> apps = mAppsQueryHelper.queryApps(AppsQueryHelper.GET_IMES, |
| true, UserHandle.of(UserHandle.myUserId())); |
| assertEqualsIgnoreOrder(Arrays.asList("sys_app1"), apps); |
| |
| // Test query IMEs |
| apps = mAppsQueryHelper.queryApps(AppsQueryHelper.GET_IMES, false, |
| UserHandle.of(UserHandle.myUserId())); |
| assertEqualsIgnoreOrder(Arrays.asList("sys_app1", "app4"), apps); |
| } |
| |
| public void testQueryAppsRequiredForSystemUser() { |
| // Test query only system apps required for system user |
| List<String> apps = mAppsQueryHelper.queryApps(AppsQueryHelper.GET_REQUIRED_FOR_SYSTEM_USER, |
| true, UserHandle.SYSTEM); |
| assertEqualsIgnoreOrder(Arrays.asList("sys_app3"), apps); |
| |
| // Test query all apps required for system user |
| apps = mAppsQueryHelper.queryApps(AppsQueryHelper.GET_REQUIRED_FOR_SYSTEM_USER, false, |
| UserHandle.SYSTEM); |
| assertEqualsIgnoreOrder(Arrays.asList("sys_app3", "app4"), apps); |
| } |
| |
| private class AppsQueryHelperTestable extends AppsQueryHelper { |
| |
| @Override |
| protected List<ApplicationInfo> getAllApps(int userId) { |
| final ApplicationInfo ai1 = new ApplicationInfo(); |
| ai1.flags |= ApplicationInfo.FLAG_SYSTEM; |
| ai1.packageName = "sys_app1"; |
| final ApplicationInfo ai2 = new ApplicationInfo(); |
| ai2.flags |= ApplicationInfo.FLAG_SYSTEM; |
| ai2.packageName = "sys_app2"; |
| ai2.flags |= ApplicationInfo.FLAG_SYSTEM; |
| final ApplicationInfo ai3 = new ApplicationInfo(); |
| ai3.packageName = "sys_app3"; |
| ai3.flags |= ApplicationInfo.FLAG_SYSTEM; |
| ai3.privateFlags |= ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER; |
| final ApplicationInfo ai4 = new ApplicationInfo(); |
| ai4.privateFlags |= ApplicationInfo.PRIVATE_FLAG_REQUIRED_FOR_SYSTEM_USER; |
| ai4.packageName = "app4"; |
| return Arrays.asList(ai1, ai2, ai3, ai4); |
| } |
| |
| @Override |
| protected List<ResolveInfo> queryIntentActivitiesAsUser(Intent intent, int userId) { |
| assertEquals(Intent.CATEGORY_LAUNCHER, intent.getCategories().iterator().next()); |
| final ResolveInfo r2 = new ResolveInfo(); |
| r2.activityInfo = new ActivityInfo(); |
| r2.activityInfo.packageName = "sys_app2"; |
| r2.activityInfo.flags |= ApplicationInfo.FLAG_SYSTEM; |
| final ResolveInfo r4 = new ResolveInfo(); |
| r4.activityInfo = new ActivityInfo(); |
| r4.activityInfo.packageName = "app4"; |
| return Arrays.asList(r2, r4); |
| } |
| |
| @Override |
| protected List<PackageInfo> getPackagesHoldingPermission(String perm, int userId) { |
| final PackageInfo p1 = new PackageInfo(); |
| p1.packageName = "sys_app1"; |
| p1.applicationInfo = new ApplicationInfo(); |
| p1.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM; |
| return Arrays.asList(p1); |
| } |
| |
| @Override |
| protected List<ResolveInfo> queryIntentServicesAsUser(Intent intent, int userId) { |
| final ResolveInfo sysApp1 = new ResolveInfo(); |
| sysApp1.serviceInfo = new ServiceInfo(); |
| sysApp1.serviceInfo.packageName = "sys_app1"; |
| sysApp1.serviceInfo.name = "name"; |
| sysApp1.serviceInfo.applicationInfo = new ApplicationInfo(); |
| sysApp1.serviceInfo.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM; |
| final ResolveInfo app4 = new ResolveInfo(); |
| app4.serviceInfo = new ServiceInfo(); |
| app4.serviceInfo.packageName = "app4"; |
| app4.serviceInfo.name = "name"; |
| app4.serviceInfo.applicationInfo = new ApplicationInfo(); |
| return Arrays.asList(sysApp1, app4); |
| } |
| } |
| |
| private static void assertEqualsIgnoreOrder(List<String> expected, List<String> actual) { |
| assertTrue("Lists not equal. Expected " + expected + " but was " + actual, |
| (expected.size() == actual.size()) |
| && (new HashSet<>(expected).equals(new HashSet<>(actual)))); |
| } |
| } |