package net.osmand.plus.mapcontextmenu.builders.cards; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import net.osmand.AndroidUtils; import net.osmand.plus.LockableViewPager; import net.osmand.plus.OsmandApplication; import net.osmand.plus.R; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.mapcontextmenu.MenuBuilder; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; public class CardsRowBuilder { private MenuBuilder menuBuilder; private View view; private MapActivity mapActivity; private OsmandApplication app; private boolean addToLayout; private List<AbstractCard> cards = new ArrayList<>(); private LockableViewPager viewPager; private ViewsPagerAdapter pagerAdapter; private int dp10; public CardsRowBuilder(MenuBuilder menuBuilder, View view, boolean addToLayout) { this.menuBuilder = menuBuilder; this.view = view; this.addToLayout = addToLayout; this.mapActivity = menuBuilder.getMapActivity(); this.app = menuBuilder.getApplication(); this.dp10 = AndroidUtils.dpToPx(app, 10f); } public MenuBuilder getMenuBuilder() { return menuBuilder; } public View getContentView() { return viewPager; } public void setCards(AbstractCard ...cards) { setCards(Arrays.asList(cards)); } public void setCards(Collection<? extends AbstractCard> cards) { this.cards.clear(); if (cards != null) { this.cards.addAll(cards); } if (!menuBuilder.isHidden()) { viewPager.setSwipeLocked(itemsCount() < 2); pagerAdapter.notifyDataSetChanged(); } } public void setProgressCard() { setCards(new ProgressCard(mapActivity)); } public void build() { viewPager = new LockableViewPager(view.getContext()); ViewPager.LayoutParams params = new ViewPager.LayoutParams(); params.width = ViewGroup.LayoutParams.MATCH_PARENT; params.height = (int) app.getResources().getDimension(R.dimen.context_img_card_height) + dp10 + dp10; viewPager.setLayoutParams(params); viewPager.setPageMargin(dp10); viewPager.setPadding(dp10, dp10, dp10, dp10); viewPager.setClipToPadding(false); pagerAdapter = new ViewsPagerAdapter(); viewPager.setAdapter(pagerAdapter); viewPager.setSwipeLocked(itemsCount() < 2); if (addToLayout) { ((LinearLayout) view).addView(viewPager); } } private int itemsCount() { return cards.size(); } private View createPageView(int position) { return cards.get(position).build(view.getContext()); } private class ViewsPagerAdapter extends PagerAdapter { @Override public float getPageWidth(int position) { return 0.8f; } @Override public int getItemPosition(Object object) { return POSITION_NONE; } @Override public int getCount() { return itemsCount(); } @Override public Object instantiateItem(ViewGroup container, int position) { View view = createPageView(position); container.addView(view, 0); return view; } @Override public void destroyItem(ViewGroup collection, int position, Object view) { collection.removeView((View) view); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } } }