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:
committed by
Alex Naidis
parent
c20518139a
commit
f7648f4483
31
packages/SystemUI/res/drawable/ic_qs_nfc_disabled.xml
Normal file
31
packages/SystemUI/res/drawable/ic_qs_nfc_disabled.xml
Normal 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>
|
||||
31
packages/SystemUI/res/drawable/ic_qs_nfc_enabled.xml
Normal file
31
packages/SystemUI/res/drawable/ic_qs_nfc_enabled.xml
Normal 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>
|
||||
@@ -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>
|
||||
|
||||
136
packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
Normal file
136
packages/SystemUI/src/com/android/systemui/qs/tiles/NfcTile.java
Normal 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();
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user