diff --git a/res/layout/battery_tips_card.xml b/res/layout/battery_tips_card.xml index 2fa5bf2ae4c..dde559d4b0f 100644 --- a/res/layout/battery_tips_card.xml +++ b/res/layout/battery_tips_card.xml @@ -28,7 +28,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" - android:maxLines="2" android:textAlignment="viewStart" android:textAppearance="?android:attr/textAppearanceLarge" android:textColor="?android:attr/textColorPrimary" /> @@ -45,7 +44,7 @@ style="@style/Widget.Material3.Button.TextButton" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="end" + android:layout_gravity="end|center_vertical" android:paddingHorizontal="16dp" android:layout_marginEnd="8dp" android:text="@string/battery_tips_card_dismiss_button" @@ -59,7 +58,7 @@ android:paddingHorizontal="16dp" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_gravity="end" + android:layout_gravity="end|center_vertical" android:text="@string/battery_tips_card_action_button" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="?android:attr/textColorPrimary" diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java index 660d5e341bf..ea56c0991a4 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryChartPreferenceController.java @@ -44,6 +44,7 @@ import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnCreate; import com.android.settingslib.core.lifecycle.events.OnDestroy; +import com.android.settingslib.core.lifecycle.events.OnPause; import com.android.settingslib.core.lifecycle.events.OnResume; import com.android.settingslib.core.lifecycle.events.OnSaveInstanceState; @@ -51,14 +52,17 @@ 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.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicBoolean; /** Controls the update for chart graph and the list items. */ public class BatteryChartPreferenceController extends AbstractPreferenceController - implements PreferenceControllerMixin, LifecycleObserver, OnCreate, OnDestroy, + implements PreferenceControllerMixin, LifecycleObserver, OnCreate, OnDestroy, OnPause, OnSaveInstanceState, OnResume { private static final String TAG = "BatteryChartPreferenceController"; private static final String PREFERENCE_KEY = "battery_chart"; @@ -135,6 +139,7 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll private OnBatteryUsageUpdatedListener mOnBatteryUsageUpdatedListener; private OnScreenOnTimeUpdatedListener mOnScreenOnTimeUpdatedListener; private OnBatteryTipsUpdatedListener mOnBatteryTipsUpdatedListener; + private AtomicBoolean mIsAppResume = new AtomicBoolean(false); private final SettingsActivity mActivity; private final MetricsFeatureProvider mMetricsFeatureProvider; @@ -179,9 +184,15 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll Log.d(TAG, String.format("onCreate() dailyIndex=%d hourlyIndex=%d", mDailyChartIndex, mHourlyChartIndex)); } + @Override + public void onPause() { + mIsAppResume.compareAndSet(/* expect= */ true, /* update= */ false); + } + @Override public void onResume() { + mIsAppResume.compareAndSet(/* expect= */ false, /* update= */ true); mIs24HourFormat = DateFormat.is24HourFormat(mContext); mMetricsFeatureProvider.action(mPrefContext, SettingsEnums.OPEN_BATTERY_USAGE); } @@ -364,14 +375,22 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll mOnBatteryUsageUpdatedListener.onBatteryUsageUpdated( slotUsageData, getSlotInformation(), isBatteryUsageMapNullOrEmpty()); + Log.d(TAG, "isBatteryTipsEnabled = " + + mPowerUsageFeatureProvider.isBatteryTipsEnabled()); if (mOnBatteryTipsUpdatedListener != null) { mExecutor.execute(() -> { final PowerAnomalyEventList anomalyEventList = mPowerUsageFeatureProvider .detectSettingsAnomaly(mContext, /* displayDrain= */ 0); + Log.d(TAG, "anomalyEventList = " + anomalyEventList); final PowerAnomalyEvent displayEvent = getHighestScoreAnomalyEvent(anomalyEventList); - mHandler.post(() - -> mOnBatteryTipsUpdatedListener.onBatteryTipsUpdated(displayEvent)); + mHandler.post(() -> { + if (mIsAppResume.get()) { + mOnBatteryTipsUpdatedListener + .onBatteryTipsUpdated(displayEvent); + } + } + ); }); } } @@ -382,13 +401,8 @@ public class BatteryChartPreferenceController extends AbstractPreferenceControll 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; + return Collections.max(anomalyEventList.getPowerAnomalyEventsList(), + Comparator.comparing(PowerAnomalyEvent::getScore)); } private boolean refreshUiWithNoLevelDataCase() { diff --git a/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java b/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java index 976897f7991..1a431fa774c 100644 --- a/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java +++ b/src/com/android/settings/fuelgauge/batteryusage/BatteryTipsCardPreference.java @@ -101,6 +101,7 @@ public class BatteryTipsCardPreference extends Preference implements View.OnClic .setDestination(mDestinationComponentName) .setSourceMetricsCategory(mSourceMetricsCategory) .launch(); + setVisible(false); } else if (viewId == R.id.dismiss_button) { setVisible(false); }