diff --git a/src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java b/src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java index 3fc44ccfd9b..5fc4ad52b83 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java +++ b/src/com/android/settings/fuelgauge/batteryusage/ConvertUtils.java @@ -17,6 +17,7 @@ package com.android.settings.fuelgauge.batteryusage; import android.annotation.IntDef; import android.annotation.Nullable; +import android.app.usage.IUsageStatsManager; import android.app.usage.UsageEvents.Event; import android.app.usage.UsageStatsManager; import android.content.ContentValues; @@ -185,7 +186,8 @@ public final class ConvertUtils { /** Converts to {@link AppUsageEvent} from {@link Event} */ @Nullable public static AppUsageEvent convertToAppUsageEvent( - Context context, final Event event, final long userId) { + Context context, IUsageStatsManager usageStatsManager, final Event event, + final long userId) { final String packageName = event.getPackageName(); if (packageName == null) { // See b/190609174: Event package names should never be null, but sometimes they are. @@ -210,7 +212,8 @@ public final class ConvertUtils { } final String effectivePackageName = - getEffectivePackageName(context, packageName, taskRootPackageName); + getEffectivePackageName( + context, usageStatsManager, packageName, taskRootPackageName); try { final long uid = context .getPackageManager() @@ -326,8 +329,9 @@ public final class ConvertUtils { */ @VisibleForTesting static String getEffectivePackageName( - Context context, final String packageName, final String taskRootPackageName) { - final int usageSource = getUsageSource(context); + Context context, IUsageStatsManager usageStatsManager, final String packageName, + final String taskRootPackageName) { + final int usageSource = getUsageSource(context, usageStatsManager); switch (usageSource) { case UsageStatsManager.USAGE_SOURCE_TASK_ROOT_ACTIVITY: return !TextUtils.isEmpty(taskRootPackageName) @@ -372,9 +376,9 @@ public final class ConvertUtils { } } - private static int getUsageSource(Context context) { + private static int getUsageSource(Context context, IUsageStatsManager usageStatsManager) { if (sUsageSource == EMPTY_USAGE_SOURCE) { - sUsageSource = DatabaseUtils.getUsageSource(context); + sUsageSource = DatabaseUtils.getUsageSource(context, usageStatsManager); } return sUsageSource; } diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java index badc35935fa..620ae31c961 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java @@ -32,6 +32,7 @@ import android.os.BatteryUsageStats; import android.os.BatteryUsageStatsQuery; import android.os.Process; import android.os.RemoteException; +import android.os.ServiceManager; import android.os.UidBatteryConsumer; import android.os.UserBatteryConsumer; import android.os.UserHandle; @@ -108,6 +109,11 @@ public final class DataProcessor { @VisibleForTesting static Set sTestSystemAppsPackageNames; + @VisibleForTesting + static IUsageStatsManager sUsageStatsManager = + IUsageStatsManager.Stub.asInterface( + ServiceManager.getService(Context.USAGE_STATS_SERVICE)); + public static final String CURRENT_TIME_BATTERY_HISTORY_PLACEHOLDER = "CURRENT_TIME_BATTERY_HISTORY_PLACEHOLDER"; @@ -338,7 +344,8 @@ public final class DataProcessor { break; } final AppUsageEvent appUsageEvent = - ConvertUtils.convertToAppUsageEvent(context, event, userId); + ConvertUtils.convertToAppUsageEvent( + context, sUsageStatsManager, event, userId); if (appUsageEvent != null) { numEventsFetched++; appUsageEventList.add(appUsageEvent); @@ -694,6 +701,7 @@ public final class DataProcessor { final long eventUserId = firstEvent.getUserId(); final String packageName = getEffectivePackageName( context, + sUsageStatsManager, firstEvent.getPackageName(), firstEvent.getTaskRootPackageName()); usageEvents.addAll(deviceEvents); @@ -966,7 +974,7 @@ public final class DataProcessor { final long startTime = DatabaseUtils.getAppUsageStartTimestampOfUser( context, userID, earliestTimestamp); return loadAppUsageEventsForUserFromService( - DatabaseUtils.sUsageStatsManager, startTime, now, userID, callingPackage); + sUsageStatsManager, startTime, now, userID, callingPackage); } @Nullable diff --git a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java index ea1f3ed9e79..b54563bd566 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java @@ -31,7 +31,6 @@ import android.os.BatteryUsageStats; import android.os.Handler; import android.os.Looper; import android.os.RemoteException; -import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserManager; import android.util.Log; @@ -117,11 +116,6 @@ public final class DatabaseUtils { @VisibleForTesting static Supplier sFakeSupplier; - @VisibleForTesting - static IUsageStatsManager sUsageStatsManager = - IUsageStatsManager.Stub.asInterface( - ServiceManager.getService(Context.USAGE_STATS_SERVICE)); - private DatabaseUtils() { } @@ -488,7 +482,7 @@ public final class DatabaseUtils { * * @see UsageStatsManager#getUsageSource() */ - static int getUsageSource(Context context) { + static int getUsageSource(Context context, IUsageStatsManager usageStatsManager) { final SharedPreferences sharedPreferences = getSharedPreferences(context); if (sharedPreferences != null && sharedPreferences.contains(KEY_LAST_USAGE_SOURCE)) { return sharedPreferences @@ -497,7 +491,7 @@ public final class DatabaseUtils { int usageSource = ConvertUtils.DEFAULT_USAGE_SOURCE; try { - usageSource = sUsageStatsManager.getUsageSource(); + usageSource = usageStatsManager.getUsageSource(); } catch (RemoteException e) { Log.e(TAG, "Failed to getUsageSource", e); } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java index 3cbe8a44d1f..e9108bc7efe 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/ConvertUtilsTest.java @@ -25,6 +25,7 @@ import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; +import android.app.usage.IUsageStatsManager; import android.app.usage.UsageEvents; import android.app.usage.UsageEvents.Event; import android.content.ContentValues; @@ -61,6 +62,8 @@ public final class ConvertUtilsTest { private BatteryUsageStats mBatteryUsageStats; @Mock private BatteryEntry mMockBatteryEntry; + @Mock + private IUsageStatsManager mUsageStatsManager; @Before public void setUp() { @@ -68,6 +71,7 @@ public final class ConvertUtilsTest { mContext = spy(RuntimeEnvironment.application); ConvertUtils.sUsageSource = ConvertUtils.EMPTY_USAGE_SOURCE; when(mContext.getPackageManager()).thenReturn(mMockPackageManager); + DataProcessor.sUsageStatsManager = mUsageStatsManager; } @Test @@ -299,7 +303,7 @@ public final class ConvertUtilsTest { final long userId = 2; final AppUsageEvent appUsageEvent = ConvertUtils.convertToAppUsageEvent( - mContext, event, userId); + mContext, mUsageStatsManager, event, userId); assertThat(appUsageEvent.getTimestamp()).isEqualTo(101L); assertThat(appUsageEvent.getType()).isEqualTo(AppUsageEventType.ACTIVITY_RESUMED); assertThat(appUsageEvent.getPackageName()).isEqualTo("com.android.settings1"); @@ -320,7 +324,7 @@ public final class ConvertUtilsTest { final long userId = 1; final AppUsageEvent appUsageEvent = - ConvertUtils.convertToAppUsageEvent(mContext, event, userId); + ConvertUtils.convertToAppUsageEvent(mContext, mUsageStatsManager, event, userId); assertThat(appUsageEvent.getTimestamp()).isEqualTo(101L); assertThat(appUsageEvent.getType()).isEqualTo(AppUsageEventType.DEVICE_SHUTDOWN); assertThat(appUsageEvent.getPackageName()).isEqualTo("com.android.settings1"); @@ -336,7 +340,8 @@ public final class ConvertUtilsTest { event.mPackage = null; final AppUsageEvent appUsageEvent = - ConvertUtils.convertToAppUsageEvent(mContext, event, /*userId=*/ 0); + ConvertUtils.convertToAppUsageEvent( + mContext, mUsageStatsManager, event, /*userId=*/ 0); assertThat(appUsageEvent).isNull(); } @@ -352,7 +357,7 @@ public final class ConvertUtilsTest { final long userId = 1; final AppUsageEvent appUsageEvent = - ConvertUtils.convertToAppUsageEvent(mContext, event, userId); + ConvertUtils.convertToAppUsageEvent(mContext, mUsageStatsManager, event, userId); assertThat(appUsageEvent).isNull(); } @@ -453,7 +458,7 @@ public final class ConvertUtilsTest { final String taskRootPackageName = "com.android.settings2"; assertThat(ConvertUtils.getEffectivePackageName( - mContext, packageName, taskRootPackageName)) + mContext, mUsageStatsManager, packageName, taskRootPackageName)) .isEqualTo(packageName); } @@ -463,7 +468,7 @@ public final class ConvertUtilsTest { final String taskRootPackageName = "com.android.settings2"; assertThat(ConvertUtils.getEffectivePackageName( - mContext, packageName, taskRootPackageName)) + mContext, mUsageStatsManager, packageName, taskRootPackageName)) .isEqualTo(packageName); } @@ -474,7 +479,7 @@ public final class ConvertUtilsTest { final String taskRootPackageName = "com.android.settings2"; assertThat(ConvertUtils.getEffectivePackageName( - mContext, packageName, taskRootPackageName)) + mContext, mUsageStatsManager, packageName, taskRootPackageName)) .isEqualTo(taskRootPackageName); } @@ -484,10 +489,10 @@ public final class ConvertUtilsTest { final String packageName = "com.android.settings1"; assertThat(ConvertUtils.getEffectivePackageName( - mContext, packageName, /*taskRootPackageName=*/ null)) + mContext, mUsageStatsManager, packageName, /*taskRootPackageName=*/ null)) .isEqualTo(packageName); assertThat(ConvertUtils.getEffectivePackageName( - mContext, packageName, /*taskRootPackageName=*/ "")) + mContext, mUsageStatsManager, packageName, /*taskRootPackageName=*/ "")) .isEqualTo(packageName); } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java index 7f7fe43bb9e..b610cfbf289 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessManagerTest.java @@ -72,7 +72,7 @@ public final class DataProcessManagerTest { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); - DatabaseUtils.sUsageStatsManager = mUsageStatsManager; + DataProcessor.sUsageStatsManager = mUsageStatsManager; doReturn(mContext).when(mContext).getApplicationContext(); doReturn(mUserManager) .when(mContext) diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java index 8bed054e91e..c9b635eeb0e 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DataProcessorTest.java @@ -93,7 +93,7 @@ public final class DataProcessorTest { mPowerUsageFeatureProvider = mFeatureFactory.powerUsageFeatureProvider; DataProcessor.sTestSystemAppsPackageNames = Set.of(); - DatabaseUtils.sUsageStatsManager = mUsageStatsManager; + DataProcessor.sUsageStatsManager = mUsageStatsManager; doReturn(mIntent).when(mContext).registerReceiver( isA(BroadcastReceiver.class), isA(IntentFilter.class)); doReturn(100).when(mIntent).getIntExtra(eq(BatteryManager.EXTRA_SCALE), anyInt()); diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtilsTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtilsTest.java index 24be7698375..8a1ba137958 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtilsTest.java @@ -85,7 +85,7 @@ public final class DatabaseUtilsTest { doReturn(mPackageManager).when(mMockContext).getPackageManager(); doReturn(mPackageManager).when(mContext).getPackageManager(); DatabaseUtils.getSharedPreferences(mContext).edit().clear().apply(); - DatabaseUtils.sUsageStatsManager = mUsageStatsManager; + DataProcessor.sUsageStatsManager = mUsageStatsManager; } @Test @@ -466,7 +466,7 @@ public final class DatabaseUtilsTest { .putInt(DatabaseUtils.KEY_LAST_USAGE_SOURCE, USAGE_SOURCE_TASK_ROOT_ACTIVITY) .apply(); - assertThat(DatabaseUtils.getUsageSource(mContext)) + assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager)) .isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY); } @@ -474,7 +474,7 @@ public final class DatabaseUtilsTest { public void getUsageSource_notHasData_writeLoadedData() throws RemoteException { when(mUsageStatsManager.getUsageSource()).thenReturn(USAGE_SOURCE_TASK_ROOT_ACTIVITY); - assertThat(DatabaseUtils.getUsageSource(mContext)) + assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager)) .isEqualTo(USAGE_SOURCE_TASK_ROOT_ACTIVITY); assertThat( DatabaseUtils @@ -487,7 +487,7 @@ public final class DatabaseUtilsTest { public void getUsageSource_throwException_writeDefaultData() throws RemoteException { when(mUsageStatsManager.getUsageSource()).thenThrow(new RemoteException()); - assertThat(DatabaseUtils.getUsageSource(mContext)) + assertThat(DatabaseUtils.getUsageSource(mContext, mUsageStatsManager)) .isEqualTo(USAGE_SOURCE_CURRENT_ACTIVITY); assertThat( DatabaseUtils