Bring back the Android Beam settings panel.

Bug: 5350022
Change-Id: I22d2c6f91f7ab86501021fe97a2d57b109ed10bf
This commit is contained in:
Jeff Hamilton
2011-09-21 16:44:36 -05:00
parent 7c430090c9
commit 3d670de5ce
7 changed files with 191 additions and 3 deletions

View File

@@ -967,6 +967,19 @@
</intent-filter> </intent-filter>
</activity> </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 --> <!-- Accessibility tutorial -->
<activity android:name="AccessibilityTutorialActivity" <activity android:name="AccessibilityTutorialActivity"
android:label="@string/accessibility_tutorial_title" android:label="@string/accessibility_tutorial_title"

View File

@@ -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>

View File

@@ -36,8 +36,14 @@
<CheckBoxPreference <CheckBoxPreference
android:key="toggle_nfc" android:key="toggle_nfc"
android:title="@string/nfc_quick_toggle_title" android:title="@string/nfc_quick_toggle_title"
android:summary="@string/nfc_quick_toggle_summary"
android:persistent="false" /> android:persistent="false" />
<PreferenceScreen
android:fragment="com.android.settings.nfc.AndroidBeam"
android:key="android_beam_settings"
android:title="@string/android_beam_settings_title" />
<CheckBoxPreference <CheckBoxPreference
android:key="toggle_wifi_p2p" android:key="toggle_wifi_p2p"
android:title="@string/wifi_p2p_settings_title" android:title="@string/wifi_p2p_settings_title"

View File

@@ -600,5 +600,5 @@ public class Settings extends PreferenceActivity implements ButtonBarHandler {
public static class DataUsageSummaryActivity extends Settings { /* empty */ } public static class DataUsageSummaryActivity extends Settings { /* empty */ }
public static class AdvancedWifiSettingsActivity extends Settings { /* empty */ } public static class AdvancedWifiSettingsActivity extends Settings { /* empty */ }
public static class TextToSpeechSettingsActivity extends Settings { /* empty */ } public static class TextToSpeechSettingsActivity extends Settings { /* empty */ }
public static class NfcSharingSettingsActivity extends Settings { /* empty */ } public static class AndroidBeamSettingsActivity extends Settings { /* empty */ }
} }

View File

@@ -43,6 +43,7 @@ public class WirelessSettings extends SettingsPreferenceFragment {
private static final String KEY_TOGGLE_AIRPLANE = "toggle_airplane"; private static final String KEY_TOGGLE_AIRPLANE = "toggle_airplane";
private static final String KEY_TOGGLE_NFC = "toggle_nfc"; 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_VPN_SETTINGS = "vpn_settings";
private static final String KEY_TOGGLE_WIFI_P2P = "toggle_wifi_p2p"; private static final String KEY_TOGGLE_WIFI_P2P = "toggle_wifi_p2p";
private static final String KEY_WIFI_P2P_SETTINGS = "wifi_p2p_settings"; private static final String KEY_WIFI_P2P_SETTINGS = "wifi_p2p_settings";
@@ -100,11 +101,12 @@ public class WirelessSettings extends SettingsPreferenceFragment {
final Activity activity = getActivity(); final Activity activity = getActivity();
mAirplaneModePreference = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE); mAirplaneModePreference = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE);
CheckBoxPreference nfc = (CheckBoxPreference) findPreference(KEY_TOGGLE_NFC); CheckBoxPreference nfc = (CheckBoxPreference) findPreference(KEY_TOGGLE_NFC);
PreferenceScreen androidBeam = (PreferenceScreen) findPreference(KEY_ANDROID_BEAM_SETTINGS);
CheckBoxPreference wifiP2p = (CheckBoxPreference) findPreference(KEY_TOGGLE_WIFI_P2P); CheckBoxPreference wifiP2p = (CheckBoxPreference) findPreference(KEY_TOGGLE_WIFI_P2P);
mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference); mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference);
mNfcEnabler = new NfcEnabler(activity, nfc); mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam);
String toggleable = Settings.System.getString(activity.getContentResolver(), String toggleable = Settings.System.getString(activity.getContentResolver(),
Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS); Settings.System.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
@@ -122,12 +124,14 @@ public class WirelessSettings extends SettingsPreferenceFragment {
// Manually set dependencies for NFC when not toggleable. // Manually set dependencies for NFC when not toggleable.
if (toggleable == null || !toggleable.contains(Settings.System.RADIO_NFC)) { if (toggleable == null || !toggleable.contains(Settings.System.RADIO_NFC)) {
findPreference(KEY_TOGGLE_NFC).setDependency(KEY_TOGGLE_AIRPLANE); findPreference(KEY_TOGGLE_NFC).setDependency(KEY_TOGGLE_AIRPLANE);
findPreference(KEY_ANDROID_BEAM_SETTINGS).setDependency(KEY_TOGGLE_AIRPLANE);
} }
// Remove NFC if its not available // Remove NFC if its not available
mNfcAdapter = NfcAdapter.getDefaultAdapter(activity); mNfcAdapter = NfcAdapter.getDefaultAdapter(activity);
if (mNfcAdapter == null) { if (mNfcAdapter == null) {
getPreferenceScreen().removePreference(nfc); getPreferenceScreen().removePreference(nfc);
getPreferenceScreen().removePreference(androidBeam);
mNfcEnabler = null; mNfcEnabler = null;
} }

View File

@@ -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);
}
}

View File

@@ -23,6 +23,9 @@ import android.content.IntentFilter;
import android.nfc.NfcAdapter; import android.nfc.NfcAdapter;
import android.preference.CheckBoxPreference; import android.preference.CheckBoxPreference;
import android.preference.Preference; 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 * NfcEnabler is a helper to manage the Nfc on/off checkbox preference. It is
@@ -32,6 +35,7 @@ import android.preference.Preference;
public class NfcEnabler implements Preference.OnPreferenceChangeListener { public class NfcEnabler implements Preference.OnPreferenceChangeListener {
private final Context mContext; private final Context mContext;
private final CheckBoxPreference mCheckbox; private final CheckBoxPreference mCheckbox;
private final PreferenceScreen mAndroidBeam;
private final NfcAdapter mNfcAdapter; private final NfcAdapter mNfcAdapter;
private final IntentFilter mIntentFilter; private final IntentFilter mIntentFilter;
@@ -46,14 +50,17 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
} }
}; };
public NfcEnabler(Context context, CheckBoxPreference checkBoxPreference) { public NfcEnabler(Context context, CheckBoxPreference checkBoxPreference,
PreferenceScreen androidBeam) {
mContext = context; mContext = context;
mCheckbox = checkBoxPreference; mCheckbox = checkBoxPreference;
mAndroidBeam = androidBeam;
mNfcAdapter = NfcAdapter.getDefaultAdapter(context); mNfcAdapter = NfcAdapter.getDefaultAdapter(context);
if (mNfcAdapter == null) { if (mNfcAdapter == null) {
// NFC is not supported // NFC is not supported
mCheckbox.setEnabled(false); mCheckbox.setEnabled(false);
mAndroidBeam.setEnabled(false);
mIntentFilter = null; mIntentFilter = null;
return; return;
} }
@@ -97,18 +104,28 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
case NfcAdapter.STATE_OFF: case NfcAdapter.STATE_OFF:
mCheckbox.setChecked(false); mCheckbox.setChecked(false);
mCheckbox.setEnabled(true); mCheckbox.setEnabled(true);
mAndroidBeam.setEnabled(false);
mAndroidBeam.setSummary(R.string.android_beam_disabled_summary);
break; break;
case NfcAdapter.STATE_ON: case NfcAdapter.STATE_ON:
mCheckbox.setChecked(true); mCheckbox.setChecked(true);
mCheckbox.setEnabled(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; break;
case NfcAdapter.STATE_TURNING_ON: case NfcAdapter.STATE_TURNING_ON:
mCheckbox.setChecked(true); mCheckbox.setChecked(true);
mCheckbox.setEnabled(false); mCheckbox.setEnabled(false);
mAndroidBeam.setEnabled(false);
break; break;
case NfcAdapter.STATE_TURNING_OFF: case NfcAdapter.STATE_TURNING_OFF:
mCheckbox.setChecked(false); mCheckbox.setChecked(false);
mCheckbox.setEnabled(false); mCheckbox.setEnabled(false);
mAndroidBeam.setEnabled(false);
break; break;
} }
} }