use of android.support.v7.widget.helper.ItemTouchHelper.START in project materialistic by hidroh.
the class ListFragmentViewHolderTest method setUp.
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
TestApplication.applicationGraph.inject(this);
reset(sessionManager);
reset(favoriteManager);
reset(itemManager);
reset(userServices);
item = new TestHnItem(1) {
@Override
public int getRank() {
return 46;
}
@Override
public String getBy() {
return "author";
}
};
controller = Robolectric.buildActivity(ListActivity.class).create().start().resume().visible();
activity = controller.get();
Bundle args = new Bundle();
args.putString(ListFragment.EXTRA_ITEM_MANAGER, HackerNewsClient.class.getName());
args.putString(ListFragment.EXTRA_FILTER, ItemManager.TOP_FETCH_MODE);
activity.getSupportFragmentManager().beginTransaction().add(android.R.id.content, Fragment.instantiate(activity, ListFragment.class.getName(), args)).commit();
verify(itemManager).getStories(any(), eq(ItemManager.MODE_DEFAULT), storiesListener.capture());
storiesListener.getValue().onResponse(new Item[] { item });
recyclerView = (RecyclerView) activity.findViewById(R.id.recycler_view);
swipeCallback = (ItemTouchHelper.SimpleCallback) customShadowOf(recyclerView).getItemTouchHelperCallback();
adapter = customShadowOf(recyclerView.getAdapter());
item.populate(new PopulatedStory(1));
}
use of android.support.v7.widget.helper.ItemTouchHelper.START in project materialistic by hidroh.
the class FavoriteManagerTest method testLocalItemManager.
@Test
public void testLocalItemManager() {
ActivityController<AppCompatActivity> controller = Robolectric.buildActivity(AppCompatActivity.class);
AppCompatActivity activity = controller.create().start().resume().get();
LocalItemManager.Observer observer = mock(LocalItemManager.Observer.class);
manager.attach(RuntimeEnvironment.application, activity.getSupportLoaderManager(), observer, null);
verify(observer).onChanged();
assertThat(manager.getSize()).isEqualTo(2);
assertThat(manager.getItem(0).getDisplayedTitle()).contains("ask HN");
assertThat(manager.getItem(1).getDisplayedTitle()).contains("title");
manager.detach();
controller.pause().stop().destroy();
}
use of android.support.v7.widget.helper.ItemTouchHelper.START in project FastAdapter by mikepenz.
the class ExpandableMultiselectDeleteSampleActivity method onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
findViewById(android.R.id.content).setSystemUiVisibility(findViewById(android.R.id.content).getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
//as we use an icon from Android-Iconics via xml we add the IconicsLayoutInflater
//https://github.com/mikepenz/Android-Iconics
LayoutInflaterCompat.setFactory(getLayoutInflater(), new IconicsLayoutInflater(getDelegate()));
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample);
// get RecyclerView
final RecyclerView rv = (RecyclerView) findViewById(R.id.rv);
// Handle Toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(R.string.sample_collapsible);
//style our ui
new MaterializeBuilder().withActivity(this).build();
//create our FastAdapter
fastItemAdapter = new FastItemAdapter<>();
fastItemAdapter.withPositionBasedStateManagement(false).withSelectable(true).withMultiSelect(true).withSelectOnLongClick(true).withOnPreClickListener(new FastAdapter.OnClickListener<IItem>() {
@Override
public boolean onClick(View v, IAdapter<IItem> adapter, IItem item, int position) {
//we handle the default onClick behavior for the actionMode. This will return null if it didn't do anything and you can handle a normal onClick
Boolean res = mActionModeHelper.onClick(ExpandableMultiselectDeleteSampleActivity.this, item);
// so that the click listener is not fired
if (res != null && !res)
return true;
return res != null ? res : false;
}
}).withOnClickListener(new FastAdapter.OnClickListener<IItem>() {
@Override
public boolean onClick(View v, IAdapter<IItem> adapter, IItem item, int position) {
// check if the actionMode consumes the click. This returns true, if it does, false if not
if (!mActionModeHelper.isActive())
Toast.makeText(ExpandableMultiselectDeleteSampleActivity.this, ((SimpleSubItem) item).name + " clicked!", Toast.LENGTH_SHORT).show();
// else
// mFastAdapter.notifyItemChanged(position); // im Bsp. ist das nicht nötig, k.A. warum ich das machen muss!
mRangeSelectorHelper.onClick();
return false;
}
}).withOnPreLongClickListener(new FastAdapter.OnLongClickListener<IItem>() {
@Override
public boolean onLongClick(View v, IAdapter<IItem> adapter, IItem item, int position) {
boolean actionModeWasActive = mActionModeHelper.isActive();
ActionMode actionMode = mActionModeHelper.onLongClick((AppCompatActivity) ExpandableMultiselectDeleteSampleActivity.this, position);
mRangeSelectorHelper.onLongClick(position);
if (actionMode != null) {
//we want color our CAB
ExpandableMultiselectDeleteSampleActivity.this.findViewById(R.id.action_mode_bar).setBackgroundColor(UIUtils.getThemeColorFromAttrOrRes(ExpandableMultiselectDeleteSampleActivity.this, R.attr.colorPrimary, R.color.material_drawer_primary));
// start the drag selection
mDragSelectTouchListener.startDragSelection(position);
}
//if we have no actionMode we do not consume the event
return actionMode != null && !actionModeWasActive;
}
});
// provide a custom title provider that even shows the count of sub items
mActionModeHelper = new ActionModeHelper(fastItemAdapter, R.menu.cab, new ActionBarCallBack()).withTitleProvider(new ActionModeHelper.ActionModeTitleProvider() {
@Override
public String getTitle(int selected) {
return selected + "/" + SubItemUtil.countItems(fastItemAdapter.getItemAdapter(), false);
}
}).withSupportSubItems(true);
// this will take care of selecting range of items via long press on the first and afterwards on the last item
mRangeSelectorHelper = new RangeSelectorHelper(fastItemAdapter).withSavedInstanceState(savedInstanceState).withActionModeHelper(mActionModeHelper);
// setup the drag select listener and add it to the RecyclerView
mDragSelectTouchListener = new DragSelectTouchListener().withSelectListener(new DragSelectTouchListener.OnDragSelectListener() {
@Override
public void onSelectChange(int start, int end, boolean isSelected) {
mRangeSelectorHelper.selectRange(start, end, isSelected, true);
// we handled the long press, so we reset the range selector
mRangeSelectorHelper.reset();
}
});
rv.addOnItemTouchListener(mDragSelectTouchListener);
// do basic RecyclerView setup
rv.setLayoutManager(new LinearLayoutManager(this));
rv.setItemAnimator(new SlideDownAlphaAnimator());
rv.setAdapter(fastItemAdapter);
//fill with some sample data
List<IItem> items = new ArrayList<>();
for (int i = 0; i < 20; i++) {
if (i % 2 == 0) {
final HeaderSelectionItem expandableItem = new HeaderSelectionItem();
expandableItem.withSubSelectionProvider(new HeaderSelectionItem.ISubSelectionProvider() {
@Override
public int getSelectedSubItems() {
return SubItemUtil.countSelectedSubItems(fastItemAdapter, expandableItem);
}
}).withName("Test " + (i + 1)).withDescription("ID: " + (i + 1)).withIdentifier(i + 1);
//.withIsExpanded(true) don't use this in such a setup, use adapter.expand() to expand all items instead
//add subitems so we can showcase the collapsible functionality
List<IItem> subItems = new LinkedList<>();
for (int ii = 1; ii <= 5; ii++) {
final SimpleSubItem sampleItem = new SimpleSubItem();
sampleItem.withName("-- Test " + (i + 1) + "." + ii).withDescription("ID: " + (i + 1) * 100 + ii).withIdentifier((i + 1) * 100 + ii);
subItems.add(sampleItem);
}
expandableItem.withSubItems(subItems);
items.add(expandableItem);
} else {
SimpleSubItem sampleItem = new SimpleSubItem();
sampleItem.withName("Test " + (i + 1)).withDescription("ID: " + (i + 1)).withIdentifier(i + 1);
items.add(sampleItem);
}
}
fastItemAdapter.add(items);
fastItemAdapter.expand();
fastItemAdapter.withSelectionListener(new ISelectionListener() {
@Override
public void onSelectionChanged(IItem item, boolean selected) {
if (item instanceof SimpleSubItem) {
IItem headerItem = ((SimpleSubItem) item).getParent();
if (headerItem != null) {
int pos = fastItemAdapter.getAdapterPosition(headerItem);
// Important: notify the header directly, not via the notifyadapterItemChanged!
// we just want to update the view and we are sure, nothing else has to be done
fastItemAdapter.notifyItemChanged(pos);
}
}
}
});
//restore selections (this has to be done after the items were added
fastItemAdapter.withSavedInstanceState(savedInstanceState);
//set the back arrow in the toolbar
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(false);
// restore action mode
if (savedInstanceState != null)
mActionModeHelper.checkActionMode(this);
}
use of android.support.v7.widget.helper.ItemTouchHelper.START in project FastAdapter by mikepenz.
the class IconGridActivity method onCreate.
@Override
protected void onCreate(Bundle savedInstanceState) {
findViewById(android.R.id.content).setSystemUiVisibility(findViewById(android.R.id.content).getSystemUiVisibility() | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
//as we use an icon from Android-Iconics via xml we add the IconicsLayoutInflater
//https://github.com/mikepenz/Android-Iconics
LayoutInflaterCompat.setFactory(getLayoutInflater(), new IconicsLayoutInflater(getDelegate()));
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sample);
// Handle Toolbar
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setTitle(R.string.sample_icon_grid);
//style our ui
new MaterializeBuilder().withActivity(this).build();
//create our FastAdapter which will manage everything
fastItemAdapter = new FastItemAdapter();
//get our recyclerView and do basic setup
RecyclerView rv = (RecyclerView) findViewById(R.id.rv);
//init our gridLayoutManager and configure RV
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
gridLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
switch(fastItemAdapter.getItemViewType(position)) {
case R.id.fastadapter_expandable_item_id:
return 3;
case R.id.fastadapter_icon_item_id:
return 1;
default:
return -1;
}
}
});
rv.setLayoutManager(gridLayoutManager);
rv.setItemAnimator(new SlideDownAlphaAnimator());
rv.setAdapter(fastItemAdapter);
//order fonts by their name
List<ITypeface> mFonts = new ArrayList<>(Iconics.getRegisteredFonts(this));
Collections.sort(mFonts, new Comparator<ITypeface>() {
@Override
public int compare(final ITypeface object1, final ITypeface object2) {
return object1.getFontName().compareTo(object2.getFontName());
}
});
//add all icons of all registered Fonts to the list
int count = 0;
ArrayList<SimpleSubExpandableItem> items = new ArrayList<>(Iconics.getRegisteredFonts(this).size());
for (ITypeface font : mFonts) {
//we set the identifier from the count here, as I need a stable ID in the sample to showcase the state restore
SimpleSubExpandableItem expandableItem = new SimpleSubExpandableItem();
expandableItem.withName(font.getFontName()).withIdentifier(count);
ArrayList<IItem> icons = new ArrayList<>();
for (String icon : font.getIcons()) {
IconItem iconItem = new IconItem();
iconItem.withIcon(font.getIcon(icon));
icons.add(iconItem);
}
expandableItem.withSubItems(icons);
items.add(expandableItem);
count++;
}
//fill with some sample data
fastItemAdapter.add(items);
//if first start we want to expand the item with ID 2
if (savedInstanceState != null) {
//restore selections (this has to be done after the items were added
fastItemAdapter.withSavedInstanceState(savedInstanceState);
} else {
//expand one item to make sample look a bit more interesting
fastItemAdapter.expand(2);
}
//set the back arrow in the toolbar
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(false);
}
use of android.support.v7.widget.helper.ItemTouchHelper.START in project android-parallax-recyclerview by kanytu.
the class HeaderLayoutManagerFixed method findOneVisibleChild.
int findOneVisibleChild(int fromIndex, int toIndex, boolean completelyVisible) {
final int start = mOrientationHelper.getStartAfterPadding();
final int end = mOrientationHelper.getEndAfterPadding();
final int next = toIndex > fromIndex ? 1 : -1;
for (int i = fromIndex; i != toIndex; i += next) {
final View child = getChildAt(i);
final int childStart = mOrientationHelper.getDecoratedStart(child);
final int childEnd = mOrientationHelper.getDecoratedEnd(child);
if (childStart < end && childEnd > start) {
if (completelyVisible) {
if (childStart >= start && childEnd <= end) {
return getPosition(child);
}
} else {
return getPosition(child);
}
}
}
return RecyclerView.NO_POSITION;
}
Aggregations