package com.lyft.scoop; import android.os.Parcelable; import android.util.SparseArray; import android.view.View; public class Screen { public static final String SERVICE_NAME = "screen"; private transient SparseArray<Parcelable> viewState; public Screen() { viewState = new SparseArray<Parcelable>(); } public static boolean equals(Screen previous, Screen next) { if (previous == null || next == null) { return false; } return previous.equals(next); } public void saveViewState(View view) { SparseArray<Parcelable> viewState = new SparseArray<Parcelable>(); view.saveHierarchyState(viewState); this.viewState = viewState; } public void restoreViewState(View view) { view.restoreHierarchyState(viewState); } public Class<? extends ViewController> getController() { Controller controller = getClass().getAnnotation(Controller.class); if (controller != null) { return controller.value(); } return null; } public Integer getLayout() { Layout layout = getClass().getAnnotation(Layout.class); if (layout != null) { return layout.value(); } return null; } public static <T extends Screen> T fromScoop(Scoop scoop) { if (scoop == null) { return null; } return scoop.findService("screen"); } public static <T extends Screen> T fromView(View view) { return Screen.fromScoop(Scoop.fromView(view)); } public static <T extends Screen> T fromController(ViewController controller) { return Screen.fromScoop(controller.getScoop()); } @Override public boolean equals(Object o) { if (o == this) { return true; } if (!(o instanceof Screen)) { return false; } Screen screen = (Screen) o; return equals(screen.getClass(), getClass()); } public boolean equals(Object a, Object b) { return (a == b) || (a != null && a.equals(b)); } }