diff --git a/Clover/app/src/main/java/org/floens/chan/controller/Controller.java b/Clover/app/src/main/java/org/floens/chan/controller/Controller.java index da4519fd..e29e4c26 100644 --- a/Clover/app/src/main/java/org/floens/chan/controller/Controller.java +++ b/Clover/app/src/main/java/org/floens/chan/controller/Controller.java @@ -21,6 +21,7 @@ import android.content.Context; import android.content.res.Configuration; import android.view.KeyEvent; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; import org.floens.chan.controller.transition.FadeInTransition; @@ -82,6 +83,8 @@ public abstract class Controller { Logger.test(getClass().getSimpleName() + " onShow"); } + view.setVisibility(View.VISIBLE); + for (Controller controller : childControllers) { if (!controller.shown) { controller.onShow(); @@ -95,6 +98,8 @@ public abstract class Controller { Logger.test(getClass().getSimpleName() + " onHide"); } + view.setVisibility(View.GONE); + for (Controller controller : childControllers) { if (controller.shown) { controller.onHide(); @@ -111,6 +116,10 @@ public abstract class Controller { while (childControllers.size() > 0) { removeChildController(childControllers.get(0)); } + + if (AndroidUtils.removeFromParentView(view)) { + Logger.test(getClass().getSimpleName() + " view removed onDestroy"); + } } public void addChildController(Controller controller) { @@ -125,29 +134,22 @@ public abstract class Controller { return childControllers.remove(controller); } - public void attach(ViewGroup parentView, boolean over) { - ViewGroup.LayoutParams params = view.getLayoutParams(); - - if (params == null) { - params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); - } else { - params.width = ViewGroup.LayoutParams.MATCH_PARENT; - params.height = ViewGroup.LayoutParams.MATCH_PARENT; + public void attachToParentView(ViewGroup parentView, boolean over) { + if (view.getParent() != null) { + if (LOG_STATES) { + Logger.test(getClass().getSimpleName() + " view removed"); + } + AndroidUtils.removeFromParentView(view); } - view.setLayoutParams(params); - - if (over) { - parentView.addView(view, view.getLayoutParams()); - } else { - parentView.addView(view, 0, view.getLayoutParams()); + if (parentView != null) { + if (LOG_STATES) { + Logger.test(getClass().getSimpleName() + " view attached"); + } + attachToView(parentView, over); } } - public void detach() { - AndroidUtils.removeFromParentView(view); - } - public void onConfigurationChanged(Configuration newConfig) { for (Controller controller : childControllers) { controller.onConfigurationChanged(newConfig); @@ -186,7 +188,7 @@ public abstract class Controller { controller.presentingByController = this; controller.onCreate(); - controller.attach(contentView, true); + controller.attachToView(contentView, true); controller.onShow(); if (animated) { @@ -223,7 +225,6 @@ public abstract class Controller { private void finishPresenting() { onHide(); - detach(); onDestroy(); } @@ -238,4 +239,23 @@ public abstract class Controller { public ViewGroup inflateRes(int resId) { return (ViewGroup) LayoutInflater.from(context).inflate(resId, null); } + + private void attachToView(ViewGroup parentView, boolean over) { + ViewGroup.LayoutParams params = view.getLayoutParams(); + + if (params == null) { + params = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + } else { + params.width = ViewGroup.LayoutParams.MATCH_PARENT; + params.height = ViewGroup.LayoutParams.MATCH_PARENT; + } + + view.setLayoutParams(params); + + if (over) { + parentView.addView(view, view.getLayoutParams()); + } else { + parentView.addView(view, 0, view.getLayoutParams()); + } + } } diff --git a/Clover/app/src/main/java/org/floens/chan/controller/NavigationController.java b/Clover/app/src/main/java/org/floens/chan/controller/NavigationController.java index ae6d3eda..d207743f 100644 --- a/Clover/app/src/main/java/org/floens/chan/controller/NavigationController.java +++ b/Clover/app/src/main/java/org/floens/chan/controller/NavigationController.java @@ -89,7 +89,6 @@ public abstract class NavigationController extends Controller { throw new IllegalArgumentException("Cannot transition while another transition is in progress."); } - to.attach(container, false); to.onShow(); return true; @@ -101,11 +100,9 @@ public abstract class NavigationController extends Controller { public void endSwipeTransition(final Controller from, final Controller to, boolean finish) { if (finish) { from.onHide(); - from.detach(); removeChildController(from); } else { to.onHide(); - to.detach(); } controllerTransition = null; @@ -126,7 +123,7 @@ public abstract class NavigationController extends Controller { } if (to != null) { - to.attach(container, pushing); + to.attachToParentView(container, pushing); to.onShow(); } @@ -158,7 +155,6 @@ public abstract class NavigationController extends Controller { private void finishTransition(Controller from, boolean pushing) { if (from != null) { from.onHide(); - from.detach(); } if (!pushing && from != null) { diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/DrawerController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/DrawerController.java index ce9d9298..2d863fc8 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/DrawerController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/DrawerController.java @@ -115,7 +115,7 @@ public class DrawerController extends Controller implements PinAdapter.Callback, public void setChildController(Controller childController) { addChildController(childController); - childController.attach(container, true); + childController.attachToParentView(container, true); childController.onShow(); } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/PopupController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/PopupController.java index 58448d5f..9a9e7537 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/PopupController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/PopupController.java @@ -45,7 +45,7 @@ public class PopupController extends Controller implements View.OnClickListener public void setChildController(NavigationController childController) { addChildController(childController); - childController.attach(container, true); + childController.attachToParentView(container, true); childController.onShow(); } diff --git a/Clover/app/src/main/java/org/floens/chan/ui/controller/SplitNavigationController.java b/Clover/app/src/main/java/org/floens/chan/ui/controller/SplitNavigationController.java index b269dd06..4bac428c 100644 --- a/Clover/app/src/main/java/org/floens/chan/ui/controller/SplitNavigationController.java +++ b/Clover/app/src/main/java/org/floens/chan/ui/controller/SplitNavigationController.java @@ -82,7 +82,6 @@ public class SplitNavigationController extends Controller implements AndroidUtil public void setLeftController(Controller leftController) { if (this.leftController != null) { this.leftController.onHide(); - this.leftController.detach(); removeChildController(this.leftController); } @@ -90,17 +89,14 @@ public class SplitNavigationController extends Controller implements AndroidUtil if (leftController != null) { addChildController(leftController); - leftController.attach(leftControllerView, true); + leftController.attachToParentView(leftControllerView, true); leftController.onShow(); - } else { - } } public void setRightController(Controller rightController) { if (this.rightController != null) { this.rightController.onHide(); - this.rightController.detach(); removeChildController(this.rightController); } else { rightControllerView.removeAllViews(); @@ -110,7 +106,7 @@ public class SplitNavigationController extends Controller implements AndroidUtil if (rightController != null) { addChildController(rightController); - rightController.attach(rightControllerView, true); + rightController.attachToParentView(rightControllerView, true); rightController.onShow(); } else { rightControllerView.addView(emptyView);