package eu.ttbox.androgister.ui.admin.catalog; import android.content.ClipData; import android.content.Context; import android.graphics.Color; import android.util.Log; import android.view.DragEvent; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import android.widget.Toast; import de.greenrobot.dao.query.LazyList; import eu.ttbox.androgister.R; import eu.ttbox.androgister.domain.Catalog; import eu.ttbox.androgister.domain.core.LazyListAdapter; import eu.ttbox.androgister.domain.provider.ProductProvider; import eu.ttbox.androgister.ui.admin.catalog.CatalogListAdapter.ViewHolder; public class CatalogListAdapter extends LazyListAdapter<Catalog, ViewHolder> { private static final String TAG = "CatalogListAdapter"; private Context context; // public CharSequence dragData; private MyDragEventListener myDragEventListener = new MyDragEventListener(); public CatalogListAdapter(Context context, LazyList<Catalog> lazyList) { super(context, R.layout.admin_calatog_list_item, lazyList); this.context = context; } @Override public void bindView(View view, ViewHolder holder, Context context, Catalog item) { holder.nameText.setText(item.getName()); } @Override public ViewHolder newViewHolder(View view, Context context, Catalog item, ViewGroup parent) { ViewHolder holder = new ViewHolder(); holder.nameText = (TextView) view; view.setOnDragListener(myDragEventListener); return holder; } static class ViewHolder { TextView nameText; } protected class MyDragEventListener implements View.OnDragListener { // This is the method that the system calls when it dispatches a drag // event to the // listener. public boolean onDrag(View v, DragEvent event) { // boolean result = false; // boolean mAcceptsDrag = true; // boolean mDragInProgress = false; // boolean mHovering = false; switch (event.getAction()) { case DragEvent.ACTION_DRAG_STARTED: { if (event.getClipDescription().hasMimeType(ProductProvider.PRODUCT_MIME_TYPE)) { // claim to accept any dragged content Log.i(TAG, "Drag started, event=" + event); // cache whether we accept the drag to return for LOCATION // events // mDragInProgress = true; // mAcceptsDrag = result = true; // Redraw in the new visual state if we are a potential drop // target v.invalidate(); return true; } else { return false; } } // break; case DragEvent.ACTION_DRAG_ENDED: { Log.d(TAG, "Drag ended ." + ((TextView) v).getText()); // if (mAcceptsDrag) { v.invalidate(); // } // mDragInProgress = false; // mHovering = false; return true; } // break; case DragEvent.ACTION_DRAG_LOCATION: { // we returned true to DRAG_STARTED, so return true here // Log.d(TAG, "... seeing drag locations ..." + ((TextView) v).getText()); // result = mAcceptsDrag; return true; } // break; case DragEvent.ACTION_DROP: { Log.i(TAG, "Got a drop! dot=" + this + " event=" + event + " // " + ((TextView) v).getText()); processDrop(event); // result = true; return true; } // break; case DragEvent.ACTION_DRAG_ENTERED: { Log.d(TAG, "Entered dot @ " + this); v.setBackgroundColor(Color.RED); // mHovering = true; v.invalidate(); return true; } // break; case DragEvent.ACTION_DRAG_EXITED: { Log.d(TAG, "Exited dot @ " + this); v.setBackgroundColor(Color.BLACK); // mHovering = false; v.invalidate(); return true; } // break; default: Log.i(TAG, "other drag event: " + event); // result = mAcceptsDrag; break; } return false; }; } private void processDrop(DragEvent event) { final ClipData data = event.getClipData(); final int N = data.getItemCount(); for (int i = 0; i < N; i++) { ClipData.Item item = data.getItemAt(i); Log.i(TAG, "Dropped item " + i + " : " + item); // if (mReportView != null) { String text = item.coerceToText(context).toString(); if (event.getLocalState() == (Object) this) { text += " : Dropped on self!"; } text += " : "; Toast.makeText(context, text, Toast.LENGTH_SHORT).show(); // mReportView.setText(text); // } } } }