package it.sephiroth.android.library.util.v11; import it.sephiroth.android.library.widget.AbsHListView; import android.annotation.TargetApi; import android.view.ActionMode; import android.view.Menu; import android.view.MenuItem; public class MultiChoiceModeWrapper implements MultiChoiceModeListener { private MultiChoiceModeListener mWrapped; private AbsHListView mView; public MultiChoiceModeWrapper( AbsHListView view ) { mView = view; } public void setWrapped( MultiChoiceModeListener wrapped ) { mWrapped = wrapped; } public boolean hasWrappedCallback() { return mWrapped != null; } @Override public boolean onCreateActionMode( ActionMode mode, Menu menu ) { if ( mWrapped.onCreateActionMode( mode, menu ) ) { mView.setLongClickable( false ); return true; } return false; } @Override public boolean onPrepareActionMode( ActionMode mode, Menu menu ) { return mWrapped.onPrepareActionMode( mode, menu ); } @Override public boolean onActionItemClicked( ActionMode mode, MenuItem item ) { return mWrapped.onActionItemClicked( mode, item ); } @Override public void onDestroyActionMode( ActionMode mode ) { mWrapped.onDestroyActionMode( mode ); mView.mChoiceActionMode = null; // Ending selection mode means deselecting everything. mView.clearChoices(); mView.mDataChanged = true; mView.rememberSyncState(); mView.requestLayout(); mView.setLongClickable( true ); } @Override @TargetApi(11) public void onItemCheckedStateChanged( ActionMode mode, int position, long id, boolean checked ) { mWrapped.onItemCheckedStateChanged( mode, position, id, checked ); // If there are no items selected we no longer need the selection mode. if ( mView.getCheckedItemCount() == 0 ) { mode.finish(); } } }