diff options
-rw-r--r-- | src/com/android/se/SecureElementService.java | 2 | ||||
-rw-r--r-- | src/com/android/se/Terminal.java | 51 |
2 files changed, 33 insertions, 20 deletions
diff --git a/src/com/android/se/SecureElementService.java b/src/com/android/se/SecureElementService.java index 6286228..47d3103 100644 --- a/src/com/android/se/SecureElementService.java +++ b/src/com/android/se/SecureElementService.java @@ -207,6 +207,7 @@ public final class SecureElementService extends Service { @Override public void onCreate() { + super.onCreate(); Log.i(mTag, Thread.currentThread().getName() + " onCreate"); initialize(); createTerminals(); @@ -229,6 +230,7 @@ public final class SecureElementService extends Service { * close all the channels. */ public void onDestroy() { + super.onDestroy(); Log.i(mTag, "onDestroy"); for (Terminal terminal : mTerminals.values()) { terminal.closeChannels(); diff --git a/src/com/android/se/Terminal.java b/src/com/android/se/Terminal.java index 5bb3e3b..aba77bb 100644 --- a/src/com/android/se/Terminal.java +++ b/src/com/android/se/Terminal.java @@ -36,6 +36,7 @@ import android.os.Binder; import android.os.Build; import android.os.Handler; import android.os.HwBinder; +import android.os.IBinder; import android.os.Message; import android.os.RemoteException; import android.os.ServiceManager; @@ -271,9 +272,16 @@ public class Terminal { android.hardware.secure_element.V1_1.ISecureElement mSEHal11 = null; synchronized (mLock) { try { - mAidlHal = android.hardware.secure_element.ISecureElement.Stub.asInterface( - ServiceManager.waitForDeclaredService( - "android.hardware.secure_element.ISecureElement/" + mName)); + String name = "android.hardware.secure_element.ISecureElement/" + mName; + IBinder binder = null; + if (retryOnFail) { + binder = ServiceManager.waitForDeclaredService(name); + } else { + if (ServiceManager.isDeclared(name)) { + binder = ServiceManager.getService(name); + } + } + mAidlHal = android.hardware.secure_element.ISecureElement.Stub.asInterface(binder); } catch (Exception e) { Log.d(mTag, "SE AIDL Hal is not supported"); } @@ -884,29 +892,32 @@ public class Terminal { * Reset the Secure Element. Return true if success, false otherwise. */ public boolean reset() { - if (mSEHal12 == null && mAidlHal == null) { - return false; - } - mContext.enforceCallingOrSelfPermission( + synchronized (mLock) { + if (mSEHal12 == null && mAidlHal == null) { + return false; + } + mContext.enforceCallingOrSelfPermission( android.Manifest.permission.SECURE_ELEMENT_PRIVILEGED_OPERATION, "Need SECURE_ELEMENT_PRIVILEGED_OPERATION permission"); - try { - if (mAidlHal != null) { - mAidlHal.reset(); - } else { - byte status = mSEHal12.reset(); - // Successfully trigger reset. HAL service should send onStateChange - // after secure element reset and initialization process complete - if (status == SecureElementStatus.SUCCESS) { + try { + if (mAidlHal != null) { + mAidlHal.reset(); return true; + } else { + byte status = mSEHal12.reset(); + // Successfully trigger reset. HAL service should send onStateChange + // after secure element reset and initialization process complete + if (status == SecureElementStatus.SUCCESS) { + return true; + } + Log.e(mTag, "Error resetting terminal " + mName); } - Log.e(mTag, "Error resetting terminal " + mName); + } catch (ServiceSpecificException e) { + Log.e(mTag, "Exception in reset()" + e); + } catch (RemoteException e) { + Log.e(mTag, "Exception in reset()" + e); } - } catch (ServiceSpecificException e) { - Log.e(mTag, "Exception in reset()" + e); - } catch (RemoteException e) { - Log.e(mTag, "Exception in reset()" + e); } return false; } |