diff options
Diffstat (limited to 'java')
9 files changed, 81 insertions, 1 deletions
diff --git a/java/com/android/dialer/callintent/CallIntentBuilder.java b/java/com/android/dialer/callintent/CallIntentBuilder.java index ff490c296..9d9fcf4da 100644 --- a/java/com/android/dialer/callintent/CallIntentBuilder.java +++ b/java/com/android/dialer/callintent/CallIntentBuilder.java @@ -25,6 +25,7 @@ import android.os.SystemClock; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.annotation.VisibleForTesting; +import android.telecom.Call.Details; import android.telecom.PhoneAccount; import android.telecom.PhoneAccountHandle; import android.telecom.TelecomManager; @@ -168,6 +169,7 @@ public class CallIntentBuilder implements Parcelable { return callSubject; } + /** Additional data the in call UI can read with {@link Details#getIntentExtras()} */ public Bundle getOutgoingCallExtras() { return outgoingCallExtras; } diff --git a/java/com/android/dialer/precall/impl/CallingAccountSelector.java b/java/com/android/dialer/precall/impl/CallingAccountSelector.java index b7f071d58..a5dc6a097 100644 --- a/java/com/android/dialer/precall/impl/CallingAccountSelector.java +++ b/java/com/android/dialer/precall/impl/CallingAccountSelector.java @@ -159,6 +159,11 @@ public class CallingAccountSelector implements PreCallAction { LogUtil.i( "CallingAccountSelector.processPreferredAccount", "Auto selected suggestion"); builder.setPhoneAccountHandle(result.getSuggestion().get().phoneAccountHandle); + builder + .getOutgoingCallExtras() + .putString( + SuggestionProvider.EXTRA_SIM_SUGGESTION_REASON, + result.getSuggestion().get().reason.name()); pendingAction.finish(); return; } diff --git a/java/com/android/dialer/preferredsim/suggestion/SuggestionProvider.java b/java/com/android/dialer/preferredsim/suggestion/SuggestionProvider.java index cfa37c883..f710f734c 100644 --- a/java/com/android/dialer/preferredsim/suggestion/SuggestionProvider.java +++ b/java/com/android/dialer/preferredsim/suggestion/SuggestionProvider.java @@ -30,6 +30,8 @@ import java.util.List; /** Provides hints to the user when selecting a SIM to make a call. */ public interface SuggestionProvider { + String EXTRA_SIM_SUGGESTION_REASON = "sim_suggestion_reason"; + /** The reason the suggestion is made. */ enum Reason { UNKNOWN, diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java index 8eb07c579..49f819bab 100644 --- a/java/com/android/incallui/CallCardPresenter.java +++ b/java/com/android/incallui/CallCardPresenter.java @@ -54,6 +54,7 @@ import com.android.dialer.multimedia.MultimediaData; import com.android.dialer.oem.MotorolaUtils; import com.android.dialer.phonenumberutil.PhoneNumberHelper; import com.android.dialer.postcall.PostCall; +import com.android.dialer.preferredsim.suggestion.SuggestionProvider; import com.android.incallui.ContactInfoCache.ContactCacheEntry; import com.android.incallui.ContactInfoCache.ContactInfoCacheCallback; import com.android.incallui.InCallPresenter.InCallDetailsListener; @@ -478,6 +479,7 @@ public class CallCardPresenter .setSessionModificationState(primary.getVideoTech().getSessionModificationState()) .setDisconnectCause(primary.getDisconnectCause()) .setConnectionLabel(getConnectionLabel()) + .setSimSuggestionReason(getSimSuggestionReason()) .setConnectionIcon(getCallStateIcon()) .setGatewayNumber(getGatewayNumber()) .setCallSubject(shouldShowCallSubject(primary) ? primary.getCallSubject() : null) @@ -988,6 +990,21 @@ public class CallCardPresenter return primary.getCallProviderLabel(); } + @Nullable + private SuggestionProvider.Reason getSimSuggestionReason() { + String value = + primary.getIntentExtras().getString(SuggestionProvider.EXTRA_SIM_SUGGESTION_REASON); + if (value == null) { + return null; + } + try { + return SuggestionProvider.Reason.valueOf(value); + } catch (IllegalArgumentException e) { + LogUtil.e("CallCardPresenter.getConnectionLabel", "unknown reason " + value); + return null; + } + } + private Drawable getCallStateIcon() { // Return connection icon if one exists. StatusHints statusHints = primary.getStatusHints(); diff --git a/java/com/android/incallui/contactgrid/ContactGridManager.java b/java/com/android/incallui/contactgrid/ContactGridManager.java index 327eaf2b8..d8b1f5004 100644 --- a/java/com/android/incallui/contactgrid/ContactGridManager.java +++ b/java/com/android/incallui/contactgrid/ContactGridManager.java @@ -244,6 +244,10 @@ public class ContactGridManager { statusTextView.setText(info.label); statusTextView.setVisibility(View.VISIBLE); statusTextView.setSingleLine(info.labelIsSingleLine); + // Required to start the marquee + // This will send a AccessibilityEvent.TYPE_VIEW_SELECTED, but has no observable effect on + // talkback. + statusTextView.setSelected(true); } if (info.icon == null) { diff --git a/java/com/android/incallui/contactgrid/TopRow.java b/java/com/android/incallui/contactgrid/TopRow.java index f551092d4..89300caa8 100644 --- a/java/com/android/incallui/contactgrid/TopRow.java +++ b/java/com/android/incallui/contactgrid/TopRow.java @@ -166,7 +166,22 @@ public class TopRow { private static CharSequence getLabelForDialing(Context context, PrimaryCallState state) { if (!TextUtils.isEmpty(state.connectionLabel()) && !state.isWifi()) { - return context.getString(R.string.incall_calling_via_template, state.connectionLabel()); + CharSequence label = getCallingViaLabel(context, state); + + if (state.isAssistedDialed() && state.assistedDialingExtras() != null) { + LogUtil.i("TopRow.getLabelForDialing", "using assisted dialing with via label."); + String countryCode = + String.valueOf(state.assistedDialingExtras().transformedNumberCountryCallingCode()); + label = + TextUtils.concat( + label, + " • ", + context.getString( + R.string.incall_connecting_assited_dialed_component, + countryCode, + state.assistedDialingExtras().userHomeCountryCode())); + } + return label; } else { if (state.isVideoCall()) { if (state.isWifi()) { @@ -189,6 +204,22 @@ public class TopRow { } } + private static CharSequence getCallingViaLabel(Context context, PrimaryCallState state) { + if (state.simSuggestionReason() != null) { + switch (state.simSuggestionReason()) { + case FREQUENT: + return context.getString( + R.string.incall_calling_on_recent_choice_template, state.connectionLabel()); + case INTRA_CARRIER: + return context.getString( + R.string.incall_calling_on_same_carrier_template, state.connectionLabel()); + default: + break; + } + } + return context.getString(R.string.incall_calling_via_template, state.connectionLabel()); + } + private static CharSequence getConnectionLabel(PrimaryCallState state) { if (!TextUtils.isEmpty(state.connectionLabel()) && (isAccount(state) || state.isWifi() || state.isConference())) { diff --git a/java/com/android/incallui/contactgrid/res/layout/incall_contactgrid_top_row.xml b/java/com/android/incallui/contactgrid/res/layout/incall_contactgrid_top_row.xml index 42066f286..2f9ca3ea8 100644 --- a/java/com/android/incallui/contactgrid/res/layout/incall_contactgrid_top_row.xml +++ b/java/com/android/incallui/contactgrid/res/layout/incall_contactgrid_top_row.xml @@ -40,6 +40,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" + android:ellipsize="marquee" + android:scrollHorizontally="true" android:textAppearance="@style/Dialer.Incall.TextAppearance" tools:text="Captain Holt"/> </LinearLayout> diff --git a/java/com/android/incallui/contactgrid/res/values/strings.xml b/java/com/android/incallui/contactgrid/res/values/strings.xml index c6bdb11ba..7c0f5a679 100644 --- a/java/com/android/incallui/contactgrid/res/values/strings.xml +++ b/java/com/android/incallui/contactgrid/res/values/strings.xml @@ -20,6 +20,14 @@ [CHAR LIMIT=40] --> <string name="incall_calling_via_template">Calling via <xliff:g id="provider_name">%s</xliff:g></string> + <!-- Title displayed in the overlay for outgoing calls when the provider is automatically chosen + because it is the same provider the callee is using. [CHAR LIMIT=60] --> + <string name="incall_calling_on_same_carrier_template">Calling on same carrier <xliff:g id="provider_name">%s</xliff:g></string> + + <!-- Title displayed in the overlay for outgoing calls when the provider is automatically chosen + because the user has selected it multiple times. [CHAR LIMIT=60] --> + <string name="incall_calling_on_recent_choice_template">Calling on recent choice <xliff:g id="provider_name">%s</xliff:g></string> + <!-- Displayed above the contact name during an outgoing phone call. Indicates that the call is in the connecting stage. --> <string name="incall_connecting">Calling…</string> @@ -27,6 +35,9 @@ <!-- Display information related to assisted dialing, for example Calling using +1 (US)… --> <string name="incall_connecting_assited_dialed">Calling using +<xliff:g example="1" id="ad_country_code">%1$s</xliff:g> (<xliff:g example="1" id="ad_user_home_locale">%2$s</xliff:g>)\u2026</string> + <!-- String appended to the outgoing call title for additional information related to assisted dialing, for example "Calling via <CARRIER> • Using +1 (US)… "--> + <string name="incall_connecting_assited_dialed_component">Using +<xliff:g example="1" id="ad_country_code">%1$s</xliff:g> (<xliff:g example="1" id="ad_user_home_locale">%2$s</xliff:g>)\u2026</string> + <!-- Displayed above the contact name when an external call is being pulled to the local device. --> <string name="incall_transferring">Transferring…</string> diff --git a/java/com/android/incallui/incall/protocol/PrimaryCallState.java b/java/com/android/incallui/incall/protocol/PrimaryCallState.java index 1d536e9b9..1d23036fc 100644 --- a/java/com/android/incallui/incall/protocol/PrimaryCallState.java +++ b/java/com/android/incallui/incall/protocol/PrimaryCallState.java @@ -23,6 +23,7 @@ import android.telecom.DisconnectCause; import android.text.TextUtils; import com.android.dialer.assisteddialing.TransformationInfo; import com.android.dialer.common.Assert; +import com.android.dialer.preferredsim.suggestion.SuggestionProvider; import com.android.incallui.call.DialerCall; import com.android.incallui.call.DialerCall.State; import com.android.incallui.videotech.utils.SessionModificationState; @@ -60,6 +61,9 @@ public abstract class PrimaryCallState { public abstract String connectionLabel(); @Nullable + public abstract SuggestionProvider.Reason simSuggestionReason(); + + @Nullable public abstract Drawable connectionIcon(); @Nullable @@ -141,6 +145,8 @@ public abstract class PrimaryCallState { public abstract Builder setConnectionLabel(String connectionLabel); + public abstract Builder setSimSuggestionReason(SuggestionProvider.Reason reason); + public abstract Builder setConnectionIcon(Drawable connectionIcon); public abstract Builder setGatewayNumber(String gatewayNumber); |