package com.reactnativenavigation.controllers; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import com.reactnativenavigation.NavigationApplication; import static android.content.Intent.ACTION_VIEW; class IntentDataHandler { private static Intent intent; static void onStartApp(Intent intent) { setIntentData(intent); } static void onResume(Intent intent) { if (hasIntentData()) { setIntentData(intent); } else { saveIntentData(intent); } } static void saveIntentData(Intent intent) { IntentDataHandler.intent = intent; } static void onPostResume(Intent intent) { if (hasIntentData()) { fakeOnNewIntentForLinkingModule(intent); clear(); } } static void onPause(@Nullable Intent intent) { if (intent != null) { intent.setData(null); intent.getExtras().clear(); intent.replaceExtras(Bundle.EMPTY); } clear(); } private static void fakeOnNewIntentForLinkingModule(Intent intent) { if (intent != null) { NavigationApplication.instance.getReactGateway().onNewIntent(intent); } } private static boolean hasIntentData() { return intent != null; } private static void setIntentData(@Nullable Intent intent) { if (intent != null && IntentDataHandler.intent != null) { intent.setData(IntentDataHandler.intent.getData()); intent.putExtras(IntentDataHandler.intent); intent.setAction(ACTION_VIEW); } } private static void clear() { intent = null; } }