Do not turn on NFC automatically when airplane mode is off.

- besides checking the value for AIRPLANE_MODE_TOGGLEABLE_RADIOS, also
check the value for AIRPLANE_MODE_RADIOS to determine if we should turn
off NFC when airplane mode is on.
- when user turns off airplane mode, only re-enable the NFC preference
and do not enable NFC by default.
- remove listening to airplane mode directly from the android beam
preference controller, as it is already listening to Nfc state, which
handles the beam state already.

Change-Id: Id41fef15fb2de873729d20d7f53b1a88b164cf95
Fixes: 80217047
Test: make RunSettingsRoboTests
This commit is contained in:
Doris Ling
2018-05-31 14:56:28 -07:00
parent 7a1d3d9f56
commit 6776da1cad
8 changed files with 235 additions and 50 deletions

View File

@@ -18,8 +18,10 @@ package com.android.settings.nfc;
import android.content.Context;
import android.nfc.NfcAdapter;
import androidx.preference.SwitchPreference;
import android.provider.Settings;
import androidx.annotation.VisibleForTesting;
import androidx.preference.SwitchPreference;
/**
* NfcEnabler is a helper to manage the Nfc on/off checkbox preference. It turns on/off Nfc
@@ -38,7 +40,7 @@ public class NfcEnabler extends BaseNfcEnabler {
switch (newState) {
case NfcAdapter.STATE_OFF:
mPreference.setChecked(false);
mPreference.setEnabled(true);
mPreference.setEnabled(isToggleable());
break;
case NfcAdapter.STATE_ON:
mPreference.setChecked(true);
@@ -54,4 +56,15 @@ public class NfcEnabler extends BaseNfcEnabler {
break;
}
}
@VisibleForTesting
boolean isToggleable() {
if (NfcPreferenceController.isToggleableInAirplaneMode(mContext)
|| !NfcPreferenceController.shouldTurnOffNFCInAirplaneMode(mContext)) {
return true;
}
final int airplaneMode = Settings.Global.getInt(
mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0);
return airplaneMode != 1;
}
}