Commit Graph

1882 Commits

Author SHA1 Message Date
JMC47
e0ab156afd
Merge pull request #14422 from Simonx22/android/convert-tvsettingsviewholder-to-kotlin
Android: Convert TvSettingsViewHolder to Kotlin
2026-03-12 15:24:38 -04:00
Simonx22
79f0c814e4 Android: Convert AfterDirectoryInitializationRunner to Kotlin 2026-02-28 10:44:05 -05:00
Simonx22
2660412b29 Android: Convert WiiUpdateCallback to Kotlin 2026-02-27 21:30:46 -05:00
Simonx22
a7bb03b6f0 Android: Convert AlertDialogItemsBuilder to Kotlin 2026-02-27 15:06:12 -05:00
Simonx22
46c410e30b Android: Convert TvSettingsViewHolder to Kotlin 2026-02-27 14:41:25 -05:00
Simonx22
58f85aa65c Android: Convert USBPermService to Kotlin 2026-02-27 14:11:48 -05:00
JosJuice
99d82829c8 Android: Fix defaults for RetroAchievements settings
Default values for settings need to be the same in Kotlin and C++,
otherwise settings that haven't been changed by the user will be shown
as having one value in the Android GUI but treated as having a different
value in the core.
2026-02-23 19:24:58 +01:00
JosJuice
051133787e Android: Add Triforce Baseboard
This lets users select Triforce Baseboard for SI and SP1. Limitations:

* The test, service and coin buttons can be bound to gamepads and other
  physical inputs, but aren't available in the touch input overlay.
* The IP redirections are exposed to the user as a raw string rather than
  a table like in DolphinQt.
2026-02-15 23:13:18 -06:00
JMC47
e387fa3732
Merge pull request #14385 from dreamsyntax/cpu-clock-max
Qt/Android: CPU Clock Override max to 500%
2026-02-15 03:38:23 -05:00
dreamsyntax
e1e1485582 Qt/Android: CPU Clock Override max to 500% 2026-02-12 18:39:05 -07:00
JosJuice
bd92388d2f Android: Rework input device hotplug
Previously, when an input device was connected or disconnected, we would
recreate all devices. This commit makes it so we only touch the relevant
device instead. This matters because recreating a device causes us to
drop all held buttons for that device. Due to Android only delivering
inputs as events, we're unable to poll for currently held buttons when
recreating a device.

This recently became a problem for users of Ayn devices due to a
firmware update. Every now and then, something about the display
viewports changes, triggering an update to an input device that I assume
is a touch input device. This input device isn't something users
normally map in Dolphin's controller settings, but it changing was
causing Dolphin to drop all held buttons for the device's built-in
gamepad as well as any other connected gamepads.
2026-02-08 10:38:43 +01:00
Jordan Woyak
dd2b94cd4a
Merge pull request #13594 from jordan-woyak/state-cleanups
State: Simplify interthread communication and general cleanups.
2026-02-03 16:50:52 -06:00
Sam Belliveau
51c8f18b73 feat: Add an option to preserve audio pitch when emulation speed changes, integrating it into core configuration and both Qt and Android UIs. 2026-01-27 18:48:22 -05:00
Jordan Woyak
2322437f96 State: Simplify interthread communication and cleanups. Save/Load calls are now always non-blocking for the caller, but appropriately block the CPU thread as needed. 2026-01-19 21:56:59 -06:00
JosJuice
0ba32f7add Android: Detect when native code should flush unsaved data 2026-01-19 21:56:09 -06:00
JosJuice
4c7cb2622f
Merge pull request #14246 from LeddaZ/android-gitignore
Android: Add build output folders to gitignore
2026-01-14 18:54:16 +01:00
JosJuice
01b4f8bcf7
Merge pull request #14245 from LeddaZ/android-materialyou-fix
Android: Switch to Theme.Material3.DynamicColors
2026-01-14 18:54:05 +01:00
Leonardo Ledda
87345d5eda
Android: Add build output folders to gitignore
Signed-off-by: Leonardo Ledda <leonardoledda@gmail.com>
2026-01-01 14:23:40 +01:00
Leonardo Ledda
593c9f3836
Android: Switch to Theme.Material3.DynamicColors
* This fixes some UI elements (3-dot menu background, status bar when scrolling down in settings) not following Material You colors.
* It doesn't cause any issues on Android versions without dynamic colors (tested on Android 9, 11, 16)

Signed-off-by: Leonardo Ledda <leonardoledda@gmail.com>
2026-01-01 14:11:37 +01:00
Leonardo Ledda
af0d03b399
Android: Use compilerOptions block to specify JVM version
* Fixes deprecation warning

Signed-off-by: Leonardo Ledda <leonardoledda@gmail.com>
2026-01-01 13:43:38 +01:00
JMC47
8aabaf8b63
Merge pull request #14155 from Simonx22/android/remove-completable-future
Android: Remove CompletableFuture
2025-12-22 13:34:58 -05:00
JMC47
289814d0a8
Merge pull request #14144 from Simonx22/android/log-kotlin
Android: Convert Log to Kotlin
2025-12-22 13:32:08 -05:00
JMC47
f565c5450f
Merge pull request #14141 from Simonx22/android/controllerinterface-handlerthread
Android: Use Android's HandlerThread in ControllerInterface instead of our own implementation
2025-12-22 13:30:47 -05:00
JosJuice
fa2a9e72f9
Merge pull request #14159 from JosJuice/android-retroachievements-login-gone
Android: Tweak dialog_login.xml layout
2025-11-25 20:52:29 +01:00
JosJuice
79d74a3df1 Android: Add LeaderboardTrackerEnabled and ChallengeIndicatorsEnabled
This is an Android port of 7ed61c50a1. It looks like we don't have
descriptions for any of the RetroAchievements settings in the Android
GUI, so I haven't added descriptions for these two new settings either.
2025-11-23 11:17:16 +01:00
JosJuice
604e7fe833 Android: Use same margin above login text as below
This makes the login dialog look more balanced when "Logging In" or
"Login Failed" is visible.
2025-11-23 11:05:02 +01:00
JosJuice
738dcf86a6 Android: Remove unnecessary gravity in dialog_login.xml
Android Studio was complaining about these because their directions
didn't match the text alignment, but in this layout they have no effect
anyway.
2025-11-23 11:05:02 +01:00
JosJuice
9ec9b7d6f7 Android: Replace dialog_login.xml's invisible with gone
LoginDialog sets these to gone when a login starts or fails. Whether we
use gone or invisible needs to be consistent between LoginDialog and the
XML file, otherwise we'll blank space that shows up or disappears when
login starts or fails.
2025-11-23 11:03:09 +01:00
Simonx22
e78ece126e Android: Format MainPresenter 2025-11-22 11:11:50 -05:00
Simonx22
01d2d0eea1 Android: Format ControllerInterface 2025-11-22 11:06:15 -05:00
JosJuice
f4f7424a9f
Merge pull request #13583 from LillyJadeKatrin/retroachievements-android
Android Support for RetroAchievements
2025-11-22 17:00:03 +01:00
Simonx22
dd5f831262 Android: Remove CompletableFuture
We only use this class in one in one single function since its introduction with 12aa1071cb in 2021. If we do need it elsewhere we can always bring it back.
2025-11-21 21:47:09 -05:00
Simonx22
9f6400332f Android: Convert Log to Kotlin 2025-11-19 16:53:10 -05:00
Jordan Woyak
2d7ebe46e3
Merge pull request #14111 from Simonx22/android/native-library-kotlin
Android: Convert NativeLibrary to Kotlin
2025-11-19 15:27:41 -06:00
LillyJadeKatrin
ddced1a070 RetroAchievements - Android login callback
Modify the RetroAchievements login code in Android to pass in a callback, pop a message if login fails, close the login box if it succeeds.
2025-11-18 20:40:15 -05:00
Simonx22
00959738fe Android: Use Android's HandlerThread in ControllerInterface instead of our own implementation 2025-11-18 16:10:57 -05:00
Jordan Woyak
bd07d9dfd3
Merge pull request #14136 from Simonx22/android/compress-callback-kotlin
Android: Convert CompressCallback to Kotlin
2025-11-18 14:15:12 -06:00
Simonx22
d83c7c1a70 Android: Update Kotlin serialization plugin
I forgot to update this, which broke installing GPU drivers

Co-Authored-By: OatmealDome <OatmealDome@users.noreply.github.com>
2025-11-17 23:56:39 -05:00
Simonx22
0f7ee5b40f Android: Convert CompressCallback to Kotlin 2025-11-17 22:44:50 -05:00
Jordan Woyak
27f5c91624
Merge pull request #14131 from Simonx22/android/stereo-float-settings
Android: Convert stereo settings to floats
2025-11-17 15:45:24 -06:00
Simonx22
123b242e9b Android: Convert BooleanSupplier to Kotlin 2025-11-17 15:31:30 -05:00
Simonx22
a3e7a47ded Android: Convert stereo settings to floats to match C++ definitions
These settings were recently changed with 113c86f1b4 to be floats instead of ints.

This commit also changes the Android UI to use the direct convergence value instead of the percentage to match the Qt UI.
2025-11-17 15:01:00 -05:00
JosJuice
0d22dc0392
Merge pull request #14106 from Simonx22/android/dependency-updates-11102544758
Android: Update dependencies
2025-11-17 20:29:21 +01:00
JosJuice
f966c55e0c
Merge pull request #14097 from Simonx22/android/network-helper-kotlin
Android: Convert NetworkHelper to Kotlin
2025-11-17 20:28:20 +01:00
LillyJadeKatrin
1e0f6a557e Android Achievements - Hardcore disables
Disables state loading and emulation speeds below 100% when RetroAchievements hardcore mode is enabled.
2025-11-16 22:05:54 -05:00
LillyJadeKatrin
f4f26a26d2 Add login to achievement settings 2025-11-16 22:05:54 -05:00
LillyJadeKatrin
b662cd93ce Add Achievements submenu to Android settings 2025-11-16 22:05:53 -05:00
JosJuice
56532c850f
Merge pull request #14023 from JosJuice/android-overlay-ok
Android: Treat EmulationActivity dialog dismiss the same as OK
2025-11-16 18:36:08 +01:00
Simonx22
3fcc0427c9 Android: Convert NativeLibrary to Kotlin 2025-11-16 10:26:09 -05:00
JosJuice
e0f52e5799
Merge pull request #14104 from Simonx22/android/remove-extract-native-libs
Android: Remove deprecated extractNativeLibs manifest flag
2025-11-16 12:10:16 +01:00
JosJuice
060f792560 Android: Rate limit refreshInputOverlay calls from sliders
Sliders can trigger change listeners very rapidly, so let's add some
rate limiting so dragging a slider doesn't cause the whole UI to lag.
(Now the input overlay looks laggy when dragging a slider, though.)
2025-11-16 09:49:08 +01:00
JosJuice
a026a0d5e4 Android: Treat EmulationActivity dialog dismiss the same as OK
In the dialog where you can choose what controller the input overlay
should be controlling, there's an OK button. If you change controller
but don't press OK, your selection will be saved, but the input overlay
won't refresh to show the new controller unless you perform some other
action that would cause it to refresh. This is not good UX.

This commit changes the behavior not only of this dialog but also other
dialogs spawned by EmulationActivity so that everything is properly
updated when dismissing a dialog, as if you had pressed OK.
2025-11-16 09:46:00 +01:00
JosJuice
b74c3faa48
Merge pull request #13992 from JosJuice/android-register-for-activity-result
Android: Replace deprecated startActivityForResult
2025-11-16 09:43:04 +01:00
Simonx22
d1526157df Android: Remove unused BiMap class 2025-11-12 17:26:05 -05:00
JMC47
099ea79c43
Merge pull request #14098 from Simonx22/android/dolphin-application-kotlin
Android: Convert DolphinApplication to Kotlin
2025-11-11 16:58:27 -05:00
Simonx22
220315737f Android: Update dependencies
Note: This also updates Kotlin to 2.2.21 which requires small adjustments in our Kotlin code.
2025-11-11 16:48:12 -05:00
Simonx22
cdc21490e4 Android: Convert NetworkHelper to Kotlin 2025-11-11 15:58:07 -05:00
JosJuice
246b6fe0a7 Android: Replace deprecated startActivityForResult 2025-11-11 19:05:10 +01:00
Simonx22
a14014d9aa Android: Remove deprecated extractNativeLibs manifest flag
extractNativeLibs is deprecated. Native lib packaging is already controlled by
packaging.jniLibs.useLegacyPackaging (which we already have), so the manifest override is unnecessary.
2025-11-11 11:18:48 -05:00
Simonx22
4a3a0228ef Android: Keep main toolbar pinned on game grid
Prevents the version/build bar from sliding behind the status bar when scrolling so the time and build info remain readable instead of overlapping.
2025-11-10 06:47:10 -05:00
Simonx22
469782292c Android: Convert DolphinApplication to Kotlin 2025-11-09 19:45:41 -05:00
Simonx22
b733213bcf Android: Prevent dismissing the System Update dialog by tapping outside
Tapping outside the System Update dialog would previously close it and leave the update in a partially canceled, inconsistent state. This change disables outside-touch dismissal to avoid accidental interruptions and ensure the process completes cleanly.
2025-11-09 01:21:58 -05:00
JosJuice
f8cddf344d Android: Clear listener in SwitchSettingViewHolder
If bind was called more than once for a SwitchSettingViewHolder, the
line `binding.settingSwitch.isChecked = setting.isChecked` would
accidentally trigger the listener registered during the previous bind
call.
2025-11-08 20:31:22 -05:00
OatmealDome
4f849ec827
Merge pull request #14047 from Simonx22/reset-all-dolphin-settings-android
Android: Add Reset Dolphin Settings functionality
2025-11-08 14:03:44 -05:00
OatmealDome
5ee1ae43bb
Merge pull request #14077 from Simonx22/android-alert-message-kotlin
Android: Convert AlertMessage dialog to Kotlin
2025-11-08 14:03:19 -05:00
Simonx22
8ee767f292 Android: Convert AlertMessage dialog to Kotlin 2025-11-08 12:21:12 -05:00
Simonx22
82f658a28f Android: Use the shared HTTP analytics backend
We can now route Android analytics through Common::HttpAnalyticsBackend, drop the Volley sender, and keep the JNI layer limited to only transfer metadata since https://bugs.dolphin-emu.org/issues/11772 has been fixed.
2025-11-08 12:14:40 -05:00
Simonx22
ddbbb2ea4b Android: Replace Action1 helper with Kotlin lambda 2025-11-07 11:56:11 -05:00
Simonx22
f718a6b72f Android: Add Reset Dolphin Settings functionality 2025-11-02 20:09:23 -05:00
JosJuice
249f999c6a
Merge pull request #13655 from JosJuice/android-always-expand-sheets
Android: Expand bottom sheets on devices with touch too
2025-11-01 12:22:45 +01:00
JosJuice
1b8a54024c Android: Expand bottom sheets on devices with touch too
In a few places in Dolphin, we're using BottomSheetDialogFragments.
These unhelpfully tend to start out in a "collapsed" state when in
landscape mode (presumably depending on factors like screen size). The
user then has to manually expand them before they can meaningfully
interact with them.

We've been automatically setting BottomSheetDialogFragments to the
expanded state if the device Dolphin is running on doesn't support
touch, since with d-pad navigation it's impossible to expand these
sheets. But I think we should set them to expanded on devices that
support touch too. I haven't encountered a single case where you can do
anything useful with any of Dolphin's BottomSheetDialogFragments while
they're collapsed, so the user always has to expand sheets manually if
they start out collapsed. And just because a device supports touch
doesn't necessarily mean you're interacting with it through the touch
screen right now - you could be using a gamepad, for instance.
2025-10-30 21:22:41 +01:00
Simonx22
82c86221d6 Android: Save settings instantly after edits 2025-10-29 16:49:16 -04:00
JosJuice
f05f89e6b4 Android: Update NDK version to 29.0.14206865 2025-10-15 19:57:53 +02:00
JMC47
e1c7734ee4
Merge pull request #13260 from JosJuice/android-gcadapter-hotplug-callback
Android: Detect GCAdapter hotplug using BroadcastReceiver
2025-09-28 14:03:50 -04:00
Marocco2
008c292b4e Android: Set Dolphin documents' root supports testing parent child relationships.
Adds `DocumentsContract.Root.FLAG_SUPPORTS_IS_CHILD` to the list of the flags in order to show up for third-party apps for easier file syncing with local/cloud file server providers
2025-08-26 15:40:32 +02:00
Marocco2
834f3634a8 Android: Set Dolphin documents as Local only
Adds `DocumentsContract.Root.FLAG_LOCAL_ONLY` to the list of the flags in order to show up for third-party apps for easier file syncing with local/cloud file server providers
2025-08-25 19:52:36 +02:00
JosJuice
be669c7ce3
Merge pull request #13841 from JosJuice/android-opt-out-back
Android: Opt out of back invoked callback
2025-08-05 08:10:43 +02:00
Admiral H. Curtiss
5439a345a7
Merge pull request #13829 from JosJuice/android-retroachievements-pause-override
Android: Don't let RetroAchievements override onPause
2025-08-01 21:23:28 +02:00
JosJuice
5c7e8db26e Android: Opt out of back invoked callback
When 9d9b6d8 changed our target SDK version to Android 16, it made
Android 16 stop calling onBackPressed and stop delivering KEYCODE_BACK
events. Dolphin's code isn't ready for that yet.

Android lets us opt out of this new behavior for now, so let's do so.
But the opt-out will presumably stop working once we start targeting
Android 17, so we're going to have to update Dolphin's code within the
next one or two years to support the replacement API.
2025-08-01 19:18:09 +02:00
JosJuice
8524e725a8 Android: Add additional null check in GCAdapter
Just in case, since the documentation says this could be null.
2025-07-27 11:37:45 +02:00
JosJuice
e2e33becc9 Android: Detect GCAdapter connection using BroadcastReceiver
We can register a BroadcastReceiver to have Android tell us when a GC
adapter gets connected instead of having a loop where we continuously
call SleepCurrentThread(1000) and poll the current status. When waiting
for a GC adapter to connect, this both reduces power usage and improves
responsiveness.

Note that I made openAdapter get the UsbDevice that's been stored by the
hotplug code instead of having openAdapter find the UsbDevice on its own
like before. This is only because I want to ensure that the UsbDevice
being tracked for disconnection is the same as the UsbDevice actually
being used, in case the user has multiple adapters connected.
2025-07-27 11:21:04 +02:00
JosJuice
7508842859 Android: Clean up naming in Java_GCAdapter and Java_WiimoteAdapter
This isn't how we name things in Java/Kotlin.
2025-07-27 11:13:44 +02:00
JosJuice
c3be049571 Android: Don't let RetroAchievements override onPause
When Android sends Dolphin to the background, emulation *must* pause,
otherwise emulation continues running and continues outputting audio to
the user. RetroAchievements mustn't be allowed to override it.
2025-07-26 19:59:08 +02:00
JosJuice
a6642d5f79
Merge pull request #13789 from Simonx22/update-sdk36-gradle813
Android: Bump SDK to 36 and Gradle to 8.13
2025-07-26 11:19:44 +02:00
Simon
9d9b6d8705 Android: Bump SDK to 36 and Gradle to 8.13
Starting August 31, 2025, targeting at least Android 15 (API level 35) will be required: https://support.google.com/googleplay/android-developer/answer/11926878
This commit sets the target SDK to API level 36 (Android 16), the latest available version.
2025-07-24 15:43:52 -04:00
Jordan Woyak
c39c8277b7
Merge pull request #13674 from JosJuice/android-visualize-input
Android: Show input indicators in controller settings
2025-07-20 17:46:47 -05:00
JMC47
24b0bf01d5
Merge pull request #12836 from JosJuice/opensles-buffer-size
Android: Ask system for optimal audio buffer size and sample rate
2025-06-07 23:07:37 -04:00
JosJuice
43b254aaad Android: Update advanced mapping dialog when devices change
Without this, there was a bug where if you turned the device's screen
off and on again while in the advanced mapping dialog, the input
indicators would stop updating. This is because turning the screen on
again causes devices to refresh, which causes all devices to be
recreated, leaving the AdvancedMappingControlViewHolders stuck
referencing controls belonging to devices that are no longer being
updated.
2025-06-07 10:20:21 +02:00
JosJuice
1002f29691 Android: Show input indicators in controller settings 2025-06-07 10:20:20 +02:00
JosJuice
0dd601577d Android: Set parent when inflating RecyclerView.ViewHolders
This makes sure view holders get proper widths when they use
layout_width="match_parent". This becomes quite noticeable for
AdvancedMappingControlAdapter in the next commit, but I'm also
making the change for other adapters while I'm at it.
2025-06-07 10:20:19 +02:00
JosJuice
cf7b141eb9 Android: Make input mapping view holders observe input state changes 2025-06-07 10:20:19 +02:00
JosJuice
22fd0472ed Android: Pass CoreDevice.Control to AdvancedMappingControlViewHolder 2025-06-07 10:20:19 +02:00
JosJuice
4b4a775d5a Android: Make AdvancedMappingControlViewHolder a LifecycleOwner 2025-06-07 10:20:19 +02:00
JosJuice
5d7cba8cd9 Android: Make SettingViewHolder a LifecycleOwner 2025-06-07 10:20:19 +02:00
JosJuice
4214cb6eb8 Android: Make input state changes observable 2025-06-07 10:20:18 +02:00
JosJuice
5d2518d490 Android: Add android.hardware.microphone to manifest
Google Play is now blocking distribution for Android TV unless we
explicitly set the android.hardware.microphone hardware feature as
android:required="false", because it's inferring
android.hardware.microphone from the android.permission.RECORD_AUDIO we
added for Wii Speak emulation, with android:required defaulting to true.
I was under the belief that setting android:required="false" on
android.permission.RECORD_AUDIO would solve this, but looking closer at
the definition of <uses-permission>, it doesn't actually support
android:required attributes, so that presumably has no effect.
2025-06-04 21:30:51 +02:00
JosJuice
f99d3dbd5c Android: Ask system for optimal audio buffer size and sample rate
This can reduce audio latency according to
https://developer.android.com/ndk/guides/audio/opensl/opensl-prog-notes#perform.

Previously we were using the hardcoded values of 48000 Hz and 256 frames
per buffer. The sample rate we use with this change is 48000 Hz on all
devices I'm aware of, but the buffer size does vary across devices.

Terminology note: The old code used the term "sample" to refer to what
Android refers to as a "frame". "Frame" is a clearer term to use for
this, so I've changed OpenSLESStream's terminology. One frame consists
of one sample per channel.
2025-05-25 11:59:33 +02:00
JMC47
a62449711f
Merge pull request #12769 from sepalani/wii-speak
IOS/USB: Emulate Wii Speak using cubeb
2025-05-21 13:54:56 -04:00
JMC47
f1ffcf2b00
Merge pull request #13654 from JosJuice/android-clear-without-dismiss
Android: Don't dismiss AdvancedMappingDialog when pressing Clear
2025-05-16 14:33:49 -04:00
JosJuice
eeae30e2bb Android: Don't dismiss AdvancedMappingDialog when pressing Clear
If you already have a mapping set in the advanced mapping dialog and
want to change it, the easiest way to do it is to press Clear and then
select the new mapping from the list. But pressing Clear causes the
dialog to close, forcing you to open it again, which is inconvenient.
This commit makes it so the Clear button doesn't close the dialog.
2025-05-12 21:40:55 +02:00
JMC47
cf3702cbc8
Merge pull request #13046 from SuperSamus/vi-overclock
Add VBI Frequency Override
2025-05-12 13:36:55 -04:00
Martino Fontana
832570c658 Core: Add VBI Frequency Override
This feature allows overriding the frequency of the Vertical Blank Interrupt. For many games, this means that their gameplay speed will change without affecting audio, which would be useful by itself (e.g. grinding in RPGs).

However, there are games that use delta time for their game logic, which allows them to be played at >60 FPS at the same gameplay speed!

Some games aren't dynamic though, and require a patch to adjust their game speed variable.
2025-05-12 18:54:36 +02:00
JosJuice
5af5c83428
Merge pull request #13559 from tygyh/Android-Apply-style-alignment-refactorings
Android: Apply style alignment refactorings
2025-05-07 22:37:09 +02:00
Sepalani
61ab0faab8 Config: Rename MAIN_WII_SPEAK_CONNECTED to MAIN_WII_SPEAK_MUTED 2025-05-07 20:33:22 +04:00
Sepalani
dbc09bfb0d Android: Add emulated Wii Speak 2025-05-07 20:33:22 +04:00
JosJuice
6129953666 Android: Remove unused onSettingsFileNotFound and friends
Old cruft from when the Android code was loading INI files manually.
We don't have any handling for failing to load settings anymore.

This change also updates related comments to reflect how things actually
work nowadays.
2025-05-02 14:25:01 +02:00
JMC47
fcb4b04168
Merge pull request #13613 from JosJuice/android-ldrtl-list-item-mapping-id
Android: Fix incorrect ID in layout-ldrtl/list_item_mapping.xml
2025-05-01 21:33:09 -04:00
JMC47
1963305bea
Merge pull request #13605 from JosJuice/android-cinit-native
Android: Don't call NativeLibrary methods during class init
2025-05-01 21:31:21 -04:00
JosJuice
d64c20a67c Android: Fix incorrect ID in layout-ldrtl/list_item_mapping.xml
Probably a copy-paste error from layout-ldrtl/list_item_setting.xml.
This error made it so a long setting name could overlap with the
checkbox next to it if Dolphin was running with right-to-left layout.

The incorrect ID was apparently also causing the app:lintVitalRelease
build task to fail. I guess we're not running that build task, because I
only heard of this from someone building Dolphin locally.
2025-05-01 11:57:07 +02:00
JosJuice
7fa92160a2 Android: Don't call NativeLibrary methods during class init
There's no guarantee that directory initialization has completed by this
point, so we can't safely use NativeLibrary.

I'm making this change because of a crash being reported in Google Play
Console. The exact way it's crashing is mysterious to me, so I'm not
sure if this commit fixes the crash, but I think this commit is
a reasonable change to make even if it doesn't fix the crash. Backtrace
from Google Play Console:

  #00  pc 0x0000000000469074  /data/app/~~m0kqybFNfeqnDenQFc53XQ==/org.dolphinemu.dolphinemu-Mtaw0lU8DVUQbte2ZjBp3w==/lib/arm64/libmain.so (std::__ndk1::pair<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>> const, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>>::pair[abi:nn180000]<char const* const&, char const* const&, 0>(char const* const&, char const* const&)) (BuildId: 64cfebf5b574b6729ebc51799aa94ccc3238cbcc)
  #01  pc 0x0000000000468e9c  /data/app/~~m0kqybFNfeqnDenQFc53XQ==/org.dolphinemu.dolphinemu-Mtaw0lU8DVUQbte2ZjBp3w==/lib/arm64/libmain.so (std::__ndk1::pair<std::__ndk1::__tree_iterator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>>, std::__ndk1::__tree_node<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>>, void*>*, long>, bool> std::__ndk1::__tree<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>>, std::__ndk1::__map_value_compare<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>, std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>>, std::__ndk1::less<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>>, true>, std::__ndk1::allocator<std::__ndk1::__value_type<std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>, std::__ndk1::basic_string<char, std::__ndk1::char_traits<char>, std::__ndk1::allocator<char>>>>>::__emplace_unique_impl<char const* const&, char const* const&>(char const* const&, char const* const&)) (BuildId: 64cfebf5b574b6729ebc51799aa94ccc3238cbcc)
  #02  pc 0x0000000000462f08  /data/app/~~m0kqybFNfeqnDenQFc53XQ==/org.dolphinemu.dolphinemu-Mtaw0lU8DVUQbte2ZjBp3w==/lib/arm64/libmain.so (Common::Log::LogManager::GetLogTypes()) (BuildId: 64cfebf5b574b6729ebc51799aa94ccc3238cbcc)
  #03  pc 0x000000000044339c  /data/app/~~m0kqybFNfeqnDenQFc53XQ==/org.dolphinemu.dolphinemu-Mtaw0lU8DVUQbte2ZjBp3w==/lib/arm64/libmain.so (Java_org_dolphinemu_dolphinemu_NativeLibrary_GetLogTypeNames+56) (BuildId: 64cfebf5b574b6729ebc51799aa94ccc3238cbcc)
  #04  pc 0x000000000031456c  /data/misc/apexdata/com.android.art/dalvik-cache/arm64/boot.oat (art_jni_trampoline+108)
  #05  pc 0x0000000000781508  /apex/com.android.art/lib64/libart.so (nterp_helper+152)
  #06  pc 0x00000000002d94d4  /data/app/~~m0kqybFNfeqnDenQFc53XQ==/org.dolphinemu.dolphinemu-Mtaw0lU8DVUQbte2ZjBp3w==/base.apk (org.dolphinemu.dolphinemu.features.settings.ui.SettingsFragmentPresenter.<clinit>+16)
[...]
2025-04-28 21:37:03 +02:00
JosJuice
3ed3fb05af Android: Allow reporting start to analytics for non-main activity
a1691a4 made it so analytics start events can only be generated when
starting the main activity. However, some users launch Dolphin's
emulation activity from a separate frontend application, bypassing
Dolphin's main activity. This change adjusts the logic so that start
events can be generated if any activity is started after 6 hours of
inactivity. This more closely matches the behavior we had before
a1691a4, while still ensuring duplicate start events aren't generated.

I've also fixed the inconsistent indentation in ActivityTracker.kt.
2025-04-26 10:45:56 +02:00
Tilka
a95779add0
Merge pull request #13506 from JosJuice/android-time-played
Android: Show time played in game details
2025-04-25 01:43:53 +01:00
JosJuice
25fdde4204 Android: Update platform enum values
71f654c added a new platform in the middle of the C++ platform enum
without updating the corresponding Android code, making the Android code
incorrectly treat Wii discs as WAD files, WAD files as DOL/ELF files,
and so on. This commit fixes the problem.

To be able to add the new Triforce entry into the Platform enum without
it leading to the UI getting an additional tab, I'm splitting the enum
into Platform and PlatformTab. Platform now exactly matches the C++
enum (previously it excluded ELFOrDOL), and PlatformTab has the same
content as the old Platform.
2025-04-22 20:07:15 +02:00
Dr. Dystopia
71249dec33 Android: Apply style alignment refactorings 2025-04-22 13:34:21 +02:00
Zopolis4
494e2c05c2
Adding support for detecting .bin images 2025-04-21 22:05:24 +10:00
Shawn Hoffman
a1691a4031 Prevent android generating duplicate analytics events
dolphin-start event was being generated twice for the normal
end-user case, as can be seen in analytics data for some years.
The problem occured when:
* Android reaped the process hosting the dolphin activity
  (e.g. for power/memory saving).
and
* Dolphin activity was in "stopped" state for > 6 hours before
  being switched back to.

Under above conditions, both calls to ReportStartToAnalytics
would be performed, as dolphin thought it was being launched anew,
and also thought it had been asleep for > 6 hours.

fixes https://bugs.dolphin-emu.org/issues/13675
2025-04-19 22:16:01 -07:00
JosJuice
b8e70df413 Android: Show time played in game details
Unlike in DolphinQt, there isn't much space to show playtimes directly in
the game list, so I've put it in the game details dialog instead.
2025-04-19 14:34:49 +02:00
JosJuice
3eee52cb6b Android: Create toggle for enabling/disabling time tracking 2025-04-19 14:29:49 +02:00
Sam Belliveau
877864c23a Improve Performance of Granular Buffering + User Adjustable Buffer Size 2025-04-01 18:17:21 -04:00
JosJuice
9e9faf3be1 Android: Show message when trying to map disconnected device
Having the MotionAlertDialog immediately close is confusing for users.
Let's show a message to tell them what went wrong.
2025-03-23 21:39:08 +01:00
JosJuice
516c1314d2 Android: Don't use separate thread for MotionAlertDialog
This is an Android continuation of bc95c00. We now call
InputDetector::Update immediately after receiving an input event from
Android instead of periodically calling it in a sleep loop. This
improves detection of very short inputs, which are especially likely to
occur for volume buttons on phones (or at least on my phone) if you
don't intentionally keep them held down.
2025-03-23 21:39:04 +01:00
Jordan Woyak
ddb82a5e8c InputCommon/ControllerEmu: Break out functionality of EmulatedController
to eliminate redundant unused members in Wii Remote extension objects.
2025-03-15 14:30:43 -05:00
JosJuice
e637a05707
Merge pull request #12866 from JosJuice/android-log-types-sorting
Android: Replace log type names map with array
2025-03-15 16:01:33 +01:00
Sam Belliveau
f09ba10daa AudioCommon: Added Granular Synthesis 2025-03-14 01:22:35 -05:00
Jordan Woyak
01099d67cb
Merge pull request #13326 from nlebeck/taskviewmodel-mustrestartapp
Eliminate TaskViewModel's `mustRestartApp` field
2025-02-20 21:58:18 -06:00
Jordan Woyak
adc5b81c31 DolphinQt: Rename the pack/unpack SD Card buttons. 2025-02-12 13:30:48 -06:00
Niel Lebeck
56fd1f39d8 Eliminate TaskViewModel's mustRestartApp field
Instead of having UserDataImportWarningDialog set an
`onResultDismiss` callback that examines `mustRestartApp`, and having
UserDataActivity set `mustRestartApp`, just have UserDataActivity set
the callback directly.

This approach is no more data-race-y than the previous approach, and it
simplifies the code. (The behavior of restarting the app when the task
finishes is specific to the user data import flow, and there is no
reason for TaskViewModel to be directly aware of it.)
2025-02-02 12:24:51 -08:00
Daniel Peukert
f28e134c88
Clean up CRLF line endings 2025-01-12 11:06:04 +01:00
Admiral H. Curtiss
75abda6a3a
Merge pull request #12864 from JosJuice/android-window-compat
Android: Replace deprecated setSystemUiVisibility
2025-01-10 04:45:11 +01:00
Gamer64
764bf314e1 Android: Fix VSync option not working
It happened due to a typo from SECTION_GFX_HARDWARE
2024-12-24 10:41:45 +01:00
Dentomologist
7b8610f4ea VideoBackendBase: Clarify function name
Rename GetDefaultBackendName to GetDefaultBackendConfigName to
distinguish it from the display name.
2024-11-03 12:26:57 -08:00
JMC47
bab34ca060
Merge pull request #13140 from dreamsyntax/skip-efb-default-flip
GraphicsSettings: EFBAccessEnable=false by default
2024-10-28 18:58:37 -04:00
dreamsyntax
9dacefcbf1 GraphicsSettings: EFBAccessEnable=false by default
Makes Graphics -> Hacks -> Skip EFB Access from CPU enabled by default. Some GPU drivers stall when EFB access occurs in games where EFB is not used. Most games that require this setting set to 'true' already have this defined in their game inis.
2024-10-22 12:28:14 -07:00
mitaclaw
ff9be97ea1 JitCache: Add WipeBlockProfilingData Function
Accessible from DolphinQt and Android.
2024-10-18 23:50:26 -07:00
JosJuice
564e640acf Android: Add vsync setting
Recently we have been getting some requests to make the existing vsync
setting available in the Android GUI:

https://bugs.dolphin-emu.org/issues/13650
https://forums.dolphin-emu.org/Thread-vsync-toggle-for-android

I don't quite understand why enabling the vsync setting is helpful when
Android already enforces vsync, but I guess having the option available
doesn't hurt. I'm putting the setting under Advanced, unlike in
DolphinQt, since there's no clear reason why the typical user would want
to use this setting.
2024-10-14 12:20:15 +02:00
JMC47
8d5b6e8e86
Merge pull request #13069 from JosJuice/android-real-balance-board
Android: Add the "Real Balance Board" setting
2024-10-13 15:17:26 -04:00
Tilka
35ec2e97a8
Merge pull request #13079 from JosJuice/android-16k
Android: Add 16 KiB page size support
2024-10-12 10:11:33 +01:00
Tilka
c5ce90b786
Merge pull request #13080 from JosJuice/androidx-edge-to-edge
Android: Use enableEdgeToEdge
2024-10-12 10:11:11 +01:00
JosJuice
6ca2da53e8 Partially revert "Revert "Audit uses of IsRunning and GetState""
This reverts the revert commit bc67fc97c3,
except for the changes in BaseConfigLoader.cpp, which caused the bug
that made us revert 72cf2bdb87. PR 12917
contains an improved change to BaseConfigLoader.cpp, which can be merged
(or rejected) independently.

A few changes have also been made based on review comments.
2024-10-04 18:35:41 +02:00
JosJuice
d0e6573ac7 Android: Use enableEdgeToEdge
Dolphin has been using edge-to-edge rendering for a little while now,
but it has required a bit of manual work. Now that edge-to-edge is
becoming something expected of apps in Android 15, there's a nicer API
we can use.

Tested on Android 8, 11 and 13, with no changes in behavior noted.
2024-09-28 18:20:31 +02:00
JosJuice
14a802b58b Android: Add 16 KiB page size support
So far, Dolphin hasn't been able to run on Android devices that use a
16 KiB page size. 16 KiB page sizes are a very new Android feature that
no phones have shipped with so far, so we're still compatible with the
phones that exist out there, but let's get this fixed before phones
start shipping with 16 KiB page sizes.

Because I couldn't get Android Studio's emulator to work, I haven't been
able to confirm that this change actually makes Dolphin fully compatible
with devices that use a 16 KiB page size. But I have confirmed that this
doesn't break anything on a regular 4 KiB page size device.
2024-09-28 13:43:49 +02:00
JosJuice
0c1070a07b Android: Add the "Real Balance Board" setting 2024-09-22 21:51:12 +02:00
Tilka
10f06a48ef
Merge pull request #12863 from JosJuice/android-gamepad-sensors
Android: Fix and enable input device sensor input
2024-08-18 13:48:30 +01:00
OatmealDome
0c18393691
Merge pull request #12965 from JosJuice/android-ndk-27
Android: Update to NDK 27.0.12077973
2024-07-30 13:09:53 -04:00
JosJuice
91a323df96 Android: Update to NDK 27.0.12077973 2024-07-30 18:24:48 +02:00
MayImilae
9a730bacce Change Dual Core (speedup) to Dual Core (speedhack) 2024-07-28 03:56:58 -07:00
JosJuice
9193045989 Revert "Android: Disable input device sensor input due to crash"
This reverts commit 75fb1a7edf.
2024-07-28 11:29:17 +02:00
JosJuice
59cbe5a843 Android: Add workaround for AOSP input device sensor suspend bug 2024-07-28 11:29:17 +02:00
JosJuice
7b0a7f15b0 Android: Use structural equality for sensorDetails
To fix the crash in input device sensor handling, we should look up
Sensors using structural equality. Unfortunately, Sensor.equals
implements referential equality, and HashMap doesn't let us provide a
custom comparator. Because the number of sensors is relatively small,
and because we have a reason to keep a sorted list of sensors around
anyway, let's switch from HashMap to ArrayList.
2024-07-28 11:29:02 +02:00
Admiral H. Curtiss
5ea3d9fca0
Merge pull request #12856 from LillyJadeKatrin/retroachievements-pause-v2
Handle Pausing in AchievementManager
2024-07-04 22:53:04 +02:00