Loading src/com/android/settings/WirelessSettings.java +7 −46 Original line number Diff line number Diff line Loading @@ -24,14 +24,11 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.ConnectivityManager; import android.nfc.NfcAdapter; import android.nfc.NfcManager; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; import android.provider.SearchIndexableResource; import android.provider.Settings; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.telephony.TelephonyManager; Loading @@ -46,7 +43,7 @@ import com.android.settings.network.ProxyPreferenceController; import com.android.settings.network.TetherPreferenceController; import com.android.settings.network.VpnPreferenceController; import com.android.settings.network.WifiCallingPreferenceController; import com.android.settings.nfc.NfcEnabler; import com.android.settings.nfc.NfcPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settingslib.RestrictedLockUtils; Loading @@ -64,12 +61,8 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde MobilePlanPreferenceController.MobilePlanPreferenceHost { private static final String TAG = "WirelessSettings"; private static final String KEY_TOGGLE_NFC = "toggle_nfc"; private static final String KEY_WIMAX_SETTINGS = "wimax_settings"; private static final String KEY_ANDROID_BEAM_SETTINGS = "android_beam_settings"; private NfcEnabler mNfcEnabler; private NfcAdapter mNfcAdapter; private UserManager mUm; private AirplaneModePreferenceController mAirplaneModePreferenceController; Loading @@ -80,6 +73,7 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde private WifiCallingPreferenceController mWifiCallingPreferenceController; private ProxyPreferenceController mProxyPreferenceController; private MobilePlanPreferenceController mMobilePlanPreferenceController; private NfcPreferenceController mNfcPreferenceController; /** * Invoked on each preference click in this hierarchy, overrides Loading Loading @@ -159,6 +153,7 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde mNetworkResetPreferenceController = new NetworkResetPreferenceController(activity); mProxyPreferenceController = new ProxyPreferenceController(activity); mMobilePlanPreferenceController = new MobilePlanPreferenceController(activity, this); mNfcPreferenceController = new NfcPreferenceController(activity); mMobilePlanPreferenceController.onCreate(savedInstanceState); Loading @@ -170,12 +165,7 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde mNetworkResetPreferenceController.displayPreference(screen); mProxyPreferenceController.displayPreference(screen); mMobilePlanPreferenceController.displayPreference(screen); SwitchPreference nfc = (SwitchPreference) findPreference(KEY_TOGGLE_NFC); RestrictedPreference androidBeam = (RestrictedPreference) findPreference( KEY_ANDROID_BEAM_SETTINGS); mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam); mNfcPreferenceController.displayPreference(screen); String toggleable = Settings.Global.getString(activity.getContentResolver(), Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS); Loading @@ -195,22 +185,6 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde ps.setDependency(AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE); } } // Manually set dependencies for NFC when not toggleable. if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_NFC)) { findPreference(KEY_TOGGLE_NFC).setDependency( AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE); findPreference(KEY_ANDROID_BEAM_SETTINGS).setDependency( AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE); } // Remove NFC if not available mNfcAdapter = NfcAdapter.getDefaultAdapter(activity); if (mNfcAdapter == null) { getPreferenceScreen().removePreference(nfc); getPreferenceScreen().removePreference(androidBeam); mNfcEnabler = null; } } @Override Loading @@ -218,9 +192,7 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde super.onResume(); mAirplaneModePreferenceController.onResume(); if (mNfcEnabler != null) { mNfcEnabler.resume(); } mNfcPreferenceController.onResume(); } @Override Loading @@ -233,9 +205,7 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde public void onPause() { super.onPause(); mAirplaneModePreferenceController.onPause(); if (mNfcEnabler != null) { mNfcEnabler.pause(); } mNfcPreferenceController.onPause(); } @Override Loading Loading @@ -287,16 +257,7 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde new VpnPreferenceController(context).updateNonIndexableKeys(result); // Remove NFC if not available final NfcManager manager = (NfcManager) context.getSystemService(Context.NFC_SERVICE); if (manager != null) { NfcAdapter adapter = manager.getDefaultAdapter(); if (adapter == null) { result.add(KEY_TOGGLE_NFC); result.add(KEY_ANDROID_BEAM_SETTINGS); } } new NfcPreferenceController(context).updateNonIndexableKeys(result); new MobilePlanPreferenceController(context, null /* MobilePlanClickHandler */) .updateNonIndexableKeys(result); new MobileNetworkPreferenceController(context).updateNonIndexableKeys(result); Loading src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java +8 −1 Original line number Diff line number Diff line Loading @@ -20,8 +20,10 @@ import android.content.Context; import com.android.settings.R; import com.android.settings.core.PreferenceController; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.nfc.NfcPreferenceController; import com.android.settingslib.drawer.CategoryKey; import java.util.ArrayList; import java.util.List; public class ConnectedDeviceDashboardFragment extends DashboardFragment { Loading Loading @@ -50,7 +52,12 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment { @Override protected List<PreferenceController> getPreferenceControllers(Context context) { return null; final NfcPreferenceController nfcPreferenceController = new NfcPreferenceController(context); getLifecycle().addObserver(nfcPreferenceController); final List<PreferenceController> controllers = new ArrayList<>(); controllers.add(nfcPreferenceController); return controllers; } } No newline at end of file src/com/android/settings/nfc/NfcPreferenceController.java 0 → 100644 +172 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 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.content.Context; import android.database.ContentObserver; import android.net.Uri; import android.nfc.NfcAdapter; import android.nfc.NfcManager; import android.os.Handler; import android.provider.Settings; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settings.core.PreferenceController; import com.android.settings.core.lifecycle.LifecycleObserver; import com.android.settings.core.lifecycle.events.OnPause; import com.android.settings.core.lifecycle.events.OnResume; import com.android.settings.network.AirplaneModePreferenceController; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.RestrictedPreference; import java.util.List; public class NfcPreferenceController extends PreferenceController implements LifecycleObserver, OnResume, OnPause { private static final String KEY_TOGGLE_NFC = "toggle_nfc"; private static final String KEY_ANDROID_BEAM_SETTINGS = "android_beam_settings"; private NfcEnabler mNfcEnabler; private NfcAdapter mNfcAdapter; private final Handler mHandler = new Handler(); private int mAirplaneMode; private AirplaneModeObserver mAirplaneModeObserver; private SwitchPreference mNfcPreference; private RestrictedPreference mBeamPreference; public NfcPreferenceController(Context context) { super(context); mNfcAdapter = NfcAdapter.getDefaultAdapter(context); } @Override public void displayPreference(PreferenceScreen screen) { if (!isAvailable()) { removePreference(screen, KEY_TOGGLE_NFC); removePreference(screen, KEY_ANDROID_BEAM_SETTINGS); mNfcEnabler = null; return; } mNfcPreference = (SwitchPreference) screen.findPreference(KEY_TOGGLE_NFC); mBeamPreference = (RestrictedPreference) screen.findPreference( KEY_ANDROID_BEAM_SETTINGS); mNfcEnabler = new NfcEnabler(mContext, mNfcPreference, mBeamPreference); String toggleable = Settings.Global.getString(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS); final boolean useNewIA = FeatureFactory.getFactory(mContext) .getDashboardFeatureProvider(mContext).isEnabled(); // Manually set dependencies for NFC when not toggleable. if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_NFC)) { if (useNewIA) { mAirplaneModeObserver = new AirplaneModeObserver(); updateNfcPreference(); } else { mNfcPreference.setDependency(AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE); mBeamPreference.setDependency(AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE); } } } @Override public void updateNonIndexableKeys(List<String> keys) { final NfcManager manager = (NfcManager) mContext.getSystemService(Context.NFC_SERVICE); if (manager != null) { NfcAdapter adapter = manager.getDefaultAdapter(); if (adapter == null) { keys.add(KEY_TOGGLE_NFC); keys.add(KEY_ANDROID_BEAM_SETTINGS); } } } @Override public boolean handlePreferenceTreeClick(Preference preference) { return false; } @Override protected boolean isAvailable() { return mNfcAdapter != null; } @Override protected String getPreferenceKey() { return null; } public void onResume() { if (mAirplaneModeObserver != null) { mAirplaneModeObserver.register(); } if (mNfcEnabler != null) { mNfcEnabler.resume(); } } @Override public void onPause() { if (mAirplaneModeObserver != null) { mAirplaneModeObserver.unregister(); } if (mNfcEnabler != null) { mNfcEnabler.pause(); } } private void updateNfcPreference() { final int airplaneMode = Settings.Global.getInt( mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, mAirplaneMode); if (airplaneMode == mAirplaneMode) { return; } mAirplaneMode = airplaneMode; boolean toggleable = mAirplaneMode != 1; if (toggleable) { mNfcAdapter.enable(); } else { mNfcAdapter.disable(); } mNfcPreference.setEnabled(toggleable); mBeamPreference.setEnabled(toggleable); } private final class AirplaneModeObserver extends ContentObserver { private final Uri AIRPLANE_MODE_URI = Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON); private AirplaneModeObserver() { super(mHandler); } public void register() { mContext.getContentResolver().registerContentObserver(AIRPLANE_MODE_URI, false, this); } public void unregister() { mContext.getContentResolver().unregisterContentObserver(this); } @Override public void onChange(boolean selfChange, Uri uri) { super.onChange(selfChange, uri); updateNfcPreference(); } } } Loading
src/com/android/settings/WirelessSettings.java +7 −46 Original line number Diff line number Diff line Loading @@ -24,14 +24,11 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.net.ConnectivityManager; import android.nfc.NfcAdapter; import android.nfc.NfcManager; import android.os.Bundle; import android.os.UserHandle; import android.os.UserManager; import android.provider.SearchIndexableResource; import android.provider.Settings; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import android.telephony.TelephonyManager; Loading @@ -46,7 +43,7 @@ import com.android.settings.network.ProxyPreferenceController; import com.android.settings.network.TetherPreferenceController; import com.android.settings.network.VpnPreferenceController; import com.android.settings.network.WifiCallingPreferenceController; import com.android.settings.nfc.NfcEnabler; import com.android.settings.nfc.NfcPreferenceController; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settingslib.RestrictedLockUtils; Loading @@ -64,12 +61,8 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde MobilePlanPreferenceController.MobilePlanPreferenceHost { private static final String TAG = "WirelessSettings"; private static final String KEY_TOGGLE_NFC = "toggle_nfc"; private static final String KEY_WIMAX_SETTINGS = "wimax_settings"; private static final String KEY_ANDROID_BEAM_SETTINGS = "android_beam_settings"; private NfcEnabler mNfcEnabler; private NfcAdapter mNfcAdapter; private UserManager mUm; private AirplaneModePreferenceController mAirplaneModePreferenceController; Loading @@ -80,6 +73,7 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde private WifiCallingPreferenceController mWifiCallingPreferenceController; private ProxyPreferenceController mProxyPreferenceController; private MobilePlanPreferenceController mMobilePlanPreferenceController; private NfcPreferenceController mNfcPreferenceController; /** * Invoked on each preference click in this hierarchy, overrides Loading Loading @@ -159,6 +153,7 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde mNetworkResetPreferenceController = new NetworkResetPreferenceController(activity); mProxyPreferenceController = new ProxyPreferenceController(activity); mMobilePlanPreferenceController = new MobilePlanPreferenceController(activity, this); mNfcPreferenceController = new NfcPreferenceController(activity); mMobilePlanPreferenceController.onCreate(savedInstanceState); Loading @@ -170,12 +165,7 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde mNetworkResetPreferenceController.displayPreference(screen); mProxyPreferenceController.displayPreference(screen); mMobilePlanPreferenceController.displayPreference(screen); SwitchPreference nfc = (SwitchPreference) findPreference(KEY_TOGGLE_NFC); RestrictedPreference androidBeam = (RestrictedPreference) findPreference( KEY_ANDROID_BEAM_SETTINGS); mNfcEnabler = new NfcEnabler(activity, nfc, androidBeam); mNfcPreferenceController.displayPreference(screen); String toggleable = Settings.Global.getString(activity.getContentResolver(), Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS); Loading @@ -195,22 +185,6 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde ps.setDependency(AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE); } } // Manually set dependencies for NFC when not toggleable. if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_NFC)) { findPreference(KEY_TOGGLE_NFC).setDependency( AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE); findPreference(KEY_ANDROID_BEAM_SETTINGS).setDependency( AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE); } // Remove NFC if not available mNfcAdapter = NfcAdapter.getDefaultAdapter(activity); if (mNfcAdapter == null) { getPreferenceScreen().removePreference(nfc); getPreferenceScreen().removePreference(androidBeam); mNfcEnabler = null; } } @Override Loading @@ -218,9 +192,7 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde super.onResume(); mAirplaneModePreferenceController.onResume(); if (mNfcEnabler != null) { mNfcEnabler.resume(); } mNfcPreferenceController.onResume(); } @Override Loading @@ -233,9 +205,7 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde public void onPause() { super.onPause(); mAirplaneModePreferenceController.onPause(); if (mNfcEnabler != null) { mNfcEnabler.pause(); } mNfcPreferenceController.onPause(); } @Override Loading Loading @@ -287,16 +257,7 @@ public class WirelessSettings extends SettingsPreferenceFragment implements Inde new VpnPreferenceController(context).updateNonIndexableKeys(result); // Remove NFC if not available final NfcManager manager = (NfcManager) context.getSystemService(Context.NFC_SERVICE); if (manager != null) { NfcAdapter adapter = manager.getDefaultAdapter(); if (adapter == null) { result.add(KEY_TOGGLE_NFC); result.add(KEY_ANDROID_BEAM_SETTINGS); } } new NfcPreferenceController(context).updateNonIndexableKeys(result); new MobilePlanPreferenceController(context, null /* MobilePlanClickHandler */) .updateNonIndexableKeys(result); new MobileNetworkPreferenceController(context).updateNonIndexableKeys(result); Loading
src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java +8 −1 Original line number Diff line number Diff line Loading @@ -20,8 +20,10 @@ import android.content.Context; import com.android.settings.R; import com.android.settings.core.PreferenceController; import com.android.settings.dashboard.DashboardFragment; import com.android.settings.nfc.NfcPreferenceController; import com.android.settingslib.drawer.CategoryKey; import java.util.ArrayList; import java.util.List; public class ConnectedDeviceDashboardFragment extends DashboardFragment { Loading Loading @@ -50,7 +52,12 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment { @Override protected List<PreferenceController> getPreferenceControllers(Context context) { return null; final NfcPreferenceController nfcPreferenceController = new NfcPreferenceController(context); getLifecycle().addObserver(nfcPreferenceController); final List<PreferenceController> controllers = new ArrayList<>(); controllers.add(nfcPreferenceController); return controllers; } } No newline at end of file
src/com/android/settings/nfc/NfcPreferenceController.java 0 → 100644 +172 −0 Original line number Diff line number Diff line /* * Copyright (C) 2016 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.content.Context; import android.database.ContentObserver; import android.net.Uri; import android.nfc.NfcAdapter; import android.nfc.NfcManager; import android.os.Handler; import android.provider.Settings; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settings.core.PreferenceController; import com.android.settings.core.lifecycle.LifecycleObserver; import com.android.settings.core.lifecycle.events.OnPause; import com.android.settings.core.lifecycle.events.OnResume; import com.android.settings.network.AirplaneModePreferenceController; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.RestrictedPreference; import java.util.List; public class NfcPreferenceController extends PreferenceController implements LifecycleObserver, OnResume, OnPause { private static final String KEY_TOGGLE_NFC = "toggle_nfc"; private static final String KEY_ANDROID_BEAM_SETTINGS = "android_beam_settings"; private NfcEnabler mNfcEnabler; private NfcAdapter mNfcAdapter; private final Handler mHandler = new Handler(); private int mAirplaneMode; private AirplaneModeObserver mAirplaneModeObserver; private SwitchPreference mNfcPreference; private RestrictedPreference mBeamPreference; public NfcPreferenceController(Context context) { super(context); mNfcAdapter = NfcAdapter.getDefaultAdapter(context); } @Override public void displayPreference(PreferenceScreen screen) { if (!isAvailable()) { removePreference(screen, KEY_TOGGLE_NFC); removePreference(screen, KEY_ANDROID_BEAM_SETTINGS); mNfcEnabler = null; return; } mNfcPreference = (SwitchPreference) screen.findPreference(KEY_TOGGLE_NFC); mBeamPreference = (RestrictedPreference) screen.findPreference( KEY_ANDROID_BEAM_SETTINGS); mNfcEnabler = new NfcEnabler(mContext, mNfcPreference, mBeamPreference); String toggleable = Settings.Global.getString(mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_TOGGLEABLE_RADIOS); final boolean useNewIA = FeatureFactory.getFactory(mContext) .getDashboardFeatureProvider(mContext).isEnabled(); // Manually set dependencies for NFC when not toggleable. if (toggleable == null || !toggleable.contains(Settings.Global.RADIO_NFC)) { if (useNewIA) { mAirplaneModeObserver = new AirplaneModeObserver(); updateNfcPreference(); } else { mNfcPreference.setDependency(AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE); mBeamPreference.setDependency(AirplaneModePreferenceController.KEY_TOGGLE_AIRPLANE); } } } @Override public void updateNonIndexableKeys(List<String> keys) { final NfcManager manager = (NfcManager) mContext.getSystemService(Context.NFC_SERVICE); if (manager != null) { NfcAdapter adapter = manager.getDefaultAdapter(); if (adapter == null) { keys.add(KEY_TOGGLE_NFC); keys.add(KEY_ANDROID_BEAM_SETTINGS); } } } @Override public boolean handlePreferenceTreeClick(Preference preference) { return false; } @Override protected boolean isAvailable() { return mNfcAdapter != null; } @Override protected String getPreferenceKey() { return null; } public void onResume() { if (mAirplaneModeObserver != null) { mAirplaneModeObserver.register(); } if (mNfcEnabler != null) { mNfcEnabler.resume(); } } @Override public void onPause() { if (mAirplaneModeObserver != null) { mAirplaneModeObserver.unregister(); } if (mNfcEnabler != null) { mNfcEnabler.pause(); } } private void updateNfcPreference() { final int airplaneMode = Settings.Global.getInt( mContext.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, mAirplaneMode); if (airplaneMode == mAirplaneMode) { return; } mAirplaneMode = airplaneMode; boolean toggleable = mAirplaneMode != 1; if (toggleable) { mNfcAdapter.enable(); } else { mNfcAdapter.disable(); } mNfcPreference.setEnabled(toggleable); mBeamPreference.setEnabled(toggleable); } private final class AirplaneModeObserver extends ContentObserver { private final Uri AIRPLANE_MODE_URI = Settings.Global.getUriFor(Settings.Global.AIRPLANE_MODE_ON); private AirplaneModeObserver() { super(mHandler); } public void register() { mContext.getContentResolver().registerContentObserver(AIRPLANE_MODE_URI, false, this); } public void unregister() { mContext.getContentResolver().unregisterContentObserver(this); } @Override public void onChange(boolean selfChange, Uri uri) { super.onChange(selfChange, uri); updateNfcPreference(); } } }