@@ -478,6 +478,43 @@ std::string ReadTextInput(const char* title, const char* message,
478478 return g_text_entry_field_data->ReadText (title, message, placeholder);
479479}
480480
481+ void SetEnvironmentVariableFromStringExtra (JNIEnv* env, const char * extra_name,
482+ jobject intent) {
483+ jclass intent_class = env->GetObjectClass (intent);
484+ jmethodID get_string_extra = env->GetMethodID (
485+ intent_class, " getStringExtra" , " (Ljava/lang/String;)Ljava/lang/String;" );
486+ env->DeleteLocalRef (intent_class);
487+
488+ jstring extra_name_jstring = env->NewStringUTF (extra_name);
489+ jstring extra_value_jstring = (jstring)env->CallObjectMethod (
490+ intent, get_string_extra, extra_name_jstring);
491+ env->DeleteLocalRef (extra_name_jstring);
492+
493+ if (extra_value_jstring != nullptr ) {
494+ const char * extra_value =
495+ env->GetStringUTFChars (extra_value_jstring, nullptr );
496+ setenv (extra_name, extra_value, /* overwrite=*/ 1 );
497+ env->ReleaseStringUTFChars (extra_value_jstring, extra_value);
498+ env->DeleteLocalRef (extra_value_jstring);
499+ }
500+ }
501+
502+ void SetExtrasAsEnvironmentVariables () {
503+ JNIEnv* env = app_framework::GetJniEnv ();
504+ jobject activity = app_framework::GetActivity ();
505+
506+ jclass activity_class = env->GetObjectClass (activity);
507+ jmethodID get_intent = env->GetMethodID (activity_class, " getIntent" ,
508+ " ()Landroid/content/Intent;" );
509+ env->DeleteLocalRef (activity_class);
510+
511+ jobject intent = env->CallObjectMethod (activity, get_intent);
512+ SetEnvironmentVariableFromStringExtra (env, " USE_FIRESTORE_EMULATOR" , intent);
513+ SetEnvironmentVariableFromStringExtra (env, " FIRESTORE_EMULATOR_PORT" , intent);
514+
515+ env->DeleteLocalRef (intent);
516+ }
517+
481518} // namespace app_framework
482519
483520// Execute common_main(), flush pending events and finish the activity.
@@ -520,6 +557,8 @@ extern "C" void android_main(struct android_app* state) {
520557 pthread_create (&thread, nullptr , app_framework::stdout_logger,
521558 reinterpret_cast <void *>(filedes));
522559
560+ app_framework::SetExtrasAsEnvironmentVariables ();
561+
523562 // Execute cross platform entry point.
524563 // Copy the app name into a non-const array, as googletest requires that
525564 // main() take non-const char* argv[] so it can modify the arguments.
0 commit comments