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

Commit 69674662 authored by wangqi's avatar wangqi Committed by Brandon Maxwell
Browse files

Add video call not available dialog.

When telecom disconnect the video call with the code of DisconnectCause.ERROR and the DisconnectCause#getReason() of "IMS_ACCESS_BLOCKED", we should show an error dialog to user indicating that video call is not available and providing a option to make a voice call instead.

Screenshots:
https://screenshot.googleplex.com/YTUGVouoLmj
Bug: 33821263
Test: manual, VideoCallNotAvailablePromptTest
PiperOrigin-RevId: 160563754
Change-Id: Ie2eb735a92c577b5ae5a5e8b7efa2d699fc964bc
parent fca38276
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -109,6 +109,7 @@ RES_DIRS := \
	$(BASE_DIR)/incallui/calllocation/impl/res \
	$(BASE_DIR)/incallui/commontheme/res \
	$(BASE_DIR)/incallui/contactgrid/res \
	$(BASE_DIR)/incallui/disconnectdialog/res \
	$(BASE_DIR)/incallui/hold/res \
	$(BASE_DIR)/incallui/incall/impl/res \
	$(BASE_DIR)/incallui/res \
@@ -117,7 +118,6 @@ RES_DIRS := \
	$(BASE_DIR)/incallui/telecomeventui/res \
	$(BASE_DIR)/incallui/video/impl/res \
	$(BASE_DIR)/incallui/video/protocol/res \
	$(BASE_DIR)/incallui/wifi/res \
	$(BASE_DIR)/voicemail/impl/res \


@@ -169,6 +169,7 @@ DIALER_MANIFEST_FILES += \
	$(BASE_DIR)/incallui/autoresizetext/AndroidManifest.xml \
	$(BASE_DIR)/incallui/commontheme/AndroidManifest.xml \
	$(BASE_DIR)/incallui/contactgrid/AndroidManifest.xml \
	$(BASE_DIR)/incallui/disconnectdialog/AndroidManifest.xml \
	$(BASE_DIR)/incallui/hold/AndroidManifest.xml \
	$(BASE_DIR)/incallui/incall/impl/AndroidManifest.xml \
	$(BASE_DIR)/incallui/sessiondata/AndroidManifest.xml \
@@ -176,7 +177,6 @@ DIALER_MANIFEST_FILES += \
	$(BASE_DIR)/incallui/telecomeventui/AndroidManifest.xml \
	$(BASE_DIR)/incallui/video/impl/AndroidManifest.xml \
	$(BASE_DIR)/incallui/video/protocol/AndroidManifest.xml \
	$(BASE_DIR)/incallui/wifi/AndroidManifest.xml \
	$(BASE_DIR)/voicemail/AndroidManifest.xml \
	$(BASE_DIR)/voicemail/impl/AndroidManifest.xml \

@@ -246,6 +246,7 @@ LOCAL_AAPT_FLAGS := \
	--extra-packages com.android.incallui.calllocation.impl \
	--extra-packages com.android.incallui.commontheme \
	--extra-packages com.android.incallui.contactgrid \
	--extra-packages com.android.incallui.disconnectdialog \
	--extra-packages com.android.incallui.hold \
	--extra-packages com.android.incallui.incall.impl \
	--extra-packages com.android.incallui.maps.impl \
@@ -254,7 +255,6 @@ LOCAL_AAPT_FLAGS := \
	--extra-packages com.android.incallui.telecomeventui \
	--extra-packages com.android.incallui.video \
	--extra-packages com.android.incallui.video.impl \
	--extra-packages com.android.incallui.wifi \
	--extra-packages com.android.phone.common \
	--extra-packages com.android.voicemail \
	--extra-packages com.android.voicemail.impl \
+2 −0
Original line number Diff line number Diff line
@@ -58,5 +58,7 @@ message CallInitiationType {
    MISSED_CALL_NOTIFICATION = 15;

    CALL_SUBJECT_DIALOG = 16;

    IMS_VIDEO_BLOCKED_FALLBACK_TO_VOICE = 17;
  }
}
+3 −3
Original line number Diff line number Diff line
@@ -28,7 +28,6 @@ import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.graphics.ColorUtils;
import android.telecom.DisconnectCause;
import android.telephony.TelephonyManager;
import android.view.KeyEvent;
import android.view.MenuItem;
@@ -48,6 +47,7 @@ import com.android.incallui.answerproximitysensor.PseudoScreenState;
import com.android.incallui.call.CallList;
import com.android.incallui.call.DialerCall;
import com.android.incallui.call.DialerCall.State;
import com.android.incallui.disconnectdialog.DisconnectMessage;
import com.android.incallui.incall.bindings.InCallBindings;
import com.android.incallui.incall.protocol.InCallButtonUiDelegate;
import com.android.incallui.incall.protocol.InCallButtonUiDelegateFactory;
@@ -393,8 +393,8 @@ public class InCallActivity extends TransactionSafeFragmentActivity
    common.showPostCharWaitDialog(callId, chars);
  }

  public void maybeShowErrorDialogOnDisconnect(DisconnectCause disconnectCause) {
    common.maybeShowErrorDialogOnDisconnect(disconnectCause);
  public void maybeShowErrorDialogOnDisconnect(DisconnectMessage disconnectMessage) {
    common.maybeShowErrorDialogOnDisconnect(disconnectMessage);
  }

  public void dismissPendingDialogs() {
+7 −31
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import android.app.ActivityManager.AppTask;
import android.app.ActivityManager.TaskDescription;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnCancelListener;
import android.content.DialogInterface.OnDismissListener;
@@ -36,10 +35,7 @@ import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.res.ResourcesCompat;
import android.telecom.DisconnectCause;
import android.telecom.PhoneAccountHandle;
import android.text.TextUtils;
import android.util.Pair;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
@@ -62,9 +58,9 @@ import com.android.incallui.call.CallList;
import com.android.incallui.call.DialerCall;
import com.android.incallui.call.DialerCall.State;
import com.android.incallui.call.TelecomAdapter;
import com.android.incallui.disconnectdialog.DisconnectMessage;
import com.android.incallui.telecomeventui.InternationalCallOnWifiDialogFragment;
import com.android.incallui.telecomeventui.InternationalCallOnWifiDialogFragment.Callback;
import com.android.incallui.wifi.EnableWifiCallingPrompt;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
@@ -497,18 +493,15 @@ public class InCallActivityCommon {
    }
  }

  public void maybeShowErrorDialogOnDisconnect(DisconnectCause cause) {
  public void maybeShowErrorDialogOnDisconnect(DisconnectMessage disconnectMessage) {
    LogUtil.i(
        "InCallActivityCommon.maybeShowErrorDialogOnDisconnect", "disconnect cause: %s", cause);
        "InCallActivityCommon.maybeShowErrorDialogOnDisconnect",
        "disconnect cause: %s",
        disconnectMessage);

    if (!inCallActivity.isFinishing()) {
      if (EnableWifiCallingPrompt.shouldShowPrompt(cause)) {
        Pair<Dialog, CharSequence> pair =
            EnableWifiCallingPrompt.createDialog(inCallActivity, cause);
        showErrorDialog(pair.first, pair.second);
      } else if (shouldShowDisconnectErrorDialog(cause)) {
        Pair<Dialog, CharSequence> pair = getDisconnectErrorDialog(inCallActivity, cause);
        showErrorDialog(pair.first, pair.second);
      if (disconnectMessage.dialog != null) {
        showErrorDialog(disconnectMessage.dialog, disconnectMessage.toastMessage);
      }
    }
  }
@@ -557,23 +550,6 @@ public class InCallActivityCommon {
    }
  }

  private static boolean shouldShowDisconnectErrorDialog(@NonNull DisconnectCause cause) {
    return !TextUtils.isEmpty(cause.getDescription())
        && (cause.getCode() == DisconnectCause.ERROR
            || cause.getCode() == DisconnectCause.RESTRICTED);
  }

  private static Pair<Dialog, CharSequence> getDisconnectErrorDialog(
      @NonNull Context context, @NonNull DisconnectCause cause) {
    CharSequence message = cause.getDescription();
    Dialog dialog =
        new AlertDialog.Builder(context)
            .setMessage(message)
            .setPositiveButton(android.R.string.ok, null)
            .create();
    return new Pair<>(dialog, message);
  }

  private void showErrorDialog(Dialog dialog, CharSequence message) {
    LogUtil.i("InCallActivityCommon.showErrorDialog", "message: %s", message);
    inCallActivity.dismissPendingDialogs();
+3 −1
Original line number Diff line number Diff line
@@ -54,6 +54,7 @@ import com.android.incallui.call.CallList;
import com.android.incallui.call.DialerCall;
import com.android.incallui.call.ExternalCallList;
import com.android.incallui.call.TelecomAdapter;
import com.android.incallui.disconnectdialog.DisconnectMessage;
import com.android.incallui.latencyreport.LatencyReport;
import com.android.incallui.legacyblocking.BlockedNumberContentObserver;
import com.android.incallui.spam.SpamCallListListener;
@@ -1249,7 +1250,8 @@ public class InCallPresenter implements CallList.Listener {
      if (call.getAccountHandle() == null && !call.isConferenceCall()) {
        setDisconnectCauseForMissingAccounts(call);
      }
      mInCallActivity.maybeShowErrorDialogOnDisconnect(call.getDisconnectCause());
      mInCallActivity.maybeShowErrorDialogOnDisconnect(
          new DisconnectMessage(mInCallActivity, call));
    }
  }

Loading