Dialer: Revamp swipes to new functionalities

- Right swipe to delete
- Left swipe to Text msg

AICP:
- Cleanup some code
- Use icons currently available

Change-Id: I9d587c8de09746e937a974e193cf5cbb1f69cbf3
Signed-off-by: George Zacharia <george.zcharia@gmail.com>
Signed-off-by: Pranav Vashi <neobuddy89@gmail.com>
Signed-off-by: Pranav Temkar <pranavtemkar@gmail.com>
Signed-off-by: Jis G Jacob <studiokeys@blissroms.org>
diff --git a/java/com/android/dialer/app/calllog/CallLogFragment.java b/java/com/android/dialer/app/calllog/CallLogFragment.java
index 1d09740..3c46d44 100644
--- a/java/com/android/dialer/app/calllog/CallLogFragment.java
+++ b/java/com/android/dialer/app/calllog/CallLogFragment.java
@@ -27,6 +27,8 @@
 import android.database.ContentObserver;
 import android.database.Cursor;
 import android.graphics.Canvas;
+import android.graphics.PorterDuff;
+import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -71,6 +73,8 @@
 import com.android.dialer.location.GeoUtil;
 import com.android.dialer.oem.CequintCallerIdManager;
 import com.android.dialer.phonenumbercache.ContactInfoHelper;
+import com.android.dialer.theme.base.Theme;
+import com.android.dialer.theme.base.ThemeComponent;
 import com.android.dialer.util.PermissionsUtil;
 import com.android.dialer.widget.EmptyContentView;
 import com.android.dialer.widget.EmptyContentView.OnEmptyViewActionButtonClickedListener;
@@ -299,9 +303,25 @@
     return view;
   }
 
+  private String concatCallIds(long[] callIds) {
+      if (callIds == null || callIds.length == 0) {
+        return null;
+      }
+
+      StringBuilder str = new StringBuilder();
+      for (long callId : callIds) {
+        if (str.length() != 0) {
+          str.append(",");
+        }
+        str.append(callId);
+      }
+
+      return str.toString();
+    }
+
   protected void setupView(View view) {
     recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
-    SimpleCallback simpleCallback = new SimpleCallback(50, ItemTouchHelper.LEFT) {
+    SimpleCallback simpleCallback = new SimpleCallback(50, ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT) {
 
         @Override
         public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, RecyclerView.ViewHolder target) {
@@ -310,16 +330,46 @@
 
         @Override
         public void onSwiped(RecyclerView.ViewHolder holder, int direction) {
-            if (holder instanceof CallLogListItemViewHolder) {
-                CallLogListItemViewHolder viewHolder = ((CallLogListItemViewHolder) holder);
-                getContext().startActivity(new Intent(Intent.ACTION_CALL).setData(Uri.parse("tel: " + viewHolder.number)));
+            if (holder instanceof CallLogListItemViewHolder){
+                CallLogListItemViewHolder viewHolder = ((CallLogListItemViewHolder)holder);
+                if (direction == ItemTouchHelper.LEFT){
+                    getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms",viewHolder.number, null)));
+                    adapter.notifyItemChanged(holder.getAdapterPosition());
+                } else {
+                    //TODO: Make it thread safe
+                    getContext()
+                        .getContentResolver()
+                        .delete(
+                            CallLog.Calls.CONTENT_URI,
+                            CallLog.Calls._ID + " IN (" + concatCallIds(viewHolder.callIds) + ")" /* where */,
+                            null /* selectionArgs */);
+                }
             }
-            adapter.notifyItemChanged(holder.getAdapterPosition());
         }
 
         @Override
-        public void onChildDraw(Canvas c, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
-            super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
+        public void onChildDraw(Canvas canvas, RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) {
+            if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) {
+                boolean isTowardsRight = dX > 0;
+                Drawable icon =  getResources().getDrawable(isTowardsRight ? R.drawable.quantum_ic_delete_vd_theme_24 : R.drawable.quantum_ic_message_vd_theme_24);
+                int iconHorizontalMargin = 20;
+                int halfIconSize = icon.getIntrinsicHeight() / 2;
+                int top = viewHolder.itemView.getTop() + ((viewHolder.itemView.getBottom() - viewHolder.itemView.getTop()) / 2 - halfIconSize);
+                icon = icon.mutate();
+                Theme theme = ThemeComponent.get(getContext()).theme();
+                icon.setColorFilter(theme.getColorIcon(), PorterDuff.Mode.MULTIPLY);
+                if (dX > 0) { // Right swipe
+                    canvas.clipRect(viewHolder.itemView.getLeft(), viewHolder.itemView.getTop(), viewHolder.itemView.getLeft() + (int) dX, viewHolder.itemView.getBottom());
+                    icon.setBounds(viewHolder.itemView.getLeft() + iconHorizontalMargin, top, viewHolder.itemView.getLeft() + iconHorizontalMargin + icon.getIntrinsicWidth(), top + icon.getIntrinsicHeight()
+                    );
+                } else if (dX < 0) { // Left swipe
+                    canvas.clipRect(viewHolder.itemView.getRight() + (int) dX, viewHolder.itemView.getTop(), viewHolder.itemView.getRight(), viewHolder.itemView.getBottom());
+                    int imgLeft = viewHolder.itemView.getRight() - iconHorizontalMargin - halfIconSize * 2;
+                    icon.setBounds(imgLeft, top, viewHolder.itemView.getRight() - iconHorizontalMargin, top + icon.getIntrinsicHeight());
+                }
+                icon.draw(canvas);
+            }
+            super.onChildDraw(canvas, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive);
         }
     };