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

Commit ad2d1b91 authored by Doris Ling's avatar Doris Ling Committed by Android (Google) Code Review
Browse files

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

parents 2c31aa68 6776da1c
Loading
Loading
Loading
Loading
+0 −16
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@ package com.android.settings.nfc;

import android.content.Context;
import android.nfc.NfcAdapter;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.core.BasePreferenceController;
@@ -26,15 +25,12 @@ import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnPause;
import com.android.settingslib.core.lifecycle.events.OnResume;

import java.util.List;

public class AndroidBeamPreferenceController extends BasePreferenceController
        implements LifecycleObserver, OnResume, OnPause {

    public static final String KEY_ANDROID_BEAM_SETTINGS = "android_beam_settings";
    private final NfcAdapter mNfcAdapter;
    private AndroidBeamEnabler mAndroidBeamEnabler;
    private NfcAirplaneModeObserver mAirplaneModeObserver;

    public AndroidBeamPreferenceController(Context context, String key) {
        super(context, key);
@@ -52,12 +48,6 @@ public class AndroidBeamPreferenceController extends BasePreferenceController
        final RestrictedPreference restrictedPreference =
                (RestrictedPreference) screen.findPreference(getPreferenceKey());
        mAndroidBeamEnabler = new AndroidBeamEnabler(mContext, restrictedPreference);

        // Manually set dependencies for NFC when not toggleable.
        if (!NfcPreferenceController.isToggleableInAirplaneMode(mContext)) {
            mAirplaneModeObserver = new NfcAirplaneModeObserver(mContext, mNfcAdapter,
                    (Preference) restrictedPreference);
        }
    }

    @Override
@@ -70,9 +60,6 @@ public class AndroidBeamPreferenceController extends BasePreferenceController

    @Override
    public void onResume() {
        if (mAirplaneModeObserver != null) {
            mAirplaneModeObserver.register();
        }
        if (mAndroidBeamEnabler != null) {
            mAndroidBeamEnabler.resume();
        }
@@ -80,9 +67,6 @@ public class AndroidBeamPreferenceController extends BasePreferenceController

    @Override
    public void onPause() {
        if (mAirplaneModeObserver != null) {
            mAirplaneModeObserver.unregister();
        }
        if (mAndroidBeamEnabler != null) {
            mAndroidBeamEnabler.pause();
        }
+1 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ import androidx.preference.Preference;
 * preference. It will receive intent and update state to ensure preference show correct state.
 */
public abstract class BaseNfcEnabler {
    private final Context mContext;
    protected final Context mContext;
    protected final NfcAdapter mNfcAdapter;
    private final IntentFilter mIntentFilter;

+6 −5
Original line number Diff line number Diff line
@@ -70,12 +70,13 @@ public class NfcAirplaneModeObserver extends ContentObserver {
        }

        mAirplaneMode = airplaneMode;
        boolean toggleable = mAirplaneMode != 1;
        if (toggleable) {
            mNfcAdapter.enable();
        } else {
        if (mAirplaneMode == 1) {
            // airplane mode is on, need to turn off NFC, and check if user can toggle it
            mNfcAdapter.disable();
            mPreference.setEnabled(NfcPreferenceController.isToggleableInAirplaneMode(mContext));
        } else {
            // airplane mode is off, no restriction
            mPreference.setEnabled(true);
        }
        mPreference.setEnabled(toggleable);
    }
}
+15 −2
Original line number Diff line number Diff line
@@ -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;
    }
}
+13 −6
Original line number Diff line number Diff line
@@ -20,7 +20,7 @@ import android.content.IntentFilter;
import android.nfc.NfcAdapter;
import android.provider.Settings;

import androidx.preference.Preference;
import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;
import androidx.preference.SwitchPreference;

@@ -37,7 +37,8 @@ public class NfcPreferenceController extends TogglePreferenceController
    public static final String KEY_TOGGLE_NFC = "toggle_nfc";
    private final NfcAdapter mNfcAdapter;
    private NfcEnabler mNfcEnabler;
    private NfcAirplaneModeObserver mAirplaneModeObserver;
    @VisibleForTesting
    NfcAirplaneModeObserver mAirplaneModeObserver;

    public NfcPreferenceController(Context context, String key) {
        super(context, key);
@@ -57,10 +58,10 @@ public class NfcPreferenceController extends TogglePreferenceController

        mNfcEnabler = new NfcEnabler(mContext, switchPreference);

        // Manually set dependencies for NFC when not toggleable.
        if (!isToggleableInAirplaneMode(mContext)) {
            mAirplaneModeObserver = new NfcAirplaneModeObserver(mContext,
                    mNfcAdapter, (Preference) switchPreference);
        // Listen to airplane mode updates if NFC should be turned off when airplane mode is on
        if (shouldTurnOffNFCInAirplaneMode(mContext) || isToggleableInAirplaneMode(mContext)) {
            mAirplaneModeObserver =
                    new NfcAirplaneModeObserver(mContext, mNfcAdapter, switchPreference);
        }
    }

@@ -125,6 +126,12 @@ public class NfcPreferenceController extends TogglePreferenceController
        }
    }

    public static boolean shouldTurnOffNFCInAirplaneMode(Context context) {
        final String airplaneModeRadios = Settings.Global.getString(context.getContentResolver(),
                Settings.Global.AIRPLANE_MODE_RADIOS);
        return airplaneModeRadios != null && airplaneModeRadios.contains(Settings.Global.RADIO_NFC);
    }

    public static boolean isToggleableInAirplaneMode(Context context) {
        final String toggleable = Settings.Global.getString(context.getContentResolver(),
                Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS);
Loading