summaryrefslogtreecommitdiff
path: root/Source/Android
AgeCommit message (Collapse)Author
2025-10-29Android: Fix unused value warningDentomologist
Remove "env, " from "return env, GetControlPointer..." since the left side of a comma operator has no effect. This was presumably a copy/paste error from the function above it.
2025-10-29Android: Save settings instantly after editsSimonx22
2025-10-15Android: Update NDK version to 29.0.14206865JosJuice
2025-09-28Merge pull request #13260 from JosJuice/android-gcadapter-hotplug-callbackJMC47
Android: Detect GCAdapter hotplug using BroadcastReceiver
2025-09-19Logging: Don't overwrite LDEBUG verbosity in Release buildsDentomologist
Preserve the configured logging verbosity unless the user actually changes it, rather than capping it to LINFO on release builds. Rename LogManager::m_level to m_effective_level and distinguish between the config and effective level in various function/variable names. Make m_effective_level atomic to prevent data races when setting the effective log level from the config changed callback.
2025-08-26Android: Set Dolphin documents' root supports testing parent child ↵Marocco2
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-25Android: Set Dolphin documents as Local onlyMarocco2
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-05Merge pull request #13841 from JosJuice/android-opt-out-backJosJuice
Android: Opt out of back invoked callback
2025-08-03Host: Remove unnecessary functionsDentomologist
Remove Host_RefreshDSPDebuggerWindow (which hasn't done anything since DolphinWX was removed in 44b22c90) and DSP::Host::UpdateDebugger (which only called Host_RefreshDSPDebuggerWindow).
2025-08-03Host: Remove unnecessary functionDentomologist
Remove Host_UpdateMainFrame(). The only non-empty call happened in DolphinNoGUI which called s_update_main_frame_event.Set(), but DolphinNoGUI never waits on that event.
2025-08-01Merge pull request #13829 from JosJuice/android-retroachievements-pause-overrideAdmiral H. Curtiss
Android: Don't let RetroAchievements override onPause
2025-08-01Android: Opt out of back invoked callbackJosJuice
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-07-27Android: Add additional null check in GCAdapterJosJuice
Just in case, since the documentation says this could be null.
2025-07-27Android: Detect GCAdapter connection using BroadcastReceiverJosJuice
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-27Android: Clean up naming in Java_GCAdapter and Java_WiimoteAdapterJosJuice
This isn't how we name things in Java/Kotlin.
2025-07-26Android: Don't let RetroAchievements override onPauseJosJuice
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-26Merge pull request #13789 from Simonx22/update-sdk36-gradle813JosJuice
Android: Bump SDK to 36 and Gradle to 8.13
2025-07-24Android: Bump SDK to 36 and Gradle to 8.13Simon
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-20Merge pull request #13674 from JosJuice/android-visualize-inputJordan Woyak
Android: Show input indicators in controller settings
2025-06-09Merge pull request #13702 from CostPerUnit/masterJMC47
MappingWidget: Add Advanced Configuration Button to Point And Point Passthrough "Enable" boxes
2025-06-07Merge pull request #12836 from JosJuice/opensles-buffer-sizeJMC47
Android: Ask system for optimal audio buffer size and sample rate
2025-06-07Android: Update advanced mapping dialog when devices changeJosJuice
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-07Android: Show input indicators in controller settingsJosJuice
2025-06-07Android: Set parent when inflating RecyclerView.ViewHoldersJosJuice
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-07Android: Make input mapping view holders observe input state changesJosJuice
2025-06-07Android: Pass CoreDevice.Control to AdvancedMappingControlViewHolderJosJuice
2025-06-07Android: Make AdvancedMappingControlViewHolder a LifecycleOwnerJosJuice
2025-06-07Android: Make SettingViewHolder a LifecycleOwnerJosJuice
2025-06-07Android: Make input state changes observableJosJuice
2025-06-04Android: Add android.hardware.microphone to manifestJosJuice
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-05-29InputCommon/DolphinQt: Add advanced settings button for "Point" and "Point ↵CostPerUnit
(Passthrough)" "Enabled" checkboxes.
2025-05-25Android: Ask system for optimal audio buffer size and sample rateJosJuice
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-21Merge pull request #12769 from sepalani/wii-speakJMC47
IOS/USB: Emulate Wii Speak using cubeb
2025-05-16Merge pull request #13654 from JosJuice/android-clear-without-dismissJMC47
Android: Don't dismiss AdvancedMappingDialog when pressing Clear
2025-05-12Android: Don't dismiss AdvancedMappingDialog when pressing ClearJosJuice
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-12Merge pull request #13046 from SuperSamus/vi-overclockJMC47
Add VBI Frequency Override
2025-05-12Core: Add VBI Frequency OverrideMartino Fontana
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-07Merge pull request #13559 from tygyh/Android-Apply-style-alignment-refactoringsJosJuice
Android: Apply style alignment refactorings
2025-05-07Config: Rename MAIN_WII_SPEAK_CONNECTED to MAIN_WII_SPEAK_MUTEDSepalani
2025-05-07Android: Add emulated Wii SpeakSepalani
2025-05-02Android: Remove unused onSettingsFileNotFound and friendsJosJuice
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-01Merge pull request #13613 from JosJuice/android-ldrtl-list-item-mapping-idJMC47
Android: Fix incorrect ID in layout-ldrtl/list_item_mapping.xml
2025-05-01Merge pull request #13605 from JosJuice/android-cinit-nativeJMC47
Android: Don't call NativeLibrary methods during class init
2025-05-01Android: Fix incorrect ID in layout-ldrtl/list_item_mapping.xmlJosJuice
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-04-28Android: Don't call NativeLibrary methods during class initJosJuice
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-26Android: Allow reporting start to analytics for non-main activityJosJuice
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-25Merge pull request #13506 from JosJuice/android-time-playedTilka
Android: Show time played in game details
2025-04-22Android: Update platform enum valuesJosJuice
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-22Android: Apply style alignment refactoringsDr. Dystopia
2025-04-21Adding support for detecting .bin imagesZopolis4