Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fdf9086e authored by Nick Pelly's avatar Nick Pelly
Browse files

Prevent use of NFC api if device is not featurized for NFC.



Change-Id: I8724cb947223b7b60814d0be51e1122123ebb98a
Signed-off-by: default avatarNick Pelly <npelly@google.com>
parent e47150e9
Loading
Loading
Loading
Loading
+31 −1
Original line number Diff line number Diff line
@@ -15,7 +15,10 @@ import java.lang.UnsupportedOperationException;

import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.app.ActivityThread;
import android.content.Context;
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.nfc.INfcAdapter;
import android.os.IBinder;
import android.os.RemoteException;
@@ -151,6 +154,26 @@ public final class NfcAdapter {
        mService = service;
    }

    /**
     * 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);
        } catch (RemoteException e) {
            Log.e(TAG, "Package manager query failed, assuming no NFC feature", e);
            return false;
        }
    }

    /**
     * Get a handle to the default NFC Adapter on this Android device.
     * <p>
@@ -165,9 +188,16 @@ public final class NfcAdapter {
            }
            sIsInitialized = true;

            /* is this device meant to have NFC */
            if (!hasNfcFeature()) {
                Log.v(TAG, "this device does not have NFC support");
                return null;
            }

            /* get a handle to NFC service */
            IBinder b = ServiceManager.getService("nfc");
            if (b == null) {
                Log.d(TAG, "NFC Service not available");
                Log.e(TAG, "could not retrieve NFC service");
                return null;
            }