Compare commits

...

1 Commits

Author SHA1 Message Date
EricKuck 7ada135191 WIP Fix for cases where a router is simultaneously frozen from 2 sources
Needs tests before merging
2022-07-13 17:42:28 -05:00
2 changed files with 30 additions and 17 deletions
@@ -1364,20 +1364,21 @@ public abstract class Controller {
changeHandler.onEnd();
}
final void setDetachFrozen(boolean frozen) {
if (isDetachFrozen != frozen) {
isDetachFrozen = frozen;
final void onDetachFreezeUpdated(boolean frozen) {
if (isDetachFrozen == frozen) {
return;
}
for (ControllerHostedRouter router : childRouters) {
router.setDetachFrozen(frozen);
}
isDetachFrozen = frozen;
for (ControllerHostedRouter router : childRouters) {
router.onParentDetachFreezeUpdated(frozen);
}
if (!frozen && view != null && viewWasDetached) {
View aView = view;
detach(view, false, false);
if (view == null && aView.getParent() == router.container) {
router.container.removeView(aView); // need to remove the view when this controller is a child controller
}
if (!frozen && view != null && viewWasDetached) {
View aView = view;
detach(view, false, false);
if (view == null && aView.getParent() == router.container) {
router.container.removeView(aView); // need to remove the view when this controller is a child controller
}
}
}
@@ -29,6 +29,7 @@ class ControllerHostedRouter extends Router {
@IdRes private int hostId;
private String tag;
private boolean isParentDetachFrozen;
private boolean isDetachFrozen;
private boolean boundToContainer;
@@ -89,13 +90,24 @@ class ControllerHostedRouter extends Router {
container = null;
}
final void onParentDetachFreezeUpdated(boolean frozen) {
isParentDetachFrozen = frozen;
for (RouterTransaction transaction : backstack) {
reportDetachFrozen(transaction.controller());
}
}
final void setDetachFrozen(boolean frozen) {
isDetachFrozen = frozen;
for (RouterTransaction transaction : backstack) {
transaction.controller().setDetachFrozen(frozen);
reportDetachFrozen(transaction.controller());
}
}
private void reportDetachFrozen(@NonNull Controller controller) {
controller.onDetachFreezeUpdated(isDetachFrozen || isParentDetachFrozen);
}
@Override
void destroy(boolean popViews) {
setDetachFrozen(false);
@@ -104,17 +116,17 @@ class ControllerHostedRouter extends Router {
@Override
protected void pushToBackstack(@NonNull RouterTransaction entry) {
if (isDetachFrozen) {
entry.controller().setDetachFrozen(true);
if (isDetachFrozen || isParentDetachFrozen) {
reportDetachFrozen(entry.controller());
}
super.pushToBackstack(entry);
}
@Override
public void setBackstack(@NonNull List<RouterTransaction> newBackstack, @Nullable ControllerChangeHandler changeHandler) {
if (isDetachFrozen) {
if (isDetachFrozen || isParentDetachFrozen) {
for (RouterTransaction transaction : newBackstack) {
transaction.controller().setDetachFrozen(true);
reportDetachFrozen(transaction.controller());
}
}
super.setBackstack(newBackstack, changeHandler);