summaryrefslogtreecommitdiff
path: root/java/com/android/incallui/InCallActivityCommon.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/incallui/InCallActivityCommon.java')
-rw-r--r--java/com/android/incallui/InCallActivityCommon.java70
1 files changed, 67 insertions, 3 deletions
diff --git a/java/com/android/incallui/InCallActivityCommon.java b/java/com/android/incallui/InCallActivityCommon.java
index 01dc1bb36..4b0a3cd05 100644
--- a/java/com/android/incallui/InCallActivityCommon.java
+++ b/java/com/android/incallui/InCallActivityCommon.java
@@ -62,6 +62,8 @@ 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.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;
@@ -80,6 +82,7 @@ public class InCallActivityCommon {
private static final String TAG_SELECT_ACCOUNT_FRAGMENT = "tag_select_account_fragment";
private static final String TAG_DIALPAD_FRAGMENT = "tag_dialpad_fragment";
+ private static final String TAG_INTERNATIONAL_CALL_ON_WIFI = "tag_international_call_on_wifi";
@Retention(RetentionPolicy.SOURCE)
@IntDef({
@@ -107,7 +110,7 @@ public class InCallActivityCommon {
private String dtmfTextToPreopulate;
@DialpadRequestType private int showDialpadRequest = DIALPAD_REQUEST_NONE;
- private SelectPhoneAccountListener selectAccountListener =
+ private final SelectPhoneAccountListener selectAccountListener =
new SelectPhoneAccountListener() {
@Override
public void onPhoneAccountSelected(
@@ -133,6 +136,25 @@ public class InCallActivityCommon {
}
};
+ private InternationalCallOnWifiDialogFragment.Callback internationalCallOnWifiCallback =
+ new Callback() {
+ @Override
+ public void continueCall(@NonNull String callId) {
+ LogUtil.i("InCallActivityCommon.continueCall", "continuing call with id: %s", callId);
+ }
+
+ @Override
+ public void cancelCall(@NonNull String callId) {
+ DialerCall call = CallList.getInstance().getCallById(callId);
+ if (call == null) {
+ LogUtil.i("InCallActivityCommon.cancelCall", "call destroyed before dialog closed");
+ return;
+ }
+ LogUtil.i("InCallActivityCommon.cancelCall", "disconnecting international call on wifi");
+ call.disconnect();
+ }
+ };
+
public static void setIntentExtras(
Intent intent, boolean showDialpad, boolean newOutgoingCall, boolean isForFullScreen) {
if (showDialpad) {
@@ -210,6 +232,17 @@ public class InCallActivityCommon {
}
}
+ InternationalCallOnWifiDialogFragment existingInternationalFragment =
+ (InternationalCallOnWifiDialogFragment)
+ inCallActivity
+ .getSupportFragmentManager()
+ .findFragmentByTag(TAG_INTERNATIONAL_CALL_ON_WIFI);
+ if (existingInternationalFragment != null) {
+ LogUtil.i(
+ "InCallActivityCommon.onCreate", "international fragment exists attaching callback");
+ existingInternationalFragment.setCallback(internationalCallOnWifiCallback);
+ }
+
inCallOrientationEventListener = new InCallOrientationEventListener(inCallActivity);
}
@@ -300,7 +333,7 @@ public class InCallActivityCommon {
InCallPresenter.getInstance().updateIsChangingConfigurations();
}
- public void onNewIntent(Intent intent) {
+ void onNewIntent(Intent intent, boolean isRecreating) {
LogUtil.i("InCallActivityCommon.onNewIntent", "");
// We're being re-launched with a new Intent. Since it's possible for a
@@ -317,7 +350,10 @@ public class InCallActivityCommon {
// we can count on our onResume() method being called next.
// Just like in onCreate(), handle the intent.
- internalResolveIntent(intent);
+ // Skip if InCallActivity is going to recreate since this will be called in onCreate().
+ if (!isRecreating) {
+ internalResolveIntent(intent);
+ }
}
public boolean onBackPressed(boolean isInCallScreenVisible) {
@@ -414,6 +450,7 @@ public class InCallActivityCommon {
break;
case KeyEvent.KEYCODE_EQUALS:
break;
+ default: // fall out
}
return event.getRepeatCount() == 0 && handleDialerKeyDown(keyCode, event);
@@ -506,6 +543,18 @@ public class InCallActivityCommon {
selectPhoneAccountDialogFragment.dismiss();
selectPhoneAccountDialogFragment = null;
}
+
+ InternationalCallOnWifiDialogFragment internationalCallOnWifiFragment =
+ (InternationalCallOnWifiDialogFragment)
+ inCallActivity
+ .getSupportFragmentManager()
+ .findFragmentByTag(TAG_INTERNATIONAL_CALL_ON_WIFI);
+ if (internationalCallOnWifiFragment != null) {
+ LogUtil.i(
+ "InCallActivityCommon.dismissPendingDialogs",
+ "dismissing InternationalCallOnWifiDialogFragment");
+ internationalCallOnWifiFragment.dismiss();
+ }
}
private static boolean shouldShowDisconnectErrorDialog(@NonNull DisconnectCause cause) {
@@ -580,6 +629,21 @@ public class InCallActivityCommon {
}
}
+ void showInternationalCallOnWifiDialog(@NonNull DialerCall call) {
+ LogUtil.enterBlock("InCallActivityCommon.showInternationalCallOnWifiDialog");
+ if (!InternationalCallOnWifiDialogFragment.shouldShow(inCallActivity)) {
+ LogUtil.i(
+ "InCallActivityCommon.showInternationalCallOnWifiDialog",
+ "InternationalCallOnWifiDialogFragment.shouldShow returned false");
+ return;
+ }
+
+ InternationalCallOnWifiDialogFragment fragment =
+ InternationalCallOnWifiDialogFragment.newInstance(
+ call.getId(), internationalCallOnWifiCallback);
+ fragment.show(inCallActivity.getSupportFragmentManager(), TAG_INTERNATIONAL_CALL_ON_WIFI);
+ }
+
public void showWifiToLteHandoverToast(DialerCall call) {
if (call.hasShownWiFiToLteHandoverToast()) {
return;