/** * Copyright (C) 2013 Romain Guefveneu. * * This file is part of naonedbus. * * Naonedbus is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Naonedbus is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package net.naonedbus.activity.impl; import java.util.ArrayList; import java.util.List; import net.naonedbus.R; import android.content.Context; import android.os.Bundle; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager.OnPageChangeListener; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.SherlockActivity; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuItem; import com.viewpagerindicator.PageIndicator; public class TutorialActivity extends SherlockActivity implements OnPageChangeListener { private TutorialPagerAdapter mTutorialPagerAdapter; private MenuItem mSkipMenuItem; private Button mNextButton; private Button mPreviousButton; private ViewPager mViewPager; @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_tutorial); mTutorialPagerAdapter = new TutorialPagerAdapter(this); mTutorialPagerAdapter.addView(new TutorialView(R.layout.tutorial_view_welcome, R.string.tuto_about_title, R.string.tuto_about_summary, R.drawable.ic_logo)); mTutorialPagerAdapter.addView(new TutorialView(R.string.tuto_favoris_title, R.string.tuto_favoris_summary, R.drawable.tuto_favoris)); mTutorialPagerAdapter.addView(new TutorialView(R.string.tuto_commentaires_title, R.string.tuto_commentaires_summary, R.drawable.tuto_infostrafic)); mTutorialPagerAdapter.addView(new TutorialView(R.string.tuto_parkings_title, R.string.tuto_parkings_summary, R.drawable.tuto_parkings)); mTutorialPagerAdapter.addView(new TutorialView(R.string.tuto_mobilite_title, R.string.tuto_mobilite_summary, R.drawable.tuto_bicloos)); mTutorialPagerAdapter.addView(new TutorialView(R.string.tuto_widgets_title, R.string.tuto_widgets_summary, R.drawable.tuto_widgets)); mViewPager = (ViewPager) findViewById(R.id.viewPager); mViewPager.setAdapter(mTutorialPagerAdapter); final PageIndicator pageIndicator = (PageIndicator) findViewById(R.id.viewPagerIndicator); pageIndicator.setViewPager(mViewPager); pageIndicator.setOnPageChangeListener(this); mNextButton = (Button) findViewById(R.id.tutorialNext); mNextButton.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { if (mViewPager.getCurrentItem() == mTutorialPagerAdapter.getCount() - 1) { finish(); } else { moveToNext(); } } }); mPreviousButton = (Button) findViewById(R.id.tutorialPrevious); mPreviousButton.setOnClickListener(new OnClickListener() { @Override public void onClick(final View v) { moveToPrevious(); } }); } @Override public boolean onCreateOptionsMenu(final Menu menu) { getSupportMenuInflater().inflate(R.menu.activity_tutorial, menu); mSkipMenuItem = menu.findItem(R.id.menu_skip); mSkipMenuItem.setVisible(mViewPager.getCurrentItem() < mTutorialPagerAdapter.getCount() - 1); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(final MenuItem item) { if (item.getItemId() == R.id.menu_skip) { finish(); } return super.onOptionsItemSelected(item); } private void moveToPrevious() { mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1, true); } private void moveToNext() { mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1, true); } @Override public void onPageScrollStateChanged(final int position) { } @Override public void onPageScrolled(final int from, final float arg1, final int to) { } @Override public void onPageSelected(final int position) { if (position == mTutorialPagerAdapter.getCount() - 1) { mNextButton.setText(android.R.string.ok); if (mSkipMenuItem != null) mSkipMenuItem.setVisible(false); } else { mNextButton.setText(R.string.next); if (mSkipMenuItem != null) mSkipMenuItem.setVisible(true); } mPreviousButton.setVisibility(position > 0 && position < mTutorialPagerAdapter.getCount() - 1 ? View.VISIBLE : View.GONE); } private static class TutorialPagerAdapter extends PagerAdapter { private final Context mContext; private final List<TutorialView> mTutorialViews; private final LayoutInflater mLayoutInflater; public TutorialPagerAdapter(final Context context) { mContext = context; mTutorialViews = new ArrayList<TutorialActivity.TutorialView>(); mLayoutInflater = LayoutInflater.from(context); } public void addView(final TutorialView view) { mTutorialViews.add(view); } @Override public int getCount() { return mTutorialViews.size(); } @Override public Object instantiateItem(final View collection, final int position) { final TutorialView tutorialView = mTutorialViews.get(position); final View layout = mLayoutInflater.inflate(tutorialView.layoutId, null); final TextView title = (TextView) layout.findViewById(android.R.id.title); title.setText(mContext.getString(tutorialView.titleResId)); final TextView summary = (TextView) layout.findViewById(android.R.id.summary); summary.setText(Html.fromHtml(mContext.getString(tutorialView.summaryResId).toString())); final ImageView icon = (ImageView) layout.findViewById(android.R.id.icon); if (tutorialView.imageResId != 0 && icon != null) { icon.setImageResource(tutorialView.imageResId); } ((ViewPager) collection).addView(layout); return layout; } @Override public void destroyItem(final View collection, final int position, final Object view) { ((ViewPager) collection).removeView((View) view); } @Override public boolean isViewFromObject(final View view, final Object object) { return view == object; } } private static class TutorialView { private int layoutId = R.layout.tutorial_view; private final int titleResId; private final int summaryResId; private final int imageResId; private TutorialView(final int titleResId, final int summaryResId, final int imageResId) { this.titleResId = titleResId; this.summaryResId = summaryResId; this.imageResId = imageResId; } private TutorialView(final int layoutId, final int titleResId, final int summaryResId, final int imageResId) { this.layoutId = layoutId; this.titleResId = titleResId; this.summaryResId = summaryResId; this.imageResId = imageResId; } } }