Impl the detect & show pipeline for PowerAnomalyEventList.

Test: make SettingsLibRoboTests
Bug: 293813663
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:4c6f81c41e2806f384d2e465e89dadb7383048e8)
Change-Id: I0c477dc546ec4d00e4c4133afb61bf7d574be9f8
This commit is contained in:
mxyyiyi
2023-08-10 23:10:10 +08:00
committed by Xinyi Mao
parent b199f3512a
commit 4ea5aaf5ef
2 changed files with 68 additions and 2 deletions

View File

@@ -36,6 +36,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.SettingsActivity;
import com.android.settings.core.PreferenceControllerMixin;
import com.android.settings.fuelgauge.PowerUsageFeatureProvider;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -52,6 +53,8 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/** Controls the update for chart graph and the list items. */
public class BatteryChartPreferenceController extends AbstractPreferenceController
@@ -136,11 +139,13 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
private final SettingsActivity mActivity;
private final MetricsFeatureProvider mMetricsFeatureProvider;
private final PowerUsageFeatureProvider mPowerUsageFeatureProvider;
private final Handler mHandler = new Handler(Looper.getMainLooper());
private final AnimatorListenerAdapter mHourlyChartFadeInAdapter =
createHourlyChartAnimatorListenerAdapter(/*visible=*/ true);
private final AnimatorListenerAdapter mHourlyChartFadeOutAdapter =
createHourlyChartAnimatorListenerAdapter(/*visible=*/ false);
private final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
@VisibleForTesting
final DailyChartLabelTextGenerator mDailyChartLabelTextGenerator =
@@ -156,6 +161,8 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
mIs24HourFormat = DateFormat.is24HourFormat(context);
mMetricsFeatureProvider =
FeatureFactory.getFeatureFactory().getMetricsFeatureProvider();
mPowerUsageFeatureProvider =
FeatureFactory.getFeatureFactory().getPowerUsageFeatureProvider();
if (lifecycle != null) {
lifecycle.addObserver(this);
}
@@ -364,13 +371,32 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll
slotUsageData, getSlotInformation(), isBatteryUsageMapNullOrEmpty());
if (mOnBatteryTipsUpdatedListener != null) {
// TODO: replace with a selected powerAnomalyEvent with highest score
mOnBatteryTipsUpdatedListener.onBatteryTipsUpdated(null);
mExecutor.execute(() -> {
final PowerAnomalyEventList anomalyEventList = mPowerUsageFeatureProvider
.detectSettingsAnomaly(mContext, /* displayDrain= */ 0);
final PowerAnomalyEvent displayEvent =
getHighestScoreAnomalyEvent(anomalyEventList);
mHandler.post(()
-> mOnBatteryTipsUpdatedListener.onBatteryTipsUpdated(displayEvent));
});
}
}
return true;
}
private PowerAnomalyEvent getHighestScoreAnomalyEvent(PowerAnomalyEventList anomalyEventList) {
if (anomalyEventList == null || anomalyEventList.getPowerAnomalyEventsCount() == 0) {
return null;
}
PowerAnomalyEvent highestScoreEvent = null;
for (PowerAnomalyEvent event : anomalyEventList.getPowerAnomalyEventsList()) {
if (highestScoreEvent == null || event.getScore() > highestScoreEvent.getScore()) {
highestScoreEvent = event;
}
}
return highestScoreEvent;
}
private boolean refreshUiWithNoLevelDataCase() {
setChartSummaryVisible(false);
if (mBatteryUsageMap == null) {