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