From 3cdd22da9e321aef58c35bd9961f212de0b565dd Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 26 Feb 2020 21:13:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E6=AD=A5=E8=BF=99=E6=A0=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RN/A/FitFullScreen/FitModule.java | 56 +++++++++++++++++-- index.js | 3 + 2 files changed, 55 insertions(+), 4 deletions(-) create mode 100644 index.js diff --git a/android/src/main/java/top/jerryyan/RN/A/FitFullScreen/FitModule.java b/android/src/main/java/top/jerryyan/RN/A/FitFullScreen/FitModule.java index 250b1da..0bc930f 100644 --- a/android/src/main/java/top/jerryyan/RN/A/FitFullScreen/FitModule.java +++ b/android/src/main/java/top/jerryyan/RN/A/FitFullScreen/FitModule.java @@ -1,12 +1,22 @@ package top.jerryyan.RN.A.FitFullScreen; +import android.graphics.Point; +import android.os.Build; +import android.provider.Settings; +import android.view.Display; +import android.view.WindowManager; + import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; import com.facebook.react.bridge.Callback; +import java.util.HashMap; +import java.util.Map; + public class FitModule extends ReactContextBaseJavaModule { private final ReactApplicationContext reactContext; + private final String MANUFACTURER = Build.MANUFACTURER; public FitModule(ReactApplicationContext reactContext) { super(reactContext); @@ -15,12 +25,50 @@ public class FitModule extends ReactContextBaseJavaModule { @Override public String getName() { - return "Fit"; + return "FitFullScreen"; + } + + @Override + public Map getConstants(){ + final Map constants = new HashMap<>(); + constants.put("MANUFACTURER", MANUFACTURER); + return constants; + } + + private boolean _isVirtualNavigationBarExist(){ + WindowManager windowManager = reactContext.getCurrentActivity().getWindowManager(); + if(windowManager == null){ + return false; + } + Display display = windowManager.getDefaultDisplay(); + Point size = new Point(); + Point realSize = new Point(); + display.getSize(size); // app绘制区域 + display.getRealSize(realSize); + return realSize.y != size.y; + } + + private boolean _isXiaoMiFullScreen(){ + return Settings.Global.getInt(reactContext.getContentResolver(), "force_fsg_nav_bar", 0) != 0; + } + + private boolean _isHuaWeiFullScreen(){ + try { + reactContext.getClassLoader().loadClass("com.huawei.android.util.HwNotchSizeUtil"); + return true; + } catch (ClassNotFoundException e) { + return false; + } } @ReactMethod - public void sampleMethod(String stringArgument, int numberArgument, Callback callback) { - // TODO: Implement some actually useful functionality - callback.invoke("Received numberArgument: " + numberArgument + " stringArgument: " + stringArgument); + public void checkFullScreen(Callback callback){ + if ("xiaomi".equalsIgnoreCase(MANUFACTURER)) { + callback.invoke(_isXiaoMiFullScreen()); + } + } + @ReactMethod + public void isNavBarExist(Callback callback){ + callback.invoke(_isVirtualNavigationBarExist()); } } diff --git a/index.js b/index.js new file mode 100644 index 0000000..17dc75e --- /dev/null +++ b/index.js @@ -0,0 +1,3 @@ +import { NativeModules } from "react-native"; + +export default NativeModules.FitFullScreen;