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

Commit 6b91ad30 authored by weijiaxu's avatar weijiaxu Committed by Copybara-Service
Browse files

Add input dialog for simulator to use customized number.

Add dialog for user to input whatever numbers with whatever types they want. With this functionality, users can use simulator to test payphone number, private number and etc.. This is a part of feature request in b/70244000.

Bug: 70244000
Test: On a local device.
PiperOrigin-RevId: 179105057
Change-Id: Ibb386e209d0907d23773cd2c55939b500de4d8f6
parent 02507c0e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1737,7 +1737,7 @@ public class DialtactsActivity extends TransactionSafeActivity
      Simulator simulator = SimulatorComponent.get(context).getSimulator();
      if (simulator.shouldShow()) {
        simulatorMenuItem.setVisible(true);
        simulatorMenuItem.setActionProvider(simulator.getActionProvider(context));
        simulatorMenuItem.setActionProvider(simulator.getActionProvider(DialtactsActivity.this));
      } else {
        simulatorMenuItem.setVisible(false);
      }
+16 −2
Original line number Diff line number Diff line
@@ -16,9 +16,10 @@

package com.android.dialer.simulator;

import android.content.Context;
import android.support.annotation.IntDef;
import android.support.annotation.Nullable;
import android.support.annotation.StringDef;
import android.support.v7.app.AppCompatActivity;
import android.view.ActionProvider;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -28,7 +29,7 @@ import java.util.Objects;
public interface Simulator {
  boolean shouldShow();

  ActionProvider getActionProvider(Context context);
  ActionProvider getActionProvider(AppCompatActivity activity);

  /** The type of conference to emulate. */
  // TODO(a bug): add VoLTE and CDMA conference call
@@ -55,6 +56,19 @@ public interface Simulator {
  static final int ON_NEW_INCOMING_CONNECTION = 2;
  static final int ON_CONFERENCE = 3;

  static final String CALLER_ID_PRESENTATION_TYPE = "caller_id_";

  /** Bundle keys that are used in making fake call. */
  @Retention(RetentionPolicy.SOURCE)
  @StringDef({
    IS_VOLTE,
    PRESENTATION_CHOICE,
  })
  @interface BundleKey {}

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

  /** Information about a connection event. */
  public static class Event {
    /** The type of connection event. */
+1 −1
Original line number Diff line number Diff line
@@ -92,7 +92,7 @@ final class SimulatorConferenceCreator
  private void addConferenceCall(String number, Bundle extras) {
    switch (conferenceType) {
      case Simulator.CONFERENCE_TYPE_VOLTE:
        extras.putBoolean("ISVOLTE", true);
        extras.putBoolean(Simulator.IS_VOLTE, true);
        break;
      default:
        break;
+9 −2
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.telecom.ConnectionRequest;
import android.telecom.VideoProfile;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.simulator.Simulator;
import com.android.dialer.simulator.Simulator.Event;
import com.android.dialer.simulator.SimulatorComponent;
import com.android.dialer.simulator.SimulatorConnectionsBank;
@@ -46,8 +47,12 @@ public final class SimulatorConnection extends Connection {
            | CAPABILITY_HOLD
            | CAPABILITY_CAN_UPGRADE_TO_VIDEO
            | CAPABILITY_DISCONNECT_FROM_CONFERENCE);
    if (request.getExtras() != null && !request.getExtras().getBoolean("ISVOLTE")) {
      setConnectionCapabilities(getConnectionCapabilities() | CAPABILITY_SEPARATE_FROM_CONFERENCE);

    if (request.getExtras() != null) {
      if (!request.getExtras().getBoolean(Simulator.IS_VOLTE)) {
        setConnectionCapabilities(
            getConnectionCapabilities() | CAPABILITY_SEPARATE_FROM_CONFERENCE);
      }
    }
    setVideoProvider(new SimulatorVideoProvider(context, this));
    simulatorConnectionsBank = SimulatorComponent.get(context).getSimulatorConnectionsBank();
@@ -136,4 +141,6 @@ public final class SimulatorConnection extends Connection {
  public interface Listener {
    void onEvent(@NonNull SimulatorConnection connection, @NonNull Event event);
  }


}
+16 −9
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.widget.Toast;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.ThreadUtil;
import com.android.dialer.simulator.Simulator;
import com.android.dialer.simulator.SimulatorComponent;
import com.android.dialer.simulator.SimulatorConnectionsBank;
import java.util.ArrayList;
@@ -80,10 +81,13 @@ public class SimulatorConnectionService extends ConnectionService {
      SimulatorSimCallManager.unregister(this);
      return null;
    }

    SimulatorConnection connection = new SimulatorConnection(this, request);
    connection.setAddress(
        request.getAddress(),
        request
            .getExtras()
            .getInt(Simulator.PRESENTATION_CHOICE, TelecomManager.PRESENTATION_ALLOWED));
    connection.setDialing();
    connection.setAddress(request.getAddress(), TelecomManager.PRESENTATION_ALLOWED);
    simulatorConnectionsBank.add(connection);
    ThreadUtil.postOnUiThread(
        () ->
@@ -109,10 +113,13 @@ public class SimulatorConnectionService extends ConnectionService {
      SimulatorSimCallManager.unregister(this);
      return null;
    }

    SimulatorConnection connection = new SimulatorConnection(this, request);
    connection.setAddress(
        getPhoneNumber(request),
        request
            .getExtras()
            .getInt(Simulator.PRESENTATION_CHOICE, TelecomManager.PRESENTATION_ALLOWED));
    connection.setRinging();
    connection.setAddress(getPhoneNumber(request), TelecomManager.PRESENTATION_ALLOWED);
    simulatorConnectionsBank.add(connection);
    ThreadUtil.postOnUiThread(
        () ->
@@ -138,11 +145,6 @@ public class SimulatorConnectionService extends ConnectionService {
    }
  }

  private static Uri getPhoneNumber(ConnectionRequest request) {
    String phoneNumber = request.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
    return Uri.fromParts(PhoneAccount.SCHEME_TEL, phoneNumber, null);
  }

  /** Callback used to notify listeners when a new connection has been added. */
  public interface Listener {
    void onNewOutgoingConnection(@NonNull SimulatorConnection connection);
@@ -152,4 +154,9 @@ public class SimulatorConnectionService extends ConnectionService {
    void onConference(
        @NonNull SimulatorConnection connection1, @NonNull SimulatorConnection connection2);
  }

  private static Uri getPhoneNumber(ConnectionRequest request) {
    String phoneNumber = request.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
    return Uri.fromParts(PhoneAccount.SCHEME_TEL, phoneNumber, null);
  }
}
Loading