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

Commit 268aed51 authored by weijiaxu's avatar weijiaxu Committed by Copybara-Service
Browse files

Add enriched calling simulation.

Test: on a local device.
PiperOrigin-RevId: 183414102
Change-Id: I56efda40994e9f0b84f462e42301adbf625273e5
parent 4a6fa6e4
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -63,11 +63,24 @@ public interface Simulator {
  @StringDef({
    IS_VOLTE,
    PRESENTATION_CHOICE,
    IS_ENRICHED_CALL,
  })
  @interface BundleKey {}

  public final String IS_VOLTE = "ISVOLTE";
  public final String PRESENTATION_CHOICE = "PRESENTATIONCHOICE";
  public final String IS_ENRICHED_CALL = "ISENRICHEDCALL";

  /** Phone numbers for outgoing and incoming enriched call scenario. */
  public static final String ENRICHED_CALL_OUTGOING_NUMBER = "+55-31-2128-6800";

  public static final String ENRICHED_CALL_INCOMING_NUMBER = "+44 (0) 20 7031 3000";

  boolean isSimulatorMode();

  void enableSimulatorMode();

  void disableSimulatorMode();

  /** Information about a connection event. */
  public static class Event {
+5 −4
Original line number Diff line number Diff line
@@ -16,13 +16,14 @@

package com.android.dialer.simulator;

import com.android.dialer.enrichedcall.EnrichedCallManager.StateChangedListener;
import com.android.dialer.enrichedcall.EnrichedCallManager;
import com.google.common.util.concurrent.ListenableFuture;

/** Setup enriched calling environment for {@link Simulator}. */
public interface SimulatorEnrichedCall extends StateChangedListener {
public interface SimulatorEnrichedCall extends EnrichedCallManager.StateChangedListener {
  /** Setup a session for an incoming enriched call. */
  long setupIncomingEnrichedCall(String number);
  ListenableFuture<Void> setupIncomingEnrichedCall(String number);

  /** Setup a session for outgoing enriched call. */
  long setupOutgoingEnrichedCall(String number);
  ListenableFuture<Void> setupOutgoingEnrichedCall(String number);
}
+18 −1
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ import javax.inject.Inject;
/** The entry point for the simulator feature. */
final class SimulatorImpl implements Simulator {

  private boolean simulatorMode = false;

  @Inject
  public SimulatorImpl() {}

@@ -38,4 +40,19 @@ final class SimulatorImpl implements Simulator {
  public ActionProvider getActionProvider(AppCompatActivity activity) {
    return SimulatorMainMenu.getActionProvider(activity);
  }

  @Override
  public boolean isSimulatorMode() {
    return simulatorMode;
  }

  @Override
  public void enableSimulatorMode() {
    simulatorMode = true;
  }

  @Override
  public void disableSimulatorMode() {
    simulatorMode = false;
  }
}
+14 −1
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import com.android.dialer.databasepopulator.VoicemailPopulator;
import com.android.dialer.enrichedcall.simulator.EnrichedCallSimulatorActivity;
import com.android.dialer.persistentlog.PersistentLogger;
import com.android.dialer.preferredsim.PreferredSimFallbackContract;
import com.android.dialer.simulator.SimulatorComponent;
import com.android.incallui.rtt.impl.RttChatActivity;
import com.android.incallui.speakeasy.SpeakEasy;
import com.android.incallui.speakeasy.SpeakEasyActivity;
@@ -65,7 +66,19 @@ final class SimulatorMainMenu {
            "Enriched call simulator",
            () ->
                activity.startActivity(
                    EnrichedCallSimulatorActivity.newIntent(activity.getApplicationContext())));
                    EnrichedCallSimulatorActivity.newIntent(activity.getApplicationContext())))
        .addItem(
            "Enable simulator mode",
            () ->
                SimulatorComponent.get(activity.getApplicationContext())
                    .getSimulator()
                    .enableSimulatorMode())
        .addItem(
            "Disable simulator mode",
            () ->
                SimulatorComponent.get(activity.getApplicationContext())
                    .getSimulator()
                    .disableSimulatorMode());
    SpeakEasy speakEasy = SpeakEasyComponent.get(activity.getApplicationContext()).speakEasy();
    if (speakEasy.isEnabled()) {
      simulatorSubMenu.addItem(
+54 −8
Original line number Diff line number Diff line
@@ -26,15 +26,21 @@ import android.telecom.DisconnectCause;
import android.view.ActionProvider;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.common.concurrent.ThreadUtil;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
import com.android.dialer.enrichedcall.EnrichedCallManager;
import com.android.dialer.simulator.Simulator;
import com.android.dialer.simulator.Simulator.Event;
import com.android.dialer.simulator.SimulatorComponent;
import com.android.dialer.simulator.SimulatorEnrichedCall;

/** Entry point in the simulator to create voice calls. */
final class SimulatorVoiceCall
    implements SimulatorConnectionService.Listener, SimulatorConnection.Listener {
  @NonNull private final Context context;
  @Nullable private String connectionTag;
  private final SimulatorEnrichedCall simulatorEnrichedCall;

  static ActionProvider getActionProvider(@NonNull AppCompatActivity activity) {
    return new SimulatorSubMenu(activity.getApplicationContext())
@@ -54,6 +60,12 @@ final class SimulatorVoiceCall
            () ->
                new SimulatorVoiceCall(activity.getApplicationContext())
                    .addNewOutgoingCall(activity))
        .addItem(
            "Incoming enriched call",
            () -> new SimulatorVoiceCall(activity.getApplicationContext()).incomingEnrichedCall())
        .addItem(
            "Outgoing enriched call",
            () -> new SimulatorVoiceCall(activity.getApplicationContext()).outgoingEnrichedCall())
        .addItem(
            "Spam incoming call",
            () -> new SimulatorVoiceCall(activity.getApplicationContext()).addSpamIncomingCall())
@@ -77,21 +89,45 @@ final class SimulatorVoiceCall

  private SimulatorVoiceCall(@NonNull Context context) {
    this.context = Assert.isNotNull(context);
    simulatorEnrichedCall = SimulatorComponent.get(context).getSimulatorEnrichedCall();
    SimulatorConnectionService.addListener(this);
    SimulatorConnectionService.addListener(
        new SimulatorConferenceCreator(context, Simulator.CONFERENCE_TYPE_GSM));
  }

  private void addNewIncomingCall() {
    String callerId = "+44 (0) 20 7031 3000" /* Google London office */;
  private void incomingEnrichedCall() {
    simulatorEnrichedCall
        .setupIncomingEnrichedCall(Simulator.ENRICHED_CALL_INCOMING_NUMBER)
        .addListener(
            () -> {
              Bundle extras = new Bundle();
              extras.putBoolean(Simulator.IS_ENRICHED_CALL, true);
              connectionTag =
        SimulatorSimCallManager.addNewIncomingCall(context, callerId, false /* isVideo */);
                  SimulatorSimCallManager.addNewIncomingCall(
                      context, Simulator.ENRICHED_CALL_INCOMING_NUMBER, false, extras);
            },
            DialerExecutorComponent.get(context).uiExecutor());
  }

  private void addNewOutgoingCall() {
    String callerId = "+55-31-2128-6800"; // Brazil office.
  private void outgoingEnrichedCall() {
    getEnrichedCallManager().registerStateChangedListener(simulatorEnrichedCall);
    simulatorEnrichedCall
        .setupOutgoingEnrichedCall(Simulator.ENRICHED_CALL_OUTGOING_NUMBER)
        .addListener(
            () -> {
              Bundle extras = new Bundle();
              extras.putBoolean(Simulator.IS_ENRICHED_CALL, true);
              connectionTag =
        SimulatorSimCallManager.addNewOutgoingCall(context, callerId, false /* isVideo */);
                  SimulatorSimCallManager.addNewOutgoingCall(
                      context, Simulator.ENRICHED_CALL_OUTGOING_NUMBER, false, extras);
            },
            DialerExecutorComponent.get(context).uiExecutor());
  }

  private void addNewIncomingCall() {
    String callerId = "+44 (0) 20 7031 3000" /* Google London office */;
    connectionTag =
        SimulatorSimCallManager.addNewIncomingCall(context, callerId, false /* isVideo */);
  }

  private void addNewIncomingCall(AppCompatActivity activity) {
@@ -106,6 +142,12 @@ final class SimulatorVoiceCall
        .show(activity.getSupportFragmentManager(), "SimulatorDialog");
  }

  private void addNewOutgoingCall() {
    String callerId = "+55-31-2128-6800"; // Brazil office.
    connectionTag =
        SimulatorSimCallManager.addNewOutgoingCall(context, callerId, false /* isVideo */);
  }

  private void addNewOutgoingCall(AppCompatActivity activity) {
    SimulatorDialogFragment.newInstance(
            (callerId, callerIdPresentation) -> {
@@ -184,6 +226,9 @@ final class SimulatorVoiceCall
        break;
      case Event.DISCONNECT:
        connection.setDisconnected(new DisconnectCause(DisconnectCause.LOCAL));
        if (connection.getExtras().getBoolean(Simulator.IS_ENRICHED_CALL)) {
          getEnrichedCallManager().unregisterStateChangedListener(simulatorEnrichedCall);
        }
        break;
      case Event.SESSION_MODIFY_REQUEST:
        ThreadUtil.postDelayedOnUiThread(() -> connection.handleSessionModifyRequest(event), 2000);
@@ -194,7 +239,8 @@ final class SimulatorVoiceCall
    }
  }

  private interface DialogCallback {
    void callback(String callerId, int callerIdPresentation);
  @NonNull
  private EnrichedCallManager getEnrichedCallManager() {
    return EnrichedCallComponent.get(context).getEnrichedCallManager();
  }
}
Loading