3636import android .net .ConnectivityManager ;
3737import android .net .Network ;
3838import android .net .NetworkCapabilities ;
39+ import android .nfc .NfcAdapter ;
3940import android .os .Handler ;
4041import android .os .Looper ;
4142import android .os .Process ;
@@ -135,6 +136,7 @@ public class PhoneStatusBarPolicy
135136 private final String mSlotScreenRecord ;
136137 private final String mSlotConnectedDisplay ;
137138 private final String mSlotFirewall ;
139+ private final String mSlotNfc ;
138140 private final int mDisplayId ;
139141 private final SharedPreferences mSharedPreferences ;
140142 private final DateFormatUtil mDateFormatUtil ;
@@ -183,6 +185,8 @@ public class PhoneStatusBarPolicy
183185 private BluetoothController mBluetooth ;
184186 private AlarmClockInfo mNextAlarm ;
185187
188+ private NfcAdapter mAdapter ;
189+
186190 @ Inject
187191 public PhoneStatusBarPolicy (Context context , StatusBarIconController iconController ,
188192 CommandQueue commandQueue , BroadcastDispatcher broadcastDispatcher ,
@@ -261,6 +265,7 @@ public PhoneStatusBarPolicy(Context context, StatusBarIconController iconControl
261265 mSlotScreenRecord = resources .getString (
262266 com .android .internal .R .string .status_bar_screen_record );
263267 mSlotFirewall = resources .getString (R .string .status_bar_firewall_slot );
268+ mSlotNfc = resources .getString (com .android .internal .R .string .status_bar_nfc );
264269
265270 mDisplayId = displayId ;
266271 mSharedPreferences = sharedPreferences ;
@@ -280,6 +285,7 @@ public void init() {
280285 filter .addAction (Intent .ACTION_PROFILE_REMOVED );
281286 filter .addAction (Intent .ACTION_PROFILE_ACCESSIBLE );
282287 filter .addAction (Intent .ACTION_PROFILE_INACCESSIBLE );
288+ filter .addAction (NfcAdapter .ACTION_ADAPTER_STATE_CHANGED );
283289 mBroadcastDispatcher .registerReceiverWithHandler (mIntentReceiver , filter , mHandler );
284290 Observer <Integer > observer = ringer -> mHandler .post (this ::updateVolumeZen );
285291
@@ -369,6 +375,12 @@ public void init() {
369375 mIconController .setIcon (mSlotFirewall , R .drawable .stat_sys_firewall , null );
370376 mIconController .setIconVisibility (mSlotFirewall , mFirewallVisible );
371377
378+ mIconController .setIcon (mSlotNfc , R .drawable .stat_sys_nfc ,
379+ mResources .getString (R .string .status_bar_nfc ));
380+
381+ mIconController .setIconVisibility (mSlotNfc , false );
382+ updateNfc ();
383+
372384 mRotationLockController .addCallback (this );
373385 mBluetooth .addCallback (this );
374386 mProvisionedController .addCallback (this );
@@ -462,6 +474,17 @@ private String buildAlarmContentDescription() {
462474 return mResources .getString (R .string .accessibility_quick_settings_alarm , dateString );
463475 }
464476
477+ private NfcAdapter getAdapter () {
478+ if (mAdapter == null ) {
479+ mAdapter = NfcAdapter .getDefaultAdapter (mContext );
480+ }
481+ return mAdapter ;
482+ }
483+
484+ private final void updateNfc () {
485+ mIconController .setIconVisibility (mSlotNfc , getAdapter () != null && getAdapter ().isEnabled ());
486+ }
487+
465488 private void updateVolumeZen () {
466489 int zen = mZenController .getZen ();
467490 if (!ModesUiIcons .isEnabled ()) {
@@ -926,6 +949,9 @@ public void onReceive(Context context, Intent intent) {
926949 case AudioManager .ACTION_HEADSET_PLUG :
927950 updateHeadsetPlug (intent );
928951 break ;
952+ case NfcAdapter .ACTION_ADAPTER_STATE_CHANGED :
953+ updateNfc ();
954+ break ;
929955 }
930956 }
931957 };
0 commit comments