summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/speeddial/SpeedDialFragment.java
diff options
context:
space:
mode:
authorcalderwoodra <calderwoodra@google.com>2018-04-13 14:58:17 -0700
committerCopybara-Service <copybara-piper@google.com>2018-04-13 15:00:08 -0700
commit5621909c288e785ff9c8a6cc12d3dae8ed837b66 (patch)
treea59d481b856647dd26a0aefd0ea3be8e82784303 /java/com/android/dialer/speeddial/SpeedDialFragment.java
parent0d0afb36ac53cc58f2674d2571c8db6cd75d8cbb (diff)
Implement drag to remove contacts in SpeedDialFragment.
Bug: 36841782 Test: manual PiperOrigin-RevId: 192828773 Change-Id: Id9066346e6b2a03f672ce3ad11027f15adfbb7e6
Diffstat (limited to 'java/com/android/dialer/speeddial/SpeedDialFragment.java')
-rw-r--r--java/com/android/dialer/speeddial/SpeedDialFragment.java41
1 files changed, 36 insertions, 5 deletions
diff --git a/java/com/android/dialer/speeddial/SpeedDialFragment.java b/java/com/android/dialer/speeddial/SpeedDialFragment.java
index d323b1bb4..b58d4abf4 100644
--- a/java/com/android/dialer/speeddial/SpeedDialFragment.java
+++ b/java/com/android/dialer/speeddial/SpeedDialFragment.java
@@ -21,6 +21,7 @@ import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.widget.RecyclerView;
+import android.support.v7.widget.helper.ItemTouchHelper;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -36,6 +37,8 @@ import com.android.dialer.speeddial.FavoritesViewHolder.FavoriteContactsListener
import com.android.dialer.speeddial.HeaderViewHolder.SpeedDialHeaderListener;
import com.android.dialer.speeddial.SuggestionViewHolder.SuggestedContactsListener;
import com.android.dialer.speeddial.database.SpeedDialEntry.Channel;
+import com.android.dialer.speeddial.draghelper.SpeedDialItemTouchHelperCallback;
+import com.android.dialer.speeddial.draghelper.SpeedDialLayoutManager;
import com.android.dialer.speeddial.loader.SpeedDialUiItem;
import com.android.dialer.speeddial.loader.UiItemLoaderComponent;
import com.google.common.collect.ImmutableList;
@@ -60,8 +63,10 @@ public class SpeedDialFragment extends Fragment {
private View rootLayout;
private ContextMenu contextMenu;
private FrameLayout contextMenuBackground;
- private SpeedDialAdapter adapter;
private ContextMenuItemListener contextMenuItemListener;
+
+ private SpeedDialAdapter adapter;
+ private SpeedDialLayoutManager layoutManager;
private SupportUiListener<ImmutableList<SpeedDialUiItem>> speedDialLoaderListener;
public static SpeedDialFragment newInstance() {
@@ -74,13 +79,23 @@ public class SpeedDialFragment extends Fragment {
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
LogUtil.enterBlock("SpeedDialFragment.onCreateView");
rootLayout = inflater.inflate(R.layout.fragment_speed_dial, container, false);
- RecyclerView recyclerView = rootLayout.findViewById(R.id.speed_dial_recycler_view);
+ // Setup our RecyclerView
+ RecyclerView recyclerView = rootLayout.findViewById(R.id.speed_dial_recycler_view);
adapter =
new SpeedDialAdapter(getContext(), favoritesListener, suggestedListener, headerListener);
- recyclerView.setLayoutManager(adapter.getLayoutManager(getContext()));
+ layoutManager = new SpeedDialLayoutManager(getContext(), 3 /* spanCount */);
+ layoutManager.setSpanSizeLookup(adapter.getSpanSizeLookup());
+ recyclerView.setLayoutManager(layoutManager);
recyclerView.setAdapter(adapter);
+ // Setup drag and drop touch helper
+ ItemTouchHelper.Callback callback = new SpeedDialItemTouchHelperCallback(adapter);
+ ItemTouchHelper touchHelper = new ItemTouchHelper(callback);
+ touchHelper.attachToRecyclerView(recyclerView);
+ adapter.setItemTouchHelper(touchHelper);
+
+ // Setup favorite contact context menu
contextMenu = rootLayout.findViewById(R.id.favorite_contact_context_menu);
contextMenuBackground = rootLayout.findViewById(R.id.context_menu_background);
contextMenuBackground.setOnClickListener(
@@ -141,10 +156,26 @@ public class SpeedDialFragment extends Fragment {
}
@Override
- public void onLongClick(View view, SpeedDialUiItem speedDialUiItem) {
- contextMenuBackground.setVisibility(View.VISIBLE);
+ public void showContextMenu(View view, SpeedDialUiItem speedDialUiItem) {
+ layoutManager.setScrollEnabled(false);
contextMenu.showMenu(rootLayout, view, speedDialUiItem, contextMenuItemListener);
}
+
+ @Override
+ public void onTouchFinished(boolean closeContextMenu) {
+ layoutManager.setScrollEnabled(true);
+
+ if (closeContextMenu) {
+ contextMenu.hideMenu();
+ } else if (contextMenu.isVisible()) {
+ // If we're showing the context menu, show this background surface so that we can intercept
+ // touch events to close the menu
+ // Note: We call this in onTouchFinished because if we show the background before the user
+ // is done, they might try to drag the view and but won't be able to because this view would
+ // intercept all of the touch events.
+ contextMenuBackground.setVisibility(View.VISIBLE);
+ }
+ }
}
private final class SpeedDialSuggestedListener implements SuggestedContactsListener {