Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9b786733 authored by Sherry Huang's avatar Sherry Huang Committed by Wei Wang
Browse files

Only show the thermal shutdown warning when thermal reboot

showThermalShutdownWarning() is on the path where systemui starts
and restarts. Previously, we just checked the boot reason in
determining whether to show the warning, which makes it unexpectedly
seen when systemui restarts from crashes.

This CL caches the last boot count and compares with the current one
to ensure that there is a thermal reboot before the warning is shown.

Test: atest PowerUITest
Bug: 138089094
Change-Id: I0a51d00703d291ba10a6ab4f348308a14000a20e
parent 46b82fd3
Loading
Loading
Loading
Loading
+20 −5
Original line number Diff line number Diff line
@@ -64,6 +64,8 @@ public class PowerUI extends SystemUI {
    private static final int CHARGE_CYCLE_PERCENT_RESET = 45;
    private static final long SIX_HOURS_MILLIS = Duration.ofHours(6).toMillis();
    public static final int NO_ESTIMATE_AVAILABLE = -1;
    private static final String BOOT_COUNT_KEY = "boot_count";
    private static final String PREFS = "powerui_prefs";

    private final Handler mHandler = new Handler();
    @VisibleForTesting
@@ -118,7 +120,7 @@ public class PowerUI extends SystemUI {

        // Check to see if we need to let the user know that the phone previously shut down due
        // to the temperature being too high.
        showThermalShutdownDialog();
        showWarnOnThermalShutdown();

        // Register an observer to configure mEnableSkinTemperatureWarning and perform the
        // registration of skin thermal event listener upon Settings change.
@@ -542,12 +544,25 @@ public class PowerUI extends SystemUI {
        }
    }

    private void showThermalShutdownDialog() {
    private void showWarnOnThermalShutdown() {
        int bootCount = -1;
        int lastReboot = mContext.getSharedPreferences(PREFS, 0).getInt(BOOT_COUNT_KEY, -1);
        try {
            bootCount = Settings.Global.getInt(mContext.getContentResolver(),
                    Settings.Global.BOOT_COUNT);
        } catch (Settings.SettingNotFoundException e) {
            Slog.e(TAG, "Failed to read system boot count from Settings.Global.BOOT_COUNT");
        }
        // Only show the thermal shutdown warning when there is a thermal reboot.
        if (bootCount > lastReboot) {
            mContext.getSharedPreferences(PREFS, 0).edit().putInt(BOOT_COUNT_KEY,
                    bootCount).apply();
            if (mPowerManager.getLastShutdownReason()
                    == PowerManager.SHUTDOWN_REASON_THERMAL_SHUTDOWN) {
                mWarnings.showThermalShutdownWarning();
            }
        }
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.print("mLowBatteryAlertCloseLevel=");