summaryrefslogtreecommitdiff
path: root/InCallUI
diff options
context:
space:
mode:
authorEvan Charlton <evanc@google.com>2014-07-17 17:01:10 -0700
committerEvan Charlton <evanc@google.com>2014-07-19 21:22:37 +0000
commit0786dba0baa54fd12697b4795e7c646cfe4ae5c3 (patch)
tree138224f84c1781a10d674d3199ad0fe5518d69a6 /InCallUI
parent28d90d7b5800f19194bade2a29cf1134e5a17f41 (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.xml9
-rw-r--r--InCallUI/src/com/android/incallui/CallCardFragment.java7
-rw-r--r--InCallUI/src/com/android/incallui/CallCardPresenter.java54
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);
}