package boston.Bus.Map.tutorials; import java.util.List; import boston.Bus.Map.R; import boston.Bus.Map.main.Main; import android.app.Activity; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; import android.text.method.LinkMovementMethod; import android.text.util.Linkify; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; public class Tutorial { private final List<TutorialStep> tutorialSteps; public Tutorial(List<TutorialStep> tutorialSteps) { this.tutorialSteps = tutorialSteps; if (tutorialSteps.size() < 2) { throw new RuntimeException("Tutorial must have at least 2 steps"); } } private int getStep(SharedPreferences prefs) { return prefs.getInt(Main.tutorialStepKey, 0); } private void setStep(SharedPreferences prefs, int step) { prefs.edit().putInt(Main.tutorialStepKey, step).apply(); } public void start(final Main parent) { final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(parent); final View tutorialView = parent.findViewById(R.id.mapViewTutorial); if (getStep(prefs) < 0) { tutorialView.setVisibility(View.GONE); return; } final TextView textView = (TextView) parent.findViewById(R.id.mapViewTutorialText); tutorialView.setVisibility(View.VISIBLE); final Button skipButton = (Button)parent.findViewById(R.id.mapViewTutorialSkipButton); final Button nextButton = (Button)parent.findViewById(R.id.mapViewTutorialNextButton); skipButton.setVisibility(View.VISIBLE); skipButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { tutorialSteps.get(getStep(prefs)).teardown(parent); tutorialView.setVisibility(View.GONE); setStep(prefs, -1); } }); nextButton.setVisibility(View.VISIBLE); nextButton.setText("Next"); nextButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { int currentStep = getStep(prefs); if (currentStep >= tutorialSteps.size() - 1) { tutorialView.setVisibility(View.GONE); setStep(prefs, -1); } else { tutorialSteps.get(currentStep).teardown(parent); setStep(prefs, currentStep + 1); updateCurrent(parent, textView, prefs, nextButton, skipButton); } } }); updateCurrent(parent, textView, prefs, nextButton, skipButton); } protected void updateCurrent(Main parent, TextView textView, SharedPreferences prefs, Button nextButton, Button skipButton) { int currentStep = getStep(prefs); int resource = tutorialSteps.get(currentStep).getTextResource(); textView.setText(resource); Linkify.addLinks(textView, Linkify.ALL); tutorialSteps.get(currentStep).setup(parent); if (currentStep == tutorialSteps.size() - 1) { // next is last one nextButton.setText("Ok"); skipButton.setVisibility(View.GONE); } } }