From 01996a6113eb809d987fe031bebad4bc4530393b Mon Sep 17 00:00:00 2001 From: calderwoodra Date: Thu, 21 Dec 2017 12:48:35 -0800 Subject: Added context menu for favorite contacts in new speed dial. Bug: 36841782 Test: n/a PiperOrigin-RevId: 179847039 Change-Id: I5006e074fff4041eef54c9b81280097ac30be5b3 --- java/com/android/dialer/app/res/values/colors.xml | 1 - .../dialer/speeddial/FavoritesViewHolder.java | 56 +++++++++++++++-- .../dialer/speeddial/SpeedDialFragment.java | 14 ++++- .../res/drawable/context_menu_background.xml | 25 ++++++++ .../speeddial/res/layout/favorite_context_menu.xml | 72 ++++++++++++++++++++++ .../speeddial/res/layout/fragment_speed_dial.xml | 4 +- .../android/dialer/speeddial/res/values/dimens.xml | 15 +++++ .../dialer/speeddial/res/values/strings.xml | 15 +++++ .../android/dialer/speeddial/res/values/styles.xml | 27 ++++++++ .../com/android/dialer/theme/res/values/dimens.xml | 3 + 10 files changed, 222 insertions(+), 10 deletions(-) create mode 100644 java/com/android/dialer/speeddial/res/drawable/context_menu_background.xml create mode 100644 java/com/android/dialer/speeddial/res/layout/favorite_context_menu.xml create mode 100644 java/com/android/dialer/speeddial/res/values/styles.xml diff --git a/java/com/android/dialer/app/res/values/colors.xml b/java/com/android/dialer/app/res/values/colors.xml index 84a381f21..bb3662cda 100644 --- a/java/com/android/dialer/app/res/values/colors.xml +++ b/java/com/android/dialer/app/res/values/colors.xml @@ -68,7 +68,6 @@ @color/dialer_theme_color_20pct #eeeeee - #D8D8D8 @color/dialer_primary_text_color diff --git a/java/com/android/dialer/speeddial/FavoritesViewHolder.java b/java/com/android/dialer/speeddial/FavoritesViewHolder.java index f9eec8e79..4e8d4ad07 100644 --- a/java/com/android/dialer/speeddial/FavoritesViewHolder.java +++ b/java/com/android/dialer/speeddial/FavoritesViewHolder.java @@ -22,12 +22,16 @@ import android.database.Cursor; import android.net.Uri; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Contacts; +import android.support.annotation.VisibleForTesting; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; +import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.View.OnLongClickListener; import android.widget.FrameLayout; +import android.widget.LinearLayout.LayoutParams; +import android.widget.PopupWindow; import android.widget.QuickContactBadge; import android.widget.TextView; import com.android.dialer.common.Assert; @@ -44,6 +48,9 @@ public class FavoritesViewHolder extends RecyclerView.ViewHolder private final TextView nameView; private final TextView phoneType; private final FrameLayout videoCallIcon; + private final View contextMenuAnchor; + + private PopupWindow contextMenu; private boolean hasDefaultNumber; private boolean isVideoCall; @@ -56,6 +63,7 @@ public class FavoritesViewHolder extends RecyclerView.ViewHolder nameView = view.findViewById(R.id.name); phoneType = view.findViewById(R.id.phone_type); videoCallIcon = view.findViewById(R.id.video_call_container); + contextMenuAnchor = view.findViewById(R.id.avatar_container); view.setOnClickListener(this); view.setOnLongClickListener(this); photoView.setClickable(false); @@ -112,12 +120,44 @@ public class FavoritesViewHolder extends RecyclerView.ViewHolder } @Override - public boolean onLongClick(View v) { - // TODO(calderwoodra): implement drag and drop logic - listener.onLongClick(number); + public boolean onLongClick(View view) { + Context context = itemView.getContext(); + View contentView = LayoutInflater.from(context).inflate(R.layout.favorite_context_menu, null); + contentView + .findViewById(R.id.voice_call_container) + .setOnClickListener(v -> listener.onClick(Assert.isNotNull(number), false)); + contentView + .findViewById(R.id.video_call_container) + .setOnClickListener(v -> listener.onClick(Assert.isNotNull(number), true)); + contentView + .findViewById(R.id.send_message_container) + .setOnClickListener(v -> listener.openSmsConversation(Assert.isNotNull(number))); + contentView + .findViewById(R.id.remove_container) + .setOnClickListener(v -> listener.removeFavoriteContact()); + contentView + .findViewById(R.id.contact_info_container) + .setOnClickListener(v -> listener.openContactInfo()); + + int offset = + context.getResources().getDimensionPixelSize(R.dimen.speed_dial_context_menu_x_offset); + int padding = + context.getResources().getDimensionPixelSize(R.dimen.speed_dial_context_menu_extra_width); + int width = padding + itemView.getWidth(); + int elevation = context.getResources().getDimensionPixelSize(R.dimen.context_menu_elevation); + contextMenu = new PopupWindow(contentView, width, LayoutParams.WRAP_CONTENT, true); + contextMenu.setBackgroundDrawable(context.getDrawable(R.drawable.context_menu_background)); + contextMenu.setElevation(elevation); + contextMenu.setOnDismissListener(() -> contextMenu = null); + contextMenu.showAsDropDown(contextMenuAnchor, offset, 0); return true; } + @VisibleForTesting + public PopupWindow getContextMenu() { + return contextMenu; + } + /** Listener/callback for {@link FavoritesViewHolder} actions. */ public interface FavoriteContactsListener { @@ -127,7 +167,13 @@ public class FavoritesViewHolder extends RecyclerView.ViewHolder /** Called when the user clicks on a favorite contact. */ void onClick(String number, boolean isVideoCall); - /** Called when the user long clicks on a favorite contact. */ - void onLongClick(String number); + /** Called when the user selects send message from the context menu. */ + void openSmsConversation(String number); + + /** Called when the user selects remove from the context menu. */ + void removeFavoriteContact(); + + /** Called when the user selects contact info from the context menu. */ + void openContactInfo(); } } diff --git a/java/com/android/dialer/speeddial/SpeedDialFragment.java b/java/com/android/dialer/speeddial/SpeedDialFragment.java index 979c894fe..a75c5ddbd 100644 --- a/java/com/android/dialer/speeddial/SpeedDialFragment.java +++ b/java/com/android/dialer/speeddial/SpeedDialFragment.java @@ -112,8 +112,18 @@ public class SpeedDialFragment extends Fragment { } @Override - public void onLongClick(String number) { - // TODO(calderwoodra): show favorite contact floating context menu + public void openSmsConversation(String number) { + // TODO(calderwoodra): open sms conversation + } + + @Override + public void removeFavoriteContact() { + // TODO(calderwoodra): remove contact from favorites + } + + @Override + public void openContactInfo() { + // TODO(calderwoodra): open quick contact info } } diff --git a/java/com/android/dialer/speeddial/res/drawable/context_menu_background.xml b/java/com/android/dialer/speeddial/res/drawable/context_menu_background.xml new file mode 100644 index 000000000..fd60757b5 --- /dev/null +++ b/java/com/android/dialer/speeddial/res/drawable/context_menu_background.xml @@ -0,0 +1,25 @@ + + + + + + + diff --git a/java/com/android/dialer/speeddial/res/layout/favorite_context_menu.xml b/java/com/android/dialer/speeddial/res/layout/favorite_context_menu.xml new file mode 100644 index 000000000..04d0139e0 --- /dev/null +++ b/java/com/android/dialer/speeddial/res/layout/favorite_context_menu.xml @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/java/com/android/dialer/speeddial/res/layout/fragment_speed_dial.xml b/java/com/android/dialer/speeddial/res/layout/fragment_speed_dial.xml index d432f097b..b4fc9c08d 100644 --- a/java/com/android/dialer/speeddial/res/layout/fragment_speed_dial.xml +++ b/java/com/android/dialer/speeddial/res/layout/fragment_speed_dial.xml @@ -19,6 +19,6 @@ android:id="@+id/speed_dial_recycler_view" android:layout_width="match_parent" android:layout_height="match_parent" - android:paddingStart="16dp" - android:paddingEnd="16dp" + android:paddingStart="@dimen/speed_dial_recyclerview_horizontal_padding" + android:paddingEnd="@dimen/speed_dial_recyclerview_horizontal_padding" android:clipToPadding="false"/> diff --git a/java/com/android/dialer/speeddial/res/values/dimens.xml b/java/com/android/dialer/speeddial/res/values/dimens.xml index 74b509b73..ce2de9dcc 100644 --- a/java/com/android/dialer/speeddial/res/values/dimens.xml +++ b/java/com/android/dialer/speeddial/res/values/dimens.xml @@ -16,4 +16,19 @@ --> 280dp + 200dp + 4dp + 16dp + + + 28dp + + -24dp + 16dp \ No newline at end of file diff --git a/java/com/android/dialer/speeddial/res/values/strings.xml b/java/com/android/dialer/speeddial/res/values/strings.xml index 677f772c5..666eedea9 100644 --- a/java/com/android/dialer/speeddial/res/values/strings.xml +++ b/java/com/android/dialer/speeddial/res/values/strings.xml @@ -38,6 +38,21 @@ Call + + Voice Call + + + Video Call + + + Message + + + Remove + + + Contact info + Add Favorite \ No newline at end of file diff --git a/java/com/android/dialer/speeddial/res/values/styles.xml b/java/com/android/dialer/speeddial/res/values/styles.xml new file mode 100644 index 000000000..83bbd09e5 --- /dev/null +++ b/java/com/android/dialer/speeddial/res/values/styles.xml @@ -0,0 +1,27 @@ + + + + + \ No newline at end of file diff --git a/java/com/android/dialer/theme/res/values/dimens.xml b/java/com/android/dialer/theme/res/values/dimens.xml index 2b5243ebd..52a7560b3 100644 --- a/java/com/android/dialer/theme/res/values/dimens.xml +++ b/java/com/android/dialer/theme/res/values/dimens.xml @@ -50,4 +50,7 @@ 72dp + + + #D8D8D8 -- cgit v1.2.3