From ba857425bc13f3e5fb5740441dbb46c2ece44c56 Mon Sep 17 00:00:00 2001 From: kirillzyusko Date: Fri, 24 Feb 2023 16:07:18 +0800 Subject: [PATCH] feat: add `navigationBarTranslucent` prop --- .../KeyboardControllerViewManager.kt | 4 ++++ .../managers/KeyboardControllerViewManagerImpl.kt | 7 ++++++- .../KeyboardControllerViewManager.kt | 5 +++++ src/animated.tsx | 10 ++++++++++ src/specs/KeyboardControllerViewNativeComponent.ts | 1 + src/types.ts | 1 + 6 files changed, 27 insertions(+), 1 deletion(-) diff --git a/android/src/fabric/java/com/reactnativekeyboardcontroller/KeyboardControllerViewManager.kt b/android/src/fabric/java/com/reactnativekeyboardcontroller/KeyboardControllerViewManager.kt index 0d570c631a..8759d440f8 100644 --- a/android/src/fabric/java/com/reactnativekeyboardcontroller/KeyboardControllerViewManager.kt +++ b/android/src/fabric/java/com/reactnativekeyboardcontroller/KeyboardControllerViewManager.kt @@ -27,6 +27,10 @@ class KeyboardControllerViewManager(mReactContext: ReactApplicationContext) : Re return manager.setStatusBarTranslucent(view, value) } + override fun setNavigationBarTranslucent(view: ReactViewGroup, value: Boolean) { + return manager.setNavigationBarTranslucent(view, value) + } + override fun getExportedCustomDirectEventTypeConstants(): MutableMap { return manager.getExportedCustomDirectEventTypeConstants() } diff --git a/android/src/main/java/com/reactnativekeyboardcontroller/managers/KeyboardControllerViewManagerImpl.kt b/android/src/main/java/com/reactnativekeyboardcontroller/managers/KeyboardControllerViewManagerImpl.kt index b74e620bbd..ea85f1d43b 100644 --- a/android/src/main/java/com/reactnativekeyboardcontroller/managers/KeyboardControllerViewManagerImpl.kt +++ b/android/src/main/java/com/reactnativekeyboardcontroller/managers/KeyboardControllerViewManagerImpl.kt @@ -17,6 +17,7 @@ import com.reactnativekeyboardcontroller.views.EdgeToEdgeReactViewGroup class KeyboardControllerViewManagerImpl(private val mReactContext: ReactApplicationContext) { private val TAG = KeyboardControllerViewManagerImpl::class.qualifiedName private var isStatusBarTranslucent = false + private var isNavigationBarTranslucent = false fun createViewInstance(reactContext: ThemedReactContext): ReactViewGroup { val view = EdgeToEdgeReactViewGroup(reactContext) @@ -44,7 +45,7 @@ class KeyboardControllerViewManagerImpl(private val mReactContext: ReactApplicat 0, if (this.isStatusBarTranslucent) 0 else insets?.getInsets(WindowInsetsCompat.Type.systemBars())?.top ?: 0, 0, - insets?.getInsets(WindowInsetsCompat.Type.navigationBars())?.bottom ?: 0, + if (this.isNavigationBarTranslucent) 0 else insets?.getInsets(WindowInsetsCompat.Type.navigationBars())?.bottom ?: 0, ) insets @@ -61,6 +62,10 @@ class KeyboardControllerViewManagerImpl(private val mReactContext: ReactApplicat this.isStatusBarTranslucent = isStatusBarTranslucent } + fun setNavigationBarTranslucent(view: ReactViewGroup, isNavigationBarTranslucent: Boolean) { + this.isNavigationBarTranslucent = isNavigationBarTranslucent + } + fun getExportedCustomDirectEventTypeConstants(): MutableMap { val map: MutableMap = MapBuilder.of( "topKeyboardMove", diff --git a/android/src/paper/java/com/reactnativekeyboardcontroller/KeyboardControllerViewManager.kt b/android/src/paper/java/com/reactnativekeyboardcontroller/KeyboardControllerViewManager.kt index 86d646520b..274105c754 100644 --- a/android/src/paper/java/com/reactnativekeyboardcontroller/KeyboardControllerViewManager.kt +++ b/android/src/paper/java/com/reactnativekeyboardcontroller/KeyboardControllerViewManager.kt @@ -21,6 +21,11 @@ class KeyboardControllerViewManager(mReactContext: ReactApplicationContext) : Re manager.setStatusBarTranslucent(view, isStatusBarTranslucent) } + @ReactProp(name = "navigationBarTranslucent") + fun setNavigationBarTranslucent(view: ReactViewGroup, isNavigationBarTranslucent: Boolean) { + manager.setNavigationBarTranslucent(view, isNavigationBarTranslucent) + } + override fun getExportedCustomDirectEventTypeConstants(): MutableMap { return manager.getExportedCustomDirectEventTypeConstants() } diff --git a/src/animated.tsx b/src/animated.tsx index 9ffde48fb6..a50700f981 100644 --- a/src/animated.tsx +++ b/src/animated.tsx @@ -49,11 +49,20 @@ type KeyboardProviderProps = { * @platform android */ statusBarTranslucent?: boolean; + /** + * Set the value to `true`, if you use translucent navigation bar on Android. + * Defaults to `false`. + * + * @see https://github.com/kirillzyusko/react-native-keyboard-controller/issues/119 + * @platform android + */ + navigationBarTranslucent?: boolean; }; export const KeyboardProvider = ({ children, statusBarTranslucent, + navigationBarTranslucent, }: KeyboardProviderProps) => { // animated values const progress = useAnimatedValue(0); @@ -131,6 +140,7 @@ export const KeyboardProvider = ({ onKeyboardMoveReanimated={handler} onKeyboardMoveStart={Platform.OS === 'ios' ? onKeyboardMove : undefined} onKeyboardMove={Platform.OS === 'android' ? onKeyboardMove : undefined} + navigationBarTranslucent={navigationBarTranslucent} statusBarTranslucent={statusBarTranslucent} style={styles.container} > diff --git a/src/specs/KeyboardControllerViewNativeComponent.ts b/src/specs/KeyboardControllerViewNativeComponent.ts index aa458a0251..754b03114b 100644 --- a/src/specs/KeyboardControllerViewNativeComponent.ts +++ b/src/specs/KeyboardControllerViewNativeComponent.ts @@ -16,6 +16,7 @@ type KeyboardMoveEvent = Readonly<{ export interface NativeProps extends ViewProps { // props statusBarTranslucent?: boolean; + navigationBarTranslucent?: boolean; // callbacks onKeyboardMove?: DirectEventHandler; onKeyboardMoveStart?: DirectEventHandler; diff --git a/src/types.ts b/src/types.ts index a541adfa12..4ec945e160 100644 --- a/src/types.ts +++ b/src/types.ts @@ -27,6 +27,7 @@ export type KeyboardControllerProps = { e: NativeSyntheticEvent> ) => void; statusBarTranslucent?: boolean; + navigationBarTranslucent?: boolean; } & ViewProps; export type KeyboardControllerModule = {