15b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar/*
25b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar * Copyright (C) 2015 The Android Open Source Project
35b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar *
45b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar * Licensed under the Apache License, Version 2.0 (the "License");
55b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar * you may not use this file except in compliance with the License.
65b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar * You may obtain a copy of the License at
75b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar *
85b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar *      http://www.apache.org/licenses/LICENSE-2.0
95b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar *
105b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar * Unless required by applicable law or agreed to in writing, software
115b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar * distributed under the License is distributed on an "AS IS" BASIS,
125b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar * See the License for the specific language governing permissions and
145b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar * limitations under the License.
155b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar */
165b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
175b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarpackage com.example.android.supportv7.widget.touch;
185b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
195b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport com.example.android.supportv7.Cheeses;
205b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport com.example.android.supportv7.R;
215b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport com.example.android.supportv7.widget.util.ConfigToggle;
225b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport com.example.android.supportv7.widget.util.ConfigViewHolder;
235b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
245b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport android.app.Activity;
255b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport android.graphics.Canvas;
265b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport android.os.Bundle;
275b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport android.support.v7.widget.CardView;
285b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport android.support.v7.widget.LinearLayoutManager;
295b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport android.support.v7.widget.RecyclerView;
305b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport android.support.v7.widget.helper.ItemTouchHelper;
315b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport android.view.LayoutInflater;
325b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport android.view.View;
335b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport android.view.ViewGroup;
345b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport android.widget.Button;
355b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport android.widget.TextView;
365b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
375b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport java.util.ArrayList;
385b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport java.util.Arrays;
395b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarimport java.util.List;
405b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
415b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar/**
425b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar * Sample activity from which ItemTouchHelper demo activities inherit.
435b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar */
445b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyarabstract public class ItemTouchHelperActivity extends Activity {
455b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
465b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public RecyclerView mRecyclerView;
475b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
485b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public ItemTouchAdapter mAdapter;
495b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
505b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public ItemTouchHelper mItemTouchHelper;
515b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
525b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public ItemTouchHelper.Callback mCallback;
535b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
545b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    private ConfigToggle[] mConfigToggles;
555b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
565b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    @Override
575b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public void onCreate(Bundle savedInstanceState) {
585b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        super.onCreate(savedInstanceState);
595b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        setContentView(R.layout.activity_item_touch);
60fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        mRecyclerView = findViewById(R.id.recycler_view);
615b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        mRecyclerView.setHasFixedSize(true);
625b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        mAdapter = createAdapter();
635b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        mRecyclerView.setAdapter(mAdapter);
645b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
655b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        mItemTouchHelper = createItemTouchHelper();
665b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        mItemTouchHelper.attachToRecyclerView(mRecyclerView);
675b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        initToggles();
685b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
695b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
705b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    private void initToggles() {
715b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        mConfigToggles = createConfigToggles();
72fa2e2acf79d791a90410025daad438968550d18cAlan Viverette        RecyclerView configView = findViewById(R.id.config_recycler_view);
735b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        configView.setAdapter(new RecyclerView.Adapter<ConfigViewHolder>() {
745b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            @Override
755b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            public ConfigViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
765b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                return new ConfigViewHolder(LayoutInflater.from(parent.getContext())
775b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                        .inflate(R.layout.config_view_toggle, parent, false));
785b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            }
795b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
805b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            @Override
815b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            public void onBindViewHolder(ConfigViewHolder holder, int position) {
825b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                ConfigToggle toggle = mConfigToggles[position];
835b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                holder.bind(toggle);
845b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            }
855b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
865b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            @Override
875b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            public int getItemCount() {
885b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                return mConfigToggles.length;
895b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            }
905b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        });
915b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        configView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL,
925b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                false));
935b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        configView.setHasFixedSize(true);
945b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
955b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
965b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    abstract ConfigToggle[] createConfigToggles();
975b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
985b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public ItemTouchHelper createItemTouchHelper() {
995b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        mCallback = createCallback();
1005b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        return new ItemTouchHelper(mCallback);
1015b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
1025b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1035b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public ItemTouchHelper.Callback createCallback() {
1045b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        return new ItemTouchHelper.Callback() {
1055b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            @Override
1065b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            public int getMovementFlags(RecyclerView recyclerView,
1075b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                    RecyclerView.ViewHolder viewHolder) {
1085b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                return ItemTouchHelperActivity.this.getMovementFlags(recyclerView, viewHolder);
1095b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            }
1105b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1115b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            @Override
1125b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            public boolean onMove(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder,
1135b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                    RecyclerView.ViewHolder target) {
1145b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                mAdapter.move(viewHolder.getAdapterPosition(), target.getAdapterPosition());
1155b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                return true;
1165b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            }
1175b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1185b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            @Override
1195b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
1205b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                mAdapter.delete(viewHolder.getAdapterPosition());
1215b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            }
1225b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1235b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            @Override
1245b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
1255b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                super.onSelectedChanged(viewHolder, actionState);
1265b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                ItemTouchHelperActivity.this.onSelectedChanged(viewHolder, actionState);
1275b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            }
1285b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1295b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            @Override
1305b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            public void onChildDraw(Canvas c, RecyclerView recyclerView,
1315b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                    RecyclerView.ViewHolder viewHolder,
1325b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                    float dX, float dY, int actionState, boolean isCurrentlyActive) {
1335b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                if (ItemTouchHelperActivity.this.onChildDraw(c, recyclerView, viewHolder,
1345b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                        dX, dY, actionState, isCurrentlyActive)) {
1355b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                    return;
1365b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                }
1375b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                super.onChildDraw(c, recyclerView, viewHolder, dX, dY, actionState,
1385b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                        isCurrentlyActive);
1395b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            }
1405b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1415b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            @Override
1425b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            public void onChildDrawOver(Canvas c, RecyclerView recyclerView,
1435b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                    RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState,
1445b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                    boolean isCurrentlyActive) {
1455b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                if (ItemTouchHelperActivity.this.onChildDrawOver(c, recyclerView, viewHolder,
1465b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                        dX, dY, actionState, isCurrentlyActive)) {
1475b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                    return;
1485b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                }
1495b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                super.onChildDrawOver(c, recyclerView, viewHolder, dX, dY, actionState,
1505b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                        isCurrentlyActive);
1515b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            }
1525b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1535b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            @Override
1545b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            public boolean isLongPressDragEnabled() {
1555b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                return ItemTouchHelperActivity.this.isLongPressDragEnabled();
1565b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            }
1575b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1585b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            @Override
1595b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            public boolean isItemViewSwipeEnabled() {
1605b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                return ItemTouchHelperActivity.this.isPointerSwipeEnabled();
1615b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            }
1625b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1635b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            @Override
1645b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            public void clearView(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
1655b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                super.clearView(recyclerView, viewHolder);
1665b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                ItemTouchHelperActivity.this.clearView(viewHolder);
1675b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            }
1685b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        };
1695b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
1705b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1715b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    /**
1725b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar     * @return True if we should NOT call parent
1735b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar     */
1745b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public boolean onChildDraw(Canvas c, RecyclerView recyclerView,
1755b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            RecyclerView.ViewHolder viewHolder,
1765b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            float dX, float dY, int actionState, boolean isCurrentlyActive) {
1775b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        return false;
1785b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
1795b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1805b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    /**
1815b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar     * @return True if we should NOT call parent
1825b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar     */
1835b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public boolean onChildDrawOver(Canvas c, RecyclerView recyclerView,
1845b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState,
1855b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            boolean isCurrentlyActive) {
1865b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        return false;
1875b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
1885b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1895b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public void clearView(RecyclerView.ViewHolder viewHolder) {
1905b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1915b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
1925b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1935b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
1945b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1955b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
1965b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
1975b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public boolean isLongPressDragEnabled() {
1985b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        return true;
1995b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
2005b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2015b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public boolean isPointerSwipeEnabled() {
2025b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        return true;
2035b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
2045b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2055b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public ItemTouchViewHolder onCreateViewHolder(ViewGroup parent) {
2065b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        ItemTouchViewHolder itemTouchViewHolder = new ItemTouchViewHolder(
2075b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                LayoutInflater.from(parent.getContext())
2085b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar                        .inflate(R.layout.touch_item, parent, false));
2095b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        return itemTouchViewHolder;
2105b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
2115b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2125b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    abstract public int getMovementFlags(RecyclerView recyclerView,
2135b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            RecyclerView.ViewHolder viewHolder);
2145b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2155b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public ItemTouchAdapter createAdapter() {
2165b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        return new ItemTouchAdapter();
2175b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
2185b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2195b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public void onBind(ItemTouchViewHolder viewHolder) {
2205b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2215b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
2225b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2235b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public void onCreateViewHolder(ItemTouchViewHolder viewHolder) {
2245b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2255b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
2265b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2275b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public class ItemTouchViewHolder extends RecyclerView.ViewHolder {
2285b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2295b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        public final TextView textView;
2305b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2315b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        public final Button actionButton;
2325b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2335b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        public final CardView cardView;
2345b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2355b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        public final View overlay;
2365b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2375b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        public ItemTouchViewHolder(View itemView) {
2385b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            super(itemView);
2395b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            cardView = (CardView) itemView;
2405b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            textView = (TextView) itemView.findViewById(R.id.text_view);
2415b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            actionButton = (Button) itemView.findViewById(R.id.action_button);
2425b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            overlay = itemView.findViewById(R.id.overlay);
2435b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        }
2445b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
2455b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2465b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    public class ItemTouchAdapter extends RecyclerView.Adapter<ItemTouchViewHolder> {
2475b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2485b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        private List<String> mItems = new ArrayList<String>();
2495b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2505b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        public ItemTouchAdapter() {
2515b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            mItems.addAll(Arrays.asList(Cheeses.sCheeseStrings));
2525b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        }
2535b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2545b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        @Override
2555b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        public ItemTouchViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
2565b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            return ItemTouchHelperActivity.this.onCreateViewHolder(parent);
2575b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        }
2585b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2595b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        @Override
2605b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        public void onBindViewHolder(ItemTouchViewHolder holder, int position) {
2615b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            holder.textView.setText(mItems.get(position));
2625b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            onBind(holder);
2635b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        }
2645b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2655b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        public void delete(int position) {
2665b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            mItems.remove(position);
2675b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            notifyItemRemoved(position);
2685b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        }
2695b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2705b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        public void move(int from, int to) {
2715b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            String prev = mItems.remove(from);
2725b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            mItems.add(to > from ? to - 1 : to, prev);
2735b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            notifyItemMoved(from, to);
2745b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        }
2755b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2765b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        @Override
2775b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        public int getItemCount() {
2785b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar            return mItems.size();
2795b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar        }
2805b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar    }
2815b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2825b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar
2835b611d45d8d84bd604e6ce855f9520499ff89b68Yigit Boyar}
284