From 31782f850446ceebe87471a8eccc7b49773ff553 Mon Sep 17 00:00:00 2001 From: Ali Date: Wed, 9 Jan 2019 01:48:54 +0300 Subject: [PATCH 1/5] Import custom module for keep screen awake and full screen --- .../main/java/io/mobidex/MainApplication.java | 10 +- .../main/java/io/mobidex/ViewUtilModule.java | 93 +++++++++++++++++++ .../main/java/io/mobidex/ViewUtilPackage.java | 28 ++++++ 3 files changed, 130 insertions(+), 1 deletion(-) create mode 100644 android/app/src/main/java/io/mobidex/ViewUtilModule.java create mode 100644 android/app/src/main/java/io/mobidex/ViewUtilPackage.java diff --git a/android/app/src/main/java/io/mobidex/MainApplication.java b/android/app/src/main/java/io/mobidex/MainApplication.java index 965787d..dd78ce2 100644 --- a/android/app/src/main/java/io/mobidex/MainApplication.java +++ b/android/app/src/main/java/io/mobidex/MainApplication.java @@ -4,6 +4,7 @@ import com.bitgo.randombytes.RandomBytesPackage; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; +import com.facebook.react.shell.MainReactPackage; import com.horcrux.svg.SvgPackage; import com.idehub.GoogleAnalyticsBridge.GoogleAnalyticsBridgePackage; import com.learnium.RNDeviceInfo.RNDeviceInfo; @@ -12,6 +13,7 @@ import com.ocetnik.timer.BackgroundTimerPackage; import com.reactnativenavigation.NavigationApplication; import com.reactnativenavigation.react.NavigationReactNativeHost; +import io.mobidex.ViewUtilPackage; import com.reactnativenavigation.react.ReactGateway; import java.util.Arrays; @@ -35,7 +37,13 @@ protected String getJSMainModuleName() { public boolean isDebug() { return BuildConfig.DEBUG; } - + + protected List getPackages() { + return Arrays.asList( + new MainReactPackage(), + new ViewUtilPackage()); + } + @Override public List createAdditionalReactPackages() { return Arrays.asList( diff --git a/android/app/src/main/java/io/mobidex/ViewUtilModule.java b/android/app/src/main/java/io/mobidex/ViewUtilModule.java new file mode 100644 index 0000000..d9b2e64 --- /dev/null +++ b/android/app/src/main/java/io/mobidex/ViewUtilModule.java @@ -0,0 +1,93 @@ +package io.mobidex; + +import android.app.Activity; +import android.os.Build; +import android.os.Handler; +import android.view.View; +import android.view.WindowManager; + +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContextBaseJavaModule; +import com.facebook.react.bridge.ReactMethod; + +public class ViewUtilModule extends ReactContextBaseJavaModule { + + private final ReactApplicationContext reactContext; + private final Handler uiHandler; + private final Runnable enableImmersive; + private final Runnable disableImmersive; + + public ViewUtilModule(ReactApplicationContext reactContext) { + super(reactContext); + this.reactContext = reactContext; + + uiHandler = new Handler(reactContext.getMainLooper()); + enableImmersive = new Runnable() { + @Override + public void run() { + Activity activity = getCurrentActivity(); + if(activity != null && Build.VERSION.SDK_INT >= 14){ + activity.getWindow().getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_FULLSCREEN + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY + ); + } + } + }; + + disableImmersive = new Runnable(){ + @Override + public void run() { + Activity activity = getCurrentActivity(); + if(activity != null && Build.VERSION.SDK_INT >= 14){ + activity.getWindow().getDecorView().setSystemUiVisibility( + View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + ); + } + } + }; + } + + @Override + public String getName() { + return "ViewUtil"; + } + + @ReactMethod + public void enterFullScreen(){ + uiHandler.post(enableImmersive); + } + + @ReactMethod + public void disableFullScreen(){ + uiHandler.post(disableImmersive); + } + + @ReactMethod + public void keepScreenAwake() { + getCurrentActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + getCurrentActivity().getWindow() + .addFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + }); + } + + @ReactMethod + public void removeScreenAwake() { + getCurrentActivity().runOnUiThread(new Runnable() { + @Override + public void run() { + getCurrentActivity().getWindow() + .clearFlags(android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + } + }); + } +} diff --git a/android/app/src/main/java/io/mobidex/ViewUtilPackage.java b/android/app/src/main/java/io/mobidex/ViewUtilPackage.java new file mode 100644 index 0000000..436ee5c --- /dev/null +++ b/android/app/src/main/java/io/mobidex/ViewUtilPackage.java @@ -0,0 +1,28 @@ +package io.mobidex; + +import com.facebook.react.ReactPackage; +import com.facebook.react.bridge.NativeModule; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.uimanager.ViewManager; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class ViewUtilPackage implements ReactPackage { + + @Override + public List createNativeModules( + ReactApplicationContext reactContext) { + List modules = new ArrayList<>(); + + modules.add(new ViewUtilModule(reactContext)); + + return modules; + } + + @Override + public List createViewManagers(ReactApplicationContext reactContext) { + return Collections.emptyList(); + } +} From 0bc5bb77957e95973500e93051802055c912f7b4 Mon Sep 17 00:00:00 2001 From: Ali Date: Wed, 9 Jan 2019 01:50:01 +0300 Subject: [PATCH 2/5] Add files via upload --- ViewUtilModule.js | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ViewUtilModule.js diff --git a/ViewUtilModule.js b/ViewUtilModule.js new file mode 100644 index 0000000..2a09334 --- /dev/null +++ b/ViewUtilModule.js @@ -0,0 +1,6 @@ +/** + * This exposes our Android code into our RN project + */ + +import { NativeModules } from "react-native"; +module.exports = NativeModules.ViewUtil; From a3e9cf3f8e35ac2d2fd9d8f8855c6dd177d6baf7 Mon Sep 17 00:00:00 2001 From: Ali Date: Wed, 9 Jan 2019 21:21:42 +0300 Subject: [PATCH 3/5] Delete ViewUtilModule.js --- ViewUtilModule.js | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 ViewUtilModule.js diff --git a/ViewUtilModule.js b/ViewUtilModule.js deleted file mode 100644 index 2a09334..0000000 --- a/ViewUtilModule.js +++ /dev/null @@ -1,6 +0,0 @@ -/** - * This exposes our Android code into our RN project - */ - -import { NativeModules } from "react-native"; -module.exports = NativeModules.ViewUtil; From 1b1ad38bad4b43605cfd7cb6ca9dc5e132c883f8 Mon Sep 17 00:00:00 2001 From: Ali Date: Wed, 9 Jan 2019 21:23:51 +0300 Subject: [PATCH 4/5] Fix bugs in import the package --- android/app/src/main/java/io/mobidex/MainApplication.java | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/android/app/src/main/java/io/mobidex/MainApplication.java b/android/app/src/main/java/io/mobidex/MainApplication.java index dd78ce2..0989a60 100644 --- a/android/app/src/main/java/io/mobidex/MainApplication.java +++ b/android/app/src/main/java/io/mobidex/MainApplication.java @@ -38,15 +38,10 @@ public boolean isDebug() { return BuildConfig.DEBUG; } - protected List getPackages() { - return Arrays.asList( - new MainReactPackage(), - new ViewUtilPackage()); - } - @Override public List createAdditionalReactPackages() { return Arrays.asList( + new MainReactPackage(), new ReactNativeExceptionHandlerPackage(), new ReactNativeRestartPackage(), new RNDeviceInfo(), @@ -56,6 +51,7 @@ public List createAdditionalReactPackages() { new VectorIconsPackage(), new RandomBytesPackage(), new BackgroundTimerPackage(), + new ViewUtilPackage(), new RNUUIDGeneratorPackage() ); } From 2f8726c3f888b867a932dc18d62669d3f6c35e71 Mon Sep 17 00:00:00 2001 From: Ali Date: Wed, 9 Jan 2019 21:25:29 +0300 Subject: [PATCH 5/5] Use our custom module into Introscreen --- App/screens/onboarding/IntroScreen/base.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/App/screens/onboarding/IntroScreen/base.js b/App/screens/onboarding/IntroScreen/base.js index 245d2f9..1f2807c 100644 --- a/App/screens/onboarding/IntroScreen/base.js +++ b/App/screens/onboarding/IntroScreen/base.js @@ -1,5 +1,5 @@ import React, { Component } from 'react'; -import { Image } from 'react-native'; +import { NativeModules, Platform, Image } from 'react-native'; import { Text } from 'react-native-elements'; import { connect } from 'react-redux'; import { connect as connectNavigation } from '../../../../navigation'; @@ -11,7 +11,16 @@ import Button from '../../../components/Button'; import VerticalPadding from '../../../components/VerticalPadding'; import Row from '../../../components/Row'; -class BaseIntro extends Component { +const ViewUtil = NativeModules.ViewUtil; + +class BaseIntro extends Component { + componentDidMount() { + if (Platform.OS != 'ios') { + ViewUtil.keepScreenAwake(); + ViewUtil.enterFullScreen(); + }; + } + static get propTypes() { return { navigation: navigationProp.isRequired