summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorAnthony <Helios747@users.noreply.github.com>2019-08-21 10:14:52 -0700
committerGitHub <noreply@github.com>2019-08-21 10:14:52 -0700
commitc7fc9126aaf447a014af4aed195b17aa593dd49b (patch)
tree8c275538d1471584dca012f7acf00b86784a2d95 /Source/Android/app/src/main/java
parent998c171b65e57c669e217e6995f525bc34f2a71e (diff)
parentf79ca651701fdbfe1a95aa09bd7c3d0a68ed4eeb (diff)
Merge pull request #8190 from JosJuice/android-init
Android: Call UICommon::Init at app start instead of emulation start
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java21
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java4
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.java13
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheService.java7
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/AfterDirectoryInitializationRunner.java50
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java29
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java2
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/StartupHandler.java14
8 files changed, 92 insertions, 48 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 174d2d1ff2..dc3c48c338 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
@@ -349,10 +349,29 @@ public final class NativeLibrary
public static native int DefaultCPUCore();
+ public static native void ReloadConfig();
+
+ /**
+ * Initializes the native parts of the app.
+ *
+ * Should be called at app start before running any other native code
+ * (other than the native methods in DirectoryInitialization).
+ */
+ public static native void Initialize();
+
+ /**
+ * Tells analytics that Dolphin has been started.
+ *
+ * Since users typically don't explicitly close Android apps, it's appropriate to
+ * call this not only when the app starts but also when the user returns to the app
+ * after not using it for a significant amount of time.
+ */
+ public static native void ReportStartToAnalytics();
+
/**
* Begins emulation.
*/
- public static native void Run(String[] path, boolean firstOpen);
+ public static native void Run(String[] path);
/**
* Begins emulation from the specified savestate.
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java
index ca34fc575b..d3cb2b6c66 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/Settings.java
@@ -2,6 +2,7 @@ package org.dolphinemu.dolphinemu.features.settings.model;
import android.text.TextUtils;
+import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivityView;
import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile;
@@ -175,6 +176,9 @@ public class Settings
SettingsFile.saveFile(fileName, iniSections, view);
}
+
+ // Notify the native code of the changes
+ NativeLibrary.ReloadConfig();
}
else
{
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.java
index f817414add..1ff9ba8ea0 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/EmulationFragment.java
@@ -82,12 +82,7 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
mPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
String[] gamePaths = getArguments().getStringArray(KEY_GAMEPATHS);
- SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getActivity());
- boolean firstOpen = preferences.getBoolean(StartupHandler.NEW_SESSION, true);
- SharedPreferences.Editor sPrefsEditor = preferences.edit();
- sPrefsEditor.putBoolean(StartupHandler.NEW_SESSION, false);
- sPrefsEditor.apply();
- mEmulationState = new EmulationState(gamePaths, getTemporaryStateFilePath(), firstOpen);
+ mEmulationState = new EmulationState(gamePaths, getTemporaryStateFilePath());
}
/**
@@ -271,12 +266,10 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
private Surface mSurface;
private boolean mRunWhenSurfaceIsValid;
private boolean loadPreviousTemporaryState;
- private boolean firstOpen;
private final String temporaryStatePath;
- EmulationState(String[] gamePaths, String temporaryStatePath, boolean firstOpen)
+ EmulationState(String[] gamePaths, String temporaryStatePath)
{
- this.firstOpen = firstOpen;
mGamePaths = gamePaths;
this.temporaryStatePath = temporaryStatePath;
// Starting state is stopped.
@@ -420,7 +413,7 @@ public final class EmulationFragment extends Fragment implements SurfaceHolder.C
else
{
Log.debug("[EmulationFragment] Starting emulation thread.");
- NativeLibrary.Run(mGamePaths, firstOpen);
+ NativeLibrary.Run(mGamePaths);
}
}, "NativeEmulation");
mEmulationThread.start();
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheService.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheService.java
index 5cddf93f5d..440f70a5bb 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheService.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/services/GameFileCacheService.java
@@ -8,6 +8,7 @@ import android.support.v4.content.LocalBroadcastManager;
import org.dolphinemu.dolphinemu.model.GameFile;
import org.dolphinemu.dolphinemu.model.GameFileCache;
import org.dolphinemu.dolphinemu.ui.platform.Platform;
+import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner;
import java.io.File;
import java.util.ArrayList;
@@ -107,7 +108,8 @@ public final class GameFileCacheService extends IntentService
*/
public static void startLoad(Context context)
{
- startService(context, ACTION_LOAD);
+ new AfterDirectoryInitializationRunner().run(context,
+ () -> startService(context, ACTION_LOAD));
}
/**
@@ -117,7 +119,8 @@ public final class GameFileCacheService extends IntentService
*/
public static void startRescan(Context context)
{
- startService(context, ACTION_RESCAN);
+ new AfterDirectoryInitializationRunner().run(context,
+ () -> startService(context, ACTION_RESCAN));
}
public static GameFile addOrGet(String gamePath)
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/AfterDirectoryInitializationRunner.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/AfterDirectoryInitializationRunner.java
new file mode 100644
index 0000000000..0ce87b2b8a
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/AfterDirectoryInitializationRunner.java
@@ -0,0 +1,50 @@
+package org.dolphinemu.dolphinemu.utils;
+
+import android.content.Context;
+import android.content.IntentFilter;
+import android.support.v4.content.LocalBroadcastManager;
+
+public class AfterDirectoryInitializationRunner
+{
+ private DirectoryStateReceiver directoryStateReceiver;
+
+ /**
+ * Executes a Runnable after directory initialization has finished.
+ *
+ * If this is called when directory initialization already is done,
+ * the Runnable will be executed immediately. If this is called before
+ * directory initialization is done, the Runnable will be executed
+ * after directory initialization finishes successfully, or never
+ * in case directory initialization doesn't finish successfully.
+ *
+ * Calling this function multiple times per object is not supported.
+ */
+ public void run(Context context, Runnable runnable)
+ {
+ if (!DirectoryInitialization.areDolphinDirectoriesReady())
+ {
+ // Wait for directories to get initialized
+ IntentFilter statusIntentFilter = new IntentFilter(
+ DirectoryInitialization.BROADCAST_ACTION);
+
+ directoryStateReceiver = new DirectoryStateReceiver(directoryInitializationState ->
+ {
+ if (directoryInitializationState ==
+ DirectoryInitialization.DirectoryInitializationState.DOLPHIN_DIRECTORIES_INITIALIZED)
+ {
+ LocalBroadcastManager.getInstance(context).unregisterReceiver(directoryStateReceiver);
+ directoryStateReceiver = null;
+ runnable.run();
+ }
+ });
+ // Registers the DirectoryStateReceiver and its intent filters
+ LocalBroadcastManager.getInstance(context).registerReceiver(
+ directoryStateReceiver,
+ statusIntentFilter);
+ }
+ else
+ {
+ runnable.run();
+ }
+ }
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java
index 6f3e07cbb5..cb7aec2056 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/Analytics.java
@@ -18,8 +18,6 @@ import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile;
public class Analytics
{
- private static DirectoryStateReceiver directoryStateReceiver;
-
private static final String analyticsAsked =
Settings.SECTION_ANALYTICS + "_" + SettingsFile.KEY_ANALYTICS_PERMISSION_ASKED;
private static final String analyticsEnabled =
@@ -35,31 +33,8 @@ public class Analytics
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
if (!preferences.getBoolean(analyticsAsked, false))
{
- if (!DirectoryInitialization.areDolphinDirectoriesReady())
- {
- // Wait for directories to get initialized
- IntentFilter statusIntentFilter = new IntentFilter(
- DirectoryInitialization.BROADCAST_ACTION);
-
- directoryStateReceiver = new DirectoryStateReceiver(directoryInitializationState ->
- {
- if (directoryInitializationState ==
- DirectoryInitialization.DirectoryInitializationState.DOLPHIN_DIRECTORIES_INITIALIZED)
- {
- LocalBroadcastManager.getInstance(context).unregisterReceiver(directoryStateReceiver);
- directoryStateReceiver = null;
- showMessage(context, preferences);
- }
- });
- // Registers the DirectoryStateReceiver and its intent filters
- LocalBroadcastManager.getInstance(context).registerReceiver(
- directoryStateReceiver,
- statusIntentFilter);
- }
- else
- {
- showMessage(context, preferences);
- }
+ new AfterDirectoryInitializationRunner().run(context,
+ () -> showMessage(context, preferences));
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java
index 47925df998..727240b478 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/DirectoryInitialization.java
@@ -67,6 +67,8 @@ public final class DirectoryInitialization
{
initializeInternalStorage(context);
initializeExternalStorage(context);
+ NativeLibrary.Initialize();
+ NativeLibrary.ReportStartToAnalytics();
directoryState = DirectoryInitializationState.DOLPHIN_DIRECTORIES_INITIALIZED;
}
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 8631e5ed8d..cdddd4cd37 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
@@ -8,15 +8,15 @@ import android.preference.PreferenceManager;
import android.support.v4.app.FragmentActivity;
import android.text.TextUtils;
+import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.activities.EmulationActivity;
import java.util.Date;
public final class StartupHandler
{
- public static final String NEW_SESSION = "NEW_SESSION";
public static final String LAST_CLOSED = "LAST_CLOSED";
- public static final Long SESSION_TIMEOUT = 21600000L; // 6 hours in milliseconds
+ public static final long SESSION_TIMEOUT = 21600000L; // 6 hours in milliseconds
public static void HandleInit(FragmentActivity parent)
{
@@ -66,15 +66,13 @@ public final class StartupHandler
*/
public static void checkSessionReset(Context context)
{
- Long currentTime = new Date(System.currentTimeMillis()).getTime();
+ long currentTime = new Date(System.currentTimeMillis()).getTime();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
- Long lastOpen = preferences.getLong(LAST_CLOSED, 0);
+ long lastOpen = preferences.getLong(LAST_CLOSED, 0);
if (currentTime > (lastOpen + SESSION_TIMEOUT))
{
- // Passed at emulation start to trigger first open event.
- SharedPreferences.Editor sPrefsEditor = preferences.edit();
- sPrefsEditor.putBoolean(NEW_SESSION, true);
- sPrefsEditor.apply();
+ new AfterDirectoryInitializationRunner().run(context,
+ () -> NativeLibrary.ReportStartToAnalytics());
}
}
}