diff options
author | CY Cheng <cycheng@google.com> | 2018-03-26 18:38:59 +0800 |
---|---|---|
committer | CY Cheng <cycheng@google.com> | 2018-04-12 14:10:35 +0800 |
commit | fee4807dc0b8f6a8ce34b8c0f786a7711501fc14 (patch) | |
tree | 88fcc1c83a0642f54deb5194a25212be78a0b9c8 /src/com/android/settings/AirplaneModeEnabler.java | |
parent | 17a463130edcf25598746f11b768d1c3a5b52318 (diff) | |
download | packages_apps_Settings-fee4807dc0b8f6a8ce34b8c0f786a7711501fc14.tar.gz packages_apps_Settings-fee4807dc0b8f6a8ce34b8c0f786a7711501fc14.tar.bz2 packages_apps_Settings-fee4807dc0b8f6a8ce34b8c0f786a7711501fc14.zip |
Refactor airplane mode preference controller.
- Convert inheritance from AbstractPreferenceController to
TogglePreferenceController.
- Register AirplaneModePreferenceController in XML.
- Decouple AirplaneModeEnabler with preference, leave the UI be
controled by PreferenceController.
- Add RoboTests test cases for AirplaneModePreferenceController.
Fixes: 67997339
Test: RunSettingsRoboTests
Change-Id: I7398943ed51345e014ee7aa774bfae1ca28632f1
Diffstat (limited to 'src/com/android/settings/AirplaneModeEnabler.java')
-rw-r--r-- | src/com/android/settings/AirplaneModeEnabler.java | 55 |
1 files changed, 30 insertions, 25 deletions
diff --git a/src/com/android/settings/AirplaneModeEnabler.java b/src/com/android/settings/AirplaneModeEnabler.java index 5f93589c92..11f1a28322 100644 --- a/src/com/android/settings/AirplaneModeEnabler.java +++ b/src/com/android/settings/AirplaneModeEnabler.java @@ -24,8 +24,6 @@ import android.os.Message; import android.os.SystemProperties; import android.os.UserHandle; import android.provider.Settings; -import android.support.v14.preference.SwitchPreference; -import android.support.v7.preference.Preference; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.telephony.PhoneStateIntentReceiver; @@ -33,16 +31,26 @@ import com.android.internal.telephony.TelephonyProperties; import com.android.settingslib.WirelessUtils; import com.android.settingslib.core.instrumentation.MetricsFeatureProvider; -public class AirplaneModeEnabler implements Preference.OnPreferenceChangeListener { +public class AirplaneModeEnabler { private static final int EVENT_SERVICE_STATE_CHANGED = 3; private final Context mContext; - private final SwitchPreference mSwitchPref; private final MetricsFeatureProvider mMetricsFeatureProvider; private PhoneStateIntentReceiver mPhoneStateReceiver; + private OnAirplaneModeChangedListener mOnAirplaneModeChangedListener; + + public interface OnAirplaneModeChangedListener { + /** + * Called when airplane mode status is changed. + * + * @param isAirplaneModeOn the airplane mode is on + */ + void onAirplaneModeChanged(boolean isAirplaneModeOn); + } + private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -61,25 +69,19 @@ public class AirplaneModeEnabler implements Preference.OnPreferenceChangeListene } }; - public AirplaneModeEnabler(Context context, SwitchPreference airplaneModeSwitchPreference, - MetricsFeatureProvider metricsFeatureProvider) { + public AirplaneModeEnabler(Context context, MetricsFeatureProvider metricsFeatureProvider, + OnAirplaneModeChangedListener listener) { mContext = context; - mSwitchPref = airplaneModeSwitchPreference; mMetricsFeatureProvider = metricsFeatureProvider; - - airplaneModeSwitchPreference.setPersistent(false); + mOnAirplaneModeChangedListener = listener; mPhoneStateReceiver = new PhoneStateIntentReceiver(mContext, mHandler); mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED); } public void resume() { - - mSwitchPref.setChecked(WirelessUtils.isAirplaneModeOn(mContext)); - mPhoneStateReceiver.registerIntent(); - mSwitchPref.setOnPreferenceChangeListener(this); mContext.getContentResolver().registerContentObserver( Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON), true, mAirplaneModeObserver); @@ -87,7 +89,6 @@ public class AirplaneModeEnabler implements Preference.OnPreferenceChangeListene public void pause() { mPhoneStateReceiver.unregisterIntent(); - mSwitchPref.setOnPreferenceChangeListener(null); mContext.getContentResolver().unregisterContentObserver(mAirplaneModeObserver); } @@ -95,8 +96,11 @@ public class AirplaneModeEnabler implements Preference.OnPreferenceChangeListene // Change the system setting Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, enabling ? 1 : 0); - // Update the UI to reflect system setting - mSwitchPref.setChecked(enabling); + + // Notify listener the system setting is changed. + if (mOnAirplaneModeChangedListener != null) { + mOnAirplaneModeChangedListener.onAirplaneModeChanged(enabling); + } // Post the intent Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); @@ -113,22 +117,20 @@ public class AirplaneModeEnabler implements Preference.OnPreferenceChangeListene * - mobile does not send failure notification, fail on timeout. */ private void onAirplaneModeChanged() { - mSwitchPref.setChecked(WirelessUtils.isAirplaneModeOn(mContext)); + if (mOnAirplaneModeChangedListener != null) { + mOnAirplaneModeChangedListener.onAirplaneModeChanged(isAirplaneModeOn()); + } } - /** - * Called when someone clicks on the checkbox preference. - */ - public boolean onPreferenceChange(Preference preference, Object newValue) { + public void setAirplaneMode(boolean isAirplaneModeOn) { if (Boolean.parseBoolean( SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE))) { // In ECM mode, do not update database at this point } else { - Boolean value = (Boolean) newValue; - mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_AIRPLANE_TOGGLE, value); - setAirplaneModeOn(value); + mMetricsFeatureProvider.action(mContext, MetricsEvent.ACTION_AIRPLANE_TOGGLE, + isAirplaneModeOn); + setAirplaneModeOn(isAirplaneModeOn); } - return true; } public void setAirplaneModeInECM(boolean isECMExit, boolean isAirplaneModeOn) { @@ -141,4 +143,7 @@ public class AirplaneModeEnabler implements Preference.OnPreferenceChangeListene } } + public boolean isAirplaneModeOn() { + return WirelessUtils.isAirplaneModeOn(mContext); + } } |