Load work apps in RecentAppStatsMixin
This change will show work apps and personal apps together in the recent apps settings page, sorted by decreasing last usage time. Test: see both work and personal apps in the recent apps page in the correct order. Fix: 146921442 Change-Id: I174a556010529bc39c085cc006722bc2947535bd
This commit is contained in:
@@ -21,6 +21,7 @@ import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.ArgumentMatchers.anyLong;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.doReturn;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
@@ -53,6 +54,7 @@ import org.robolectric.util.ReflectionHelpers;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
public class RecentAppStatsMixinTest {
|
||||
@@ -60,6 +62,8 @@ public class RecentAppStatsMixinTest {
|
||||
@Mock
|
||||
private UsageStatsManager mUsageStatsManager;
|
||||
@Mock
|
||||
private UsageStatsManager mWorkUsageStatsManager;
|
||||
@Mock
|
||||
private UserManager mUserManager;
|
||||
@Mock
|
||||
private ApplicationsState mAppState;
|
||||
@@ -87,6 +91,8 @@ public class RecentAppStatsMixinTest {
|
||||
when(mUserManager.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[]{});
|
||||
|
||||
mRecentAppStatsMixin = new RecentAppStatsMixin(context, 3 /* maximumApps */);
|
||||
ReflectionHelpers.setField(mRecentAppStatsMixin, "mWorkUsageStatsManager",
|
||||
Optional.of(mWorkUsageStatsManager));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -99,7 +105,7 @@ public class RecentAppStatsMixinTest {
|
||||
// stat1 is valid app.
|
||||
when(mAppState.getEntry(stat1.mPackageName, UserHandle.myUserId()))
|
||||
.thenReturn(mAppEntry);
|
||||
when(mPackageManager.resolveActivity(any(Intent.class), anyInt()))
|
||||
when(mPackageManager.resolveActivityAsUser(any(Intent.class), anyInt(), anyInt()))
|
||||
.thenReturn(new ResolveInfo());
|
||||
when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong()))
|
||||
.thenReturn(stats);
|
||||
@@ -134,7 +140,7 @@ public class RecentAppStatsMixinTest {
|
||||
.thenReturn(mAppEntry);
|
||||
when(mAppState.getEntry(stat3.mPackageName, UserHandle.myUserId()))
|
||||
.thenReturn(mAppEntry);
|
||||
when(mPackageManager.resolveActivity(any(Intent.class), anyInt()))
|
||||
when(mPackageManager.resolveActivityAsUser(any(Intent.class), anyInt(), anyInt()))
|
||||
.thenReturn(new ResolveInfo());
|
||||
when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong()))
|
||||
.thenReturn(stats);
|
||||
@@ -170,7 +176,7 @@ public class RecentAppStatsMixinTest {
|
||||
.thenReturn(mAppEntry);
|
||||
when(mAppState.getEntry(stat3.mPackageName, UserHandle.myUserId()))
|
||||
.thenReturn(null);
|
||||
when(mPackageManager.resolveActivity(any(Intent.class), anyInt()))
|
||||
when(mPackageManager.resolveActivityAsUser(any(Intent.class), anyInt(), anyInt()))
|
||||
.thenReturn(new ResolveInfo());
|
||||
when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong()))
|
||||
.thenReturn(stats);
|
||||
@@ -272,7 +278,7 @@ public class RecentAppStatsMixinTest {
|
||||
when(mPackageManager.getInstalledModules(anyInt() /* flags */))
|
||||
.thenReturn(modules);
|
||||
|
||||
when(mPackageManager.resolveActivity(any(Intent.class), anyInt()))
|
||||
when(mPackageManager.resolveActivityAsUser(any(Intent.class), anyInt(), anyInt()))
|
||||
.thenReturn(new ResolveInfo());
|
||||
when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong()))
|
||||
.thenReturn(stats);
|
||||
@@ -296,7 +302,7 @@ public class RecentAppStatsMixinTest {
|
||||
// stat1, stat2 are valid apps. stat3 is invalid.
|
||||
when(mAppState.getEntry(stat1.mPackageName, UserHandle.myUserId()))
|
||||
.thenReturn(mAppEntry);
|
||||
when(mPackageManager.resolveActivity(any(Intent.class), anyInt()))
|
||||
when(mPackageManager.resolveActivityAsUser(any(Intent.class), anyInt(), anyInt()))
|
||||
.thenReturn(new ResolveInfo());
|
||||
when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong()))
|
||||
.thenReturn(stats);
|
||||
@@ -306,4 +312,97 @@ public class RecentAppStatsMixinTest {
|
||||
|
||||
assertThat(mRecentAppStatsMixin.mRecentApps).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loadDisplayableRecentApps_usePersonalAndWorkApps_shouldBeSortedByLastTimeUse() {
|
||||
final List<UsageStats> personalStats = new ArrayList<>();
|
||||
final UsageStats stats1 = new UsageStats();
|
||||
final UsageStats stats2 = new UsageStats();
|
||||
stats1.mLastTimeUsed = System.currentTimeMillis();
|
||||
stats1.mPackageName = "personal.pkg.class";
|
||||
personalStats.add(stats1);
|
||||
|
||||
stats2.mLastTimeUsed = System.currentTimeMillis() - 5000;
|
||||
stats2.mPackageName = "personal.pkg.class2";
|
||||
personalStats.add(stats2);
|
||||
|
||||
final List<UsageStats> workStats = new ArrayList<>();
|
||||
final UsageStats stat3 = new UsageStats();
|
||||
stat3.mLastTimeUsed = System.currentTimeMillis() - 2000;
|
||||
stat3.mPackageName = "work.pkg.class3";
|
||||
workStats.add(stat3);
|
||||
|
||||
when(mAppState.getEntry(anyString(), anyInt()))
|
||||
.thenReturn(mAppEntry);
|
||||
when(mPackageManager.resolveActivityAsUser(any(Intent.class), anyInt(), anyInt()))
|
||||
.thenReturn(new ResolveInfo());
|
||||
// personal app stats
|
||||
when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong()))
|
||||
.thenReturn(personalStats);
|
||||
// work app stats
|
||||
when(mWorkUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong()))
|
||||
.thenReturn(workStats);
|
||||
mAppEntry.info = mApplicationInfo;
|
||||
|
||||
mRecentAppStatsMixin.loadDisplayableRecentApps(3);
|
||||
|
||||
assertThat(mRecentAppStatsMixin.mRecentApps.size()).isEqualTo(3);
|
||||
assertThat(mRecentAppStatsMixin.mRecentApps.get(0).mUsageStats.mPackageName).isEqualTo(
|
||||
"personal.pkg.class");
|
||||
assertThat(mRecentAppStatsMixin.mRecentApps.get(1).mUsageStats.mPackageName).isEqualTo(
|
||||
"work.pkg.class3");
|
||||
assertThat(mRecentAppStatsMixin.mRecentApps.get(2).mUsageStats.mPackageName).isEqualTo(
|
||||
"personal.pkg.class2");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void loadDisplayableRecentApps_usePersonalAndWorkApps_shouldBeUniquePerProfile() {
|
||||
final String firstAppPackageName = "app1.pkg.class";
|
||||
final String secondAppPackageName = "app2.pkg.class";
|
||||
final List<UsageStats> personalStats = new ArrayList<>();
|
||||
final UsageStats personalStatsFirstApp = new UsageStats();
|
||||
final UsageStats personalStatsFirstAppOlderUse = new UsageStats();
|
||||
final UsageStats personalStatsSecondApp = new UsageStats();
|
||||
personalStatsFirstApp.mLastTimeUsed = System.currentTimeMillis();
|
||||
personalStatsFirstApp.mPackageName = firstAppPackageName;
|
||||
personalStats.add(personalStatsFirstApp);
|
||||
|
||||
personalStatsFirstAppOlderUse.mLastTimeUsed = System.currentTimeMillis() - 5000;
|
||||
personalStatsFirstAppOlderUse.mPackageName = firstAppPackageName;
|
||||
personalStats.add(personalStatsFirstAppOlderUse);
|
||||
|
||||
personalStatsSecondApp.mLastTimeUsed = System.currentTimeMillis() - 2000;
|
||||
personalStatsSecondApp.mPackageName = secondAppPackageName;
|
||||
personalStats.add(personalStatsSecondApp);
|
||||
|
||||
final List<UsageStats> workStats = new ArrayList<>();
|
||||
final UsageStats workStatsSecondApp = new UsageStats();
|
||||
workStatsSecondApp.mLastTimeUsed = System.currentTimeMillis() - 1000;
|
||||
workStatsSecondApp.mPackageName = secondAppPackageName;
|
||||
workStats.add(workStatsSecondApp);
|
||||
|
||||
when(mAppState.getEntry(anyString(), anyInt()))
|
||||
.thenReturn(mAppEntry);
|
||||
when(mPackageManager.resolveActivityAsUser(any(Intent.class), anyInt(), anyInt()))
|
||||
.thenReturn(new ResolveInfo());
|
||||
// personal app stats
|
||||
when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong()))
|
||||
.thenReturn(personalStats);
|
||||
// work app stats
|
||||
when(mWorkUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong()))
|
||||
.thenReturn(workStats);
|
||||
mAppEntry.info = mApplicationInfo;
|
||||
|
||||
mRecentAppStatsMixin.loadDisplayableRecentApps(3);
|
||||
|
||||
// The output should have the first app once since the duplicate use in the personal profile
|
||||
// is filtered out, and the second app twice - once for each profile.
|
||||
assertThat(mRecentAppStatsMixin.mRecentApps.size()).isEqualTo(3);
|
||||
assertThat(mRecentAppStatsMixin.mRecentApps.get(0).mUsageStats.mPackageName).isEqualTo(
|
||||
firstAppPackageName);
|
||||
assertThat(mRecentAppStatsMixin.mRecentApps.get(1).mUsageStats.mPackageName).isEqualTo(
|
||||
secondAppPackageName);
|
||||
assertThat(mRecentAppStatsMixin.mRecentApps.get(2).mUsageStats.mPackageName).isEqualTo(
|
||||
secondAppPackageName);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user