Merge "Add a button to enable/disable Mobile Terminated SMS over IMS" into ics-factoryrom
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 19774fa..2024a4e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -968,6 +968,19 @@
</intent-filter>
</activity>
+ <!-- NFC settings -->
+ <activity android:name="Settings$AndroidBeamSettingsActivity"
+ android:label="@string/android_beam_settings_title"
+ android:clearTaskOnLaunch="true">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <action android:name="android.settings.ANDROID_BEAM_SETTINGS" />
+ <category android:name="android.intent.category.DEFAULT" />
+ </intent-filter>
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.settings.nfc.NdefPush" />
+ </activity>
+
<!-- Accessibility tutorial -->
<activity android:name="AccessibilityTutorialActivity"
android:label="@string/accessibility_tutorial_title"
diff --git a/res/layout/android_beam.xml b/res/layout/android_beam.xml
new file mode 100644
index 0000000..b56850c
--- /dev/null
+++ b/res/layout/android_beam.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2010 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="vertical"
+ android:paddingLeft="6dip"
+ android:paddingRight="6dip"
+ android:layout_width="match_parent" android:layout_height="wrap_content"
+ android:scrollbars="vertical" >
+
+ <ScrollView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:fillViewport="true">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical">
+
+ <TextView android:id="@+id/android_beam_explained"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="20dip"
+ android:gravity="top"
+ android:text="@string/android_beam_explained"
+ />
+ <ImageView android:id="@+id/android_beam_image"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ />
+ </LinearLayout>
+
+ </ScrollView>
+
+</LinearLayout>
+
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4dfa126..f8dbfb7 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1120,6 +1120,21 @@
<!-- NFC settings -->
<!-- Used in the 1st-level settings screen to turn on NFC -->
<string name="nfc_quick_toggle_title">NFC</string>
+ <!-- Description of NFC in the 1st level settings screen. [CHAR LIMIT=NONE] -->
+ <string name="nfc_quick_toggle_summary">Allow devices separated by a few centimeters to exchange information</string>
+ <!-- Used to enter the Android Beam sharing preferences screen. This phrase is a trademark. [CHAR LIMIT=32] -->
+ <string name="android_beam_settings_title">Android Beam</string>
+ <!-- Used to describe the on state of the Android Beam feature [CHAR LIMIT=NONE] -->
+ <string name="android_beam_on_summary">On</string>
+ <!-- Used to describe the off state of the Android Beam feature [CHAR LIMIT=NONE] -->
+ <string name="android_beam_off_summary">Off</string>
+ <!-- Used to describe the enabled state of the Android Beam feature when NFC, which it relies on, is turned off [CHAR LIMIT=NONE] -->
+ <string name="android_beam_disabled_summary">Unavailable because NFC is turned off</string>
+ <!-- Used in the Android Beam sharing preferences screen. This phrase is a trademark. [CHAR LIMIT=32] -->
+ <string name="android_beam_label">Android Beam</string>
+ <!-- Explanation of the Android Beam feature in the Android Beam settings panel. The use of "beam" here is as a verb and not considered trademarked. [CHAR LIMIT=NONE] -->
+ <string name="android_beam_explained">When this feature is turned on, you can beam app content to another NFC-capable device by holding the devices close together. For example, you can beam Browser pages, YouTube videos, People contacts, and more.\n\nJust bring the devices together (typically back to back) and then touch your screen. The app determines what gets beamed.</string>
+
<!-- Wi-Fi Settings --> <skip />
<!-- Used in the 1st-level settings screen to turn on Wi-Fi -->
<string name="wifi_quick_toggle_title">Wi-Fi</string>
diff --git a/res/xml/wireless_settings.xml b/res/xml/wireless_settings.xml
index 7b361f2..134461d 100644
--- a/res/xml/wireless_settings.xml
+++ b/res/xml/wireless_settings.xml
@@ -36,8 +36,14 @@
<CheckBoxPreference
android:key="toggle_nfc"
android:title="@string/nfc_quick_toggle_title"
+ android:summary="@string/nfc_quick_toggle_summary"
android:persistent="false" />
+ <PreferenceScreen
+ android:fragment="com.android.settings.nfc.AndroidBeam"
+ android:key="android_beam_settings"
+ android:title="@string/android_beam_settings_title" />
+
<CheckBoxPreference
android:key="toggle_wifi_p2p"
android:title="@string/wifi_p2p_settings_title"
diff --git a/src/com/android/settings/CryptKeeper.java b/src/com/android/settings/CryptKeeper.java
index ad2655f..4a7b4fd 100644
--- a/src/com/android/settings/CryptKeeper.java
+++ b/src/com/android/settings/CryptKeeper.java
@@ -318,7 +318,7 @@
// is encrypted.
Log.d(TAG, "Encryption progress screen initializing.");
- if (mWakeLock != null) {
+ if (mWakeLock == null) {
Log.d(TAG, "Acquiring wakelock.");
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK, TAG);
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 2572cef..14ac78a 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -600,5 +600,5 @@
public static class DataUsageSummaryActivity extends Settings { /* empty */ }
public static class AdvancedWifiSettingsActivity extends Settings { /* empty */ }
public static class TextToSpeechSettingsActivity extends Settings { /* empty */ }
- public static class NfcSharingSettingsActivity extends Settings { /* empty */ }
+ public static class AndroidBeamSettingsActivity extends Settings { /* empty */ }
}
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 7c52413..d18f81e 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -43,6 +43,7 @@
private static final String KEY_TOGGLE_AIRPLANE = "toggle_airplane";
private static final String KEY_TOGGLE_NFC = "toggle_nfc";
+ private static final String KEY_ANDROID_BEAM_SETTINGS = "android_beam_settings";
private static final String KEY_VPN_SETTINGS = "vpn_settings";
private static final String KEY_TOGGLE_WIFI_P2P = "toggle_wifi_p2p";
private static final String KEY_WIFI_P2P_SETTINGS = "wifi_p2p_settings";
@@ -100,11 +101,12 @@
final Activity activity = getActivity();
mAirplaneModePreference = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE);
CheckBoxPreference nfc = (CheckBoxPreference) findPreference(KEY_TOGGLE_NFC);
+ PreferenceScreen androidBeam = (PreferenceScreen) findPreference(KEY_ANDROID_BEAM_SETTINGS);
CheckBoxPreference wifiP2p = (CheckBoxPreference) findPreference(KEY_TOGGLE_WIFI_P2P);
mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference);
- mNfcEnabler = new NfcEnabler(activity, nfc);
+ mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam);
String toggleable = Settings.System.getString(activity.getContentResolver(),
Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
@@ -122,12 +124,14 @@
// Manually set dependencies for NFC when not toggleable.
if (toggleable == null || !toggleable.contains(Settings.System.RADIO_NFC)) {
findPreference(KEY_TOGGLE_NFC).setDependency(KEY_TOGGLE_AIRPLANE);
+ findPreference(KEY_ANDROID_BEAM_SETTINGS).setDependency(KEY_TOGGLE_AIRPLANE);
}
// Remove NFC if its not available
mNfcAdapter = NfcAdapter.getDefaultAdapter(activity);
if (mNfcAdapter == null) {
getPreferenceScreen().removePreference(nfc);
+ getPreferenceScreen().removePreference(androidBeam);
mNfcEnabler = null;
}
diff --git a/src/com/android/settings/nfc/AndroidBeam.java b/src/com/android/settings/nfc/AndroidBeam.java
new file mode 100644
index 0000000..a6bd037
--- /dev/null
+++ b/src/com/android/settings/nfc/AndroidBeam.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright (C) 2011 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.nfc;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.app.Fragment;
+import android.nfc.NfcAdapter;
+import android.os.Bundle;
+import android.os.Handler;
+import android.preference.PreferenceActivity;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.CompoundButton;
+import android.widget.ImageView;
+import android.widget.Switch;
+import com.android.settings.R;
+
+public class AndroidBeam extends Fragment
+ implements CompoundButton.OnCheckedChangeListener {
+ private View mView;
+ private ImageView mImageView;
+ private NfcAdapter mNfcAdapter;
+ private Switch mActionBarSwitch;
+
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ Activity activity = getActivity();
+
+ mActionBarSwitch = new Switch(activity);
+
+ if (activity instanceof PreferenceActivity) {
+ PreferenceActivity preferenceActivity = (PreferenceActivity) activity;
+ if (preferenceActivity.onIsHidingHeaders() || !preferenceActivity.onIsMultiPane()) {
+ final int padding = activity.getResources().getDimensionPixelSize(
+ R.dimen.action_bar_switch_padding);
+ mActionBarSwitch.setPadding(0, 0, padding, 0);
+ activity.getActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM,
+ ActionBar.DISPLAY_SHOW_CUSTOM);
+ activity.getActionBar().setCustomView(mActionBarSwitch, new ActionBar.LayoutParams(
+ ActionBar.LayoutParams.WRAP_CONTENT,
+ ActionBar.LayoutParams.WRAP_CONTENT,
+ Gravity.CENTER_VERTICAL | Gravity.RIGHT));
+ activity.getActionBar().setTitle(R.string.android_beam_settings_title);
+ }
+ }
+
+ mActionBarSwitch.setOnCheckedChangeListener(this);
+
+ mNfcAdapter = NfcAdapter.getDefaultAdapter(getActivity());
+ mActionBarSwitch.setChecked(mNfcAdapter.isNdefPushEnabled());
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ mView = inflater.inflate(R.layout.android_beam, container, false);
+ initView(mView);
+ return mView;
+ }
+
+ private void initView(View view) {
+ mActionBarSwitch.setOnCheckedChangeListener(this);
+ mActionBarSwitch.setChecked(mNfcAdapter.isNdefPushEnabled());
+ }
+
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean desiredState) {
+ boolean success = false;
+ mActionBarSwitch.setEnabled(false);
+ if (desiredState) {
+ success = mNfcAdapter.enableNdefPush();
+ } else {
+ success = mNfcAdapter.disableNdefPush();
+ }
+ if (success) {
+ mActionBarSwitch.setChecked(desiredState);
+ }
+ mActionBarSwitch.setEnabled(true);
+ }
+}
diff --git a/src/com/android/settings/nfc/NfcEnabler.java b/src/com/android/settings/nfc/NfcEnabler.java
index c7a2d60..018b8ae 100644
--- a/src/com/android/settings/nfc/NfcEnabler.java
+++ b/src/com/android/settings/nfc/NfcEnabler.java
@@ -23,6 +23,9 @@
import android.nfc.NfcAdapter;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
+import android.preference.PreferenceScreen;
+
+import com.android.settings.R;
/**
* NfcEnabler is a helper to manage the Nfc on/off checkbox preference. It is
@@ -32,6 +35,7 @@
public class NfcEnabler implements Preference.OnPreferenceChangeListener {
private final Context mContext;
private final CheckBoxPreference mCheckbox;
+ private final PreferenceScreen mAndroidBeam;
private final NfcAdapter mNfcAdapter;
private final IntentFilter mIntentFilter;
@@ -46,14 +50,17 @@
}
};
- public NfcEnabler(Context context, CheckBoxPreference checkBoxPreference) {
+ public NfcEnabler(Context context, CheckBoxPreference checkBoxPreference,
+ PreferenceScreen androidBeam) {
mContext = context;
mCheckbox = checkBoxPreference;
+ mAndroidBeam = androidBeam;
mNfcAdapter = NfcAdapter.getDefaultAdapter(context);
if (mNfcAdapter == null) {
// NFC is not supported
mCheckbox.setEnabled(false);
+ mAndroidBeam.setEnabled(false);
mIntentFilter = null;
return;
}
@@ -97,18 +104,28 @@
case NfcAdapter.STATE_OFF:
mCheckbox.setChecked(false);
mCheckbox.setEnabled(true);
+ mAndroidBeam.setEnabled(false);
+ mAndroidBeam.setSummary(R.string.android_beam_disabled_summary);
break;
case NfcAdapter.STATE_ON:
mCheckbox.setChecked(true);
mCheckbox.setEnabled(true);
+ mAndroidBeam.setEnabled(true);
+ if (mNfcAdapter.isNdefPushEnabled()) {
+ mAndroidBeam.setSummary(R.string.android_beam_on_summary);
+ } else {
+ mAndroidBeam.setSummary(R.string.android_beam_off_summary);
+ }
break;
case NfcAdapter.STATE_TURNING_ON:
mCheckbox.setChecked(true);
mCheckbox.setEnabled(false);
+ mAndroidBeam.setEnabled(false);
break;
case NfcAdapter.STATE_TURNING_OFF:
mCheckbox.setChecked(false);
mCheckbox.setEnabled(false);
+ mAndroidBeam.setEnabled(false);
break;
}
}