package com.reactnativenavigation.react; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.view.KeyEvent; import android.view.View; import android.widget.EditText; import com.facebook.react.ReactInstanceManager; import com.reactnativenavigation.NavigationApplication; class JsDevReloadHandler { private static boolean shouldRefreshOnRR = false; private final BroadcastReceiver reloadReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { reload(); } }; void onResumeActivity() { if (getReactInstanceManager().getDevSupportManager().getDevSupportEnabled()) { NavigationApplication.instance.registerReceiver(reloadReceiver, new IntentFilter("react.native.RELOAD")); } } void onPauseActivity() { if (getReactInstanceManager().getDevSupportManager().getDevSupportEnabled()) { NavigationApplication.instance.unregisterReceiver(reloadReceiver); } } boolean onKeyUp(View currentFocus, int keyCode) { ReactInstanceManager reactInstanceManager = getReactInstanceManager(); if (reactInstanceManager != null && reactInstanceManager.getDevSupportManager().getDevSupportEnabled()) { if (keyCode == KeyEvent.KEYCODE_MENU) { reactInstanceManager.showDevOptionsDialog(); return true; } if (keyCode == KeyEvent.KEYCODE_R && !(currentFocus instanceof EditText)) { // Enable double-tap-R-to-reload if (shouldRefreshOnRR) { reload(); return true; } else { shouldRefreshOnRR = true; NavigationApplication.instance.runOnMainThread( new Runnable() { @Override public void run() { shouldRefreshOnRR = false; } }, 500); } } } return false; } private void reload() { getReactInstanceManager().getDevSupportManager().handleReloadJS(); shouldRefreshOnRR = false; } private ReactInstanceManager getReactInstanceManager() { return NavigationApplication .instance .getReactGateway() .getReactInstanceManager(); } }