package org.wikipedia.descriptions; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.view.PagerAdapter; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; class DescriptionEditTutorialPagerAdapter extends PagerAdapter { interface Callback { void onButtonClick(@NonNull DescriptionEditTutorialPage page); } @Nullable private Callback callback; @NonNull private final ViewCallback viewCallback = new ViewCallback(); DescriptionEditTutorialPagerAdapter(@Nullable Callback callback) { this.callback = callback; } @Override public Object instantiateItem(ViewGroup container, int position) { DescriptionEditTutorialPage page = DescriptionEditTutorialPage.of(position); DescriptionEditTutorialPageView view = inflate(page, container); view.setTag(position); view.setCallback(viewCallback); return view; } @NonNull public DescriptionEditTutorialPageView inflate(@NonNull DescriptionEditTutorialPage page, @NonNull ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(parent.getContext()); DescriptionEditTutorialPageView view = (DescriptionEditTutorialPageView) inflater.inflate(page.getLayout(), parent, false); parent.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object object) { DescriptionEditTutorialPageView view = ((DescriptionEditTutorialPageView) object); view.setCallback(null); view.setTag(-1); } @Override public int getCount() { return DescriptionEditTutorialPage.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } private class ViewCallback implements DescriptionEditTutorialPageView.Callback { @Override public void onButtonClick(@NonNull DescriptionEditTutorialPageView view) { if (callback != null) { callback.onButtonClick(DescriptionEditTutorialPage.of((int) view.getTag())); } } } }