package org.solovyev.android.wizard;
import android.content.Context;
import android.content.SharedPreferences;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import static android.preference.PreferenceManager.getDefaultSharedPreferences;
public class BaseWizard implements Wizard {
static final String FLOW = "flow";
static final String FLOW_FINISHED = "flow_finished";
@Nonnull
private final String name;
@Nonnull
private final Context context;
@Nonnull
private final WizardFlow flow;
public BaseWizard(@Nonnull String name,
@Nonnull Context context,
@Nonnull WizardFlow flow) {
this.name = name;
this.context = context;
this.flow = flow;
}
@Nonnull
static String makeFinishedPreferenceKey(@Nonnull String flowName) {
return FLOW_FINISHED + ":" + flowName;
}
@Nonnull
static String makeLastStepPreferenceKey(@Nonnull String flowName) {
return FLOW + ":" + flowName;
}
@Override
public void saveLastStep(@Nonnull WizardStep step) {
final SharedPreferences preferences = getPreferences();
final SharedPreferences.Editor editor = preferences.edit();
editor.putString(makeLastStepPreferenceKey(name), step.getName());
editor.apply();
}
@Override
public void saveFinished(@Nonnull WizardStep step, boolean forceFinish) {
final SharedPreferences preferences = getPreferences();
final SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean(makeFinishedPreferenceKey(name), forceFinish || flow.getNextStep(step) == null);
editor.apply();
}
@Nonnull
private SharedPreferences getPreferences() {
return getDefaultSharedPreferences(context);
}
@Override
@Nullable
public String getLastSavedStepName() {
return getPreferences().getString(makeLastStepPreferenceKey(name), null);
}
@Override
public boolean isFinished() {
return getPreferences().getBoolean(makeFinishedPreferenceKey(name), false);
}
@Override
public boolean isStarted() {
return getLastSavedStepName() != null;
}
@Override
@Nonnull
public WizardFlow getFlow() {
return flow;
}
@Nonnull
@Override
public String getName() {
return name;
}
}