package com.wealthfront.magellan;
import android.content.Context;
import android.os.Bundle;
import android.view.ViewGroup;
import java.util.ArrayList;
import java.util.List;
/**
* A Screen containing a list of screens. Useful to display reusable Screens that can be either in another one or on
* it's own.
*/
public abstract class ScreenGroup<S extends Screen, V extends ViewGroup & ScreenView> extends Screen<V> {
private List<S> screens;
public ScreenGroup() {
this.screens = new ArrayList<>();
}
public ScreenGroup(List<S> screens) {
this.screens = new ArrayList<>(screens);
}
public void addScreen(S screen) {
this.checkOnCreateNotYetCalled("Cannot add screen after onCreate is called");
screen.checkOnCreateNotYetCalled("Cannot add a screen after onCreate is called on the screen");
screens.add(screen);
}
public void addScreens(List<S> screens) {
for (S screen : screens) {
addScreen(screen);
}
}
@Override
protected void onShow(Context context) {
for (Screen screen : screens) {
screen.recreateView(getActivity(), getNavigator());
screen.createDialog();
screen.onShow(context);
}
}
@Override
protected void onRestore(Bundle savedInstanceState) {
for (Screen screen : screens) {
screen.onRestore(savedInstanceState);
}
}
@Override
protected void onResume(Context context) {
for (Screen screen : screens) {
screen.onResume(context);
}
}
@Override
protected void onPause(Context context) {
for (Screen screen : screens) {
screen.onPause(context);
}
}
@Override
protected void onSave(Bundle outState) {
for (Screen screen : screens) {
screen.onSave(outState);
}
}
@Override
protected void onHide(Context context) {
for (Screen screen : screens) {
screen.onHide(context);
screen.destroyDialog();
screen.destroyView();
}
}
protected final List<S> getScreens() {
return new ArrayList<>(screens);
}
}