Adjust logging NFC_CARDEMULATION_OCCURRED
Bug: 247436942
Test: statsd_testdrive
Change-Id: I7b9ee488017ffb5eaaa3f623561ac3a70ecd5a2c
Merged-In: I7b9ee488017ffb5eaaa3f623561ac3a70ecd5a2c
diff --git a/src/com/android/nfc/NfcService.java b/src/com/android/nfc/NfcService.java
index 95df870..85db450 100644
--- a/src/com/android/nfc/NfcService.java
+++ b/src/com/android/nfc/NfcService.java
@@ -34,6 +34,7 @@
import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.content.pm.UserInfo;
import android.content.res.Resources.NotFoundException;
import android.media.AudioAttributes;
@@ -456,8 +457,6 @@
public void onNfcTransactionEvent(byte[] aid, byte[] data, String seName) {
byte[][] dataObj = {aid, data, seName.getBytes()};
sendMessage(NfcService.MSG_TRANSACTION_EVENT, dataObj);
- NfcStatsLog.write(NfcStatsLog.NFC_CARDEMULATION_OCCURRED,
- NfcStatsLog.NFC_CARDEMULATION_OCCURRED__CATEGORY__OFFHOST, seName);
}
@Override
@@ -2955,6 +2954,7 @@
try {
String reader = new String(readerByteArray, "UTF-8");
+ int uid = -1;
for (int userId : mNfcEventInstalledPackages.keySet()) {
List<String> packagesOfUser = mNfcEventInstalledPackages.get(userId);
String[] installedPackages = new String[packagesOfUser.size()];
@@ -2979,14 +2979,40 @@
final BroadcastOptions options = BroadcastOptions.makeBasic();
options.setBackgroundActivityStartsAllowed(true);
+
+ Map<String, Integer> hasIntentPackages = mContext
+ .getPackageManager()
+ .queryBroadcastReceiversAsUser(intent, 0, UserHandle.of(userId))
+ .stream()
+ .collect(Collectors.toMap(
+ activity -> activity.activityInfo.applicationInfo.packageName,
+ activity -> activity.activityInfo.applicationInfo.uid));
+ if (DBG) {
+ String[] packageNames = hasIntentPackages
+ .keySet().toArray(new String[hasIntentPackages.size()]);
+ Log.d(TAG,
+ "queryBroadcastReceiversAsUser: " + Arrays.toString(packageNames));
+ }
+
for (int i = 0; i < nfcAccess.length; i++) {
if (nfcAccess[i]) {
+ if (DBG) {
+ Log.d(TAG,
+ "sendOffHostTransactionEvent to " + packagesOfUser.get(i));
+ }
+ if (uid == -1 && hasIntentPackages.containsKey(packagesOfUser.get(i))) {
+ uid = hasIntentPackages.get(packagesOfUser.get(i));
+ }
intent.setPackage(packagesOfUser.get(i));
mContext.sendBroadcastAsUser(intent, UserHandle.of(userId), null,
options.toBundle());
}
}
}
+ NfcStatsLog.write(NfcStatsLog.NFC_CARDEMULATION_OCCURRED,
+ NfcStatsLog.NFC_CARDEMULATION_OCCURRED__CATEGORY__OFFHOST,
+ reader,
+ uid);
} catch (RemoteException e) {
Log.e(TAG, "Error in isNfcEventAllowed() " + e);
} catch (UnsupportedEncodingException e) {
diff --git a/src/com/android/nfc/cardemulation/HostEmulationManager.java b/src/com/android/nfc/cardemulation/HostEmulationManager.java
index 185f1a1..ae708b4 100644
--- a/src/com/android/nfc/cardemulation/HostEmulationManager.java
+++ b/src/com/android/nfc/cardemulation/HostEmulationManager.java
@@ -233,8 +233,9 @@
switch (mState) {
case STATE_W4_SELECT:
if (selectAid != null) {
+ int uid = resolvedServiceInfo.getUid();
UserHandle user =
- UserHandle.getUserHandleForUid(resolvedServiceInfo.getUid());
+ UserHandle.getUserHandleForUid(uid);
Messenger existingService =
bindServiceIfNeededLocked(user.getIdentifier(), resolvedService);
if (existingService != null) {
@@ -251,11 +252,13 @@
if (CardEmulation.CATEGORY_PAYMENT.equals(resolveInfo.category)) {
NfcStatsLog.write(NfcStatsLog.NFC_CARDEMULATION_OCCURRED,
NfcStatsLog.NFC_CARDEMULATION_OCCURRED__CATEGORY__HCE_PAYMENT,
- "HCE");
+ "HCE",
+ uid);
} else {
NfcStatsLog.write(NfcStatsLog.NFC_CARDEMULATION_OCCURRED,
NfcStatsLog.NFC_CARDEMULATION_OCCURRED__CATEGORY__HCE_OTHER,
- "HCE");
+ "HCE",
+ uid);
}
} else {
Log.d(TAG, "Dropping non-select APDU in STATE_W4_SELECT");
diff --git a/src/com/android/nfc/cardemulation/HostNfcFEmulationManager.java b/src/com/android/nfc/cardemulation/HostNfcFEmulationManager.java
index acb3629..8822a49 100644
--- a/src/com/android/nfc/cardemulation/HostNfcFEmulationManager.java
+++ b/src/com/android/nfc/cardemulation/HostNfcFEmulationManager.java
@@ -151,9 +151,15 @@
mPendingPacket = data;
mState = STATE_W4_SERVICE;
}
+
+ int uid = -1;
+ if(resolvedService != null) {
+ uid = resolvedService.getUid();
+ }
NfcStatsLog.write(NfcStatsLog.NFC_CARDEMULATION_OCCURRED,
NfcStatsLog.NFC_CARDEMULATION_OCCURRED__CATEGORY__HCE_PAYMENT,
- "HCEF");
+ "HCEF",
+ uid);
break;
case STATE_W4_SERVICE:
Log.d(TAG, "Unexpected packet in STATE_W4_SERVICE");