Index: pkg/immi_samples/lib/android/src/main/com/google/dartino/immisamples/Drawer.java |
diff --git a/pkg/immi_samples/lib/android/src/main/com/google/dartino/immisamples/Drawer.java b/pkg/immi_samples/lib/android/src/main/com/google/dartino/immisamples/Drawer.java |
deleted file mode 100644 |
index 7899cdbbbe44af7f291acbe78452eccafdd00ec5..0000000000000000000000000000000000000000 |
--- a/pkg/immi_samples/lib/android/src/main/com/google/dartino/immisamples/Drawer.java |
+++ /dev/null |
@@ -1,180 +0,0 @@ |
-// Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE.md file. |
- |
-package com.google.dartino.immisamples; |
- |
-import android.app.Fragment; |
-import android.os.Handler; |
-import android.os.Looper; |
-import android.support.v4.widget.DrawerLayout; |
- |
-import immi.AnyNode; |
-import immi.AnyNodePatch; |
-import immi.AnyNodePresenter; |
-import immi.DrawerNode; |
-import immi.DrawerPatch; |
-import immi.DrawerPresenter; |
-import immi.EmptyPaneNode; |
-import immi.EmptyPanePatch; |
- |
-public class Drawer implements DrawerPresenter { |
- |
- /** |
- * Abstract base class for a fragment implementing a drawer pane. |
- */ |
- public static abstract class PaneFragment extends Fragment { |
- /** |
- * Implementors of a drawer-pane fragment must use this to associate actions with its presenter. |
- * @param layout Drawer layout containing this fragment. |
- * @param presenter Pane presenter associated with this fragment. |
- */ |
- public abstract void setup(DrawerLayout layout, PanePresenter presenter); |
- |
- /** |
- * Implementors must define this such that it will adjust the state of the drawer pane. |
- * @param open Requested 'open' state value to set the panes view to. |
- */ |
- public abstract void setOpenedState(boolean open); |
- } |
- |
- /** |
- * Abstract base class for a presenter that is used in a drawer pane. |
- */ |
- public static abstract class PanePresenter implements AnyNodePresenter { |
- /** |
- * Accessor for the drawer-pane fragment associated with this presenter. |
- */ |
- public abstract PaneFragment getPaneFragment(); |
- |
- /** |
- * Toggle the presentation state of this drawer pane. |
- */ |
- public final void toggle() { proxy.toggle(); } |
- |
- /** |
- * Set the presentation state to 'open' on this drawer pane. |
- */ |
- public final void open() { proxy.open(); } |
- |
- /** |
- * Set the presentation state to 'closed' on this drawer pane. |
- */ |
- public final void close() { proxy.close(); } |
- |
- private void setup(DrawerLayout layout, DrawerProxy proxy) { |
- this.proxy = proxy; |
- getPaneFragment().setup(layout, this); |
- } |
- |
- private DrawerProxy proxy; |
- } |
- |
- public Drawer(DrawerLayout layout, |
- PanePresenter left, |
- AnyNodePresenter center, |
- PanePresenter right) { |
- centerPresenter = center; |
- leftPresenter = left; |
- rightPresenter = right; |
- if (left != null) { |
- left.setup(layout, new DrawerProxy() { |
- @Override public void toggle() { toggleLeft(); } |
- @Override public void open() { setLeftVisible(true); } |
- @Override public void close() { setLeftVisible(false); } |
- }); |
- } |
- if (right != null) { |
- right.setup(layout, new DrawerProxy() { |
- @Override public void toggle() { toggleRight(); } |
- @Override public void open() { setRightVisible(true); } |
- @Override public void close() { setRightVisible(false); } |
- }); |
- } |
- } |
- |
- public boolean isReady() { return root != null; } |
- |
- public boolean getLeftVisible() { |
- return isReady() && root.getLeftVisible(); |
- } |
- |
- public boolean getRightVisible() { |
- return isReady() && root.getRightVisible(); |
- } |
- |
- public void setLeftVisible(boolean leftVisible) { |
- if (getLeftVisible() != leftVisible) toggleLeft(); |
- } |
- |
- public void setRightVisible(boolean rightVisible) { |
- if (getRightVisible() != rightVisible) toggleRight(); |
- } |
- |
- public void toggleLeft() { |
- if (isReady()) root.getToggleLeft().dispatch(); |
- } |
- |
- public void toggleRight() { |
- if (isReady()) root.getToggleRight().dispatch(); |
- } |
- |
- @Override |
- public void present(final DrawerNode node) { |
- root = node; |
- presentPane(node.getLeft(), leftPresenter); |
- if (centerPresenter != null) centerPresenter.present(node.getCenter()); |
- presentPane(node.getRight(), rightPresenter); |
- new Handler(Looper.getMainLooper()).post(new Runnable() { |
- @Override |
- public void run() { |
- setPaneOpenedState(node.getLeftVisible(), leftPresenter); |
- setPaneOpenedState(node.getRightVisible(), rightPresenter); |
- } |
- }); |
- } |
- |
- @Override |
- public void patch(final DrawerPatch patch) { |
- root = patch.getCurrent(); |
- patchPane(patch.getLeft(), leftPresenter); |
- if (centerPresenter != null) patch.getCenter().applyTo(centerPresenter); |
- patch.getRight().applyTo(rightPresenter); |
- if (patch.getLeftVisible().hasChanged() || patch.getRightVisible().hasChanged()) { |
- new Handler(Looper.getMainLooper()).post(new Runnable() { |
- @Override |
- public void run() { |
- if (patch.getLeftVisible().hasChanged()) { |
- setPaneOpenedState(patch.getLeftVisible().getCurrent(), leftPresenter); |
- } |
- if (patch.getRightVisible().hasChanged()) { |
- setPaneOpenedState(patch.getRightVisible().getCurrent(), rightPresenter); |
- } |
- } |
- }); |
- } |
- } |
- |
- private interface DrawerProxy { |
- void toggle(); |
- void open(); |
- void close(); |
- } |
- |
- private void presentPane(AnyNode node, PanePresenter presenter) { |
- if (presenter != null && !node.is(EmptyPaneNode.class)) presenter.present(node); |
- } |
- |
- private void patchPane(AnyNodePatch patch, PanePresenter presenter) { |
- if (presenter != null && !patch.is(EmptyPanePatch.class)) patch.applyTo(presenter); |
- } |
- |
- private void setPaneOpenedState(boolean open, PanePresenter presenter) { |
- if (presenter != null) presenter.getPaneFragment().setOpenedState(open); |
- } |
- |
- private DrawerNode root; |
- private AnyNodePresenter centerPresenter; |
- private PanePresenter leftPresenter; |
- private PanePresenter rightPresenter; |
-} |