From 4fde0acedbfb4802ac3ee236507a0c5a485f59e7 Mon Sep 17 00:00:00 2001 From: twyen Date: Thu, 22 Mar 2018 18:04:23 -0700 Subject: Show SIM auto select reason in in call UI The assisted dialed string will also along show with the "calling via" label. To handle the long string, Top row is now a marquee. Bug: 72571130 Test: Unit tests PiperOrigin-RevId: 190156719 Change-Id: I18a13712bdc9d780f744ef65a1773d249e40fb15 --- .../dialer/callintent/CallIntentBuilder.java | 2 ++ .../precall/impl/CallingAccountSelector.java | 5 ++++ .../suggestion/SuggestionProvider.java | 2 ++ java/com/android/incallui/CallCardPresenter.java | 17 +++++++++++ .../incallui/contactgrid/ContactGridManager.java | 4 +++ java/com/android/incallui/contactgrid/TopRow.java | 33 +++++++++++++++++++++- .../res/layout/incall_contactgrid_top_row.xml | 2 ++ .../incallui/contactgrid/res/values/strings.xml | 11 ++++++++ .../incallui/incall/protocol/PrimaryCallState.java | 6 ++++ 9 files changed, 81 insertions(+), 1 deletion(-) 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"/> 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] --> Calling via %s + + Calling on same carrier %s + + + Calling on recent choice %s + Calling… @@ -27,6 +35,9 @@ Calling using +%1$s (%2$s)\u2026 + + Using +%1$s (%2$s)\u2026 + Transferring… 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; @@ -59,6 +60,9 @@ public abstract class PrimaryCallState { @Nullable public abstract String connectionLabel(); + @Nullable + public abstract SuggestionProvider.Reason simSuggestionReason(); + @Nullable public abstract Drawable connectionIcon(); @@ -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); -- cgit v1.2.3