From daad10b428acb3e8bef1e22216ae6bb7c071ad31 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Thu, 4 May 2017 17:13:21 -0700 Subject: [PATCH] Change the logic for showing "App info" vs "show more" Fix: 33265548 Test: robotests The old logic shows "show more" when there is any recent app, new logic first checks if there is any displayable recent app. Otherwise go back to display "app info". Change-Id: I485725eaa025b9e2cfffc5e9e1923aa771bb0e12 --- res/values/config.xml | 2 +- .../RecentAppsPreferenceController.java | 16 ++---- .../RecentAppsPreferenceControllerTest.java | 57 +++++++++++-------- 3 files changed, 38 insertions(+), 37 deletions(-) diff --git a/res/values/config.xml b/res/values/config.xml index 7407020e89a..80fa0d84a99 100755 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -106,6 +106,6 @@ true - false + true diff --git a/src/com/android/settings/applications/RecentAppsPreferenceController.java b/src/com/android/settings/applications/RecentAppsPreferenceController.java index 4ff2dbf5695..43ede2fa151 100644 --- a/src/com/android/settings/applications/RecentAppsPreferenceController.java +++ b/src/com/android/settings/applications/RecentAppsPreferenceController.java @@ -153,8 +153,9 @@ public class RecentAppsPreferenceController extends PreferenceController @VisibleForTesting void refreshUi(Context prefContext) { reloadData(); - if (shouldDisplayRecentApps()) { - displayRecentApps(prefContext); + final List recentApps = getDisplayableRecentAppList(); + if (recentApps != null && !recentApps.isEmpty()) { + displayRecentApps(prefContext, recentApps); } else { displayOnlyAppInfo(); } @@ -182,11 +183,10 @@ public class RecentAppsPreferenceController extends PreferenceController } } - private void displayRecentApps(Context prefContext) { + private void displayRecentApps(Context prefContext, List recentApps) { mCategory.setTitle(R.string.recent_app_category_title); mSeeAllPref.setTitle(R.string.see_all_apps_title); mSeeAllPref.setIcon(R.drawable.ic_chevron_right_24dp); - final List recentApps = getDisplayableRecentAppList(); // Rebind prefs/avoid adding new prefs if possible. Adding/removing prefs causes jank. // Build a cached preference pool @@ -276,14 +276,6 @@ public class RecentAppsPreferenceController extends PreferenceController return recentApps; } - /** - * Whether or not we should show a list of recent apps, and a see all link. - */ - @VisibleForTesting - boolean shouldDisplayRecentApps() { - return mContext.getResources().getBoolean(R.bool.config_display_recent_apps) - && mApplicationsState != null && mStats != null && !mStats.isEmpty(); - } /** * Whether or not the app should be included in recent list. diff --git a/tests/robotests/src/com/android/settings/applications/RecentAppsPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/RecentAppsPreferenceControllerTest.java index c66e229cb86..c28eed03d4d 100644 --- a/tests/robotests/src/com/android/settings/applications/RecentAppsPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/RecentAppsPreferenceControllerTest.java @@ -124,30 +124,6 @@ public class RecentAppsPreferenceControllerTest { verify(mController, times(2)).refreshUi(mContext); } - @Test - public void configOff_shouldNotDisplayRecentApps() { - mController = new RecentAppsPreferenceController(mMockContext, (Application) null, null); - when(mMockContext.getResources().getBoolean(R.bool.config_display_recent_apps)) - .thenReturn(false); - - assertThat(mController.shouldDisplayRecentApps()).isFalse(); - } - - @Test - public void configOn_shouldDisplayRecentAppsWhenHaveData() { - final List stats = new ArrayList<>(); - stats.add(mock(UsageStats.class)); - when(mMockContext.getResources().getBoolean(R.bool.config_display_recent_apps)) - .thenReturn(true); - when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong())) - .thenReturn(stats); - - mController = new RecentAppsPreferenceController(mMockContext, mAppState, null); - - mController.reloadData(); - assertThat(mController.shouldDisplayRecentApps()).isTrue(); - } - @Test public void display_shouldNotShowRecents_showAppInfoPreference() { mController = new RecentAppsPreferenceController(mMockContext, mAppState, null); @@ -206,4 +182,37 @@ public class RecentAppsPreferenceControllerTest { verify(mSeeAllPref).setIcon(R.drawable.ic_chevron_right_24dp); } + @Test + public void display_hasRecentButNoneDisplayable_showAppInfo() { + when(mMockContext.getResources().getBoolean(R.bool.config_display_recent_apps)) + .thenReturn(true); + final List stats = new ArrayList<>(); + final UsageStats stat1 = new UsageStats(); + final UsageStats stat2 = new UsageStats(); + stat1.mLastTimeUsed = System.currentTimeMillis(); + stat1.mPackageName = "com.android.phone"; + stats.add(stat1); + + stat2.mLastTimeUsed = System.currentTimeMillis(); + stat2.mPackageName = "com.android.settings"; + stats.add(stat2); + + // stat1, stat2 are not displayable + when(mAppState.getEntry(stat1.mPackageName, UserHandle.myUserId())) + .thenReturn(mock(ApplicationsState.AppEntry.class)); + when(mAppState.getEntry(stat2.mPackageName, UserHandle.myUserId())) + .thenReturn(mock(ApplicationsState.AppEntry.class)); + when(mMockContext.getPackageManager().resolveActivity(any(Intent.class), anyInt())) + .thenReturn(new ResolveInfo()); + when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong())) + .thenReturn(stats); + + mController = new RecentAppsPreferenceController(mMockContext, mAppState, null); + mController.displayPreference(mScreen); + + verify(mCategory, never()).addPreference(any(Preference.class)); + verify(mCategory).setTitle(null); + verify(mSeeAllPref).setTitle(R.string.applications_settings); + verify(mSeeAllPref).setIcon(null); + } }