diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/BooleanSetting.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/BooleanSetting.kt
index 925e17805..d691994d9 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/BooleanSetting.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/BooleanSetting.kt
@@ -49,7 +49,8 @@ enum class BooleanSetting(
DISABLE_RIGHT_EYE_RENDER("disable_right_eye_render", Settings.SECTION_RENDERER, false),
USE_ARTIC_BASE_CONTROLLER("use_artic_base_controller", Settings.SECTION_CONTROLS, false),
UPRIGHT_SCREEN("upright_screen", Settings.SECTION_LAYOUT, false),
- COMPRESS_INSTALLED_CIA_CONTENT("compress_cia_installs", Settings.SECTION_STORAGE, false);
+ COMPRESS_INSTALLED_CIA_CONTENT("compress_cia_installs", Settings.SECTION_STORAGE, false),
+ ANDROID_HIDE_IMAGES("android_hide_images", Settings.SECTION_CORE, false);
override var boolean: Boolean = defaultValue
@@ -83,6 +84,7 @@ enum class BooleanSetting(
SHADERS_ACCURATE_MUL,
USE_ARTIC_BASE_CONTROLLER,
COMPRESS_INSTALLED_CIA_CONTENT,
+ ANDROID_HIDE_IMAGES
)
fun from(key: String): BooleanSetting? =
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsActivityPresenter.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsActivityPresenter.kt
index 06fcb19e4..33aea46f9 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsActivityPresenter.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsActivityPresenter.kt
@@ -4,14 +4,19 @@
package org.citra.citra_emu.features.settings.ui
+import android.net.Uri
import android.os.Bundle
import android.text.TextUtils
+import androidx.documentfile.provider.DocumentFile
+import org.citra.citra_emu.CitraApplication
import org.citra.citra_emu.NativeLibrary
-import org.citra.citra_emu.features.settings.model.IntSetting
+import org.citra.citra_emu.features.settings.model.BooleanSetting
import org.citra.citra_emu.features.settings.model.Settings
import org.citra.citra_emu.utils.SystemSaveGame
import org.citra.citra_emu.utils.DirectoryInitialization
+import org.citra.citra_emu.utils.FileUtil
import org.citra.citra_emu.utils.Log
+import org.citra.citra_emu.utils.PermissionsHandler
import org.citra.citra_emu.utils.TurboHelper
class SettingsActivityPresenter(private val activityView: SettingsActivityView) {
@@ -60,6 +65,32 @@ class SettingsActivityPresenter(private val activityView: SettingsActivityView)
loadSettingsUI()
}
+ private fun updateAndroidImageVisibility() {
+ val dataDirTreeUri: Uri
+ val dataDirDocument: DocumentFile
+ val nomediaFileDocument: DocumentFile?
+ val nomediaFileExists: Boolean
+ try {
+ dataDirTreeUri = PermissionsHandler.citraDirectory
+ dataDirDocument = DocumentFile.fromTreeUri(CitraApplication.appContext, dataDirTreeUri)!!
+ nomediaFileDocument = dataDirDocument.findFile(".nomedia")
+ nomediaFileExists = (nomediaFileDocument != null)
+ } catch (e: Exception) {
+ Log.error("[SettingsActivity]: Error occurred while trying to find .nomedia, error: " + e.message)
+ return
+ }
+
+ if (BooleanSetting.ANDROID_HIDE_IMAGES.boolean) {
+ if (!nomediaFileExists) {
+ Log.info("[SettingsActivity]: Attempting to create .nomedia in user data directory")
+ FileUtil.createFile(dataDirTreeUri.toString(), ".nomedia")
+ }
+ } else if (nomediaFileExists) {
+ Log.info("[SettingsActivity]: Attempting to delete .nomedia in user data directory")
+ nomediaFileDocument!!.delete()
+ }
+ }
+
fun onStop(finishing: Boolean) {
if (finishing && shouldSave) {
Log.debug("[SettingsActivity] Settings activity stopping. Saving settings to INI...")
@@ -67,6 +98,7 @@ class SettingsActivityPresenter(private val activityView: SettingsActivityView)
//added to ensure that layout changes take effect as soon as settings window closes
NativeLibrary.reloadSettings()
NativeLibrary.updateFramebuffer(NativeLibrary.isPortraitMode)
+ updateAndroidImageVisibility()
TurboHelper.reloadTurbo(false) // TODO: Can this go somewhere else? -OS
}
NativeLibrary.reloadSettings()
diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
index 7216fcf73..ba95c6aee 100644
--- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
+++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.kt
@@ -248,6 +248,15 @@ class SettingsFragmentPresenter(private val fragmentView: SettingsFragmentView)
IntSetting.TURBO_LIMIT.defaultValue.toFloat()
)
)
+ add(
+ SwitchSetting(
+ BooleanSetting.ANDROID_HIDE_IMAGES,
+ R.string.android_hide_images,
+ R.string.android_hide_images_description,
+ BooleanSetting.ANDROID_HIDE_IMAGES.key,
+ BooleanSetting.ANDROID_HIDE_IMAGES.defaultValue
+ )
+ )
}
}
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index ebcf856b5..044a8b25f 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -257,6 +257,8 @@
When enabled, emulation speed will be limited to a specified percentage of normal speed. If disabled, emulation speed will be uncapped and the turbo speed hotkey will not work.
Limit Speed Percent
Specifies the percentage to limit emulation speed. With the default of 100% emulation will be limited to normal speed. Values higher or lower will increase or decrease the speed limit.
+ Hide 3DS Images from Android
+ Prevent 3DS camera, screenshot, and custom texture images from being indexed by Android and displayed in the gallery. Your device may need to be rebooted after changing this setting to take effect.
Turbo Speed Limit
Emulation speed limit used while the turbo hotkey is active.
Expand to Cutout Area