Revert "Get PackageManager from Context"
Revert submission 2264526 Reason for revert: Droidfood blocking bug: 262191143 Reverted changes: /q/submissionid:2264526 Change-Id: I34c81e2044827cd858d67c37e491967baf701759
This commit is contained in:
@@ -29,6 +29,7 @@ import android.app.PendingIntent;
|
||||
import android.compat.annotation.UnsupportedAppUsage;
|
||||
import android.content.Context;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.nfc.tech.MifareClassic;
|
||||
@@ -523,6 +524,66 @@ public final class NfcAdapter {
|
||||
public boolean onUnlockAttempted(Tag tag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to check if this device has FEATURE_NFC_BEAM, but without using
|
||||
* a context.
|
||||
* Equivalent to
|
||||
* context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC_BEAM)
|
||||
*/
|
||||
private static boolean hasBeamFeature() {
|
||||
IPackageManager pm = ActivityThread.getPackageManager();
|
||||
if (pm == null) {
|
||||
Log.e(TAG, "Cannot get package manager, assuming no Android Beam feature");
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
return pm.hasSystemFeature(PackageManager.FEATURE_NFC_BEAM, 0);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Package manager query failed, assuming no Android Beam feature", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to check if this device has FEATURE_NFC, but without using
|
||||
* a context.
|
||||
* Equivalent to
|
||||
* context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)
|
||||
*/
|
||||
private static boolean hasNfcFeature() {
|
||||
IPackageManager pm = ActivityThread.getPackageManager();
|
||||
if (pm == null) {
|
||||
Log.e(TAG, "Cannot get package manager, assuming no NFC feature");
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
return pm.hasSystemFeature(PackageManager.FEATURE_NFC, 0);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Package manager query failed, assuming no NFC feature", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to check if this device is NFC HCE capable, by checking for
|
||||
* FEATURE_NFC_HOST_CARD_EMULATION and/or FEATURE_NFC_HOST_CARD_EMULATION_NFCF,
|
||||
* but without using a context.
|
||||
*/
|
||||
private static boolean hasNfcHceFeature() {
|
||||
IPackageManager pm = ActivityThread.getPackageManager();
|
||||
if (pm == null) {
|
||||
Log.e(TAG, "Cannot get package manager, assuming no NFC feature");
|
||||
return false;
|
||||
}
|
||||
try {
|
||||
return pm.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION, 0)
|
||||
|| pm.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION_NFCF, 0);
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Package manager query failed, assuming no NFC feature", e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Return list of Secure Elements which support off host card emulation.
|
||||
*
|
||||
@@ -532,21 +593,23 @@ public final class NfcAdapter {
|
||||
* @hide
|
||||
*/
|
||||
public @NonNull List<String> getSupportedOffHostSecureElements() {
|
||||
if (mContext == null) {
|
||||
throw new UnsupportedOperationException("You need a context on NfcAdapter to use the "
|
||||
+ " getSupportedOffHostSecureElements APIs");
|
||||
}
|
||||
List<String> offHostSE = new ArrayList<String>();
|
||||
PackageManager pm = mContext.getPackageManager();
|
||||
IPackageManager pm = ActivityThread.getPackageManager();
|
||||
if (pm == null) {
|
||||
Log.e(TAG, "Cannot get package manager, assuming no off-host CE feature");
|
||||
return offHostSE;
|
||||
}
|
||||
if (pm.hasSystemFeature(PackageManager.FEATURE_NFC_OFF_HOST_CARD_EMULATION_UICC)) {
|
||||
offHostSE.add("SIM");
|
||||
}
|
||||
if (pm.hasSystemFeature(PackageManager.FEATURE_NFC_OFF_HOST_CARD_EMULATION_ESE)) {
|
||||
offHostSE.add("eSE");
|
||||
try {
|
||||
if (pm.hasSystemFeature(PackageManager.FEATURE_NFC_OFF_HOST_CARD_EMULATION_UICC, 0)) {
|
||||
offHostSE.add("SIM");
|
||||
}
|
||||
if (pm.hasSystemFeature(PackageManager.FEATURE_NFC_OFF_HOST_CARD_EMULATION_ESE, 0)) {
|
||||
offHostSE.add("eSE");
|
||||
}
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "Package manager query failed, assuming no off-host CE feature", e);
|
||||
offHostSE.clear();
|
||||
return offHostSE;
|
||||
}
|
||||
return offHostSE;
|
||||
}
|
||||
@@ -558,20 +621,10 @@ public final class NfcAdapter {
|
||||
*/
|
||||
@UnsupportedAppUsage
|
||||
public static synchronized NfcAdapter getNfcAdapter(Context context) {
|
||||
if (context == null) {
|
||||
if (sNullContextNfcAdapter == null) {
|
||||
sNullContextNfcAdapter = new NfcAdapter(null);
|
||||
}
|
||||
return sNullContextNfcAdapter;
|
||||
}
|
||||
if (!sIsInitialized) {
|
||||
PackageManager pm;
|
||||
pm = context.getPackageManager();
|
||||
sHasNfcFeature = pm.hasSystemFeature(PackageManager.FEATURE_NFC);
|
||||
sHasBeamFeature = pm.hasSystemFeature(PackageManager.FEATURE_NFC_BEAM);
|
||||
boolean hasHceFeature =
|
||||
pm.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION)
|
||||
|| pm.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION_NFCF);
|
||||
sHasNfcFeature = hasNfcFeature();
|
||||
sHasBeamFeature = hasBeamFeature();
|
||||
boolean hasHceFeature = hasNfcHceFeature();
|
||||
/* is this device meant to have NFC */
|
||||
if (!sHasNfcFeature && !hasHceFeature) {
|
||||
Log.v(TAG, "this device does not have NFC support");
|
||||
@@ -607,6 +660,12 @@ public final class NfcAdapter {
|
||||
|
||||
sIsInitialized = true;
|
||||
}
|
||||
if (context == null) {
|
||||
if (sNullContextNfcAdapter == null) {
|
||||
sNullContextNfcAdapter = new NfcAdapter(null);
|
||||
}
|
||||
return sNullContextNfcAdapter;
|
||||
}
|
||||
NfcAdapter adapter = sNfcAdapters.get(context);
|
||||
if (adapter == null) {
|
||||
adapter = new NfcAdapter(context);
|
||||
|
||||
@@ -22,9 +22,11 @@ import android.annotation.RequiresPermission;
|
||||
import android.annotation.SdkConstant;
|
||||
import android.annotation.SdkConstant.SdkConstantType;
|
||||
import android.app.Activity;
|
||||
import android.app.ActivityThread;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.nfc.INfcCardEmulation;
|
||||
import android.nfc.NfcAdapter;
|
||||
@@ -156,13 +158,18 @@ public final class CardEmulation {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
if (!sIsInitialized) {
|
||||
PackageManager pm = context.getPackageManager();
|
||||
IPackageManager pm = ActivityThread.getPackageManager();
|
||||
if (pm == null) {
|
||||
Log.e(TAG, "Cannot get PackageManager");
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION)) {
|
||||
Log.e(TAG, "This device does not support card emulation");
|
||||
try {
|
||||
if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION, 0)) {
|
||||
Log.e(TAG, "This device does not support card emulation");
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "PackageManager query failed.");
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
sIsInitialized = true;
|
||||
|
||||
@@ -17,8 +17,10 @@
|
||||
package android.nfc.cardemulation;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.ActivityThread;
|
||||
import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.nfc.INfcFCardEmulation;
|
||||
import android.nfc.NfcAdapter;
|
||||
@@ -68,13 +70,18 @@ public final class NfcFCardEmulation {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
if (!sIsInitialized) {
|
||||
PackageManager pm = context.getPackageManager();
|
||||
IPackageManager pm = ActivityThread.getPackageManager();
|
||||
if (pm == null) {
|
||||
Log.e(TAG, "Cannot get PackageManager");
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION_NFCF)) {
|
||||
Log.e(TAG, "This device does not support NFC-F card emulation");
|
||||
try {
|
||||
if (!pm.hasSystemFeature(PackageManager.FEATURE_NFC_HOST_CARD_EMULATION_NFCF, 0)) {
|
||||
Log.e(TAG, "This device does not support NFC-F card emulation");
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
} catch (RemoteException e) {
|
||||
Log.e(TAG, "PackageManager query failed.");
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
sIsInitialized = true;
|
||||
|
||||
Reference in New Issue
Block a user