summaryrefslogtreecommitdiff
path: root/Source/Android
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2020-11-06 19:26:56 +0100
committerJosJuice <josjuice@gmail.com>2020-11-09 10:33:52 +0100
commit0280f3557c703beb4c14df7aab543349bfc001ea (patch)
tree8a718753ffab7093de9c9d76498afbc990504448 /Source/Android
parenta9ef7e0e436795d1ef842aae7433c6173f623f90 (diff)
Android: Finish EmulationActivity from C++
This makes EmulationActivity automatically close if booting fails, and lets us get rid of s_emulation_end_event.
Diffstat (limited to 'Source/Android')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java14
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java2
-rw-r--r--Source/Android/jni/AndroidCommon/IDCache.cpp8
-rw-r--r--Source/Android/jni/AndroidCommon/IDCache.h1
-rw-r--r--Source/Android/jni/MainAndroid.cpp18
5 files changed, 29 insertions, 14 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
index 199d80cf72..9e7c9bb208 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
@@ -563,6 +563,20 @@ public final class NativeLibrary
sEmulationActivity.clear();
}
+ public static void finishEmulationActivity()
+ {
+ final EmulationActivity emulationActivity = sEmulationActivity.get();
+ if (emulationActivity == null)
+ {
+ Log.warning("[NativeLibrary] EmulationActivity is null.");
+ }
+ else
+ {
+ Log.verbose("[NativeLibrary] Finishing EmulationActivity.");
+ emulationActivity.runOnUiThread(emulationActivity::finish);
+ }
+ }
+
public static void updateTouchPointer()
{
final EmulationActivity emulationActivity = sEmulationActivity.get();
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java
index 49f9704e86..daa202de7c 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java
@@ -342,7 +342,6 @@ public final class EmulationActivity extends AppCompatActivity
if (keyCode == KeyEvent.KEYCODE_BACK)
{
mEmulationFragment.stopEmulation();
- finish();
return true;
}
return super.onKeyLongPress(keyCode, event);
@@ -617,7 +616,6 @@ public final class EmulationActivity extends AppCompatActivity
case MENU_ACTION_EXIT:
mEmulationFragment.stopEmulation();
- finish();
break;
}
}
diff --git a/Source/Android/jni/AndroidCommon/IDCache.cpp b/Source/Android/jni/AndroidCommon/IDCache.cpp
index bebdea1a4b..70d40da5d8 100644
--- a/Source/Android/jni/AndroidCommon/IDCache.cpp
+++ b/Source/Android/jni/AndroidCommon/IDCache.cpp
@@ -15,6 +15,7 @@ static jmethodID s_display_alert_msg;
static jmethodID s_do_rumble;
static jmethodID s_update_touch_pointer;
static jmethodID s_on_title_changed;
+static jmethodID s_finish_emulation_activity;
static jclass s_game_file_class;
static jfieldID s_game_file_pointer;
@@ -94,6 +95,11 @@ jmethodID GetOnTitleChanged()
return s_on_title_changed;
}
+jmethodID GetFinishEmulationActivity()
+{
+ return s_finish_emulation_activity;
+}
+
jclass GetAnalyticsClass()
{
return s_analytics_class;
@@ -221,6 +227,8 @@ jint JNI_OnLoad(JavaVM* vm, void* reserved)
s_update_touch_pointer =
env->GetStaticMethodID(s_native_library_class, "updateTouchPointer", "()V");
s_on_title_changed = env->GetStaticMethodID(s_native_library_class, "onTitleChanged", "()V");
+ s_finish_emulation_activity =
+ env->GetStaticMethodID(s_native_library_class, "finishEmulationActivity", "()V");
env->DeleteLocalRef(native_library_class);
const jclass game_file_class = env->FindClass("org/dolphinemu/dolphinemu/model/GameFile");
diff --git a/Source/Android/jni/AndroidCommon/IDCache.h b/Source/Android/jni/AndroidCommon/IDCache.h
index 1b762edf4a..cd45b5d03f 100644
--- a/Source/Android/jni/AndroidCommon/IDCache.h
+++ b/Source/Android/jni/AndroidCommon/IDCache.h
@@ -15,6 +15,7 @@ jmethodID GetDisplayAlertMsg();
jmethodID GetDoRumble();
jmethodID GetUpdateTouchPointer();
jmethodID GetOnTitleChanged();
+jmethodID GetFinishEmulationActivity();
jclass GetAnalyticsClass();
jmethodID GetSendAnalyticsReport();
diff --git a/Source/Android/jni/MainAndroid.cpp b/Source/Android/jni/MainAndroid.cpp
index 4079f947dc..f852d61590 100644
--- a/Source/Android/jni/MainAndroid.cpp
+++ b/Source/Android/jni/MainAndroid.cpp
@@ -77,7 +77,6 @@ ANativeWindow* s_surf;
// sequentially for access.
std::mutex s_host_identity_lock;
Common::Event s_update_main_frame_event;
-Common::Event s_emulation_end_event;
bool s_have_wm_user_stop = false;
bool s_game_metadata_is_valid = false;
} // Anonymous namespace
@@ -210,17 +209,11 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_PauseEmulati
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_StopEmulation(JNIEnv*, jclass)
{
- {
- std::lock_guard<std::mutex> guard(s_host_identity_lock);
- s_emulation_end_event.Reset();
- Core::Stop();
-
- // Kick the waiting event
- s_update_main_frame_event.Set();
- }
+ std::lock_guard<std::mutex> guard(s_host_identity_lock);
+ Core::Stop();
- // Wait for shutdown, to avoid accessing the config at the same time as the shutdown code
- s_emulation_end_event.Wait();
+ // Kick the waiting event
+ s_update_main_frame_event.Set();
}
JNIEXPORT jboolean JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_IsBooting(JNIEnv*, jclass)
@@ -533,7 +526,8 @@ static void Run(JNIEnv* env, const std::vector<std::string>& paths,
s_surf = nullptr;
}
- s_emulation_end_event.Set();
+ env->CallStaticVoidMethod(IDCache::GetNativeLibraryClass(),
+ IDCache::GetFinishEmulationActivity());
}
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_Run___3Ljava_lang_String_2(