From 410aac0c04fc69c8b77fbfa490d97d344bdf3965 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:07:13 +0300 Subject: [PATCH 01/37] Rename o to others to fix problems when calling this function with named arguments --- .../reactnativenavigation/options/ValueAnimationOptions.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/ValueAnimationOptions.kt b/lib/android/app/src/main/java/com/reactnativenavigation/options/ValueAnimationOptions.kt index a6efe11a7bc..672914e1ba0 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/ValueAnimationOptions.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/ValueAnimationOptions.kt @@ -60,9 +60,9 @@ class ValueAnimationOptions { return animator } - override fun equals(o: Any?): Boolean { - if (this === o) return true - return if (o == null || javaClass != o.javaClass) false else animProp == (o as ValueAnimationOptions).animProp + override fun equals(other: Any?): Boolean { + if (this === other) return true + return if (other == null || javaClass != other.javaClass) false else animProp == (other as ValueAnimationOptions).animProp } fun equals(animationProperty: Property): Boolean { From 2be70060bc97be6b7284fde3b58c49fbb955f3ae Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:09:43 +0300 Subject: [PATCH 02/37] Suppress unused parameters of TopBarAnimator --- .../viewcontrollers/stack/topbar/TopBarAnimator.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarAnimator.kt index 9342b5e3dd8..6d6ea9e704a 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarAnimator.kt @@ -4,6 +4,7 @@ import com.reactnativenavigation.views.animations.BaseViewAnimator import com.reactnativenavigation.views.stack.topbar.TopBar class TopBarAnimator @JvmOverloads constructor(view: TopBar? = null) : BaseViewAnimator(HideDirection.Up, view) { + @Suppress("UNUSED_PARAMETER") fun hideOnScroll(translationStart: Float, translationEndDy: Float) { // NOOP for now - this entire mechanism needs to be reimplemented as it relies on bridge events which are obsolete in TurboModules config } From e5df1b67f9d0dc279c8fd4037fd335f1268300e3 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:13:47 +0300 Subject: [PATCH 03/37] Suppress unchecked cast of PropertyAnimatorCreator --- .../views/element/animators/PropertyAnimatorCreator.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/PropertyAnimatorCreator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/PropertyAnimatorCreator.kt index c257e3bbd31..dcd9aad4728 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/PropertyAnimatorCreator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/PropertyAnimatorCreator.kt @@ -7,6 +7,7 @@ import com.reactnativenavigation.options.SharedElementTransitionOptions import java.lang.reflect.ParameterizedType abstract class PropertyAnimatorCreator internal constructor(protected val from: View, protected val to: View) { + @Suppress("UNCHECKED_CAST") @CallSuper fun shouldAnimateProperty(): Boolean { val type = childClass @@ -21,6 +22,7 @@ abstract class PropertyAnimatorCreator internal constructor(protected protected open fun excludedViews() = emptyList>() abstract fun create(options: SharedElementTransitionOptions): Animator + @Suppress("UNCHECKED_CAST") private val childClass: Class get() = (javaClass.genericSuperclass as ParameterizedType).actualTypeArguments[0] as Class From f2ce1e45eb8cc494ff81aabdf82febc46ca07ed1 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:20:00 +0300 Subject: [PATCH 04/37] Remove unused import from ReactImageBoundsAnimator --- .../views/element/animators/ReactImageBoundsAnimator.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageBoundsAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageBoundsAnimator.kt index 489a380fc9d..b0ad4c8fb12 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageBoundsAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageBoundsAnimator.kt @@ -4,7 +4,6 @@ import android.animation.Animator import android.animation.ObjectAnimator import android.graphics.Rect import android.view.View -import android.widget.ImageView import com.facebook.react.views.image.ReactImageView import com.reactnativenavigation.options.SharedElementTransitionOptions import com.reactnativenavigation.utils.ViewUtils From 2feb13c8bc02f93dea8a914f412cb6f034ee0398 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:21:46 +0300 Subject: [PATCH 05/37] Remove redundant SAM-constructor --- .../views/element/animators/ReactImageMatrixAnimator.kt | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt index a8fb61613c9..0aaa895a133 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt @@ -2,7 +2,6 @@ package com.reactnativenavigation.views.element.animators import android.animation.Animator import android.animation.ObjectAnimator -import android.animation.TypeEvaluator import android.graphics.PointF import android.graphics.Rect import android.view.View @@ -39,7 +38,7 @@ class ReactImageMatrixAnimator(from: View, to: View) : PropertyAnimatorCreator { fraction: Float, _: Any, _: Any -> + return ObjectAnimator.ofObject({ fraction: Float, _: Any, _: Any -> hierarchy.actualImageScaleType?.let { (hierarchy.actualImageScaleType as? InterpolatingScaleType)?.let { it.value = fraction @@ -53,7 +52,7 @@ class ReactImageMatrixAnimator(from: View, to: View) : PropertyAnimatorCreator Date: Tue, 5 Oct 2021 09:22:35 +0300 Subject: [PATCH 06/37] Remove unused imports --- .../views/element/animators/ReactViewRotationAnimator.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactViewRotationAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactViewRotationAnimator.kt index b4fd05b9654..b2adb9b3187 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactViewRotationAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactViewRotationAnimator.kt @@ -2,14 +2,9 @@ package com.reactnativenavigation.views.element.animators import android.animation.Animator import android.animation.ObjectAnimator -import android.graphics.Rect import android.view.View -import androidx.core.animation.doOnEnd import com.facebook.react.views.view.ReactViewGroup import com.reactnativenavigation.options.SharedElementTransitionOptions -import com.reactnativenavigation.utils.areDimensionsWithInheritedScaleEqual -import com.reactnativenavigation.utils.computeInheritedScale -import kotlin.math.roundToInt class ReactViewRotationAnimator(from: View, to: View) : PropertyAnimatorCreator(from, to) { private val fromRotation = from.rotation From f287a8acac13a64e4be68cd4f111cef94df828a0 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:25:25 +0300 Subject: [PATCH 07/37] Remove unused imports --- .../views/bottomtabs/BottomTabsContainer.kt | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt index ba1d87c221d..f7d9743c9ca 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt @@ -1,11 +1,9 @@ package com.reactnativenavigation.views.bottomtabs -import android.R.attr.factor import android.annotation.SuppressLint import android.content.Context import android.graphics.Color import android.view.View -import android.widget.FrameLayout import android.widget.LinearLayout import androidx.annotation.RestrictTo import androidx.core.graphics.ColorUtils @@ -14,7 +12,6 @@ import kotlin.math.roundToInt internal const val DEFAULT_SHADOW_COLOR = Color.BLACK internal const val DEFAULT_SHADOW_RADIUS = 10 -internal const val SHADOW_HEIGHT_DP = 20 internal const val DEFAULT_SHADOW_DISTANCE = 15f internal const val DEFAULT_SHADOW_ANGLE = 270f @@ -50,7 +47,7 @@ class BottomTabsContainer(context: Context, val bottomTabs: BottomTabs) : Shadow setTopOutLineColor(DEFAULT_TOP_OUTLINE_COLOR) this.topOutLineView.visibility = View.GONE - this.addView(linearLayout, FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT) + this.addView(linearLayout, LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT) } override var shadowRadius: Float From cfe6e268385437a0fa236510379a1ccaa1ba9e76 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:26:40 +0300 Subject: [PATCH 08/37] Remove unused constant --- .../reactnativenavigation/views/bottomtabs/BottomTabsLayout.java | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java b/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java index 1cf02f3022b..926e4590d60 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java @@ -21,7 +21,6 @@ public BottomTabsLayout(Context context) { @Override public void addView(View child, int index, ViewGroup.LayoutParams params) { if (bottomTabsContainer != null && child != bottomTabsContainer) { - int indexOfChild = this.indexOfChild(bottomTabsContainer); super.addView(child, getChildCount() - 1, params); } else { super.addView(child, 0, params); From f84bff76214407f8701b38950b8c969535f62b2f Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:29:03 +0300 Subject: [PATCH 09/37] Fix raw use of ViewController --- .../bottomtabs/attacher/modes/AttachMode.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachMode.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachMode.java index 7ac4f6020ed..4c145c55384 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachMode.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachMode.java @@ -20,7 +20,7 @@ public abstract class AttachMode { protected final BottomTabsPresenter presenter; protected final BottomTabFinder bottomTabFinder; protected final List> tabs; - final ViewController initialTab; + final ViewController initialTab; public static AttachMode get(ViewGroup parent, List> tabs, BottomTabsPresenter presenter, Options resolved) { switch (resolved.bottomTabsOptions.tabsAttachMode) { @@ -57,12 +57,12 @@ public void destroy() { } - public void onTabSelected(ViewController tab) { + public void onTabSelected(ViewController tab) { } @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED) - public void attach(ViewController tab) { + public void attach(ViewController tab) { ViewGroup view = tab.getView(); view.setVisibility(tab == initialTab ? View.VISIBLE : View.INVISIBLE); parent.addView(view, matchParentWithBehaviour(new BottomTabsBehaviour(tab.getParentController()))); From 9c823b144caaf8ea69d197a36271567df28252e1 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:30:04 +0300 Subject: [PATCH 10/37] Fix raw use of ViewController --- .../bottomtabs/attacher/modes/OnSwitchToTab.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTab.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTab.java index 52b2eeb9bb8..f1656395016 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTab.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTab.java @@ -20,13 +20,13 @@ public void attach() { } @Override - public void onTabSelected(ViewController tab) { + public void onTabSelected(ViewController tab) { if (tab != initialTab && isNotAttached(tab)) { attach(tab); } } - private boolean isNotAttached(ViewController tab) { + private boolean isNotAttached(ViewController tab) { return tab.getView().getParent() == null; } } From b2a41dceac9a7d6a73b1e0765253b6988e073441 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:30:37 +0300 Subject: [PATCH 11/37] Fix raw use of ViewController --- .../viewcontrollers/bottomtabs/attacher/BottomTabsAttacher.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/BottomTabsAttacher.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/BottomTabsAttacher.java index 8625f336c65..34360bd0fcf 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/BottomTabsAttacher.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/BottomTabsAttacher.java @@ -36,7 +36,7 @@ public void destroy() { attachStrategy.destroy(); } - public void onTabSelected(ViewController tab) { + public void onTabSelected(ViewController tab) { attachStrategy.onTabSelected(tab); } } From 1c51fcb50375f05ae095f937e21a06f5909219e3 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:32:34 +0300 Subject: [PATCH 12/37] Fix raw use of ViewController, remove unused imports --- .../bottomtabs/BottomTabPresenter.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java index 86a145bc18c..a7da579569a 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java @@ -1,17 +1,20 @@ package com.reactnativenavigation.viewcontrollers.bottomtabs; +import static com.reactnativenavigation.utils.CollectionUtils.forEach; +import static com.reactnativenavigation.utils.UiUtils.dpToPx; + import android.content.Context; import android.graphics.Typeface; import android.graphics.drawable.Drawable; +import androidx.annotation.NonNull; + import com.aurelhubert.ahbottomnavigation.notification.AHNotification; import com.reactnativenavigation.options.BottomTabOptions; import com.reactnativenavigation.options.DotIndicatorOptions; import com.reactnativenavigation.options.Options; -import com.reactnativenavigation.options.params.Param; import com.reactnativenavigation.options.params.ThemeColour; import com.reactnativenavigation.options.parsers.TypefaceLoader; -import com.reactnativenavigation.utils.ContextKt; import com.reactnativenavigation.utils.ImageLoader; import com.reactnativenavigation.utils.ImageLoadingListenerAdapter; import com.reactnativenavigation.utils.LateInit; @@ -20,11 +23,6 @@ import java.util.List; -import androidx.annotation.NonNull; - -import static com.reactnativenavigation.utils.CollectionUtils.*; -import static com.reactnativenavigation.utils.UiUtils.dpToPx; - public class BottomTabPresenter { private final Context context; private final ImageLoader imageLoader; @@ -81,7 +79,7 @@ public void mergeOptions(Options options) { }); } - public void mergeChildOptions(Options options, ViewController child) { + public void mergeChildOptions(Options options, ViewController child) { bottomTabs.perform(bottomTabs -> { int index = bottomTabFinder.findByControllerId(child.getId()); if (index >= 0) { From 390ed6036cae47af6ed0280ebd9386651610b1d0 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:37:05 +0300 Subject: [PATCH 13/37] Remove unused import --- .../viewcontrollers/bottomtabs/BottomTabsAnimator.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAnimator.kt index 015335150ca..4f8b44032f6 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAnimator.kt @@ -2,7 +2,6 @@ package com.reactnativenavigation.viewcontrollers.bottomtabs import com.reactnativenavigation.views.animations.BaseViewAnimator import com.reactnativenavigation.views.bottomtabs.BottomTabs -import com.reactnativenavigation.views.stack.topbar.TopBar class BottomTabsAnimator(view: BottomTabs? = null) : BaseViewAnimator(HideDirection.Down, view) { override fun onShowAnimationEnd() { From a45ad85f14f59be14ce1d1518e822d306c56a663 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:41:23 +0300 Subject: [PATCH 14/37] Fix raw use of ViewController --- .../parent/ParentController.java | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java index e5a79ab49c9..8ada356ad2f 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java @@ -47,14 +47,14 @@ public void setDefaultOptions(Options defaultOptions) { @Override public void onViewDidAppear() { super.onViewDidAppear(); - ViewController currentChild = getCurrentChild(); + ViewController currentChild = getCurrentChild(); if (currentChild != null) currentChild.onViewDidAppear(); } @Override public void onViewDisappear() { super.onViewDisappear(); - ViewController currentChild = getCurrentChild(); + ViewController currentChild = getCurrentChild(); if (currentChild != null) currentChild.onViewDisappear(); } @@ -68,7 +68,7 @@ public Options resolveCurrentOptions() { .withDefaultOptions(initialOptions); } - public Options resolveChildOptions(ViewController child) { + public Options resolveChildOptions(ViewController child) { if (child == this) return resolveCurrentOptions(); return child .resolveCurrentOptions() @@ -82,18 +82,18 @@ public Options resolveCurrentOptions(Options defaultOptions) { return resolveCurrentOptions().withDefaultOptions(defaultOptions); } - public boolean isCurrentChild(ViewController child) { + public boolean isCurrentChild(ViewController child) { return getCurrentChild() == child; } - public abstract ViewController getCurrentChild(); + public abstract ViewController getCurrentChild(); @NonNull @Override public abstract T createView(); @NonNull - public abstract Collection getChildControllers(); + public abstract Collection> getChildControllers(); @Nullable protected BottomTabsController getBottomTabsController() { @@ -105,12 +105,12 @@ protected BottomTabsController getBottomTabsController() { @Nullable @Override - public ViewController findController(final String id) { - ViewController fromSuper = super.findController(id); + public ViewController findController(final String id) { + ViewController fromSuper = super.findController(id); if (fromSuper != null) return fromSuper; - for (ViewController child : getChildControllers()) { - ViewController fromChild = child.findController(id); + for (ViewController child : getChildControllers()) { + ViewController fromChild = child.findController(id); if (fromChild != null) return fromChild; } @@ -119,12 +119,12 @@ public ViewController findController(final String id) { @Nullable @Override - public ViewController findController(View child) { - ViewController fromSuper = super.findController(child); + public ViewController findController(View child) { + ViewController fromSuper = super.findController(child); if (fromSuper != null) return fromSuper; - for (ViewController childController : getChildControllers()) { - ViewController fromChild = childController.findController(child); + for (ViewController childController : getChildControllers()) { + ViewController fromChild = childController.findController(child); if (fromChild != null) return fromChild; } @@ -136,19 +136,19 @@ public boolean containsComponent(Component component) { if (super.containsComponent(component)) { return true; } - for (ViewController child : getChildControllers()) { + for (ViewController child : getChildControllers()) { if (child.containsComponent(component)) return true; } return false; } @CallSuper - public void applyChildOptions(Options options, ViewController child) { + public void applyChildOptions(Options options, ViewController child) { this.options = initialOptions.mergeWith(options); } @CallSuper - public void mergeChildOptions(Options options, ViewController child) { + public void mergeChildOptions(Options options, ViewController child) { } @Override @@ -177,7 +177,7 @@ public boolean isRendered() { return getCurrentChild() != null && getCurrentChild().isRendered(); } - public void onChildDestroyed(ViewController child) { + public void onChildDestroyed(ViewController child) { } @@ -186,7 +186,7 @@ public void applyTopInset() { forEach(getChildControllers(), ViewController::applyTopInset); } - public int getTopInset(ViewController child) { + public int getTopInset(ViewController child) { return perform(getParentController(), 0, p -> p.getTopInset(child)); } @@ -195,7 +195,7 @@ public void applyBottomInset() { forEach(getChildControllers(), ViewController::applyBottomInset); } - public int getBottomInset(ViewController child) { + public int getBottomInset(ViewController child) { return perform(getParentController(), 0, p -> p.getBottomInset(child)); } @@ -206,8 +206,8 @@ public String getCurrentComponentName() { public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); - Collection childControllers = getChildControllers(); - for(ViewController controller: childControllers){ + Collection> childControllers = getChildControllers(); + for(ViewController controller: childControllers){ controller.onConfigurationChanged(newConfig); } } From c123afde98daff27ea5f66fe7b952b1eadae990c Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:43:07 +0300 Subject: [PATCH 15/37] Fix raw use of ViewController --- .../viewcontrollers/bottomtabs/BottomTabsController.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) 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 1842b53b88c..9e38012f9ed 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 @@ -134,7 +134,7 @@ public void mergeOptions(Options options) { } @Override - public void applyChildOptions(Options options, ViewController child) { + public void applyChildOptions(Options options, ViewController child) { super.applyChildOptions(options, child); presenter.applyChildOptions(resolveCurrentOptions(), child); performOnParentController(parent -> parent.applyChildOptions( @@ -147,7 +147,7 @@ public void applyChildOptions(Options options, ViewController child) { } @Override - public void mergeChildOptions(Options options, ViewController child) { + public void mergeChildOptions(Options options, ViewController child) { super.mergeChildOptions(options, child); presenter.mergeChildOptions(options, child); tabPresenter.mergeChildOptions(options, child); @@ -214,7 +214,7 @@ public boolean onMeasureChild(CoordinatorLayout parent, ViewGroup child, int par } @Override - public int getBottomInset(ViewController child) { + public int getBottomInset(ViewController child) { return presenter.getBottomInset(resolveChildOptions(child)) + perform(getParentController(), 0, p -> p.getBottomInset(this)); } From d67cc2b7379eec7e73be12c719933d2c9e2009b9 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:53:48 +0300 Subject: [PATCH 16/37] Fix raw use of ViewController --- .../viewcontrollers/child/ChildController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java index 9b43ed25258..0fc83e394e5 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java @@ -98,7 +98,7 @@ private WindowInsetsCompat onApplyWindowInsets(View view, WindowInsetsCompat ins return applyWindowInsets(findController(view), insets); } - protected WindowInsetsCompat applyWindowInsets(ViewController view, WindowInsetsCompat insets) { + protected WindowInsetsCompat applyWindowInsets(ViewController view, WindowInsetsCompat insets) { return insets.replaceSystemWindowInsets( insets.getSystemWindowInsetLeft(), 0, From d8045dd65ac88d0b593c1d059ea2f87590ac30f2 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:55:01 +0300 Subject: [PATCH 17/37] Fix raw use of ViewController --- .../child/ChildControllersRegistry.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistry.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistry.java index 4b97938bf5c..b74c5f46dc9 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistry.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistry.java @@ -5,13 +5,13 @@ import static com.reactnativenavigation.utils.ObjectUtils.perform; public class ChildControllersRegistry { - private ArrayDeque children = new ArrayDeque<>(); + private ArrayDeque> children = new ArrayDeque<>(); - public void onViewAppeared(ChildController child) { + public void onViewAppeared(ChildController child) { children.push(child); } - public void onViewDisappear(ChildController child) { + public void onViewDisappear(ChildController child) { if (isTopChild(child)) { children.pop(); if (!children.isEmpty()) children.peek().onViewBroughtToFront(); @@ -20,7 +20,7 @@ public void onViewDisappear(ChildController child) { } } - private boolean isTopChild(ChildController child) { + private boolean isTopChild(ChildController child) { return perform(children.peek(), false, c -> c.equals(child)); } @@ -28,7 +28,7 @@ public int size() { return children.size(); } - public void onChildDestroyed(ChildController child) { + public void onChildDestroyed(ChildController child) { children.remove(child); } } From 5b3ff3fedb634411f75d35ea8b8b9792ec71d1ba Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:56:22 +0300 Subject: [PATCH 18/37] Remove unused import --- .../viewcontrollers/component/ComponentPresenterBase.java | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentPresenterBase.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentPresenterBase.java index 47828725f28..6c105a08fef 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentPresenterBase.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentPresenterBase.java @@ -2,7 +2,6 @@ import android.view.View; import android.view.ViewGroup.MarginLayoutParams; -import android.view.WindowManager; import androidx.annotation.NonNull; From 18046680e30c1a8d1035986d0e9d9f5b11e90864 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:57:26 +0300 Subject: [PATCH 19/37] Fix raw ViewController use --- .../viewcontrollers/component/ComponentViewController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java index 51837db4ceb..3117dcc53be 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java @@ -136,7 +136,7 @@ public void applyBottomInset() { } @Override - protected WindowInsetsCompat applyWindowInsets(ViewController view, WindowInsetsCompat insets) { + protected WindowInsetsCompat applyWindowInsets(ViewController view, WindowInsetsCompat insets) { ViewCompat.onApplyWindowInsets(view.getView(), insets.replaceSystemWindowInsets( insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(), From a5d644e11f048285ac3ced74ef46a1d5be68734f Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:58:39 +0300 Subject: [PATCH 20/37] Fix raw ViewController use --- .../viewcontrollers/modal/ModalPresenter.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java index 8e465ed9b19..81382b1a589 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java @@ -70,7 +70,7 @@ void showModal(ViewController appearing, ViewController disappearing, Comm @NotNull - private ScreenAnimationListener createListener(ViewController toAdd, ViewController toRemove, CommandListener listener) { + private ScreenAnimationListener createListener(ViewController toAdd, ViewController toRemove, CommandListener listener) { return new ScreenAnimationListener() { @Override public void onStart() { @@ -89,7 +89,7 @@ public void onCancel() { }; } - private void onShowModalEnd(ViewController toAdd, @Nullable ViewController toRemove, CommandListener listener) { + private void onShowModalEnd(ViewController toAdd, @Nullable ViewController toRemove, CommandListener listener) { toAdd.onViewDidAppear(); if (toRemove != null && toAdd.resolveCurrentOptions(defaultOptions).modal.presentationStyle != ModalPresentationStyle.OverCurrentContext) { toRemove.detachView(); @@ -97,7 +97,7 @@ private void onShowModalEnd(ViewController toAdd, @Nullable ViewController toRem listener.onSuccess(toAdd.getId()); } - void dismissModal(ViewController toDismiss, @Nullable ViewController toAdd, ViewController root, CommandListener listener) { + void dismissModal(ViewController toDismiss, @Nullable ViewController toAdd, ViewController root, CommandListener listener) { if (modalsLayout == null) { listener.onError("Can not dismiss modal before activity is created"); return; @@ -119,14 +119,14 @@ public void onEnd() { } } - boolean shouldDismissModal(ViewController toDismiss) { + boolean shouldDismissModal(ViewController toDismiss) { return toDismiss.resolveCurrentOptions(defaultOptions).hardwareBack.dismissModalOnPress.get(true); } - public Options resolveOptions(ViewController modalController){ + public Options resolveOptions(ViewController modalController){ return modalController.resolveCurrentOptions(defaultOptions); } - private void onDismissEnd(ViewController toDismiss, CommandListener listener) { + private void onDismissEnd(ViewController toDismiss, CommandListener listener) { listener.onSuccess(toDismiss.getId()); toDismiss.destroy(); if (isEmpty()) modalsLayout.setVisibility(View.GONE); From e9f8115ebe149d2af75602269a5e535d01330f36 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 09:59:57 +0300 Subject: [PATCH 21/37] Fix raw ViewController use --- .../viewcontrollers/modal/ModalStack.java | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java index 2770067a7f9..0e00f254364 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java @@ -24,7 +24,7 @@ import static com.reactnativenavigation.utils.ObjectUtils.perform; public class ModalStack { - private final List modals = new ArrayList<>(); + private final List> modals = new ArrayList<>(); private final ModalPresenter presenter; private final ModalOverlay overlay; private EventEmitter eventEmitter; @@ -57,19 +57,19 @@ public void setDefaultOptions(Options defaultOptions) { presenter.setDefaultOptions(defaultOptions); } - public void showModal(ViewController viewController, ViewController root, CommandListener listener) { - ViewController toRemove = isEmpty() ? root : peek(); + public void showModal(ViewController viewController, ViewController root, CommandListener listener) { + ViewController toRemove = isEmpty() ? root : peek(); modals.add(viewController); viewController.setOverlay(overlay); presenter.showModal(viewController, toRemove, listener); } - public boolean dismissModal(String componentId, @Nullable ViewController root, CommandListener listener) { - ViewController toDismiss = findModalByComponentId(componentId); + public boolean dismissModal(String componentId, @Nullable ViewController root, CommandListener listener) { + ViewController toDismiss = findModalByComponentId(componentId); if (toDismiss != null) { boolean isDismissingTopModal = isTop(toDismiss); modals.remove(toDismiss); - @Nullable ViewController toAdd = isEmpty() ? root : isDismissingTopModal ? get(size() - 1) : null; + @Nullable ViewController toAdd = isEmpty() ? root : isDismissingTopModal ? get(size() - 1) : null; if (isDismissingTopModal) { if (toAdd == null) { listener.onError("Could not dismiss modal"); @@ -90,7 +90,7 @@ public void onSuccess(String childId) { } } - public void dismissAllModals(@Nullable ViewController root, Options mergeOptions, CommandListener listener) { + public void dismissAllModals(@Nullable ViewController root, Options mergeOptions, CommandListener listener) { if (modals.isEmpty()) { listener.onSuccess(perform(root, "", ViewController::getId)); return; @@ -117,7 +117,7 @@ public void onSuccess(String childId) { } } - public boolean handleBack(CommandListener listener, ViewController root) { + public boolean handleBack(CommandListener listener, ViewController root) { if (isEmpty()) return false; if (peek().handleBack(listener)) { return true; @@ -130,12 +130,12 @@ public boolean handleBack(CommandListener listener, ViewController root) { } } - ViewController peek() { + ViewController peek() { if (modals.isEmpty()) throw new EmptyStackException(); return modals.get(modals.size() - 1); } - public ViewController get(int index) { + public ViewController get(int index) { return modals.get(index); } @@ -147,13 +147,13 @@ public int size() { return modals.size(); } - private boolean isTop(ViewController modal) { + private boolean isTop(ViewController modal) { return !isEmpty() && peek().equals(modal); } @Nullable - private ViewController findModalByComponentId(String componentId) { - for (ViewController modal : modals) { + private ViewController findModalByComponentId(String componentId) { + for (ViewController modal : modals) { if (modal.findController(componentId) != null) { return modal; } @@ -163,9 +163,9 @@ private ViewController findModalByComponentId(String componentId) { @Nullable - public ViewController findControllerById(String componentId) { - for (ViewController modal : modals) { - ViewController controllerById = modal.findController(componentId); + public ViewController findControllerById(String componentId) { + for (ViewController modal : modals) { + ViewController controllerById = modal.findController(componentId); if (controllerById != null) { return controllerById; } @@ -174,14 +174,14 @@ public ViewController findControllerById(String componentId) { } public void destroy() { - for (ViewController modal : modals) { + for (ViewController modal : modals) { modal.destroy(); } modals.clear(); } public void onConfigurationChanged(Configuration newConfig) { - for (ViewController controller : modals) { + for (ViewController controller : modals) { controller.onConfigurationChanged(newConfig); } } From 56a8f75053d419f77471cee58236206c5190284d Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 10:02:37 +0300 Subject: [PATCH 22/37] Fix raw ViewController use --- .../viewcontrollers/navigator/Navigator.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java index a6b04757959..38d663b8455 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java @@ -31,13 +31,13 @@ import java.util.Collections; import java.util.List; -public class Navigator extends ParentController { +public class Navigator extends ParentController { private final ModalStack modalStack; private final OverlayManager overlayManager; private final RootPresenter rootPresenter; - private ViewController root; - private ViewController previousRoot; + private ViewController root; + private ViewController previousRoot; private final CoordinatorLayout rootLayout; private final CoordinatorLayout modalsLayout; private final CoordinatorLayout overlaysLayout; @@ -96,7 +96,7 @@ public ViewGroup createView() { @NonNull @Override - public Collection getChildControllers() { + public Collection> getChildControllers() { return root == null ? Collections.emptyList() : Collections.singletonList(root); } @@ -108,7 +108,7 @@ public boolean handleBack(CommandListener listener) { } @Override - public ViewController getCurrentChild() { + public ViewController getCurrentChild() { return root; } @@ -159,17 +159,17 @@ public void onSuccess(String childId) { } public void mergeOptions(final String componentId, Options options) { - ViewController target = findController(componentId); + ViewController target = findController(componentId); if (target != null) { target.mergeOptions(options); } } - public void push(final String id, final ViewController viewController, CommandListener listener) { + public void push(final String id, final ViewController viewController, CommandListener listener) { applyOnStack(id, listener, stack -> stack.push(viewController, listener)); } - public void setStackRoot(String id, List children, CommandListener listener) { + public void setStackRoot(String id, List> children, CommandListener listener) { applyOnStack(id, listener, stack -> stack.setRoot(children, listener)); } @@ -190,7 +190,7 @@ public void popTo(final String id, Options mergeOptions, CommandListener listene } } - public void showModal(final ViewController viewController, CommandListener listener) { + public void showModal(final ViewController viewController, CommandListener listener) { modalStack.showModal(viewController, root, listener); } @@ -206,7 +206,7 @@ public void dismissAllModals(Options mergeOptions, CommandListener listener) { modalStack.dismissAllModals(root, mergeOptions, listener); } - public void showOverlay(ViewController overlay, CommandListener listener) { + public void showOverlay(ViewController overlay, CommandListener listener) { overlayManager.show(overlaysLayout, overlay, listener); } @@ -220,8 +220,8 @@ public void dismissAllOverlays(CommandListener listener) { @Nullable @Override - public ViewController findController(String id) { - ViewController controllerById = super.findController(id); + public ViewController findController(String id) { + ViewController controllerById = super.findController(id); if (controllerById == null) { controllerById = modalStack.findControllerById(id); } From 6cf5cbfd18c3eddd7ff62d0b3a57a04bf1cc48fa Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 10:06:04 +0300 Subject: [PATCH 23/37] Fix raw ViewController use --- .../stack/StackController.java | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) 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 f021214afc8..b933b8bd871 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 @@ -45,7 +45,7 @@ public class StackController extends ParentController { - private IdStack stack = new IdStack<>(); + private IdStack> stack = new IdStack<>(); private final StackAnimator animator; private final EventEmitter eventEmitter; private final TopBarController topBarController; @@ -53,7 +53,7 @@ public class StackController extends ParentController { private final StackPresenter presenter; private final FabPresenter fabPresenter; - public StackController(Activity activity, List children, ChildControllersRegistry childRegistry, EventEmitter eventEmitter, TopBarController topBarController, StackAnimator animator, String id, Options initialOptions, BackButtonHelper backButtonHelper, StackPresenter stackPresenter, Presenter presenter, FabPresenter fabPresenter) { + public StackController(Activity activity, List> children, ChildControllersRegistry childRegistry, EventEmitter eventEmitter, TopBarController topBarController, StackAnimator animator, String id, Options initialOptions, BackButtonHelper backButtonHelper, StackPresenter stackPresenter, Presenter presenter, FabPresenter fabPresenter) { super(activity, childRegistry, id, presenter, initialOptions); this.eventEmitter = eventEmitter; this.topBarController = topBarController; @@ -108,7 +108,7 @@ public void mergeOptions(Options options) { } @Override - public void applyChildOptions(Options options, ViewController child) { + public void applyChildOptions(Options options, ViewController child) { super.applyChildOptions(options, child); presenter.applyChildOptions(resolveCurrentOptions(), this, child); fabPresenter.applyOptions(this.options.fabOptions, child, getView()); @@ -126,7 +126,7 @@ public void applyChildOptions(Options options, ViewController child) { } @Override - public void mergeChildOptions(Options options, ViewController child) { + public void mergeChildOptions(Options options, ViewController child) { super.mergeChildOptions(options, child); if (child.isViewShown() && peek() == child) { presenter.mergeChildOptions(options, resolveCurrentOptions(), this, child); @@ -148,17 +148,17 @@ public void mergeChildOptions(Options options, ViewController child) { } @Override - public void onChildDestroyed(ViewController child) { + public void onChildDestroyed(ViewController child) { super.onChildDestroyed(child); presenter.onChildDestroyed(child); } - public void push(ViewController child, CommandListener listener) { + public void push(ViewController child, CommandListener listener) { if (findController(child.getId()) != null) { listener.onError("A stack can't contain two children with the same id: " + child.getId()); return; } - final ViewController toRemove = stack.peek(); + final ViewController toRemove = stack.peek(); if (size() > 0) backButtonHelper.addToPushedChild(child); child.setParentController(this); stack.push(child.getId(), child); @@ -190,30 +190,30 @@ public void destroy() { animator.cancelAllAnimations(); } - private void onPushAnimationComplete(ViewController toAdd, ViewController toRemove, CommandListener listener) { + private void onPushAnimationComplete(ViewController toAdd, ViewController toRemove, CommandListener listener) { toAdd.onViewDidAppear(); if (!peek().equals(toRemove)) getView().removeView(toRemove.getView()); listener.onSuccess(toAdd.getId()); } - private void addChildToStack(ViewController child, Options resolvedOptions) { + private void addChildToStack(ViewController child, Options resolvedOptions) { child.setWaitForRender(resolvedOptions.animations.push.waitForRender); if (size() == 1) presenter.applyInitialChildLayoutOptions(resolvedOptions); getView().addView(child.getView(), getView().getChildCount() - 1, matchParentWithBehaviour(new StackBehaviour(this))); } - public void setRoot(@Size(min = 1) List children, CommandListener listener) { + public void setRoot(@Size(min = 1) List> children, CommandListener listener) { if (!isViewCreated()) { setChildren(children); return; } animator.cancelPushAnimations(); - final ViewController toRemove = stack.peek(); - IdStack stackToDestroy = stack; + final ViewController toRemove = stack.peek(); + IdStack stackToDestroy = stack; stack = new IdStack<>(); - ViewController child = requireLast(children); + ViewController child = requireLast(children); if (children.size() == 1) { backButtonHelper.clear(child); } else { @@ -270,9 +270,9 @@ public void onSuccess(String childId) { } } - private void setChildren(List children) { + private void setChildren(List> children) { stack.clear(); - for (ViewController child : children) { + for (ViewController child : children) { if (stack.containsId(child.getId())) { throw new IllegalArgumentException("A stack can't contain two children with the same id: " + child.getId()); } @@ -282,10 +282,10 @@ private void setChildren(List children) { } } - private void destroyStack(IdStack stack) { + private void destroyStack(IdStack stack) { animator.cancelAllAnimations(); for (String s : (Iterable) stack) { - ((ViewController) stack.get(s)).destroy(); + ((ViewController) stack.get(s)).destroy(); } } @@ -298,9 +298,9 @@ public void pop(Options mergeOptions, CommandListener listener) { peek().mergeOptions(mergeOptions); Options disappearingOptions = resolveCurrentOptions(presenter.getDefaultOptions()); - final ViewController disappearing = stack.pop(); + final ViewController disappearing = stack.pop(); if (!isViewCreated()) return; - final ViewController appearing = stack.peek(); + final ViewController appearing = stack.peek(); disappearing.onViewWillDisappear(); @@ -325,14 +325,14 @@ public void pop(Options mergeOptions, CommandListener listener) { } } - private void finishPopping(ViewController appearing, ViewController disappearing, CommandListener listener) { + private void finishPopping(ViewController appearing, ViewController disappearing, CommandListener listener) { appearing.onViewDidAppear(); disappearing.destroy(); listener.onSuccess(disappearing.getId()); eventEmitter.emitScreenPoppedEvent(disappearing.getId()); } - public void popTo(ViewController viewController, Options mergeOptions, CommandListener listener) { + public void popTo(ViewController viewController, Options mergeOptions, CommandListener listener) { if (!stack.containsId(viewController.getId()) || peek().equals(viewController)) { listener.onError("Nothing to pop"); return; @@ -346,7 +346,7 @@ public void popTo(ViewController viewController, Options mergeOptions, CommandLi break; } - ViewController controller = stack.get(currentControlId); + ViewController controller = stack.get(currentControlId); stack.remove(controller.getId()); controller.destroy(); } @@ -364,7 +364,7 @@ public void popToRoot(Options mergeOptions, CommandListener listener) { Iterator iterator = stack.iterator(); iterator.next(); while (stack.size() > 2) { - ViewController controller = stack.get(iterator.next()); + ViewController controller = stack.get(iterator.next()); if (!stack.isTop(controller.getId())) { stack.remove(iterator, controller.getId()); controller.destroy(); @@ -374,7 +374,7 @@ public void popToRoot(Options mergeOptions, CommandListener listener) { pop(mergeOptions, listener); } - ViewController peek() { + ViewController peek() { return stack.peek(); } @@ -386,7 +386,7 @@ public boolean isEmpty() { return stack.isEmpty(); } - public boolean isChildInTransition(ViewController child) { + public boolean isChildInTransition(ViewController child) { return animator.isChildInTransition(child); } @@ -419,7 +419,7 @@ public StackLayout createView() { private void addInitialChild(StackLayout stackLayout) { if (isEmpty()) return; - ViewController childController = peek(); + ViewController childController = peek(); ViewGroup child = childController.getView(); child.setId(CompatUtils.generateViewId()); childController.addOnAppearedListener(this::startChildrenBellowTopChild); @@ -428,7 +428,7 @@ private void addInitialChild(StackLayout stackLayout) { } private void startChildrenBellowTopChild() { - ArrayList children = new ArrayList(getChildControllers()); + ArrayList> children = new ArrayList<>(getChildControllers()); for (int i = children.size() - 2; i >= 0; i--) { children.get(i).start(); } @@ -448,7 +448,7 @@ public void sendOnNavigationButtonPressed(String buttonId) { @NonNull @Override - public Collection getChildControllers() { + public Collection> getChildControllers() { return stack.values(); } @@ -473,7 +473,7 @@ public boolean onDependentViewChanged(CoordinatorLayout parent, ViewGroup child, } @Override - public int getTopInset(ViewController child) { + public int getTopInset(ViewController child) { return presenter.getTopInset(resolveChildOptions(child)); } From 460111c53abbe8a7a49d0038142189a7ae5e8d1d Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 10:08:08 +0300 Subject: [PATCH 24/37] Fix raw ViewController use --- .../sidemenu/SideMenuController.java | 32 +++++++++---------- 1 file changed, 16 insertions(+), 16 deletions(-) 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 e4fe5e157b6..42480807934 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 @@ -29,9 +29,9 @@ public class SideMenuController extends ParentController implements DrawerLayout.DrawerListener { - private ViewController center; - private ViewController left; - private ViewController right; + private ViewController center; + private ViewController left; + private ViewController right; private SideMenuPresenter presenter; private float prevLeftSlideOffset = 0; private float prevRightSlideOffset = 0; @@ -42,7 +42,7 @@ public SideMenuController(Activity activity, ChildControllersRegistry childRegis } @Override - public ViewController getCurrentChild() { + public ViewController getCurrentChild() { if (!isDestroyed()) { if (getView().isDrawerOpen(Gravity.LEFT)) { return left; @@ -72,8 +72,8 @@ public void sendOnNavigationButtonPressed(String buttonId) { @NonNull @Override - public Collection getChildControllers() { - ArrayList children = new ArrayList<>(); + public Collection> getChildControllers() { + ArrayList> children = new ArrayList<>(); if (center != null) children.add(center); if (left != null) children.add(left); if (right != null) children.add(right); @@ -87,14 +87,14 @@ public void applyOptions(Options options) { } @Override - public void applyChildOptions(Options options, ViewController child) { + public void applyChildOptions(Options options, ViewController child) { super.applyChildOptions(options, child); presenter.applyChildOptions(resolveCurrentOptions()); performOnParentController(parent -> parent.applyChildOptions(this.options, child)); } @Override - public void mergeChildOptions(Options options, ViewController child) { + public void mergeChildOptions(Options options, ViewController child) { super.mergeChildOptions(options, child); presenter.mergeOptions(options.sideMenuRootOptions); mergeLockMode(this.initialOptions, options.sideMenuRootOptions); @@ -129,13 +129,13 @@ private boolean isDrawerOpen(int gravity) { @Override public void onDrawerOpened(@NonNull View drawerView) { - ViewController view = this.getMatchingView(drawerView); + ViewController view = this.getMatchingView(drawerView); view.mergeOptions(this.getOptionsWithVisibility(isLeftMenu(drawerView), true)); } @Override public void onDrawerClosed(@NonNull View drawerView) { - ViewController view = this.getMatchingView(drawerView); + ViewController view = this.getMatchingView(drawerView); view.mergeOptions(this.getOptionsWithVisibility(isLeftMenu(drawerView), false)); } @@ -163,28 +163,28 @@ public boolean handleBack(CommandListener listener) { @Nullable @Override - public ViewController findController(View child) { + public ViewController findController(View child) { return getView().isSideMenu(child) ? this : super.findController(child); } - public void setCenterController(ViewController centerController) { + public void setCenterController(ViewController centerController) { center = centerController; getView().setCenter(center); } - public void setLeftController(ViewController controller) { + public void setLeftController(ViewController controller) { left = controller; getView().setLeft(left, options); presenter.bindLeft(left); } - public void setRightController(ViewController controller) { + public void setRightController(ViewController controller) { right = controller; getView().setRight(right, options); presenter.bindRight(right); } - private ViewController getMatchingView(View drawerView) { + private ViewController getMatchingView(View drawerView) { return this.isLeftMenu(drawerView) ? left : right; } @@ -206,7 +206,7 @@ private Options getOptionsWithVisibility(boolean isLeft, boolean visible) { return options; } - private void dispatchSideMenuVisibilityEvents(ViewController drawer, float prevOffset, float offset) { + private void dispatchSideMenuVisibilityEvents(ViewController drawer, float prevOffset, float offset) { if (prevOffset < 1 && offset == 1) { drawer.onViewDidAppear(); } else if (prevOffset == 0 && offset > 0) { From 3316824b2cdc065a9af81bf59c0aaca21fa6bc2b Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 10:08:43 +0300 Subject: [PATCH 25/37] Fix raw ViewController use --- .../viewcontrollers/sidemenu/SideMenuPresenter.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuPresenter.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuPresenter.java index f3d35f5647a..4831fe37667 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuPresenter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuPresenter.java @@ -15,18 +15,18 @@ public class SideMenuPresenter { private SideMenu sideMenu; - private ViewController left; - private ViewController right; + private ViewController left; + private ViewController right; public void bindView(SideMenu sideMenu) { this.sideMenu = sideMenu; } - public void bindLeft(ViewController left) { + public void bindLeft(ViewController left) { this.left = left; } - public void bindRight(ViewController right) { + public void bindRight(ViewController right) { this.right = right; } From 24373bb7c502c16f27bb5ce113b83fc52710f1f7 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 10:09:40 +0300 Subject: [PATCH 26/37] Fix raw ViewController use --- .../viewcontrollers/stack/topbar/button/BackButtonHelper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/BackButtonHelper.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/BackButtonHelper.java index 76c880585e0..5d60f10bc93 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/BackButtonHelper.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/BackButtonHelper.java @@ -5,13 +5,13 @@ import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController; public class BackButtonHelper { - public void clear(ViewController child) { + public void clear(ViewController child) { if (!child.options.topBar.buttons.back.hasValue()) { child.options.topBar.buttons.back.visible = new Bool(false); } } - public void addToPushedChild(ViewController child) { + public void addToPushedChild(ViewController child) { if (child.options.topBar.buttons.left != null || child.options.topBar.buttons.back.visible.isFalse()) return; Options options = new Options(); options.topBar.buttons.back.setVisible(); From 2a1382aba86cbedf2e15e35008d96c6bba9023df Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 10:10:57 +0300 Subject: [PATCH 27/37] Remove wrong return type condition --- .../viewcontrollers/stack/topbar/button/ButtonPresenter.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt index 62dcb7491e9..aba7d7a8f74 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt @@ -88,7 +88,7 @@ open class ButtonPresenter(private val context: Context, private val button: But menuItem.isEnabled = button.enabled.isTrueOrUndefined } - private fun applyIconBackgroundDrawable(srcDrawable: Drawable): Drawable? { + private fun applyIconBackgroundDrawable(srcDrawable: Drawable): Drawable { return if (button.iconBackground.hasValue()) { val width = button.iconBackground.width.get(srcDrawable.intrinsicWidth).let { max(it, srcDrawable.intrinsicWidth) } val height = button.iconBackground.height.get(srcDrawable.intrinsicHeight).let { max(it, srcDrawable.intrinsicHeight) } From 1ec7b6d3d65383f0e336f3bb3da55b694faa3caf Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 10:11:27 +0300 Subject: [PATCH 28/37] Remove unused import --- .../viewcontrollers/stack/topbar/button/ButtonSpan.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt index 76859ad0c5b..bf10b685b0b 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt @@ -1,7 +1,6 @@ package com.reactnativenavigation.viewcontrollers.stack.topbar.button import android.content.Context -import android.graphics.Color import android.graphics.Paint import android.graphics.Typeface import android.text.TextPaint From 96365f39c2f332ca950747da858494d2fe68b137 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 10:12:04 +0300 Subject: [PATCH 29/37] Remove unused import --- .../viewcontrollers/stack/topbar/button/IconResolver.java | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/IconResolver.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/IconResolver.java index f118eb6ffd8..ec51ede343c 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/IconResolver.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/IconResolver.java @@ -5,7 +5,6 @@ import android.util.Log; import com.reactnativenavigation.options.ButtonOptions; -import com.reactnativenavigation.react.Constants; import com.reactnativenavigation.utils.Functions.Func1; import com.reactnativenavigation.utils.ImageLoader; import com.reactnativenavigation.utils.ImageLoadingListenerAdapter; From b25e180fed7f2c2f11f9497a75cbe0754d319f93 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 10:13:10 +0300 Subject: [PATCH 30/37] Remove unused import --- .../stack/topbar/TopBarBackgroundViewController.java | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarBackgroundViewController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarBackgroundViewController.java index ba2227c12b1..8235fb4d30f 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarBackgroundViewController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarBackgroundViewController.java @@ -5,7 +5,6 @@ import com.reactnativenavigation.options.ComponentOptions; import com.reactnativenavigation.options.Options; import com.reactnativenavigation.react.events.ComponentType; -import com.reactnativenavigation.react.events.EventEmitter; import com.reactnativenavigation.utils.CompatUtils; import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController; import com.reactnativenavigation.viewcontrollers.viewcontroller.YellowBoxDelegate; From e70edda08044376ce475aac035336d126179c55f Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 10:13:51 +0300 Subject: [PATCH 31/37] Remove redundant semicolon --- .../viewcontrollers/stack/topbar/TopBarController.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt index 41a1ae06d40..f0ac09d20b7 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt @@ -122,7 +122,7 @@ open class TopBarController(private val animator: TopBarAnimator = TopBarAnimato } open fun mergeLeftButtons(toAdd: List, toRemove: List) { - view.clearBackButton(); + view.clearBackButton() toRemove.forEach { view.removeLeftButton(it) } forEachIndexed(toAdd) { b: ButtonController, i: Int -> b.addToMenu(leftButtonBar, i * 10) } } From 40b811d592b1240e7ddbe12cfde5dc81ceaa015e Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 10:15:05 +0300 Subject: [PATCH 32/37] Fix raw ViewController use --- .../viewcontrollers/stack/FabPresenter.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/FabPresenter.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/FabPresenter.java index 9b82d07f983..7217d38d486 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/FabPresenter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/FabPresenter.java @@ -32,7 +32,7 @@ public class FabPresenter { private Fab fab; private FabMenu fabMenu; - public void applyOptions(FabOptions options, @NonNull ViewController component, @NonNull ViewGroup viewGroup) { + public void applyOptions(FabOptions options, @NonNull ViewController component, @NonNull ViewGroup viewGroup) { this.viewGroup = viewGroup; if (options.id.hasValue()) { @@ -54,7 +54,7 @@ public void applyOptions(FabOptions options, @NonNull ViewController component, } } - public void mergeOptions(FabOptions options, @NonNull ViewController component, @NonNull ViewGroup viewGroup) { + public void mergeOptions(FabOptions options, @NonNull ViewController component, @NonNull ViewGroup viewGroup) { this.viewGroup = viewGroup; if (options.id.hasValue()) { if (fabMenu != null && fabMenu.getFabId().equals(options.id.get())) { @@ -72,7 +72,7 @@ public void mergeOptions(FabOptions options, @NonNull ViewController component, } } - private void createFab(ViewController component, FabOptions options) { + private void createFab(ViewController component, FabOptions options) { ViewExtensionsKt.removeFromParent(fabMenu); ViewExtensionsKt.removeFromParent(fab); if (options.actionsArray.size() > 0) { @@ -123,7 +123,7 @@ public void onAnimationEnd(Animator animation) { }); } - private void setParams(ViewController component, View fab, FabOptions options) { + private void setParams(ViewController component, View fab, FabOptions options) { CoordinatorLayout.LayoutParams lp = new CoordinatorLayout.LayoutParams(WRAP_CONTENT, WRAP_CONTENT); lp.rightMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin); lp.leftMargin = (int) viewGroup.getContext().getResources().getDimension(R.dimen.margin); @@ -164,7 +164,7 @@ private void mergeParams(View fab, FabOptions options) { fab.setLayoutParams(lp); } - private void applyFabOptions(ViewController component, Fab fab, FabOptions options) { + private void applyFabOptions(ViewController component, Fab fab, FabOptions options) { if (options.visible.isTrueOrUndefined()) { fab.setScaleX(0.6f); fab.setScaleY(0.6f); @@ -204,7 +204,7 @@ private void applyFabOptions(ViewController component, Fab fab, FabOptions optio } } - private void mergeFabOptions(ViewController component, Fab fab, FabOptions options) { + private void mergeFabOptions(ViewController component, Fab fab, FabOptions options) { if (options.visible.isTrue()) { fab.show(true); } @@ -234,7 +234,7 @@ private void mergeFabOptions(ViewController component, Fab fab, FabOptions optio } } - private void applyFabMenuOptions(ViewController component, FabMenu fabMenu, FabOptions options) { + private void applyFabMenuOptions(ViewController component, FabMenu fabMenu, FabOptions options) { if (options.visible.isTrueOrUndefined()) { fabMenu.showMenuButton(true); } @@ -271,7 +271,7 @@ private void applyFabMenuOptions(ViewController component, FabMenu fabMenu, FabO } } - private void mergeFabMenuOptions(ViewController component, FabMenu fabMenu, FabOptions options) { + private void mergeFabMenuOptions(ViewController component, FabMenu fabMenu, FabOptions options) { if (options.visible.isTrue()) { fabMenu.showMenuButton(true); } From e7841eb98c526d7a6f5e472f1fdde1b4838946a7 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 10:24:54 +0300 Subject: [PATCH 33/37] Fix raw ViewController use --- .../options/LayoutFactory.java | 240 +++++++++--------- .../viewcontrollers/stack/IdStack.java | 28 +- .../stack/StackControllerBuilder.java | 6 +- .../toptabs/TopTabsAdapter.java | 9 +- .../toptabs/TopTabsController.java | 16 +- .../views/toptabs/TopTabsLayoutCreator.java | 4 +- .../views/toptabs/TopTabsViewPager.java | 12 +- .../toptabs/TopTabsViewControllerTest.java | 18 +- 8 files changed, 167 insertions(+), 166 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java b/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java index 2de7425bf59..7e3ff064736 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java @@ -47,37 +47,37 @@ public class LayoutFactory { private Activity activity; - private ChildControllersRegistry childRegistry; + private ChildControllersRegistry childRegistry; private final ReactInstanceManager reactInstanceManager; - private EventEmitter eventEmitter; - private Map externalComponentCreators; - private @NonNull Options defaultOptions = new Options(); - private TypefaceLoader typefaceManager; - - public void setDefaultOptions(@NonNull Options defaultOptions) { - Assertions.assertNotNull(defaultOptions); - this.defaultOptions = defaultOptions; - } - - public LayoutFactory(final ReactInstanceManager reactInstanceManager) { - this.reactInstanceManager = reactInstanceManager; - } - - public void init(Activity activity, EventEmitter eventEmitter, ChildControllersRegistry childRegistry, Map externalComponentCreators) { - this.activity = activity; - this.eventEmitter = eventEmitter; - this.childRegistry = childRegistry; - this.externalComponentCreators = externalComponentCreators; - typefaceManager = new TypefaceLoader(activity); - } - - public ViewController create(final LayoutNode node) { + private EventEmitter eventEmitter; + private Map externalComponentCreators; + private @NonNull Options defaultOptions = new Options(); + private TypefaceLoader typefaceManager; + + public void setDefaultOptions(@NonNull Options defaultOptions) { + Assertions.assertNotNull(defaultOptions); + this.defaultOptions = defaultOptions; + } + + public LayoutFactory(final ReactInstanceManager reactInstanceManager) { + this.reactInstanceManager = reactInstanceManager; + } + + public void init(Activity activity, EventEmitter eventEmitter, ChildControllersRegistry childRegistry, Map externalComponentCreators) { + this.activity = activity; + this.eventEmitter = eventEmitter; + this.childRegistry = childRegistry; + this.externalComponentCreators = externalComponentCreators; + typefaceManager = new TypefaceLoader(activity); + } + + public ViewController create(final LayoutNode node) { final ReactContext context = reactInstanceManager.getCurrentReactContext(); switch (node.type) { case Component: return createComponent(context, node); - case ExternalComponent: - return createExternalComponent(context, node); + case ExternalComponent: + return createExternalComponent(context, node); case Stack: return createStack(context, node); case BottomTabs: @@ -90,22 +90,22 @@ public ViewController create(final LayoutNode node) { return createSideMenuLeft(node); case SideMenuRight: return createSideMenuRight(node); - case TopTabs: - return createTopTabs(context, node); + case TopTabs: + return createTopTabs(context, node); default: throw new IllegalArgumentException("Invalid node type: " + node.type); } } - private ViewController createSideMenuRoot(ReactContext context, LayoutNode node) { + private ViewController createSideMenuRoot(ReactContext context, LayoutNode node) { SideMenuController sideMenuController = new SideMenuController(activity, - childRegistry, - node.id, - parse(context, typefaceManager, node.getOptions()), - new SideMenuPresenter(), - new Presenter(activity, defaultOptions) - ); - ViewController childControllerCenter = null, childControllerLeft = null, childControllerRight = null; + childRegistry, + node.id, + parse(context, typefaceManager, node.getOptions()), + new SideMenuPresenter(), + new Presenter(activity, defaultOptions) + ); + ViewController childControllerCenter = null, childControllerLeft = null, childControllerRight = null; for (LayoutNode child : node.children) { switch (child.type) { @@ -141,105 +141,105 @@ private ViewController createSideMenuRoot(ReactContext context, LayoutNode node) return sideMenuController; } - private ViewController createSideMenuContent(LayoutNode node) { + private ViewController createSideMenuContent(LayoutNode node) { return create(node.children.get(0)); } - private ViewController createSideMenuLeft(LayoutNode node) { + private ViewController createSideMenuLeft(LayoutNode node) { return create(node.children.get(0)); } - private ViewController createSideMenuRight(LayoutNode node) { + private ViewController createSideMenuRight(LayoutNode node) { return create(node.children.get(0)); } - private ViewController createComponent(ReactContext context, LayoutNode node) { + private ViewController createComponent(ReactContext context, LayoutNode node) { String id = node.id; String name = node.data.optString("name"); - return new ComponentViewController(activity, - childRegistry, - id, - name, - new ComponentViewCreator(reactInstanceManager), - parse(context, typefaceManager, node.getOptions()), - new Presenter(activity, defaultOptions), - new ComponentPresenter(defaultOptions) - ); + return new ComponentViewController(activity, + childRegistry, + id, + name, + new ComponentViewCreator(reactInstanceManager), + parse(context, typefaceManager, node.getOptions()), + new Presenter(activity, defaultOptions), + new ComponentPresenter(defaultOptions) + ); } - private ViewController createExternalComponent(ReactContext context, LayoutNode node) { - final ExternalComponent externalComponent = ExternalComponent.parse(node.data); - return new ExternalComponentViewController(activity, - childRegistry, - node.id, - new Presenter(activity, defaultOptions), - externalComponent, - externalComponentCreators.get(externalComponent.name.get()), - reactInstanceManager, - new EventEmitter(context), - new ExternalComponentPresenter(), - parse(context, typefaceManager, node.getOptions()) - ); - } - - private ViewController createStack(ReactContext context, LayoutNode node) { - return new StackControllerBuilder(activity, eventEmitter) - .setChildren(createChildren(node.children)) - .setChildRegistry(childRegistry) - .setTopBarController(new TopBarController()) - .setId(node.id) - .setInitialOptions(parse(context, typefaceManager, node.getOptions())) - .setStackPresenter(new StackPresenter(activity, - new TitleBarReactViewCreator(reactInstanceManager), - new TopBarBackgroundViewCreator(reactInstanceManager), - new TitleBarButtonCreator(reactInstanceManager), - new IconResolver(activity, new ImageLoader()), - new TypefaceLoader(activity), - new RenderChecker(), - defaultOptions - )) - .setPresenter(new Presenter(activity, defaultOptions)) - .build(); + private ViewController createExternalComponent(ReactContext context, LayoutNode node) { + final ExternalComponent externalComponent = ExternalComponent.parse(node.data); + return new ExternalComponentViewController(activity, + childRegistry, + node.id, + new Presenter(activity, defaultOptions), + externalComponent, + externalComponentCreators.get(externalComponent.name.get()), + reactInstanceManager, + new EventEmitter(context), + new ExternalComponentPresenter(), + parse(context, typefaceManager, node.getOptions()) + ); } - private List createChildren(List children) { - List result = new ArrayList<>(); - for (LayoutNode child : children) { - result.add(create(child)); - } - return result; - } - - private ViewController createBottomTabs(ReactContext context, LayoutNode node) { - List> tabs = map(node.children, this::create); - BottomTabsPresenter bottomTabsPresenter = new BottomTabsPresenter(tabs, defaultOptions, new BottomTabsAnimator()); - return new BottomTabsController(activity, - tabs, - childRegistry, - eventEmitter, - new ImageLoader(), - node.id, - parse(context, typefaceManager, node.getOptions()), - new Presenter(activity, defaultOptions), - new BottomTabsAttacher(tabs, bottomTabsPresenter, defaultOptions), - bottomTabsPresenter, - new BottomTabPresenter(activity, tabs, new ImageLoader(), new TypefaceLoader(activity), defaultOptions)); + private ViewController createStack(ReactContext context, LayoutNode node) { + return new StackControllerBuilder(activity, eventEmitter) + .setChildren(createChildren(node.children)) + .setChildRegistry(childRegistry) + .setTopBarController(new TopBarController()) + .setId(node.id) + .setInitialOptions(parse(context, typefaceManager, node.getOptions())) + .setStackPresenter(new StackPresenter(activity, + new TitleBarReactViewCreator(reactInstanceManager), + new TopBarBackgroundViewCreator(reactInstanceManager), + new TitleBarButtonCreator(reactInstanceManager), + new IconResolver(activity, new ImageLoader()), + new TypefaceLoader(activity), + new RenderChecker(), + defaultOptions + )) + .setPresenter(new Presenter(activity, defaultOptions)) + .build(); } - private ViewController createTopTabs(ReactContext context, LayoutNode node) { - final List tabs = new ArrayList<>(); - for (int i = 0; i < node.children.size(); i++) { - ViewController tabController = create(node.children.get(i)); - Options options = parse(context, typefaceManager, node.children.get(i).getOptions()); - options.setTopTabIndex(i); - tabs.add(tabController); - } - return new TopTabsController(activity, childRegistry, node.id, tabs, new TopTabsLayoutCreator(activity, tabs), parse(context, typefaceManager, node.getOptions()), new Presenter(activity, defaultOptions)); - } - - @NonNull - @RestrictTo(RestrictTo.Scope.TESTS) - public Options getDefaultOptions() { - return defaultOptions; - } + private List> createChildren(List children) { + List> result = new ArrayList<>(); + for (LayoutNode child : children) { + result.add(create(child)); + } + return result; + } + + private ViewController createBottomTabs(ReactContext context, LayoutNode node) { + List> tabs = map(node.children, this::create); + BottomTabsPresenter bottomTabsPresenter = new BottomTabsPresenter(tabs, defaultOptions, new BottomTabsAnimator()); + return new BottomTabsController(activity, + tabs, + childRegistry, + eventEmitter, + new ImageLoader(), + node.id, + parse(context, typefaceManager, node.getOptions()), + new Presenter(activity, defaultOptions), + new BottomTabsAttacher(tabs, bottomTabsPresenter, defaultOptions), + bottomTabsPresenter, + new BottomTabPresenter(activity, tabs, new ImageLoader(), new TypefaceLoader(activity), defaultOptions)); + } + + private ViewController createTopTabs(ReactContext context, LayoutNode node) { + final List> tabs = new ArrayList<>(); + for (int i = 0; i < node.children.size(); i++) { + ViewController tabController = create(node.children.get(i)); + Options options = parse(context, typefaceManager, node.children.get(i).getOptions()); + options.setTopTabIndex(i); + tabs.add(tabController); + } + return new TopTabsController(activity, childRegistry, node.id, tabs, new TopTabsLayoutCreator(activity, tabs), parse(context, typefaceManager, node.getOptions()), new Presenter(activity, defaultOptions)); + } + + @NonNull + @RestrictTo(RestrictTo.Scope.TESTS) + public Options getDefaultOptions() { + return defaultOptions; + } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/IdStack.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/IdStack.java index b880c7468c0..07a49793c52 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/IdStack.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/IdStack.java @@ -14,7 +14,7 @@ public class IdStack implements Iterable { - private final ArrayList deque = new ArrayList(); + private final ArrayList deque = new ArrayList<>(); private final Map map = new HashMap<>(); public void push(String id, E item) { @@ -22,17 +22,17 @@ public void push(String id, E item) { map.put(id, item); } - public void set(String id, E item, int index) { - deque.add(index, id); - map.put(id, item); - } + public void set(String id, E item, int index) { + deque.add(index, id); + map.put(id, item); + } public E peek() { - return isEmpty() ? null : map.get(last(deque)); + return isEmpty() ? null : map.get(last(deque)); } public E pop() { - return isEmpty() ? null : map.remove(removeLast(deque)); + return isEmpty() ? null : map.remove(removeLast(deque)); } public boolean isEmpty() { @@ -57,8 +57,8 @@ public E get(final String id) { } public E get(final int index) { - return map.get(deque.get(index)); - } + return map.get(deque.get(index)); + } public boolean containsId(final String id) { return deque.contains(id); @@ -77,7 +77,7 @@ public boolean isTop(final String id) { } @NonNull - @Override + @Override public Iterator iterator() { return deque.iterator(); } @@ -87,8 +87,8 @@ public List values() { return map(deque, map::get); } - public void remove(Iterator iterator, String id) { - iterator.remove(); - map.remove(id); - } + public void remove(Iterator iterator, String id) { + iterator.remove(); + map.remove(id); + } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerBuilder.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerBuilder.java index a8295a2cd46..8a24a2e20f2 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerBuilder.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerBuilder.java @@ -24,7 +24,7 @@ public class StackControllerBuilder { private BackButtonHelper backButtonHelper = new BackButtonHelper(); private Presenter presenter; private StackPresenter stackPresenter; - private List children = new ArrayList<>(); + private List> children = new ArrayList<>(); private EventEmitter eventEmitter; private FabPresenter fabPresenter = new FabPresenter(); @@ -40,11 +40,11 @@ public StackControllerBuilder setEventEmitter(EventEmitter eventEmitter) { return this; } - public StackControllerBuilder setChildren(ViewController... children) { + public StackControllerBuilder setChildren(ViewController... children) { return setChildren(Arrays.asList(children)); } - public StackControllerBuilder setChildren(List children) { + public StackControllerBuilder setChildren(List> children) { this.children = children; return this; } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsAdapter.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsAdapter.java index 470511f166e..45cbd95d934 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsAdapter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsAdapter.java @@ -1,5 +1,6 @@ package com.reactnativenavigation.viewcontrollers.toptabs; +import androidx.annotation.NonNull; import androidx.viewpager.widget.PagerAdapter; import androidx.viewpager.widget.ViewPager; import android.view.View; @@ -11,10 +12,10 @@ import java.util.List; public class TopTabsAdapter extends PagerAdapter implements ViewPager.OnPageChangeListener { - private List tabs; + private List> tabs; private int currentPage = 0; - public TopTabsAdapter(List tabs) { + public TopTabsAdapter(List> tabs) { this.tabs = tabs; } @@ -29,12 +30,12 @@ public int getCount() { } @Override - public boolean isViewFromObject(View view, Object object) { + public boolean isViewFromObject(@NonNull View view, @NonNull Object object) { return view == object; } @Override - public Object instantiateItem(ViewGroup component, int position) { + public Object instantiateItem(@NonNull ViewGroup component, int position) { return tabs.get(position).getView(); } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsController.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsController.java index 4f59bf17322..4af4e3a223d 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsController.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsController.java @@ -21,14 +21,14 @@ public class TopTabsController extends ParentController { - private List tabs; + private List> tabs; private TopTabsLayoutCreator viewCreator; - public TopTabsController(Activity activity, ChildControllersRegistry childRegistry, String id, List tabs, TopTabsLayoutCreator viewCreator, Options options, Presenter presenter) { + public TopTabsController(Activity activity, ChildControllersRegistry childRegistry, String id, List> tabs, TopTabsLayoutCreator viewCreator, Options options, Presenter presenter) { super(activity, childRegistry, id, presenter, options); this.viewCreator = viewCreator; this.tabs = tabs; - for (ViewController tab : tabs) { + for (ViewController tab : tabs) { tab.setParentController(this); tab.setViewVisibilityListener(new ViewVisibilityListenerAdapter() { @Override @@ -40,7 +40,7 @@ public boolean onViewAppeared(View view) { } @Override - public ViewController getCurrentChild() { + public ViewController getCurrentChild() { return tabs.get(getView().getCurrentItem()); } @@ -53,7 +53,7 @@ public TopTabsViewPager createView() { @NonNull @Override - public Collection getChildControllers() { + public Collection> getChildControllers() { return tabs; } @@ -88,13 +88,13 @@ public void applyOptions(Options options) { } @Override - public void applyChildOptions(Options options, ViewController child) { + public void applyChildOptions(Options options, ViewController child) { super.applyChildOptions(options, child); performOnParentController(parentController -> parentController.applyChildOptions(this.options.copy(), child)); } @CallSuper - public void mergeChildOptions(Options options, ViewController child) { + public void mergeChildOptions(Options options, ViewController child) { super.mergeChildOptions(options, child); performOnParentController(parentController -> parentController.applyChildOptions(options.copy(), child)); } @@ -104,7 +104,7 @@ public void switchToTab(int index) { getCurrentChild().onViewDidAppear(); } - private void performOnCurrentTab(Func1 task) { + private void performOnCurrentTab(Func1> task) { task.run(tabs.get(getView().getCurrentItem())); } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsLayoutCreator.java b/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsLayoutCreator.java index 66a006aa9b6..b749f94fd8c 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsLayoutCreator.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsLayoutCreator.java @@ -9,9 +9,9 @@ public class TopTabsLayoutCreator { private Context context; - private List tabs; + private List> tabs; - public TopTabsLayoutCreator(Context context, List tabs) { + public TopTabsLayoutCreator(Context context, List> tabs) { this.context = context; this.tabs = tabs; } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsViewPager.java b/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsViewPager.java index 5fac998175a..fb522417560 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsViewPager.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsViewPager.java @@ -22,9 +22,9 @@ public class TopTabsViewPager extends ViewPager implements Component, ButtonController.OnClickListener { private static final int OFFSCREEN_PAGE_LIMIT = 99; - private List tabs; + private List> tabs; - public TopTabsViewPager(Context context, List tabs, TopTabsAdapter adapter) { + public TopTabsViewPager(Context context, List> tabs, TopTabsAdapter adapter) { super(context); this.tabs = tabs; initTabs(adapter); @@ -32,7 +32,7 @@ public TopTabsViewPager(Context context, List tabs, TopTabsAdapt private void initTabs(TopTabsAdapter adapter) { setOffscreenPageLimit(OFFSCREEN_PAGE_LIMIT); - for (ViewController tab : tabs) { + for (ViewController tab : tabs) { addView(tab.getView(), new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT)); } setAdapter(adapter); @@ -45,7 +45,7 @@ public boolean isRendered() { } private boolean areAllTabsRendered() { - for (ViewController tab : tabs) { + for (ViewController tab : tabs) { if (!tab.isRendered()) return false; } return true; @@ -61,13 +61,13 @@ public void onPress(ButtonOptions button) { } public void destroy() { - for (ViewController tab : tabs) { + for (ViewController tab : tabs) { tab.destroy(); } } public boolean isCurrentView(View view) { - for (ViewController tab : tabs) { + for (ViewController tab : tabs) { if (tab.getView() == view) { return true; } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java index d78f6643c69..2a591fc3f7b 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java @@ -44,7 +44,7 @@ public class TopTabsViewControllerTest extends BaseTest { private StackController stack; private TopTabsController uut; - private List tabControllers = new ArrayList<>(SIZE); + private List> tabControllers = new ArrayList<>(SIZE); private final Options options = new Options(); private TopTabsViewPager topTabsLayout; private Activity activity; @@ -73,7 +73,7 @@ public void beforeEach() { @NonNull private ArrayList createOptions() { - ArrayList result = new ArrayList(); + ArrayList result = new ArrayList<>(); for (int i = 0; i < SIZE; i++) { final Options options = new Options(); options.topTabOptions.title = new Text("Tab " + i); @@ -83,8 +83,8 @@ private ArrayList createOptions() { return result; } - private List createTabsControllers(Activity activity, List tabOptions) { - List tabControllers = new ArrayList<>(SIZE); + private List> createTabsControllers(Activity activity, List tabOptions) { + List> tabControllers = new ArrayList<>(SIZE); for (int i = 0; i < SIZE; i++) { ComponentViewController viewController = new ComponentViewController( activity, @@ -117,7 +117,7 @@ public void componentViewDestroyedOnDestroy() { verify(tab(topTabs, i), times(0)).destroy(); } uut.destroy(); - for (ViewController tabController : tabControllers) { + for (ViewController tabController : tabControllers) { verify(tabController, times(1)).destroy(); } } @@ -162,7 +162,7 @@ public void setOptionsOfInitialTab() { verify(tabControllers.get(0), times(1)).onViewWillAppear(); verify(tabControllers.get(1), times(0)).onViewWillAppear(); - ViewController comp = tabControllers.get(0); + ViewController comp = tabControllers.get(0); verify(uut, times(1)).applyChildOptions(any(Options.class), eq(comp)); } @@ -174,7 +174,7 @@ public void setOptionsWhenTabChanges() { tabControllers.get(1).ensureViewIsCreated(); uut.onViewWillAppear(); - ViewController currentTab = tab(0); + ViewController currentTab = tab(0); verify(uut, times(1)).applyChildOptions(any(Options.class), eq(currentTab)); assertThat(uut.options.topBar.title.text.get()).isEqualTo(createTabTopBarTitle(0)); @@ -208,7 +208,7 @@ public void appliesOptionsOnLayoutWhenVisible() { public void applyOptions_tabsAreRemovedAfterViewDisappears() { StackController stackController = TestUtils.newStackController(activity).build(); stackController.ensureViewIsCreated(); - ViewController first = new SimpleViewController(activity, childRegistry, "first", Options.EMPTY); + ViewController first = new SimpleViewController(activity, childRegistry, "first", Options.EMPTY); disablePushAnimation(first, uut); stackController.push(first, new CommandListenerAdapter()); stackController.push(uut, new CommandListenerAdapter()); @@ -241,7 +241,7 @@ private String createTabTopBarTitle(int i) { return "Title " + i; } - private ViewController tab(int index) { + private ViewController tab(int index) { return tabControllers.get(index); } } From 4fb1472f2e167d5f96de3a49b75b90784affdf10 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 10:34:02 +0300 Subject: [PATCH 34/37] Fix raw ViewController use --- .../utils/RenderChecker.java | 2 +- .../viewcontrollers/stack/StackPresenter.java | 57 ++++++++++--------- .../presentation/RenderCheckerTest.java | 12 ++-- 3 files changed, 36 insertions(+), 35 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/RenderChecker.java b/lib/android/app/src/main/java/com/reactnativenavigation/utils/RenderChecker.java index d4f33d921d0..3d94175cd61 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/RenderChecker.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/RenderChecker.java @@ -7,7 +7,7 @@ import static com.reactnativenavigation.utils.CollectionUtils.reduce; public class RenderChecker { - public boolean areRendered(Collection components) { + public boolean areRendered(Collection> components) { return reduce(components, true, ViewController::isRendered); } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java index ecd6dd4cebc..313a9c3912c 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java @@ -50,6 +50,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import static com.reactnativenavigation.utils.CollectionUtils.difference; import static com.reactnativenavigation.utils.CollectionUtils.filter; @@ -124,7 +125,7 @@ public void bindView(TopBarController topBarController, @Nullable BottomTabsCont } public boolean isRendered(View component) { - ArrayList controllers = new ArrayList<>(); + ArrayList> controllers = new ArrayList<>(); controllers.addAll(perform(componentRightButtons.get(component), new ArrayList<>(), Map::values)); controllers.addAll(perform(componentLeftButtons.get(component), new ArrayList<>(), Map::values)); controllers.add(backgroundControllers.get(component)); @@ -132,7 +133,7 @@ public boolean isRendered(View component) { return renderChecker.areRendered(filter(controllers, ObjectUtils::notNull)); } - public void mergeOptions(Options options, StackController stack, ViewController currentChild) { + public void mergeOptions(Options options, StackController stack, ViewController currentChild) { TopBarOptions resolvedTopBarOptions = options.topBar.copy().mergeWithDefault(stack.resolveChildOptions(currentChild).topBar).mergeWithDefault(defaultOptions.topBar); mergeOrientation(options.layout.orientation); // mergeButtons(topBar, withDefault.topBar.buttons, child); @@ -165,7 +166,7 @@ public void applyInitialChildLayoutOptions(Options options) { applyTopBarVisibility(withDefault.topBar); } - public void applyChildOptions(Options currentChildOptions, StackController stack, ViewController child) { + public void applyChildOptions(Options currentChildOptions, StackController stack, ViewController child) { Options finalChildOptions = currentChildOptions.copy().withDefaultOptions(defaultOptions); applyOrientation(finalChildOptions.layout.orientation); applyButtons(finalChildOptions.topBar, child); @@ -179,7 +180,7 @@ public void applyOrientation(OrientationOptions options) { ((Activity) topBar.getContext()).setRequestedOrientation(withDefaultOptions.getValue()); } - public void onChildDestroyed(ViewController child) { + public void onChildDestroyed(ViewController child) { perform(titleControllers.remove(child.getView()), TitleBarReactViewController::destroy); perform(backgroundControllers.remove(child.getView()), TopBarBackgroundViewController::destroy); destroyButtons(componentRightButtons.get(child.getView())); @@ -192,7 +193,7 @@ private void destroyButtons(@Nullable Map buttons) { if (buttons != null) forEach(buttons.values(), ViewController::destroy); } - private void applyTopBarOptions(Options options, StackController stack, ViewController child) { + private void applyTopBarOptions(Options options, StackController stack, ViewController child) { final View component = child.getView(); TopBarOptions topBarOptions = options.topBar; @@ -211,7 +212,7 @@ private void applyTopBarOptions(Options options, StackController stack, ViewCont if (topBarOptions.title.component.hasValue()) { if (titleControllers.containsKey(component)) { - topBarController.setTitleComponent(titleControllers.get(component)); + topBarController.setTitleComponent(Objects.requireNonNull(titleControllers.get(component))); } else { TitleBarReactViewController controller = new TitleBarReactViewController(activity, titleViewCreator, topBarOptions.title.component); controller.setWaitForRender(topBarOptions.title.component.waitForRender); @@ -267,15 +268,15 @@ private void applyStatusBarDrawBehindOptions(TopBarOptions topBarOptions, Option } private void mergeStatusBarDrawBehindOptions(TopBarOptions topBarOptions, Options toMerge) { - if(toMerge.statusBar.drawBehind.hasValue()){ - if(toMerge.statusBar.visible.isTrueOrUndefined() && toMerge.statusBar.drawBehind.isTrue()){ - topBar.setTopPadding(StatusBarUtils.getStatusBarHeight(activity)); - topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) + StatusBarUtils.getStatusBarHeightDp(activity)); - } else { - topBar.setTopPadding(0); - topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity))); - } - } + if(toMerge.statusBar.drawBehind.hasValue()){ + if(toMerge.statusBar.visible.isTrueOrUndefined() && toMerge.statusBar.drawBehind.isTrue()){ + topBar.setTopPadding(StatusBarUtils.getStatusBarHeight(activity)); + topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity)) + StatusBarUtils.getStatusBarHeightDp(activity)); + } else { + topBar.setTopPadding(0); + topBar.setHeight(topBarOptions.height.get(UiUtils.getTopBarHeightDp(activity))); + } + } } @Nullable @@ -289,7 +290,7 @@ private View findBackgroundComponent(ComponentOptions component) { return null; } - private void applyTopBarVisibilityIfChildIsNotBeingAnimated(TopBarOptions options, StackController stack, ViewController child) { + private void applyTopBarVisibilityIfChildIsNotBeingAnimated(TopBarOptions options, StackController stack, ViewController child) { if (!stack.isChildInTransition(child) || options.animate.isFalse()) applyTopBarVisibility(options); } @@ -302,7 +303,7 @@ private void applyTopBarVisibility(TopBarOptions options) { } } - private void applyButtons(TopBarOptions options, ViewController child) { + private void applyButtons(TopBarOptions options, ViewController child) { if (options.buttons.right != null) { List rightButtons = mergeButtonsWithColor(options.buttons.right, options.rightButtonColor @@ -351,7 +352,7 @@ private List getOrCreateButtonControllersByInstanceId(@Nullabl } private List getOrCreateButtonControllers(@Nullable Map currentButtons, @NonNull List buttons) { - ArrayList result = new ArrayList(); + ArrayList result = new ArrayList<>(); for (ButtonOptions b : buttons) { result.add(take(first(perform(currentButtons, null, Map::values), button -> button.getButton().equals(b)), createButtonController(b))); } @@ -383,7 +384,7 @@ private void applyTopTabOptions(TopTabOptions topTabOptions) { } } - public List getAdditionalPushAnimations(StackController stack, ViewController appearing, Options appearingOptions) { + public List getAdditionalPushAnimations(StackController stack, ViewController appearing, Options appearingOptions) { return CollectionUtils.asList( topBarController.getPushAnimation(appearingOptions, getTopBarTranslationAnimationDelta(stack, appearing)), perform(bottomTabsController, null, btc -> btc.getPushAnimation(appearingOptions)) @@ -397,14 +398,14 @@ public List getAdditionalPopAnimations(Options appearingOptions, Optio ); } - public List getAdditionalSetRootAnimations(StackController stack, ViewController appearing, Options appearingOptions) { + public List getAdditionalSetRootAnimations(StackController stack, ViewController appearing, Options appearingOptions) { return CollectionUtils.asList( topBarController.getSetStackRootAnimation(appearingOptions, getTopBarTranslationAnimationDelta(stack, appearing)), perform(bottomTabsController, null, btc -> btc.getSetStackRootAnimation(appearingOptions)) ); } - public void mergeChildOptions(Options toMerge, Options resolvedOptions, StackController stack, ViewController child) { + public void mergeChildOptions(Options toMerge, Options resolvedOptions, StackController stack, ViewController child) { TopBarOptions topBar = toMerge.copy().topBar.mergeWithDefault(resolvedOptions.topBar).mergeWithDefault(defaultOptions.topBar); mergeOrientation(toMerge.layout.orientation); mergeButtons(topBar, toMerge.topBar, child.getView(), stack); @@ -507,7 +508,7 @@ private List mergeButtonsWithColor(@NonNull List b return result; } - private void mergeTopBarOptions(TopBarOptions resolveOptions, Options options, StackController stack, ViewController child) { + private void mergeTopBarOptions(TopBarOptions resolveOptions, Options options, StackController stack, ViewController child) { TopBarOptions topBarOptions = options.topBar; final View component = child.getView(); if (options.layout.direction.hasValue()) topBar.setLayoutDirection(options.layout.direction); @@ -560,7 +561,7 @@ private void mergeTopBarOptions(TopBarOptions resolveOptions, Options options, S if (topBarOptions.background.component.hasValue()) { if (backgroundControllers.containsKey(component)) { - topBar.setBackgroundComponent(backgroundControllers.get(component).getView()); + topBar.setBackgroundComponent(Objects.requireNonNull(backgroundControllers.get(component)).getView()); } else { TopBarBackgroundViewController controller = new TopBarBackgroundViewController(activity, topBarBackgroundViewCreator); backgroundControllers.put(component, controller); @@ -619,7 +620,7 @@ private void mergeTopTabOptions(TopTabOptions topTabOptions) { } } - public boolean shouldPopOnHardwareButtonPress(ViewController viewController) { + public boolean shouldPopOnHardwareButtonPress(ViewController viewController) { return viewController.resolveCurrentOptions().hardwareBack.popStackOnPress.get(true); } @@ -650,7 +651,7 @@ public void setComponentsButtonController(View child, ButtonController rightCont } - public void applyTopInsets(StackController stack, ViewController child) { + public void applyTopInsets(StackController stack, ViewController child) { if (stack.isCurrentChild(child)) applyStatusBarInsets(stack, child); child.applyTopInset(); } @@ -663,18 +664,18 @@ private List getLeftButtons(View child) { return componentLeftButtons.containsKey(child) ? new ArrayList<>(componentLeftButtons.get(child).values()) : null; } - private void applyStatusBarInsets(StackController stack, ViewController child) { + private void applyStatusBarInsets(StackController stack, ViewController child) { MarginLayoutParams lp = (MarginLayoutParams) topBar.getLayoutParams(); lp.topMargin = getTopBarTopMargin(stack, child); topBar.requestLayout(); } - private int getTopBarTranslationAnimationDelta(StackController stack, ViewController child) { + private int getTopBarTranslationAnimationDelta(StackController stack, ViewController child) { Options options = stack.resolveChildOptions(child).withDefaultOptions(defaultOptions); return options.statusBar.hasTransparency() ? getTopBarTopMargin(stack, child) : 0; } - private int getTopBarTopMargin(StackController stack, ViewController child) { + private int getTopBarTopMargin(StackController stack, ViewController child) { Options withDefault = stack.resolveChildOptions(child).withDefaultOptions(defaultOptions); int topMargin = UiUtils.dpToPx(activity, withDefault.topBar.topMargin.get(0)); int statusBarInset = withDefault.statusBar.visible.isTrueOrUndefined() && !withDefault.statusBar.drawBehind.isTrue() ? StatusBarUtils.getStatusBarHeight(child.getActivity()) : 0; diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java index f224242a22e..ec884b22dbe 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java @@ -25,7 +25,7 @@ public void beforeEach() { @Test public void areRendered() { - Collection items = Arrays.asList( + Collection> items = Arrays.asList( renderedComponent(), renderedComponent(), renderedComponent() @@ -36,7 +36,7 @@ public void areRendered() { @Test public void areRendered_reduce() { - Collection items = Arrays.asList( + Collection> items = Arrays.asList( renderedComponent(), notRenderedComponent(), renderedComponent() @@ -45,14 +45,14 @@ public void areRendered_reduce() { } - private ViewController renderedComponent() { - ViewController mock = Mockito.mock(ViewController.class); + private ViewController renderedComponent() { + ViewController mock = Mockito.mock(ViewController.class); when(mock.isRendered()).then(__ -> true); return mock; } - private ViewController notRenderedComponent() { - ViewController mock = Mockito.mock(ViewController.class); + private ViewController notRenderedComponent() { + ViewController mock = Mockito.mock(ViewController.class); when(mock.isRendered()).then(__ -> false); return mock; } From e2a3e7ec5edaa97220ccd42980c2591de06b4bee Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 11:23:22 +0300 Subject: [PATCH 35/37] Fix raw ViewController use, remove unused imports --- .../options/ElementTransitionOptions.kt | 1 - .../options/HardwareBackButtonOptions.kt | 7 +-- .../interpolators/SpringInterpolator.kt | 32 ++++++------ .../options/parsers/TypefaceLoader.kt | 1 - .../react/CommandListenerAdapter.java | 2 - .../react/NavigationModule.java | 13 ++--- .../react/modal/ModalContentLayout.kt | 10 ++-- .../utils/CoordinatorLayoutUtils.java | 2 +- .../utils/OutlineProvider.kt | 1 - .../utils/ReflectionUtils.java | 2 +- .../utils/StatusBarUtils.java | 2 - .../reactnativenavigation/utils/UiUtils.java | 11 ++-- .../reactnativenavigation/utils/ViewParent.kt | 3 -- .../utils/ViewUtils.java | 9 ++-- .../com/reactnativenavigation/BaseTest.java | 51 +++++++++---------- .../com/reactnativenavigation/TestUtils.java | 6 ++- .../mocks/TestComponentLayout.java | 4 +- .../options/parsers/ColorParseTest.java | 3 -- .../bottomtabs/BottomTabPresenterTest.java | 7 ++- .../bottomtabs/BottomTabsAttacherTest.java | 2 +- .../bottomtabs/BottomTabsControllerTest.java | 28 +++++----- .../attacher/modes/AttachModeTest.java | 10 ++-- .../child/ChildControllerTest.java | 4 +- .../child/ChildControllersRegistryTest.java | 4 +- .../modal/ModalPresenterTest.java | 8 +-- .../viewcontrollers/modal/ModalStackTest.java | 20 ++++---- .../navigator/NavigatorTest.java | 51 +++++++++---------- .../navigator/RootPresenterTest.kt | 4 +- .../parent/ParentControllerTest.java | 30 +++++------ .../sidemenu/SideMenuControllerTest.java | 22 ++++---- .../stack/BackButtonHelperTest.java | 4 +- .../stack/StackAnimatorTest.kt | 4 -- .../stack/StackControllerTest.kt | 30 +++++------ .../stack/StackPresenterTest.kt | 34 ++++++------- .../stack/TopBarControllerTest.kt | 6 +-- 35 files changed, 201 insertions(+), 227 deletions(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/ElementTransitionOptions.kt b/lib/android/app/src/main/java/com/reactnativenavigation/options/ElementTransitionOptions.kt index 7e68dd4a819..64af80f6393 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/ElementTransitionOptions.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/ElementTransitionOptions.kt @@ -1,7 +1,6 @@ package com.reactnativenavigation.options import android.animation.Animator -import android.animation.AnimatorSet import android.view.View import org.json.JSONObject diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt b/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt index 6bab3f0a0e4..4aeee3225d8 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt @@ -1,11 +1,8 @@ package com.reactnativenavigation.options -import android.content.Context -import com.reactnativenavigation.options.animations.ViewAnimationOptions -import com.reactnativenavigation.options.params.* +import com.reactnativenavigation.options.params.Bool +import com.reactnativenavigation.options.params.NullBool import com.reactnativenavigation.options.parsers.BoolParser -import com.reactnativenavigation.options.parsers.ColorParser -import com.reactnativenavigation.options.parsers.FractionParser import org.json.JSONObject diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/interpolators/SpringInterpolator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/options/interpolators/SpringInterpolator.kt index e08a84ba353..5b1af5ac382 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/interpolators/SpringInterpolator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/interpolators/SpringInterpolator.kt @@ -7,35 +7,35 @@ class SpringInterpolator(private val mass: Float = 3f, private val damping: Floa private val velocity: Float = initialVelocity override fun getInterpolation(t: Float): Float { - val b = damping; - val m = mass; - val k = stiffness; - val v0 = velocity; + val b = damping + val m = mass + val k = stiffness + val v0 = velocity - var beta = b / (2 * m); - val omega0 = sqrt(k / m); - val omega1 = sqrt((omega0 * omega0) - (beta * beta)); - val omega2 = sqrt((beta * beta) - (omega0 * omega0)); + var beta = b / (2 * m) + val omega0 = sqrt(k / m) + val omega1 = sqrt((omega0 * omega0) - (beta * beta)) + val omega2 = sqrt((beta * beta) - (omega0 * omega0)) - val x0 = -1; + val x0 = -1 - if (!this.allowsOverdamping && beta > omega0) beta = omega0; + if (!this.allowsOverdamping && beta > omega0) beta = omega0 if (t == 1f) { return 1f } return when { beta < omega0 -> { // Underdamped - val envelope = exp(-beta * t); - -x0 + envelope * (x0 * cos(omega1 * t) + ((beta * x0 + v0) / omega1) * sin(omega1 * t)); + val envelope = exp(-beta * t) + -x0 + envelope * (x0 * cos(omega1 * t) + ((beta * x0 + v0) / omega1) * sin(omega1 * t)) } beta == omega0 -> { - val envelope = exp(-beta * t); - -x0 + envelope * (x0 + (beta * x0 + v0) * t); + val envelope = exp(-beta * t) + -x0 + envelope * (x0 + (beta * x0 + v0) * t) } else -> { - val envelope = exp(-beta * t); - -x0 + envelope * (x0 * cosh(omega2 * t) + ((beta * x0 + v0) / omega2) * sinh(omega2 * t)); + val envelope = exp(-beta * t) + -x0 + envelope * (x0 * cosh(omega2 * t) + ((beta * x0 + v0) / omega2) * sinh(omega2 * t)) } } } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt b/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt index b1d3eb32e4c..c1f8fb6aa74 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt @@ -2,7 +2,6 @@ package com.reactnativenavigation.options.parsers import android.content.Context import android.graphics.Typeface -import android.text.TextUtils import com.reactnativenavigation.utils.ReactTypefaceUtils open class TypefaceLoader(private val context: Context) { diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/react/CommandListenerAdapter.java b/lib/android/app/src/main/java/com/reactnativenavigation/react/CommandListenerAdapter.java index 5b7bb656afb..94ab7954132 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/react/CommandListenerAdapter.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/CommandListenerAdapter.java @@ -1,7 +1,5 @@ package com.reactnativenavigation.react; -import com.reactnativenavigation.react.CommandListener; - import androidx.annotation.Nullable; public class CommandListenerAdapter implements CommandListener { diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java b/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java index 3eb66097716..ccae0c70fa4 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java @@ -30,6 +30,7 @@ import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController; import java.util.ArrayList; +import java.util.Objects; import static com.reactnativenavigation.utils.UiUtils.pxToDp; @@ -107,9 +108,9 @@ public WritableMap getNavigationConstantsSync() { @ReactMethod public void setRoot(String commandId, ReadableMap rawLayoutTree, Promise promise) { - final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree).optJSONObject("root")); + final LayoutNode layoutTree = LayoutNodeParser.parse(Objects.requireNonNull(jsonParser.parse(rawLayoutTree).optJSONObject("root"))); handle(() -> { - final ViewController viewController = layoutFactory.create(layoutTree); + final ViewController viewController = layoutFactory.create(layoutTree); navigator().setRoot(viewController, new NativeCommandListener("setRoot", commandId, promise, eventEmitter, now), reactInstanceManager); }); } @@ -132,7 +133,7 @@ public void mergeOptions(String onComponentId, @Nullable ReadableMap options) { public void push(String commandId, String onComponentId, ReadableMap rawLayoutTree, Promise promise) { final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree)); handle(() -> { - final ViewController viewController = layoutFactory.create(layoutTree); + final ViewController viewController = layoutFactory.create(layoutTree); navigator().push(onComponentId, viewController, new NativeCommandListener("push", commandId, promise, eventEmitter, now)); }); } @@ -140,7 +141,7 @@ public void push(String commandId, String onComponentId, ReadableMap rawLayoutTr @ReactMethod public void setStackRoot(String commandId, String onComponentId, ReadableArray children, Promise promise) { handle(() -> { - ArrayList _children = new ArrayList<>(); + ArrayList> _children = new ArrayList<>(); for (int i = 0; i < children.size(); i++) { final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(children.getMap(i))); _children.add(layoutFactory.create(layoutTree)); @@ -168,7 +169,7 @@ public void popToRoot(String commandId, String componentId, @Nullable ReadableMa public void showModal(String commandId, ReadableMap rawLayoutTree, Promise promise) { final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree)); handle(() -> { - final ViewController viewController = layoutFactory.create(layoutTree); + final ViewController viewController = layoutFactory.create(layoutTree); navigator().showModal(viewController, new NativeCommandListener("showModal", commandId, promise, eventEmitter, now)); }); } @@ -190,7 +191,7 @@ public void dismissAllModals(String commandId, @Nullable ReadableMap mergeOption public void showOverlay(String commandId, ReadableMap rawLayoutTree, Promise promise) { final LayoutNode layoutTree = LayoutNodeParser.parse(jsonParser.parse(rawLayoutTree)); handle(() -> { - final ViewController viewController = layoutFactory.create(layoutTree); + final ViewController viewController = layoutFactory.create(layoutTree); navigator().showOverlay(viewController, new NativeCommandListener("showOverlay", commandId, promise, eventEmitter, now)); }); } diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt b/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt index 4923f371817..da7d5b1b4f9 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt @@ -28,13 +28,13 @@ class ModalContentLayout(context: Context?) : ReactViewGroup(context), RootView{ val reactContext: ReactContext = this.getReactContext() reactContext.runOnNativeModulesQueueThread(object : GuardedRunnable(reactContext) { override fun runGuarded() { - val uiManager = this@ModalContentLayout.getReactContext().getNativeModule( - UIManagerModule::class.java + val uiManager = this@ModalContentLayout.getReactContext().getNativeModule( + UIManagerModule::class.java ) as UIManagerModule uiManager.updateNodeSize( - viewTag, - this@ModalContentLayout.viewWidth, - this@ModalContentLayout.viewHeight + viewTag, + this@ModalContentLayout.viewWidth, + this@ModalContentLayout.viewHeight ) } }) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/CoordinatorLayoutUtils.java b/lib/android/app/src/main/java/com/reactnativenavigation/utils/CoordinatorLayoutUtils.java index 07fc90e968a..a20b272e4b3 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/CoordinatorLayoutUtils.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/CoordinatorLayoutUtils.java @@ -13,7 +13,7 @@ public static CoordinatorLayout.LayoutParams matchParentLP() { return new CoordinatorLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT); } - public static CoordinatorLayout.LayoutParams matchParentWithBehaviour(CoordinatorLayout.Behavior behavior) { + public static CoordinatorLayout.LayoutParams matchParentWithBehaviour(CoordinatorLayout.Behavior behavior) { CoordinatorLayout.LayoutParams lp = new CoordinatorLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT); lp.setBehavior(behavior); return lp; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/OutlineProvider.kt b/lib/android/app/src/main/java/com/reactnativenavigation/utils/OutlineProvider.kt index aa7642914ea..167c0355649 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/OutlineProvider.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/OutlineProvider.kt @@ -2,7 +2,6 @@ package com.reactnativenavigation.utils import android.graphics.Outline import android.os.Build -import android.util.Log import android.view.View import android.view.ViewOutlineProvider import androidx.annotation.RequiresApi diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReflectionUtils.java b/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReflectionUtils.java index 0eaf3e233da..1a31f370c0d 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReflectionUtils.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/ReflectionUtils.java @@ -33,7 +33,7 @@ public static Object getDeclaredField(Object obj, String fieldName) { return null; } - private static Field getField(Class clazz, String name) { + private static Field getField(Class clazz, String name) { try { return clazz.getDeclaredField(name); } catch (NoSuchFieldException nsfe) { diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java b/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java index 6538323a194..1fb0d92488f 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java @@ -9,8 +9,6 @@ import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; import static com.reactnativenavigation.utils.UiUtils.dpToPx; -import androidx.annotation.VisibleForTesting; - public class StatusBarUtils { private static final int STATUS_BAR_HEIGHT_M = 24; private static final int STATUS_BAR_HEIGHT_L = 25; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java b/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java index b7c6c9edd44..1c5a3edf5e6 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/UiUtils.java @@ -11,7 +11,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.annotation.VisibleForTesting; public class UiUtils { private static final int DEFAULT_TOOLBAR_HEIGHT = 56; @@ -81,13 +80,13 @@ public void onWindowDetached() { }); } - public static void runOnMainThread(Runnable runnable) { - new Handler(Looper.getMainLooper()).post(runnable); - } + public static void runOnMainThread(Runnable runnable) { + new Handler(Looper.getMainLooper()).post(runnable); + } - public static float getWindowHeight(Context context) { + public static float getWindowHeight(Context context) { return getDisplayMetrics(context).heightPixels; - } + } public static float getWindowWidth(Context context) { return getDisplayMetrics(context).widthPixels; diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewParent.kt b/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewParent.kt index c4abaaf7643..acfd0d5a3ef 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewParent.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewParent.kt @@ -2,9 +2,6 @@ package com.reactnativenavigation.utils import android.view.View import android.view.ViewParent -import androidx.core.view.doOnLayout -import kotlin.coroutines.resume -import kotlin.coroutines.suspendCoroutine val ViewParent.scaleX: Float get() = (this as View).scaleX diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewUtils.java b/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewUtils.java index d8df9dd6b7a..cdce75b8ab8 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewUtils.java +++ b/lib/android/app/src/main/java/com/reactnativenavigation/utils/ViewUtils.java @@ -3,7 +3,6 @@ import android.graphics.Point; import android.view.View; import android.view.ViewGroup; -import android.view.ViewManager; import android.view.ViewParent; import com.facebook.react.views.view.ReactViewBackgroundDrawable; @@ -34,11 +33,11 @@ public static T findChildByClass(ViewGroup root, Class clazz return null; } - public static List findChildrenByClassRecursive(ViewGroup root, Class clazz) { + public static List findChildrenByClassRecursive(ViewGroup root, Class clazz) { return findChildrenByClassRecursive(root, clazz, child -> true); } - public static List findChildrenByClassRecursive(ViewGroup root, Class clazz, Matcher matcher) { + public static List findChildrenByClassRecursive(ViewGroup root, Class clazz, Matcher matcher) { ArrayList ret = new ArrayList<>(); for (int i = 0; i < root.getChildCount(); i++) { View view = root.getChildAt(i); @@ -56,7 +55,7 @@ public static List findChildrenByClass(ViewGroup root, Class clazz) { return findChildrenByClass(root, clazz, child -> true); } - public static List findChildrenByClass(ViewGroup root, Class clazz, Matcher matcher) { + public static List findChildrenByClass(ViewGroup root, Class clazz, Matcher matcher) { List ret = new ArrayList<>(); for (int i = 0; i < root.getChildCount(); i++) { View child = root.getChildAt(i); @@ -114,7 +113,7 @@ public static int getBackgroundColor(View view) { } throw new RuntimeException(view.getBackground().getClass().getSimpleName() + " is not ReactViewBackgroundDrawable"); } - + public static boolean isVisible(View view) { return perform(view, false, v -> v.getVisibility() == View.VISIBLE); diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java index 50b30e922ce..712f04404d1 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java @@ -1,17 +1,24 @@ package com.reactnativenavigation; +import static com.reactnativenavigation.utils.CollectionUtils.forEach; +import static org.assertj.core.api.Java6Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + import android.app.Activity; import android.content.Context; -import android.content.res.AssetManager; import android.content.res.Configuration; import android.content.res.Resources; -import android.graphics.Color; import android.os.Handler; import android.os.Looper; -import android.util.DisplayMetrics; import android.view.View; import android.view.ViewGroup; +import androidx.annotation.CallSuper; +import androidx.appcompat.app.AppCompatActivity; +import androidx.coordinatorlayout.widget.CoordinatorLayout; + import com.reactnativenavigation.options.params.Bool; import com.reactnativenavigation.utils.Functions; import com.reactnativenavigation.utils.StatusBarUtils; @@ -33,18 +40,6 @@ import java.util.Arrays; -import androidx.annotation.CallSuper; -import androidx.appcompat.app.AppCompatActivity; -import androidx.coordinatorlayout.widget.CoordinatorLayout; - -import static com.reactnativenavigation.utils.CollectionUtils.*; -import static org.assertj.core.api.Java6Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import kotlin.Function; - @RunWith(RobolectricTestRunner.class) @Config(sdk = 28, application = TestApplication.class) public abstract class BaseTest { @@ -90,7 +85,7 @@ public ActivityController newActivityController return Robolectric.buildActivity(clazz); } - public void assertIsChild(ViewGroup parent, ViewController... children) { + public void assertIsChild(ViewGroup parent, ViewController... children) { forEach(Arrays.asList(children), c -> assertIsChild(parent, c.getView())); } @@ -100,7 +95,7 @@ public void assertIsChild(ViewGroup parent, View child) { assertThat(ViewUtils.isChildOf(parent, child)).isTrue(); } - public void assertNotChildOf(ViewGroup parent, ViewController... children) { + public void assertNotChildOf(ViewGroup parent, ViewController... children) { forEach(Arrays.asList(children), c -> assertNotChildOf(parent, c.getView())); } @@ -115,31 +110,31 @@ public void assertMatchParent(View view) { assertThat(view.getLayoutParams().height).isEqualTo(ViewGroup.LayoutParams.MATCH_PARENT); } - protected void disablePushAnimation(ViewController... controllers) { - for (ViewController controller : controllers) { + protected void disablePushAnimation(ViewController... controllers) { + for (ViewController controller : controllers) { controller.options.animations.push.enabled = new Bool(false); } } - protected void disablePopAnimation(ViewController... controllers) { - for (ViewController controller : controllers) { + protected void disablePopAnimation(ViewController... controllers) { + for (ViewController controller : controllers) { controller.options.animations.pop.enabled = new Bool(false); } } - protected void disableModalAnimations(ViewController... modals) { + protected void disableModalAnimations(ViewController... modals) { disableShowModalAnimation(modals); disableDismissModalAnimation(modals); } - protected void disableShowModalAnimation(ViewController... modals) { - for (ViewController modal : modals) { + protected void disableShowModalAnimation(ViewController... modals) { + for (ViewController modal : modals) { modal.options.animations.showModal.toggle(new Bool(false)); } } - protected void disableDismissModalAnimation(ViewController... modals) { - for (ViewController modal : modals) { + protected void disableDismissModalAnimation(ViewController... modals) { + for (ViewController modal : modals) { modal.options.animations.dismissModal.toggle(new Bool(false)); } } @@ -152,8 +147,8 @@ protected void dispatchOnGlobalLayout(View view) { view.getViewTreeObserver().dispatchOnGlobalLayout(); } - protected void addToParent(Context context, ViewController... controllers) { - for (ViewController controller : controllers) { + protected void addToParent(Context context, ViewController... controllers) { + for (ViewController controller : controllers) { new CoordinatorLayout(context).addView(controller.getView()); } } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java b/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java index 700bbc05e1a..e5c5799e90c 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java @@ -5,6 +5,8 @@ import android.view.View; import android.view.ViewGroup; +import androidx.annotation.NonNull; + import com.reactnativenavigation.mocks.TitleBarReactViewCreatorMock; import com.reactnativenavigation.mocks.TopBarBackgroundViewCreatorMock; import com.reactnativenavigation.mocks.TitleBarButtonCreatorMock; @@ -31,7 +33,7 @@ public class TestUtils { public static StackControllerBuilder newStackController(Activity activity) { TopBarController topBarController = new TopBarController() { @Override - protected TopBar createTopBar(Context context, StackLayout stackLayout) { + protected TopBar createTopBar(@NonNull Context context, @NonNull StackLayout stackLayout) { TopBar topBar = super.createTopBar(context, stackLayout); topBar.layout(0, 0, 1000, UiUtils.getTopBarHeight(context)); return topBar; @@ -45,7 +47,7 @@ protected TopBar createTopBar(Context context, StackLayout stackLayout) { .setInitialOptions(new Options()); } - public static void hideBackButton(ViewController viewController) { + public static void hideBackButton(ViewController viewController) { viewController.options.topBar.buttons.back.visible = new Bool(false); } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java b/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java index 2729278ac83..a2f7b7faede 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java @@ -4,6 +4,8 @@ import android.view.MotionEvent; import android.view.ViewGroup; +import androidx.annotation.NonNull; + import com.reactnativenavigation.options.ButtonOptions; import com.reactnativenavigation.viewcontrollers.viewcontroller.ScrollEventListener; import com.reactnativenavigation.options.Options; @@ -71,7 +73,7 @@ public void dispatchTouchEventToJs(MotionEvent event) { } @Override - public void onPress(ButtonOptions button) { + public void onPress(@NonNull ButtonOptions button) { } } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java index 136fcf8cc5c..ee7e154d81d 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java @@ -6,7 +6,6 @@ import com.reactnativenavigation.BaseTest; import com.reactnativenavigation.options.params.DontApplyColour; import com.reactnativenavigation.options.params.ReactPlatformColor; -import com.reactnativenavigation.utils.StatusBarUtils; import org.json.JSONArray; import org.json.JSONException; @@ -16,7 +15,6 @@ import org.mockito.Mockito; import static org.assertj.core.api.Java6Assertions.assertThat; -import static org.mockito.ArgumentMatchers.any; import android.app.Activity; @@ -38,7 +36,6 @@ public void nullIsParsedAsNoColor() throws JSONException { @Test public void shouldParsePlatformColors() throws JSONException { - JSONObject json = new JSONObject(); JSONObject color = new JSONObject(); final JSONArray jsonArray = new JSONArray(); jsonArray.put("@color/colorPrimary"); diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java index ba199cbe842..a05cad934bf 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java @@ -12,7 +12,6 @@ import com.reactnativenavigation.options.Options; import com.reactnativenavigation.options.params.Colour; import com.reactnativenavigation.options.params.DontApplyColour; -import com.reactnativenavigation.options.params.NullColor; import com.reactnativenavigation.options.params.NullText; import com.reactnativenavigation.options.params.NullThemeColour; import com.reactnativenavigation.options.params.ThemeColour; @@ -47,9 +46,9 @@ public class BottomTabPresenterTest extends BaseTest { private BottomTabPresenter uut; private BottomTabs bottomTabs; private List> tabs; - private ViewController child1; - private ViewController child2; - private ViewController child3; + private ViewController child1; + private ViewController child2; + private ViewController child3; private Activity activity; private ChildControllersRegistry childRegistry; diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java index 793ee9620d7..02e3c504599 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java @@ -49,7 +49,7 @@ public void attach_delegatesToStrategy() { @Test public void onTabSelected() { - ViewController tab = mock(ViewController.class); + ViewController tab = mock(ViewController.class); uut.onTabSelected(tab); verify(mode).onTabSelected(tab); } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java index c80ae2b393e..bb1ef6cbe57 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java @@ -36,7 +36,6 @@ import com.reactnativenavigation.views.bottomtabs.BottomTabsContainer; import com.reactnativenavigation.views.bottomtabs.BottomTabsLayout; -import org.jetbrains.annotations.NotNull; import org.junit.Test; import org.mockito.ArgumentCaptor; import org.mockito.Mockito; @@ -50,7 +49,6 @@ import androidx.coordinatorlayout.widget.CoordinatorLayout; -import static com.nhaarman.mockitokotlin2.OngoingStubbingKt.whenever; import static com.reactnativenavigation.TestUtils.hideBackButton; import static com.reactnativenavigation.utils.ObjectUtils.perform; import static org.assertj.core.api.Java6Assertions.assertThat; @@ -68,12 +66,12 @@ public class BottomTabsControllerTest extends BaseTest { private BottomTabsContainer bottomTabsContainer; private BottomTabsController uut; private final Options initialOptions = new Options(); - private ViewController child1; - private ViewController child2; - private ViewController child3; - private ViewController stackChild; + private ViewController child1; + private ViewController child2; + private ViewController child3; + private ViewController stackChild; private StackController child4; - private ViewController child5; + private ViewController child5; private final Options tabOptions = OptionHelper.createBottomTabOptions(); private final ImageLoader imageLoaderMock = ImageLoaderMock.mock(); private EventEmitter eventEmitter; @@ -125,7 +123,7 @@ public void setTabs_ThrowWhenMoreThan5() { @Test public void parentControllerIsSet() { uut = createBottomTabs(); - for (ViewController tab : tabs) { + for (ViewController tab : tabs) { assertThat(tab.getParentController()).isEqualTo(uut); } } @@ -134,7 +132,7 @@ public void parentControllerIsSet() { public void setTabs_allChildViewsAreAttachedToHierarchy() { uut.onViewWillAppear(); assertThat(uut.getView().getChildCount()).isEqualTo(6); - for (ViewController child : uut.getChildControllers()) { + for (ViewController child : uut.getChildControllers()) { assertThat(child.getView().getParent()).isNotNull(); } } @@ -152,13 +150,13 @@ public void setTabs_firstChildIsVisibleOtherAreGone() { public void onTabSelected() { uut.ensureViewIsCreated(); assertThat(uut.getSelectedIndex()).isZero(); - assertThat(((ViewController) ((List) uut.getChildControllers()).get(0)).getView().getVisibility()).isEqualTo(View.VISIBLE); + assertThat(((ViewController) ((List) uut.getChildControllers()).get(0)).getView().getVisibility()).isEqualTo(View.VISIBLE); uut.onTabSelected(3, false); assertThat(uut.getSelectedIndex()).isEqualTo(3); - assertThat(((ViewController) ((List) uut.getChildControllers()).get(0)).getView().getVisibility()).isEqualTo(View.INVISIBLE); - assertThat(((ViewController) ((List) uut.getChildControllers()).get(3)).getView().getVisibility()).isEqualTo(View.VISIBLE); + assertThat(((ViewController) ((List) uut.getChildControllers()).get(0)).getView().getVisibility()).isEqualTo(View.INVISIBLE); + assertThat(((ViewController) ((List) uut.getChildControllers()).get(3)).getView().getVisibility()).isEqualTo(View.VISIBLE); verify(eventEmitter).emitBottomTabSelected(0, 3); } @@ -170,7 +168,7 @@ public void onTabReSelected() { uut.onTabSelected(0, true); assertThat(uut.getSelectedIndex()).isEqualTo(0); - assertThat(((ViewController) ((List) uut.getChildControllers()).get(0)).getView().getParent()).isNotNull(); + assertThat(((ViewController) ((List) uut.getChildControllers()).get(0)).getView().getParent()).isNotNull(); verify(eventEmitter).emitBottomTabSelected(0, 0); } @@ -185,7 +183,7 @@ public void handleBack_DelegatesToSelectedChild() { @Test public void applyChildOptions_bottomTabsOptionsAreClearedAfterApply() { - ParentController parent = Mockito.mock(ParentController.class); + ParentController parent = Mockito.mock(ParentController.class); uut.setParentController(parent); child1.options.bottomTabsOptions.backgroundColor = new ThemeColour(new Colour(Color.RED)); @@ -456,7 +454,7 @@ private void createChildren() { when(child5.handleBack(any())).thenReturn(true); } - private StackController spyOnStack(ViewController initialChild) { + private StackController spyOnStack(ViewController initialChild) { StackController build = TestUtils.newStackController(activity) .setInitialOptions(tabOptions) .build(); diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java index 0def85660d0..c4cb666303c 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java @@ -31,8 +31,8 @@ public abstract class AttachModeTest extends BaseTest { private Activity activity; private ChildControllersRegistry childRegistry; protected ViewGroup parent; - ViewController tab1; - ViewController tab2; + ViewController tab1; + ViewController tab2; List> tabs; protected Options options; protected BottomTabsPresenter presenter; @@ -69,18 +69,18 @@ public void attach_otherTabsAreInvisibleWhenAttached() { forEach(otherTabs(), t -> assertThat(t.getView().getVisibility()).isEqualTo(View.INVISIBLE)); } - ViewController[] otherTabs() { + ViewController[] otherTabs() { return filter(tabs, t -> t != initialTab()).toArray(new ViewController[0]); } - ViewController initialTab() { + ViewController initialTab() { return tabs.get(INITIAL_TAB); } private List> createTabs() { tab1 = new SimpleViewController(activity, childRegistry, "child1", new Options()); tab2 = spy(new SimpleViewController(activity, childRegistry, "child2", new Options())); - ViewController tab3 = new SimpleViewController(activity, childRegistry, "child3", new Options()); + ViewController tab3 = new SimpleViewController(activity, childRegistry, "child3", new Options()); return Arrays.asList(tab1, tab2, tab3); } } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java index 6490dc8061b..e32434e973a 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java @@ -16,7 +16,7 @@ public class ChildControllerTest extends BaseTest { - private ChildController uut; + private ChildController uut; private ChildControllersRegistry childRegistry; private Presenter presenter; private Options resolvedOptions = new Options(); @@ -31,7 +31,7 @@ public Options resolveCurrentOptions() { return resolvedOptions; } }; - ParentController parent = Mockito.mock(ParentController.class); + ParentController parent = Mockito.mock(ParentController.class); uut.setParentController(parent); } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java index be7a6d627fb..6ba7b2266ef 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java @@ -15,8 +15,8 @@ public class ChildControllersRegistryTest extends BaseTest { private ChildControllersRegistry uut; - private ChildController child1; - private ChildController child2; + private ChildController child1; + private ChildController child2; @Override public void beforeEach() { diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java index 210a1ab6146..6450567de2d 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java @@ -40,11 +40,11 @@ public class ModalPresenterTest extends BaseTest { private static final String MODAL_ID_1 = "modalId1"; private static final String MODAL_ID_2 = "modalId2"; - private ChildController modal1; - private ChildController modal2; + private ChildController modal1; + private ChildController modal2; private ModalPresenter uut; private ModalAnimator animator; - private ViewController root; + private ViewController root; private CoordinatorLayout modalsLayout; @@ -285,7 +285,7 @@ public void dismissModal_rejectIfContentIsNull() { public void dismissModal_successIsReportedBeforeViewIsDestroyed() { disableModalAnimations(modal1); CommandListenerAdapter listener = Mockito.mock(CommandListenerAdapter.class); - ViewController modal = spy(modal1); + ViewController modal = spy(modal1); InOrder inOrder = inOrder(listener, modal); uut.showModal(modal, root, new CommandListenerAdapter()); diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java index d1438fd71f0..733f517d69d 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java @@ -40,16 +40,16 @@ public class ModalStackTest extends BaseTest { private static final String MODAL_ID_4 = "modalId4"; private ModalStack uut; - private ViewController modal1; - private ViewController modal2; - private ViewController modal3; - private ViewController modal4; + private ViewController modal1; + private ViewController modal2; + private ViewController modal3; + private ViewController modal4; private StackController stack; private Activity activity; private ChildControllersRegistry childRegistry; private ModalPresenter presenter; private ModalAnimator animator; - private ViewController root; + private ViewController root; private EventEmitter emitter; @Override @@ -308,7 +308,7 @@ public void handleBack_dismissModal() { @Test public void handleBack_ViewControllerTakesPrecedenceOverModal() { - ViewController backHandlingModal = spy(new SimpleViewController(activity, childRegistry, "stack", new Options()){ + ViewController backHandlingModal = spy(new SimpleViewController(activity, childRegistry, "stack", new Options()){ @Override public boolean handleBack(CommandListener listener) { return true; @@ -338,17 +338,17 @@ public void destroy() { verify(modal2).destroy(); } - private ViewController findModal(String id) { + private ViewController findModal(String id) { return uut.findControllerById(id); } - private void showModalsWithoutAnimation(ViewController... modals) { - for (ViewController modal : modals) { + private void showModalsWithoutAnimation(ViewController... modals) { + for (ViewController modal : modals) { showModalWithoutAnimation(modal); } } - private void showModalWithoutAnimation(ViewController modal) { + private void showModalWithoutAnimation(ViewController modal) { disableShowModalAnimation(modal); uut.showModal(modal, root, new CommandListenerAdapter()); } diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java index b0fac8c78f8..2490271cb42 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java @@ -36,7 +36,6 @@ import com.reactnativenavigation.viewcontrollers.component.ComponentViewController; import com.reactnativenavigation.viewcontrollers.modal.ModalStack; import com.reactnativenavigation.viewcontrollers.overlay.OverlayManager; -import com.reactnativenavigation.viewcontrollers.parent.ParentController; import com.reactnativenavigation.viewcontrollers.stack.StackController; import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter; import com.reactnativenavigation.viewcontrollers.viewcontroller.RootPresenter; @@ -71,10 +70,10 @@ public class NavigatorTest extends BaseTest { private RootPresenter rootPresenter; private StackController parentController; private SimpleViewController child1; - private ViewController child2; - private ViewController child3; - private ViewController child4; - private ViewController child5; + private ViewController child2; + private ViewController child3; + private ViewController child4; + private ViewController child5; private final Options tabOptions = OptionHelper.createBottomTabOptions(); private ImageLoader imageLoaderMock; private ActivityController activityController; @@ -100,7 +99,7 @@ public void beforeEach() { uut = new Navigator(activity, childRegistry, modalStack, overlayManager, rootPresenter); activity.setNavigator(uut); - ViewController initialChild = new SimpleViewController(activity, childRegistry, "initialChild", Options.EMPTY); + ViewController initialChild = new SimpleViewController(activity, childRegistry, "initialChild", Options.EMPTY); parentController = newStack(initialChild); parentVisibilityListener = spy(new ViewController.ViewVisibilityListener() { @Override @@ -131,8 +130,8 @@ public boolean onViewDisappear(View view) { public void onConfigurationChange_shouldCallOnConfigurationChangedForModals() { Navigator spyUUT = spy(uut); SimpleViewController spyChild1 = spy(child1); - ViewController spyChild2 = spy(child2); - ViewController spyChild3 = spy(child3); + ViewController spyChild2 = spy(child2); + ViewController spyChild3 = spy(child3); spyUUT.setRoot(spyChild1, new CommandListenerAdapter(), reactInstanceManager); spyUUT.showModal(spyChild2, new CommandListenerAdapter()); @@ -147,8 +146,8 @@ public void onConfigurationChange_shouldCallOnConfigurationChangedForModals() { public void onConfigurationChange_shouldCallOnConfigurationChangedForOverlays() { Navigator spyUUT = spy(uut); SimpleViewController spyChild1 = spy(child1); - ViewController spyChild2 = spy(child2); - ViewController spyChild3 = spy(child3); + ViewController spyChild2 = spy(child2); + ViewController spyChild3 = spy(child3); spyUUT.setRoot(spyChild1, new CommandListenerAdapter(), reactInstanceManager); spyUUT.showOverlay(spyChild2, new CommandListenerAdapter()); @@ -198,8 +197,8 @@ public void shouldCallOverlaysOnHostResumeWhenHostResumes() { @Test public void shouldCallOverlaysChildrenOnViewDidAppearOnHostResume() { SimpleViewController child1 = spy(this.child1); - ViewController child2 = spy(this.child2); - ViewController child3 = spy(this.child3); + ViewController child2 = spy(this.child2); + ViewController child3 = spy(this.child3); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showOverlay(child2, new CommandListenerAdapter()); @@ -220,7 +219,7 @@ public void shouldCallRootOnViewDidAppearWhenModalDisplayedOverContext(){ final Options overContextOptions = tabOptions.copy(); overContextOptions.modal =new ModalOptions(); overContextOptions.modal.presentationStyle = ModalPresentationStyle.OverCurrentContext; - ViewController overContextModal = spy(new SimpleViewController(activity, childRegistry, "overContextModal", + ViewController overContextModal = spy(new SimpleViewController(activity, childRegistry, "overContextModal", overContextOptions)); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(overContextModal, new CommandListenerAdapter()); @@ -236,7 +235,7 @@ public void shouldCallRootOnViewDisappearWhenModalDisplayedOverContext(){ final Options overContextOptions = tabOptions.copy(); overContextOptions.modal =new ModalOptions(); overContextOptions.modal.presentationStyle = ModalPresentationStyle.OverCurrentContext; - ViewController overContextModal = spy(new SimpleViewController(activity, childRegistry, "overContextModal", + ViewController overContextModal = spy(new SimpleViewController(activity, childRegistry, "overContextModal", overContextOptions)); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(overContextModal, new CommandListenerAdapter()); @@ -249,11 +248,11 @@ public void shouldCallRootOnViewDisappearWhenModalDisplayedOverContext(){ @Test public void shouldCallModalOnViewDisappearWhenModalDisplayedOverContextUnderneath(){ SimpleViewController child1 = spy(this.child1); - ViewController child2 = spy(this.child2); + ViewController child2 = spy(this.child2); final Options overContextOptions = tabOptions.copy(); overContextOptions.modal =new ModalOptions(); overContextOptions.modal.presentationStyle = ModalPresentationStyle.OverCurrentContext; - ViewController overContextModal = spy(new SimpleViewController(activity, childRegistry, "overContextModal", + ViewController overContextModal = spy(new SimpleViewController(activity, childRegistry, "overContextModal", overContextOptions)); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(overContextModal, new CommandListenerAdapter()); @@ -266,9 +265,9 @@ public void shouldCallModalOnViewDisappearWhenModalDisplayedOverContextUnderneat @Test public void shouldCallOverlaysAndModalsChildrenOnViewDidAppearOnHostResume() { SimpleViewController child1 = spy(this.child1); - ViewController child2 = spy(this.child2); - ViewController child3 = spy(this.child3); - ViewController child4 = spy(this.child4); + ViewController child2 = spy(this.child2); + ViewController child3 = spy(this.child3); + ViewController child4 = spy(this.child4); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(child2, new CommandListenerAdapter()); @@ -296,7 +295,7 @@ public void shouldNotCallModalOnHostResumeWhenHostResumesAndNoModals() { @Test public void shouldCallModalPeekDidAppearWhenHostResumes() { SimpleViewController child1 = spy(this.child1); - ViewController child2 = spy(this.child2); + ViewController child2 = spy(this.child2); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(child2, new CommandListenerAdapter()); uut.onHostResume(); @@ -325,7 +324,7 @@ public void shouldNotCallModalOnHostPauseWhenHostPausesAndNoModals() { @Test public void shouldCallModalPeekDidDisappearWhenHostPauses() { SimpleViewController child1 = spy(this.child1); - ViewController child2 = spy(this.child2); + ViewController child2 = spy(this.child2); uut.setRoot(child1, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(child2, new CommandListenerAdapter()); uut.onHostPause(); @@ -383,11 +382,11 @@ public void setRoot_ReplacesExistingChildControllerViews() { @Test public void setRoot_withWaitForRender() { - ViewController initialRoot = spy(child2); + ViewController initialRoot = spy(child2); uut.setRoot(initialRoot, new CommandListenerAdapter(), reactInstanceManager); child3.options.animations.setRoot.getEnter().waitForRender = new Bool(true); - ViewController secondRoot = spy(child3); + ViewController secondRoot = spy(child3); CommandListenerAdapter listener = spy(new CommandListenerAdapter()); uut.setRoot(secondRoot, listener, reactInstanceManager); @@ -552,7 +551,7 @@ public void setStackRoot() { public void handleBack_DelegatesToRoot() { assertThat(uut.handleBack(new CommandListenerAdapter())).isFalse(); - ViewController root = spy(child1); + ViewController root = spy(child1); uut.setRoot(root, new CommandListenerAdapter(), reactInstanceManager); when(root.handleBack(any(CommandListener.class))).thenReturn(true); assertThat(uut.handleBack(new CommandListenerAdapter())).isTrue(); @@ -561,7 +560,7 @@ public void handleBack_DelegatesToRoot() { @Test public void handleBack_modalTakePrecedenceOverRoot() { - ViewController root = spy(child1); + ViewController root = spy(child1); uut.setRoot(root, new CommandListenerAdapter(), reactInstanceManager); uut.showModal(child2, new CommandListenerAdapter()); verify(root, times(0)).handleBack(new CommandListenerAdapter()); @@ -886,7 +885,7 @@ public void destroyViews() { } @NonNull - private StackController newStack(ViewController... children) { + private StackController newStack(ViewController... children) { StackController stack = TestUtils.newStackController(activity) .setChildren(children) .setChildRegistry(childRegistry) diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt index 9f0fdc64216..9c9c8fd7e49 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt @@ -47,12 +47,12 @@ class RootPresenterTest : BaseTest() { root = object : SimpleViewController(activity, ChildControllersRegistry(), "child1", Options()) { override fun createView(): SimpleView { - return root1View; + return root1View } } root2 = object : SimpleViewController(activity, ChildControllersRegistry(), "child1", Options()) { override fun createView(): SimpleView { - return root2View; + return root2View } } setupWithAnimator(Mockito.spy(createAnimator())) diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java index 86e862bc65e..5e2fe6401ef 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java @@ -41,8 +41,8 @@ public class ParentControllerTest extends BaseTest { private static final String INITIAL_TITLE = "initial title"; private Activity activity; private ChildControllersRegistry childRegistry; - private List children; - private ParentController uut; + private List> children; + private ParentController uut; private Presenter presenter; @Override @@ -54,10 +54,10 @@ public void beforeEach() { Options initialOptions = new Options(); initialOptions.topBar.title.text = new Text(INITIAL_TITLE); presenter = spy(new Presenter(activity, new Options())); - uut = spy(new ParentController(activity, childRegistry, "uut", presenter, initialOptions) { + uut = spy(new ParentController(activity, childRegistry, "uut", presenter, initialOptions) { @Override - public ViewController getCurrentChild() { + public ViewController getCurrentChild() { return children.get(0); } @@ -65,7 +65,7 @@ public ViewController getCurrentChild() { @Override public ViewGroup createView() { FrameLayout layout = new FrameLayout(activity); - for (ViewController child : children) { + for (ViewController child : children) { child.setParentController(this); layout.addView(child.getView()); } @@ -79,7 +79,7 @@ public void sendOnNavigationButtonPressed(String buttonId) { @NonNull @Override - public Collection getChildControllers() { + public Collection> getChildControllers() { return children; } }); @@ -89,10 +89,10 @@ public Collection getChildControllers() { public void onConfigurationChange_shouldCallConfigurationChangeForPresenterAndChildren() { children.add(spy(new SimpleViewController(activity, childRegistry, "child1", new Options()))); children.add(spy(new SimpleViewController(activity, childRegistry, "child2", new Options()))); - ParentController spyUUT = spy(uut); + ParentController spyUUT = spy(uut); spyUUT.onConfigurationChanged(mockConfiguration); verify(presenter).onConfigurationChanged(any(),any()); - for (ViewController controller : children) { + for (ViewController controller : children) { verify(controller).onConfigurationChanged(any()); } } @@ -158,7 +158,7 @@ public void findControllerById_Recursive() { @Test public void destroy_DestroysChildren() { - ViewController child1 = spy(new SimpleViewController(activity, childRegistry, "child1", new Options())); + ViewController child1 = spy(new SimpleViewController(activity, childRegistry, "child1", new Options())); children.add(child1); verify(child1, times(0)).destroy(); @@ -181,7 +181,7 @@ public void optionsAreClearedWhenChildIsAppeared() { public void mergeOptions_optionsAreMergedWhenChildAppears() { Options options = new Options(); options.topBar.title.text = new Text("new title"); - ViewController child1 = spy(new SimpleViewController(activity, childRegistry, "child1", options)); + ViewController child1 = spy(new SimpleViewController(activity, childRegistry, "child1", options)); children.add(child1); uut.ensureViewIsCreated(); @@ -197,7 +197,7 @@ public void mergeOptions_optionsAreMergedWhenChildAppears() { public void mergeOptions_initialParentOptionsAreNotMutatedWhenChildAppears() { Options options = new Options(); options.topBar.title.text = new Text("new title"); - ViewController child1 = spy(new SimpleViewController(activity, childRegistry, "child1", options)); + ViewController child1 = spy(new SimpleViewController(activity, childRegistry, "child1", options)); children.add(child1); uut.ensureViewIsCreated(); @@ -243,7 +243,7 @@ public void resolveCurrentOptions_withDefaultOptions() { Options defaultOptions = new Options(); Options currentOptions = spy(new Options()); - ParentController spy = spy(uut); + ParentController spy = spy(uut); Mockito.when(spy.resolveCurrentOptions()).thenReturn(currentOptions); spy.resolveCurrentOptions(defaultOptions); verify(currentOptions).withDefaultOptions(defaultOptions); @@ -263,7 +263,7 @@ public void getTopInset() { @Test public void getTopInsetForChild() { - ParentController parent = Mockito.mock(ParentController.class); + ParentController parent = Mockito.mock(ParentController.class); when(parent.getTopInset(any())).thenReturn(123); uut.setParentController(parent); @@ -279,14 +279,14 @@ public void applyBottomInset() { @Test public void getBottomInsetForChild() { - ParentController parent = Mockito.mock(ParentController.class); + ParentController parent = Mockito.mock(ParentController.class); when(parent.getBottomInset(any())).thenReturn(123); uut.setParentController(parent); assertThat(uut.getBottomInset(Mockito.mock(ViewController.class))).isEqualTo(123); } - private List createChildren() { + private List> createChildren() { return Arrays.asList( spy(new SimpleViewController(activity, childRegistry, "child1", new Options())), spy(new SimpleViewController(activity, childRegistry, "child2", new Options())) 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 f18e9c70cd9..1a5b6d709d9 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 @@ -46,11 +46,11 @@ public class SideMenuControllerTest extends BaseTest { private Activity activity; private ChildControllersRegistry childRegistry; private SideMenuPresenter presenter; - private ViewController left; - private ViewController right; - private ViewController center; - private ViewController child; - private ParentController parent; + private ViewController left; + private ViewController right; + private ViewController center; + private ViewController child; + private ParentController parent; private Options resolvedOptions; @Override @@ -118,12 +118,12 @@ public void getCurrentChild() { @Test public void onViewAppeared() { - ViewController left = spy(this.left); + ViewController left = spy(this.left); ViewGroup leftView = spy(left.getView()); when(left.findController(leftView)).thenReturn(left); Mockito.doReturn(leftView).when(left).getView(); - ViewController right = spy(this.right); + ViewController right = spy(this.right); ViewGroup rightView = spy(right.getView()); when(right.findController(rightView)).thenReturn(right); Mockito.doReturn(rightView).when(right).getView(); @@ -373,7 +373,7 @@ public void onMeasureChild_topInsetsAreApplied() { forEach(uut.getChildControllers(), c -> verify(c).applyTopInset()); } - private void openDrawerAndAssertVisibility(ViewController side, Functions.FuncR1 opt) { + private void openDrawerAndAssertVisibility(ViewController side, Functions.FuncR1, SideMenuOptions> opt) { Options options = new Options(); (side == left ? options.sideMenuRootOptions.left : options.sideMenuRootOptions.right).visible = new Bool(true); uut.mergeOptions(options); @@ -381,7 +381,7 @@ private void openDrawerAndAssertVisibility(ViewController side, Functions.FuncR1 assertThat(opt.run(side).visible.isFalseOrUndefined()).isTrue(); } - private void closeDrawerAndAssertVisibility(ViewController side, Functions.FuncR1 opt) { + private void closeDrawerAndAssertVisibility(ViewController side, Functions.FuncR1, SideMenuOptions> opt) { Options options = new Options(); (side == left ? options.sideMenuRootOptions.left : options.sideMenuRootOptions.right).visible = new Bool(false); uut.mergeOptions(options); @@ -389,7 +389,7 @@ private void closeDrawerAndAssertVisibility(ViewController side, Functions.FuncR assertThat(opt.run(side).visible.isTrue()).isFalse(); } - private int getGravity(ViewController side) { + private int getGravity(ViewController side) { return side == left ? Gravity.LEFT : Gravity.RIGHT; } @@ -433,7 +433,7 @@ private Activity createActivity() { return activity; } - private void setLeftRight(ViewController left, ViewController right) { + private void setLeftRight(ViewController left, ViewController right) { uut.setLeftController(left); uut.setRightController(right); left.setParentController(uut); diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java index 3560507cb87..8642fcf0966 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java @@ -24,8 +24,8 @@ public class BackButtonHelperTest extends BaseTest { private BackButtonHelper uut; private StackController stack; - private ChildController child1; - private ChildController child2; + private ChildController child1; + private ChildController child2; @Override public void beforeEach() { diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt index 7a98399eba9..080c9718372 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt @@ -3,9 +3,6 @@ package com.reactnativenavigation.viewcontrollers.stack import android.animation.AnimatorSet import android.animation.ObjectAnimator import android.app.Activity -import android.os.Looper -import android.view.View -import android.view.ViewGroup import android.widget.FrameLayout import com.nhaarman.mockitokotlin2.* import com.reactnativenavigation.BaseTest @@ -19,7 +16,6 @@ import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController import com.reactnativenavigation.views.element.TransitionAnimatorCreator import org.assertj.core.api.Java6Assertions.assertThat import org.junit.Test -import org.robolectric.Shadows class StackAnimatorTest : BaseTest() { private lateinit var uut: StackAnimator diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt index 0a5b5058c42..19bc3c6e0e6 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt @@ -73,7 +73,7 @@ class StackControllerTest : BaseTest() { TypefaceLoaderMock(), RenderChecker(), Options() - ) + ) ) createChildren() uut = createStack() @@ -182,7 +182,7 @@ class StackControllerTest : BaseTest() { child2.options.topBar.buttons.left = ArrayList(setOf(TitleBarHelper.iconButton("someButton", "icon.png"))) uut.push(child2, CommandListenerAdapter()) ShadowLooper.idleMainLooper() - assertThat(topBarController.leftButtonCount).isOne(); + assertThat(topBarController.leftButtonCount).isOne() verify(topBarController.view, never()).setBackButton(any()) } @@ -562,7 +562,7 @@ class StackControllerTest : BaseTest() { val captor = argumentCaptor() verify(animator).pop(any(), any(), captor.capture(), any(), any()) val animator = captor.firstValue.animations.pop.content.exit - .getAnimation(mockView(activity)) + .getAnimation(mockView(activity)) assertThat((animator as AnimatorSet).childAnimations.first().duration).isEqualTo(123) } @@ -579,7 +579,7 @@ class StackControllerTest : BaseTest() { val captor = argumentCaptor() verify(animator).pop(any(), any(), captor.capture(), any(), any()) val animator = captor.firstValue.animations.pop.content.exit - .getAnimation(mockView(activity)) + .getAnimation(mockView(activity)) assertThat((animator as AnimatorSet).childAnimations.first().duration).isEqualTo(123) } @@ -980,8 +980,8 @@ class StackControllerTest : BaseTest() { @Test fun mergeChildOptions_updatesParentControllerWithNewOptions() { val uut = TestUtils.newStackController(activity) - .setId("stack") - .build() + .setId("stack") + .build() val parentController = mock>() uut.parentController = parentController uut.ensureViewIsCreated() @@ -1119,7 +1119,7 @@ class StackControllerTest : BaseTest() { private fun assertContainsOnlyId(vararg ids: String) { assertThat(uut.size()).isEqualTo(ids.size) assertThat(uut.childControllers).extracting(Extractor { obj: ViewController<*> -> obj.id } as Extractor, String>) - .containsOnly(*ids) + .containsOnly(*ids) } private fun createStack(): StackController { @@ -1137,14 +1137,14 @@ class StackControllerTest : BaseTest() { private fun createStackBuilder(id: String, children: List>): StackControllerBuilder { createTopBarController() return TestUtils.newStackController(activity) - .setEventEmitter(eventEmitter) - .setChildren(children) - .setId(id) - .setTopBarController(topBarController) - .setChildRegistry(childRegistry) - .setAnimator(animator) - .setStackPresenter(presenter) - .setBackButtonHelper(backButtonHelper) + .setEventEmitter(eventEmitter) + .setChildren(children) + .setId(id) + .setTopBarController(topBarController) + .setChildRegistry(childRegistry) + .setAnimator(animator) + .setStackPresenter(presenter) + .setBackButtonHelper(backButtonHelper) } private fun createTopBarController() { diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt index 3418a9cd133..779d9b3b621 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt @@ -76,21 +76,21 @@ class StackPresenterTest : BaseTest() { iconResolver = IconResolverFake(activity) buttonCreator = TitleBarButtonCreatorMock() ogUut = StackPresenter( - activity, - titleViewCreator, - TopBarBackgroundViewCreatorMock(), - buttonCreator, - iconResolver, - typefaceLoader, - renderChecker, - Options() + activity, + titleViewCreator, + TopBarBackgroundViewCreatorMock(), + buttonCreator, + iconResolver, + typefaceLoader, + renderChecker, + Options() ) uut = spy(ogUut) createTopBarController() parent = TestUtils.newStackController(activity) - .setTopBarController(topBarController) - .setStackPresenter(uut) - .build() + .setTopBarController(topBarController) + .setStackPresenter(uut) + .build() childRegistry = ChildControllersRegistry() child = spy(SimpleViewController(activity, childRegistry, "child1", Options.EMPTY)) otherChild = spy(SimpleViewController(activity, childRegistry, "child1", Options.EMPTY)) @@ -768,9 +768,9 @@ class StackPresenterTest : BaseTest() { uut.setComponentsButtonController(child.view, rightController, leftController) uut.mergeChildOptions(mergeOptions, initialOptions, parent, child) - verify(rightController, never()).applyColor(any(), any()); - verify(leftController, never()).applyColor(any(), any()); - verify(leftController, never()).applyDisabledColor(any(), any()); + verify(rightController, never()).applyColor(any(), any()) + verify(leftController, never()).applyColor(any(), any()) + verify(leftController, never()).applyDisabledColor(any(), any()) verify(leftController, never()).applyDisabledColor(any(), any()) } @@ -837,7 +837,7 @@ class StackPresenterTest : BaseTest() { val rightCaptor = argumentCaptor>() val leftCaptor = argumentCaptor>() verify(topBarController).applyRightButtons(rightCaptor.capture()) - verify(topBarController).applyLeftButtons(leftCaptor.capture()); + verify(topBarController).applyLeftButtons(leftCaptor.capture()) assertThat(rightCaptor.firstValue.size).isOne() assertThat(leftCaptor.firstValue.size).isOne() } @@ -897,8 +897,8 @@ class StackPresenterTest : BaseTest() { val options = Options().apply { topBar.buttons.right = ArrayList(listOf(componentBtn1)) topBar.buttons.left = ArrayList(listOf(componentBtn2)) - topBar.animateLeftButtons = Bool(false); - topBar.animateRightButtons = Bool(true); + topBar.animateLeftButtons = Bool(false) + topBar.animateRightButtons = Bool(true) } uut.applyChildOptions(options, parent, child) diff --git a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt index b8947f0cc87..fc0baeb6fa4 100644 --- a/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +++ b/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt @@ -107,10 +107,10 @@ class TopBarControllerTest : BaseTest() { fun setLeftButtons_emptyButtonsListClearsLeftButton() { uut.applyLeftButtons(leftButton(leftButton)) uut.applyRightButtons(rightButtons(componentButton)!!) - assertThat(uut.leftButtonCount).isNotZero(); + assertThat(uut.leftButtonCount).isNotZero() uut.applyLeftButtons(emptyList()) uut.applyRightButtons(rightButtons(textButton1)!!) - assertThat(uut.leftButtonCount).isZero(); + assertThat(uut.leftButtonCount).isZero() } @Test @@ -142,7 +142,7 @@ class TopBarControllerTest : BaseTest() { uut.view.setBackButton(TitleBarHelper.createButtonController(activity, backButton)) assertThat(uut.view.navigationIcon).isNotNull() val initialButtons = leftButton(leftButton) - uut.applyLeftButtons(initialButtons!!) + uut.applyLeftButtons(initialButtons) uut.mergeLeftButtons(initialButtons, emptyList()) assertThat(uut.view.navigationIcon).isNull() } From 25047a09a09642216b16188de04e9ad90560248d Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 11:39:19 +0300 Subject: [PATCH 36/37] Remove unused import --- .../reactnativenavigation/react/NavigationReactNativeHost.java | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/NavigationReactNativeHost.java b/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/NavigationReactNativeHost.java index 0391aa6d22e..9b1bd158f3a 100644 --- a/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +++ b/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/NavigationReactNativeHost.java @@ -8,7 +8,6 @@ import com.facebook.react.common.LifecycleState; import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener; import com.reactnativenavigation.NavigationApplication; -import com.reactnativenavigation.react.DevBundleDownloadListenerAdapter; import androidx.annotation.NonNull; import androidx.annotation.Nullable; From 9737cdba67a9988eb7f6507c891d4218aa6afaa1 Mon Sep 17 00:00:00 2001 From: svbutko Date: Tue, 5 Oct 2021 11:42:27 +0300 Subject: [PATCH 37/37] Return TypeEvaluator --- .../views/element/animators/ReactImageMatrixAnimator.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt index 0aaa895a133..6eb09d74266 100644 --- a/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt +++ b/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt @@ -13,6 +13,7 @@ import com.reactnativenavigation.options.SharedElementTransitionOptions import com.reactnativenavigation.utils.ViewUtils import kotlin.math.max import kotlin.math.roundToInt +import android.animation.TypeEvaluator class ReactImageMatrixAnimator(from: View, to: View) : PropertyAnimatorCreator(from, to) { override fun shouldAnimateProperty(fromChild: ReactImageView, toChild: ReactImageView): Boolean { @@ -38,7 +39,7 @@ class ReactImageMatrixAnimator(from: View, to: View) : PropertyAnimatorCreator + return ObjectAnimator.ofObject(TypeEvaluator { fraction: Float, _: Any, _: Any -> hierarchy.actualImageScaleType?.let { (hierarchy.actualImageScaleType as? InterpolatingScaleType)?.let { it.value = fraction