Adds appropriate filtering for instant apps

Adds a new filter that includes downloaded and launcher apps, as well
as instant apps, and ensured that instant apps do not appear where
they previously were not expected (downloaded and launcher apps).

Test: Added testing for the existing filter and the new one.

Bug: 36515324
Change-Id: I7ef94442bae14ee18d4b4d70f04f9bf62af9eff8
(cherry picked from commit a4e0356ed4)
This commit is contained in:
Jesse Evans
2017-03-30 17:30:00 -07:00
parent fb54aee325
commit 13be12e314
2 changed files with 84 additions and 1 deletions

View File

@@ -1394,7 +1394,9 @@ public class ApplicationsState {
@Override
public boolean filterApp(AppEntry entry) {
if ((entry.info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
if (AppUtils.isInstant(entry.info)) {
return false;
} else if ((entry.info.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) != 0) {
return true;
} else if ((entry.info.flags & ApplicationInfo.FLAG_SYSTEM) == 0) {
return true;
@@ -1407,6 +1409,23 @@ public class ApplicationsState {
}
};
/**
* Displays a combined list with "downloaded" and "visible in launcher" apps only.
*/
public static final AppFilter FILTER_DOWNLOADED_AND_LAUNCHER_AND_INSTANT = new AppFilter() {
@Override
public void init() {
}
@Override
public boolean filterApp(AppEntry entry) {
return AppUtils.isInstant(entry.info)
|| FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(entry);
}
};
public static final AppFilter FILTER_THIRD_PARTY = new AppFilter() {
@Override
public void init() {

View File

@@ -109,6 +109,70 @@ public class ApplicationsStateTest {
assertThat(ApplicationsState.FILTER_OTHER_APPS.filterApp(mEntry)).isTrue();
}
@Test
public void testDownloadAndLauncherAndInstantAcceptsCorrectApps() {
// should include instant apps
mEntry.isHomeApp = false;
mEntry.hasLauncherEntry = false;
when(mEntry.info.isInstantApp()).thenReturn(true);
assertThat(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER_AND_INSTANT.filterApp(mEntry))
.isTrue();
// should included updated system apps
when(mEntry.info.isInstantApp()).thenReturn(false);
mEntry.info.flags = ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
assertThat(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER_AND_INSTANT.filterApp(mEntry))
.isTrue();
// should not include system apps other than the home app
mEntry.info.flags = ApplicationInfo.FLAG_SYSTEM;
mEntry.isHomeApp = false;
mEntry.hasLauncherEntry = false;
assertThat(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER_AND_INSTANT.filterApp(mEntry))
.isFalse();
// should include the home app
mEntry.isHomeApp = true;
assertThat(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER_AND_INSTANT.filterApp(mEntry))
.isTrue();
// should include any System app with a launcher entry
mEntry.isHomeApp = false;
mEntry.hasLauncherEntry = true;
assertThat(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER_AND_INSTANT.filterApp(mEntry))
.isTrue();
}
@Test
public void testDownloadAndLauncherAcceptsCorrectApps() {
mEntry.isHomeApp = false;
mEntry.hasLauncherEntry = false;
// should included updated system apps
when(mEntry.info.isInstantApp()).thenReturn(false);
mEntry.info.flags = ApplicationInfo.FLAG_UPDATED_SYSTEM_APP;
assertThat(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(mEntry))
.isTrue();
// should not include system apps other than the home app
mEntry.info.flags = ApplicationInfo.FLAG_SYSTEM;
mEntry.isHomeApp = false;
mEntry.hasLauncherEntry = false;
assertThat(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(mEntry))
.isFalse();
// should include the home app
mEntry.isHomeApp = true;
assertThat(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(mEntry))
.isTrue();
// should include any System app with a launcher entry
mEntry.isHomeApp = false;
mEntry.hasLauncherEntry = true;
assertThat(ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER.filterApp(mEntry))
.isTrue();
}
@Test
public void testInstantFilterAcceptsInstantApp() {
when(mEntry.info.isInstantApp()).thenReturn(true);