summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2017-12-28 12:49:40 +0100
committerJosJuice <josjuice@gmail.com>2017-12-28 12:51:00 +0100
commitd8f10ba177dffbb78d82eb7d441b4e3fcf412196 (patch)
tree3fbd473323c1c67b5f698a082c150b38ffb82a1d
parent1df69c57507dbeea638eceac1c7410b737f1739c (diff)
Android: Always run HandleInit logic on app start
Note: By "HandleInit" in this commit message, I mean the code that is in HandleInit in master except the part that launches EmulationActivity. In other words, I mean the call to SetUserDirectory and the call to DirectoryInitializationService.startService. Couldn't think of something more accurate to call that than "HandleInit"... In master, HandleInit only runs when the main activity is launched. This is a problem if the app ends up being launched in some other way, such as resuming EmulationActivity after the app has been killed in order to reclaim memory. It's important that we run HandleInit, because otherwise the native code won't know where the User and Sys folders are. In order to implement this, I'm dropping the ability to set a custom User folder in an intent. I don't think anyone is using that anyway. It's not impossible to support it, but I can't see a way to support it that doesn't involve something ugly like having code for calling HandleInit in every activity (or at least MainActivity + TvMainActivity + EmulationActivity, with more activities potentially needing it in the future if we expand the usage of native code for e.g. settings). If we want to support setting a custom user directory, we should consider another way to do it, such as a setting that's stored in getFilesDir() or getExternalStorageDirectory(). Intents are intended to control the behavior of a specific activity, not the whole app.
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/DolphinApplication.java7
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java1
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/StartupHandler.java15
3 files changed, 10 insertions, 13 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/DolphinApplication.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/DolphinApplication.java
index e0eb5e5415..6c2e3be39d 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/DolphinApplication.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/DolphinApplication.java
@@ -3,6 +3,8 @@ package org.dolphinemu.dolphinemu;
import android.app.Application;
import org.dolphinemu.dolphinemu.model.GameDatabase;
+import org.dolphinemu.dolphinemu.services.DirectoryInitializationService;
+import org.dolphinemu.dolphinemu.utils.PermissionsHandler;
public class DolphinApplication extends Application
{
@@ -13,6 +15,11 @@ public class DolphinApplication extends Application
{
super.onCreate();
+ NativeLibrary.SetUserDirectory(""); // Empty string means use the default path
+
+ if (PermissionsHandler.hasWriteAccess(getApplicationContext()))
+ DirectoryInitializationService.startService(getApplicationContext());
+
databaseHelper = new GameDatabase(this);
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java
index 72a9477f00..1f46f8eecb 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java
@@ -58,7 +58,6 @@ public final class MainActivity extends AppCompatActivity implements MainView
mPresenter.onCreate();
// 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)
StartupHandler.HandleInit(this);
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/StartupHandler.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/StartupHandler.java
index 11cdf861c6..738d696b31 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/StartupHandler.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/StartupHandler.java
@@ -5,28 +5,19 @@ import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.text.TextUtils;
-import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.activities.EmulationActivity;
-import org.dolphinemu.dolphinemu.services.DirectoryInitializationService;
public final class StartupHandler
{
public static boolean HandleInit(FragmentActivity parent)
{
- String user_dir = "";
- String start_file = "";
+ // Ask the user to grant write permission if it's not already granted
+ PermissionsHandler.checkWritePermission(parent);
+ String start_file = "";
Bundle extras = parent.getIntent().getExtras();
if (extras != null)
- {
- user_dir = extras.getString("UserDir");
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))
{