Merge "NUI favorite logging"
am: 3d97f592b5

Change-Id: Iaef07b61c6125ce28c232239c1747a019efbfb34
diff --git a/java/com/android/dialer/callintent/call_initiation_type.proto b/java/com/android/dialer/callintent/call_initiation_type.proto
index 27d4461..3823e49 100644
--- a/java/com/android/dialer/callintent/call_initiation_type.proto
+++ b/java/com/android/dialer/callintent/call_initiation_type.proto
@@ -21,6 +21,7 @@
     DIALPAD = 2;
 
     SPEED_DIAL = 3;
+    SPEED_DIAL_DISAMBIG_DIALOG = 20;
 
     REMOTE_DIRECTORY = 4;
 
diff --git a/java/com/android/dialer/logging/dialer_impression.proto b/java/com/android/dialer/logging/dialer_impression.proto
index 96775ca..f3173f8 100644
--- a/java/com/android/dialer/logging/dialer_impression.proto
+++ b/java/com/android/dialer/logging/dialer_impression.proto
@@ -12,7 +12,7 @@
   // Event enums to be used for Impression Logging in Dialer.
   // It's perfectly acceptable for this enum to be large
   // Values should be from 1000 to 100000.
-  // Next Tag: 1399
+  // Next Tag: 1409
   enum Type {
     UNKNOWN_AOSP_EVENT_TYPE = 1000;
 
@@ -783,5 +783,19 @@
     // Impressions for PhoneLookup
     PEOPLE_API_PHONE_LOOKUP_TIMEOUT = 1397;
     CP2_EXTENDED_DIRECTORY_PHONE_LOOKUP_TIMEOUT = 1398;
+
+    // Favorite general
+    FAVORITE_ADD_FAVORITE = 1399;
+    FAVORITE_OPEN_DISAMBIG_DIALOG = 1400;
+    FAVORITE_REMOVE_FAVORITE_BY_DRAG_AND_DROP = 1401;
+    FAVORITE_MOVE_FAVORITE_BY_DRAG_AND_DROP = 1402;
+    // Favorite menu
+    FAVORITE_OPEN_FAVORITE_MENU = 1403;
+    FAVORITE_SEND_MESSAGE = 1404;
+    FAVORITE_OPEN_CONTACT_CARD = 1405;
+    FAVORITE_REMOVE_FAVORITE = 1406;  // Include drag and drop
+    // Favorite disambig
+    FAVORITE_SET_VIDEO_DEFAULT = 1407;
+    FAVORITE_SET_VOICE_DEFAULT = 1408;
   }
 }
diff --git a/java/com/android/dialer/speeddial/DisambigDialog.java b/java/com/android/dialer/speeddial/DisambigDialog.java
index 868f91d..15b8109 100644
--- a/java/com/android/dialer/speeddial/DisambigDialog.java
+++ b/java/com/android/dialer/speeddial/DisambigDialog.java
@@ -61,7 +61,7 @@
   private SpeedDialUiItem speedDialUiItem;
   @VisibleForTesting public List<Channel> channels;
   @VisibleForTesting public LinearLayout container;
-  private CheckBox rememberThisChoice;
+  @VisibleForTesting public CheckBox rememberThisChoice;
 
   /** Show a disambiguation dialog for a starred contact without a favorite communication avenue. */
   public static DisambigDialog show(SpeedDialUiItem speedDialUiItem, FragmentManager manager) {
@@ -174,6 +174,7 @@
 
   private void onVideoOptionClicked(Channel channel) {
     if (rememberThisChoice.isChecked()) {
+      Logger.get(getContext()).logImpression(DialerImpression.Type.FAVORITE_SET_VIDEO_DEFAULT);
       setDefaultChannel(getContext().getApplicationContext(), speedDialUiItem, channel);
     }
 
@@ -185,7 +186,7 @@
 
     PreCall.start(
         getContext(),
-        new CallIntentBuilder(channel.number(), CallInitiationType.Type.SPEED_DIAL)
+        new CallIntentBuilder(channel.number(), CallInitiationType.Type.SPEED_DIAL_DISAMBIG_DIALOG)
             .setAllowAssistedDial(true)
             .setIsVideoCall(true)
             .setIsDuoCall(channel.technology() == Channel.DUO));
@@ -194,12 +195,13 @@
 
   private void onVoiceOptionClicked(Channel channel) {
     if (rememberThisChoice.isChecked()) {
+      Logger.get(getContext()).logImpression(DialerImpression.Type.FAVORITE_SET_VOICE_DEFAULT);
       setDefaultChannel(getContext().getApplicationContext(), speedDialUiItem, channel);
     }
 
     PreCall.start(
         getContext(),
-        new CallIntentBuilder(channel.number(), CallInitiationType.Type.SPEED_DIAL)
+        new CallIntentBuilder(channel.number(), CallInitiationType.Type.SPEED_DIAL_DISAMBIG_DIALOG)
             .setAllowAssistedDial(true));
     dismiss();
   }
diff --git a/java/com/android/dialer/speeddial/SpeedDialFragment.java b/java/com/android/dialer/speeddial/SpeedDialFragment.java
index aabf28b..a958d44 100644
--- a/java/com/android/dialer/speeddial/SpeedDialFragment.java
+++ b/java/com/android/dialer/speeddial/SpeedDialFragment.java
@@ -28,6 +28,7 @@
 import android.provider.ContactsContract.Contacts;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.FragmentActivity;
 import android.support.v4.app.FragmentManager;
@@ -162,7 +163,7 @@
     recyclerView.setAdapter(adapter);
 
     // Setup drag and drop touch helper
-    ItemTouchHelper.Callback callback = new SpeedDialItemTouchHelperCallback(adapter);
+    ItemTouchHelper.Callback callback = new SpeedDialItemTouchHelperCallback(getContext(), adapter);
     ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
     touchHelper.attachToRecyclerView(recyclerView);
     adapter.setItemTouchHelper(touchHelper);
@@ -249,6 +250,7 @@
   public void onActivityResult(int requestCode, int resultCode, Intent data) {
     if (requestCode == ActivityRequestCodes.SPEED_DIAL_ADD_FAVORITE) {
       if (resultCode == AppCompatActivity.RESULT_OK && data.getData() != null) {
+        Logger.get(getContext()).logImpression(DialerImpression.Type.FAVORITE_ADD_FAVORITE);
         updateSpeedDialItemsOnResume = false;
         speedDialLoaderListener.listen(
             getContext(),
@@ -335,7 +337,8 @@
     }
   }
 
-  private static final class SpeedDialFavoritesListener implements FavoriteContactsListener {
+  @VisibleForTesting
+  static final class SpeedDialFavoritesListener implements FavoriteContactsListener {
 
     private final FragmentActivity activity;
     private final FragmentManager childFragmentManager;
@@ -369,6 +372,7 @@
         return;
       }
 
+      Logger.get(activity).logImpression(DialerImpression.Type.FAVORITE_OPEN_DISAMBIG_DIALOG);
       DisambigDialog.show(speedDialUiItem, childFragmentManager);
     }
 
@@ -389,6 +393,7 @@
 
     @Override
     public void showContextMenu(View view, SpeedDialUiItem speedDialUiItem) {
+      Logger.get(activity).logImpression(DialerImpression.Type.FAVORITE_OPEN_FAVORITE_MENU);
       layoutManager.setScrollEnabled(false);
       contextMenu =
           ContextMenu.show(activity, view, speedDialContextMenuItemListener, speedDialUiItem);
@@ -406,6 +411,8 @@
 
     @Override
     public void onRequestRemove(SpeedDialUiItem speedDialUiItem) {
+      Logger.get(activity)
+          .logImpression(DialerImpression.Type.FAVORITE_REMOVE_FAVORITE_BY_DRAG_AND_DROP);
       speedDialContextMenuItemListener.removeFavoriteContact(speedDialUiItem);
     }
 
@@ -439,11 +446,13 @@
 
       @Override
       public void openSmsConversation(String number) {
+        Logger.get(activity).logImpression(DialerImpression.Type.FAVORITE_SEND_MESSAGE);
         activity.startActivity(IntentUtil.getSendSmsIntent(number));
       }
 
       @Override
       public void removeFavoriteContact(SpeedDialUiItem speedDialUiItem) {
+        Logger.get(activity).logImpression(DialerImpression.Type.FAVORITE_REMOVE_FAVORITE);
         speedDialLoaderListener.listen(
             activity,
             UiItemLoaderComponent.get(activity)
@@ -457,6 +466,7 @@
 
       @Override
       public void openContactInfo(SpeedDialUiItem speedDialUiItem) {
+        Logger.get(activity).logImpression(DialerImpression.Type.FAVORITE_OPEN_CONTACT_CARD);
         activity.startActivity(
             new Intent(
                 Intent.ACTION_VIEW,
diff --git a/java/com/android/dialer/speeddial/draghelper/SpeedDialItemTouchHelperCallback.java b/java/com/android/dialer/speeddial/draghelper/SpeedDialItemTouchHelperCallback.java
index fc963a1..2f5d87c 100644
--- a/java/com/android/dialer/speeddial/draghelper/SpeedDialItemTouchHelperCallback.java
+++ b/java/com/android/dialer/speeddial/draghelper/SpeedDialItemTouchHelperCallback.java
@@ -16,17 +16,21 @@
 
 package com.android.dialer.speeddial.draghelper;
 
+import android.content.Context;
 import android.graphics.Canvas;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.RecyclerView.ViewHolder;
 import android.support.v7.widget.helper.ItemTouchHelper;
+import com.android.dialer.logging.DialerImpression;
+import com.android.dialer.logging.Logger;
 
 /** {@link ItemTouchHelper} for Speed Dial favorite contacts. */
 public class SpeedDialItemTouchHelperCallback extends ItemTouchHelper.Callback {
 
   private final ItemTouchHelperAdapter adapter;
+  private final Context context;
 
   // When dragged item is in removeView, onMove() and onChildDraw() are called in turn. This
   // behavior changes when dragged item entering/leaving removeView. The boolean field
@@ -34,7 +38,8 @@
   private boolean movedOverRemoveView;
   private boolean inRemoveView;
 
-  public SpeedDialItemTouchHelperCallback(ItemTouchHelperAdapter adapter) {
+  public SpeedDialItemTouchHelperCallback(Context context, ItemTouchHelperAdapter adapter) {
+    this.context = context;
     this.adapter = adapter;
   }
 
@@ -91,6 +96,20 @@
   }
 
   @Override
+  public void onMoved(
+      @NonNull RecyclerView recyclerView,
+      @NonNull ViewHolder viewHolder,
+      int fromPos,
+      @NonNull ViewHolder viewHolder1,
+      int toPos,
+      int x,
+      int y) {
+    Logger.get(context)
+        .logImpression(DialerImpression.Type.FAVORITE_MOVE_FAVORITE_BY_DRAG_AND_DROP);
+    super.onMoved(recyclerView, viewHolder, fromPos, viewHolder1, toPos, x, y);
+  }
+
+  @Override
   public void onChildDraw(
       @NonNull Canvas canvas,
       @NonNull RecyclerView recyclerView,