package com.reactnativenavigation;
import android.app.Application;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.Nullable;
import android.support.v4.app.ActivityOptionsCompat;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.ReactContext;
import com.reactnativenavigation.bridge.EventEmitter;
import com.reactnativenavigation.controllers.ActivityCallbacks;
import com.reactnativenavigation.react.NavigationReactGateway;
import com.reactnativenavigation.react.ReactGateway;
import java.util.List;
public abstract class NavigationApplication extends Application implements ReactApplication {
public static NavigationApplication instance;
private NavigationReactGateway reactGateway;
private EventEmitter eventEmitter;
private Handler handler;
private ActivityCallbacks activityCallbacks;
@Override
public void onCreate() {
super.onCreate();
instance = this;
handler = new Handler(getMainLooper());
reactGateway = new NavigationReactGateway();
eventEmitter = new EventEmitter(reactGateway);
activityCallbacks = new ActivityCallbacks();
}
@Override
public void startActivity(Intent intent) {
String animationType = intent.getStringExtra("animationType");
if (animationType != null && animationType.equals("fade")) {
Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getApplicationContext(),
android.R.anim.fade_in,
android.R.anim.fade_out
).toBundle();
super.startActivity(intent, bundle);
} else {
super.startActivity(intent);
}
}
public void startReactContextOnceInBackgroundAndExecuteJS() {
reactGateway.startReactContextOnceInBackgroundAndExecuteJS();
}
public void runOnMainThread(Runnable runnable) {
handler.post(runnable);
}
public void runOnMainThread(Runnable runnable, long delay) {
handler.postDelayed(runnable, delay);
}
public ReactGateway getReactGateway() {
return reactGateway;
}
public ActivityCallbacks getActivityCallbacks() {
return activityCallbacks;
}
protected void setActivityCallbacks(ActivityCallbacks activityLifecycleCallbacks) {
this.activityCallbacks = activityLifecycleCallbacks;
}
public boolean isReactContextInitialized() {
return reactGateway.isInitialized();
}
public void onReactInitialized(ReactContext reactContext) {
// nothing
}
@Override
public ReactNativeHost getReactNativeHost() {
return reactGateway.getReactNativeHost();
}
public EventEmitter getEventEmitter() {
return eventEmitter;
}
/**
* @see ReactNativeHost#getJSMainModuleName()
*/
@Nullable
public String getJSMainModuleName() {
return null;
}
/**
* @see ReactNativeHost#getJSBundleFile()
*/
@Nullable
public String getJSBundleFile() {
return null;
}
/**
* @see ReactNativeHost#getBundleAssetName()
*/
@Nullable
public String getBundleAssetName() {
return null;
}
public abstract boolean isDebug();
@Nullable
public abstract List<ReactPackage> createAdditionalReactPackages();
}