Wizard improved
This commit is contained in:
parent
723fd1a461
commit
21e8581f1f
@ -52,6 +52,12 @@ final class AppWizardFlow implements WizardFlow {
|
|||||||
return listWizardFlow.getName();
|
return listWizardFlow.getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public WizardStep getStep(@Nonnull String name) {
|
||||||
|
return listWizardFlow.getStep(name);
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public WizardStep getNextStep(@Nonnull WizardStep step) {
|
public WizardStep getNextStep(@Nonnull WizardStep step) {
|
||||||
|
@ -14,6 +14,8 @@ import javax.annotation.Nonnull;
|
|||||||
|
|
||||||
import static android.view.View.GONE;
|
import static android.view.View.GONE;
|
||||||
import static android.view.View.VISIBLE;
|
import static android.view.View.VISIBLE;
|
||||||
|
import static org.solovyev.android.calculator.wizard.Wizard.FLOW;
|
||||||
|
import static org.solovyev.android.calculator.wizard.Wizard.STEP;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User: serso
|
* User: serso
|
||||||
@ -22,9 +24,6 @@ import static android.view.View.VISIBLE;
|
|||||||
*/
|
*/
|
||||||
public final class CalculatorWizardActivity extends SherlockFragmentActivity {
|
public final class CalculatorWizardActivity extends SherlockFragmentActivity {
|
||||||
|
|
||||||
static final String FLOW = "flow";
|
|
||||||
static final String STEP = "step";
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
**********************************************************************
|
**********************************************************************
|
||||||
*
|
*
|
||||||
@ -58,14 +57,19 @@ public final class CalculatorWizardActivity extends SherlockFragmentActivity {
|
|||||||
finishButton = findViewById(R.id.wizard_finish_button);
|
finishButton = findViewById(R.id.wizard_finish_button);
|
||||||
|
|
||||||
String wizardName = getIntent().getStringExtra(FLOW);
|
String wizardName = getIntent().getStringExtra(FLOW);
|
||||||
WizardStep step = (WizardStep) getIntent().getSerializableExtra(STEP);
|
String stepName = getIntent().getStringExtra(STEP);
|
||||||
if (savedInstanceState != null) {
|
if (savedInstanceState != null) {
|
||||||
wizardName = savedInstanceState.getString(FLOW);
|
wizardName = savedInstanceState.getString(FLOW);
|
||||||
step = (WizardStep) savedInstanceState.getSerializable(STEP);
|
stepName = savedInstanceState.getString(STEP);
|
||||||
}
|
}
|
||||||
|
|
||||||
flow = Wizard.getWizardFlow(wizardName != null ? wizardName : Wizard.FIRST_TIME_WIZARD);
|
flow = Wizard.getWizardFlow(wizardName != null ? wizardName : Wizard.FIRST_TIME_WIZARD);
|
||||||
|
|
||||||
|
WizardStep step = null;
|
||||||
|
if(stepName != null) {
|
||||||
|
step = flow.getStep(stepName);
|
||||||
|
}
|
||||||
|
|
||||||
if (step == null) {
|
if (step == null) {
|
||||||
step = flow.getFirstStep();
|
step = flow.getFirstStep();
|
||||||
}
|
}
|
||||||
@ -115,7 +119,7 @@ public final class CalculatorWizardActivity extends SherlockFragmentActivity {
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (tryGoNext()) {
|
if (tryGoNext()) {
|
||||||
finish();
|
finishFlow();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -138,6 +142,13 @@ public final class CalculatorWizardActivity extends SherlockFragmentActivity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void finishFlow() {
|
||||||
|
if (flow != null && step != null) {
|
||||||
|
Wizard.saveWizardFinished(flow, step);
|
||||||
|
}
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
private boolean tryGoPrev() {
|
private boolean tryGoPrev() {
|
||||||
if (this.step == null) {
|
if (this.step == null) {
|
||||||
return true;
|
return true;
|
||||||
@ -206,7 +217,16 @@ public final class CalculatorWizardActivity extends SherlockFragmentActivity {
|
|||||||
super.onSaveInstanceState(out);
|
super.onSaveInstanceState(out);
|
||||||
|
|
||||||
out.putString(FLOW, flow.getName());
|
out.putString(FLOW, flow.getName());
|
||||||
out.putSerializable(STEP, step);
|
out.putString(STEP, step.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPause() {
|
||||||
|
super.onPause();
|
||||||
|
|
||||||
|
if (flow != null && step != null) {
|
||||||
|
Wizard.saveLastWizardStep(flow, step);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
WizardStep getStep() {
|
WizardStep getStep() {
|
||||||
@ -230,4 +250,16 @@ public final class CalculatorWizardActivity extends SherlockFragmentActivity {
|
|||||||
intent.putExtra(FLOW, name);
|
intent.putExtra(FLOW, name);
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void continueWizard(@Nonnull String name, @Nonnull Context context) {
|
||||||
|
final String step = Wizard.getLastSavedWizardStepName(name);
|
||||||
|
|
||||||
|
final Intent intent = new Intent(context, CalculatorWizardActivity.class);
|
||||||
|
intent.putExtra(FLOW, name);
|
||||||
|
if (step != null) {
|
||||||
|
intent.putExtra(STEP, step);
|
||||||
|
}
|
||||||
|
context.startActivity(intent);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package org.solovyev.android.calculator.wizard;
|
package org.solovyev.android.calculator.wizard;
|
||||||
|
|
||||||
|
import com.google.common.base.Predicate;
|
||||||
|
import com.google.common.collect.Iterables;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -28,6 +31,18 @@ public final class ListWizardFlow implements WizardFlow {
|
|||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
@Override
|
||||||
|
public WizardStep getStep(@Nonnull final String name) {
|
||||||
|
return Iterables.find(wizardSteps, new Predicate<WizardStep>() {
|
||||||
|
@Override
|
||||||
|
public boolean apply(@Nullable WizardStep step) {
|
||||||
|
assert step != null;
|
||||||
|
return step.getName().equals(name);
|
||||||
|
}
|
||||||
|
}, null);
|
||||||
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override
|
@Override
|
||||||
public WizardStep getNextStep(@Nonnull WizardStep step) {
|
public WizardStep getNextStep(@Nonnull WizardStep step) {
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
package org.solovyev.android.calculator.wizard;
|
package org.solovyev.android.calculator.wizard;
|
||||||
|
|
||||||
import org.solovyev.android.prefs.Preference;
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
import org.solovyev.android.calculator.CalculatorApplication;
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
import static org.solovyev.android.calculator.wizard.AppWizardFlow.newDefaultWizardFlow;
|
import static org.solovyev.android.calculator.wizard.AppWizardFlow.newDefaultWizardFlow;
|
||||||
import static org.solovyev.android.calculator.wizard.AppWizardFlow.newFirstTimeWizardFlow;
|
import static org.solovyev.android.calculator.wizard.AppWizardFlow.newFirstTimeWizardFlow;
|
||||||
import static org.solovyev.android.prefs.StringPreference.ofEnum;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User: serso
|
* User: serso
|
||||||
@ -17,6 +20,9 @@ public final class Wizard {
|
|||||||
|
|
||||||
public static final String FIRST_TIME_WIZARD = "first-wizard";
|
public static final String FIRST_TIME_WIZARD = "first-wizard";
|
||||||
public static final String DEFAULT_WIZARD_FLOW = "app-wizard";
|
public static final String DEFAULT_WIZARD_FLOW = "app-wizard";
|
||||||
|
static final String FLOW = "flow";
|
||||||
|
static final String FLOW_FINISHED = "flow_finished";
|
||||||
|
static final String STEP = "step";
|
||||||
|
|
||||||
private Wizard() {
|
private Wizard() {
|
||||||
throw new AssertionError();
|
throw new AssertionError();
|
||||||
@ -32,4 +38,54 @@ public final class Wizard {
|
|||||||
throw new IllegalArgumentException("Wizard flow " + name + " is not supported");
|
throw new IllegalArgumentException("Wizard flow " + name + " is not supported");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isWizardFinished(@Nonnull String name, @Nonnull Context context) {
|
||||||
|
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
return preferences.getBoolean(makeFlowFinishedPreferenceKey(name), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void saveLastWizardStep(@Nonnull WizardFlow flow, @Nonnull WizardStep step) {
|
||||||
|
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(CalculatorApplication.getInstance());
|
||||||
|
final SharedPreferences.Editor editor = preferences.edit();
|
||||||
|
|
||||||
|
editor.putString(makeFlowStepPreferenceKey(flow), step.name());
|
||||||
|
|
||||||
|
editor.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
static String getLastSavedWizardStepName(@Nonnull String name) {
|
||||||
|
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(CalculatorApplication.getInstance());
|
||||||
|
|
||||||
|
return preferences.getString(makeFlowStepPreferenceKey(name), null);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void saveWizardFinished(@Nonnull WizardFlow flow, @Nonnull WizardStep step) {
|
||||||
|
final SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(CalculatorApplication.getInstance());
|
||||||
|
final SharedPreferences.Editor editor = preferences.edit();
|
||||||
|
|
||||||
|
editor.putBoolean(makeFlowFinishedPreferenceKey(flow), flow.getNextStep(step) == null);
|
||||||
|
|
||||||
|
editor.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
private static String makeFlowFinishedPreferenceKey(@Nonnull String flowName) {
|
||||||
|
return FLOW_FINISHED + ":" + flowName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
private static String makeFlowStepPreferenceKey(@Nonnull WizardFlow flow) {
|
||||||
|
return makeFlowStepPreferenceKey(flow.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
private static String makeFlowStepPreferenceKey(@Nonnull String flowName) {
|
||||||
|
return FLOW + ":" + flowName;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
private static String makeFlowFinishedPreferenceKey(@Nonnull WizardFlow flow) {
|
||||||
|
return makeFlowFinishedPreferenceKey(flow.getName());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,9 @@ public interface WizardFlow {
|
|||||||
@Nonnull
|
@Nonnull
|
||||||
String getName();
|
String getName();
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
WizardStep getStep(@Nonnull String name);
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
WizardStep getNextStep(@Nonnull WizardStep step);
|
WizardStep getNextStep(@Nonnull WizardStep step);
|
||||||
|
|
||||||
|
@ -185,4 +185,9 @@ enum WizardStep {
|
|||||||
public boolean isVisible() {
|
public boolean isVisible() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nonnull
|
||||||
|
public String getName() {
|
||||||
|
return name();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -67,7 +67,7 @@ public class CalculatorWizardActivityTest {
|
|||||||
public void testCreate() throws Exception {
|
public void testCreate() throws Exception {
|
||||||
final Intent intent = new Intent();
|
final Intent intent = new Intent();
|
||||||
intent.setClass(activity, CalculatorWizardActivity.class);
|
intent.setClass(activity, CalculatorWizardActivity.class);
|
||||||
intent.putExtra(CalculatorWizardActivity.FLOW, Wizard.DEFAULT_WIZARD_FLOW);
|
intent.putExtra(Wizard.FLOW, Wizard.DEFAULT_WIZARD_FLOW);
|
||||||
controller = Robolectric.buildActivity(CalculatorWizardActivity.class).withIntent(intent);
|
controller = Robolectric.buildActivity(CalculatorWizardActivity.class).withIntent(intent);
|
||||||
activity = controller.get();
|
activity = controller.get();
|
||||||
controller.create(null);
|
controller.create(null);
|
||||||
|
Loading…
Reference in New Issue
Block a user