From 0d8e1f23cbec501eab0f6fc8a287c60aad3c750e Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 6 Jun 2017 16:08:13 -0700 Subject: [PATCH] Include home app when searching installed apps Change-Id: I4677307bb23f03ed7fb224c32312be7cb114763d Fix: 62221174 Test: make RunSettingsRoboTests --- .../search/InstalledAppResultLoader.java | 29 +++++++++++++-- .../search/InstalledAppResultLoaderTest.java | 36 +++++++++++++++++-- 2 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/com/android/settings/search/InstalledAppResultLoader.java b/src/com/android/settings/search/InstalledAppResultLoader.java index 25a3e8913d4..81b96a17ed9 100644 --- a/src/com/android/settings/search/InstalledAppResultLoader.java +++ b/src/com/android/settings/search/InstalledAppResultLoader.java @@ -37,6 +37,7 @@ import com.android.settings.applications.PackageManagerWrapper; import com.android.settings.dashboard.SiteMapManager; import com.android.settings.utils.AsyncLoader; +import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -55,7 +56,7 @@ public class InstalledAppResultLoader extends AsyncLoader mHomeActivities = new ArrayList<>(); public InstalledAppResultLoader(Context context, PackageManagerWrapper pmWrapper, String query, SiteMapManager mapManager) { @@ -71,6 +72,9 @@ public class InstalledAppResultLoader extends AsyncLoader results = new HashSet<>(); final PackageManager pm = mPackageManager.getPackageManager(); + mHomeActivities.clear(); + mPackageManager.getHomeActivities(mHomeActivities); + for (UserInfo user : getUsersToCount()) { final List apps = mPackageManager.getInstalledApplicationsAsUser( @@ -106,11 +110,18 @@ public class InstalledAppResultLoader extends AsyncLoader + * This method matches logic in {@code ApplicationState#FILTER_DOWNLOADED_AND_LAUNCHER}. + */ private boolean shouldIncludeAsCandidate(ApplicationInfo info, UserInfo user) { + // Not system app if ((info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0 || (info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) { return true; } + // Shows up in launcher final Intent launchIntent = new Intent(LAUNCHER_PROBE) .setPackage(info.packageName); final List intents = mPackageManager.queryIntentActivitiesAsUser( @@ -119,7 +130,11 @@ public class InstalledAppResultLoader extends AsyncLoader resolveInfos, String pkg) { + for (ResolveInfo info : resolveInfos) { + if (TextUtils.equals(info.activityInfo.packageName, pkg)) { + return true; + } + } + return false; + } + private List getBreadCrumb() { if (mBreadcrumb == null || mBreadcrumb.isEmpty()) { final Context context = getContext(); @@ -206,6 +230,7 @@ public class InstalledAppResultLoader extends AsyncLoader() { + @Override + public Object answer(InvocationOnMock invocation) throws Throwable { + final List list = (List) invocation.getArguments()[0]; + final ResolveInfo info = new ResolveInfo(); + info.activityInfo = new ActivityInfo(); + info.activityInfo.packageName = "app1"; + list.add(info); + return null; + } + }); + + final String query = "app"; + + mLoader = new InstalledAppResultLoader(mContext, mPackageManagerWrapper, query, + mSiteMapManager); + + assertThat(mLoader.loadInBackground().size()).isEqualTo(1); + } + @Test public void query_matchingQuery_shouldNotReturnSystemAppIfNotLaunchable() { when(mPackageManagerWrapper.getInstalledApplicationsAsUser(anyInt(), anyInt()))