diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java index dc9c8b719c1..9a9edf28c75 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java @@ -44,11 +44,6 @@ public final class BatteryUsageDataLoader { @VisibleForTesting static void loadUsageData(Context context) { - // Checks whether the battery content provider is available. - if (!DatabaseUtils.isContentProviderEnabled(context)) { - Log.w(TAG, "battery usage content provider is disabled!"); - return; - } final long start = System.currentTimeMillis(); final BatteryUsageStats batteryUsageStats = DataProcessor.getBatteryUsageStats(context); final List batteryEntryList = diff --git a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java index 0e2a81f70f4..f2c5c2b96df 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java +++ b/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java @@ -15,7 +15,6 @@ */ package com.android.settings.fuelgauge.batteryusage; -import android.content.ComponentName; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; @@ -25,6 +24,7 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; +import android.os.AsyncTask; import android.os.BatteryManager; import android.os.BatteryUsageStats; import android.os.Handler; @@ -36,6 +36,7 @@ import android.util.Log; import androidx.annotation.VisibleForTesting; +import com.android.settings.fuelgauge.batteryusage.db.BatteryStateDatabase; import com.android.settingslib.fuelgauge.BatteryStatus; import java.time.Clock; @@ -56,6 +57,7 @@ public final class DatabaseUtils { /** Clear memory threshold for device booting phase. **/ private static final long CLEAR_MEMORY_THRESHOLD_MS = Duration.ofMinutes(5).toMillis(); private static final long CLEAR_MEMORY_DELAYED_MS = Duration.ofSeconds(2).toMillis(); + private static final long DATA_RETENTION_INTERVAL_MS = Duration.ofDays(9).toMillis(); /** An authority name of the battery content provider. */ public static final String AUTHORITY = "com.android.settings.battery.usage.provider"; @@ -83,11 +85,6 @@ public final class DatabaseUtils { return userManager.isManagedProfile() && !userManager.isSystemUser(); } - /** Returns true if the chart graph design is enabled. */ - public static boolean isChartGraphEnabled(Context context) { - return isContentProviderEnabled(context); - } - /** Long: for timestamp and String: for BatteryHistEntry.getKey() */ public static Map> getHistoryMapSinceLastFullCharge( Context context, Calendar calendar) { @@ -115,11 +112,32 @@ public final class DatabaseUtils { return resultMap; } - static boolean isContentProviderEnabled(Context context) { - return context.getPackageManager() - .getComponentEnabledSetting( - new ComponentName(SETTINGS_PACKAGE_PATH, BATTERY_PROVIDER_CLASS_PATH)) - == PackageManager.COMPONENT_ENABLED_STATE_ENABLED; + /** Clears all data in the battery usage database. */ + public static void clearAll(Context context) { + AsyncTask.execute(() -> { + try { + BatteryStateDatabase + .getInstance(context.getApplicationContext()) + .batteryStateDao() + .clearAll(); + } catch (RuntimeException e) { + Log.e(TAG, "clearAll() failed", e); + } + }); + } + + /** Clears all out-of-date data in the battery usage database. */ + public static void clearExpiredDataIfNeeded(Context context) { + AsyncTask.execute(() -> { + try { + BatteryStateDatabase + .getInstance(context.getApplicationContext()) + .batteryStateDao() + .clearAllBefore(Clock.systemUTC().millis() - DATA_RETENTION_INTERVAL_MS); + } catch (RuntimeException e) { + Log.e(TAG, "clearAllBefore() failed", e); + } + }); } static List sendBatteryEntryData( @@ -258,9 +276,6 @@ public final class DatabaseUtils { return null; } } - if (!isContentProviderEnabled(context)) { - return null; - } final Map> resultMap = new HashMap(); try (Cursor cursor = context.getContentResolver().query(batteryStateUri, null, null, null)) { diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBroadcastReceiverTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBroadcastReceiverTest.java index c7e83228b9f..51b22124561 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBroadcastReceiverTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageBroadcastReceiverTest.java @@ -20,9 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; -import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; @@ -53,7 +51,6 @@ public final class BatteryUsageBroadcastReceiverTest { @Test public void onReceive_fetchUsageDataIntent_startService() { - setProviderSetting(PackageManager.COMPONENT_ENABLED_STATE_ENABLED); mBatteryUsageBroadcastReceiver.onReceive(mContext, new Intent(BatteryUsageBroadcastReceiver.ACTION_FETCH_BATTERY_USAGE_DATA)); @@ -62,7 +59,6 @@ public final class BatteryUsageBroadcastReceiverTest { @Test public void onReceive_invalidIntent_notStartService() { - setProviderSetting(PackageManager.COMPONENT_ENABLED_STATE_ENABLED); mBatteryUsageBroadcastReceiver.onReceive(mContext, new Intent("invalid intent")); assertThat(mBatteryUsageBroadcastReceiver.mFetchBatteryUsageData).isFalse(); @@ -95,12 +91,4 @@ public final class BatteryUsageBroadcastReceiverTest { assertThat(BatteryDiffEntry.sValidForRestriction).isNotEmpty(); } - - private void setProviderSetting(int value) { - when(mPackageManager.getComponentEnabledSetting( - new ComponentName( - DatabaseUtils.SETTINGS_PACKAGE_PATH, - DatabaseUtils.BATTERY_PROVIDER_CLASS_PATH))) - .thenReturn(value); - } } diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoaderTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoaderTest.java index 4124e34c242..e6bba8de0b7 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoaderTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoaderTest.java @@ -25,7 +25,6 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import android.content.ComponentName; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; @@ -83,7 +82,6 @@ public final class BatteryUsageDataLoaderTest { public void loadUsageData_loadUsageDataWithHistory() { final List batteryEntryList = new ArrayList<>(); batteryEntryList.add(mMockBatteryEntry); - setProviderSetting(PackageManager.COMPONENT_ENABLED_STATE_ENABLED); when(mBatteryStatsManager.getBatteryUsageStats(mStatsQueryCaptor.capture())) .thenReturn(mBatteryUsageStats); when(mMockBatteryAppListController.getBatteryEntryList(mBatteryUsageStats, true)) @@ -102,7 +100,6 @@ public final class BatteryUsageDataLoaderTest { @Test public void loadUsageData_nullBatteryUsageStats_notLoadBatteryEntryData() { - setProviderSetting(PackageManager.COMPONENT_ENABLED_STATE_ENABLED); when(mBatteryStatsManager.getBatteryUsageStats(mStatsQueryCaptor.capture())) .thenReturn(null); @@ -119,7 +116,6 @@ public final class BatteryUsageDataLoaderTest { @Test public void loadUsageData_nullBatteryEntryList_insertFakeDataIntoProvider() { - setProviderSetting(PackageManager.COMPONENT_ENABLED_STATE_ENABLED); when(mBatteryStatsManager.getBatteryUsageStats(mStatsQueryCaptor.capture())) .thenReturn(mBatteryUsageStats); when(mMockBatteryAppListController.getBatteryEntryList(mBatteryUsageStats, true)) @@ -132,7 +128,6 @@ public final class BatteryUsageDataLoaderTest { @Test public void loadUsageData_emptyBatteryEntryList_insertFakeDataIntoProvider() { - setProviderSetting(PackageManager.COMPONENT_ENABLED_STATE_ENABLED); when(mBatteryStatsManager.getBatteryUsageStats(mStatsQueryCaptor.capture())) .thenReturn(mBatteryUsageStats); when(mMockBatteryAppListController.getBatteryEntryList(mBatteryUsageStats, true)) @@ -142,24 +137,4 @@ public final class BatteryUsageDataLoaderTest { verify(mMockContentResolver).insert(any(), any()); } - - @Test - public void loadUsageData_providerIsDisabled_notLoadHistory() { - setProviderSetting(PackageManager.COMPONENT_ENABLED_STATE_DISABLED); - when(mBatteryStatsManager.getBatteryUsageStats(mStatsQueryCaptor.capture())) - .thenReturn(mBatteryUsageStats); - - BatteryUsageDataLoader.loadUsageData(mContext); - - verify(mBatteryStatsManager, never()).getBatteryUsageStats( - mStatsQueryCaptor.capture()); - } - - private void setProviderSetting(int value) { - when(mPackageManager.getComponentEnabledSetting( - new ComponentName( - DatabaseUtils.SETTINGS_PACKAGE_PATH, - DatabaseUtils.BATTERY_PROVIDER_CLASS_PATH))) - .thenReturn(value); - } } 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 cb5255e0446..9d9cd02321f 100644 --- a/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtilsTest.java +++ b/tests/robotests/src/com/android/settings/fuelgauge/batteryusage/DatabaseUtilsTest.java @@ -22,9 +22,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import android.content.ComponentName; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; @@ -71,7 +69,6 @@ public final class DatabaseUtilsTest { public void setUp() { MockitoAnnotations.initMocks(this); mContext = spy(RuntimeEnvironment.application); - setProviderSetting(PackageManager.COMPONENT_ENABLED_STATE_ENABLED); doReturn(mMockContentResolver2).when(mMockContext).getContentResolver(); doReturn(mMockContentResolver).when(mContext).getContentResolver(); doReturn(mPackageManager).when(mMockContext).getPackageManager(); @@ -97,30 +94,6 @@ public final class DatabaseUtilsTest { assertThat(DatabaseUtils.isWorkProfile(mContext)).isFalse(); } - @Test - public void isChartGraphEnabled_providerIsEnabled_returnTrue() { - setProviderSetting(PackageManager.COMPONENT_ENABLED_STATE_ENABLED); - assertThat(DatabaseUtils.isChartGraphEnabled(mContext)).isTrue(); - } - - @Test - public void isChartGraphEnabled_providerIsDisabled_returnFalse() { - setProviderSetting(PackageManager.COMPONENT_ENABLED_STATE_DISABLED); - assertThat(DatabaseUtils.isChartGraphEnabled(mContext)).isFalse(); - } - - @Test - public void isContentProviderEnabled_providerEnabled_returnsTrue() { - setProviderSetting(PackageManager.COMPONENT_ENABLED_STATE_ENABLED); - assertThat(DatabaseUtils.isContentProviderEnabled(mContext)).isTrue(); - } - - @Test - public void isContentProviderEnabled_providerDisabled_returnsFalse() { - setProviderSetting(PackageManager.COMPONENT_ENABLED_STATE_DISABLED); - assertThat(DatabaseUtils.isContentProviderEnabled(mContext)).isFalse(); - } - @Test public void sendBatteryEntryData_nullBatteryIntent_returnsNullValue() { doReturn(null).when(mContext).registerReceiver(any(), any()); @@ -214,13 +187,6 @@ public final class DatabaseUtilsTest { DatabaseUtils.BATTERY_CONTENT_URI, /*observer=*/ null); } - @Test - public void getHistoryMapSinceLastFullCharge_providerIsDisabled_returnNull() { - setProviderSetting(PackageManager.COMPONENT_ENABLED_STATE_DISABLED); - assertThat(DatabaseUtils.getHistoryMapSinceLastFullCharge( - mContext, /*calendar=*/ null)).isNull(); - } - @Test public void getHistoryMapSinceLastFullCharge_emptyCursorContent_returnEmptyMap() { final MatrixCursor cursor = new MatrixCursor( @@ -374,14 +340,6 @@ public final class DatabaseUtilsTest { .isEqualTo(expectedTimestamp); } - private void setProviderSetting(int value) { - when(mPackageManager.getComponentEnabledSetting( - new ComponentName( - DatabaseUtils.SETTINGS_PACKAGE_PATH, - DatabaseUtils.BATTERY_PROVIDER_CLASS_PATH))) - .thenReturn(value); - } - private static void verifyContentValues(double consumedPower, ContentValues values) { assertThat(values.getAsDouble(BatteryHistEntry.KEY_CONSUME_POWER)) .isEqualTo(consumedPower);