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

Commit 448b0791 authored by Automerger Merge Worker's avatar Automerger Merge Worker Committed by Android (Google) Code Review
Browse files

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

Merge "Merge "Allow IVoiceInteractionSessionListener to listen for window vis changes" into tm-dev am: 44e14e72 am: ad3eae01 am: 26b037f4" into tm-qpr-dev-plus-aosp
parents 10892b03 41f8407b
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;