From 50dbb6eeca55cf78e0fd9eb132a26787d293620a Mon Sep 17 00:00:00 2001 From: Andrew Lee Date: Fri, 12 Sep 2014 16:02:39 -0700 Subject: Update InCallUi to use telecomm DisconnectCause. - Remove conversion of messages for dialogs and failures. This is now done by Telephony. + Replace telephony DisconnectCause with telecomm DisconnectCause. Bug: 17329632 Id: I8677eb2cda008bd91f852c1de96174dfe42f735f Change-Id: I9e170537845a67ff9b14a38f5f3425de82648ab5 --- InCallUI/res/values/strings.xml | 40 -------- InCallUI/src/com/android/incallui/Call.java | 14 +-- .../src/com/android/incallui/CallCardFragment.java | 109 ++++----------------- .../com/android/incallui/CallCardPresenter.java | 10 +- InCallUI/src/com/android/incallui/CallList.java | 16 +-- .../src/com/android/incallui/InCallActivity.java | 79 ++------------- 6 files changed, 47 insertions(+), 221 deletions(-) (limited to 'InCallUI') diff --git a/InCallUI/res/values/strings.xml b/InCallUI/res/values/strings.xml index 06602cb2c..8e8a8e2bd 100644 --- a/InCallUI/res/values/strings.xml +++ b/InCallUI/res/values/strings.xml @@ -36,44 +36,6 @@ Pay phone - - Line busy - - Network busy - - No response, timed out - - Server unreachable - - Number unreachable - - Incorrect username or password - - Called from out-of-network - - Server error. Try again later. - - No signal - - ACM limit exceeded - - Radio off - - No SIM or SIM error - - Mobile network not available - - Outgoing calls are restricted by FDN. - - You can\'t make outgoing calls while call barring is on. - - All calls are restricted by access control. - - Emergency calls are restricted by access control. - - Normal calls are restricted by access control. - - Invalid number Conference call @@ -265,8 +227,6 @@ Unable to reject call. Unable to release call(s). - - Voicemail number unknown. SIP call diff --git a/InCallUI/src/com/android/incallui/Call.java b/InCallUI/src/com/android/incallui/Call.java index fe3feea55..d21da7888 100644 --- a/InCallUI/src/com/android/incallui/Call.java +++ b/InCallUI/src/com/android/incallui/Call.java @@ -21,12 +21,12 @@ import com.android.contacts.common.CallUtil; import android.content.Context; import android.net.Uri; import android.telecom.CallProperties; +import android.telecom.DisconnectCause; import android.telecom.PhoneCapabilities; import android.telecom.GatewayInfo; import android.telecom.InCallService.VideoCall; import android.telecom.PhoneAccountHandle; import android.telecom.VideoProfile; -import android.telephony.DisconnectCause; import java.util.ArrayList; import java.util.List; @@ -172,7 +172,7 @@ public final class Call { private final android.telecom.Call mTelecommCall; private final String mId; private int mState = State.INVALID; - private int mDisconnectCause; + private DisconnectCause mDisconnectCause; private int mSessionModificationState; private final List mChildCallIds = new ArrayList<>(); @@ -202,7 +202,7 @@ public final class Call { private void updateFromTelecommCall() { Log.d(this, "updateFromTelecommCall: " + mTelecommCall); setState(translateState(mTelecommCall.getState())); - setDisconnectCause(mTelecommCall.getDetails().getDisconnectCauseCode()); + setDisconnectCause(mTelecommCall.getDetails().getDisconnectCause()); if (mTelecommCall.getVideoCall() != null) { if (mVideoCallListener == null) { @@ -281,16 +281,16 @@ public final class Call { return getTelecommCall().getDetails().getCallerDisplayName(); } - /** Returns call disconnect cause; values are defined in {@link DisconnectCause}. */ - public int getDisconnectCause() { + /** Returns call disconnect cause, defined by {@link DisconnectCause}. */ + public DisconnectCause getDisconnectCause() { if (mState == State.DISCONNECTED || mState == State.IDLE) { return mDisconnectCause; } - return DisconnectCause.NOT_DISCONNECTED; + return new DisconnectCause(DisconnectCause.UNKNOWN); } - public void setDisconnectCause(int disconnectCause) { + public void setDisconnectCause(DisconnectCause disconnectCause) { mDisconnectCause = disconnectCause; } diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java index 90a9d0645..7b21665e1 100644 --- a/InCallUI/src/com/android/incallui/CallCardFragment.java +++ b/InCallUI/src/com/android/incallui/CallCardFragment.java @@ -27,8 +27,8 @@ import android.content.res.Configuration; import android.graphics.Point; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.telecom.DisconnectCause; import android.telecom.VideoProfile; -import android.telephony.DisconnectCause; import android.telephony.PhoneNumberUtils; import android.text.TextUtils; import android.view.Display; @@ -485,19 +485,23 @@ public class CallCardFragment extends BaseFragment callState, VideoProfile.VideoState.AUDIO_ONLY, Call.SessionModificationState.NO_REQUEST, - DisconnectCause.NOT_VALID, + new DisconnectCause(DisconnectCause.UNKNOWN), null, null, null); @@ -654,8 +655,9 @@ public class CallCardPresenter extends Presenter void setSecondary(boolean show, String name, boolean nameIsNumber, String label, String providerLabel, Drawable providerIcon, boolean isConference, boolean canManageConference); - void setCallState(int state, int videoState, int sessionModificationState, int cause, - String connectionLabel, Drawable connectionIcon, String gatewayNumber); + void setCallState(int state, int videoState, int sessionModificationState, + DisconnectCause disconnectCause, String connectionLabel, + Drawable connectionIcon, String gatewayNumber); void setPrimaryCallElapsedTime(boolean show, String duration); void setPrimaryName(String name, boolean nameIsNumber); void setPrimaryImage(Drawable image); diff --git a/InCallUI/src/com/android/incallui/CallList.java b/InCallUI/src/com/android/incallui/CallList.java index ea0448705..ed52071e9 100644 --- a/InCallUI/src/com/android/incallui/CallList.java +++ b/InCallUI/src/com/android/incallui/CallList.java @@ -22,8 +22,8 @@ import com.google.common.base.Preconditions; import android.os.Handler; import android.os.Message; +import android.telecom.DisconnectCause; import android.telecom.Phone; -import android.telephony.DisconnectCause; import java.util.Collections; import java.util.HashMap; @@ -84,7 +84,7 @@ public class CallList implements InCallPhoneListener { if (mCallByTelecommCall.containsKey(telecommCall)) { Call call = mCallByTelecommCall.get(telecommCall); call.setState(Call.State.DISCONNECTED); - call.setDisconnectCause(DisconnectCause.NOT_VALID); + call.setDisconnectCause(new DisconnectCause(DisconnectCause.UNKNOWN)); if (updateCallInMap(call)) { Log.w(this, "Removing call not previously disconnected " + call.getId()); } @@ -364,7 +364,7 @@ public class CallList implements InCallPhoneListener { state != Call.State.DISCONNECTED) { call.setState(Call.State.DISCONNECTED); - call.setDisconnectCause(DisconnectCause.NOT_VALID); + call.setDisconnectCause(new DisconnectCause(DisconnectCause.UNKNOWN)); updateCallInMap(call); } } @@ -442,18 +442,18 @@ public class CallList implements InCallPhoneListener { Preconditions.checkState(call.getState() == Call.State.DISCONNECTED); - final int cause = call.getDisconnectCause(); + final int cause = call.getDisconnectCause().getCode(); final int delay; switch (cause) { case DisconnectCause.LOCAL: delay = DISCONNECTED_CALL_SHORT_TIMEOUT_MS; break; - case DisconnectCause.NORMAL: + case DisconnectCause.REMOTE: delay = DISCONNECTED_CALL_MEDIUM_TIMEOUT_MS; break; - case DisconnectCause.INCOMING_REJECTED: - case DisconnectCause.INCOMING_MISSED: - case DisconnectCause.OUTGOING_CANCELED: + case DisconnectCause.REJECTED: + case DisconnectCause.MISSED: + case DisconnectCause.CANCELED: // no delay for missed/rejected incoming calls and canceled outgoing calls. delay = 0; break; diff --git a/InCallUI/src/com/android/incallui/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java index f4f8ca602..b511df467 100644 --- a/InCallUI/src/com/android/incallui/InCallActivity.java +++ b/InCallUI/src/com/android/incallui/InCallActivity.java @@ -29,7 +29,7 @@ import android.content.res.Configuration; import android.graphics.Point; import android.net.Uri; import android.os.Bundle; -import android.telephony.DisconnectCause; +import android.telecom.DisconnectCause; import android.text.TextUtils; import android.view.MenuItem; import android.view.animation.Animation; @@ -56,8 +56,6 @@ public class InCallActivity extends Activity { public static final String DIALPAD_TEXT_EXTRA = "InCallActivity.dialpad_text"; public static final String NEW_OUTGOING_CALL = "InCallActivity.new_outgoing_call"; - private static final int INVALID_RES_ID = -1; - private CallButtonFragment mCallButtonFragment; private CallCardFragment mCallCardFragment; private AnswerFragment mAnswerFragment; @@ -635,17 +633,13 @@ public class InCallActivity extends Activity { return super.dispatchPopulateAccessibilityEvent(event); } - /** - * @param cause disconnect cause as defined in {@link DisconnectCause} - */ - public void maybeShowErrorDialogOnDisconnect(int cause) { + public void maybeShowErrorDialogOnDisconnect(DisconnectCause disconnectCause) { Log.d(this, "maybeShowErrorDialogOnDisconnect"); - if (!isFinishing()) { - final int resId = getResIdForDisconnectCause(cause); - if (resId != INVALID_RES_ID) { - showErrorDialog(resId); - } + if (!isFinishing() && !TextUtils.isEmpty(disconnectCause.getDescription()) + && (disconnectCause.getCode() == DisconnectCause.ERROR || + disconnectCause.getCode() == DisconnectCause.RESTRICTED)) { + showErrorDialog(disconnectCause.getDescription()); } } @@ -660,8 +654,7 @@ public class InCallActivity extends Activity { /** * Utility function to bring up a generic "error" dialog. */ - private void showErrorDialog(int resId) { - final CharSequence msg = getResources().getText(resId); + private void showErrorDialog(CharSequence msg) { Log.i(this, "Show Dialog: " + msg); dismissPendingDialogs(); @@ -684,64 +677,6 @@ public class InCallActivity extends Activity { mDialog.show(); } - private int getResIdForDisconnectCause(int cause) { - switch (cause) { - case DisconnectCause.CALL_BARRED: - return R.string.callFailed_cb_enabled; - case DisconnectCause.FDN_BLOCKED: - return R.string.callFailed_fdn_only; - case DisconnectCause.CS_RESTRICTED: - return R.string.callFailed_dsac_restricted; - case DisconnectCause.CS_RESTRICTED_EMERGENCY: - return R.string.callFailed_dsac_restricted_emergency; - case DisconnectCause.CS_RESTRICTED_NORMAL: - return R.string.callFailed_dsac_restricted_normal; - case DisconnectCause.OUTGOING_FAILURE: - // We couldn't successfully place the call; there was some - // failure in the telephony layer. - // TODO: Need UI spec for this failure case; for now just - // show a generic error. - return R.string.incall_error_call_failed; - case DisconnectCause.OUTGOING_CANCELED: - // We don't want to show any dialog for the canceled case since the call was - // either canceled by the user explicitly (end-call button pushed immediately) - // or some other app canceled the call and immediately issued a new CALL to - // replace it. - return INVALID_RES_ID; - case DisconnectCause.POWER_OFF: - // Radio is explictly powered off, presumably because the - // device is in airplane mode. - // - // TODO: For now this UI is ultra-simple: we simply display - // a message telling the user to turn off airplane mode. - // But it might be nicer for the dialog to offer the option - // to turn the radio on right there (and automatically retry - // the call once network registration is complete.) - return R.string.incall_error_power_off; - case DisconnectCause.EMERGENCY_ONLY: - // Only emergency numbers are allowed, but we tried to dial - // a non-emergency number. - return R.string.incall_error_emergency_only; - case DisconnectCause.OUT_OF_SERVICE: - // No network connection. - return R.string.incall_error_out_of_service; - case DisconnectCause.NO_PHONE_NUMBER_SUPPLIED: - // The supplied Intent didn't contain a valid phone number. - // (This is rare and should only ever happen with broken - // 3rd-party apps.) For now just show a generic error. - return R.string.incall_error_no_phone_number_supplied; - case DisconnectCause.VOICEMAIL_NUMBER_MISSING: - // TODO: Need to bring up the "Missing Voicemail Number" dialog, which - // will ultimately take us to the Call Settings. - return R.string.incall_error_missing_voicemail_number; - case DisconnectCause.DIALED_MMI: - // TODO: Implement MMI; see MMIDialogActivity in packages/services/Telephony - return INVALID_RES_ID; - default: - return INVALID_RES_ID; - } - } - private void onDialogDismissed() { mDialog = null; InCallPresenter.getInstance().onDismissDialog(); -- cgit v1.2.3