wizard finished

This commit is contained in:
Solovyev_S
2013-07-01 13:00:02 +04:00
parent 5518a38f16
commit cba364f036
12 changed files with 186 additions and 107 deletions

View File

@@ -46,22 +46,14 @@
a:layout_height="wrap_content"
a:layout_width="0dp"
a:layout_weight="1"
a:text="Prev"/>
a:text="@string/cpp_wizard_back"/>
<Button
a:id="@+id/wizard_next_button"
a:layout_height="wrap_content"
a:layout_width="0dp"
a:layout_weight="1"
a:text="Next"/>
<Button
a:id="@+id/wizard_finish_button"
a:layout_height="wrap_content"
a:layout_width="0dp"
a:layout_weight="1"
a:visibility="gone"
a:text="Finish"/>
a:text="@string/cpp_wizard_next"/>
</LinearLayout>

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright 2013 serso aka se.solovyev
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
~
~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~ Contact details
~
~ Email: se.solovyev@gmail.com
~ Site: http://se.solovyev.org
-->
<LinearLayout
xmlns:a="http://schemas.android.com/apk/res/android"
a:layout_width="match_parent"
a:layout_height="match_parent"
a:orientation="vertical">
<TextView a:layout_height="wrap_content"
a:layout_width="match_parent"
a:text="@string/cpp_wizard_final_free_and_opensource"/>
<TextView a:layout_height="wrap_content"
a:layout_width="match_parent"
a:layout_marginTop="10dp"
a:text="@string/cpp_wizard_final_ways_to_help"/>
<Button a:id="@+id/cpp_wizard_final_donate_button"
a:layout_height="wrap_content"
a:layout_width="match_parent"
a:text="@string/cpp_wizard_final_donate"/>
<Button a:id="@+id/cpp_wizard_final_translate_button"
a:layout_height="wrap_content"
a:layout_width="match_parent"
a:text="@string/cpp_wizard_final_translate"/>
<Button a:id="@+id/cpp_wizard_final_contribute_button"
a:layout_height="wrap_content"
a:layout_width="match_parent"
a:text="@string/cpp_wizard_final_contribute"/>
</LinearLayout>

View File

@@ -28,6 +28,7 @@ import javax.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import static org.solovyev.android.calculator.wizard.WizardStep.last;
import static org.solovyev.android.calculator.wizard.Wizards.DEFAULT_WIZARD_FLOW;
import static org.solovyev.android.calculator.wizard.Wizards.FIRST_TIME_WIZARD;
import static org.solovyev.android.calculator.wizard.WizardStep.welcome;
@@ -50,7 +51,7 @@ final class AppWizardFlow implements WizardFlow {
static AppWizardFlow newDefaultWizardFlow() {
final List<WizardStep> wizardSteps = new ArrayList<WizardStep>();
for (WizardStep wizardStep : WizardStep.values()) {
if (wizardStep != welcome && wizardStep.isVisible()) {
if (wizardStep != welcome && wizardStep != last && wizardStep.isVisible()) {
wizardSteps.add(wizardStep);
}
}

View File

@@ -30,6 +30,7 @@ import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.View;
import android.widget.Button;
import org.solovyev.android.calculator.R;
@@ -67,8 +68,7 @@ public final class CalculatorWizardActivity extends FragmentActivity {
*/
private View prevButton;
private View nextButton;
private View finishButton;
private Button nextButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -77,8 +77,7 @@ public final class CalculatorWizardActivity extends FragmentActivity {
setContentView(R.layout.cpp_wizard);
prevButton = findViewById(R.id.wizard_prev_button);
nextButton = findViewById(R.id.wizard_next_button);
finishButton = findViewById(R.id.wizard_finish_button);
nextButton = (Button) findViewById(R.id.wizard_next_button);
String wizardName = getIntent().getStringExtra(FLOW);
String stepName = getIntent().getStringExtra(STEP);
@@ -109,29 +108,10 @@ public final class CalculatorWizardActivity extends FragmentActivity {
initTitle();
initNextButton();
initFinishButton();
initPrevButton();
}
}
private void initFinishButton() {
final WizardStep nextStep = flow.getNextStep(step);
if (nextStep == null) {
finishButton.setVisibility(VISIBLE);
finishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (tryGoNext()) {
finishFlow();
}
}
});
} else {
finishButton.setVisibility(GONE);
finishButton.setOnClickListener(null);
}
}
private void initTitle() {
setTitle(step.getTitleResId());
}
@@ -157,10 +137,17 @@ public final class CalculatorWizardActivity extends FragmentActivity {
private void initNextButton() {
final WizardStep nextStep = flow.getNextStep(step);
if (nextStep == null) {
nextButton.setVisibility(GONE);
nextButton.setOnClickListener(null);
nextButton.setText(R.string.cpp_wizard_finish);
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (tryGoNext()) {
finishFlow();
}
}
});
} else {
nextButton.setVisibility(VISIBLE);
nextButton.setText(step.getNextButtonTitleResId());
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -284,10 +271,6 @@ public final class CalculatorWizardActivity extends FragmentActivity {
return nextButton;
}
View getFinishButton() {
return finishButton;
}
/*
**********************************************************************
*

View File

@@ -0,0 +1,69 @@
package org.solovyev.android.calculator.wizard;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.preference.Preference;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import net.robotmedia.billing.BillingController;
import org.solovyev.android.ads.AdsController;
import org.solovyev.android.calculator.R;
import org.solovyev.android.calculator.preferences.CalculatorPurchaseDialogActivity;
import static android.content.Intent.ACTION_VIEW;
public class FinalWizardStep extends Fragment {
private static final String GITHUB_URL = "https://github.com/serso/android-calculatorpp";
private static final String CROWDIN_URL = "http://crowdin.net/project/calculatorpp";
private Button donateButton;
private Button translateButton;
private Button contributeButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.cpp_wizard_step_final, null);
}
@Override
public void onViewCreated(View root, Bundle savedInstanceState) {
super.onViewCreated(root, savedInstanceState);
donateButton = (Button) root.findViewById(R.id.cpp_wizard_final_donate_button);
donateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(getActivity(), CalculatorPurchaseDialogActivity.class));
}
});
translateButton = (Button) root.findViewById(R.id.cpp_wizard_final_translate_button);
translateButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showUrl(CROWDIN_URL);
}
});
contributeButton = (Button) root.findViewById(R.id.cpp_wizard_final_contribute_button);
contributeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showUrl(GITHUB_URL);
}
});
}
private void showUrl(String url) {
startActivity(new Intent(ACTION_VIEW, Uri.parse(url)));
}
}

View File

@@ -48,23 +48,7 @@ import static org.solovyev.android.calculator.wizard.OnScreenCalculatorWizardSte
*/
enum WizardStep {
welcome(WelcomeWizardStep.class, R.string.cpp_wizard_welcome_title) {
@Override
boolean onNext(@Nonnull Fragment fragment) {
return true;
}
@Override
boolean onPrev(@Nonnull Fragment fragment) {
return true;
}
@Nullable
@Override
Bundle getFragmentArgs() {
return null;
}
},
welcome(WelcomeWizardStep.class, R.string.cpp_wizard_welcome_title, R.string.cpp_wizard_start),
choose_layout(ChooseLayoutWizardStep.class, R.string.cpp_wizard_layout_title) {
@Override
@@ -79,11 +63,6 @@ enum WizardStep {
return true;
}
@Override
boolean onPrev(@Nonnull Fragment fragment) {
return true;
}
@Nullable
@Override
Bundle getFragmentArgs() {
@@ -113,11 +92,6 @@ enum WizardStep {
return true;
}
@Override
boolean onPrev(@Nonnull Fragment fragment) {
return true;
}
@Nullable
@Override
Bundle getFragmentArgs() {
@@ -141,11 +115,6 @@ enum WizardStep {
return true;
}
@Override
boolean onPrev(@Nonnull Fragment fragment) {
return true;
}
@Nullable
@Override
Bundle getFragmentArgs() {
@@ -157,32 +126,25 @@ enum WizardStep {
}
},
drag_button_step(DragButtonWizardStep.class, R.string.cpp_wizard_dragbutton_title) {
@Override
boolean onNext(@Nonnull Fragment fragment) {
return true;
}
drag_button(DragButtonWizardStep.class, R.string.cpp_wizard_dragbutton_title),
@Override
boolean onPrev(@Nonnull Fragment fragment) {
return true;
}
@Nullable
@Override
Bundle getFragmentArgs() {
return null;
}
};
last(FinalWizardStep.class, R.string.cpp_wizard_final_title);
@Nonnull
private final Class<? extends Fragment> fragmentClass;
private final int titleResId;
private final int nextButtonTitleResId;
WizardStep(@Nonnull Class<? extends Fragment> fragmentClass, int titleResId) {
this(fragmentClass, titleResId, R.string.cpp_wizard_next);
}
WizardStep(@Nonnull Class<? extends Fragment> fragmentClass, int titleResId, int nextButtonTitleResId) {
this.fragmentClass = fragmentClass;
this.titleResId = titleResId;
this.nextButtonTitleResId = nextButtonTitleResId;
}
public String getFragmentTag() {
@@ -198,12 +160,22 @@ enum WizardStep {
return titleResId;
}
abstract boolean onNext(@Nonnull Fragment fragment);
int getNextButtonTitleResId() {
return nextButtonTitleResId;
}
abstract boolean onPrev(@Nonnull Fragment fragment);
boolean onNext(@Nonnull Fragment fragment) {
return true;
}
boolean onPrev(@Nonnull Fragment fragment) {
return true;
}
@Nullable
abstract Bundle getFragmentArgs();
Bundle getFragmentArgs() {
return null;
}
public boolean isVisible() {
return true;

View File

@@ -156,11 +156,10 @@ public class CalculatorWizardActivityTest {
}
@Test
public void testNextButtonShouldNotBeShownAtTheEnd() throws Exception {
public void testNextButtonShouldBeShownAtTheEnd() throws Exception {
setLastStep();
assertEquals(VISIBLE, activity.getPrevButton().getVisibility());
assertEquals(GONE, activity.getNextButton().getVisibility());
assertEquals(VISIBLE, activity.getFinishButton().getVisibility());
assertEquals(VISIBLE, activity.getNextButton().getVisibility());
}
private void setLastStep() {
@@ -171,7 +170,6 @@ public class CalculatorWizardActivityTest {
public void testPrevButtonShouldNotBeShownAtTheStart() throws Exception {
setFirstStep();
assertEquals(VISIBLE, activity.getNextButton().getVisibility());
assertEquals(GONE, activity.getFinishButton().getVisibility());
assertEquals(GONE, activity.getPrevButton().getVisibility());
}
@@ -182,9 +180,9 @@ public class CalculatorWizardActivityTest {
@Test
public void testShouldSaveLastWizardStateOnPause() throws Exception {
assertNull(Wizards.getLastSavedWizardStepName(activity.getFlow().getName()));
activity.setStep(WizardStep.drag_button_step);
activity.setStep(WizardStep.drag_button);
activity.onPause();
assertEquals(WizardStep.drag_button_step.getName(), Wizards.getLastSavedWizardStepName(activity.getFlow().getName()));
assertEquals(WizardStep.drag_button.getName(), Wizards.getLastSavedWizardStepName(activity.getFlow().getName()));
}
@Test

View File

@@ -115,11 +115,11 @@ public class WizardStepTest {
WizardStep.choose_layout.onNext(layoutFragment);
}
@Config(qualifiers = "large")
/* @Config(qualifiers = "large")
@Test
public void testChooseLayoutShouldBeVisibleForTablet() throws Exception {
assertTrue(WizardStep.choose_layout.isVisible());
}
}*/
@Config(qualifiers = "normal")
@Test