Loading src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java +15 −4 Original line number Diff line number Diff line Loading @@ -52,10 +52,10 @@ import com.google.common.base.Objects; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicBoolean; Loading Loading @@ -397,12 +397,23 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll return true; } private PowerAnomalyEvent getHighestScoreAnomalyEvent(PowerAnomalyEventList anomalyEventList) { @VisibleForTesting PowerAnomalyEvent getHighestScoreAnomalyEvent(PowerAnomalyEventList anomalyEventList) { if (anomalyEventList == null || anomalyEventList.getPowerAnomalyEventsCount() == 0) { return null; } return Collections.max(anomalyEventList.getPowerAnomalyEventsList(), Comparator.comparing(PowerAnomalyEvent::getScore)); final Set<String> dismissedPowerAnomalyKeys = DatabaseUtils.getDismissedPowerAnomalyKeys(mContext); Log.d(TAG, "dismissedPowerAnomalyKeys = " + dismissedPowerAnomalyKeys); final PowerAnomalyEvent highestScoreEvent = anomalyEventList.getPowerAnomalyEventsList() .stream() .filter(event -> event.hasKey() && !dismissedPowerAnomalyKeys.contains(event.getKey().name())) .max(Comparator.comparing(PowerAnomalyEvent::getScore)) .orElse(null); Log.d(TAG, "highestScoreAnomalyEvent = " + highestScoreEvent); return highestScoreEvent; } private boolean refreshUiWithNoLevelDataCase() { Loading src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java +12 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic private final MetricsFeatureProvider mMetricsFeatureProvider; private String mAnomalyEventId; private PowerAnomalyKey mPowerAnomalyKey; @VisibleForTesting CharSequence mMainButtonLabel; Loading @@ -69,6 +70,7 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic final FeatureFactory featureFactory = FeatureFactory.getFactory(context); mPowerUsageFeatureProvider = featureFactory.getPowerUsageFeatureProvider(context); mMetricsFeatureProvider = featureFactory.getMetricsFeatureProvider(); mPowerAnomalyKey = null; } /** Loading Loading @@ -98,6 +100,13 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic } } /** * Sets the power anomaly key of battery tips card. */ public void setPowerAnomalyKey(final PowerAnomalyKey powerAnomalyKey) { mPowerAnomalyKey = powerAnomalyKey; } /** * Sets the info of target fragment launched by main button. */ Loading Loading @@ -133,6 +142,9 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic setVisible(false); mMetricsFeatureProvider.action( getContext(), SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS, mAnomalyEventId); if (mPowerAnomalyKey != null) { DatabaseUtils.setDismissedPowerAnomalyKeys(getContext(), mPowerAnomalyKey.name()); } } } Loading src/com/android/settings/fuelgauge/batteryusage/BatteryTipsController.java +4 −2 Original line number Diff line number Diff line Loading @@ -108,8 +108,9 @@ public class BatteryTipsController extends BasePreferenceController { } // Get card preference strings and navigate fragment info final int resourceIndex = powerAnomalyEvent.hasKey() ? powerAnomalyEvent.getKey().getNumber() : -1; final PowerAnomalyKey powerAnomalyKey = powerAnomalyEvent.hasKey() ? powerAnomalyEvent.getKey() : null; final int resourceIndex = powerAnomalyKey != null ? powerAnomalyKey.getNumber() : -1; String titleString = getString(powerAnomalyEvent, WarningBannerInfo::getTitleString, WarningItemInfo::getTitleString, R.array.power_anomaly_titles, resourceIndex); Loading @@ -134,6 +135,7 @@ public class BatteryTipsController extends BasePreferenceController { // Updated card preference and main button fragment launcher mCardPreference.setAnomalyEventId(powerAnomalyEvent.getEventId()); mCardPreference.setPowerAnomalyKey(powerAnomalyKey); mCardPreference.setTitle(titleString); mCardPreference.setMainButtonLabel(mainBtnString); mCardPreference.setDismissButtonLabel(dismissBtnString); Loading src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java +1 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ public final class BatteryUsageDataLoader { context, DatabaseUtils.KEY_LAST_LOAD_FULL_CHARGE_TIME); DatabaseUtils.sendBatteryEventData(context, ConvertUtils.convertToBatteryEvent( currentTime, BatteryEventType.FULL_CHARGED, 100)); DatabaseUtils.removeDismissedPowerAnomalyKeys(context); } // Uploads the BatteryEntry data into database. Loading src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java +31 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import android.os.Looper; import android.os.RemoteException; import android.os.SystemClock; import android.os.UserManager; import android.util.ArraySet; import android.util.Log; import androidx.annotation.VisibleForTesting; Loading @@ -53,6 +54,7 @@ import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Supplier; import java.util.stream.Collectors; Loading @@ -69,6 +71,7 @@ public final class DatabaseUtils { static final String KEY_LAST_LOAD_FULL_CHARGE_TIME = "last_load_full_charge_time"; static final String KEY_LAST_UPLOAD_FULL_CHARGE_TIME = "last_upload_full_charge_time"; static final String KEY_LAST_USAGE_SOURCE = "last_usage_source"; static final String KEY_DISMISSED_POWER_ANOMALY_KEYS = "dismissed_power_anomaly_keys"; /** An authority name of the battery content provider. */ public static final String AUTHORITY = "com.android.settings.battery.usage.provider"; Loading Loading @@ -636,6 +639,8 @@ public final class DatabaseUtils { KEY_LAST_LOAD_FULL_CHARGE_TIME); writeString(context, writer, "LastUploadFullChargeTime", KEY_LAST_UPLOAD_FULL_CHARGE_TIME); writeString(context, writer, "DismissedPowerAnomalyKeys", KEY_DISMISSED_POWER_ANOMALY_KEYS); } static SharedPreferences getSharedPreferences(Context context) { Loading Loading @@ -674,6 +679,32 @@ public final class DatabaseUtils { return usageSource; } static void removeDismissedPowerAnomalyKeys(Context context) { final SharedPreferences sharedPreferences = getSharedPreferences(context); if (sharedPreferences != null && sharedPreferences.contains(KEY_DISMISSED_POWER_ANOMALY_KEYS)) { sharedPreferences.edit().remove(KEY_DISMISSED_POWER_ANOMALY_KEYS).apply(); } } static Set<String> getDismissedPowerAnomalyKeys(Context context) { final SharedPreferences sharedPreferences = getSharedPreferences(context); return sharedPreferences != null ? sharedPreferences.getStringSet(KEY_DISMISSED_POWER_ANOMALY_KEYS, new ArraySet<>()) : new ArraySet<>(); } static void setDismissedPowerAnomalyKeys(Context context, String dismissedPowerAnomalyKey) { final SharedPreferences sharedPreferences = getSharedPreferences(context); if (sharedPreferences != null) { final Set<String> dismissedPowerAnomalyKeys = getDismissedPowerAnomalyKeys(context); dismissedPowerAnomalyKeys.add(dismissedPowerAnomalyKey); sharedPreferences.edit() .putStringSet(KEY_DISMISSED_POWER_ANOMALY_KEYS, dismissedPowerAnomalyKeys) .apply(); } } static void recordDateTime(Context context, String preferenceKey) { final SharedPreferences sharedPreferences = getSharedPreferences(context); if (sharedPreferences != null) { Loading Loading
src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java +15 −4 Original line number Diff line number Diff line Loading @@ -52,10 +52,10 @@ import com.google.common.base.Objects; import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicBoolean; Loading Loading @@ -397,12 +397,23 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll return true; } private PowerAnomalyEvent getHighestScoreAnomalyEvent(PowerAnomalyEventList anomalyEventList) { @VisibleForTesting PowerAnomalyEvent getHighestScoreAnomalyEvent(PowerAnomalyEventList anomalyEventList) { if (anomalyEventList == null || anomalyEventList.getPowerAnomalyEventsCount() == 0) { return null; } return Collections.max(anomalyEventList.getPowerAnomalyEventsList(), Comparator.comparing(PowerAnomalyEvent::getScore)); final Set<String> dismissedPowerAnomalyKeys = DatabaseUtils.getDismissedPowerAnomalyKeys(mContext); Log.d(TAG, "dismissedPowerAnomalyKeys = " + dismissedPowerAnomalyKeys); final PowerAnomalyEvent highestScoreEvent = anomalyEventList.getPowerAnomalyEventsList() .stream() .filter(event -> event.hasKey() && !dismissedPowerAnomalyKeys.contains(event.getKey().name())) .max(Comparator.comparing(PowerAnomalyEvent::getScore)) .orElse(null); Log.d(TAG, "highestScoreAnomalyEvent = " + highestScoreEvent); return highestScoreEvent; } private boolean refreshUiWithNoLevelDataCase() { Loading
src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java +12 −0 Original line number Diff line number Diff line Loading @@ -50,6 +50,7 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic private final MetricsFeatureProvider mMetricsFeatureProvider; private String mAnomalyEventId; private PowerAnomalyKey mPowerAnomalyKey; @VisibleForTesting CharSequence mMainButtonLabel; Loading @@ -69,6 +70,7 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic final FeatureFactory featureFactory = FeatureFactory.getFactory(context); mPowerUsageFeatureProvider = featureFactory.getPowerUsageFeatureProvider(context); mMetricsFeatureProvider = featureFactory.getMetricsFeatureProvider(); mPowerAnomalyKey = null; } /** Loading Loading @@ -98,6 +100,13 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic } } /** * Sets the power anomaly key of battery tips card. */ public void setPowerAnomalyKey(final PowerAnomalyKey powerAnomalyKey) { mPowerAnomalyKey = powerAnomalyKey; } /** * Sets the info of target fragment launched by main button. */ Loading Loading @@ -133,6 +142,9 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic setVisible(false); mMetricsFeatureProvider.action( getContext(), SettingsEnums.ACTION_BATTERY_TIPS_CARD_DISMISS, mAnomalyEventId); if (mPowerAnomalyKey != null) { DatabaseUtils.setDismissedPowerAnomalyKeys(getContext(), mPowerAnomalyKey.name()); } } } Loading
src/com/android/settings/fuelgauge/batteryusage/BatteryTipsController.java +4 −2 Original line number Diff line number Diff line Loading @@ -108,8 +108,9 @@ public class BatteryTipsController extends BasePreferenceController { } // Get card preference strings and navigate fragment info final int resourceIndex = powerAnomalyEvent.hasKey() ? powerAnomalyEvent.getKey().getNumber() : -1; final PowerAnomalyKey powerAnomalyKey = powerAnomalyEvent.hasKey() ? powerAnomalyEvent.getKey() : null; final int resourceIndex = powerAnomalyKey != null ? powerAnomalyKey.getNumber() : -1; String titleString = getString(powerAnomalyEvent, WarningBannerInfo::getTitleString, WarningItemInfo::getTitleString, R.array.power_anomaly_titles, resourceIndex); Loading @@ -134,6 +135,7 @@ public class BatteryTipsController extends BasePreferenceController { // Updated card preference and main button fragment launcher mCardPreference.setAnomalyEventId(powerAnomalyEvent.getEventId()); mCardPreference.setPowerAnomalyKey(powerAnomalyKey); mCardPreference.setTitle(titleString); mCardPreference.setMainButtonLabel(mainBtnString); mCardPreference.setDismissButtonLabel(dismissBtnString); Loading
src/com/android/settings/fuelgauge/batteryusage/BatteryUsageDataLoader.java +1 −0 Original line number Diff line number Diff line Loading @@ -74,6 +74,7 @@ public final class BatteryUsageDataLoader { context, DatabaseUtils.KEY_LAST_LOAD_FULL_CHARGE_TIME); DatabaseUtils.sendBatteryEventData(context, ConvertUtils.convertToBatteryEvent( currentTime, BatteryEventType.FULL_CHARGED, 100)); DatabaseUtils.removeDismissedPowerAnomalyKeys(context); } // Uploads the BatteryEntry data into database. Loading
src/com/android/settings/fuelgauge/batteryusage/DatabaseUtils.java +31 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ import android.os.Looper; import android.os.RemoteException; import android.os.SystemClock; import android.os.UserManager; import android.util.ArraySet; import android.util.Log; import androidx.annotation.VisibleForTesting; Loading @@ -53,6 +54,7 @@ import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.function.Supplier; import java.util.stream.Collectors; Loading @@ -69,6 +71,7 @@ public final class DatabaseUtils { static final String KEY_LAST_LOAD_FULL_CHARGE_TIME = "last_load_full_charge_time"; static final String KEY_LAST_UPLOAD_FULL_CHARGE_TIME = "last_upload_full_charge_time"; static final String KEY_LAST_USAGE_SOURCE = "last_usage_source"; static final String KEY_DISMISSED_POWER_ANOMALY_KEYS = "dismissed_power_anomaly_keys"; /** An authority name of the battery content provider. */ public static final String AUTHORITY = "com.android.settings.battery.usage.provider"; Loading Loading @@ -636,6 +639,8 @@ public final class DatabaseUtils { KEY_LAST_LOAD_FULL_CHARGE_TIME); writeString(context, writer, "LastUploadFullChargeTime", KEY_LAST_UPLOAD_FULL_CHARGE_TIME); writeString(context, writer, "DismissedPowerAnomalyKeys", KEY_DISMISSED_POWER_ANOMALY_KEYS); } static SharedPreferences getSharedPreferences(Context context) { Loading Loading @@ -674,6 +679,32 @@ public final class DatabaseUtils { return usageSource; } static void removeDismissedPowerAnomalyKeys(Context context) { final SharedPreferences sharedPreferences = getSharedPreferences(context); if (sharedPreferences != null && sharedPreferences.contains(KEY_DISMISSED_POWER_ANOMALY_KEYS)) { sharedPreferences.edit().remove(KEY_DISMISSED_POWER_ANOMALY_KEYS).apply(); } } static Set<String> getDismissedPowerAnomalyKeys(Context context) { final SharedPreferences sharedPreferences = getSharedPreferences(context); return sharedPreferences != null ? sharedPreferences.getStringSet(KEY_DISMISSED_POWER_ANOMALY_KEYS, new ArraySet<>()) : new ArraySet<>(); } static void setDismissedPowerAnomalyKeys(Context context, String dismissedPowerAnomalyKey) { final SharedPreferences sharedPreferences = getSharedPreferences(context); if (sharedPreferences != null) { final Set<String> dismissedPowerAnomalyKeys = getDismissedPowerAnomalyKeys(context); dismissedPowerAnomalyKeys.add(dismissedPowerAnomalyKey); sharedPreferences.edit() .putStringSet(KEY_DISMISSED_POWER_ANOMALY_KEYS, dismissedPowerAnomalyKeys) .apply(); } } static void recordDateTime(Context context, String preferenceKey) { final SharedPreferences sharedPreferences = getSharedPreferences(context); if (sharedPreferences != null) { Loading