<feed xmlns='http://www.w3.org/2005/Atom'>
<title>dolphin/Source/Android, branch release-prep-2609a</title>
<subtitle>GameCube and Wii emulator</subtitle>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/'/>
<entry>
<title>Request ACCESS_LOCAL_NETWORK permission on android 17 and up</title>
<updated>2026-10-07T23:55:50+00:00</updated>
<author>
<name>Tom Pratt</name>
<email>tom.pratt@outlook.com</email>
</author>
<published>2026-09-26T20:45:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=b5ded04314feafe27ebcc8db4557d697192be3ea'/>
<id>b5ded04314feafe27ebcc8db4557d697192be3ea</id>
<content type='text'>
Show the permission dialog the first time host or connect is clicked.

While the permission is not granted, show an info box at the bottom of the netplay setup screen explaining the need for the permission with a button to grant permission. Launch the app settings menu where the permission can be granted manually if the user has denied twice previously preventing us from showing the permission dialog.

Workarounds using the shouldShowRationale flag and detecting if the dialog showed via onPause to account for well known limitations in the android permissions API.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Show the permission dialog the first time host or connect is clicked.

While the permission is not granted, show an info box at the bottom of the netplay setup screen explaining the need for the permission with a button to grant permission. Launch the app settings menu where the permission can be granted manually if the user has denied twice previously preventing us from showing the permission dialog.

Workarounds using the shouldShowRationale flag and detecting if the dialog showed via onPause to account for well known limitations in the android permissions API.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix android settings crash on API level 28 and lower</title>
<updated>2026-10-07T23:55:28+00:00</updated>
<author>
<name>Tom Pratt</name>
<email>tom.pratt@outlook.com</email>
</author>
<published>2026-09-27T19:04:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=5b295d55879734ed7be312dc009596f4ce961848'/>
<id>5b295d55879734ed7be312dc009596f4ce961848</id>
<content type='text'>
These API levels don't allow color selectors to be used as backgrounds.

Switch to MaterialDivider and set the color via dividerColor instead of background.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
These API levels don't allow color selectors to be used as backgrounds.

Switch to MaterialDivider and set the color via dividerColor instead of background.
</pre>
</div>
</content>
</entry>
<entry>
<title>Android: Set abiFilters for ndk</title>
<updated>2026-10-07T23:55:11+00:00</updated>
<author>
<name>JosJuice</name>
<email>josjuice@gmail.com</email>
</author>
<published>2026-09-27T18:39:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=17f057ebd8deec5a3f958f26f4f6e2d36b03fc09'/>
<id>17f057ebd8deec5a3f958f26f4f6e2d36b03fc09</id>
<content type='text'>
Normally, Dolphin APKs have a lib folder that contains two subfolders:
arm64-v8a and x86_64. Both contain a libmain.so file, and arm64-v8a also
contains additional .so files for libadrenotools.

When we added netplay support for Android, we brought in Jetpack Compose
as a dependency, which in turn made libandroidx.graphics.path.so be
included in Dolphin APKs. Unfortunately, this .so file was included not
only for arm64-v8a and x86_64, but also for armeabi-v7a and x86. This
made Dolphin installable on devices that use one of these older ABIs,
but because libmain.so is missing, trying to start Dolphin on such a
device results in an instant crash. We have gotten a number of Google
Play reviews from armeabi-v7a users complaining about this crash.

This fixes the problem by setting abiFilters under ndk instead of under
cmake, as documented at https://developer.android.com/ndk/guides/abis.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Normally, Dolphin APKs have a lib folder that contains two subfolders:
arm64-v8a and x86_64. Both contain a libmain.so file, and arm64-v8a also
contains additional .so files for libadrenotools.

When we added netplay support for Android, we brought in Jetpack Compose
as a dependency, which in turn made libandroidx.graphics.path.so be
included in Dolphin APKs. Unfortunately, this .so file was included not
only for arm64-v8a and x86_64, but also for armeabi-v7a and x86. This
made Dolphin installable on devices that use one of these older ABIs,
but because libmain.so is missing, trying to start Dolphin on such a
device results in an instant crash. We have gotten a number of Google
Play reviews from armeabi-v7a users complaining about this crash.

This fixes the problem by setting abiFilters under ndk instead of under
cmake, as documented at https://developer.android.com/ndk/guides/abis.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #14750 from tom-pratt/netplay-controller-mapping</title>
<updated>2026-08-29T09:19:47+00:00</updated>
<author>
<name>JosJuice</name>
<email>josjuice@gmail.com</email>
</author>
<published>2026-08-29T09:19:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=30c9669d7b1d3bd2d1d2d413dfcabfa1decc7b58'/>
<id>30c9669d7b1d3bd2d1d2d413dfcabfa1decc7b58</id>
<content type='text'>
Android: Netplay controller mapping</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Android: Netplay controller mapping</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #14829 from TorresOwO/fix-skylanders-crash-13956</title>
<updated>2026-08-29T09:15:38+00:00</updated>
<author>
<name>JosJuice</name>
<email>josjuice@gmail.com</email>
</author>
<published>2026-08-29T09:15:38+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=9b50b88d2e48435652175d188c4da38fcb538a98'/>
<id>9b50b88d2e48435652175d188c4da38fcb538a98</id>
<content type='text'>
Android: Fix Crash when loading Skylanders file</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Android: Fix Crash when loading Skylanders file</pre>
</div>
</content>
</entry>
<entry>
<title>Fix netplay crash on pre API 31 devices</title>
<updated>2026-08-28T12:11:50+00:00</updated>
<author>
<name>Tom Pratt</name>
<email>tom.pratt@outlook.com</email>
</author>
<published>2026-08-28T12:11:50+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=0bca7edf206f8ec58f35ecab351e2ef889fdee71'/>
<id>0bca7edf206f8ec58f35ecab351e2ef889fdee71</id>
<content type='text'>
TypedArray doesn't implement AutoCloseable on older devices so .use{} caused a crash.

It turned out the special handling for background colours was unnecessary anyway.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
TypedArray doesn't implement AutoCloseable on older devices so .use{} caused a crash.

It turned out the special handling for background colours was unnecessary anyway.
</pre>
</div>
</content>
</entry>
<entry>
<title>Merge pull request #14718 from JosJuice/android-vibration-length</title>
<updated>2026-08-27T16:48:49+00:00</updated>
<author>
<name>JMC47</name>
<email>JMC4789@gmail.com</email>
</author>
<published>2026-08-27T16:48:49+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=4f8af23db516d8b6e9cd00e7b261a65b026514a8'/>
<id>4f8af23db516d8b6e9cd00e7b261a65b026514a8</id>
<content type='text'>
Android: Make vibration length variable</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Android: Make vibration length variable</pre>
</div>
</content>
</entry>
<entry>
<title>Android: Use OpenDocument for NFC figures and fix crash (Fixes #13956)</title>
<updated>2026-08-25T22:49:43+00:00</updated>
<author>
<name>Sergio Torres</name>
<email>sergiotorres20000@gmail.com</email>
</author>
<published>2026-08-25T21:40:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=b1e360e1e4f520818f6e0c8fdcd5be7becf7e1ed'/>
<id>b1e360e1e4f520818f6e0c8fdcd5be7becf7e1ed</id>
<content type='text'>
- Switch from ActivityResultContracts.GetContent() to OpenDocument()
  which restores ACTION_OPEN_DOCUMENT behavior, granting write access
  to file descriptors opened in C++ via ContentHandler.openFd().
- Replace unsafe force-unwraps (!!) in EmulationActivity with null checks.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Switch from ActivityResultContracts.GetContent() to OpenDocument()
  which restores ACTION_OPEN_DOCUMENT behavior, granting write access
  to file descriptors opened in C++ via ContentHandler.openFd().
- Replace unsafe force-unwraps (!!) in EmulationActivity with null checks.
</pre>
</div>
</content>
</entry>
<entry>
<title>Android controller mapping UI</title>
<updated>2026-08-24T17:36:00+00:00</updated>
<author>
<name>Tom Pratt</name>
<email>tom.pratt@outlook.com</email>
</author>
<published>2026-07-23T14:35:54+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=e6f5516ad7a6b019db57b981625c5e8fbb670d4a'/>
<id>e6f5516ad7a6b019db57b981625c5e8fbb670d4a</id>
<content type='text'>
UI for assigning netplay players to gamecube ports and wii remotes.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
UI for assigning netplay players to gamecube ports and wii remotes.
</pre>
</div>
</content>
</entry>
<entry>
<title>Netplay PlayerTable fixes</title>
<updated>2026-08-24T17:36:00+00:00</updated>
<author>
<name>Tom Pratt</name>
<email>tom.pratt@outlook.com</email>
</author>
<published>2026-07-21T16:45:44+00:00</published>
<link rel='alternate' type='text/html' href='https://git.dog6.net/dolphin/commit/?id=df4c394fc3456ab6af8ea841d9bb94f297f75e61'/>
<id>df4c394fc3456ab6af8ea841d9bb94f297f75e61</id>
<content type='text'>
- Improve the column measurement logic so it updates the column width when text changes.
- Use matchParentSize on the clickable target in OutlinedBox so that it is clickable when the OutlinedBox contains contents with dynamic height.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Improve the column measurement logic so it updates the column width when text changes.
- Use matchParentSize on the clickable target in OutlinedBox so that it is clickable when the OutlinedBox contains contents with dynamic height.
</pre>
</div>
</content>
</entry>
</feed>
