From 9c8bb24293820c9be973e085511e24808b9bf707 Mon Sep 17 00:00:00 2001 From: JosJuice Date: Sun, 9 May 2021 15:23:11 +0200 Subject: Android: Add a "user data" screen To make it clearer for users where Dolphin is storing user data, now that there's more than one possible place. --- .../dolphinemu/activities/UserDataActivity.java | 45 ++++++++++++++++++++++ .../settings/ui/SettingsFragmentPresenter.java | 3 ++ .../dolphinemu/utils/DirectoryInitialization.java | 11 +++++- 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.java (limited to 'Source/Android/app/src/main/java') diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.java new file mode 100644 index 0000000000..79fcc09123 --- /dev/null +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/UserDataActivity.java @@ -0,0 +1,45 @@ +// SPDX-License-Identifier: GPL-2.0-or-later + +package org.dolphinemu.dolphinemu.activities; + +import android.content.Context; +import android.content.Intent; +import android.os.Build; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; + +import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; + +public class UserDataActivity extends AppCompatActivity +{ + public static void launch(Context context) + { + Intent launcher = new Intent(context, UserDataActivity.class); + context.startActivity(launcher); + } + + @Override + protected void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + setContentView(R.layout.activity_user_data); + + TextView textType = findViewById(R.id.text_type); + TextView textPath = findViewById(R.id.text_path); + TextView textAndroid11 = findViewById(R.id.text_android_11); + + textType.setText(DirectoryInitialization.isUsingLegacyUserDirectory() ? + R.string.user_data_old_location : R.string.user_data_new_location); + + textPath.setText(DirectoryInitialization.getUserDirectory()); + + boolean show_android_11_text = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && + !DirectoryInitialization.isUsingLegacyUserDirectory(); + textAndroid11.setVisibility(show_android_11_text ? View.VISIBLE : View.GONE); + } +} diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java index d91faa775e..c718bab15e 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java @@ -10,6 +10,7 @@ import android.text.TextUtils; import org.dolphinemu.dolphinemu.DolphinApplication; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.activities.UserDataActivity; import org.dolphinemu.dolphinemu.features.settings.model.AbstractIntSetting; import org.dolphinemu.dolphinemu.features.settings.model.AbstractStringSetting; import org.dolphinemu.dolphinemu.features.settings.model.AdHocBooleanSetting; @@ -252,6 +253,8 @@ public final class SettingsFragmentPresenter sl.add(new SubmenuSetting(mContext, R.string.advanced_submenu, MenuTag.CONFIG_ADVANCED)); sl.add(new SubmenuSetting(mContext, R.string.log_submenu, MenuTag.CONFIG_LOG)); sl.add(new SubmenuSetting(mContext, R.string.debug_submenu, MenuTag.DEBUG)); + sl.add(new RunRunnable(mContext, R.string.user_data_submenu, 0, 0, 0, + () -> UserDataActivity.launch(mContext))); } private void addGeneralSettings(ArrayList sl) 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 c2f6d638df..48963052dc 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 @@ -43,6 +43,7 @@ public final class DirectoryInitialization private static volatile boolean areDirectoriesAvailable = false; private static String userPath; private static AtomicBoolean isDolphinDirectoryInitializationRunning = new AtomicBoolean(false); + private static boolean isUsingLegacyUserDirectory = false; public enum DirectoryInitializationState { @@ -108,7 +109,10 @@ public final class DirectoryInitialization if (!Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) return false; - File path = preferLegacyUserDirectory(context) && PermissionsHandler.hasWriteAccess(context) ? + isUsingLegacyUserDirectory = + preferLegacyUserDirectory(context) && PermissionsHandler.hasWriteAccess(context); + + File path = isUsingLegacyUserDirectory ? getLegacyUserDirectoryPath() : context.getExternalFilesDir(null); if (path == null) @@ -388,6 +392,11 @@ public final class DirectoryInitialization isExternalFilesDirEmpty(context) && legacyUserDirectoryExists(); } + public static boolean isUsingLegacyUserDirectory() + { + return isUsingLegacyUserDirectory; + } + public static boolean isWaitingForWriteAccess(Context context) { // This first check is only for performance, not correctness -- cgit v1.2.3