Add support for NFC in airplane mode.
Also update logic in Settings for new async NfcAdapter.enable() and disable(). Change-Id: Ie1e5407498ac7beb5a4e21daec0ada0e8ae9c388
This commit is contained in:
@@ -94,8 +94,7 @@ 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 zeroclick = (PreferenceScreen)
|
PreferenceScreen zeroclick = (PreferenceScreen) findPreference(KEY_ZEROCLICK_SETTINGS);
|
||||||
findPreference(KEY_ZEROCLICK_SETTINGS);
|
|
||||||
|
|
||||||
mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference);
|
mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference);
|
||||||
mNfcEnabler = new NfcEnabler(activity, nfc, zeroclick);
|
mNfcEnabler = new NfcEnabler(activity, nfc, zeroclick);
|
||||||
@@ -113,11 +112,18 @@ public class WirelessSettings extends SettingsPreferenceFragment {
|
|||||||
// No bluetooth-dependent items in the list. Code kept in case one is added later.
|
// No bluetooth-dependent items in the list. Code kept in case one is added later.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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_ZEROCLICK_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(zeroclick);
|
getPreferenceScreen().removePreference(zeroclick);
|
||||||
|
mNfcEnabler = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove Mobile Network Settings if it's a wifi-only device.
|
// Remove Mobile Network Settings if it's a wifi-only device.
|
||||||
@@ -176,18 +182,8 @@ public class WirelessSettings extends SettingsPreferenceFragment {
|
|||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
||||||
mAirplaneModeEnabler.resume();
|
mAirplaneModeEnabler.resume();
|
||||||
|
if (mNfcEnabler != null) {
|
||||||
mNfcEnabler.resume();
|
mNfcEnabler.resume();
|
||||||
|
|
||||||
if (mNfcAdapter != null) {
|
|
||||||
// Update zero-click subtitle
|
|
||||||
Preference zeroClick = getPreferenceScreen().
|
|
||||||
findPreference(KEY_ZEROCLICK_SETTINGS);
|
|
||||||
|
|
||||||
if (mNfcAdapter.zeroClickEnabled()) {
|
|
||||||
zeroClick.setSummary(R.string.zeroclick_on_summary);
|
|
||||||
} else {
|
|
||||||
zeroClick.setSummary(R.string.zeroclick_off_summary);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,8 +192,10 @@ public class WirelessSettings extends SettingsPreferenceFragment {
|
|||||||
super.onPause();
|
super.onPause();
|
||||||
|
|
||||||
mAirplaneModeEnabler.pause();
|
mAirplaneModeEnabler.pause();
|
||||||
|
if (mNfcEnabler != null) {
|
||||||
mNfcEnabler.pause();
|
mNfcEnabler.pause();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
|
@@ -27,6 +27,8 @@ import android.preference.Preference;
|
|||||||
import android.preference.PreferenceScreen;
|
import android.preference.PreferenceScreen;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
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
|
||||||
* turns on/off Nfc and ensures the summary of the preference reflects the
|
* turns on/off Nfc and ensures the summary of the preference reflects the
|
||||||
@@ -46,16 +48,13 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
|
|||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
String action = intent.getAction();
|
String action = intent.getAction();
|
||||||
if (NfcAdapter.ACTION_ADAPTER_STATE_CHANGE.equals(action)) {
|
if (NfcAdapter.ACTION_ADAPTER_STATE_CHANGED.equals(action)) {
|
||||||
handleNfcStateChanged(intent.getBooleanExtra(
|
handleNfcStateChanged(intent.getIntExtra(NfcAdapter.EXTRA_ADAPTER_STATE,
|
||||||
NfcAdapter.EXTRA_NEW_BOOLEAN_STATE,
|
NfcAdapter.STATE_OFF));
|
||||||
false));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private boolean mNfcState;
|
|
||||||
|
|
||||||
public NfcEnabler(Context context, CheckBoxPreference checkBoxPreference,
|
public NfcEnabler(Context context, CheckBoxPreference checkBoxPreference,
|
||||||
PreferenceScreen zeroclick) {
|
PreferenceScreen zeroclick) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
@@ -66,20 +65,20 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
|
|||||||
if (mNfcAdapter == null) {
|
if (mNfcAdapter == null) {
|
||||||
// NFC is not supported
|
// NFC is not supported
|
||||||
mCheckbox.setEnabled(false);
|
mCheckbox.setEnabled(false);
|
||||||
|
mZeroClick.setEnabled(false);
|
||||||
|
mIntentFilter = null;
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
mIntentFilter = new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED);
|
||||||
mIntentFilter = new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGE);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void resume() {
|
public void resume() {
|
||||||
if (mNfcAdapter == null) {
|
if (mNfcAdapter == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
handleNfcStateChanged(mNfcAdapter.getAdapterState());
|
||||||
mContext.registerReceiver(mReceiver, mIntentFilter);
|
mContext.registerReceiver(mReceiver, mIntentFilter);
|
||||||
mCheckbox.setOnPreferenceChangeListener(this);
|
mCheckbox.setOnPreferenceChangeListener(this);
|
||||||
mNfcState = mNfcAdapter.isEnabled();
|
|
||||||
mCheckbox.setChecked(mNfcState);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void pause() {
|
public void pause() {
|
||||||
@@ -96,41 +95,43 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
|
|||||||
final boolean desiredState = (Boolean) value;
|
final boolean desiredState = (Boolean) value;
|
||||||
mCheckbox.setEnabled(false);
|
mCheckbox.setEnabled(false);
|
||||||
|
|
||||||
// Start async update of the NFC adapter state, as the API is
|
|
||||||
// unfortunately blocking...
|
|
||||||
new Thread("toggleNFC") {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
Log.d(TAG, "Setting NFC enabled state to: " + desiredState);
|
|
||||||
boolean success = false;
|
|
||||||
if (desiredState) {
|
if (desiredState) {
|
||||||
success = mNfcAdapter.enable();
|
mNfcAdapter.enable();
|
||||||
} else {
|
} else {
|
||||||
success = mNfcAdapter.disable();
|
mNfcAdapter.disable();
|
||||||
}
|
}
|
||||||
if (success) {
|
|
||||||
Log.d(TAG, "Successfully changed NFC enabled state to " + desiredState);
|
|
||||||
mHandler.post(new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
handleNfcStateChanged(desiredState);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Log.w(TAG, "Error setting NFC enabled state to " + desiredState);
|
|
||||||
mHandler.post(new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
mCheckbox.setEnabled(true);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.start();
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void handleNfcStateChanged(boolean newState) {
|
private void handleNfcStateChanged(int newState) {
|
||||||
mCheckbox.setChecked(newState);
|
switch (newState) {
|
||||||
|
case NfcAdapter.STATE_OFF:
|
||||||
|
mCheckbox.setChecked(false);
|
||||||
mCheckbox.setEnabled(true);
|
mCheckbox.setEnabled(true);
|
||||||
mZeroClick.setEnabled(newState);
|
mZeroClick.setEnabled(false);
|
||||||
|
mZeroClick.setSummary(R.string.zeroclick_off_summary);
|
||||||
|
break;
|
||||||
|
case NfcAdapter.STATE_ON:
|
||||||
|
mCheckbox.setChecked(true);
|
||||||
|
mCheckbox.setEnabled(true);
|
||||||
|
mZeroClick.setEnabled(true);
|
||||||
|
if (mNfcAdapter.isZeroClickEnabled()) {
|
||||||
|
mZeroClick.setSummary(R.string.zeroclick_on_summary);
|
||||||
|
} else {
|
||||||
|
mZeroClick.setSummary(R.string.zeroclick_off_summary);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NfcAdapter.STATE_TURNING_ON:
|
||||||
|
mCheckbox.setChecked(true);
|
||||||
|
mCheckbox.setEnabled(false);
|
||||||
|
mZeroClick.setEnabled(false);
|
||||||
|
break;
|
||||||
|
case NfcAdapter.STATE_TURNING_OFF:
|
||||||
|
mCheckbox.setChecked(false);
|
||||||
|
mCheckbox.setEnabled(false);
|
||||||
|
mZeroClick.setEnabled(false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -63,7 +63,7 @@ public class ZeroClick extends Fragment
|
|||||||
mActionBarSwitch.setOnCheckedChangeListener(this);
|
mActionBarSwitch.setOnCheckedChangeListener(this);
|
||||||
|
|
||||||
mNfcAdapter = NfcAdapter.getDefaultAdapter(getActivity());
|
mNfcAdapter = NfcAdapter.getDefaultAdapter(getActivity());
|
||||||
mActionBarSwitch.setChecked(mNfcAdapter.zeroClickEnabled());
|
mActionBarSwitch.setChecked(mNfcAdapter.isZeroClickEnabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -77,7 +77,7 @@ public class ZeroClick extends Fragment
|
|||||||
private void initView(View view) {
|
private void initView(View view) {
|
||||||
mNfcAdapter = NfcAdapter.getDefaultAdapter(getActivity());
|
mNfcAdapter = NfcAdapter.getDefaultAdapter(getActivity());
|
||||||
mActionBarSwitch.setOnCheckedChangeListener(this);
|
mActionBarSwitch.setOnCheckedChangeListener(this);
|
||||||
mActionBarSwitch.setChecked(mNfcAdapter.zeroClickEnabled());
|
mActionBarSwitch.setChecked(mNfcAdapter.isZeroClickEnabled());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Reference in New Issue
Block a user