react-native-navigation 7.24.3 → 7.25.0-snapshot.543
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/android/app/build.gradle +12 -9
- package/lib/android/app/src/main/java/com/reactnativenavigation/NavigationActivity.java +7 -9
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabOptions.java +4 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/Options.java +2 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/OverlayOptions.java +3 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/OverlayOptions.kt +31 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/layout/LayoutInsets.kt +44 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/layout/LayoutOptions.kt +71 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/JSONParser.java +0 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/PrimitiveExt.kt +9 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +2 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +31 -4
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java +6 -13
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +32 -10
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalStack.java +4 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/navigator/Navigator.java +25 -6
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManager.kt +104 -33
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/parent/ParentController.java +86 -9
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuController.java +12 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +18 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +51 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonController.kt +7 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/Presenter.java +23 -7
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/RootPresenter.java +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewController.java +24 -3
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabs.java +29 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainer.kt +1 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/bottomtabs/BottomTabsLayout.java +10 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/component/ComponentLayout.java +10 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/overlay/AttachedOverlayContainer.kt +69 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/overlay/ViewTooltip.java +921 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/sidemenu/SideMenuRoot.java +9 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/StackLayout.java +14 -4
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/TopBar.java +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/views/toptabs/TopTabsStyleHelper.java +0 -1
- package/lib/dist/src/interfaces/Options.d.ts +34 -0
- package/lib/ios/RNNBasePresenter.m +17 -0
- package/lib/ios/RNNBottomTabsController.m +1 -0
- package/lib/ios/RNNComponentViewController.m +5 -0
- package/lib/ios/RNNLayoutOptions.h +2 -1
- package/lib/ios/RNNLayoutOptions.m +4 -0
- package/lib/ios/RNNStackPresenter.m +1 -0
- package/lib/src/interfaces/Options.ts +38 -0
- package/package.json +3 -1
- package/.buildkite/pipeline.yml +0 -59
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutOptions.java +0 -48
- package/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +0 -178
- package/lib/android/app/src/test/java/com/reactnativenavigation/EnvironmentTest.java +0 -43
- package/lib/android/app/src/test/java/com/reactnativenavigation/TestActivity.java +0 -23
- package/lib/android/app/src/test/java/com/reactnativenavigation/TestApplication.java +0 -35
- package/lib/android/app/src/test/java/com/reactnativenavigation/TestUtils.java +0 -62
- package/lib/android/app/src/test/java/com/reactnativenavigation/fakes/IconResolverFake.kt +0 -8
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/BackDrawable.java +0 -30
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/ImageLoaderMock.kt +0 -49
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/Mocks.kt +0 -18
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleComponentViewController.java +0 -15
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleOverlay.java +0 -54
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/SimpleViewController.java +0 -113
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentLayout.java +0 -79
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestComponentViewCreator.java +0 -18
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TestReactView.java +0 -71
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarButtonCreatorMock.java +0 -34
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TitleBarReactViewCreatorMock.java +0 -20
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TopBarBackgroundViewCreatorMock.java +0 -20
- package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TypefaceLoaderMock.kt +0 -21
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/LayoutNodeParserTest.java +0 -51
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/OptionsTest.java +0 -315
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/OrientationOptionsTest.java +0 -81
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/TopBarButtonsTest.kt +0 -95
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/TransitionAnimationOptionsTest.kt +0 -122
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/BoolParserTest.java +0 -28
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/ColorParseTest.java +0 -50
- package/lib/android/app/src/test/java/com/reactnativenavigation/options/parsers/JSONParserTest.java +0 -64
- package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/PresenterTest.java +0 -56
- package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/RenderCheckerTest.java +0 -59
- package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/SideMenuPresenterTest.java +0 -35
- package/lib/android/app/src/test/java/com/reactnativenavigation/react/NavigationModuleTest.java +0 -102
- package/lib/android/app/src/test/java/com/reactnativenavigation/react/ReloadListenerTest.java +0 -24
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/AnimationHelper.kt +0 -33
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonPresenterTest.java +0 -241
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ButtonSpanTest.java +0 -57
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/CompatUtilsTest.java +0 -17
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/LayoutFactoryTest.java +0 -78
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/MotionEventTest.kt +0 -47
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/NativeCommandListenerTest.java +0 -60
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/OptionHelper.java +0 -16
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ReflectionUtilsTest.java +0 -26
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/StringUtilsTest.java +0 -19
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/SystemUiUtilsTest.kt +0 -27
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleAndButtonsMeasurerTest.kt +0 -357
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/TitleBarHelper.java +0 -54
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiThreadTest.java +0 -29
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiUtilsTest.java +0 -22
- package/lib/android/app/src/test/java/com/reactnativenavigation/utils/ViewHelper.java +0 -9
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/OptionsApplyingTest.java +0 -149
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenterTest.java +0 -206
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsAttacherTest.java +0 -62
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.kt +0 -589
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsPresenterTest.kt +0 -173
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AfterInitialTabTest.java +0 -38
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/AttachModeTest.java +0 -86
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/OnSwitchToTabTest.java +0 -31
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/attacher/modes/TogetherTest.java +0 -20
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/button/NavigationIconResolverTest.java +0 -78
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +0 -80
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllersRegistryTest.java +0 -56
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewControllerTest.java +0 -216
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/ExternalComponentViewControllerTest.java +0 -97
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/FragmentCreatorMock.java +0 -34
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/externalcomponent/SomeFragment.java +0 -8
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/fakes/FakeParentController.kt +0 -33
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorMock.java +0 -40
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorTest.kt +0 -213
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +0 -319
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +0 -367
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +0 -898
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +0 -254
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManagerTest.java +0 -108
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +0 -299
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +0 -446
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/BackButtonHelperTest.java +0 -77
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/FloatingActionButtonTest.java +0 -154
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/IdStackTest.java +0 -114
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +0 -241
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +0 -1165
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +0 -1081
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarButtonControllerTest.java +0 -61
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TitleBarReactViewControllerTest.java +0 -43
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarButtonControllerTest.java +0 -120
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +0 -432
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/toptabs/TopTabsViewControllerTest.java +0 -249
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerTest.java +0 -337
- package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegateTest.java +0 -68
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/OverlayTouchDelegateTest.java +0 -60
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/TitleAndButtonsContainerTest.kt +0 -477
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/TopBarTest.java +0 -82
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/BaseViewAnimatorTest.kt +0 -109
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/DefaultViewAnimatorCreatorFake.kt +0 -36
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainerTest.kt +0 -101
- package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsTest.kt +0 -40
- package/lib/android/app/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +0 -1
|
@@ -172,6 +172,7 @@ allprojects { p ->
|
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
dependencies {
|
|
175
|
+
|
|
175
176
|
implementation "androidx.core:core-ktx:1.6.0"
|
|
176
177
|
implementation "org.jetbrains.kotlin:$kotlinStdlib:$kotlinVersion"
|
|
177
178
|
implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinCoroutinesCore"
|
|
@@ -189,13 +190,15 @@ dependencies {
|
|
|
189
190
|
//noinspection GradleDynamicVersion
|
|
190
191
|
implementation 'com.facebook.react:react-native:+'
|
|
191
192
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
193
|
+
if("Playground".toLowerCase() == rootProject.name.toLowerCase()){
|
|
194
|
+
// tests only for our playground
|
|
195
|
+
testImplementation 'junit:junit:4.13.2'
|
|
196
|
+
testImplementation "org.robolectric:robolectric:4.7.2"
|
|
197
|
+
testImplementation 'org.assertj:assertj-core:3.11.1'
|
|
198
|
+
testImplementation 'org.mockito:mockito-core:4.0.0'
|
|
199
|
+
testImplementation 'com.squareup.assertj:assertj-android:1.2.0'
|
|
200
|
+
testImplementation 'org.mockito:mockito-inline:3.4.0'
|
|
201
|
+
testImplementation "org.mockito.kotlin:mockito-kotlin:4.0.0"
|
|
202
|
+
testImplementation "org.jetbrains.kotlin:kotlin-test:$kotlinVersion"
|
|
203
|
+
}
|
|
201
204
|
}
|
|
@@ -3,28 +3,26 @@ package com.reactnativenavigation;
|
|
|
3
3
|
import android.annotation.TargetApi;
|
|
4
4
|
import android.content.Intent;
|
|
5
5
|
import android.content.res.Configuration;
|
|
6
|
-
import android.graphics.Color;
|
|
7
6
|
import android.os.Build;
|
|
8
7
|
import android.os.Bundle;
|
|
9
8
|
import android.view.KeyEvent;
|
|
10
9
|
import android.view.View;
|
|
11
10
|
|
|
11
|
+
import androidx.annotation.NonNull;
|
|
12
|
+
import androidx.annotation.Nullable;
|
|
13
|
+
import androidx.appcompat.app.AppCompatActivity;
|
|
14
|
+
|
|
12
15
|
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
|
|
13
16
|
import com.facebook.react.modules.core.PermissionAwareActivity;
|
|
14
17
|
import com.facebook.react.modules.core.PermissionListener;
|
|
15
|
-
import com.reactnativenavigation.
|
|
16
|
-
import com.reactnativenavigation.viewcontrollers.overlay.OverlayManager;
|
|
17
|
-
import com.reactnativenavigation.viewcontrollers.viewcontroller.RootPresenter;
|
|
18
|
+
import com.reactnativenavigation.react.CommandListenerAdapter;
|
|
18
19
|
import com.reactnativenavigation.react.JsDevReloadHandler;
|
|
19
20
|
import com.reactnativenavigation.react.ReactGateway;
|
|
20
|
-
import com.reactnativenavigation.react.CommandListenerAdapter;
|
|
21
21
|
import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
|
|
22
22
|
import com.reactnativenavigation.viewcontrollers.modal.ModalStack;
|
|
23
23
|
import com.reactnativenavigation.viewcontrollers.navigator.Navigator;
|
|
24
|
-
|
|
25
|
-
import
|
|
26
|
-
import androidx.annotation.Nullable;
|
|
27
|
-
import androidx.appcompat.app.AppCompatActivity;
|
|
24
|
+
import com.reactnativenavigation.viewcontrollers.overlay.OverlayManager;
|
|
25
|
+
import com.reactnativenavigation.viewcontrollers.viewcontroller.RootPresenter;
|
|
28
26
|
|
|
29
27
|
public class NavigationActivity extends AppCompatActivity implements DefaultHardwareBackBtnHandler, PermissionAwareActivity, JsDevReloadHandler.ReloadListener {
|
|
30
28
|
@Nullable
|
package/lib/android/app/src/main/java/com/reactnativenavigation/options/BottomTabOptions.java
CHANGED
|
@@ -25,6 +25,7 @@ public class BottomTabOptions {
|
|
|
25
25
|
BottomTabOptions options = new BottomTabOptions();
|
|
26
26
|
if (json == null) return options;
|
|
27
27
|
|
|
28
|
+
options.id = TextParser.parse(json, "id");
|
|
28
29
|
options.text = TextParser.parse(json, "text");
|
|
29
30
|
options.textColor = ThemeColour.parse(context, json.optJSONObject("textColor"));
|
|
30
31
|
options.selectedTextColor = ThemeColour.parse(context, json.optJSONObject("selectedTextColor"));
|
|
@@ -48,6 +49,7 @@ public class BottomTabOptions {
|
|
|
48
49
|
return options;
|
|
49
50
|
}
|
|
50
51
|
|
|
52
|
+
public Text id = new NullText();
|
|
51
53
|
public Text text = new NullText();
|
|
52
54
|
public ThemeColour textColor = new NullThemeColour();
|
|
53
55
|
public ThemeColour selectedTextColor = new NullThemeColour();
|
|
@@ -70,6 +72,7 @@ public class BottomTabOptions {
|
|
|
70
72
|
|
|
71
73
|
|
|
72
74
|
void mergeWith(final BottomTabOptions other) {
|
|
75
|
+
if (other.id.hasValue()) id = other.id;
|
|
73
76
|
if (other.textColor.hasValue()) textColor = other.textColor;
|
|
74
77
|
if (other.selectedTextColor.hasValue()) selectedTextColor = other.selectedTextColor;
|
|
75
78
|
if (other.iconColor.hasValue()) iconColor = other.iconColor;
|
|
@@ -93,6 +96,7 @@ public class BottomTabOptions {
|
|
|
93
96
|
}
|
|
94
97
|
|
|
95
98
|
void mergeWithDefault(final BottomTabOptions defaultOptions) {
|
|
99
|
+
if (!id.hasValue()) id = defaultOptions.id;
|
|
96
100
|
if (!textColor.hasValue()) textColor = defaultOptions.textColor;
|
|
97
101
|
if (!selectedTextColor.hasValue()) selectedTextColor = defaultOptions.selectedTextColor;
|
|
98
102
|
if (!iconColor.hasValue()) iconColor = defaultOptions.iconColor;
|
|
@@ -2,6 +2,8 @@ package com.reactnativenavigation.options;
|
|
|
2
2
|
|
|
3
3
|
import android.content.Context;
|
|
4
4
|
|
|
5
|
+
|
|
6
|
+
import com.reactnativenavigation.options.layout.LayoutOptions;
|
|
5
7
|
import com.reactnativenavigation.options.params.NullNumber;
|
|
6
8
|
import com.reactnativenavigation.options.params.NullText;
|
|
7
9
|
import com.reactnativenavigation.options.parsers.TypefaceLoader;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
|
|
1
2
|
package com.reactnativenavigation.options;
|
|
2
3
|
|
|
3
4
|
import com.reactnativenavigation.options.params.Bool;
|
|
@@ -8,11 +9,11 @@ import org.json.JSONObject;
|
|
|
8
9
|
|
|
9
10
|
public class OverlayOptions {
|
|
10
11
|
public Bool interceptTouchOutside = new NullBool();
|
|
11
|
-
|
|
12
|
+
public OverlayAttachOptions overlayAttachOptions = new OverlayAttachOptions();
|
|
12
13
|
public static OverlayOptions parse(JSONObject json) {
|
|
13
14
|
OverlayOptions options = new OverlayOptions();
|
|
14
15
|
if (json == null) return options;
|
|
15
|
-
|
|
16
|
+
options.overlayAttachOptions = OverlayAttachOptions.parse(json.optJSONObject("attach"));
|
|
16
17
|
options.interceptTouchOutside = BoolParser.parse(json,"interceptTouchOutside");
|
|
17
18
|
return options;
|
|
18
19
|
}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
package com.reactnativenavigation.options
|
|
2
|
+
|
|
3
|
+
import com.reactnativenavigation.options.params.NullText
|
|
4
|
+
import com.reactnativenavigation.options.params.Text
|
|
5
|
+
import com.reactnativenavigation.options.parsers.TextParser
|
|
6
|
+
import org.json.JSONObject
|
|
7
|
+
class OverlayAttachOptions{
|
|
8
|
+
|
|
9
|
+
@JvmField
|
|
10
|
+
var layoutId :Text = NullText()
|
|
11
|
+
@JvmField
|
|
12
|
+
var anchorId :Text = NullText()
|
|
13
|
+
@JvmField
|
|
14
|
+
var gravity:Text = NullText()
|
|
15
|
+
|
|
16
|
+
fun hasValue() = layoutId.hasValue()
|
|
17
|
+
override fun toString(): String {
|
|
18
|
+
return "OverlayAttachOptions(layoutId=$layoutId, anchorId=$anchorId, gravity=$gravity)"
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
companion object{
|
|
22
|
+
@JvmStatic
|
|
23
|
+
fun parse(json: JSONObject?): OverlayAttachOptions {
|
|
24
|
+
val overlayAttachOptions = OverlayAttachOptions()
|
|
25
|
+
overlayAttachOptions.layoutId = TextParser.parse(json,"layoutId")
|
|
26
|
+
overlayAttachOptions.anchorId = TextParser.parse(json?.optJSONObject("anchor"),"id")
|
|
27
|
+
overlayAttachOptions.gravity = TextParser.parse(json?.optJSONObject("anchor"),"gravity")
|
|
28
|
+
return overlayAttachOptions
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
package/lib/android/app/src/main/java/com/reactnativenavigation/options/layout/LayoutInsets.kt
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
package com.reactnativenavigation.options.layout
|
|
2
|
+
|
|
3
|
+
import com.reactnativenavigation.utils.dp
|
|
4
|
+
import org.json.JSONObject
|
|
5
|
+
|
|
6
|
+
class LayoutInsets(
|
|
7
|
+
var top: Int?=null,
|
|
8
|
+
var left: Int?=null,
|
|
9
|
+
var bottom: Int?=null,
|
|
10
|
+
var right: Int?=null
|
|
11
|
+
) {
|
|
12
|
+
fun merge(toMerge: LayoutInsets?, defaults: LayoutInsets?) {
|
|
13
|
+
toMerge?.let { options->
|
|
14
|
+
options.top?.let { this.top = it }
|
|
15
|
+
options.bottom?.let { this.bottom = it }
|
|
16
|
+
options.left?.let { this.left = it }
|
|
17
|
+
options.right?.let { this.right = it }
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
defaults?.let {
|
|
21
|
+
options->
|
|
22
|
+
top = top?:options.top
|
|
23
|
+
left = left?:options.left
|
|
24
|
+
right = right?:options.right
|
|
25
|
+
bottom = bottom?:options.bottom
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
companion object{
|
|
30
|
+
fun parse(jsonObject: JSONObject?): LayoutInsets {
|
|
31
|
+
return LayoutInsets(
|
|
32
|
+
jsonObject?.optInt("top")?.dp,
|
|
33
|
+
jsonObject?.optInt("left")?.dp,
|
|
34
|
+
jsonObject?.optInt("bottom")?.dp,
|
|
35
|
+
jsonObject?.optInt("right")?.dp
|
|
36
|
+
)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
fun hasValue(): Boolean {
|
|
41
|
+
return top!=null || bottom!=null || left!=null || right!=null
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
}
|
package/lib/android/app/src/main/java/com/reactnativenavigation/options/layout/LayoutOptions.kt
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
package com.reactnativenavigation.options.layout
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import com.reactnativenavigation.options.LayoutDirection
|
|
5
|
+
import com.reactnativenavigation.options.OrientationOptions
|
|
6
|
+
import com.reactnativenavigation.options.params.*
|
|
7
|
+
import com.reactnativenavigation.options.params.Number
|
|
8
|
+
import com.reactnativenavigation.options.parsers.BoolParser
|
|
9
|
+
import com.reactnativenavigation.options.parsers.NumberParser
|
|
10
|
+
import org.json.JSONObject
|
|
11
|
+
|
|
12
|
+
class LayoutOptions {
|
|
13
|
+
@JvmField
|
|
14
|
+
var backgroundColor: ThemeColour = NullThemeColour()
|
|
15
|
+
|
|
16
|
+
@JvmField
|
|
17
|
+
var componentBackgroundColor: ThemeColour = NullThemeColour()
|
|
18
|
+
|
|
19
|
+
@JvmField
|
|
20
|
+
var topMargin: Number = NullNumber()
|
|
21
|
+
|
|
22
|
+
@JvmField
|
|
23
|
+
var adjustResize: Bool = NullBool()
|
|
24
|
+
|
|
25
|
+
@JvmField
|
|
26
|
+
var orientation = OrientationOptions()
|
|
27
|
+
|
|
28
|
+
@JvmField
|
|
29
|
+
var direction = LayoutDirection.DEFAULT
|
|
30
|
+
|
|
31
|
+
var insets: LayoutInsets = LayoutInsets()
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
fun mergeWith(other: LayoutOptions) {
|
|
35
|
+
if (other.backgroundColor.hasValue()) backgroundColor = other.backgroundColor
|
|
36
|
+
if (other.componentBackgroundColor.hasValue()) componentBackgroundColor = other.componentBackgroundColor
|
|
37
|
+
if (other.topMargin.hasValue()) topMargin = other.topMargin
|
|
38
|
+
if (other.orientation.hasValue()) orientation = other.orientation
|
|
39
|
+
if (other.direction.hasValue()) direction = other.direction
|
|
40
|
+
if (other.adjustResize.hasValue()) adjustResize = other.adjustResize
|
|
41
|
+
insets.merge(other.insets, null)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
fun mergeWithDefault(defaultOptions: LayoutOptions) {
|
|
45
|
+
if (!backgroundColor.hasValue()) backgroundColor = defaultOptions.backgroundColor
|
|
46
|
+
if (!componentBackgroundColor.hasValue()) componentBackgroundColor = defaultOptions.componentBackgroundColor
|
|
47
|
+
if (!topMargin.hasValue()) topMargin = defaultOptions.topMargin
|
|
48
|
+
if (!orientation.hasValue()) orientation = defaultOptions.orientation
|
|
49
|
+
if (!direction.hasValue()) direction = defaultOptions.direction
|
|
50
|
+
if (!adjustResize.hasValue()) adjustResize = defaultOptions.adjustResize
|
|
51
|
+
insets.merge(null, defaultOptions.insets)
|
|
52
|
+
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
companion object {
|
|
56
|
+
@JvmStatic
|
|
57
|
+
fun parse(context: Context?, json: JSONObject?): LayoutOptions {
|
|
58
|
+
val result = LayoutOptions()
|
|
59
|
+
if (json == null) return result
|
|
60
|
+
result.backgroundColor = ThemeColour.parse(context!!, json.optJSONObject("backgroundColor"))
|
|
61
|
+
result.componentBackgroundColor = ThemeColour.parse(context, json.optJSONObject("componentBackgroundColor"))
|
|
62
|
+
result.topMargin = NumberParser.parse(json, "topMargin")
|
|
63
|
+
result.insets = LayoutInsets.parse(json.optJSONObject("insets"))
|
|
64
|
+
result.orientation = OrientationOptions.parse(json)
|
|
65
|
+
result.direction = LayoutDirection.fromString(json.optString("direction", ""))
|
|
66
|
+
result.adjustResize = BoolParser.parse(json, "adjustResize")
|
|
67
|
+
return result
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
}
|
package/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/JSONParser.java
CHANGED
|
@@ -6,8 +6,6 @@ import com.facebook.react.bridge.ReadableMap;
|
|
|
6
6
|
import com.facebook.react.bridge.ReadableMapKeySetIterator;
|
|
7
7
|
import com.facebook.react.bridge.WritableArray;
|
|
8
8
|
import com.facebook.react.bridge.WritableMap;
|
|
9
|
-
import com.facebook.react.bridge.WritableNativeArray;
|
|
10
|
-
import com.facebook.react.bridge.WritableNativeMap;
|
|
11
9
|
|
|
12
10
|
import org.json.JSONArray;
|
|
13
11
|
import org.json.JSONException;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
package com.reactnativenavigation.utils
|
|
2
|
+
|
|
3
|
+
import android.content.res.Resources
|
|
4
|
+
|
|
5
|
+
val Int.dp: Int
|
|
6
|
+
get() = (this * Resources.getSystem().displayMetrics.density).toInt()
|
|
7
|
+
|
|
8
|
+
val Float.dp: Int
|
|
9
|
+
get() = (this * Resources.getSystem().displayMetrics.density).toInt()
|
|
@@ -9,7 +9,6 @@ import android.graphics.drawable.Drawable;
|
|
|
9
9
|
|
|
10
10
|
import androidx.annotation.NonNull;
|
|
11
11
|
|
|
12
|
-
import com.aurelhubert.ahbottomnavigation.AHTextView;
|
|
13
12
|
import com.aurelhubert.ahbottomnavigation.notification.AHNotification;
|
|
14
13
|
import com.reactnativenavigation.options.BottomTabOptions;
|
|
15
14
|
import com.reactnativenavigation.options.DotIndicatorOptions;
|
|
@@ -58,6 +57,7 @@ public class BottomTabPresenter {
|
|
|
58
57
|
bottomTabs.perform(bottomTabs -> {
|
|
59
58
|
for (int i = 0; i < tabs.size(); i++) {
|
|
60
59
|
BottomTabOptions tab = tabs.get(i).resolveCurrentOptions(defaultOptions).bottomTabOptions;
|
|
60
|
+
bottomTabs.setTagForTabIndex(i, tab.id.get(null));
|
|
61
61
|
bottomTabs.setIconWidth(i, tab.iconWidth.get(null));
|
|
62
62
|
bottomTabs.setIconHeight(i, tab.iconHeight.get(null));
|
|
63
63
|
bottomTabs.setTitleTypeface(i, tab.font.getTypeface(typefaceLoader, defaultTypeface));
|
|
@@ -87,6 +87,7 @@ public class BottomTabPresenter {
|
|
|
87
87
|
int index = bottomTabFinder.findByControllerId(child.getId());
|
|
88
88
|
if (index >= 0) {
|
|
89
89
|
BottomTabOptions tab = options.bottomTabOptions;
|
|
90
|
+
if (tab.id.hasValue()) bottomTabs.setTagForTabIndex(index, tab.id.get());
|
|
90
91
|
if (tab.iconWidth.hasValue()) bottomTabs.setIconWidth(index, tab.iconWidth.get(null));
|
|
91
92
|
if (tab.iconHeight.hasValue()) bottomTabs.setIconHeight(index, tab.iconHeight.get(null));
|
|
92
93
|
if (tab.font.hasValue()) bottomTabs.setTitleTypeface(index, tab.font.getTypeface(typefaceLoader, defaultTypeface));
|
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
package com.reactnativenavigation.viewcontrollers.bottomtabs;
|
|
2
2
|
|
|
3
|
+
import static com.reactnativenavigation.utils.CollectionUtils.forEach;
|
|
4
|
+
import static com.reactnativenavigation.utils.CollectionUtils.map;
|
|
5
|
+
import static com.reactnativenavigation.utils.ObjectUtils.perform;
|
|
6
|
+
import static com.reactnativenavigation.views.bottomtabs.BottomTabs.TAB_NOT_FOUND;
|
|
7
|
+
|
|
3
8
|
import android.animation.Animator;
|
|
4
9
|
import android.app.Activity;
|
|
5
10
|
import android.content.res.Configuration;
|
|
@@ -7,6 +12,7 @@ import android.view.View;
|
|
|
7
12
|
import android.view.ViewGroup;
|
|
8
13
|
|
|
9
14
|
import androidx.annotation.NonNull;
|
|
15
|
+
import androidx.annotation.Nullable;
|
|
10
16
|
import androidx.annotation.RestrictTo;
|
|
11
17
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
|
12
18
|
|
|
@@ -15,6 +21,7 @@ import com.aurelhubert.ahbottomnavigation.AHBottomNavigationItem;
|
|
|
15
21
|
import com.reactnativenavigation.options.BottomTabOptions;
|
|
16
22
|
import com.reactnativenavigation.options.HwBackBottomTabsBehaviour;
|
|
17
23
|
import com.reactnativenavigation.options.Options;
|
|
24
|
+
import com.reactnativenavigation.options.OverlayAttachOptions;
|
|
18
25
|
import com.reactnativenavigation.react.CommandListener;
|
|
19
26
|
import com.reactnativenavigation.react.CommandListenerAdapter;
|
|
20
27
|
import com.reactnativenavigation.react.events.EventEmitter;
|
|
@@ -25,6 +32,7 @@ import com.reactnativenavigation.viewcontrollers.parent.ParentController;
|
|
|
25
32
|
import com.reactnativenavigation.viewcontrollers.stack.StackController;
|
|
26
33
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
|
|
27
34
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
|
|
35
|
+
import com.reactnativenavigation.views.overlay.ViewTooltip;
|
|
28
36
|
import com.reactnativenavigation.views.bottomtabs.BottomTabs;
|
|
29
37
|
import com.reactnativenavigation.views.bottomtabs.BottomTabsContainer;
|
|
30
38
|
import com.reactnativenavigation.views.bottomtabs.BottomTabsLayout;
|
|
@@ -34,10 +42,6 @@ import java.util.Deque;
|
|
|
34
42
|
import java.util.LinkedList;
|
|
35
43
|
import java.util.List;
|
|
36
44
|
|
|
37
|
-
import static com.reactnativenavigation.utils.CollectionUtils.forEach;
|
|
38
|
-
import static com.reactnativenavigation.utils.CollectionUtils.map;
|
|
39
|
-
import static com.reactnativenavigation.utils.ObjectUtils.perform;
|
|
40
|
-
|
|
41
45
|
public class BottomTabsController extends ParentController<BottomTabsLayout> implements AHBottomNavigation.OnTabSelectedListener, TabSelector {
|
|
42
46
|
|
|
43
47
|
private BottomTabsContainer bottomTabsContainer;
|
|
@@ -238,6 +242,29 @@ public class BottomTabsController extends ParentController<BottomTabsLayout> imp
|
|
|
238
242
|
return super.onMeasureChild(parent, child, parentWidthMeasureSpec, widthUsed, parentHeightMeasureSpec, heightUsed);
|
|
239
243
|
}
|
|
240
244
|
|
|
245
|
+
@Override
|
|
246
|
+
public ViewTooltip.TooltipView showAnchoredOverlay(@NonNull View anchorView, @NonNull OverlayAttachOptions overlayAttachOptions,
|
|
247
|
+
@NonNull ViewController<?> overlayViewController) {
|
|
248
|
+
if(view!=null){
|
|
249
|
+
return view.getAttachedOverlayContainer().addAnchoredView(anchorView, overlayViewController.getView(),
|
|
250
|
+
overlayAttachOptions.gravity.get());
|
|
251
|
+
}
|
|
252
|
+
return null;
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
public View getTabViewByTag(String id) {
|
|
256
|
+
int tabIndex = bottomTabs.getTabIndexByTag(id);
|
|
257
|
+
if (tabIndex != TAB_NOT_FOUND) {
|
|
258
|
+
return bottomTabs.getViewAtPosition(tabIndex);
|
|
259
|
+
}
|
|
260
|
+
return null;
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
@Override
|
|
264
|
+
public List<ViewController<?>> getChildren() {
|
|
265
|
+
return tabs;
|
|
266
|
+
}
|
|
267
|
+
|
|
241
268
|
@Override
|
|
242
269
|
public int getBottomInset(ViewController<?> child) {
|
|
243
270
|
return presenter.getBottomInset(resolveChildOptions(child)) + perform(getParentController(), 0, p -> p.getBottomInset(this));
|
|
@@ -2,28 +2,21 @@ package com.reactnativenavigation.viewcontrollers.child;
|
|
|
2
2
|
|
|
3
3
|
import android.app.Activity;
|
|
4
4
|
import android.content.res.Configuration;
|
|
5
|
-
import android.os.Build;
|
|
6
|
-
import android.util.Log;
|
|
7
5
|
import android.view.View;
|
|
8
6
|
import android.view.ViewGroup;
|
|
9
|
-
|
|
7
|
+
|
|
8
|
+
import androidx.annotation.CallSuper;
|
|
9
|
+
import androidx.core.view.ViewCompat;
|
|
10
|
+
import androidx.core.view.WindowInsetsCompat;
|
|
10
11
|
|
|
11
12
|
import com.reactnativenavigation.options.Options;
|
|
12
|
-
import com.reactnativenavigation.utils.LogKt;
|
|
13
|
-
import com.reactnativenavigation.viewcontrollers.parent.ParentController;
|
|
14
|
-
import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
|
|
15
|
-
import com.reactnativenavigation.viewcontrollers.viewcontroller.NoOpYellowBoxDelegate;
|
|
16
13
|
import com.reactnativenavigation.viewcontrollers.navigator.Navigator;
|
|
14
|
+
import com.reactnativenavigation.viewcontrollers.viewcontroller.NoOpYellowBoxDelegate;
|
|
15
|
+
import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
|
|
17
16
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
|
|
18
17
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.overlay.ViewControllerOverlay;
|
|
19
18
|
import com.reactnativenavigation.views.component.Component;
|
|
20
19
|
|
|
21
|
-
import androidx.annotation.CallSuper;
|
|
22
|
-
import androidx.core.graphics.Insets;
|
|
23
|
-
import androidx.core.view.ViewCompat;
|
|
24
|
-
import androidx.core.view.WindowCompat;
|
|
25
|
-
import androidx.core.view.WindowInsetsCompat;
|
|
26
|
-
|
|
27
20
|
public abstract class ChildController<T extends ViewGroup> extends ViewController<T> {
|
|
28
21
|
private final Presenter presenter;
|
|
29
22
|
private final ChildControllersRegistry childRegistry;
|
|
@@ -3,8 +3,9 @@ package com.reactnativenavigation.viewcontrollers.component;
|
|
|
3
3
|
import android.app.Activity;
|
|
4
4
|
import android.content.res.Configuration;
|
|
5
5
|
import android.view.View;
|
|
6
|
+
import android.view.ViewGroup;
|
|
6
7
|
|
|
7
|
-
import com.reactnativenavigation.
|
|
8
|
+
import com.reactnativenavigation.options.OverlayAttachOptions;
|
|
8
9
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ScrollEventListener;
|
|
9
10
|
import com.reactnativenavigation.options.Options;
|
|
10
11
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
|
|
@@ -13,9 +14,11 @@ import com.reactnativenavigation.viewcontrollers.viewcontroller.ReactViewCreator
|
|
|
13
14
|
import com.reactnativenavigation.viewcontrollers.child.ChildController;
|
|
14
15
|
import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
|
|
15
16
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
|
|
17
|
+
import com.reactnativenavigation.views.overlay.ViewTooltip;
|
|
16
18
|
import com.reactnativenavigation.views.component.ComponentLayout;
|
|
17
19
|
|
|
18
20
|
import androidx.annotation.NonNull;
|
|
21
|
+
import androidx.annotation.Nullable;
|
|
19
22
|
import androidx.core.graphics.Insets;
|
|
20
23
|
import androidx.core.view.ViewCompat;
|
|
21
24
|
import androidx.core.view.WindowInsetsCompat;
|
|
@@ -26,6 +29,11 @@ public class ComponentViewController extends ChildController<ComponentLayout> {
|
|
|
26
29
|
private final String componentName;
|
|
27
30
|
private final ComponentPresenter presenter;
|
|
28
31
|
private final ReactViewCreator viewCreator;
|
|
32
|
+
private boolean ignoreInsets = false;
|
|
33
|
+
|
|
34
|
+
public void ignoreInsets(boolean ignore) {
|
|
35
|
+
ignoreInsets = ignore;
|
|
36
|
+
}
|
|
29
37
|
|
|
30
38
|
private enum VisibilityState {Appear, Disappear}
|
|
31
39
|
|
|
@@ -78,14 +86,17 @@ public class ComponentViewController extends ChildController<ComponentLayout> {
|
|
|
78
86
|
if (view != null)
|
|
79
87
|
view.sendComponentWillStart();
|
|
80
88
|
super.onViewDidAppear();
|
|
81
|
-
view
|
|
82
|
-
|
|
89
|
+
if (view != null) {
|
|
90
|
+
view.requestApplyInsets();
|
|
91
|
+
if (lastVisibilityState == VisibilityState.Disappear)
|
|
92
|
+
view.sendComponentStart();
|
|
93
|
+
}
|
|
83
94
|
lastVisibilityState = VisibilityState.Appear;
|
|
84
95
|
}
|
|
85
96
|
|
|
86
97
|
@Override
|
|
87
98
|
public void onViewDisappear() {
|
|
88
|
-
if(lastVisibilityState == VisibilityState.Disappear)return;
|
|
99
|
+
if (lastVisibilityState == VisibilityState.Disappear) return;
|
|
89
100
|
lastVisibilityState = VisibilityState.Disappear;
|
|
90
101
|
if (view != null) view.sendComponentStop();
|
|
91
102
|
super.onViewDisappear();
|
|
@@ -125,7 +136,7 @@ public class ComponentViewController extends ChildController<ComponentLayout> {
|
|
|
125
136
|
|
|
126
137
|
@Override
|
|
127
138
|
public void applyTopInset() {
|
|
128
|
-
if (view != null) presenter.applyTopInsets(view, getTopInset());
|
|
139
|
+
if (view != null && !ignoreInsets) presenter.applyTopInsets(view, getTopInset());
|
|
129
140
|
}
|
|
130
141
|
|
|
131
142
|
@Override
|
|
@@ -137,23 +148,25 @@ public class ComponentViewController extends ChildController<ComponentLayout> {
|
|
|
137
148
|
|
|
138
149
|
@Override
|
|
139
150
|
public void applyBottomInset() {
|
|
140
|
-
if (view != null) presenter.applyBottomInset(view, getBottomInset());
|
|
151
|
+
if (view != null && !ignoreInsets) presenter.applyBottomInset(view, getBottomInset());
|
|
141
152
|
}
|
|
142
153
|
|
|
143
154
|
@Override
|
|
144
155
|
protected WindowInsetsCompat onApplyWindowInsets(View view, WindowInsetsCompat insets) {
|
|
145
156
|
ViewController<?> viewController = findController(view);
|
|
146
|
-
if (viewController == null || viewController.getView() == null) return insets;
|
|
147
|
-
|
|
157
|
+
if (viewController == null || viewController.getView() == null || ignoreInsets) return insets;
|
|
158
|
+
|
|
159
|
+
final int keyboardBottomInset = options.layout.adjustResize.get(true) ? insets.getInsets( WindowInsetsCompat.Type.ime()).bottom : 0;
|
|
148
160
|
final Insets systemBarsInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars() );
|
|
149
161
|
final int visibleNavBar = resolveCurrentOptions(presenter.defaultOptions).navigationBar.isVisible.isTrueOrUndefined()?1:0;
|
|
150
162
|
final WindowInsetsCompat finalInsets = new WindowInsetsCompat.Builder().setInsets(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime(),
|
|
151
163
|
Insets.of(systemBarsInsets.left,
|
|
152
164
|
0,
|
|
153
165
|
systemBarsInsets.right,
|
|
154
|
-
Math.max(visibleNavBar*systemBarsInsets.bottom,
|
|
166
|
+
Math.max(visibleNavBar*systemBarsInsets.bottom,keyboardBottomInset))
|
|
155
167
|
).build();
|
|
156
|
-
|
|
168
|
+
ViewCompat.onApplyWindowInsets(viewController.getView(), finalInsets);
|
|
169
|
+
return insets;
|
|
157
170
|
}
|
|
158
171
|
|
|
159
172
|
@Override
|
|
@@ -173,6 +186,15 @@ public class ComponentViewController extends ChildController<ComponentLayout> {
|
|
|
173
186
|
}
|
|
174
187
|
}
|
|
175
188
|
|
|
189
|
+
@Override
|
|
190
|
+
public ViewTooltip.TooltipView showAnchoredOverlay(@NonNull View anchorView, @NonNull OverlayAttachOptions overlayAttachOptions, @NonNull ViewController<?> overlayViewController) {
|
|
191
|
+
if (view != null) {
|
|
192
|
+
return view.getAttachedOverlayContainer().addAnchoredView(anchorView, overlayViewController.getView(),
|
|
193
|
+
overlayAttachOptions.gravity.get());
|
|
194
|
+
}
|
|
195
|
+
return null;
|
|
196
|
+
}
|
|
197
|
+
|
|
176
198
|
@Override
|
|
177
199
|
public void onConfigurationChanged(Configuration newConfig) {
|
|
178
200
|
super.onConfigurationChanged(newConfig);
|
|
@@ -14,6 +14,7 @@ import com.reactnativenavigation.viewcontrollers.viewcontroller.overlay.ModalOve
|
|
|
14
14
|
|
|
15
15
|
import java.util.ArrayList;
|
|
16
16
|
import java.util.EmptyStackException;
|
|
17
|
+
import java.util.LinkedList;
|
|
17
18
|
import java.util.List;
|
|
18
19
|
|
|
19
20
|
import androidx.annotation.Nullable;
|
|
@@ -142,6 +143,9 @@ public class ModalStack {
|
|
|
142
143
|
public boolean isEmpty() {
|
|
143
144
|
return modals.isEmpty();
|
|
144
145
|
}
|
|
146
|
+
public List<ViewController<?>> getChildren(){
|
|
147
|
+
return new LinkedList<>(modals);
|
|
148
|
+
}
|
|
145
149
|
|
|
146
150
|
public int size() {
|
|
147
151
|
return modals.size();
|
|
@@ -4,11 +4,13 @@ import android.app.Activity;
|
|
|
4
4
|
import android.content.res.Configuration;
|
|
5
5
|
import android.view.View;
|
|
6
6
|
import android.view.ViewGroup;
|
|
7
|
+
import android.view.WindowInsets;
|
|
7
8
|
|
|
8
9
|
import androidx.annotation.NonNull;
|
|
9
10
|
import androidx.annotation.Nullable;
|
|
10
11
|
import androidx.annotation.RestrictTo;
|
|
11
12
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
|
13
|
+
import androidx.core.view.WindowInsetsCompat;
|
|
12
14
|
|
|
13
15
|
import com.facebook.react.ReactInstanceManager;
|
|
14
16
|
import com.reactnativenavigation.options.Options;
|
|
@@ -80,8 +82,13 @@ public class Navigator extends ParentController<ViewGroup> {
|
|
|
80
82
|
rootLayout = new CoordinatorLayout(getActivity());
|
|
81
83
|
modalsLayout = new CoordinatorLayout(getActivity());
|
|
82
84
|
overlaysLayout = new CoordinatorLayout(getActivity());
|
|
85
|
+
overlayManager.setFindController(this::findController);
|
|
86
|
+
overlayManager.setFindAnchorView(this::findTooltipAnchorView);
|
|
87
|
+
overlayManager.setMainOverlayContainer(overlaysLayout);
|
|
83
88
|
}
|
|
84
89
|
|
|
90
|
+
|
|
91
|
+
|
|
85
92
|
public void bindViews() {
|
|
86
93
|
modalStack.setModalsLayout(modalsLayout);
|
|
87
94
|
modalStack.setRootLayout(rootLayout);
|
|
@@ -120,7 +127,7 @@ public class Navigator extends ParentController<ViewGroup> {
|
|
|
120
127
|
|
|
121
128
|
public void destroyViews() {
|
|
122
129
|
modalStack.destroy();
|
|
123
|
-
overlayManager.destroy(
|
|
130
|
+
overlayManager.destroy();
|
|
124
131
|
destroyRoot();
|
|
125
132
|
}
|
|
126
133
|
|
|
@@ -147,6 +154,7 @@ public class Navigator extends ParentController<ViewGroup> {
|
|
|
147
154
|
final ViewController<?> disappearing = previousRoot;
|
|
148
155
|
root = appearing;
|
|
149
156
|
root.setOverlay(new RootOverlay(getActivity(), contentLayout));
|
|
157
|
+
root.setParentController(this);
|
|
150
158
|
rootPresenter.setRoot(appearing, disappearing, defaultOptions, new CommandListenerAdapter(commandListener) {
|
|
151
159
|
@Override
|
|
152
160
|
public void onSuccess(String childId) {
|
|
@@ -206,16 +214,27 @@ public class Navigator extends ParentController<ViewGroup> {
|
|
|
206
214
|
modalStack.dismissAllModals(root, mergeOptions, listener);
|
|
207
215
|
}
|
|
208
216
|
|
|
217
|
+
@Override
|
|
218
|
+
public List<ViewController<?>> getChildren() {
|
|
219
|
+
final List<ViewController<?>> children = modalStack.getChildren();
|
|
220
|
+
children.add(root);
|
|
221
|
+
return children;
|
|
222
|
+
}
|
|
223
|
+
|
|
209
224
|
public void showOverlay(ViewController<?> overlay, CommandListener listener) {
|
|
210
|
-
|
|
225
|
+
final Options options = overlay.resolveCurrentOptions();
|
|
226
|
+
overlayManager.show( overlay,options.overlayOptions, listener);
|
|
227
|
+
|
|
211
228
|
}
|
|
212
229
|
|
|
213
230
|
public void dismissOverlay(final String componentId, CommandListener listener) {
|
|
214
|
-
overlayManager.dismiss(
|
|
231
|
+
overlayManager.dismiss( componentId, listener);
|
|
232
|
+
|
|
215
233
|
}
|
|
216
234
|
|
|
217
235
|
public void dismissAllOverlays(CommandListener listener) {
|
|
218
|
-
overlayManager.dismissAll(
|
|
236
|
+
overlayManager.dismissAll();
|
|
237
|
+
listener.onSuccess("");
|
|
219
238
|
}
|
|
220
239
|
|
|
221
240
|
@Nullable
|
|
@@ -269,7 +288,7 @@ public class Navigator extends ParentController<ViewGroup> {
|
|
|
269
288
|
overlayManager.onHostPause();
|
|
270
289
|
if (!modalStack.isEmpty()) {
|
|
271
290
|
modalStack.onHostPause();
|
|
272
|
-
if(modalStack.peekDisplayedOverCurrentContext()){
|
|
291
|
+
if (modalStack.peekDisplayedOverCurrentContext()) {
|
|
273
292
|
onViewDisappear();
|
|
274
293
|
}
|
|
275
294
|
} else {
|
|
@@ -281,7 +300,7 @@ public class Navigator extends ParentController<ViewGroup> {
|
|
|
281
300
|
overlayManager.onHostResume();
|
|
282
301
|
if (!modalStack.isEmpty()) {
|
|
283
302
|
modalStack.onHostResume();
|
|
284
|
-
if(modalStack.peekDisplayedOverCurrentContext()){
|
|
303
|
+
if (modalStack.peekDisplayedOverCurrentContext()) {
|
|
285
304
|
onViewDidAppear();
|
|
286
305
|
}
|
|
287
306
|
} else {
|