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

Commit 43ad7b00 authored by Ahaan Ugale's avatar Ahaan Ugale Committed by Automerger Merge Worker
Browse files

Merge "Allow IVoiceInteractionSessionListener to listen for window vis...

Merge "Allow IVoiceInteractionSessionListener to listen for window vis changes" into tm-dev am: 44e14e72 am: 23a099ad

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17211290



Change-Id: I7176bdba162deb50d37f6dc6033c36091acbae63
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents e120469d 23a099ad
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -1095,7 +1095,7 @@ public class VoiceInteractionSession implements KeyEvent.Callback, ComponentCall
            if (!mWindowVisible) {
                mWindowVisible = true;
                if (mUiEnabled) {
                    mWindow.show();
                    showWindow();
                }
            }
            if (showCallback != null) {
@@ -1284,9 +1284,25 @@ public class VoiceInteractionSession implements KeyEvent.Callback, ComponentCall
        }
    }

    void showWindow() {
        if (mWindow != null) {
            mWindow.show();
            try {
                mSystemService.setSessionWindowVisible(mToken, true);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed to notify session window shown", e);
            }
        }
    }

    void ensureWindowHidden() {
        if (mWindow != null) {
            mWindow.hide();
            try {
                mSystemService.setSessionWindowVisible(mToken, false);
            } catch (RemoteException e) {
                Log.w(TAG, "Failed to notify session window hidden", e);
            }
        }
    }

@@ -1377,7 +1393,7 @@ public class VoiceInteractionSession implements KeyEvent.Callback, ComponentCall
            if (mWindowVisible) {
                if (enabled) {
                    ensureWindowAdded();
                    mWindow.show();
                    showWindow();
                } else {
                    ensureWindowHidden();
                }
+5 −0
Original line number Diff line number Diff line
@@ -284,4 +284,9 @@ interface IVoiceInteractionManagerService {
     * Stops to listen the status of visible activity.
     */
    void stopListeningVisibleActivityChanged(in IBinder token);

    /**
     * Notifies when the session window is shown or hidden.
     */
    void setSessionWindowVisible(in IBinder token, boolean visible);
}
+5 −0
Original line number Diff line number Diff line
@@ -29,6 +29,11 @@
     */
    void onVoiceSessionHidden();

    /**
     * Called when a voice session window is shown/hidden.
     */
    void onVoiceSessionWindowVisibilityChanged(boolean visible);

    /**
     * Called when UI hints were received.
     */
+8 −0
Original line number Diff line number Diff line
@@ -186,6 +186,14 @@ public class AssistManager {
                                AssistantSessionEvent.ASSISTANT_SESSION_CLOSE);
                    }

                    @Override
                    public void onVoiceSessionWindowVisibilityChanged(boolean visible)
                            throws RemoteException {
                        if (VERBOSE) {
                            Log.v(TAG, "Window visibility changed: " + visible);
                        }
                    }

                    @Override
                    public void onSetUiHints(Bundle hints) {
                        if (VERBOSE) {
+26 −0
Original line number Diff line number Diff line
@@ -1824,6 +1824,32 @@ public class VoiceInteractionManagerService extends SystemService {
            }
        }

        public void setSessionWindowVisible(IBinder token, boolean visible) {
            synchronized (this) {
                if (mImpl == null) {
                    Slog.w(TAG, "setSessionWindowVisible called without running voice interaction "
                            + "service");
                    return;
                }
                if (mImpl.mActiveSession == null || token != mImpl.mActiveSession.mToken) {
                    Slog.w(TAG, "setSessionWindowVisible does not match active session");
                    return;
                }
                final long caller = Binder.clearCallingIdentity();
                try {
                    mVoiceInteractionSessionListeners.broadcast(listener -> {
                        try {
                            listener.onVoiceSessionWindowVisibilityChanged(visible);
                        } catch (RemoteException e) {
                            Slog.e(TAG, "Error delivering window visibility event to listener.", e);
                        }
                    });
                } finally {
                    Binder.restoreCallingIdentity(caller);
                }
            }
        }

        @Override
        public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
            if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return;