Merge pull request #6275 from JosJuice/android-reliable-init

Android: Always run HandleInit logic on app start
This commit is contained in:
Leo Lam 2017-12-28 20:45:10 +01:00 committed by GitHub
commit 257da9980e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 12 additions and 22 deletions

View File

@ -3,6 +3,8 @@ package org.dolphinemu.dolphinemu;
import android.app.Application; import android.app.Application;
import org.dolphinemu.dolphinemu.model.GameDatabase; import org.dolphinemu.dolphinemu.model.GameDatabase;
import org.dolphinemu.dolphinemu.services.DirectoryInitializationService;
import org.dolphinemu.dolphinemu.utils.PermissionsHandler;
public class DolphinApplication extends Application public class DolphinApplication extends Application
{ {
@ -13,6 +15,11 @@ public class DolphinApplication extends Application
{ {
super.onCreate(); super.onCreate();
NativeLibrary.SetUserDirectory(""); // Empty string means use the default path
if (PermissionsHandler.hasWriteAccess(getApplicationContext()))
DirectoryInitializationService.startService(getApplicationContext());
databaseHelper = new GameDatabase(this); databaseHelper = new GameDatabase(this);
} }
} }

View File

@ -58,7 +58,6 @@ public final class MainActivity extends AppCompatActivity implements MainView
mPresenter.onCreate(); mPresenter.onCreate();
// Stuff in this block only happens when this activity is newly created (i.e. not a rotation) // Stuff in this block only happens when this activity is newly created (i.e. not a rotation)
// TODO Split some of this stuff into Application.onCreate()
if (savedInstanceState == null) if (savedInstanceState == null)
StartupHandler.HandleInit(this); StartupHandler.HandleInit(this);

View File

@ -5,28 +5,19 @@ import android.os.Bundle;
import android.support.v4.app.FragmentActivity; import android.support.v4.app.FragmentActivity;
import android.text.TextUtils; import android.text.TextUtils;
import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.activities.EmulationActivity; import org.dolphinemu.dolphinemu.activities.EmulationActivity;
import org.dolphinemu.dolphinemu.services.DirectoryInitializationService;
public final class StartupHandler public final class StartupHandler
{ {
public static boolean HandleInit(FragmentActivity parent) public static void HandleInit(FragmentActivity parent)
{ {
String user_dir = ""; // Ask the user to grant write permission if it's not already granted
String start_file = ""; PermissionsHandler.checkWritePermission(parent);
String start_file = "";
Bundle extras = parent.getIntent().getExtras(); Bundle extras = parent.getIntent().getExtras();
if (extras != null) if (extras != null)
{
user_dir = extras.getString("UserDir");
start_file = extras.getString("AutoStartFile"); start_file = extras.getString("AutoStartFile");
}
NativeLibrary.SetUserDirectory(user_dir); // Uses default path if user_dir equals ""
if (PermissionsHandler.checkWritePermission(parent))
DirectoryInitializationService.startService(parent);
if (!TextUtils.isEmpty(start_file)) if (!TextUtils.isEmpty(start_file))
{ {
@ -35,9 +26,6 @@ public final class StartupHandler
emulation_intent.putExtra("SelectedGame", start_file); emulation_intent.putExtra("SelectedGame", start_file);
parent.startActivity(emulation_intent); parent.startActivity(emulation_intent);
parent.finish(); parent.finish();
return false;
} }
return false;
} }
} }

View File

@ -54,7 +54,6 @@ JavaVM* g_java_vm;
namespace namespace
{ {
ANativeWindow* s_surf; ANativeWindow* s_surf;
std::string s_set_userpath;
jclass s_jni_class; jclass s_jni_class;
jmethodID s_jni_method_alert; jmethodID s_jni_method_alert;
@ -677,9 +676,7 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_SetUserDirec
JNIEnv* env, jobject obj, jstring jDirectory) JNIEnv* env, jobject obj, jstring jDirectory)
{ {
std::lock_guard<std::mutex> guard(s_host_identity_lock); std::lock_guard<std::mutex> guard(s_host_identity_lock);
std::string directory = GetJString(env, jDirectory); UICommon::SetUserDirectory(GetJString(env, jDirectory));
s_set_userpath = directory;
UICommon::SetUserDirectory(directory);
} }
JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetUserDirectory(JNIEnv* env, JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetUserDirectory(JNIEnv* env,
@ -778,7 +775,6 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_Run(JNIEnv*
RegisterMsgAlertHandler(&MsgAlert); RegisterMsgAlertHandler(&MsgAlert);
std::unique_lock<std::mutex> guard(s_host_identity_lock); std::unique_lock<std::mutex> guard(s_host_identity_lock);
UICommon::SetUserDirectory(s_set_userpath);
UICommon::Init(); UICommon::Init();
WiimoteReal::InitAdapterClass(); WiimoteReal::InitAdapterClass();