Trigger broadcast intent when the secure element state changed

Bug: 175850569
Test: check broadcast intent is triggered when the secure element state
changed

Change-Id: I7a9cf5153919b49e3493f0214ee7b11e4414843d
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 18f1cca..1fb1ae5 100755
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -3,6 +3,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.android.se"
      android:sharedUserId="android.uid.se">
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
     <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
     <application android:name=".SEApplication"
          android:label="SecureElementApplication"
diff --git a/src/com/android/se/Terminal.java b/src/com/android/se/Terminal.java
index 8cff518..d858426 100644
--- a/src/com/android/se/Terminal.java
+++ b/src/com/android/se/Terminal.java
@@ -24,6 +24,7 @@
 package com.android.se;
 
 import android.content.Context;
+import android.content.Intent;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.PackageManager.NameNotFoundException;
@@ -37,6 +38,7 @@
 import android.os.Message;
 import android.os.RemoteException;
 import android.os.ServiceSpecificException;
+import android.os.UserHandle;
 import android.se.omapi.ISecureElementListener;
 import android.se.omapi.ISecureElementReader;
 import android.se.omapi.ISecureElementSession;
@@ -158,9 +160,19 @@
                         reason,
                         mName);
             }
+
+            sendStateChangedBroadcast(state);
         }
     }
 
+    private void sendStateChangedBroadcast(boolean state) {
+        Intent intent = new Intent(SEService.ACTION_SECURE_ELEMENT_STATE_CHANGED);
+        intent.setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
+        intent.putExtra(SEService.EXTRA_READER_NAME, mName);
+        intent.putExtra(SEService.EXTRA_READER_STATE, state);
+        mContext.sendBroadcastAsUser(intent, UserHandle.CURRENT);
+    };
+
     class SecureElementDeathRecipient implements HwBinder.DeathRecipient {
         @Override
         public void serviceDied(long cookie) {