From 3fd7f8949013d7be459aa11e68df07ec9bba179b Mon Sep 17 00:00:00 2001 From: Jack Yu Date: Tue, 23 Jul 2019 17:40:44 +0800 Subject: [PATCH] Do not call to SecureElement Service if device does not support any OMAPI readers Bug: 131062577 Test: CTS OMAPI Change-Id: Ifde59f1a25054e3e057ca7cfee93712fbdeede2a --- core/java/android/se/omapi/SEService.java | 26 +++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/core/java/android/se/omapi/SEService.java b/core/java/android/se/omapi/SEService.java index 00060ab8ef4ac..d646e23d230ad 100644 --- a/core/java/android/se/omapi/SEService.java +++ b/core/java/android/se/omapi/SEService.java @@ -22,11 +22,14 @@ package android.se.omapi; +import android.app.ActivityThread; import android.annotation.NonNull; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; +import android.content.pm.IPackageManager; +import android.content.pm.PackageManager; import android.os.IBinder; import android.os.RemoteException; import android.util.Log; @@ -140,6 +143,10 @@ public final class SEService { throw new NullPointerException("Arguments must not be null"); } + if (!hasOMAPIReaders()) { + throw new UnsupportedOperationException("Device does not support any OMAPI reader"); + } + mContext = context; mSEListener.mListener = listener; mSEListener.mExecutor = executor; @@ -270,4 +277,23 @@ public final class SEService { throw new IllegalStateException(e.getMessage()); } } + + /** + * Helper to check if this device support any OMAPI readers + */ + private static boolean hasOMAPIReaders() { + IPackageManager pm = ActivityThread.getPackageManager(); + if (pm == null) { + Log.e(TAG, "Cannot get package manager, assuming OMAPI readers supported"); + return true; + } + try { + return pm.hasSystemFeature(PackageManager.FEATURE_SE_OMAPI_UICC, 0) + || pm.hasSystemFeature(PackageManager.FEATURE_SE_OMAPI_ESE, 0) + || pm.hasSystemFeature(PackageManager.FEATURE_SE_OMAPI_SD, 0); + } catch (RemoteException e) { + Log.e(TAG, "Package manager query failed, assuming OMAPI readers supported", e); + return true; + } + } }