package com.android.systemui.statusbar.toggles; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.nfc.NfcAdapter; import android.os.AsyncTask; import android.provider.Settings; import android.util.Log; import com.android.systemui.R; public class NFCToggle extends Toggle { private static final String TAG = "StatusBar.NFCToggle"; private boolean mNfcEnabled; private NfcAdapter mNfcAdapter; public NFCToggle(Context context) { super(context); IntentFilter filter = new IntentFilter(); filter.addAction(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED); context.registerReceiver(mBroadcastReceiver, filter); setLabel(R.string.toggle_nfc); updateState(); } private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { mNfcAdapter = NfcAdapter.getDefaultAdapter(context); if (NfcAdapter.ACTION_ADAPTER_STATE_CHANGED.equals(intent.getAction())) { final boolean enabled = (intent.getIntExtra(NfcAdapter.EXTRA_ADAPTER_STATE, NfcAdapter.STATE_OFF) == NfcAdapter.STATE_ON); mNfcEnabled = enabled; updateState(); } } }; private boolean getNfcState() { if (mNfcAdapter == null) { Log.d(TAG, "NFC service not running."); return false; } else { return mNfcAdapter.isEnabled(); } } private void setNfcState(final boolean desiredState) { if (mNfcAdapter == null) { Log.d(TAG, "NFC service not running."); } else { AsyncTask.execute(new Runnable() { public void run() { if (desiredState) { mNfcAdapter.enable(); } else { mNfcAdapter.disable(); } return; } }); } } @Override protected boolean updateInternalToggleState() { mNfcEnabled = getNfcState(); mToggle.setChecked(mNfcEnabled); if (mToggle.isChecked()) setIcon(R.drawable.toggle_nfc); else setIcon(R.drawable.toggle_nfc_off); return mToggle.isChecked(); } @Override protected void onCheckChanged(boolean checked) { if (checked != mNfcEnabled) { mNfcEnabled = checked; setNfcState(mNfcEnabled); } // don't update immediately, NfcAdapter's broadcast will do it // updateState(); } @Override protected boolean onLongPress() { if (mContext != null) { Intent intent = new Intent( android.provider.Settings.ACTION_WIRELESS_SETTINGS); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mContext.startActivity(intent); } return true; } }