diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_nfc_off.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_nfc_off.png new file mode 100644 index 0000000000000..9f5ad63fc4ba6 Binary files /dev/null and b/packages/SystemUI/res/drawable-hdpi/ic_qs_nfc_off.png differ diff --git a/packages/SystemUI/res/drawable-hdpi/ic_qs_nfc_on.png b/packages/SystemUI/res/drawable-hdpi/ic_qs_nfc_on.png new file mode 100644 index 0000000000000..1ff664f610340 Binary files /dev/null and b/packages/SystemUI/res/drawable-hdpi/ic_qs_nfc_on.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_nfc_off.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_nfc_off.png new file mode 100644 index 0000000000000..0e2bea8fe1396 Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/ic_qs_nfc_off.png differ diff --git a/packages/SystemUI/res/drawable-mdpi/ic_qs_nfc_on.png b/packages/SystemUI/res/drawable-mdpi/ic_qs_nfc_on.png new file mode 100644 index 0000000000000..e728ab18bcb06 Binary files /dev/null and b/packages/SystemUI/res/drawable-mdpi/ic_qs_nfc_on.png differ diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_nfc_off.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_nfc_off.png new file mode 100644 index 0000000000000..d660b8780e988 Binary files /dev/null and b/packages/SystemUI/res/drawable-xhdpi/ic_qs_nfc_off.png differ diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_qs_nfc_on.png b/packages/SystemUI/res/drawable-xhdpi/ic_qs_nfc_on.png new file mode 100644 index 0000000000000..fc1093c3814ee Binary files /dev/null and b/packages/SystemUI/res/drawable-xhdpi/ic_qs_nfc_on.png differ diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index eca4097f518cd..1eb630a055192 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -542,6 +542,7 @@ Report bug Sync Torch + NFC diff --git a/packages/SystemUI/src/com/android/systemui/quicksettings/NfcTile.java b/packages/SystemUI/src/com/android/systemui/quicksettings/NfcTile.java new file mode 100644 index 0000000000000..0d8336a9b969a --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/quicksettings/NfcTile.java @@ -0,0 +1,103 @@ +package com.android.systemui.quicksettings; + +import android.content.Context; +import android.content.Intent; +import android.nfc.NfcAdapter; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; + +import com.android.systemui.R; +import com.android.systemui.statusbar.phone.QuickSettingsContainerView; +import com.android.systemui.statusbar.phone.QuickSettingsController; + + +public class NfcTile extends QuickSettingsTile { + + private static String TAG = "NfcTile"; + private static NfcAdapter mNfcAdapter; + private static final int NFC_ADAPTER_UNKNOWN = -100; + + public NfcTile(Context context, LayoutInflater inflater, + QuickSettingsContainerView container, + QuickSettingsController qsc) { + super(context, inflater, container, qsc); + + setState(NFC_ADAPTER_UNKNOWN); + + mOnClick = new View.OnClickListener() { + @Override + public void onClick(View v) { + toggleState(); + applyNfcChanges(); + } + }; + + mOnLongClick = new View.OnLongClickListener() { + @Override + public boolean onLongClick(View v) { + Intent intent = new Intent("android.settings.NFC_SETTINGS"); + intent.addCategory(Intent.CATEGORY_DEFAULT); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + startSettingsActivity(intent); + return true; + } + }; + + qsc.registerAction(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED, this); + } + + @Override + public void onReceive(Context context, Intent intent) { + applyNfcChanges(); + } + + private void applyNfcChanges() { + updateTileState(); + updateQuickSettings(); + } + + protected void toggleState() { + int state = getNfcState(); + switch (state) { + case NfcAdapter.STATE_TURNING_ON: + case NfcAdapter.STATE_ON: + mNfcAdapter.disable(); + break; + case NfcAdapter.STATE_TURNING_OFF: + case NfcAdapter.STATE_OFF: + mNfcAdapter.enable(); + break; + } + } + + private void updateTileState() { + // Get the initial label + mLabel = mContext.getString(R.string.quick_settings_nfc); + setState(getNfcState()); + } + + private void setState(int state) { + switch (state) { + case NfcAdapter.STATE_TURNING_ON: + case NfcAdapter.STATE_ON: + mDrawable = R.drawable.ic_qs_nfc_on; + break; + case NfcAdapter.STATE_TURNING_OFF: + case NfcAdapter.STATE_OFF: + default: + mDrawable = R.drawable.ic_qs_nfc_off; + mLabel += " " + mContext.getString(R.string.quick_settings_label_disabled); + break; + } + } + + private int getNfcState() { + if (mNfcAdapter != null || (mNfcAdapter = NfcAdapter.getDefaultAdapter(mContext)) != null) { + return mNfcAdapter.getAdapterState(); + } else { + Log.d(TAG, "No NFC adapter available"); + return NFC_ADAPTER_UNKNOWN; + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsController.java index e505bf3d7cfa4..c8739f4c0f26a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickSettingsController.java @@ -28,6 +28,7 @@ import android.content.pm.PackageManager; import android.database.ContentObserver; import android.net.Uri; +import android.nfc.NfcAdapter; import android.os.Handler; import android.provider.Settings; import android.util.Log; @@ -41,6 +42,7 @@ import com.android.systemui.quicksettings.BluetoothTile; import com.android.systemui.quicksettings.BrightnessTile; import com.android.systemui.quicksettings.BugReportTile; +import com.android.systemui.quicksettings.NfcTile; import com.android.systemui.quicksettings.TorchTile; import com.android.systemui.quicksettings.GPSTile; import com.android.systemui.quicksettings.InputMethodTile; @@ -98,6 +100,7 @@ public class QuickSettingsController { public static final String TILE_LTE = "toggleLte"; public static final String TILE_WIMAX = "toggleWimax"; public static final String TILE_PROFILE = "toggleProfile"; + public static final String TILE_NFC = "toggleNfc"; private static final String TILE_DELIMITER = "|"; private static final String TILES_DEFAULT = TILE_USER @@ -145,6 +148,7 @@ public class QuickSettingsController { public static final int WIFIAP_TILE = 20; public static final int PROFILE_TILE = 21; public static final int SYNC_TILE = 22; + public static final int NFC_TILE = 23; public static final int USER_TILE = 99; private InputMethodTile IMETile; @@ -220,6 +224,10 @@ void loadTiles() { if (systemProfilesEnabled(resolver)) { mQuickSettings.add(PROFILE_TILE); } + } else if (tile.equals(TILE_NFC)) { + // User cannot add the NFC tile if the device does not support it + // No need to check again here + mQuickSettings.add(NFC_TILE); } else if (tile.equals(TILE_WIMAX)) { // Not available yet } else if (tile.equals(TILE_LTE)) { @@ -447,6 +455,10 @@ void addQuickSettings(LayoutInflater inflater){ qs = new SyncTile(mContext, inflater, (QuickSettingsContainerView) mContainerView, this); break; + case NFC_TILE: + qs = new NfcTile(mContext, inflater, + (QuickSettingsContainerView) mContainerView, this); + break; } if (qs != null) { qs.setupQuickSettingsTile();