summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
diff options
context:
space:
mode:
authorerfanian <erfanian@google.com>2017-12-05 17:43:20 -0800
committerCopybara-Service <copybara-piper@google.com>2017-12-07 18:27:24 -0800
commit7772ec071f5ed2e2283e9a00215e8cf1fca9168a (patch)
tree3bb7d4eb7516f778a5b9ba91a40aa3c687041828 /java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
parent5194036b423d455a517d06b38fd616a8bbfc4896 (diff)
Add Assisted Dialing Call Details Implementation.
This includes all of the work specified in the UX layouts, with the exception of the parenthetical country code. Because the canonical mapping of dial prefixes to country codes is not contained in this package, some thought needs to be given on the best way to implement this part of the spec. This change also introduces a fallback error text, in case the client experiences bad data from the call log. Test: new unit tests PiperOrigin-RevId: 178038123 Change-Id: I88eec72a73820e092f24c5f53ee9520a42486ada
Diffstat (limited to 'java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java')
-rw-r--r--java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java93
1 files changed, 84 insertions, 9 deletions
diff --git a/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java b/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
index 1e08963ed..604a5e8dc 100644
--- a/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
+++ b/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
@@ -25,9 +25,16 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.QuickContactBadge;
+import android.widget.RelativeLayout;
import android.widget.TextView;
+import com.android.dialer.calldetails.CallDetailsActivity.AssistedDialingNumberParseWorker;
+import com.android.dialer.calldetails.CallDetailsEntries.CallDetailsEntry;
import com.android.dialer.calllogutils.CallbackActionHelper.CallbackAction;
import com.android.dialer.common.Assert;
+import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.DialerExecutor.FailureListener;
+import com.android.dialer.common.concurrent.DialerExecutor.SuccessListener;
+import com.android.dialer.compat.telephony.TelephonyManagerCompat;
import com.android.dialer.contactphoto.ContactPhotoManager;
import com.android.dialer.dialercontact.DialerContact;
import com.android.dialer.logging.InteractionEvent;
@@ -35,20 +42,22 @@ import com.android.dialer.logging.Logger;
/** ViewHolder for Header/Contact in {@link CallDetailsActivity}. */
public class CallDetailsHeaderViewHolder extends RecyclerView.ViewHolder
- implements OnClickListener {
+ implements OnClickListener, FailureListener {
- private final CallbackActionListener callbackActionListener;
+ private final CallDetailsHeaderListener callDetailsHeaderListener;
private final ImageView callbackButton;
private final TextView nameView;
private final TextView numberView;
private final TextView networkView;
private final QuickContactBadge contactPhoto;
private final Context context;
+ private final TextView assistedDialingInternationalDirectDialCodeAndCountryCodeText;
+ private final RelativeLayout assistedDialingContainer;
private DialerContact contact;
private @CallbackAction int callbackAction;
- CallDetailsHeaderViewHolder(View container, CallbackActionListener callbackActionListener) {
+ CallDetailsHeaderViewHolder(View container, CallDetailsHeaderListener callDetailsHeaderListener) {
super(container);
context = container.getContext();
callbackButton = container.findViewById(R.id.call_back_button);
@@ -56,14 +65,71 @@ public class CallDetailsHeaderViewHolder extends RecyclerView.ViewHolder
numberView = container.findViewById(R.id.phone_number);
networkView = container.findViewById(R.id.network);
contactPhoto = container.findViewById(R.id.quick_contact_photo);
+ assistedDialingInternationalDirectDialCodeAndCountryCodeText =
+ container.findViewById(R.id.assisted_dialing_text);
+ assistedDialingContainer = container.findViewById(R.id.assisted_dialing_container);
+
+ assistedDialingContainer.setOnClickListener(
+ callDetailsHeaderListener::openAssistedDialingSettings);
callbackButton.setOnClickListener(this);
- this.callbackActionListener = callbackActionListener;
+ this.callDetailsHeaderListener = callDetailsHeaderListener;
Logger.get(context)
.logQuickContactOnTouch(
contactPhoto, InteractionEvent.Type.OPEN_QUICK_CONTACT_FROM_CALL_DETAILS, true);
}
+ private boolean hasAssistedDialingFeature(Integer features) {
+ return (features & TelephonyManagerCompat.FEATURES_ASSISTED_DIALING)
+ == TelephonyManagerCompat.FEATURES_ASSISTED_DIALING;
+ }
+
+ void updateAssistedDialingInfo(CallDetailsEntry callDetailsEntry) {
+
+ if (callDetailsEntry != null && hasAssistedDialingFeature(callDetailsEntry.getFeatures())) {
+ showAssistedDialingContainer(true);
+ callDetailsHeaderListener.createAssistedDialerNumberParserTask(
+ new CallDetailsActivity.AssistedDialingNumberParseWorker(),
+ this::updateAssistedDialingText,
+ this::onFailure);
+
+ } else {
+ showAssistedDialingContainer(false);
+ }
+ }
+
+ private void showAssistedDialingContainer(boolean shouldShowContainer) {
+ if (shouldShowContainer) {
+ assistedDialingContainer.setVisibility(View.VISIBLE);
+ } else {
+ LogUtil.i(
+ "CallDetailsHeaderViewHolder.updateAssistedDialingInfo",
+ "hiding assisted dialing ui elements");
+ assistedDialingContainer.setVisibility(View.GONE);
+ }
+ }
+
+ private void updateAssistedDialingText(Integer countryCode) {
+
+ // Try and handle any poorly formed inputs.
+ if (countryCode <= 0) {
+ onFailure(new IllegalStateException());
+ return;
+ }
+
+ LogUtil.i(
+ "CallDetailsHeaderViewHolder.updateAssistedDialingText", "Updating Assisted Dialing Text");
+ assistedDialingInternationalDirectDialCodeAndCountryCodeText.setText(
+ context.getString(
+ R.string.assisted_dialing_country_code_entry, String.valueOf(countryCode)));
+ }
+
+ @Override
+ public void onFailure(Throwable unused) {
+ assistedDialingInternationalDirectDialCodeAndCountryCodeText.setText(
+ R.string.assisted_dialing_country_code_entry_failure);
+ }
+
/** Populates the contact info fields based on the current contact information. */
void updateContactInfo(DialerContact contact, @CallbackAction int callbackAction) {
this.contact = contact;
@@ -128,13 +194,14 @@ public class CallDetailsHeaderViewHolder extends RecyclerView.ViewHolder
if (view == callbackButton) {
switch (callbackAction) {
case CallbackAction.IMS_VIDEO:
- callbackActionListener.placeImsVideoCall(contact.getNumber());
+ callDetailsHeaderListener.placeImsVideoCall(contact.getNumber());
break;
case CallbackAction.DUO:
- callbackActionListener.placeDuoVideoCall(contact.getNumber());
+ callDetailsHeaderListener.placeDuoVideoCall(contact.getNumber());
break;
case CallbackAction.VOICE:
- callbackActionListener.placeVoiceCall(contact.getNumber(), contact.getPostDialDigits());
+ callDetailsHeaderListener.placeVoiceCall(
+ contact.getNumber(), contact.getPostDialDigits());
break;
case CallbackAction.NONE:
default:
@@ -145,8 +212,8 @@ public class CallDetailsHeaderViewHolder extends RecyclerView.ViewHolder
}
}
- /** Listener for making a callback */
- interface CallbackActionListener {
+ /** Listener for the call details header */
+ interface CallDetailsHeaderListener {
/** Places an IMS video call. */
void placeImsVideoCall(String phoneNumber);
@@ -156,5 +223,13 @@ public class CallDetailsHeaderViewHolder extends RecyclerView.ViewHolder
/** Place a traditional voice call. */
void placeVoiceCall(String phoneNumber, String postDialDigits);
+
+ /** Access the Assisted Dialing settings * */
+ void openAssistedDialingSettings(View view);
+
+ void createAssistedDialerNumberParserTask(
+ AssistedDialingNumberParseWorker worker,
+ SuccessListener<Integer> onSuccess,
+ FailureListener onFailure);
}
}