From 8a6c7337277933822192a90ef255fab46ccfa7e5 Mon Sep 17 00:00:00 2001 From: Evgeniy Kozhich Date: Mon, 26 Jul 2021 11:59:58 +0300 Subject: [PATCH] add background nav color setter --- .gitignore | 2 ++ .../RNDetectSoftwareNavigationBarModule.java | 16 ++++++++++++++++ index.js | 14 ++++++++++++-- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index d56d565..b01c852 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.DS_Store + # Built application files *.apk *.ap_ diff --git a/android/src/main/java/com/reactlibrary/RNDetectSoftwareNavigationBarModule.java b/android/src/main/java/com/reactlibrary/RNDetectSoftwareNavigationBarModule.java index 89d7fca..9b14311 100644 --- a/android/src/main/java/com/reactlibrary/RNDetectSoftwareNavigationBarModule.java +++ b/android/src/main/java/com/reactlibrary/RNDetectSoftwareNavigationBarModule.java @@ -1,8 +1,10 @@ package com.reactlibrary; +import android.app.Activity; import android.content.Context; import android.content.res.Resources; +import android.graphics.Color; import android.os.Build; import android.provider.Settings; import android.util.DisplayMetrics; @@ -10,9 +12,12 @@ import android.view.ViewConfiguration; import android.view.WindowManager; +import androidx.annotation.RequiresApi; + import com.facebook.react.bridge.LifecycleEventListener; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; @@ -49,6 +54,7 @@ public void onHostResume() { } + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1) @Override public Map getConstants() { final Map constants = new HashMap<>(); @@ -79,6 +85,16 @@ public Map getConstants() { return constants; } + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + @ReactMethod + public void setNavBackgroundColor(String color) { + if (color != null) { + int newColor = Color.parseColor(color); + ((Activity) mReactContext.getApplicationContext()).getWindow().setNavigationBarColor(newColor); + } + } + + @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1) private boolean hasPermanentMenuKey() { final Context ctx = getReactApplicationContext(); diff --git a/index.js b/index.js index cca91ff..35603c5 100644 --- a/index.js +++ b/index.js @@ -1,14 +1,16 @@ import { NativeModules, Platform } from 'react-native'; +const DectectModule = NativeModules.RNDetectSoftwareNavigationBar; + export function get(dim) { if (Platform.OS !== 'android') { return 0; } else { try { - if (!NativeModules.RNDetectSoftwareNavigationBar) { + if (!DectectModule) { throw "RNDetectSoftwareNavigationBar not defined. Try rebuilding your project. e.g. react-native run-android"; } - const result = NativeModules.RNDetectSoftwareNavigationBar[dim]; + const result = DectectModule[dim]; if (typeof result !== 'number') { return result; @@ -48,6 +50,14 @@ export function isEmulator() { return get('IS_EMULATOR'); } +export function setNavBackgroundColor(color = '#ffffff') { + if (!DectectModule) { + throw "RNDetectSoftwareNavigationBar not defined. Try rebuilding your project. e.g. react-native run-android"; + } + + DectectModule.setNavBackgroundColor(color); +} + // stay compatible with pre-es6 exports export default { get,