Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
410aac0
Rename o to others to fix problems when calling this function with na…
svbutko Oct 5, 2021
2be7006
Suppress unused parameters of TopBarAnimator
svbutko Oct 5, 2021
e5df1b6
Suppress unchecked cast of PropertyAnimatorCreator
svbutko Oct 5, 2021
f2ce1e4
Remove unused import from ReactImageBoundsAnimator
svbutko Oct 5, 2021
2feb13c
Remove redundant SAM-constructor
svbutko Oct 5, 2021
59a9e0b
Remove unused imports
svbutko Oct 5, 2021
f287a8a
Remove unused imports
svbutko Oct 5, 2021
cfe6e26
Remove unused constant
svbutko Oct 5, 2021
f84bff7
Fix raw use of ViewController
svbutko Oct 5, 2021
9c823b1
Fix raw use of ViewController
svbutko Oct 5, 2021
b2a41dc
Fix raw use of ViewController
svbutko Oct 5, 2021
1c51fcb
Fix raw use of ViewController, remove unused imports
svbutko Oct 5, 2021
390ed60
Remove unused import
svbutko Oct 5, 2021
a45ad85
Fix raw use of ViewController
svbutko Oct 5, 2021
c123afd
Fix raw use of ViewController
svbutko Oct 5, 2021
d67cc2b
Fix raw use of ViewController
svbutko Oct 5, 2021
d8045dd
Fix raw use of ViewController
svbutko Oct 5, 2021
5b3ff3f
Remove unused import
svbutko Oct 5, 2021
1804668
Fix raw ViewController use
svbutko Oct 5, 2021
a5d644e
Fix raw ViewController use
svbutko Oct 5, 2021
e9f8115
Fix raw ViewController use
svbutko Oct 5, 2021
56a8f75
Fix raw ViewController use
svbutko Oct 5, 2021
6cf5cbf
Fix raw ViewController use
svbutko Oct 5, 2021
460111c
Fix raw ViewController use
svbutko Oct 5, 2021
3316824
Fix raw ViewController use
svbutko Oct 5, 2021
24373bb
Fix raw ViewController use
svbutko Oct 5, 2021
2a1382a
Remove wrong return type condition
svbutko Oct 5, 2021
1ec7b6d
Remove unused import
svbutko Oct 5, 2021
96365f3
Remove unused import
svbutko Oct 5, 2021
b25e180
Remove unused import
svbutko Oct 5, 2021
e70edda
Remove redundant semicolon
svbutko Oct 5, 2021
40b811d
Fix raw ViewController use
svbutko Oct 5, 2021
e7841eb
Fix raw ViewController use
svbutko Oct 5, 2021
4fb1472
Fix raw ViewController use
svbutko Oct 5, 2021
e2a3e7e
Fix raw ViewController use, remove unused imports
svbutko Oct 5, 2021
25047a0
Remove unused import
svbutko Oct 5, 2021
9737cdb
Return TypeEvaluator
svbutko Oct 5, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.reactnativenavigation.options

import android.animation.Animator
import android.animation.AnimatorSet
import android.view.View
import org.json.JSONObject

Expand Down
Original file line number Diff line number Diff line change
@@ -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


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, ExternalComponentCreator> 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<String, ExternalComponentCreator> 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<String, ExternalComponentCreator> 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<String, ExternalComponentCreator> 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:
Expand All @@ -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) {
Expand Down Expand Up @@ -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<ViewController> createChildren(List<LayoutNode> children) {
List<ViewController> result = new ArrayList<>();
for (LayoutNode child : children) {
result.add(create(child));
}
return result;
}

private ViewController createBottomTabs(ReactContext context, LayoutNode node) {
List<ViewController<?>> 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<ViewController> 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<ViewController<?>> createChildren(List<LayoutNode> children) {
List<ViewController<?>> result = new ArrayList<>();
for (LayoutNode child : children) {
result.add(create(child));
}
return result;
}

private ViewController<?> createBottomTabs(ReactContext context, LayoutNode node) {
List<ViewController<?>> 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<ViewController<?>> 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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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<View?, Float?>): Boolean {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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))
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.reactnativenavigation.react;

import com.reactnativenavigation.react.CommandListener;

import androidx.annotation.Nullable;

public class CommandListenerAdapter implements CommandListener {
Expand Down
Loading