diff options
| author | 2017-07-31 13:42:00 -0700 | |
|---|---|---|
| committer | 2017-07-31 18:42:47 -0700 | |
| commit | 1aab3fa3b5d69251fd47a6df392ba81d072cd667 (patch) | |
| tree | af0de8e21c47d2df09186c225e143af0be5b45d4 | |
| parent | 153d2ff613dfaf5cc2eff641c14b02235a86b978 (diff) | |
Refresh constants when MCC/MNC changes in PowerUI
The PowerUI in SystemUI decides whether to show high temperature
warnings to the user based on resources defined for mnc/mcc
configurations. PowerUI only loads the relevant constants once
at startup, meaning any SIM changes that come after the initialization
are not visible. Sometimes, these changes are the first initialization
of mnc/mcc.
PowerUI now listens to configuration changes and updates its internal
state when mnc/mcc changes occur.
Bug: 62845934
Test: manual (put SIM in device and reboot)
Change-Id: Id6a13017924f0367594aa29419aac59ac8b7c157
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/power/PowerUI.java | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java index a64207714093..a9139993c137 100644 --- a/packages/SystemUI/src/com/android/systemui/power/PowerUI.java +++ b/packages/SystemUI/src/com/android/systemui/power/PowerUI.java @@ -22,6 +22,8 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.ActivityInfo; +import android.content.res.Configuration; import android.content.res.Resources; import android.database.ContentObserver; import android.os.BatteryManager; @@ -56,6 +58,7 @@ public class PowerUI extends SystemUI { private PowerManager mPowerManager; private HardwarePropertiesManager mHardwarePropertiesManager; private WarningsUI mWarnings; + private final Configuration mLastConfiguration = new Configuration(); private int mBatteryLevel = 100; private int mBatteryStatus = BatteryManager.BATTERY_STATUS_UNKNOWN; private int mPlugType = 0; @@ -71,6 +74,11 @@ public class PowerUI extends SystemUI { private int mNumTemps; private long mNextLogTime; + // We create a method reference here so that we are guaranteed that we can remove a callback + // by using the same instance (method references are not guaranteed to be the same object + // each time they are created). + private final Runnable mUpdateTempCallback = this::updateTemperatureWarning; + public void start() { mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE); mHardwarePropertiesManager = (HardwarePropertiesManager) @@ -80,6 +88,7 @@ public class PowerUI extends SystemUI { mContext, (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE), getComponent(StatusBar.class)); + mLastConfiguration.setTo(mContext.getResources().getConfiguration()); ContentObserver obs = new ContentObserver(mHandler) { @Override @@ -101,6 +110,16 @@ public class PowerUI extends SystemUI { initTemperatureWarning(); } + @Override + protected void onConfigurationChanged(Configuration newConfig) { + final int mask = ActivityInfo.CONFIG_MCC | ActivityInfo.CONFIG_MNC; + + // Safe to modify mLastConfiguration here as it's only updated by the main thread (here). + if ((mLastConfiguration.updateFrom(newConfig) & mask) != 0) { + mHandler.post(this::initTemperatureWarning); + } + } + void updateBatteryWarningLevels() { int critLevel = mContext.getResources().getInteger( com.android.internal.R.integer.config_criticalBatteryWarningLevel); @@ -255,8 +274,14 @@ public class PowerUI extends SystemUI { } mThresholdTemp = throttlingTemps[0]; } + setNextLogTime(); + // This initialization method may be called on a configuration change. Only one set of + // ongoing callbacks should be occurring, so remove any now. updateTemperatureWarning will + // schedule an ongoing callback. + mHandler.removeCallbacks(mUpdateTempCallback); + // We have passed all of the checks, start checking the temp updateTemperatureWarning(); } @@ -288,7 +313,7 @@ public class PowerUI extends SystemUI { logTemperatureStats(); - mHandler.postDelayed(this::updateTemperatureWarning, TEMPERATURE_INTERVAL); + mHandler.postDelayed(mUpdateTempCallback, TEMPERATURE_INTERVAL); } private void logAtTemperatureThreshold(float temp) { |