summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/AirplaneModeEnabler.java
diff options
context:
space:
mode:
authorThe Android Open Source Project <initial-contribution@android.com>2008-10-21 07:00:00 -0700
committerThe Android Open Source Project <initial-contribution@android.com>2008-10-21 07:00:00 -0700
commitde2d9f5f109265873196f1615e1f3546b114aaa7 (patch)
treecd79c0fdeba9e5564571422a549b9a84e4ac43bb /src/com/android/settings/AirplaneModeEnabler.java
downloadpackages_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.java117
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;
+ }
+
+}