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

Commit d1437602 authored by Yoshiaki Naka's avatar Yoshiaki Naka Committed by Jordan Liu
Browse files

Support ENVELOPE (EVENT DOWNLOAD - User activity) command

The terminal shall send the ENVELOPE (EVENT DOWNLOAD - User activity)
command to the UICC when some user activity like a key-press or touch is
detected if the user activity event is a part of the current event list.
This change allows the SIM Toolkit application to support that event.
Please refer to the specification of SET UP EVENT LIST command described
in ETSI TS 102.223.

Bug: 65884891
Test: Confirmed the expected seq 1.1 of ETSI TS 102.384 TC 27.22.4.16
Change-Id: I7d3faa09cd4625db53bcfe21f90570389a4ea037
Merged-In: I7d3faa09cd4625db53bcfe21f90570389a4ea037
parent 36886b6f
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -397,4 +397,10 @@ interface IWindowManager
     * Return the touch region for the current IME window, or an empty region if there is none.
     */
    Region getCurrentImeTouchRegion();

    /**
     * Requests that the WindowManager sends WindowManagerPolicy#ACTION_USER_ACTIVITY_NOTIFICATION
     * on the next user activity.
     */
    void requestUserActivityNotification();
}
+12 −0
Original line number Diff line number Diff line
@@ -158,6 +158,12 @@ public interface WindowManagerPolicy {

    public final static boolean WATCH_POINTER = false;

    /**
     * Broadcast sent when a user activity is detected.
     */
    public final static String ACTION_USER_ACTIVITY_NOTIFICATION =
            "android.intent.action.USER_ACTIVITY_NOTIFICATION";

    /**
     * Sticky broadcast of the current HDMI plugged state.
     */
@@ -1741,4 +1747,10 @@ public interface WindowManagerPolicy {
     * @return true if ready; false otherwise.
     */
    boolean canDismissBootAnimation();

    /**
     * Requests that the WindowManager sends WindowManagerPolicy#ACTION_USER_ACTIVITY_NOTIFICATION
     * on the next user activity.
     */
    public void requestUserActivityNotification();
}
+1 −0
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@
    <protected-broadcast android:name="android.intent.action.OVERLAY_CHANGED" />
    <protected-broadcast android:name="android.intent.action.OVERLAY_REMOVED" />
    <protected-broadcast android:name="android.intent.action.OVERLAY_PRIORITY_CHANGED" />
    <protected-broadcast android:name="android.intent.action.USER_ACTIVITY_NOTIFICATION" />

    <protected-broadcast android:name="android.os.action.POWER_SAVE_MODE_CHANGED" />
    <protected-broadcast android:name="android.os.action.POWER_SAVE_MODE_CHANGING" />
+24 −0
Original line number Diff line number Diff line
@@ -392,6 +392,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                KeyEvent.KEYCODE_CALCULATOR, Intent.CATEGORY_APP_CALCULATOR);
    }

    private static final int USER_ACTIVITY_NOTIFICATION_DELAY = 200;

    /** Amount of time (in milliseconds) to wait for windows drawn before powering on. */
    static final int WAITING_FOR_DRAWN_TIMEOUT = 1000;

@@ -677,6 +679,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {

    private boolean mPendingKeyguardOccluded;
    private boolean mKeyguardOccludedChanged;
    private boolean mNotifyUserActivity;

    boolean mShowingDream;
    private boolean mLastShowingDream;
@@ -831,6 +834,7 @@ public class PhoneWindowManager implements WindowManagerPolicy {
    private static final int MSG_DISPATCH_BACK_KEY_TO_AUTOFILL = 24;
    private static final int MSG_SYSTEM_KEY_PRESS = 25;
    private static final int MSG_HANDLE_ALL_APPS = 26;
    private static final int MSG_NOTIFY_USER_ACTIVITY = 27;

    private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0;
    private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1;
@@ -926,6 +930,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                case MSG_HANDLE_ALL_APPS:
                    launchAllAppsAction();
                    break;
                case MSG_NOTIFY_USER_ACTIVITY:
                    removeMessages(MSG_NOTIFY_USER_ACTIVITY);
                    Intent intent = new Intent(ACTION_USER_ACTIVITY_NOTIFICATION);
                    intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
                    mContext.sendBroadcastAsUser(intent, UserHandle.ALL,
                            android.Manifest.permission.USER_ACTIVITY);
                    break;
            }
        }
    }
@@ -7466,6 +7477,13 @@ public class PhoneWindowManager implements WindowManagerPolicy {
        mHandler.sendEmptyMessage(MSG_HIDE_BOOT_MESSAGE);
    }

    @Override
    public void requestUserActivityNotification() {
        if (!mNotifyUserActivity && !mHandler.hasMessages(MSG_NOTIFY_USER_ACTIVITY)) {
            mNotifyUserActivity = true;
        }
    }

    /** {@inheritDoc} */
    @Override
    public void userActivity() {
@@ -7487,6 +7505,12 @@ public class PhoneWindowManager implements WindowManagerPolicy {
                mHandler.postDelayed(mScreenLockTimeout, mLockScreenTimeout);
            }
        }

        if (mAwake && mNotifyUserActivity) {
            mHandler.sendEmptyMessageDelayed(MSG_NOTIFY_USER_ACTIVITY,
                    USER_ACTIVITY_NOTIFICATION_DELAY);
            mNotifyUserActivity = false;
        }
    }

    class ScreenLockTimeout implements Runnable {
+9 −0
Original line number Diff line number Diff line
@@ -7301,6 +7301,15 @@ public class WindowManagerService extends IWindowManager.Stub
        mPolicy.registerShortcutKey(shortcutCode, shortcutKeyReceiver);
    }

    @Override
    public void requestUserActivityNotification() {
        if (!checkCallingPermission(android.Manifest.permission.USER_ACTIVITY,
                "requestUserActivityNotification()")) {
            throw new SecurityException("Requires USER_ACTIVITY permission");
        }
        mPolicy.requestUserActivityNotification();
    }

    void markForSeamlessRotation(WindowState w, boolean seamlesslyRotated) {
        if (seamlesslyRotated == w.mSeamlesslyRotated) {
            return;
Loading