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

Commit 4c69fb3d authored by Tyler Gunn's avatar Tyler Gunn
Browse files

Make queryRemoteConnectionServices DSDS aware.

The method queryRemoteConnectionServices had the issue that it assumes
there is a single connection manager for the device.  This assumption does
not work on a multisim device.  Since the ConnectionManager is associated
with a particular carrier, this means that the connection mgr for one
carrier could try to impact calls destined for another carrier.

This change ensures that the calling package is passed into Telecom so
that we can determine which RemoteConnectionServices which are available to
the calling connection manager.

Test: Manual test on DSDS with a connection mgr carrier and another carrier.
Bug: 131856987
Change-Id: I46d80dc68adaab7fd4374f023d7ba4242804c253
parent c3bfdf52
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -1937,6 +1937,8 @@ public abstract class ConnectionService extends Service {
            return;
            return;
        }
        }


        String callingPackage = getOpPackageName();

        mAdapter.queryRemoteConnectionServices(new RemoteServiceCallback.Stub() {
        mAdapter.queryRemoteConnectionServices(new RemoteServiceCallback.Stub() {
            @Override
            @Override
            public void onResult(
            public void onResult(
@@ -1965,7 +1967,7 @@ public abstract class ConnectionService extends Service {
                    }
                    }
                }.prepare());
                }.prepare());
            }
            }
        });
        }, callingPackage);
    }
    }


    /**
    /**
+2 −2
Original line number Original line Diff line number Diff line
@@ -316,11 +316,11 @@ final class ConnectionServiceAdapter implements DeathRecipient {
    /**
    /**
     * Retrieves a list of remote connection services usable to place calls.
     * Retrieves a list of remote connection services usable to place calls.
     */
     */
    void queryRemoteConnectionServices(RemoteServiceCallback callback) {
    void queryRemoteConnectionServices(RemoteServiceCallback callback, String callingPackage) {
        // Only supported when there is only one adapter.
        // Only supported when there is only one adapter.
        if (mAdapters.size() == 1) {
        if (mAdapters.size() == 1) {
            try {
            try {
                mAdapters.iterator().next().queryRemoteConnectionServices(callback,
                mAdapters.iterator().next().queryRemoteConnectionServices(callback, callingPackage,
                        Log.getExternalSession());
                        Log.getExternalSession());
            } catch (RemoteException e) {
            } catch (RemoteException e) {
                Log.e(this, e, "Exception trying to query for remote CSs");
                Log.e(this, e, "Exception trying to query for remote CSs");
+11 −3
Original line number Original line Diff line number Diff line
@@ -186,8 +186,13 @@ final class ConnectionServiceAdapterServant {
                    break;
                    break;
                }
                }
                case MSG_QUERY_REMOTE_CALL_SERVICES:
                case MSG_QUERY_REMOTE_CALL_SERVICES:
                    mDelegate.queryRemoteConnectionServices((RemoteServiceCallback) msg.obj,
                    SomeArgs args2 = (SomeArgs) msg.obj;
                            null /*Session.Info*/);
                    try {
                        mDelegate.queryRemoteConnectionServices((RemoteServiceCallback) args2.arg1,
                                (String) args2.arg2, null /*Session.Info*/);
                    } finally {
                        args2.recycle();
                    }
                    break;
                    break;
                case MSG_SET_VIDEO_STATE:
                case MSG_SET_VIDEO_STATE:
                    mDelegate.setVideoState((String) msg.obj, msg.arg1, null /*Session.Info*/);
                    mDelegate.setVideoState((String) msg.obj, msg.arg1, null /*Session.Info*/);
@@ -468,7 +473,10 @@ final class ConnectionServiceAdapterServant {


        @Override
        @Override
        public void queryRemoteConnectionServices(RemoteServiceCallback callback,
        public void queryRemoteConnectionServices(RemoteServiceCallback callback,
                Session.Info sessionInfo) {
                String callingPackage, Session.Info sessionInfo) {
            SomeArgs args = SomeArgs.obtain();
            args.arg1 = callback;
            args.arg2 = callingPackage;
            mHandler.obtainMessage(MSG_QUERY_REMOTE_CALL_SERVICES, callback).sendToTarget();
            mHandler.obtainMessage(MSG_QUERY_REMOTE_CALL_SERVICES, callback).sendToTarget();
        }
        }


+1 −1
Original line number Original line Diff line number Diff line
@@ -288,7 +288,7 @@ final class RemoteConnectionService {


        @Override
        @Override
        public void queryRemoteConnectionServices(RemoteServiceCallback callback,
        public void queryRemoteConnectionServices(RemoteServiceCallback callback,
                Session.Info sessionInfo) {
                String callingPackage, Session.Info sessionInfo) {
            // Not supported from remote connection service.
            // Not supported from remote connection service.
        }
        }


+2 −1
Original line number Original line Diff line number Diff line
@@ -78,7 +78,8 @@ oneway interface IConnectionServiceAdapter {


    void onPostDialChar(String callId, char nextChar, in Session.Info sessionInfo);
    void onPostDialChar(String callId, char nextChar, in Session.Info sessionInfo);


    void queryRemoteConnectionServices(RemoteServiceCallback callback, in Session.Info sessionInfo);
    void queryRemoteConnectionServices(RemoteServiceCallback callback, String callingPackage,
    in Session.Info sessionInfo);


    void setVideoProvider(String callId, IVideoProvider videoProvider, in Session.Info sessionInfo);
    void setVideoProvider(String callId, IVideoProvider videoProvider, in Session.Info sessionInfo);