summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/speeddial/DisambigDialog.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/speeddial/DisambigDialog.java')
-rw-r--r--java/com/android/dialer/speeddial/DisambigDialog.java64
1 files changed, 59 insertions, 5 deletions
diff --git a/java/com/android/dialer/speeddial/DisambigDialog.java b/java/com/android/dialer/speeddial/DisambigDialog.java
index 6f7403a21..0d29a9c84 100644
--- a/java/com/android/dialer/speeddial/DisambigDialog.java
+++ b/java/com/android/dialer/speeddial/DisambigDialog.java
@@ -17,42 +17,59 @@
package com.android.dialer.speeddial;
import android.app.Dialog;
+import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.VisibleForTesting;
+import android.support.annotation.WorkerThread;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AlertDialog;
import android.util.ArraySet;
import android.view.LayoutInflater;
import android.view.View;
+import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.dialer.callintent.CallInitiationType;
import com.android.dialer.callintent.CallIntentBuilder;
+import com.android.dialer.common.Assert;
+import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.DefaultFutureCallback;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.constants.ActivityRequestCodes;
import com.android.dialer.duo.DuoComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.precall.PreCall;
+import com.android.dialer.speeddial.database.SpeedDialEntry;
import com.android.dialer.speeddial.database.SpeedDialEntry.Channel;
+import com.android.dialer.speeddial.database.SpeedDialEntryDatabaseHelper;
+import com.android.dialer.speeddial.loader.SpeedDialUiItem;
+import com.google.common.collect.ImmutableList;
+import com.google.common.util.concurrent.Futures;
+import com.google.common.util.concurrent.ListenableFuture;
import java.util.List;
import java.util.Set;
/** Disambiguation dialog for favorite contacts in {@link SpeedDialFragment}. */
public class DisambigDialog extends DialogFragment {
+ @VisibleForTesting public static final String FRAGMENT_TAG = "disambig_dialog";
private final Set<String> phoneNumbers = new ArraySet<>();
+ private SpeedDialUiItem speedDialUiItem;
@VisibleForTesting public List<Channel> channels;
@VisibleForTesting public LinearLayout container;
+ private CheckBox rememberThisChoice;
/** Show a disambiguation dialog for a starred contact without a favorite communication avenue. */
- public static DisambigDialog show(List<Channel> channels, FragmentManager manager) {
+ public static DisambigDialog show(SpeedDialUiItem speedDialUiItem, FragmentManager manager) {
DisambigDialog dialog = new DisambigDialog();
- dialog.channels = channels;
- dialog.show(manager, null);
+ dialog.speedDialUiItem = speedDialUiItem;
+ dialog.channels = speedDialUiItem.channels();
+ dialog.show(manager, FRAGMENT_TAG);
return dialog;
}
@@ -62,6 +79,7 @@ public class DisambigDialog extends DialogFragment {
// TODO(calderwoodra): set max height of the scrollview. Might need to override onMeasure.
View view = inflater.inflate(R.layout.disambig_dialog_layout, null, false);
container = view.findViewById(R.id.communication_avenue_container);
+ rememberThisChoice = view.findViewById(R.id.remember_this_choice_checkbox);
insertOptions(container.findViewById(R.id.communication_avenue_container), channels);
return new AlertDialog.Builder(getActivity()).setView(view).create();
}
@@ -132,7 +150,10 @@ public class DisambigDialog extends DialogFragment {
}
private void onVideoOptionClicked(Channel channel) {
- // TODO(calderwoodra): save this option if remember is checked
+ if (rememberThisChoice.isChecked()) {
+ setDefaultChannel(getContext().getApplicationContext(), speedDialUiItem, channel);
+ }
+
if (channel.technology() == Channel.DUO) {
Logger.get(getContext())
.logImpression(
@@ -151,9 +172,42 @@ public class DisambigDialog extends DialogFragment {
}
private void onVoiceOptionClicked(Channel channel) {
- // TODO(calderwoodra): save this option if remember is checked
+ if (rememberThisChoice.isChecked()) {
+ setDefaultChannel(getContext().getApplicationContext(), speedDialUiItem, channel);
+ }
+
PreCall.start(
getContext(), new CallIntentBuilder(channel.number(), CallInitiationType.Type.SPEED_DIAL));
dismiss();
}
+
+ private static void setDefaultChannel(Context appContext, SpeedDialUiItem item, Channel channel) {
+ LogUtil.enterBlock("DisambigDialog.setDefaultChannel");
+ ListenableFuture<Void> future =
+ DialerExecutorComponent.get(appContext)
+ .backgroundExecutor()
+ .submit(
+ () -> {
+ updateDatabaseEntry(appContext, item, channel);
+ return null;
+ });
+ Futures.addCallback(
+ future,
+ new DefaultFutureCallback<>(),
+ DialerExecutorComponent.get(appContext).backgroundExecutor());
+ }
+
+ @WorkerThread
+ private static void updateDatabaseEntry(
+ Context appContext, SpeedDialUiItem item, Channel channel) {
+ Assert.isWorkerThread();
+ SpeedDialEntry entry =
+ SpeedDialEntry.builder()
+ .setId(item.speedDialEntryId())
+ .setContactId(item.contactId())
+ .setLookupKey(item.lookupKey())
+ .setDefaultChannel(channel)
+ .build();
+ new SpeedDialEntryDatabaseHelper(appContext).update(ImmutableList.of(entry));
+ }
}