From 0d14ea8783357cc5ea4bd33fdc679215dd4dcb26 Mon Sep 17 00:00:00 2001 From: zhupengfei Date: Sun, 12 Apr 2020 22:33:51 +0800 Subject: [PATCH] android: Add simple UI for camera configuration The UI is subject to be changed. At least need to add a camera device selection. I also think we should make Device Camera the default --- .../features/settings/model/Settings.java | 3 +- .../ui/SettingsFragmentPresenter.java | 30 +++++++++++++++++++ .../features/settings/utils/SettingsFile.java | 2 ++ .../app/src/main/res/values/arrays.xml | 26 ++++++++++++++++ .../app/src/main/res/values/strings.xml | 9 ++++++ 5 files changed, 69 insertions(+), 1 deletion(-) diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.java b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.java index 291574f0f..6eb254778 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/model/Settings.java @@ -17,6 +17,7 @@ public class Settings { public static final String SECTION_PREMIUM = "Premium"; public static final String SECTION_CORE = "Core"; public static final String SECTION_SYSTEM = "System"; + public static final String SECTION_CAMERA = "Camera"; public static final String SECTION_CONTROLS = "Controls"; public static final String SECTION_RENDERER = "Renderer"; public static final String SECTION_AUDIO = "Audio"; @@ -27,7 +28,7 @@ public class Settings { private static final Map> configFileSectionsMap = new HashMap<>(); static { - configFileSectionsMap.put(SettingsFile.FILE_NAME_CONFIG, Arrays.asList(SECTION_PREMIUM, SECTION_CORE, SECTION_SYSTEM, SECTION_CONTROLS, SECTION_RENDERER, SECTION_AUDIO, SECTION_DEBUG)); + configFileSectionsMap.put(SettingsFile.FILE_NAME_CONFIG, Arrays.asList(SECTION_PREMIUM, SECTION_CORE, SECTION_SYSTEM, SECTION_CAMERA, SECTION_CONTROLS, SECTION_RENDERER, SECTION_AUDIO, SECTION_DEBUG)); } /** diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.java b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.java index b2eda82c3..3f9993f39 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/ui/SettingsFragmentPresenter.java @@ -92,6 +92,9 @@ public final class SettingsFragmentPresenter { case Settings.SECTION_SYSTEM: addSystemSettings(sl); break; + case Settings.SECTION_CAMERA: + addCameraSettings(sl); + break; case Settings.SECTION_CONTROLS: addInputSettings(sl); break; @@ -119,6 +122,7 @@ public final class SettingsFragmentPresenter { sl.add(new SubmenuSetting(null, null, R.string.preferences_premium, 0, Settings.SECTION_PREMIUM)); sl.add(new SubmenuSetting(null, null, R.string.preferences_general, 0, Settings.SECTION_CORE)); sl.add(new SubmenuSetting(null, null, R.string.preferences_system, 0, Settings.SECTION_SYSTEM)); + sl.add(new SubmenuSetting(null, null, R.string.preferences_camera, 0, Settings.SECTION_CAMERA)); sl.add(new SubmenuSetting(null, null, R.string.preferences_controls, 0, Settings.SECTION_CONTROLS)); sl.add(new SubmenuSetting(null, null, R.string.preferences_graphics, 0, Settings.SECTION_RENDERER)); sl.add(new SubmenuSetting(null, null, R.string.preferences_audio, 0, Settings.SECTION_AUDIO)); @@ -161,6 +165,32 @@ public final class SettingsFragmentPresenter { sl.add(new DateTimeSetting(SettingsFile.KEY_INIT_TIME, Settings.SECTION_SYSTEM, R.string.init_time, R.string.init_time_description, "2000-01-01 00:00:01", dateTime)); } + private void addCameraSettings(ArrayList sl) { + mView.getActivity().setTitle(R.string.preferences_camera); + + final String[] imageSourceNames = mView.getActivity().getResources().getStringArray(R.array.cameraImageSourceNames); + final String[] imageSourceValues = mView.getActivity().getResources().getStringArray(R.array.cameraImageSourceValues); + + SettingSection cameraSection = mSettings.getSection(Settings.SECTION_CAMERA); + + Setting innerCameraImageSource = cameraSection.getSetting(SettingsFile.KEY_CAMERA_INNER_NAME); + Setting innerCameraFlip = cameraSection.getSetting(SettingsFile.KEY_CAMERA_INNER_FLIP); + sl.add(new HeaderSetting(null, null, R.string.inner_camera, 0)); + sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_CAMERA_INNER_NAME, Settings.SECTION_CAMERA, R.string.image_source, R.string.image_source_description, imageSourceNames, imageSourceValues, imageSourceValues[0], innerCameraImageSource)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_CAMERA_INNER_FLIP, Settings.SECTION_CAMERA, R.string.image_flip, 0, R.array.cameraFlipNames, R.array.cameraFlipValues, 0, innerCameraFlip)); + + Setting outerLeftCameraImageSource = cameraSection.getSetting(SettingsFile.KEY_CAMERA_OUTER_LEFT_NAME); + Setting outerLeftCameraFlip = cameraSection.getSetting(SettingsFile.KEY_CAMERA_OUTER_LEFT_FLIP); + sl.add(new HeaderSetting(null, null, R.string.outer_left_camera, 0)); + sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_CAMERA_OUTER_LEFT_NAME, Settings.SECTION_CAMERA, R.string.image_source, R.string.image_source_description, imageSourceNames, imageSourceValues, imageSourceValues[0], outerLeftCameraImageSource)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_CAMERA_OUTER_LEFT_FLIP, Settings.SECTION_CAMERA, R.string.image_flip, 0, R.array.cameraFlipNames, R.array.cameraFlipValues, 0, outerLeftCameraFlip)); + + Setting outerRightCameraImageSource = cameraSection.getSetting(SettingsFile.KEY_CAMERA_OUTER_RIGHT_NAME); + Setting outerRightCameraFlip = cameraSection.getSetting(SettingsFile.KEY_CAMERA_OUTER_RIGHT_FLIP); + sl.add(new HeaderSetting(null, null, R.string.outer_right_camera, 0)); + sl.add(new StringSingleChoiceSetting(SettingsFile.KEY_CAMERA_OUTER_RIGHT_NAME, Settings.SECTION_CAMERA, R.string.image_source, R.string.image_source_description, imageSourceNames, imageSourceValues, imageSourceValues[0], outerRightCameraImageSource)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_CAMERA_OUTER_RIGHT_FLIP, Settings.SECTION_CAMERA, R.string.image_flip, 0, R.array.cameraFlipNames, R.array.cameraFlipValues, 0, outerRightCameraFlip)); + } private void addInputSettings(ArrayList sl) { mView.getActivity().setTitle(R.string.preferences_controls); diff --git a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/utils/SettingsFile.java b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/utils/SettingsFile.java index 75cf0330e..a3a654634 100644 --- a/src/android/app/src/main/java/org/citra/citra_emu/features/settings/utils/SettingsFile.java +++ b/src/android/app/src/main/java/org/citra/citra_emu/features/settings/utils/SettingsFile.java @@ -101,6 +101,8 @@ public final class SettingsFile { public static final String KEY_CAMERA_OUTER_RIGHT_NAME = "camera_outer_right_name"; public static final String KEY_CAMERA_OUTER_RIGHT_CONFIG = "camera_outer_right_config"; public static final String KEY_CAMERA_OUTER_RIGHT_FLIP = "camera_outer_right_flip"; + public static final String KEY_CAMERA_OUTER_LEFT_NAME = "camera_outer_left_name"; + public static final String KEY_CAMERA_OUTER_LEFT_CONFIG = "camera_outer_left_config"; public static final String KEY_CAMERA_OUTER_LEFT_FLIP = "camera_outer_left_flip"; public static final String KEY_CAMERA_INNER_NAME = "camera_inner_name"; public static final String KEY_CAMERA_INNER_CONFIG = "camera_inner_config"; diff --git a/src/android/app/src/main/res/values/arrays.xml b/src/android/app/src/main/res/values/arrays.xml index 69b29e00f..58235c89c 100644 --- a/src/android/app/src/main/res/values/arrays.xml +++ b/src/android/app/src/main/res/values/arrays.xml @@ -91,4 +91,30 @@ Circle Pad C Stick + + + Blank + Still Image + Device Camera + + + + blank + image + ndk + + + + None + Horizontal + Vertical + Reverse + + + + 0 + 1 + 2 + 3 + diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml index aab17c2b2..b5426a96a 100644 --- a/src/android/app/src/main/res/values/strings.xml +++ b/src/android/app/src/main/res/values/strings.xml @@ -49,6 +49,14 @@ Emulated region Emulated language + + Inner Camera + Outer Left Camera + Outer Right Camera + Image Source + Sets the image source of the virtual camera. You can use an image file, or a device camera. + Image Flip + Enable V-Sync Synchronizes the game frame rate to the refresh rate of your device. @@ -103,6 +111,7 @@ Premium General System + Camera Gamepad Graphics Audio