react-native-navigation 8.1.0-alpha01 → 8.1.0-rc01-snapshot.1685
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/autolink/postlink/__snapshots__/appDelegateLinker.test.js.snap +12 -12
- package/index.e2e.js +2 -1
- package/lib/Mock/Components/ComponentScreen.tsx +2 -1
- package/lib/Mock/Components/LayoutComponent.tsx +9 -0
- package/lib/Mock/Components/SideMenu.tsx +27 -0
- package/lib/Mock/Layouts/BottomTabsNode.ts +4 -2
- package/lib/Mock/Layouts/LayoutNodeFactory.ts +14 -1
- package/lib/Mock/Layouts/ParentNode.ts +4 -0
- package/lib/Mock/Layouts/SideMenu.ts +87 -0
- package/lib/Mock/Stores/LayoutStore.ts +42 -10
- package/lib/Mock/actions/layoutActions.ts +11 -0
- package/lib/Mock/mocks/NativeCommandsSender.tsx +1 -0
- package/lib/android/app/build.gradle +22 -125
- package/lib/android/app/src/main/java/com/reactnativenavigation/FeatureToggles.kt +4 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/NavigationActivity.java +2 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java +4 -4
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationPackage.kt +27 -13
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationReactInitializer.java +2 -14
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationTurboModule.kt +291 -0
- package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/react/ReactGateway.java +23 -23
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/ReactView.java +6 -6
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/ColorUtils.java +11 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/MotionEvent.kt +4 -9
- package/lib/android/app/src/main/java/com/reactnativenavigation/utils/SystemUiUtils.kt +12 -17
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +0 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +20 -13
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentPresenter.java +18 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +5 -17
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +28 -13
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +13 -6
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt +35 -2
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/statusbar/StatusBarPresenter.kt +212 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/Presenter.java +10 -178
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/StatusBarColorAnimator.kt +28 -0
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewController.java +34 -7
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerVisibilityInfo.kt +5 -0
- package/lib/android/build.gradle +27 -15
- package/lib/dist/Mock/Components/ComponentScreen.js +2 -1
- package/lib/dist/Mock/Components/LayoutComponent.js +9 -0
- package/lib/dist/Mock/Components/SideMenu.d.ts +58 -0
- package/lib/dist/Mock/Components/SideMenu.js +25 -0
- package/lib/dist/Mock/Layouts/BottomTabsNode.d.ts +1 -1
- package/lib/dist/Mock/Layouts/BottomTabsNode.js +3 -2
- package/lib/dist/Mock/Layouts/LayoutNodeFactory.d.ts +2 -1
- package/lib/dist/Mock/Layouts/LayoutNodeFactory.js +10 -1
- package/lib/dist/Mock/Layouts/ParentNode.d.ts +1 -0
- package/lib/dist/Mock/Layouts/ParentNode.js +3 -0
- package/lib/dist/Mock/Layouts/SideMenu.d.ts +31 -0
- package/lib/dist/Mock/Layouts/SideMenu.js +80 -0
- package/lib/dist/Mock/Stores/LayoutStore.js +38 -9
- package/lib/dist/Mock/actions/layoutActions.d.ts +3 -0
- package/lib/dist/Mock/actions/layoutActions.js +11 -1
- package/lib/dist/Mock/mocks/NativeCommandsSender.js +1 -0
- package/lib/dist/src/adapters/NativeCommandsSender.d.ts +39 -4
- package/lib/dist/src/adapters/NativeCommandsSender.js +2 -2
- package/lib/dist/src/adapters/NativeRNNTurboEventEmitter.js +2 -9
- package/lib/dist/src/adapters/NativeRNNTurboModule.d.ts +9 -10
- package/lib/dist/src/adapters/NativeRNNTurboModule.js +1 -12
- package/lib/dist/src/commands/Commands.d.ts +13 -13
- package/lib/ios/AnimatedTextView.mm +1 -0
- package/lib/ios/Constants.mm +7 -1
- package/lib/ios/RNNAppDelegate.mm +3 -1
- package/lib/ios/RNNCommandsHandler.mm +1 -0
- package/lib/ios/RNNCustomTitleView.h +1 -0
- package/lib/ios/RNNCustomTitleView.mm +8 -1
- package/lib/ios/RNNEventEmitter.mm +3 -0
- package/lib/ios/RNNReactButtonView.mm +1 -1
- package/lib/ios/RNNReactView.h +3 -1
- package/lib/ios/RNNReactView.mm +45 -20
- package/lib/ios/TopBarTitlePresenter.mm +2 -0
- package/lib/ios/TurboModules/RNNTurboEventEmitter.mm +7 -0
- package/lib/ios/UINavigationController+RNNCommands.mm +4 -0
- package/lib/src/adapters/NativeCommandsSender.ts +7 -7
- package/lib/src/adapters/NativeRNNTurboEventEmitter.ts +3 -9
- package/lib/src/adapters/NativeRNNTurboModule.ts +23 -21
- package/package.json +14 -17
- package/react-native.config.js +1 -1
- package/lib/android/app/src/main/java/com/reactnativenavigation/react/DevPermissionRequest.java +0 -42
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/statusbar/StatusBarController.kt +0 -9
- package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/statusbar/StatusBarPresenter.kt +0 -9
- package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
- package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
- package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
- package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -71
- package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
- package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -83
- package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
- package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
- package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
- package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
- package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
- package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
- package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
- package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -71
- package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
- package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
- package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -83
- package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
- package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
- package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
- package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
- package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
- package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -28
- package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -28
- package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -71
- package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
- package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -25
- package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -83
- package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
- package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
- package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
- package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
- package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
- package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -28
- package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -28
- package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -70
- package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
- package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -25
- package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -70
- package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
- package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
- package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
- package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
- package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
- package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -28
- package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -28
- package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -70
- package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
- package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -25
- package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -83
- package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
- package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
- package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
- package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
- package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
- package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -28
- package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -28
- package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -67
- package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
- package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -25
- package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
- package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
- package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
- package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
- package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
- package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -67
- package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReactGateway.java +0 -72
- package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
- package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
- package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
- package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
- package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
- package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
- package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
- package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -66
- package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/ReactGateway.java +0 -72
- package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
- package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
- package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
- package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
- package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/options/parsers/ColorParser.kt +0 -38
- package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
- package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
- package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -66
- package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/ReactGateway.java +0 -72
- package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
- package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -87
- package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
- package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -12
- package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
- package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/options/parsers/ColorParser.kt +0 -38
- package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
- package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
- package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
- package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -12
- /package/lib/android/app/src/{reactNative63 → main}/java/com/reactnativenavigation/options/parsers/ColorParser.kt +0 -0
- /package/lib/android/app/src/{reactNative62 → main}/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -0
- /package/lib/android/app/src/{reactNative62 → main}/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -0
- /package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -0
- /package/lib/android/app/src/{reactNative51 → main}/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -0
- /package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -0
- /package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -0
- /package/lib/android/app/src/{reactNative63 → main}/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -0
- /package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -0
|
@@ -1,5 +1,9 @@
|
|
|
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
|
+
|
|
3
7
|
import android.animation.Animator;
|
|
4
8
|
import android.app.Activity;
|
|
5
9
|
import android.content.res.Configuration;
|
|
@@ -9,6 +13,8 @@ import android.view.ViewGroup;
|
|
|
9
13
|
import androidx.annotation.NonNull;
|
|
10
14
|
import androidx.annotation.RestrictTo;
|
|
11
15
|
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
|
16
|
+
import androidx.core.graphics.Insets;
|
|
17
|
+
import androidx.core.view.WindowInsetsCompat;
|
|
12
18
|
|
|
13
19
|
import com.aurelhubert.ahbottomnavigation.AHBottomNavigation;
|
|
14
20
|
import com.aurelhubert.ahbottomnavigation.AHBottomNavigationItem;
|
|
@@ -34,10 +40,6 @@ import java.util.Deque;
|
|
|
34
40
|
import java.util.LinkedList;
|
|
35
41
|
import java.util.List;
|
|
36
42
|
|
|
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
43
|
public class BottomTabsController extends ParentController<BottomTabsLayout> implements AHBottomNavigation.OnTabSelectedListener, TabSelector {
|
|
42
44
|
|
|
43
45
|
private BottomTabsContainer bottomTabsContainer;
|
|
@@ -84,6 +86,7 @@ public class BottomTabsController extends ParentController<BottomTabsLayout> imp
|
|
|
84
86
|
@Override
|
|
85
87
|
public BottomTabsLayout createView() {
|
|
86
88
|
BottomTabsLayout root = new BottomTabsLayout(getActivity());
|
|
89
|
+
|
|
87
90
|
this.bottomTabsContainer = createBottomTabsContainer();
|
|
88
91
|
this.bottomTabs = bottomTabsContainer.getBottomTabs();
|
|
89
92
|
Options resolveCurrentOptions = resolveCurrentOptions();
|
|
@@ -95,6 +98,7 @@ public class BottomTabsController extends ParentController<BottomTabsLayout> imp
|
|
|
95
98
|
bottomTabs.addItems(createTabs());
|
|
96
99
|
setInitialTab(resolveCurrentOptions);
|
|
97
100
|
tabsAttacher.attach();
|
|
101
|
+
|
|
98
102
|
return root;
|
|
99
103
|
}
|
|
100
104
|
|
|
@@ -271,11 +275,11 @@ public class BottomTabsController extends ParentController<BottomTabsLayout> imp
|
|
|
271
275
|
private void selectTab(int newIndex, boolean enableSelectionHistory) {
|
|
272
276
|
saveTabSelection(newIndex, enableSelectionHistory);
|
|
273
277
|
tabsAttacher.onTabSelected(tabs.get(newIndex));
|
|
274
|
-
|
|
278
|
+
getCurrentChild().onDeselected();
|
|
279
|
+
|
|
280
|
+
ViewController<?> previouslyVisible = getCurrentChild();
|
|
275
281
|
bottomTabs.setCurrentItem(newIndex, false);
|
|
276
|
-
|
|
277
|
-
getCurrentChild().onViewWillAppear();
|
|
278
|
-
getCurrentChild().onViewDidAppear();
|
|
282
|
+
getCurrentChild().onSelected(previouslyVisible);
|
|
279
283
|
}
|
|
280
284
|
|
|
281
285
|
private void saveTabSelection(int newIndex, boolean enableSelectionHistory) {
|
|
@@ -287,11 +291,6 @@ public class BottomTabsController extends ParentController<BottomTabsLayout> imp
|
|
|
287
291
|
}
|
|
288
292
|
}
|
|
289
293
|
|
|
290
|
-
@NonNull
|
|
291
|
-
private ViewGroup getCurrentView() {
|
|
292
|
-
return tabs.get(bottomTabs.getCurrentItem()).getView();
|
|
293
|
-
}
|
|
294
|
-
|
|
295
294
|
public Animator getPushAnimation(Options appearingOptions) {
|
|
296
295
|
return presenter.getPushAnimation(appearingOptions);
|
|
297
296
|
}
|
|
@@ -304,6 +303,14 @@ public class BottomTabsController extends ParentController<BottomTabsLayout> imp
|
|
|
304
303
|
return presenter.getPopAnimation(appearingOptions, disappearingOptions);
|
|
305
304
|
}
|
|
306
305
|
|
|
306
|
+
@Override
|
|
307
|
+
protected WindowInsetsCompat onApplyWindowInsets(View view, WindowInsetsCompat insets) {
|
|
308
|
+
Insets sysInsets = insets.getInsets(WindowInsetsCompat.Type.systemBars());
|
|
309
|
+
view.setPaddingRelative(0, 0, 0, sysInsets.bottom);
|
|
310
|
+
return WindowInsetsCompat.CONSUMED;
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
|
|
307
314
|
@RestrictTo(RestrictTo.Scope.TESTS)
|
|
308
315
|
public BottomTabs getBottomTabs() {
|
|
309
316
|
return bottomTabs;
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
package com.reactnativenavigation.viewcontrollers.component;
|
|
2
2
|
|
|
3
|
+
import android.animation.Animator;
|
|
4
|
+
|
|
5
|
+
import androidx.annotation.NonNull;
|
|
6
|
+
import androidx.annotation.Nullable;
|
|
7
|
+
|
|
3
8
|
import com.reactnativenavigation.options.Options;
|
|
9
|
+
import com.reactnativenavigation.viewcontrollers.statusbar.StatusBarPresenter;
|
|
4
10
|
import com.reactnativenavigation.views.component.ComponentLayout;
|
|
5
11
|
|
|
6
12
|
public class ComponentPresenter extends ComponentPresenterBase {
|
|
@@ -35,4 +41,16 @@ public class ComponentPresenter extends ComponentPresenterBase {
|
|
|
35
41
|
Options withDefault = options.withDefaultOptions(defaultOptions);
|
|
36
42
|
setBackgroundColor(view, withDefault);
|
|
37
43
|
}
|
|
44
|
+
|
|
45
|
+
@Nullable
|
|
46
|
+
public Animator getStatusBarPushAnimation(@NonNull Options appearingOptions) {
|
|
47
|
+
Options appearingOptionsWithDefault = appearingOptions.copy().withDefaultOptions(defaultOptions);
|
|
48
|
+
return StatusBarPresenter.instance.getStatusBarPushAnimation(appearingOptionsWithDefault);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
@Nullable
|
|
52
|
+
public Animator getStatusBarPopAnimation(@NonNull Options appearingOptions, @NonNull Options disappearingOptions) {
|
|
53
|
+
Options appearingOptionsWithDefault = appearingOptions.copy().withDefaultOptions(defaultOptions);
|
|
54
|
+
return StatusBarPresenter.instance.getStatusBarPopAnimation(appearingOptionsWithDefault, disappearingOptions);
|
|
55
|
+
}
|
|
38
56
|
}
|
|
@@ -17,13 +17,12 @@ import com.reactnativenavigation.options.Options;
|
|
|
17
17
|
import com.reactnativenavigation.utils.SystemUiUtils;
|
|
18
18
|
import com.reactnativenavigation.viewcontrollers.child.ChildController;
|
|
19
19
|
import com.reactnativenavigation.viewcontrollers.child.ChildControllersRegistry;
|
|
20
|
-
import com.reactnativenavigation.viewcontrollers.stack.statusbar.StatusBarController;
|
|
21
20
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
|
|
22
21
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ReactViewCreator;
|
|
23
22
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ScrollEventListener;
|
|
24
23
|
import com.reactnativenavigation.views.component.ComponentLayout;
|
|
25
24
|
|
|
26
|
-
public class ComponentViewController extends ChildController<ComponentLayout>
|
|
25
|
+
public class ComponentViewController extends ChildController<ComponentLayout> {
|
|
27
26
|
private final String componentName;
|
|
28
27
|
private final ComponentPresenter presenter;
|
|
29
28
|
private final ReactViewCreator viewCreator;
|
|
@@ -65,27 +64,16 @@ public class ComponentViewController extends ChildController<ComponentLayout> im
|
|
|
65
64
|
presenter.setDefaultOptions(defaultOptions);
|
|
66
65
|
}
|
|
67
66
|
|
|
68
|
-
@Override
|
|
69
|
-
public StatusBarController getStatusBarController() {
|
|
70
|
-
return this;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
67
|
@Nullable
|
|
74
68
|
@Override
|
|
75
|
-
public Animator
|
|
76
|
-
|
|
77
|
-
return super.presenter.getStatusBarPushAnimation(appearingOptions);
|
|
78
|
-
}
|
|
79
|
-
return null;
|
|
69
|
+
public Animator getPushAnimations(Options appearingOptions) {
|
|
70
|
+
return this.presenter.getStatusBarPushAnimation(appearingOptions);
|
|
80
71
|
}
|
|
81
72
|
|
|
82
73
|
@Nullable
|
|
83
74
|
@Override
|
|
84
|
-
public Animator
|
|
85
|
-
|
|
86
|
-
return super.presenter.getStatusBarPopAnimation(appearingOptions, disappearingOptions);
|
|
87
|
-
}
|
|
88
|
-
return null;
|
|
75
|
+
public Animator getPopAnimations(Options appearingOptions, Options disappearingOptions) {
|
|
76
|
+
return this.presenter.getStatusBarPopAnimation(appearingOptions, disappearingOptions);
|
|
89
77
|
}
|
|
90
78
|
|
|
91
79
|
@Override
|
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
package com.reactnativenavigation.viewcontrollers.stack;
|
|
2
2
|
|
|
3
|
+
import static com.reactnativenavigation.react.Constants.HARDWARE_BACK_BUTTON_ID;
|
|
4
|
+
import static com.reactnativenavigation.utils.CollectionUtils.requireLast;
|
|
5
|
+
import static com.reactnativenavigation.utils.CoordinatorLayoutUtils.matchParentWithBehaviour;
|
|
6
|
+
import static com.reactnativenavigation.utils.CoordinatorLayoutUtils.updateBottomMargin;
|
|
7
|
+
import static com.reactnativenavigation.utils.ObjectUtils.perform;
|
|
8
|
+
|
|
3
9
|
import android.app.Activity;
|
|
4
10
|
import android.content.res.Configuration;
|
|
5
11
|
import android.view.View;
|
|
6
12
|
import android.view.ViewGroup;
|
|
7
13
|
|
|
14
|
+
import androidx.annotation.NonNull;
|
|
15
|
+
import androidx.annotation.RestrictTo;
|
|
16
|
+
import androidx.annotation.Size;
|
|
17
|
+
import androidx.annotation.VisibleForTesting;
|
|
18
|
+
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
|
19
|
+
import androidx.viewpager.widget.ViewPager;
|
|
20
|
+
|
|
8
21
|
import com.facebook.react.ReactRootView;
|
|
9
22
|
import com.reactnativenavigation.options.ButtonOptions;
|
|
10
23
|
import com.reactnativenavigation.options.Options;
|
|
@@ -18,7 +31,9 @@ import com.reactnativenavigation.viewcontrollers.parent.ParentController;
|
|
|
18
31
|
import com.reactnativenavigation.viewcontrollers.stack.topbar.TopBarController;
|
|
19
32
|
import com.reactnativenavigation.viewcontrollers.stack.topbar.button.BackButtonHelper;
|
|
20
33
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.Presenter;
|
|
34
|
+
import com.reactnativenavigation.viewcontrollers.viewcontroller.TopBarVisibilityInfo;
|
|
21
35
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
|
|
36
|
+
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewControllerVisibilityInfo;
|
|
22
37
|
import com.reactnativenavigation.views.component.Component;
|
|
23
38
|
import com.reactnativenavigation.views.stack.StackBehaviour;
|
|
24
39
|
import com.reactnativenavigation.views.stack.StackLayout;
|
|
@@ -31,19 +46,6 @@ import java.util.Collection;
|
|
|
31
46
|
import java.util.Iterator;
|
|
32
47
|
import java.util.List;
|
|
33
48
|
|
|
34
|
-
import androidx.annotation.NonNull;
|
|
35
|
-
import androidx.annotation.RestrictTo;
|
|
36
|
-
import androidx.annotation.Size;
|
|
37
|
-
import androidx.annotation.VisibleForTesting;
|
|
38
|
-
import androidx.coordinatorlayout.widget.CoordinatorLayout;
|
|
39
|
-
import androidx.viewpager.widget.ViewPager;
|
|
40
|
-
|
|
41
|
-
import static com.reactnativenavigation.react.Constants.HARDWARE_BACK_BUTTON_ID;
|
|
42
|
-
import static com.reactnativenavigation.utils.CollectionUtils.*;
|
|
43
|
-
import static com.reactnativenavigation.utils.CoordinatorLayoutUtils.matchParentWithBehaviour;
|
|
44
|
-
import static com.reactnativenavigation.utils.CoordinatorLayoutUtils.updateBottomMargin;
|
|
45
|
-
import static com.reactnativenavigation.utils.ObjectUtils.perform;
|
|
46
|
-
|
|
47
49
|
public class StackController extends ParentController<StackLayout> {
|
|
48
50
|
|
|
49
51
|
private IdStack<ViewController<?>> stack = new IdStack<>();
|
|
@@ -95,6 +97,19 @@ public class StackController extends ParentController<StackLayout> {
|
|
|
95
97
|
return stack.peek();
|
|
96
98
|
}
|
|
97
99
|
|
|
100
|
+
@Override
|
|
101
|
+
public void onSelected(ViewController<?> previousVC) {
|
|
102
|
+
presenter.bindNewViewController(previousVC, this);
|
|
103
|
+
super.onSelected(previousVC);
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
@NonNull
|
|
107
|
+
@Override
|
|
108
|
+
public ViewControllerVisibilityInfo getVisibilityInfo() {
|
|
109
|
+
TopBarVisibilityInfo topBarInfo = topBarController.getVisibilityInfo();
|
|
110
|
+
return new ViewControllerVisibilityInfo(topBarInfo);
|
|
111
|
+
}
|
|
112
|
+
|
|
98
113
|
@Override
|
|
99
114
|
public void onAttachToParent() {
|
|
100
115
|
if (!isEmpty() && !getCurrentChild().isDestroyed() && !isViewShown()) {
|
|
@@ -37,6 +37,7 @@ import com.reactnativenavigation.viewcontrollers.stack.topbar.button.ButtonContr
|
|
|
37
37
|
import com.reactnativenavigation.viewcontrollers.stack.topbar.button.ButtonPresenter;
|
|
38
38
|
import com.reactnativenavigation.viewcontrollers.stack.topbar.button.IconResolver;
|
|
39
39
|
import com.reactnativenavigation.viewcontrollers.stack.topbar.title.TitleBarReactViewController;
|
|
40
|
+
import com.reactnativenavigation.viewcontrollers.statusbar.StatusBarPresenter;
|
|
40
41
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.IReactView;
|
|
41
42
|
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController;
|
|
42
43
|
import com.reactnativenavigation.views.stack.topbar.TopBar;
|
|
@@ -191,6 +192,12 @@ public class StackPresenter {
|
|
|
191
192
|
componentLeftButtons.remove(child.getView());
|
|
192
193
|
}
|
|
193
194
|
|
|
195
|
+
public void bindNewViewController(ViewController<?> previousVC, ViewController<?> newVC) {
|
|
196
|
+
Options options = newVC.resolveCurrentOptions(defaultOptions);
|
|
197
|
+
topBarController.bindNewViewController(previousVC, newVC);
|
|
198
|
+
StatusBarPresenter.instance.bindViewController(options.statusBar);
|
|
199
|
+
}
|
|
200
|
+
|
|
194
201
|
private void destroyButtons(@Nullable Map<String, ButtonController> buttons) {
|
|
195
202
|
if (buttons != null)
|
|
196
203
|
forEach(buttons.values(), ViewController::destroy);
|
|
@@ -423,17 +430,17 @@ public class StackPresenter {
|
|
|
423
430
|
Options appearingOptions) {
|
|
424
431
|
return CollectionUtils.asList(
|
|
425
432
|
topBarController.getPushAnimation(appearingOptions, getTopBarTranslationAnimationDelta(stack, appearingCtrl)),
|
|
426
|
-
perform(appearingCtrl
|
|
427
|
-
perform(bottomTabsController, null, btc -> btc.getPushAnimation(appearingOptions)
|
|
428
|
-
);
|
|
433
|
+
perform(appearingCtrl, null, vc -> vc.getPushAnimations(appearingOptions)),
|
|
434
|
+
perform(bottomTabsController, null, btc -> btc.getPushAnimation(appearingOptions)
|
|
435
|
+
));
|
|
429
436
|
}
|
|
430
437
|
|
|
431
438
|
public List<Animator> getAdditionalPopAnimations(Options appearingOptions, Options disappearingOptions, ViewController<?> appearingCtrl) {
|
|
432
439
|
return CollectionUtils.asList(
|
|
433
440
|
topBarController.getPopAnimation(appearingOptions, disappearingOptions),
|
|
434
|
-
perform(appearingCtrl
|
|
435
|
-
perform(bottomTabsController, null, btc -> btc.getPopAnimation(appearingOptions, disappearingOptions)
|
|
436
|
-
|
|
441
|
+
perform(appearingCtrl, null, vc -> vc.getPopAnimations(appearingOptions, disappearingOptions)),
|
|
442
|
+
perform(bottomTabsController, null, btc -> btc.getPopAnimation(appearingOptions, disappearingOptions)
|
|
443
|
+
));
|
|
437
444
|
}
|
|
438
445
|
|
|
439
446
|
public List<Animator> getAdditionalSetRootAnimations(StackController stack, ViewController<?> appearing,
|
|
@@ -4,12 +4,14 @@ import android.animation.Animator
|
|
|
4
4
|
import android.animation.AnimatorSet
|
|
5
5
|
import android.content.Context
|
|
6
6
|
import android.graphics.drawable.ColorDrawable
|
|
7
|
+
import android.os.Build
|
|
7
8
|
import android.view.MenuItem
|
|
8
9
|
import android.view.View
|
|
9
10
|
import androidx.core.animation.addListener
|
|
11
|
+
import androidx.core.animation.doOnEnd
|
|
10
12
|
import androidx.viewpager.widget.ViewPager
|
|
11
13
|
import com.reactnativenavigation.RNNFeatureToggles
|
|
12
|
-
import com.reactnativenavigation.RNNToggles
|
|
14
|
+
import com.reactnativenavigation.RNNToggles
|
|
13
15
|
import com.reactnativenavigation.options.Alignment
|
|
14
16
|
import com.reactnativenavigation.options.AnimationOptions
|
|
15
17
|
import com.reactnativenavigation.options.Options
|
|
@@ -20,6 +22,8 @@ import com.reactnativenavigation.utils.ViewUtils
|
|
|
20
22
|
import com.reactnativenavigation.utils.resetViewProperties
|
|
21
23
|
import com.reactnativenavigation.viewcontrollers.stack.topbar.button.ButtonController
|
|
22
24
|
import com.reactnativenavigation.viewcontrollers.stack.topbar.title.TitleBarReactViewController
|
|
25
|
+
import com.reactnativenavigation.viewcontrollers.viewcontroller.TopBarVisibilityInfo
|
|
26
|
+
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController
|
|
23
27
|
import com.reactnativenavigation.views.animations.ColorAnimator
|
|
24
28
|
import com.reactnativenavigation.views.stack.StackLayout
|
|
25
29
|
import com.reactnativenavigation.views.stack.topbar.TopBar
|
|
@@ -43,6 +47,9 @@ open class TopBarController(
|
|
|
43
47
|
val leftButtonCount: Int
|
|
44
48
|
get() = leftButtonBar.buttonCount
|
|
45
49
|
|
|
50
|
+
val visibilityInfo: TopBarVisibilityInfo
|
|
51
|
+
get() = TopBarVisibilityInfo(view.isShown, getBackgroundColor())
|
|
52
|
+
|
|
46
53
|
fun createView(context: Context, parent: StackLayout): TopBar {
|
|
47
54
|
if (!::view.isInitialized) {
|
|
48
55
|
view = createTopBar(context, parent)
|
|
@@ -73,6 +80,14 @@ open class TopBarController(
|
|
|
73
80
|
}
|
|
74
81
|
}
|
|
75
82
|
|
|
83
|
+
fun getBackgroundColor(): Int? {
|
|
84
|
+
return if (view.background is ColorDrawable) {
|
|
85
|
+
(view.background as ColorDrawable).color
|
|
86
|
+
} else {
|
|
87
|
+
null
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
76
91
|
fun getRightButton(index: Int): MenuItem = rightButtonBar.getButton(index)
|
|
77
92
|
|
|
78
93
|
fun getPushAnimation(appearingOptions: Options, additionalDy: Float = 0f): Animator? {
|
|
@@ -132,6 +147,24 @@ open class TopBarController(
|
|
|
132
147
|
)
|
|
133
148
|
}
|
|
134
149
|
|
|
150
|
+
fun bindNewViewController(previousVC: ViewController<*>?, newVC: ViewController<*>?) {
|
|
151
|
+
if (!RNNFeatureToggles.isEnabled(RNNToggles.TOP_BAR_COLOR_ANIMATION__TABS)) {
|
|
152
|
+
return
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
previousVC?.visibilityInfo?.topBarVisibilityInfo?.solidColor?.let { fromColor ->
|
|
156
|
+
newVC?.visibilityInfo?.topBarVisibilityInfo?.solidColor?.let { toColor ->
|
|
157
|
+
colorAnimator.getAnimation(view, fromColor, toColor).apply {
|
|
158
|
+
doOnEnd {
|
|
159
|
+
hasPendingColorAnim = false
|
|
160
|
+
}
|
|
161
|
+
hasPendingColorAnim = true
|
|
162
|
+
start()
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
|
|
135
168
|
fun show() {
|
|
136
169
|
if (ViewUtils.isVisible(view) || appearAnimator.isAnimatingShow()) return
|
|
137
170
|
view.resetViewProperties()
|
|
@@ -191,7 +224,7 @@ open class TopBarController(
|
|
|
191
224
|
|
|
192
225
|
if (targetColor.hasValue()
|
|
193
226
|
&& view.background is ColorDrawable
|
|
194
|
-
&& RNNFeatureToggles.isEnabled(
|
|
227
|
+
&& RNNFeatureToggles.isEnabled(RNNToggles.TOP_BAR_COLOR_ANIMATION__PUSH)) {
|
|
195
228
|
return colorAnimator.getAnimation(
|
|
196
229
|
view,
|
|
197
230
|
(view.background as ColorDrawable).color,
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
package com.reactnativenavigation.viewcontrollers.statusbar
|
|
2
|
+
|
|
3
|
+
import android.animation.Animator
|
|
4
|
+
import android.app.Activity
|
|
5
|
+
import android.graphics.Color
|
|
6
|
+
import android.view.View
|
|
7
|
+
import android.view.Window
|
|
8
|
+
import com.reactnativenavigation.RNNFeatureToggles.isEnabled
|
|
9
|
+
import com.reactnativenavigation.RNNToggles
|
|
10
|
+
import com.reactnativenavigation.options.Options
|
|
11
|
+
import com.reactnativenavigation.options.StatusBarOptions
|
|
12
|
+
import com.reactnativenavigation.options.StatusBarOptions.TextColorScheme
|
|
13
|
+
import com.reactnativenavigation.options.params.Bool
|
|
14
|
+
import com.reactnativenavigation.utils.ColorUtils.isColorLight
|
|
15
|
+
import com.reactnativenavigation.utils.StubAnimationListener.Companion.onAnimatorEnd
|
|
16
|
+
import com.reactnativenavigation.utils.SystemUiUtils.clearStatusBarTranslucency
|
|
17
|
+
import com.reactnativenavigation.utils.SystemUiUtils.getStatusBarColor
|
|
18
|
+
import com.reactnativenavigation.utils.SystemUiUtils.hideStatusBar
|
|
19
|
+
import com.reactnativenavigation.utils.SystemUiUtils.isTranslucent
|
|
20
|
+
import com.reactnativenavigation.utils.SystemUiUtils.setStatusBarColor
|
|
21
|
+
import com.reactnativenavigation.utils.SystemUiUtils.setStatusBarColorScheme
|
|
22
|
+
import com.reactnativenavigation.utils.SystemUiUtils.setStatusBarTranslucent
|
|
23
|
+
import com.reactnativenavigation.utils.SystemUiUtils.showStatusBar
|
|
24
|
+
import com.reactnativenavigation.viewcontrollers.viewcontroller.StatusBarColorAnimator
|
|
25
|
+
import com.reactnativenavigation.viewcontrollers.viewcontroller.ViewController
|
|
26
|
+
import java.lang.ref.WeakReference
|
|
27
|
+
|
|
28
|
+
class StatusBarPresenter private constructor(
|
|
29
|
+
activity: Activity,
|
|
30
|
+
private val sbColorAnimator: StatusBarColorAnimator = StatusBarColorAnimator(activity)) {
|
|
31
|
+
|
|
32
|
+
private val window = WeakReference(activity.window)
|
|
33
|
+
private var hasPendingColorAnim = false
|
|
34
|
+
|
|
35
|
+
fun applyOptions(viewController: ViewController<*>, options: StatusBarOptions) {
|
|
36
|
+
if (!hasPendingColorAnim) {
|
|
37
|
+
setStatusBarBackgroundColor(options)
|
|
38
|
+
setTranslucent(options)
|
|
39
|
+
}
|
|
40
|
+
setTextColorScheme(options)
|
|
41
|
+
setStatusBarVisible(viewController, options.visible)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
fun mergeOptions(view: View, statusBar: StatusBarOptions) {
|
|
45
|
+
mergeStatusBarBackgroundColor(statusBar)
|
|
46
|
+
mergeTextColorScheme(statusBar)
|
|
47
|
+
mergeTranslucent(statusBar)
|
|
48
|
+
mergeStatusBarVisible(view, statusBar.visible)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
fun onConfigurationChanged(options: StatusBarOptions) {
|
|
52
|
+
setStatusBarBackgroundColor(options)
|
|
53
|
+
setTextColorScheme(options)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
fun bindViewController(newOptions: StatusBarOptions) {
|
|
57
|
+
if (!isEnabled(RNNToggles.TOP_BAR_COLOR_ANIMATION__TABS)) {
|
|
58
|
+
return
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (newOptions.backgroundColor.canApplyValue()) {
|
|
62
|
+
val currentColor = getCurrentStatusBarBackgroundColor() ?: return
|
|
63
|
+
val newColor = getStatusBarBackgroundColor(newOptions)
|
|
64
|
+
createStatusBarColorAnimation(
|
|
65
|
+
from = currentColor,
|
|
66
|
+
to = newColor,
|
|
67
|
+
translucent = newOptions.translucent.isTrue,
|
|
68
|
+
).start()
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
fun getStatusBarPushAnimation(appearingOptions: Options): Animator? =
|
|
73
|
+
if (isEnabled(RNNToggles.TOP_BAR_COLOR_ANIMATION__PUSH)) {
|
|
74
|
+
getStatusBarColorAnimation(appearingOptions.statusBar)
|
|
75
|
+
} else null
|
|
76
|
+
|
|
77
|
+
fun getStatusBarPopAnimation(appearingOptions: Options, disappearingOptions: Options): Animator? =
|
|
78
|
+
if (isEnabled(RNNToggles.TOP_BAR_COLOR_ANIMATION__PUSH)) {
|
|
79
|
+
getStatusBarColorAnimation(appearingOptions.statusBar)
|
|
80
|
+
} else null
|
|
81
|
+
|
|
82
|
+
private fun setStatusBarBackgroundColor(statusBar: StatusBarOptions) {
|
|
83
|
+
if (statusBar.backgroundColor.canApplyValue()) {
|
|
84
|
+
val statusBarBackgroundColor: Int = getStatusBarBackgroundColor(statusBar)
|
|
85
|
+
setStatusBarBackgroundColor(statusBarBackgroundColor, statusBar.translucent.isTrue)
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
private fun setStatusBarBackgroundColor(color: Int, translucent: Boolean) {
|
|
90
|
+
setStatusBarColor(window.get(), color, translucent)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
private fun getStatusBarBackgroundColor(statusBar: StatusBarOptions): Int {
|
|
94
|
+
val defaultColor =
|
|
95
|
+
if (statusBar.visible.isTrueOrUndefined) Color.BLACK else Color.TRANSPARENT
|
|
96
|
+
return statusBar.backgroundColor.get(defaultColor)!!
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
private fun setTextColorScheme(statusBar: StatusBarOptions) {
|
|
100
|
+
val view = window.get()?.decorView
|
|
101
|
+
//View.post is a Workaround, added to solve internal Samsung
|
|
102
|
+
//Android 9 issues. For more info see https://github.com/wix/react-native-navigation/pull/7231
|
|
103
|
+
view?.post {
|
|
104
|
+
setStatusBarColorScheme(
|
|
105
|
+
window.get(),
|
|
106
|
+
view,
|
|
107
|
+
isDarkTextColorScheme(statusBar)
|
|
108
|
+
)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
private fun setTranslucent(options: StatusBarOptions) {
|
|
113
|
+
val window = window.get()
|
|
114
|
+
if (options.translucent.isTrue) {
|
|
115
|
+
setStatusBarTranslucent(window)
|
|
116
|
+
} else if (isTranslucent(window)) {
|
|
117
|
+
clearStatusBarTranslucency(window)
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
private fun setStatusBarVisible(viewController: ViewController<*>, visible: Bool) {
|
|
122
|
+
val window = window.get() ?: return
|
|
123
|
+
val view = if (viewController.view != null) viewController.view else window.decorView
|
|
124
|
+
if (visible.isFalse) {
|
|
125
|
+
hideStatusBar(window, view)
|
|
126
|
+
} else {
|
|
127
|
+
showStatusBar(window, view)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
private fun mergeStatusBarBackgroundColor(statusBar: StatusBarOptions) {
|
|
132
|
+
if (statusBar.backgroundColor.hasValue()) {
|
|
133
|
+
val statusBarBackgroundColor = getStatusBarBackgroundColor(statusBar)
|
|
134
|
+
setStatusBarColor(
|
|
135
|
+
window.get(), statusBarBackgroundColor,
|
|
136
|
+
statusBar.translucent.isTrue
|
|
137
|
+
)
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
private fun mergeTextColorScheme(statusBar: StatusBarOptions) {
|
|
142
|
+
if (!statusBar.textColorScheme.hasValue()) return
|
|
143
|
+
setTextColorScheme(statusBar)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
private fun mergeTranslucent(options: StatusBarOptions) {
|
|
147
|
+
val window: Window = window.get() ?: return
|
|
148
|
+
if (options.translucent.isTrue) {
|
|
149
|
+
setStatusBarTranslucent(window)
|
|
150
|
+
} else if (options.translucent.isFalse && isTranslucent(window)) {
|
|
151
|
+
clearStatusBarTranslucency(window)
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
private fun mergeStatusBarVisible(view: View, visible: Bool) {
|
|
156
|
+
if (visible.hasValue()) {
|
|
157
|
+
if (visible.isTrue) {
|
|
158
|
+
showStatusBar(window.get(), view)
|
|
159
|
+
} else {
|
|
160
|
+
hideStatusBar(window.get(), view)
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
private fun isDarkTextColorScheme(statusBar: StatusBarOptions): Boolean {
|
|
166
|
+
if (statusBar.textColorScheme == TextColorScheme.Dark) {
|
|
167
|
+
return true
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
if (statusBar.textColorScheme == TextColorScheme.Light) {
|
|
171
|
+
return false
|
|
172
|
+
}
|
|
173
|
+
return isColorLight(getStatusBarBackgroundColor(statusBar))
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
private fun getStatusBarColorAnimation(statusBarOptions: StatusBarOptions): Animator? {
|
|
177
|
+
if (isEnabled(RNNToggles.TOP_BAR_COLOR_ANIMATION__TABS)) {
|
|
178
|
+
getCurrentStatusBarBackgroundColor()?.let { currentColor ->
|
|
179
|
+
val targetColor = statusBarOptions.backgroundColor
|
|
180
|
+
|
|
181
|
+
if (targetColor.hasValue()) {
|
|
182
|
+
val translucent = statusBarOptions.translucent.isTrue
|
|
183
|
+
return createStatusBarColorAnimation(
|
|
184
|
+
from = currentColor,
|
|
185
|
+
to = targetColor.get(),
|
|
186
|
+
translucent = translucent,
|
|
187
|
+
)
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return null
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
private fun createStatusBarColorAnimation(from: Int, to: Int, translucent: Boolean): Animator =
|
|
195
|
+
sbColorAnimator.getAnimator(from, to, translucent).apply {
|
|
196
|
+
addListener(onAnimatorEnd {
|
|
197
|
+
hasPendingColorAnim = false
|
|
198
|
+
})
|
|
199
|
+
hasPendingColorAnim = true
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
private fun getCurrentStatusBarBackgroundColor() =
|
|
203
|
+
getStatusBarColor(window.get())
|
|
204
|
+
|
|
205
|
+
companion object {
|
|
206
|
+
lateinit var instance: StatusBarPresenter
|
|
207
|
+
|
|
208
|
+
fun init(activity: Activity) {
|
|
209
|
+
instance = StatusBarPresenter(activity)
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|