Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1a787cf3 authored by Nick Pelly's avatar Nick Pelly Committed by Android (Google) Code Review
Browse files

Merge "Add support for NFC in airplane mode."

parents c8a03c9a 9894d4ad
Loading
Loading
Loading
Loading
+13 −15
Original line number Diff line number Diff line
@@ -94,8 +94,7 @@ public class WirelessSettings extends SettingsPreferenceFragment {
        final Activity activity = getActivity();
        mAirplaneModePreference = (CheckBoxPreference) findPreference(KEY_TOGGLE_AIRPLANE);
        CheckBoxPreference nfc = (CheckBoxPreference) findPreference(KEY_TOGGLE_NFC);
        PreferenceScreen zeroclick = (PreferenceScreen)
                findPreference(KEY_ZEROCLICK_SETTINGS);
        PreferenceScreen zeroclick = (PreferenceScreen) findPreference(KEY_ZEROCLICK_SETTINGS);

        mAirplaneModeEnabler = new AirplaneModeEnabler(activity, mAirplaneModePreference);
        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.
        }

        // 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
        mNfcAdapter = NfcAdapter.getDefaultAdapter(activity);
        if (mNfcAdapter == null) {
            getPreferenceScreen().removePreference(nfc);
            getPreferenceScreen().removePreference(zeroclick);
            mNfcEnabler = null;
        }

        // Remove Mobile Network Settings if it's a wifi-only device.
@@ -176,18 +182,8 @@ public class WirelessSettings extends SettingsPreferenceFragment {
        super.onResume();

        mAirplaneModeEnabler.resume();
        if (mNfcEnabler != null) {
            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();

        mAirplaneModeEnabler.pause();
        if (mNfcEnabler != null) {
            mNfcEnabler.pause();
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
+45 −44
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ import android.preference.Preference;
import android.preference.PreferenceScreen;
import android.util.Log;

import com.android.settings.R;

/**
 * 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
@@ -46,16 +48,13 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (NfcAdapter.ACTION_ADAPTER_STATE_CHANGE.equals(action)) {
                handleNfcStateChanged(intent.getBooleanExtra(
                    NfcAdapter.EXTRA_NEW_BOOLEAN_STATE,
                    false));
            if (NfcAdapter.ACTION_ADAPTER_STATE_CHANGED.equals(action)) {
                handleNfcStateChanged(intent.getIntExtra(NfcAdapter.EXTRA_ADAPTER_STATE,
                        NfcAdapter.STATE_OFF));
            }
        }
    };

    private boolean mNfcState;

    public NfcEnabler(Context context, CheckBoxPreference checkBoxPreference,
            PreferenceScreen zeroclick) {
        mContext = context;
@@ -66,20 +65,20 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
        if (mNfcAdapter == null) {
            // NFC is not supported
            mCheckbox.setEnabled(false);
            mZeroClick.setEnabled(false);
            mIntentFilter = null;
            return;
        }

        mIntentFilter = new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGE);

        mIntentFilter = new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED);
    }

    public void resume() {
        if (mNfcAdapter == null) {
            return;
        }
        handleNfcStateChanged(mNfcAdapter.getAdapterState());
        mContext.registerReceiver(mReceiver, mIntentFilter);
        mCheckbox.setOnPreferenceChangeListener(this);
        mNfcState = mNfcAdapter.isEnabled();
        mCheckbox.setChecked(mNfcState);
    }

    public void pause() {
@@ -96,41 +95,43 @@ public class NfcEnabler implements Preference.OnPreferenceChangeListener {
        final boolean desiredState = (Boolean) value;
        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) {
                    success = mNfcAdapter.enable();
            mNfcAdapter.enable();
        } else {
                    success = 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);
            mNfcAdapter.disable();
        }
                        });
                }
            }
        }.start();

        return false;
    }

    private void handleNfcStateChanged(boolean newState) {
        mCheckbox.setChecked(newState);
    private void handleNfcStateChanged(int newState) {
        switch (newState) {
        case NfcAdapter.STATE_OFF:
            mCheckbox.setChecked(false);
            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;
        }
    }
}
+2 −2
Original line number Diff line number Diff line
@@ -63,7 +63,7 @@ public class ZeroClick extends Fragment
        mActionBarSwitch.setOnCheckedChangeListener(this);

        mNfcAdapter = NfcAdapter.getDefaultAdapter(getActivity());
        mActionBarSwitch.setChecked(mNfcAdapter.zeroClickEnabled());
        mActionBarSwitch.setChecked(mNfcAdapter.isZeroClickEnabled());
    }

    @Override
@@ -77,7 +77,7 @@ public class ZeroClick extends Fragment
    private void initView(View view) {
        mNfcAdapter = NfcAdapter.getDefaultAdapter(getActivity());
        mActionBarSwitch.setOnCheckedChangeListener(this);
        mActionBarSwitch.setChecked(mNfcAdapter.zeroClickEnabled());
        mActionBarSwitch.setChecked(mNfcAdapter.isZeroClickEnabled());
    }

    @Override