package org.wikipedia.onboarding; import org.wikipedia.settings.Prefs; import java.util.concurrent.TimeUnit; public final class PrefsOnboardingStateMachine implements OnboardingStateMachine { private static final PrefsOnboardingStateMachine INSTANCE = new PrefsOnboardingStateMachine(); private static final long MIN_MINUTES_PER_TUTORIAL = 1; private long millisSinceLastTutorial; public static PrefsOnboardingStateMachine getInstance() { return INSTANCE; } @Override public boolean isTocTutorialEnabled() { // don't care about time since last tutorial here, since the ToC tooltip // is always the first one shown. return Prefs.isTocTutorialEnabled(); } @Override public void setTocTutorial() { Prefs.setTocTutorialEnabled(false); updateTimeSinceLastTutorial(); } @Override public boolean isSelectTextTutorialEnabled() { return minutesSinceLastTutorial() >= MIN_MINUTES_PER_TUTORIAL && !Prefs.isTocTutorialEnabled() && Prefs.isSelectTextTutorialEnabled(); } @Override public void setSelectTextTutorial() { Prefs.setSelectTextTutorialEnabled(false); updateTimeSinceLastTutorial(); } @Override public boolean isShareTutorialEnabled() { // don't care about time since last tutorial here, since the share tooltip is // tied to the highlight action. return !Prefs.isTocTutorialEnabled() && !isSelectTextTutorialEnabled() && Prefs.isShareTutorialEnabled(); } @Override public void setShareTutorial() { Prefs.setShareTutorialEnabled(false); updateTimeSinceLastTutorial(); } @Override public boolean isReadingListTutorialEnabled() { return Prefs.isReadingListTutorialEnabled(); } @Override public void setReadingListTutorial() { Prefs.setReadingListTutorialEnabled(false); } @Override public boolean isDescriptionEditTutorialEnabled() { return Prefs.isDescriptionEditTutorialEnabled(); } @Override public void setDescriptionEditTutorial() { Prefs.setDescriptionEditTutorialEnabled(false); } private void updateTimeSinceLastTutorial() { millisSinceLastTutorial = System.currentTimeMillis(); } private long minutesSinceLastTutorial() { return TimeUnit.MILLISECONDS.toMinutes(System.currentTimeMillis() - millisSinceLastTutorial); } private PrefsOnboardingStateMachine() { } }