package org.wikipedia.descriptions; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import org.wikipedia.R; import org.wikipedia.activity.FragmentUtil; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.Unbinder; public class DescriptionEditTutorialFragment extends Fragment { @BindView(R.id.fragment_description_edit_tutorial_view_pager) ViewPager viewPager; private Unbinder unbinder; private PagerAdapter adapter; public interface Callback { void onStartEditingClick(); } @NonNull public static DescriptionEditTutorialFragment newInstance() { return new DescriptionEditTutorialFragment(); } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); adapter = new DescriptionEditTutorialPagerAdapter(new PageViewCallback()); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreateView(inflater, container, savedInstanceState); View view = inflater.inflate(R.layout.fragment_description_edit_tutorial, container, false); unbinder = ButterKnife.bind(this, view); viewPager.setAdapter(adapter); return view; } @Override public void onDestroyView() { viewPager.setAdapter(null); unbinder.unbind(); unbinder = null; super.onDestroyView(); } @Override public void onDestroy() { adapter = null; super.onDestroy(); } private void onStartEditingClick() { if (callback() != null) { callback().onStartEditingClick(); } } private void advancePage() { int nextPageIndex = viewPager.getCurrentItem() + 1; int lastPageIndex = viewPager.getAdapter().getCount() - 1; viewPager.setCurrentItem(Math.min(nextPageIndex, lastPageIndex), true); } private Callback callback() { return FragmentUtil.getCallback(this, DescriptionEditTutorialFragment.Callback.class); } private class PageViewCallback implements DescriptionEditTutorialPagerAdapter.Callback { @Override public void onButtonClick(@NonNull DescriptionEditTutorialPage page) { if (page.isLast()) { onStartEditingClick(); } else { advancePage(); } } } }