package com.reactnativenavigation.controllers;
import android.content.Intent;
import android.os.Bundle;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.Promise;
import com.reactnativenavigation.NavigationApplication;
import com.reactnativenavigation.params.ActivityParams;
import com.reactnativenavigation.params.ContextualMenuParams;
import com.reactnativenavigation.params.FabParams;
import com.reactnativenavigation.params.LightBoxParams;
import com.reactnativenavigation.params.ScreenParams;
import com.reactnativenavigation.params.SlidingOverlayParams;
import com.reactnativenavigation.params.SnackbarParams;
import com.reactnativenavigation.params.TitleBarButtonParams;
import com.reactnativenavigation.params.TitleBarLeftButtonParams;
import com.reactnativenavigation.params.parsers.ActivityParamsParser;
import com.reactnativenavigation.params.parsers.ScreenParamsParser;
import com.reactnativenavigation.utils.OrientationHelper;
import com.reactnativenavigation.views.SideMenu.Side;
import java.util.List;
public class NavigationCommandsHandler {
private static final String ACTIVITY_PARAMS_BUNDLE = "ACTIVITY_PARAMS_BUNDLE";
static ActivityParams parseActivityParams(Intent intent) {
return ActivityParamsParser.parse(intent.getBundleExtra(NavigationCommandsHandler.ACTIVITY_PARAMS_BUNDLE));
}
/**
* start a new activity with CLEAR_TASK | NEW_TASK
*
* @param params ActivityParams as bundle
*/
public static void startApp(Bundle params) {
Intent intent = new Intent(NavigationApplication.instance, NavigationActivity.class);
IntentDataHandler.onStartApp(intent);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(ACTIVITY_PARAMS_BUNDLE, params);
intent.putExtra("animationType", params.getString("animationType"));
NavigationApplication.instance.startActivity(intent);
}
public static void push(Bundle screenParams) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
final ScreenParams params = ScreenParamsParser.parse(screenParams);
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.push(params);
}
});
}
public static void pop(Bundle screenParams) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
final ScreenParams params = ScreenParamsParser.parse(screenParams);
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.pop(params);
}
});
}
public static void popToRoot(Bundle screenParams) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
final ScreenParams params = ScreenParamsParser.parse(screenParams);
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.popToRoot(params);
}
});
}
public static void newStack(Bundle screenParams) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
final ScreenParams params = ScreenParamsParser.parse(screenParams);
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.newStack(params);
}
});
}
public static void setTopBarVisible(final String screenInstanceID, final boolean hidden, final boolean animated) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.setTopBarVisible(screenInstanceID, hidden, animated);
}
});
}
public static void setBottomTabsVisible(final boolean hidden, final boolean animated) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.setBottomTabsVisible(hidden, animated);
}
});
}
public static void setScreenTitleBarTitle(final String screenInstanceId, final String title) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.setTitleBarTitle(screenInstanceId, title);
}
});
}
public static void setScreenTitleBarSubtitle(final String screenInstanceId, final String subtitle) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.setTitleBarSubtitle(screenInstanceId, subtitle);
}
});
}
public static void showModal(final Bundle params) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.showModal(ScreenParamsParser.parse(params));
}
});
}
public static void showLightBox(final LightBoxParams params) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.showLightBox(params);
}
});
}
public static void dismissLightBox() {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.dismissLightBox();
}
});
}
public static void setScreenTitleBarRightButtons(final String screenInstanceId,
final String navigatorEventId,
final List<TitleBarButtonParams> titleBarButtons) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.setTitleBarButtons(screenInstanceId, navigatorEventId, titleBarButtons);
}
});
}
public static void setScreenTitleBarLeftButtons(final String screenInstanceId,
final String navigatorEventId,
final TitleBarLeftButtonParams titleBarButtons) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.setTitleBarLeftButton(screenInstanceId, navigatorEventId, titleBarButtons);
}
});
}
public static void setScreenFab(final String screenInstanceId, final String navigatorEventId, final FabParams fab) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.setScreenFab(screenInstanceId, navigatorEventId, fab);
}
});
}
public static void setScreenStyle(final String screenInstanceId, final Bundle styleParams) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.setScreenStyle(screenInstanceId, styleParams);
}
});
}
public static void dismissTopModal() {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.dismissTopModal();
}
});
}
public static void dismissAllModals() {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.dismissAllModals();
}
});
}
public static void toggleSideMenuVisible(final boolean animated, final Side side) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.toggleSideMenuVisible(animated, side);
}
});
}
public static void setSideMenuVisible(final boolean animated, final boolean visible, final Side side) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.setSideMenuVisible(animated, visible, side);
}
});
}
public static void selectTopTabByTabIndex(final String screenInstanceId, final int index) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.selectTopTabByTabIndex(screenInstanceId, index);
}
});
}
public static void selectTopTabByScreen(final String screenInstanceId) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.selectTopTabByScreen(screenInstanceId);
}
});
}
public static void selectBottomTabByTabIndex(final Integer index) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.selectBottomTabByTabIndex(index);
}
});
}
public static void selectBottomTabByNavigatorId(final String navigatorId) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.selectBottomTabByNavigatorId(navigatorId);
}
});
}
public static void setBottomTabBadgeByIndex(final Integer index, final String badge) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.setBottomTabBadgeByIndex(index, badge);
}
});
}
public static void setBottomTabBadgeByNavigatorId(final String navigatorId, final String badge) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.setBottomTabBadgeByNavigatorId(navigatorId, badge);
}
});
}
public static void setBottomTabButtonByIndex(final Integer index, final Bundle screenParams) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
final ScreenParams params = ScreenParamsParser.parse(screenParams);
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.setBottomTabButtonByIndex(index, params);
}
});
}
public static void setBottomTabButtonByNavigatorId(final String navigatorId, final Bundle screenParams) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
final ScreenParams params = ScreenParamsParser.parse(screenParams);
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.setBottomTabButtonByNavigatorId(navigatorId, params);
}
});
}
public static void showSlidingOverlay(final SlidingOverlayParams params) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.showSlidingOverlay(params);
}
});
}
public static void hideSlidingOverlay() {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.hideSlidingOverlay();
}
});
}
public static void showSnackbar(final SnackbarParams params) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.showSnackbar(params);
}
});
}
public static void showContextualMenu(final String screenInstanceId, final ContextualMenuParams params, final Callback onButtonClicked) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.showContextualMenu(screenInstanceId, params, onButtonClicked);
}
});
}
public static void dismissContextualMenu(final String screenInstanceId) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.dismissContextualMenu(screenInstanceId);
}
});
}
public static void dismissSnackbar() {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
NavigationApplication.instance.runOnMainThread(new Runnable() {
@Override
public void run() {
currentActivity.dismissSnackbar();
}
});
}
public static void getOrientation(Promise promise) {
final NavigationActivity currentActivity = NavigationActivity.currentActivity;
if (currentActivity == null) {
return;
}
promise.resolve(OrientationHelper.getOrientation(currentActivity));
}
}