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

Commit 2ab88cc3 authored by Sailesh Nepal's avatar Sailesh Nepal
Browse files

Add Connection.startActivityFromInCall

This CL adds a new public API to allow Connections
to start an activity on top of the in-call UI.

The Connection passes a PendingIntent to Telecomm which
then forwards it on to InCallUI. The Connection can cancel
the operation by calling PendingIntent.cancel().

This allows services like SIP and Hangouts to show dialogs
to the user when making a call.

Change-Id: I65119a89c925a93467d1b27304ffec9b088b172f
parent 48031593
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -28174,6 +28174,7 @@ package android.telecomm {
    method public void onParentChanged(android.telecomm.Call, android.telecomm.Call);
    method public void onPostDial(android.telecomm.Call, java.lang.String);
    method public void onPostDialWait(android.telecomm.Call, java.lang.String);
    method public void onStartActivity(android.telecomm.Call, android.app.PendingIntent);
    method public void onStateChanged(android.telecomm.Call, int);
  }
@@ -28319,6 +28320,7 @@ package android.telecomm {
    method public final void setSignal(android.os.Bundle);
    method public final void setStatusHints(android.telecomm.StatusHints);
    method public final void setVideoState(int);
    method public final void startActivityFromInCall(android.app.PendingIntent);
    method public static java.lang.String stateToString(int);
  }
@@ -28525,6 +28527,7 @@ package android.telecomm {
    method public abstract void onHandleChanged(android.telecomm.RemoteConnection, android.net.Uri, int);
    method public abstract void onPostDialWait(android.telecomm.RemoteConnection, java.lang.String);
    method public abstract void onRequestingRingback(android.telecomm.RemoteConnection, boolean);
    method public abstract void onStartActivityFromInCall(android.telecomm.RemoteConnection, android.app.PendingIntent);
    method public abstract void onStateChanged(android.telecomm.RemoteConnection, int);
    method public abstract void onStatusHintsChanged(android.telecomm.RemoteConnection, android.telecomm.StatusHints);
    method public abstract void onVideoStateChanged(android.telecomm.RemoteConnection, int);
+21 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.telecomm;

import android.app.PendingIntent;
import android.net.Uri;
import android.os.RemoteException;
import android.telephony.DisconnectCause;
@@ -317,6 +318,14 @@ public final class Call {
        public void onCallVideoProviderChanged(Call call,
                RemoteCallVideoProvider callVideoProvider) {}

        /**
         * Launches an activity for this connection on top of the in-call UI.
         *
         * @param call The {@code Call} invoking this method.
         * @param intent The intent to use to start the activity.
         */
        public void onStartActivity(Call call, PendingIntent intent) {}

        /**
         * Invoked when the {@code Call} is destroyed. Clients should refrain from cleaning
         * up their UI for the {@code Call} in response to state transitions. Specifically,
@@ -664,6 +673,11 @@ public final class Call {
        firePostDialWait(mRemainingPostDialSequence);
    }

    /** {@hide} */
    final void internalStartActivity(PendingIntent intent) {
        fireStartActivity(intent);
    }

    private void fireStateChanged(int newState) {
        Listener[] listeners = mListeners.toArray(new Listener[mListeners.size()]);
        for (int i = 0; i < listeners.length; i++) {
@@ -720,6 +734,13 @@ public final class Call {
        }
    }

    private void fireStartActivity(PendingIntent intent) {
        Listener[] listeners = mListeners.toArray(new Listener[mListeners.size()]);
        for (int i = 0; i < listeners.length; i++) {
            listeners[i].onStartActivity(this, intent);
        }
    }

    private void fireCallDestroyed() {
        Listener[] listeners = mListeners.toArray(new Listener[mListeners.size()]);
        for (int i = 0; i < listeners.length; i++) {
+16 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.telecomm;

import android.app.PendingIntent;
import android.net.Uri;
import android.os.Bundle;
import android.telecomm.CallVideoProvider;
@@ -48,6 +49,7 @@ public abstract class Connection {
        public void onCallVideoProviderChanged(Connection c, CallVideoProvider callVideoProvider) {}
        public void onAudioModeIsVoipChanged(Connection c, boolean isVoip) {}
        public void onStatusHintsChanged(Connection c, StatusHints statusHints) {}
        public void onStartActivityFromInCall(Connection c, PendingIntent intent) {}
    }

    public final class State {
@@ -463,6 +465,20 @@ public abstract class Connection {
        }
    }

    /**
     * Launches an activity for this connection on top of the in-call UI.
     *
     * @param intent The intent to use to start the activity.
     */
    public final void startActivityFromInCall(PendingIntent intent) {
        if (!intent.isActivity()) {
            throw new IllegalArgumentException("Activity intent required.");
        }
        for (Listener l : mListeners) {
            l.onStartActivityFromInCall(this, intent);
        }
    }

    /**
     * Notifies this Connection that the {@link #getCallAudioState()} property has a new value.
     *
+7 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.telecomm;

import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
import android.content.ComponentName;
@@ -398,6 +399,12 @@ public abstract class ConnectionService extends Service {
            String id = mIdByConnection.get(c);
            mAdapter.setStatusHints(id, statusHints);
        }

        @Override
        public void onStartActivityFromInCall(Connection c, PendingIntent intent) {
            String id = mIdByConnection.get(c);
            mAdapter.startActivityFromInCall(id, intent);
        }
    };

    /** {@inheritDoc} */
+10 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.telecomm;

import android.app.PendingIntent;
import android.content.ComponentName;
import android.net.Uri;
import android.os.IBinder;
@@ -344,4 +345,13 @@ final class ConnectionServiceAdapter implements DeathRecipient {
            }
        }
    }

    void startActivityFromInCall(String callId, PendingIntent intent) {
        for (IConnectionServiceAdapter adapter : mAdapters) {
            try {
                adapter.startActivityFromInCall(callId, intent);
            } catch (RemoteException e) {
            }
        }
    }
}
Loading