diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2008-10-21 07:00:00 -0700 |
commit | de2d9f5f109265873196f1615e1f3546b114aaa7 (patch) | |
tree | cd79c0fdeba9e5564571422a549b9a84e4ac43bb /src/com/android/settings/AirplaneModeEnabler.java | |
download | packages_apps_Settings-de2d9f5f109265873196f1615e1f3546b114aaa7.zip packages_apps_Settings-de2d9f5f109265873196f1615e1f3546b114aaa7.tar.gz packages_apps_Settings-de2d9f5f109265873196f1615e1f3546b114aaa7.tar.bz2 |
Initial Contribution
Diffstat (limited to 'src/com/android/settings/AirplaneModeEnabler.java')
-rw-r--r-- | src/com/android/settings/AirplaneModeEnabler.java | 117 |
1 files changed, 117 insertions, 0 deletions
diff --git a/src/com/android/settings/AirplaneModeEnabler.java b/src/com/android/settings/AirplaneModeEnabler.java new file mode 100644 index 0000000..f47d679 --- /dev/null +++ b/src/com/android/settings/AirplaneModeEnabler.java @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings; + +import com.android.internal.telephony.PhoneStateIntentReceiver; + +import android.content.Context; +import android.content.Intent; +import android.os.Handler; +import android.os.Message; +import android.preference.CheckBoxPreference; +import android.preference.Preference; +import android.provider.Settings; +import android.telephony.ServiceState; + +public class AirplaneModeEnabler implements Preference.OnPreferenceChangeListener { + + private final Context mContext; + + private PhoneStateIntentReceiver mPhoneStateReceiver; + + private final CheckBoxPreference mCheckBoxPref; + + private static final int EVENT_SERVICE_STATE_CHANGED = 3; + + private Handler mHandler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case EVENT_SERVICE_STATE_CHANGED: + onAirplaneModeChanged(); + break; + } + } + }; + + public AirplaneModeEnabler(Context context, CheckBoxPreference airplaneModeCheckBoxPreference) { + + mContext = context; + mCheckBoxPref = airplaneModeCheckBoxPreference; + + airplaneModeCheckBoxPreference.setPersistent(false); + + mPhoneStateReceiver = new PhoneStateIntentReceiver(mContext, mHandler); + mPhoneStateReceiver.notifyServiceState(EVENT_SERVICE_STATE_CHANGED); + } + + public void resume() { + + // This is the widget enabled state, not the preference toggled state + mCheckBoxPref.setEnabled(true); + mCheckBoxPref.setChecked(isAirplaneModeOn()); + + mPhoneStateReceiver.registerIntent(); + mCheckBoxPref.setOnPreferenceChangeListener(this); + } + + public void pause() { + mPhoneStateReceiver.unregisterIntent(); + mCheckBoxPref.setOnPreferenceChangeListener(null); + } + + private boolean isAirplaneModeOn() { + return Settings.System.getInt(mContext.getContentResolver(), + Settings.System.AIRPLANE_MODE_ON, 0) != 0; + } + + private void setAirplaneModeOn(boolean enabling) { + + mCheckBoxPref.setEnabled(false); + mCheckBoxPref.setSummary(enabling ? R.string.airplane_mode_turning_on + : R.string.airplane_mode_turning_off); + + // Change the system setting + Settings.System.putInt(mContext.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, + enabling ? 1 : 0); + + // Post the intent + Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); + intent.putExtra("state", enabling); + mContext.sendBroadcast(intent); + } + + /** + * Called when we've received confirmation that the airplane mode was set. + */ + private void onAirplaneModeChanged() { + ServiceState serviceState = mPhoneStateReceiver.getServiceState(); + boolean isPhoneOff = serviceState.getState() == ServiceState.STATE_POWER_OFF; + mCheckBoxPref.setChecked(isPhoneOff); + mCheckBoxPref.setSummary(R.string.airplane_mode_summary); + mCheckBoxPref.setEnabled(true); + } + + /** + * Called when someone clicks on the checkbox preference. + */ + public boolean onPreferenceChange(Preference preference, Object newValue) { + setAirplaneModeOn((Boolean) newValue); + return true; + } + +} |