SystemUI: Add NFC tile

This patch adds a tile for QuickSettings
which controls the setting of NFC.

The drawable is from material.io.

Test: Enable and disable NFC using tile

Change-Id: I7dfaf3a4dca0c01d24be397e43ab131eb9885f62
Signed-off-by: Anas Karbila <anaskarbila@aospa.co>
Signed-off-by: Alex Naidis <alex.naidis@linux.com>
This commit is contained in:
Anas Karbila
2016-12-11 00:55:02 +01:00
committed by Alex Naidis
parent c20518139a
commit f7648f4483
6 changed files with 211 additions and 0 deletions

View File

@@ -0,0 +1,31 @@
<!--
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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M4 20h16V4H4v16z" />
<path
android:fillColor="#4DFFFFFF"
android:pathData="M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0
18H4V4h16v16zM18 6h-5c-1.1 0-2 .9-2 2v2.28c-.6 .35 -1 .98-1 1.72 0 1.1 .9 2 2
2s2-.9 2-2c0-.74-.4-1.38-1-1.72V8h3v8H8V8h2V6H6v12h12V6z" />
<path
android:pathData="M0 0h24v24H0z" />
</vector>

View File

@@ -0,0 +1,31 @@
<!--
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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M4 20h16V4H4v16z" />
<path
android:fillColor="#FFFFFFFF"
android:pathData="M20 2H4c-1.1 0-2 .9-2 2v16c0 1.1 .9 2 2 2h16c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zm0
18H4V4h16v16zM18 6h-5c-1.1 0-2 .9-2 2v2.28c-.6 .35 -1 .98-1 1.72 0 1.1 .9 2 2
2s2-.9 2-2c0-.74-.4-1.38-1-1.72V8h3v8H8V8h2V6H6v12h12V6z" />
<path
android:pathData="M0 0h24v24H0z" />
</vector>

View File

@@ -761,6 +761,12 @@
<string name="quick_settings_night_display_summary_on">Night Light on, tap to turn off</string>
<!-- QuickSettings: Label for the toggle to activate Night display when it's off (renamed "Night Light" with title caps). [CHAR LIMIT=NONE] -->
<string name="quick_settings_night_display_summary_off">Night Light off, tap to turn on</string>
<!-- QuickSettings: NFC tile [CHAR LIMIT=NONE] -->
<string name="quick_settings_nfc_label">NFC</string>
<!-- QuickSettings: NFC (off) [CHAR LIMIT=NONE] -->
<string name="quick_settings_nfc_off">NFC is disabled</string>
<!-- QuickSettings: NFC (on) [CHAR LIMIT=NONE] -->
<string name="quick_settings_nfc_on">NFC is enabled</string>
<!-- Recents: The empty recents string. [CHAR LIMIT=NONE] -->
<string name="recents_empty_message">No recent items</string>

View File

@@ -0,0 +1,136 @@
/*
* Copyright (c) 2016, The Android Open Source Project
* Contributed by the Paranoid Android 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.systemui.qs.tiles;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.nfc.NfcAdapter;
import android.provider.Settings;
import android.widget.Switch;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.systemui.R;
import com.android.systemui.qs.QSTile;
/** Quick settings tile: Enable/Disable NFC **/
public class NfcTile extends QSTile<QSTile.BooleanState> {
private NfcAdapter mAdapter;
private boolean mListening;
public NfcTile(Host host) {
super(host);
}
@Override
public BooleanState newTileState() {
return new BooleanState();
}
@Override
public void setListening(boolean listening) {
mListening = listening;
if (mListening) {
mContext.registerReceiver(mNfcReceiver,
new IntentFilter(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED));
if (mAdapter == null) {
try {
mAdapter = NfcAdapter.getNfcAdapter(mContext);
} catch (UnsupportedOperationException e) {
mAdapter = null;
}
}
} else {
mContext.unregisterReceiver(mNfcReceiver);
}
}
@Override
public boolean isAvailable() {
return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC);
}
@Override
protected void handleUserSwitch(int newUserId) {
}
@Override
public Intent getLongClickIntent() {
return new Intent(Settings.ACTION_NFC_SETTINGS);
}
@Override
protected void handleClick() {
if (mAdapter == null) return;
MetricsLogger.action(mContext, getMetricsCategory(), !mState.value);
if (!mAdapter.isEnabled()) {
mAdapter.enable();
} else {
mAdapter.disable();
}
}
@Override
protected void handleSecondaryClick() {
handleClick();
}
@Override
public CharSequence getTileLabel() {
return mContext.getString(R.string.quick_settings_nfc_label);
}
@Override
protected void handleUpdateState(BooleanState state, Object arg) {
final Drawable mEnable = mContext.getDrawable(R.drawable.ic_qs_nfc_enabled);
final Drawable mDisable = mContext.getDrawable(R.drawable.ic_qs_nfc_disabled);
state.value = mAdapter == null ? false : mAdapter.isEnabled();
state.label = mContext.getString(R.string.quick_settings_nfc_label);
state.icon = new DrawableIcon(state.value ? mEnable : mDisable);
state.minimalAccessibilityClassName = state.expandedAccessibilityClassName
= Switch.class.getName();
state.contentDescription = state.label;
}
@Override
public int getMetricsCategory() {
return MetricsEvent.QS_NFC;
}
@Override
protected String composeChangeAnnouncement() {
if (mState.value) {
return mContext.getString(R.string.quick_settings_nfc_on);
} else {
return mContext.getString(R.string.quick_settings_nfc_off);
}
}
private BroadcastReceiver mNfcReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
refreshState();
}
};
}

View File

@@ -52,6 +52,7 @@ import com.android.systemui.qs.tiles.FlashlightTile;
import com.android.systemui.qs.tiles.HotspotTile;
import com.android.systemui.qs.tiles.IntentTile;
import com.android.systemui.qs.tiles.LocationTile;
import com.android.systemui.qs.tiles.NfcTile;
import com.android.systemui.qs.tiles.NightDisplayTile;
import com.android.systemui.qs.tiles.RotationLockTile;
import com.android.systemui.qs.tiles.UserTile;
@@ -441,6 +442,7 @@ public class QSTileHost implements QSTile.Host, Tunable {
else if (tileSpec.equals("battery")) return new BatteryTile(this);
else if (tileSpec.equals("saver")) return new DataSaverTile(this);
else if (tileSpec.equals("night")) return new NightDisplayTile(this);
else if (tileSpec.equals("nfc")) return new NfcTile(this);
// Intent tiles.
else if (tileSpec.startsWith(IntentTile.PREFIX)) return IntentTile.create(this,tileSpec);
else if (tileSpec.startsWith(CustomTile.PREFIX)) return CustomTile.create(this,tileSpec);

View File

@@ -2213,6 +2213,11 @@ message MetricsEvent {
// ---- End N-MR1 Constants, all N-MR1 constants go above this line ----
// OPEN: QS NFC tile shown
// ACTION: QS NFC tile tapped
// CATEGORY: QUICK_SETTINGS
QS_NFC = 497;
// Add new aosp constants above this line.
// END OF AOSP CONSTANTS
}