Add Nsd settings checkbox
Change-Id: I58e54a8bed02ed7bd99b0f284279b6c799e3369f
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 28e9e46..39596ba 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1155,6 +1155,12 @@
<!-- 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>
+ <!-- Network service discovery settings -->
+ <!-- Used in the 1st-level settings screen to turn on NSD -->
+ <string name="nsd_quick_toggle_title">Network service discovery</string>
+ <!-- Description of NFC in the 1st level settings screen. [CHAR LIMIT=NONE] -->
+ <string name="nsd_quick_toggle_summary">Allow apps on other devices to discover apps on this device</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 8531b3e..866a617 100644
--- a/res/xml/wireless_settings.xml
+++ b/res/xml/wireless_settings.xml
@@ -64,6 +64,12 @@
android:targetClass="com.android.phone.MobileNetworkSettings" />
</PreferenceScreen>
+ <CheckBoxPreference
+ android:key="toggle_nsd"
+ android:title="@string/nsd_quick_toggle_title"
+ android:summary="@string/nsd_quick_toggle_summary"
+ android:persistent="false" />
+
<PreferenceScreen
android:fragment="com.android.settings.ProxySelector"
android:key="proxy_settings"
diff --git a/src/com/android/settings/NsdEnabler.java b/src/com/android/settings/NsdEnabler.java
new file mode 100644
index 0000000..acdf92e
--- /dev/null
+++ b/src/com/android/settings/NsdEnabler.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2012 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 android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.nsd.NsdManager;
+import android.preference.CheckBoxPreference;
+import android.preference.Preference;
+import android.preference.PreferenceScreen;
+
+import com.android.settings.R;
+
+/**
+ * NsdEnabler is a helper to manage network service discovery on/off checkbox state.
+ */
+public class NsdEnabler implements Preference.OnPreferenceChangeListener {
+ private final Context mContext;
+ private final CheckBoxPreference mCheckbox;
+ private final IntentFilter mIntentFilter;
+ private NsdManager mNsdManager;
+
+ private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ String action = intent.getAction();
+ if (NsdManager.ACTION_NSD_STATE_CHANGED.equals(action)) {
+ handleNsdStateChanged(intent.getIntExtra(NsdManager.EXTRA_NSD_STATE,
+ NsdManager.NSD_STATE_DISABLED));
+ }
+ }
+ };
+
+ public NsdEnabler(Context context, CheckBoxPreference checkBoxPreference) {
+ mContext = context;
+ mCheckbox = checkBoxPreference;
+ mNsdManager = (NsdManager) mContext.getSystemService(Context.NSD_SERVICE);
+ mIntentFilter = new IntentFilter(NsdManager.ACTION_NSD_STATE_CHANGED);
+ }
+
+ public void resume() {
+ mContext.registerReceiver(mReceiver, mIntentFilter);
+ mCheckbox.setOnPreferenceChangeListener(this);
+ }
+
+ public void pause() {
+ mContext.unregisterReceiver(mReceiver);
+ mCheckbox.setOnPreferenceChangeListener(null);
+ }
+
+ public boolean onPreferenceChange(Preference preference, Object value) {
+
+ final boolean desiredState = (Boolean) value;
+ mCheckbox.setEnabled(false);
+ mNsdManager.setEnabled(desiredState);
+ return false;
+ }
+
+ private void handleNsdStateChanged(int newState) {
+ switch (newState) {
+ case NsdManager.NSD_STATE_DISABLED:
+ mCheckbox.setChecked(false);
+ mCheckbox.setEnabled(true);
+ break;
+ case NsdManager.NSD_STATE_ENABLED:
+ mCheckbox.setChecked(true);
+ mCheckbox.setEnabled(true);
+ break;
+ }
+ }
+}
diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java
index 56f6d46..ecddd0d 100644
--- a/src/com/android/settings/WirelessSettings.java
+++ b/src/com/android/settings/WirelessSettings.java
@@ -37,6 +37,7 @@
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.TelephonyProperties;
import com.android.settings.nfc.NfcEnabler;
+import com.android.settings.NsdEnabler;
public class WirelessSettings extends SettingsPreferenceFragment {
@@ -48,6 +49,7 @@
private static final String KEY_TETHER_SETTINGS = "tether_settings";
private static final String KEY_PROXY_SETTINGS = "proxy_settings";
private static final String KEY_MOBILE_NETWORK_SETTINGS = "mobile_network_settings";
+ private static final String KEY_TOGGLE_NSD = "toggle_nsd"; //network service discovery
public static final String EXIT_ECM_RESULT = "exit_ecm_result";
public static final int REQUEST_CODE_EXIT_ECM = 1;
@@ -56,6 +58,7 @@
private CheckBoxPreference mAirplaneModePreference;
private NfcEnabler mNfcEnabler;
private NfcAdapter mNfcAdapter;
+ private NsdEnabler mNsdEnabler;
/**
* Invoked on each preference click in this hierarchy, overrides
@@ -96,9 +99,11 @@
mAirplaneModePreference = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE);
CheckBoxPreference nfc = (CheckBoxPreference) findPreference(KEY_TOGGLE_NFC);
PreferenceScreen androidBeam = (PreferenceScreen) findPreference(KEY_ANDROID_BEAM_SETTINGS);
+ CheckBoxPreference nsd = (CheckBoxPreference) findPreference(KEY_TOGGLE_NSD);
mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference);
mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam);
+ mNsdEnabler = new NsdEnabler(activity, nsd);
String toggleable = Settings.System.getString(activity.getContentResolver(),
Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
@@ -173,6 +178,7 @@
if (mNfcEnabler != null) {
mNfcEnabler.resume();
}
+ mNsdEnabler.resume();
}
@Override
@@ -183,6 +189,7 @@
if (mNfcEnabler != null) {
mNfcEnabler.pause();
}
+ mNsdEnabler.pause();
}
@Override