package org.xbmc.android.remote.presentation.wizard;
import java.util.ArrayList;
import org.xbmc.android.remote.presentation.wizard.listener.PageCanFinishListener;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.ScrollView;
public abstract class WizardPage<T> extends ScrollView {
private ArrayList<PageCanFinishListener> listeners = new ArrayList<PageCanFinishListener>();
private boolean canFinish = false;
protected T input = null;
protected Wizard<T> wizard;
public WizardPage(Context context, AttributeSet attrs, int defStyle, Wizard<T> wizard) {
super(context, attrs, defStyle);
this.wizard = wizard;
}
public WizardPage(Context context, AttributeSet attrs, Wizard<T> wizard) {
super(context, attrs);
this.wizard = wizard;
}
public WizardPage(Context context, Wizard<T> wizard) {
super(context);
this.wizard = wizard;
}
public void init() {
inflate(getContext(), getLayoutId(), this);
onInit();
}
public OnClickListener getNextClickListener() {
return new OnClickListener() {
public void onClick(View v) {
showNextPage();
}
};
}
protected void showNextPage() {
wizard.showNextPage();
}
public abstract WizardPage<T> getNextPage() ;
public abstract int getLayoutId();
protected abstract void onInit();
protected void showBusyMessage(String msg) {
wizard.showBusyMessage(msg);
}
protected void removeBusyMessage() {
wizard.removeBusyMessage();
}
public void setInput(T input) {
this.input = input;
}
public T getInput() {
return input;
}
public boolean canFinish() {
return canFinish;
}
protected void setCanFinish(boolean canFinish) {
this.canFinish = canFinish;
notifyCanFinishListeners();
}
private void notifyCanFinishListeners() {
for(PageCanFinishListener listener : listeners) {
listener.canFinish(canFinish);
}
}
public void addCanFinishListener(PageCanFinishListener listener) {
listeners.add(listener);
}
public void removeCanFinishListener(PageCanFinishListener listener) {
listeners.remove(listener);
}
public void show() {
Animation animation = AnimationUtils.makeInAnimation(getContext(), false);
this.setAnimation(animation);
setVisibility(View.VISIBLE);
}
public void hide() {
Animation animation = AnimationUtils.makeOutAnimation(getContext(), false);
this.setAnimation(animation);
this.setVisibility(View.GONE);
}
}