Home | History | Annotate | Download | only in touch
      1 /*
      2  * Copyright (C) 2015 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.example.android.supportv7.widget.touch;
     18 
     19 import com.example.android.supportv7.R;
     20 import com.example.android.supportv7.widget.util.ConfigToggle;
     21 
     22 import android.annotation.TargetApi;
     23 import android.os.Build;
     24 import android.support.v4.view.MotionEventCompat;
     25 import android.support.v7.widget.RecyclerView;
     26 import android.support.v7.widget.helper.ItemTouchHelper;
     27 import android.view.MotionEvent;
     28 import android.view.View;
     29 import android.view.ViewGroup;
     30 
     31 public class DragAndDropActivity extends ItemTouchHelperActivity {
     32 
     33     boolean mDragUpEnabled = true;
     34     boolean mDragDownEnabled = true;
     35     boolean mLongPressDragEnabled = true;
     36 
     37     @Override
     38     ConfigToggle[] createConfigToggles() {
     39         return new ConfigToggle[]{
     40                 new ConfigToggle(this, R.string.drag_up) {
     41                     @Override
     42                     public boolean isChecked() {
     43                         return mDragUpEnabled;
     44                     }
     45 
     46                     @Override
     47                     public void onChange(boolean newValue) {
     48                         mDragUpEnabled = newValue;
     49                     }
     50                 },
     51                 new ConfigToggle(this, R.string.drag_down) {
     52                     @Override
     53                     public boolean isChecked() {
     54                         return mDragDownEnabled;
     55                     }
     56 
     57                     @Override
     58                     public void onChange(boolean newValue) {
     59                         mDragDownEnabled = newValue;
     60                     }
     61                 },
     62                 new ConfigToggle(this, R.string.long_press_drag) {
     63                     @Override
     64                     public boolean isChecked() {
     65                         return mLongPressDragEnabled;
     66                     }
     67 
     68                     @Override
     69                     public void onChange(boolean newValue) {
     70                         mLongPressDragEnabled = newValue;
     71                         mAdapter.notifyDataSetChanged();
     72                     }
     73                 }
     74         };
     75     }
     76 
     77     @Override
     78     public boolean isLongPressDragEnabled() {
     79         return mLongPressDragEnabled;
     80     }
     81 
     82     @Override
     83     public void onBind(ItemTouchViewHolder viewHolder) {
     84         super.onBind(viewHolder);
     85         viewHolder.actionButton.setVisibility(mLongPressDragEnabled ? View.GONE : View.VISIBLE);
     86     }
     87 
     88     @Override
     89     public void clearView(RecyclerView.ViewHolder viewHolder) {
     90         super.clearView(viewHolder);
     91         ItemTouchViewHolder touchVH = (ItemTouchViewHolder) viewHolder;
     92         touchVH.cardView.setCardBackgroundColor(getResources().getColor(android.R.color.white));
     93         touchVH.overlay.setVisibility(View.GONE);
     94     }
     95 
     96     @Override
     97     public void onSelectedChanged(RecyclerView.ViewHolder viewHolder, int actionState) {
     98         ItemTouchViewHolder touchVH = (ItemTouchViewHolder) viewHolder;
     99         if (actionState != ItemTouchHelper.ACTION_STATE_IDLE) {
    100             touchVH.cardView.setCardBackgroundColor(getResources().getColor(R.color.card_aquatic));
    101         }
    102         super.onSelectedChanged(viewHolder, actionState);
    103     }
    104 
    105     @Override
    106     public ItemTouchViewHolder onCreateViewHolder(ViewGroup parent) {
    107         final ItemTouchViewHolder vh = super.onCreateViewHolder(parent);
    108         vh.actionButton.setText(R.string.drag);
    109         vh.actionButton.setOnTouchListener(new View.OnTouchListener() {
    110             @Override
    111             public boolean onTouch(View v, MotionEvent event) {
    112                 if (MotionEventCompat.getActionMasked(event) == MotionEvent.ACTION_DOWN) {
    113                     mItemTouchHelper.startDrag(vh);
    114                 }
    115                 return false;
    116             }
    117         });
    118         return vh;
    119     }
    120 
    121     @Override
    122     public int getMovementFlags(RecyclerView recyclerView, RecyclerView.ViewHolder viewHolder) {
    123         return mCallback.makeMovementFlags(
    124                 (mDragUpEnabled ? ItemTouchHelper.UP : 0) |
    125                         (mDragDownEnabled ? ItemTouchHelper.DOWN : 0), 0);
    126     }
    127 }
    128