From afbaa9a4f53e05e6b00e1b8044a4a8a484ac3ea0 Mon Sep 17 00:00:00 2001 From: Guy Carmeli Date: Tue, 10 Dec 2019 18:26:26 +0200 Subject: [PATCH] Merge SideMenuController options with parent (#5754) --- .../viewcontrollers/ParentController.java | 19 +++++---------- .../viewcontrollers/ViewController.java | 8 +++---- .../bottomtabs/BottomTabsController.java | 15 +++++------- .../sidemenu/SideMenuController.java | 7 +++--- .../stack/StackController.java | 24 +++++++++++-------- .../views/BehaviourAdapter.java | 9 +++---- .../views/BehaviourDelegate.java | 12 ++++++---- .../views/bottomtabs/BottomTabsBehaviour.java | 11 +++++---- .../views/stack/StackBehaviour.java | 10 ++++---- .../sidemenu/SideMenuControllerTest.java | 1 + 10 files changed, 58 insertions(+), 58 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ParentController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ParentController.java index 4401f833966..2bfe31071e7 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ParentController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ParentController.java @@ -21,22 +21,22 @@ import static com.reactnativenavigation.utils.CollectionUtils.*; import static com.reactnativenavigation.utils.ObjectUtils.perform; -public abstract class ParentController extends ChildController { +public abstract class ParentController extends ChildController { - public ParentController(Activity activity, ChildControllersRegistry childRegistry, String id, Presenter presenter, Options initialOptions) { + public ParentController(Activity activity, ChildControllersRegistry childRegistry, String id, Presenter presenter, Options initialOptions) { super(activity, childRegistry, id, presenter, initialOptions); } @Override public void setWaitForRender(Bool waitForRender) { super.setWaitForRender(waitForRender); - applyOnController(getCurrentChild(), controller -> ((ViewController) controller).setWaitForRender(waitForRender)); + applyOnController(getCurrentChild(), currentChild -> currentChild.setWaitForRender(waitForRender)); } @Override public void setDefaultOptions(Options defaultOptions) { super.setDefaultOptions(defaultOptions); - forEach(getChildControllers(), (child) -> child.setDefaultOptions(defaultOptions)); + forEach(getChildControllers(), child -> child.setDefaultOptions(defaultOptions)); } @Override @@ -69,12 +69,6 @@ public boolean isCurrentChild(ViewController child) { protected abstract ViewController getCurrentChild(); - @NonNull - @Override - public T getView() { - return (T) super.getView(); - } - @NonNull @Override protected abstract T createView(); @@ -127,8 +121,7 @@ public void applyChildOptions(Options options, ViewController child) { } @CallSuper - public void mergeChildOptions(Options options, ViewController childController) { - + public void mergeChildOptions(Options options, ViewController child) { } @Override @@ -140,7 +133,7 @@ public void destroy() { @SuppressWarnings("WeakerAccess") @CallSuper protected void clearOptions() { - performOnParentController(parent -> ((ParentController) parent).clearOptions()); + performOnParentController(ParentController::clearOptions); options = initialOptions.copy().clearOneTimeOptions(); } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ViewController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ViewController.java index 2330ec0d259..18b2e275541 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ViewController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/ViewController.java @@ -37,7 +37,7 @@ public abstract class ViewController implements ViewTreeObserver.OnGlobalLayoutListener, ViewGroup.OnHierarchyChangeListener, - BehaviourAdapter { + BehaviourAdapter { private final List onAppearedListeners = new ArrayList(); private boolean appearEventPosted; @@ -146,7 +146,7 @@ public void performOnView(Func1 task) { if (view != null) task.run(view); } - protected void performOnParentController(Func1 task) { + public void performOnParentController(Func1 task) { if (parentController != null) task.run(parentController); } @@ -326,13 +326,13 @@ public List getElements() { @Override @CallSuper - public boolean onMeasureChild(CoordinatorLayout parent, T child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) { + public boolean onMeasureChild(CoordinatorLayout parent, ViewGroup child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) { perform(findController(child), ViewController::applyTopInset); return false; } @Override - public boolean onDependentViewChanged(CoordinatorLayout parent, T child, View dependency) { + public boolean onDependentViewChanged(CoordinatorLayout parent, ViewGroup child, View dependency) { return false; } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java index 68fb9501f42..adab9c670f7 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java @@ -109,11 +109,10 @@ public void mergeOptions(Options options) { public void applyChildOptions(Options options, ViewController child) { super.applyChildOptions(options, child); presenter.applyChildOptions(resolveCurrentOptions(), child); - performOnParentController(parentController -> - ((ParentController) parentController).applyChildOptions( - this.options.copy() - .clearBottomTabsOptions() - .clearBottomTabOptions(), + performOnParentController(parent -> parent.applyChildOptions( + this.options.copy() + .clearBottomTabsOptions() + .clearBottomTabOptions(), child ) ); @@ -124,9 +123,7 @@ public void mergeChildOptions(Options options, ViewController child) { super.mergeChildOptions(options, child); presenter.mergeChildOptions(options, child); tabPresenter.mergeChildOptions(options, child); - performOnParentController(parentController -> - ((ParentController) parentController).mergeChildOptions(options.copy().clearBottomTabsOptions(), child) - ); + performOnParentController(parent -> parent.mergeChildOptions(options.copy().clearBottomTabsOptions(), child)); } @Override @@ -165,7 +162,7 @@ private List createTabs() { }); } - public int getSelectedIndex() { + int getSelectedIndex() { return bottomTabs.getCurrentItem(); } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java index 993a2b9fffc..e00b369008d 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java @@ -87,15 +87,14 @@ public void applyOptions(Options options) { public void applyChildOptions(Options options, ViewController child) { super.applyChildOptions(options, child); presenter.applyChildOptions(resolveCurrentOptions()); - performOnParentController(parentController -> - ((ParentController) parentController).applyChildOptions(this.options, child) - ); + performOnParentController(parent -> parent.applyChildOptions(this.options, child)); } @Override public void mergeChildOptions(Options options, ViewController child) { super.mergeChildOptions(options, child); presenter.mergeOptions(options.sideMenuRootOptions); + performOnParentController(parent -> parent.mergeChildOptions(options, child)); } @Override @@ -120,7 +119,7 @@ public Options resolveCurrentOptions() { return options; } - public boolean isDrawerOpen(int gravity) { + private boolean isDrawerOpen(int gravity) { return !isDestroyed() && getView().isDrawerOpen(gravity); } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java index 7e74c4b4e70..a1c81a6ecd8 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java @@ -101,8 +101,8 @@ public void applyChildOptions(Options options, ViewController child) { if (child.getView() instanceof ReactComponent) { fabOptionsPresenter.applyOptions(this.options.fabOptions, (ReactComponent) child.getView(), getView()); } - performOnParentController(parentController -> - ((ParentController) parentController).applyChildOptions( + performOnParentController(parent -> + parent.applyChildOptions( this.options.copy() .clearTopBarOptions() .clearAnimationOptions() @@ -123,8 +123,8 @@ public void mergeChildOptions(Options options, ViewController child) { fabOptionsPresenter.mergeOptions(options.fabOptions, (ReactComponent) child, getView()); } } - performOnParentController(parentController -> - ((ParentController) parentController).mergeChildOptions( + performOnParentController(parent -> + parent.mergeChildOptions( options.copy() .clearTopBarOptions() .clearAnimationOptions() @@ -221,13 +221,17 @@ public void onSuccess(String childId) { if (toRemove != null && resolvedOptions.animations.setStackRoot.enabled.isTrueOrUndefined()) { if (resolvedOptions.animations.setStackRoot.waitForRender.isTrue()) { child.getView().setAlpha(0); - child.addOnAppearedListener(() -> animator.push(child.getView(), resolvedOptions.animations.setStackRoot, resolvedOptions.transitions, toRemove.getElements(), child.getElements(), () -> { - listenerAdapter.onSuccess(child.getId()); - })); + child.addOnAppearedListener(() -> animator.push( + child.getView(), + resolvedOptions.animations.setStackRoot, + resolvedOptions.transitions, + toRemove.getElements(), + child.getElements(), + () -> listenerAdapter.onSuccess(child.getId()) + ) + ); } else { - animator.push(child.getView(), resolvedOptions.animations.setStackRoot, () -> { - listenerAdapter.onSuccess(child.getId()); - }); + animator.push(child.getView(), resolvedOptions.animations.setStackRoot, () -> listenerAdapter.onSuccess(child.getId())); } } else { listenerAdapter.onSuccess(child.getId()); diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/BehaviourAdapter.java b/lib/android/app/src/main/java/com/reactnativenavigation/views/BehaviourAdapter.java index 4030f7addd2..935eea7e1de 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/BehaviourAdapter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/BehaviourAdapter.java @@ -1,19 +1,20 @@ package com.reactnativenavigation.views; -import androidx.coordinatorlayout.widget.CoordinatorLayout; import android.view.View; import android.view.ViewGroup; -public interface BehaviourAdapter { +import androidx.coordinatorlayout.widget.CoordinatorLayout; + +public interface BehaviourAdapter { /** * @see CoordinatorLayout.Behavior#onMeasureChild * @return true if the Behavior measured the child view, false if the CoordinatorLayout should perform its default measurement */ - boolean onMeasureChild(CoordinatorLayout parent, V child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed); + boolean onMeasureChild(CoordinatorLayout parent, ViewGroup child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed); /** * @see CoordinatorLayout.Behavior#onDependentViewChanged * @return true if the Behavior changed the child view's size or position, false otherwise */ - boolean onDependentViewChanged(CoordinatorLayout parent, V child, View dependency); + boolean onDependentViewChanged(CoordinatorLayout parent, ViewGroup child, View dependency); } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/BehaviourDelegate.java b/lib/android/app/src/main/java/com/reactnativenavigation/views/BehaviourDelegate.java index 6441f72519b..1cbffac9203 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/BehaviourDelegate.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/BehaviourDelegate.java @@ -1,24 +1,26 @@ package com.reactnativenavigation.views; -import androidx.coordinatorlayout.widget.CoordinatorLayout; import android.view.View; import android.view.ViewGroup; -public class BehaviourDelegate extends CoordinatorLayout.Behavior { +import androidx.annotation.NonNull; +import androidx.coordinatorlayout.widget.CoordinatorLayout; + +public class BehaviourDelegate extends CoordinatorLayout.Behavior { private BehaviourAdapter delegate; - public BehaviourDelegate(BehaviourAdapter delegate) { + public BehaviourDelegate(BehaviourAdapter delegate) { this.delegate = delegate; } @Override - public boolean onDependentViewChanged(CoordinatorLayout parent, V child, View dependency) { + public boolean onDependentViewChanged(@NonNull CoordinatorLayout parent, @NonNull ViewGroup child, @NonNull View dependency) { return delegate.onDependentViewChanged(parent, child, dependency); } @Override - public boolean onMeasureChild(CoordinatorLayout parent, V child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) { + public boolean onMeasureChild(@NonNull CoordinatorLayout parent, @NonNull ViewGroup child, int parentWidthMeasureSpec, int widthUsed, int parentHeightMeasureSpec, int heightUsed) { return delegate.onMeasureChild(parent, child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed); } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsBehaviour.java b/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsBehaviour.java index 8670b0e17a0..a3761bc886f 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsBehaviour.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsBehaviour.java @@ -1,7 +1,5 @@ package com.reactnativenavigation.views.bottomtabs; -import androidx.annotation.NonNull; -import androidx.coordinatorlayout.widget.CoordinatorLayout; import android.view.View; import android.view.ViewGroup; @@ -9,13 +7,16 @@ import com.reactnativenavigation.views.BehaviourDelegate; import com.reactnativenavigation.views.BottomTabs; -public class BottomTabsBehaviour extends BehaviourDelegate { - public BottomTabsBehaviour(BehaviourAdapter delegate) { +import androidx.annotation.NonNull; +import androidx.coordinatorlayout.widget.CoordinatorLayout; + +public class BottomTabsBehaviour extends BehaviourDelegate { + public BottomTabsBehaviour(BehaviourAdapter delegate) { super(delegate); } @Override - public boolean layoutDependsOn(@NonNull CoordinatorLayout parent, @NonNull V child, @NonNull View dependency) { + public boolean layoutDependsOn(@NonNull CoordinatorLayout parent, @NonNull ViewGroup child, @NonNull View dependency) { return dependency instanceof BottomTabs; } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/StackBehaviour.java b/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/StackBehaviour.java index 294d71b9f14..4a99824a0bd 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/StackBehaviour.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/StackBehaviour.java @@ -1,6 +1,5 @@ package com.reactnativenavigation.views.stack; -import androidx.coordinatorlayout.widget.CoordinatorLayout; import android.view.View; import android.view.ViewGroup; @@ -8,13 +7,16 @@ import com.reactnativenavigation.views.BehaviourDelegate; import com.reactnativenavigation.views.topbar.TopBar; -public class StackBehaviour extends BehaviourDelegate { - public StackBehaviour(BehaviourAdapter delegate) { +import androidx.annotation.NonNull; +import androidx.coordinatorlayout.widget.CoordinatorLayout; + +public class StackBehaviour extends BehaviourDelegate { + public StackBehaviour(BehaviourAdapter delegate) { super(delegate); } @Override - public boolean layoutDependsOn(CoordinatorLayout parent, V child, View dependency) { + public boolean layoutDependsOn(@NonNull CoordinatorLayout parent, @NonNull ViewGroup child, @NonNull View dependency) { return dependency instanceof TopBar; } } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java index 4ea5e944565..ec886b5f22c 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java @@ -166,6 +166,7 @@ public void mergeChildOptions() { Options options = new Options(); uut.mergeChildOptions(options, child); verify(presenter).mergeOptions(options.sideMenuRootOptions); + verify(parent).mergeChildOptions(options, child); } @Test