diff options
author | Evan Charlton <evanc@google.com> | 2014-07-17 17:01:10 -0700 |
---|---|---|
committer | Evan Charlton <evanc@google.com> | 2014-07-19 21:22:37 +0000 |
commit | 0786dba0baa54fd12697b4795e7c646cfe4ae5c3 (patch) | |
tree | 138224f84c1781a10d674d3199ad0fe5518d69a6 /InCallUI | |
parent | 28d90d7b5800f19194bade2a29cf1134e5a17f41 (diff) |
Show callback numbers when appropriate
When a callback number is set, make the decision about when (and how)
to show it to the user. The number is shown when it's different than
the user's known line 1 number. If the call is placed to an emergency
service, then make sure the user knows that.
Bug: 13333595
Change-Id: I0d3b2cfcea08aeba760c392c116303f21beb70d3
Diffstat (limited to 'InCallUI')
-rw-r--r-- | InCallUI/res/values/strings.xml | 9 | ||||
-rw-r--r-- | InCallUI/src/com/android/incallui/CallCardFragment.java | 7 | ||||
-rw-r--r-- | InCallUI/src/com/android/incallui/CallCardPresenter.java | 54 |
3 files changed, 61 insertions, 9 deletions
diff --git a/InCallUI/res/values/strings.xml b/InCallUI/res/values/strings.xml index dbbfc129c..654eb7dd2 100644 --- a/InCallUI/res/values/strings.xml +++ b/InCallUI/res/values/strings.xml @@ -156,6 +156,15 @@ <!-- In-call screen: status label when there is a problem connecting a video call. --> <string name="card_title_video_call_error">Cannot connect video call</string> + <!-- In-call screen: string shown to the user when their outgoing number is different than the + number reported by TelephonyManager#getLine1Number() --> + <string name="card_title_callback_number">Your call back number\n + <xliff:g id="dark_number">%1$s</xliff:g> + </string> + + <!-- In-call screen: string shown to the user when their outgoing number is different than the + number reported by TelephonyManager#getLine1Number() and they're calling emergency + services. --> <string name="card_title_callback_number_emergency">Your emergency call back number\n <xliff:g id="dark_number">%1$s</xliff:g> </string> diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java index 13852f9ac..6a999052d 100644 --- a/InCallUI/src/com/android/incallui/CallCardFragment.java +++ b/InCallUI/src/com/android/incallui/CallCardFragment.java @@ -369,7 +369,7 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr } @Override - public void setEmergencyCallbackNumber(String callbackNumber) { + public void setCallbackNumber(String callbackNumber, boolean isEmergencyCall) { if (TextUtils.isEmpty(callbackNumber)) { mInCallMessageLabel.setVisibility(View.GONE); return; @@ -378,7 +378,10 @@ public class CallCardFragment extends BaseFragment<CallCardPresenter, CallCardPr // TODO: The new Locale-specific methods don't seem to be working. Revisit this. callbackNumber = PhoneNumberUtils.formatNumber(callbackNumber); - String text = getString(R.string.card_title_callback_number_emergency, callbackNumber); + int stringResourceId = isEmergencyCall ? R.string.card_title_callback_number_emergency + : R.string.card_title_callback_number; + + String text = getString(stringResourceId, callbackNumber); mInCallMessageLabel.setText(text); mInCallMessageLabel.setVisibility(View.VISIBLE); diff --git a/InCallUI/src/com/android/incallui/CallCardPresenter.java b/InCallUI/src/com/android/incallui/CallCardPresenter.java index 5ba67ff94..d7c0d8258 100644 --- a/InCallUI/src/com/android/incallui/CallCardPresenter.java +++ b/InCallUI/src/com/android/incallui/CallCardPresenter.java @@ -29,6 +29,7 @@ import android.telecomm.TelecommConstants; import android.telecomm.TelecommManager; import android.telephony.DisconnectCause; import android.telephony.PhoneNumberUtils; +import android.telephony.TelephonyManager; import android.text.TextUtils; import android.text.format.DateUtils; @@ -197,6 +198,12 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> getUi().setCallState(callState, mPrimary.getDisconnectCause(), getConnectionLabel(), getConnectionIcon(), getGatewayNumber()); + + String currentNumber = mPrimary.getHandle().getSchemeSpecificPart(); + if (PhoneNumberUtils.isEmergencyNumber(currentNumber)) { + String callbackNumber = getSubscriptionNumber(); + setCallbackNumber(callbackNumber, true); + } } else { getUi().setCallState(callState, DisconnectCause.NOT_VALID, null, null, null); } @@ -211,22 +218,41 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> getUi().setCallDetails(details); if (mPrimary != null) { - String currentNumber = mPrimary.getHandle().getSchemeSpecificPart(); - if (PhoneNumberUtils.isEmergencyNumber(currentNumber)) { - setEmergencyNumberIfSet(details); + setCallbackNumberIfSet(details); + } + } + + private String getSubscriptionNumber() { + // If it's an emergency call, and they're not populating the callback number, + // then try to fall back to the phone sub info (to hopefully get the SIM's + // number directly from the telephony layer). + PhoneAccount account = mPrimary.getAccount(); + if (account != null) { + TelecommManager mgr = TelecommManager.from(mContext); + PhoneAccountMetadata metadata = mgr.getPhoneAccountMetadata(account); + if (metadata != null) { + return metadata.getSubscriptionNumber(); } } + return null; } - private void setEmergencyNumberIfSet(android.telecomm.Call.Details details) { + private void setCallbackNumberIfSet(android.telecomm.Call.Details details) { String callbackNumber = null; + String currentNumber = mPrimary.getHandle().getSchemeSpecificPart(); + boolean isEmergencyCall = PhoneNumberUtils.isEmergencyNumber(currentNumber); + StatusHints statusHints = details.getStatusHints(); if (statusHints != null) { Bundle extras = statusHints.getExtras(); if (extras != null) { callbackNumber = extras.getString( - TelecommConstants.EXTRA_EMERGENCY_CALL_BACK_NUMBER, null); + TelecommConstants.EXTRA_CALL_BACK_NUMBER, null); + + if (isEmergencyCall) { + callbackNumber = getSubscriptionNumber(); + } } else { Log.d(this, "No extras; not updating callback number"); } @@ -234,7 +260,21 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> Log.d(this, "No status hints; not updating callback number"); } - getUi().setEmergencyCallbackNumber(callbackNumber); + setCallbackNumber(callbackNumber, isEmergencyCall); + } + + private void setCallbackNumber(String callbackNumber, boolean isEmergencyCall) { + if (TextUtils.isEmpty(callbackNumber)) { + Log.d(this, "No callback number; aborting"); + return; + } + + String simNumber = TelephonyManager.from(mContext).getLine1Number(); + if (!PhoneNumberUtils.compare(callbackNumber, simNumber) && !isEmergencyCall) { + Log.d(this, "Numbers are the same; not showing the callback number"); + return; + } + getUi().setCallbackNumber(callbackNumber, isEmergencyCall); } @Override @@ -571,7 +611,7 @@ public class CallCardPresenter extends Presenter<CallCardPresenter.CallCardUi> void setPrimaryPhoneNumber(String phoneNumber); void setPrimaryLabel(String label); void setEndCallButtonEnabled(boolean enabled); - void setEmergencyCallbackNumber(String number); + void setCallbackNumber(String number, boolean isEmergencyCalls); void setCallDetails(android.telecomm.Call.Details details); } |