Loading src/com/android/settings/applications/RecentAppsPreferenceController.java +13 −6 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.app.usage.UsageStatsManager; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.PowerManager; import android.os.UserHandle; import android.text.TextUtils; import android.util.ArrayMap; Loading Loading @@ -78,6 +79,7 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController private final ApplicationsState mApplicationsState; private final int mUserId; private final IconDrawableFactory mIconDrawableFactory; private final PowerManager mPowerManager; private Calendar mCal; private List<UsageStats> mStats; Loading Loading @@ -108,6 +110,8 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController mIconDrawableFactory = IconDrawableFactory.newInstance(context); mUserId = UserHandle.myUserId(); mPm = context.getPackageManager(); mPowerManager = context.getSystemService(PowerManager.class); mHost = host; mUsageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE); Loading Loading @@ -183,7 +187,9 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController void reloadData() { mCal = Calendar.getInstance(); mCal.add(Calendar.DAY_OF_YEAR, -1); mStats = mUsageStatsManager.queryUsageStats( mStats = mPowerManager.isPowerSaveMode() ? new ArrayList<>() : mUsageStatsManager.queryUsageStats( UsageStatsManager.INTERVAL_BEST, mCal.getTimeInMillis(), System.currentTimeMillis()); } Loading Loading @@ -301,7 +307,8 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController private boolean shouldIncludePkgInRecents(UsageStats stat) { final String pkgName = stat.getPackageName(); if (stat.getLastTimeUsed() < mCal.getTimeInMillis()) { Log.d(TAG, "Invalid timestamp, skipping " + pkgName); Log.d(TAG, "Invalid timestamp (usage time is more than 24 hours ago), skipping " + pkgName); return false; } Loading tests/robotests/src/com/android/settings/applications/RecentAppsPreferenceControllerTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.PowerManager; import android.os.UserHandle; import android.os.UserManager; import android.text.TextUtils; Loading @@ -50,6 +51,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.ShadowPowerManager; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.instantapps.InstantAppDataProvider; Loading Loading @@ -195,6 +197,35 @@ public class RecentAppsPreferenceControllerTest { verify(mDivider).setVisible(true); } @Test public void display_powerSaverMode_showNoRecents() { mContext.getSystemService(PowerManager.class).setPowerSaveMode(true); final List<UsageStats> stats = new ArrayList<>(); final UsageStats stat1 = new UsageStats(); stat1.mLastTimeUsed = System.currentTimeMillis(); stat1.mPackageName = "pkg.class"; stats.add(stat1); // stat1, stat2 are valid apps. stat3 is invalid. when(mAppState.getEntry(stat1.mPackageName, UserHandle.myUserId())) .thenReturn(mAppEntry); when(mPackageManager.resolveActivity(any(Intent.class), anyInt())) .thenReturn(new ResolveInfo()); when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong())) .thenReturn(stats); mAppEntry.info = mApplicationInfo; 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); verify(mDivider).setVisible(false); } @Test public void display_showRecentsWithInstantApp() { // Regular app. Loading Loading
src/com/android/settings/applications/RecentAppsPreferenceController.java +13 −6 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.app.usage.UsageStatsManager; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.os.PowerManager; import android.os.UserHandle; import android.text.TextUtils; import android.util.ArrayMap; Loading Loading @@ -78,6 +79,7 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController private final ApplicationsState mApplicationsState; private final int mUserId; private final IconDrawableFactory mIconDrawableFactory; private final PowerManager mPowerManager; private Calendar mCal; private List<UsageStats> mStats; Loading Loading @@ -108,6 +110,8 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController mIconDrawableFactory = IconDrawableFactory.newInstance(context); mUserId = UserHandle.myUserId(); mPm = context.getPackageManager(); mPowerManager = context.getSystemService(PowerManager.class); mHost = host; mUsageStatsManager = (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE); Loading Loading @@ -183,7 +187,9 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController void reloadData() { mCal = Calendar.getInstance(); mCal.add(Calendar.DAY_OF_YEAR, -1); mStats = mUsageStatsManager.queryUsageStats( mStats = mPowerManager.isPowerSaveMode() ? new ArrayList<>() : mUsageStatsManager.queryUsageStats( UsageStatsManager.INTERVAL_BEST, mCal.getTimeInMillis(), System.currentTimeMillis()); } Loading Loading @@ -301,7 +307,8 @@ public class RecentAppsPreferenceController extends AbstractPreferenceController private boolean shouldIncludePkgInRecents(UsageStats stat) { final String pkgName = stat.getPackageName(); if (stat.getLastTimeUsed() < mCal.getTimeInMillis()) { Log.d(TAG, "Invalid timestamp, skipping " + pkgName); Log.d(TAG, "Invalid timestamp (usage time is more than 24 hours ago), skipping " + pkgName); return false; } Loading
tests/robotests/src/com/android/settings/applications/RecentAppsPreferenceControllerTest.java +31 −0 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.os.PowerManager; import android.os.UserHandle; import android.os.UserManager; import android.text.TextUtils; Loading @@ -50,6 +51,7 @@ import androidx.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.shadow.ShadowPowerManager; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState; import com.android.settingslib.applications.instantapps.InstantAppDataProvider; Loading Loading @@ -195,6 +197,35 @@ public class RecentAppsPreferenceControllerTest { verify(mDivider).setVisible(true); } @Test public void display_powerSaverMode_showNoRecents() { mContext.getSystemService(PowerManager.class).setPowerSaveMode(true); final List<UsageStats> stats = new ArrayList<>(); final UsageStats stat1 = new UsageStats(); stat1.mLastTimeUsed = System.currentTimeMillis(); stat1.mPackageName = "pkg.class"; stats.add(stat1); // stat1, stat2 are valid apps. stat3 is invalid. when(mAppState.getEntry(stat1.mPackageName, UserHandle.myUserId())) .thenReturn(mAppEntry); when(mPackageManager.resolveActivity(any(Intent.class), anyInt())) .thenReturn(new ResolveInfo()); when(mUsageStatsManager.queryUsageStats(anyInt(), anyLong(), anyLong())) .thenReturn(stats); mAppEntry.info = mApplicationInfo; 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); verify(mDivider).setVisible(false); } @Test public void display_showRecentsWithInstantApp() { // Regular app. Loading