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 diff --git a/android/app/src/main/java/io/mobidex/MainApplication.java b/android/app/src/main/java/io/mobidex/MainApplication.java index 965787d..0989a60 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,10 +37,11 @@ protected String getJSMainModuleName() { public boolean isDebug() { return BuildConfig.DEBUG; } - + @Override public List createAdditionalReactPackages() { return Arrays.asList( + new MainReactPackage(), new ReactNativeExceptionHandlerPackage(), new ReactNativeRestartPackage(), new RNDeviceInfo(), @@ -48,6 +51,7 @@ public List createAdditionalReactPackages() { new VectorIconsPackage(), new RandomBytesPackage(), new BackgroundTimerPackage(), + new ViewUtilPackage(), new RNUUIDGeneratorPackage() ); } 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(); + } +}