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);
}
};