package org.xbmc.android.remote.presentation.wizard; import java.util.ArrayList; import org.xbmc.android.remote.R; import org.xbmc.android.remote.presentation.wizard.listener.PageCanFinishListener; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.FrameLayout; import android.widget.LinearLayout; import android.widget.TextView; public abstract class Wizard<T> extends Activity { private ArrayList<WizardPage<T>> pages = new ArrayList<WizardPage<T>>(); private ArrayList<WizardPage<T>> shownPagesStack = new ArrayList<WizardPage<T>>(); private WizardPage<T> currentPage = null; private int currentPos = -1; private Button next; private Button prev; private FrameLayout main; private LinearLayout overlay; private TextView msg; public Wizard() { super(); } @Override protected final void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.setup_wizard); main = (FrameLayout) findViewById(R.id.setup_wizard_root); next = (Button) findViewById(R.id.setup_button_next); prev = (Button) findViewById(R.id.setup_button_prev); next.setEnabled(false); prev.setEnabled(false); overlay = (LinearLayout) findViewById(R.id.setup_wizard_msg_overlay); msg = (TextView) findViewById(R.id.setup_wizard_msg); overlay.setVisibility(View.GONE); doSetupPages(); checkButtons(); for(WizardPage<T> page : pages) { page.init(); main.addView(page, 0); page.setVisibility(View.GONE); } currentPage.setVisibility(View.VISIBLE); shownPagesStack.add(currentPage); next.setOnClickListener(currentPage.getNextClickListener()); } public abstract void doSetupPages(); void showNextPage() { if(currentPage != null && currentPage.getNextPage() != null) { currentPage.hide(); currentPage = currentPage.getNextPage(); currentPage.show(); shownPagesStack.add(currentPage); next.setOnClickListener(currentPage.getNextClickListener()); }else{ if(currentPos < pages.size() - 1) { WizardPage<T> page = pages.get(++currentPos); page.setInput(currentPage.getInput()); checkButtons(); currentPage.hide(); currentPage = page; currentPage.show(); shownPagesStack.add(currentPage); next.setOnClickListener(currentPage.getNextClickListener()); }else{ //finish wizard doFinish(); finish(); } } } protected abstract void doFinish(); void showPrevPage() { } void showBusyMessage(String msg) { this.msg.setText(msg); overlay.setVisibility(View.VISIBLE); } void removeBusyMessage() { overlay.setVisibility(View.GONE); } protected void addPage(final WizardPage<T> page) { if(currentPage == null) { currentPage = page; currentPos = 0; } pages.add(page); page.addCanFinishListener(new PageCanFinishListener() { public void canFinish(boolean b) { next.setEnabled(b); } }); checkButtons(); } private void checkButtons() { if(currentPos == pages.size() -1 ) { next.setText("Finish"); } else { next.setText("Next"); } /*if(currentPos == 0) { prev.setEnabled(false); }else { prev.setEnabled(true); }*/ } }