# DiPlay 0.2.22 — 2026-10-28 Public preview for compatible BYD Android head units. Android 7.0+ (API 24); on Android 7.0–8.1, wired CarPlay is confirmed on one car (a 2020 BYD Han EV with DiLink 2.0) and wireless still needs vehicle testing. This update fixes the two problems 0.2.21 introduced, wireless CarPlay over the car hotspot on BYD DiLink 3.0 and 4.0 and music playing too fast, makes USB voice recordings work, has the CarPlay screen and Home say why a connection fails, adds Korean and Turkish, and hardens DiPlay against bad input from other devices and apps. ## Highlights - Wireless CarPlay over the car hotspot connects again on BYD DiLink 3.0 and 4.0 head units where 0.2.21 picked a mobile-data interface and stayed on "Opening CarPlay". The **Hotspot interface (optional)** workaround can be cleared. [#936](https://github.com/shihabal3amri/DiPlay/pull/936), [#950](https://github.com/shihabal3amri/DiPlay/pull/950) - Music plays at the iPhone's speed again over Wi-Fi, from the first second of every song: no more 1.5 % speed-up followed by stutter. [#993](https://github.com/shihabal3amri/DiPlay/pull/993), [#1070](https://github.com/shihabal3amri/DiPlay/pull/1070), [#1080](https://github.com/shihabal3amri/DiPlay/pull/1080) - Over USB, WeChat voice messages, Voice Memos and dictation record the driver's voice instead of silence. [#1148](https://github.com/shihabal3amri/DiPlay/pull/1148) - Wired CarPlay connects on the first attempt after a replug or a reconnect with the cable in, and auto-start brings CarPlay to the front when it is already connecting. [#962](https://github.com/shihabal3amri/DiPlay/pull/962), [#1057](https://github.com/shihabal3amri/DiPlay/pull/1057), [#1085](https://github.com/shihabal3amri/DiPlay/pull/1085) - The CarPlay screen names the cause of a failed connection, such as an iPhone that is no longer paired, a car hotspot that is off or differs from the saved one, or a car that sees no USB device, with what to change; Home keeps the last problem until CarPlay connects. [#1058](https://github.com/shihabal3amri/DiPlay/pull/1058), [#1060](https://github.com/shihabal3amri/DiPlay/pull/1060), [#1062](https://github.com/shihabal3amri/DiPlay/pull/1062), [#1066](https://github.com/shihabal3amri/DiPlay/pull/1066) - DiPlay is available in Korean and Turkish. New options, off by default: keep CarPlay in the launcher card, navigation prompts that ask for audio focus, calls at the call's own rate, a full-screen dashboard map on DiLink 3.0, and the dashboard map on the Denza N9. [#1105](https://github.com/shihabal3amri/DiPlay/pull/1105), [#999](https://github.com/shihabal3amri/DiPlay/pull/999), [#1052](https://github.com/shihabal3amri/DiPlay/pull/1052), [#1051](https://github.com/shihabal3amri/DiPlay/pull/1051), [#898](https://github.com/shihabal3amri/DiPlay/pull/898), [#956](https://github.com/shihabal3amri/DiPlay/pull/956), [#1049](https://github.com/shihabal3amri/DiPlay/pull/1049) ## Fixes for 0.2.21 - Wireless CarPlay over the built-in car hotspot connects again on head units where Android cannot say which interface carries the hotspot. On BYD DiLink 3.0 and 4.0 units the hotspot runs on `wlan0` while the firmware's Wi-Fi patterns name only `softap0` and `wigig0`, and on an MG7 it runs on `ath0`. 0.2.21 then took a mobile-data interface (`rmnet_data…`) or an internal bridge (`br0`) for the hotspot, so the iPhone joined the hotspot but never reached DiPlay and CarPlay stayed on "Opening CarPlay" ([#921](https://github.com/shihabal3amri/DiPlay/issues/921), [#931](https://github.com/shihabal3amri/DiPlay/issues/931), [#944](https://github.com/shihabal3amri/DiPlay/issues/944), [#951](https://github.com/shihabal3amri/DiPlay/issues/951), [#955](https://github.com/shihabal3amri/DiPlay/issues/955), [#958](https://github.com/shihabal3amri/DiPlay/issues/958), [#991](https://github.com/shihabal3amri/DiPlay/issues/991), [#1019](https://github.com/shihabal3amri/DiPlay/issues/1019)). DiPlay again uses the interface 0.2.20 used there. The search for a hotspot on a wired interface such as `eth0.3` ([#573](https://github.com/shihabal3amri/DiPlay/issues/573)) now runs only when Android reports no hotspot interface at all, and never takes a mobile-data interface. The **Hotspot interface (optional)** workaround is no longer needed and can be cleared. Thanks to @Boring206. [#936](https://github.com/shihabal3amri/DiPlay/pull/936), [#950](https://github.com/shihabal3amri/DiPlay/pull/950) - Wireless music no longer plays 1.5 % fast and then stutters. Over Wi-Fi the iPhone sends music in bursts about 0.4 s apart, and 0.2.21's music clock adjustment measured the buffer only right after a burst, at its fullest, so with the default 300 ms music buffer it sped playback up to its limit until the buffer ran dry every 20–40 s ([#807](https://github.com/shihabal3amri/DiPlay/issues/807), [#867](https://github.com/shihabal3amri/DiPlay/issues/867), [#973](https://github.com/shihabal3amri/DiPlay/issues/973), [#976](https://github.com/shihabal3amri/DiPlay/issues/976)). It now uses the average level over time. On a test head unit the speed-up and the underruns were gone at the default buffer. Thanks to @Boring206. [#993](https://github.com/shihabal3amri/DiPlay/pull/993) - Music keeps the iPhone's speed from the start of every stream and after every skip. After [#993](https://github.com/shihabal3amri/DiPlay/pull/993), each realtime stream still started up to 1.5 % fast for about 25 s ([#1068](https://github.com/shihabal3amri/DiPlay/issues/1068), [#976](https://github.com/shihabal3amri/DiPlay/issues/976)), **Buffered music (experimental)** played fast for up to a minute after each start and skip ([#1031](https://github.com/shihabal3amri/DiPlay/issues/1031)), and on head units whose audio writes wait for room the speed wandered for minutes ([#1074](https://github.com/shihabal3amri/DiPlay/issues/1074)). The clock adjustment now measures the level the music actually holds after each start and keeps it there, and counts audio that arrives while a write waits. On a test head unit the speed stayed within 0.1 % of the iPhone's from the first second. Thanks to @Boring206. [#1070](https://github.com/shihabal3amri/DiPlay/pull/1070), [#1080](https://github.com/shihabal3amri/DiPlay/pull/1080) ## Connection setup and recovery - Wireless CarPlay starts up to 20 s sooner on head units whose network resolver is slow. Setting up the CarPlay announcement on the hotspot looked up the head unit's own address name first, which took 20 s on a BYD head unit (Android 10) before every connection; it now takes about 50 ms. Thanks to @lpcheng1208. [#972](https://github.com/shihabal3amri/DiPlay/pull/972) - Wired CarPlay connects on the first attempt after DiPlay was left or reconnected with the cable still plugged in. The iPhone tries DiPlay for only about 7 s after the start request, and after an unclosed session it kept its USB network closed for 15–26 s, so every attempt timed out ([#889](https://github.com/shihabal3amri/DiPlay/issues/889), [#610](https://github.com/shihabal3amri/DiPlay/issues/610), [#335](https://github.com/shihabal3amri/DiPlay/issues/335)). DiPlay now sends the start request once more when the USB network opens and the iPhone stays silent for 2 s. Fresh connections are unchanged. [#962](https://github.com/shihabal3amri/DiPlay/pull/962) - On Android 8 and 9 head units, DiPlay notices about 20 s after the iPhone drops off Wi-Fi and reconnects. Before, the CarPlay picture froze until the driver touched the screen ([#1005](https://github.com/shihabal3amri/DiPlay/issues/1005)). Android 10 and later already did this. [#1042](https://github.com/shihabal3amri/DiPlay/pull/1042) - When a wireless start failed because Bluetooth was off, turning Bluetooth on now retries at once instead of after a back-off of up to 30 s. [#914](https://github.com/shihabal3amri/DiPlay/pull/914) - After DiPlay was stopped during a Wi-Fi Direct session (an update installed over it, for example), the next start waits for Android to remove the old group instead of failing after 0.5 s with "Wi-Fi Direct did not respond" and losing a retry delay. [#915](https://github.com/shihabal3amri/DiPlay/pull/915) - **Import the car hotspot details (experimental)** asks the car to approve DiPlay's ADB access when the driver turns it on, instead of failing on a car that has not approved it yet, and saving the imported details no longer warns that the car's hotspot settings will be overwritten. [#919](https://github.com/shihabal3amri/DiPlay/pull/919) - On head units with Android 9 and earlier, the CarPlay quick menu offers Wi-Fi Direct again, as Settings does, and the Android 9 note no longer says Wi-Fi Direct is replaced. [#937](https://github.com/shihabal3amri/DiPlay/pull/937) - The CarPlay quick menu keeps showing the hotspot's name, band and channel after it is closed without changes, and after the CarPlay screen is recreated. [#924](https://github.com/shihabal3amri/DiPlay/pull/924) - When DiPlay cannot reach the head unit's network ADB while USB debugging is on, it says that network ADB does not answer and to turn it off and on again, instead of saying it is off. Some DiLink UI 7.0 units leave the switch on with nothing listening after a restart ([#1002](https://github.com/shihabal3amri/DiPlay/issues/1002)). [#1045](https://github.com/shihabal3amri/DiPlay/pull/1045) - When the car starts with CarPlay already connecting in the background, for example because a USB authenticator or the head unit opened it first, auto-start now brings CarPlay to the front instead of showing Home with **Open CarPlay** ([#1084](https://github.com/shihabal3amri/DiPlay/issues/1084), [#986](https://github.com/shihabal3amri/DiPlay/issues/986), [#1095](https://github.com/shihabal3amri/DiPlay/issues/1095)). [#1085](https://github.com/shihabal3amri/DiPlay/pull/1085) - The CarPlay screen names causes DiPlay already knows instead of "Connection interrupted. Retrying…": the chosen iPhone is no longer paired, nothing is paired, several devices are paired and none is chosen, or Wi-Fi Direct cannot use the preferred channel. In car hotspot mode it names a hotspot that is off, hotspot settings that differ from the saved ones, a saved hotspot interface that does not exist, and a hotspot that timed out or failed to start. Over USB, after 20 s without an iPhone it says whether the car sees any USB device at all ([#1038](https://github.com/shihabal3amri/DiPlay/issues/1038)). Each line comes with what to change. [#1058](https://github.com/shihabal3amri/DiPlay/pull/1058), [#1060](https://github.com/shihabal3amri/DiPlay/pull/1060), [#1062](https://github.com/shihabal3amri/DiPlay/pull/1062) - Home shows the last connection problem the CarPlay screen named, with its time, until CarPlay connects again, and the diagnostic report gives it on its second line. [#1066](https://github.com/shihabal3amri/DiPlay/pull/1066) - On head units without a VPN consent screen, the USB CarPlay screen says why DiPlay could not allow its VPN and shows the one ADB command that does ([#1011](https://github.com/shihabal3amri/DiPlay/issues/1011), [#294](https://github.com/shihabal3amri/DiPlay/issues/294)). [#1096](https://github.com/shihabal3amri/DiPlay/pull/1096) - When the iPhone opens CarPlay's screen but sends no picture for 10 s, the CarPlay screen says so and suggests restarting the iPhone, which fixed it in [#975](https://github.com/shihabal3amri/DiPlay/issues/975). [#1097](https://github.com/shihabal3amri/DiPlay/pull/1097) - A wired attempt whose USB network opens late, 28–30 s after the start request after a **Save and reconnect** ([#335](https://github.com/shihabal3amri/DiPlay/issues/335)), waits up to 45 s so DiPlay's second start request can still go out. [#1057](https://github.com/shihabal3amri/DiPlay/pull/1057) - **Existing Wi-Fi / same LAN** can name the network interface that carries the LAN, for head units that reach the router through an interface Android does not report as Wi-Fi, such as a USB network card on `eth1`. Leave it empty for the automatic choice. Tested on a 2022 Seal EV (DiLink 4.0) with a USB network card. Thanks to @wdubaiyu. [#1113](https://github.com/shihabal3amri/DiPlay/pull/1113) ## Display and touch - Two-finger gestures such as pinching in Apple Maps no longer jump. When the first finger lifted, the second one was reported as a new press and the first was released at the screen's corner ([#444](https://github.com/shihabal3amri/DiPlay/issues/444)). Each finger now keeps its place from press to release. [#912](https://github.com/shihabal3amri/DiPlay/pull/912) - Opening the quick menu with the settings swipe no longer taps whatever lies under the first finger. With the swipe on, a new touch reaches the iPhone after 80 ms, on lift or on a move, so the swipe's fingers land first. Taps and drags are not delayed. [#922](https://github.com/shihabal3amri/DiPlay/pull/922) - **Settings → Display → CarPlay size** shows the length actually saved, with each preset's millimetres (Large 250 mm, Medium 300 mm, Small 350 mm) and a Custom entry, and the quick menu's physical length moves in 5 mm steps instead of 25 mm ([#913](https://github.com/shihabal3amri/DiPlay/issues/913)). [#1032](https://github.com/shihabal3amri/DiPlay/pull/1032) - **Settings → Display → Frame rate** shows a rate set in the quick menu, such as 45 fps, instead of "30 fps", and 30 fps can be chosen from it again. [#934](https://github.com/shihabal3amri/DiPlay/pull/934) - The quick menu's display summary names the size DiPlay actually requests, and its video and full-screen lines are in the menu's language. [#923](https://github.com/shihabal3amri/DiPlay/pull/923) - After the CarPlay screen is recreated during a session, for example by a language change, day/night changes and the Siri and wheel keys reach the iPhone again. [#933](https://github.com/shihabal3amri/DiPlay/pull/933) - **Keep CarPlay in the launcher card (experimental)** (**Settings → Advanced**), off by default: for launchers that show DiPlay in a card or picture-in-picture window, such as BYD's DiYou desktop and Dudu desktop, CarPlay opens in DiPlay's own window, as in 0.2.11 and earlier, instead of a separate full-screen one ([#463](https://github.com/shihabal3amri/DiPlay/issues/463), [#406](https://github.com/shihabal3amri/DiPlay/issues/406), [#1003](https://github.com/shihabal3amri/DiPlay/issues/1003)). Tried in a car by @FangJInGuang, where it behaved as intended. [#1052](https://github.com/shihabal3amri/DiPlay/pull/1052) - A drag over a slow connection sends the finger's newest position instead of queueing every old one, so the map follows the finger again once the connection catches up. Presses and releases are never merged. [#1134](https://github.com/shihabal3amri/DiPlay/pull/1134) - Touch handling no longer builds a protocol hex dump for every touch event that nobody reads. [#1131](https://github.com/shihabal3amri/DiPlay/pull/1131) ## Audio, calls and Siri - Music and navigation are heard again after a call on head units that were already in their call state before it, for example because of the car's own phone. DiPlay set that state back when the call ended and so kept the head unit in it ([#987](https://github.com/shihabal3amri/DiPlay/issues/987)); it now only withdraws its own request. [#994](https://github.com/shihabal3amri/DiPlay/pull/994) - **Key for Siri** and **Key for Play/pause** can learn a key that reaches DiPlay's window but not the wheel key service, such as the knob on a Harman head unit ([#1021](https://github.com/shihabal3amri/DiPlay/issues/1021)). [#1025](https://github.com/shihabal3amri/DiPlay/pull/1025) - **Calls at the call's own rate (experimental)**, off by default: calls and their microphone are offered at the call's own rate instead of 48 kHz. On a Geely Monjaro, WhatsApp calls kept restarting and the other person heard nothing; with this on, the call ran at 32 kHz and worked. Thanks to @sa3eedo12 and @kuanysh-baltagarayev. [#898](https://github.com/shihabal3amri/DiPlay/pull/898) - **Navigation prompts ask for audio focus** (**Settings → Advanced**, with **Audio focus** on), off by default: each navigation prompt asks for temporary focus that lets other sound duck, for head units that play nothing without focus ([#946](https://github.com/shihabal3amri/DiPlay/issues/946)) or where music should get quieter during prompts ([#545](https://github.com/shihabal3amri/DiPlay/issues/545)). [#1051](https://github.com/shihabal3amri/DiPlay/pull/1051) - Over USB, WeChat voice messages, Voice Memos and dictation record the driver's voice instead of silence ([#1094](https://github.com/shihabal3amri/DiPlay/issues/1094), [#718](https://github.com/shihabal3amri/DiPlay/issues/718), [#1017](https://github.com/shihabal3amri/DiPlay/issues/1017), [#1040](https://github.com/shihabal3amri/DiPlay/issues/1040)). Their 48 kHz microphone audio went out in packets too large for the USB network link, while 24 kHz Siri packets fitted. DiPlay now sends 48 kHz audio in 10 ms packets that fit. Pending in-car confirmation. [#1148](https://github.com/shihabal3amri/DiPlay/pull/1148) ## Dashboard - **Dashboard map shape** on BYD DiLink 3.0: half screen (as before) or full screen, so the CarPlay map can fill the cluster ([#870](https://github.com/shihabal3amri/DiPlay/issues/870)). Tested on a DiLink 3.0 car. Thanks to @Proselyte-M. [#956](https://github.com/shihabal3amri/DiPlay/pull/956) - **CarPlay map on instrument cluster** works on the Lynk & Co 03 (2025) head unit (`geely_fx11`, Android 11). DiPlay asks the head unit for the cluster projection, gives it back when the session ends, and takes it again when the car's own map lets go. Only this head unit is verified. Thanks to @macheteHot. [#843](https://github.com/shihabal3amri/DiPlay/pull/843) - The cluster's album cover no longer disappears during a song or after a skip. Empty or unreadable artwork transfers kept replacing a valid cover ([#660](https://github.com/shihabal3amri/DiPlay/pull/660)). Covers and song text now cross-fade, the music card can be sized from 50 to 300 % in 1 % steps, its frame takes the cover's colour, and the speedometer card is square. **Use album color for speedometer background**, off by default, matches the speedometer to the cover. Tested in a BYD Song Pro. Thanks to @LuisCav29. [#1033](https://github.com/shihabal3amri/DiPlay/pull/1033) - **Auto-activate music card**, off by default, opens BYD's media screen once so the cluster shows the song card, which stays hidden until the car's media system has been opened once, then returns to CarPlay. Thanks to @wdubaiyu. [#959](https://github.com/shihabal3amri/DiPlay/pull/959) - Dashboard map on the Denza N9 (2025, OTA V1.8): its firmware is added to the DiLink 5.1 list and the side and full map are placed for its 2560×720 cluster, inferred from owner photos ([#301](https://github.com/shihabal3amri/DiPlay/issues/301)). Pending in-car acceptance. [#1049](https://github.com/shihabal3amri/DiPlay/pull/1049) - The cluster map starts after CarPlay's main screen shows its first picture, and a cluster display that appears late joins the running session where its stream already fits. Thanks to @lpcheng1208. [#981](https://github.com/shihabal3amri/DiPlay/pull/981) - With **Use album color for speedometer background** on, the speed and unit switch between black and white for contrast with the album colour. Thanks to @LuisCav29. [#1072](https://github.com/shihabal3amri/DiPlay/pull/1072) ## Home screen and ambient lighting - The home-screen bubble can no longer be dragged off the screen or under a system bar, where it could not be tapped again. [#930](https://github.com/shihabal3amri/DiPlay/pull/930) - **Car's own music rhythm** can be turned on on a 2023 Han, whose audio service stops the rhythm with a different call. Thanks to @sa3eedo12. [#957](https://github.com/shihabal3amri/DiPlay/pull/957) - With **Send music data to the car's rhythm** on, short sounds such as a kick drum between two sends now reach the car. [#938](https://github.com/shihabal3amri/DiPlay/pull/938) - Turning **Car's own music rhythm** off while its check is still running leaves it off. [#939](https://github.com/shihabal3amri/DiPlay/pull/939) - The launcher bubble's settings card shows its own icon instead of a solid block, and the note in the ambient light dialog lines up with its control. Thanks to @macheteHot. [#1034](https://github.com/shihabal3amri/DiPlay/pull/1034), [#1035](https://github.com/shihabal3amri/DiPlay/pull/1035) ## Settings and updates - Home shows **Update available** when DiPlay comes back after the background check found a release, not only after DiPlay was closed and opened again. [#947](https://github.com/shihabal3amri/DiPlay/pull/947) - A settings backup now includes the resolution percentage, the ambient light delay, the third dashboard route, calls on speakerphone, the navigation voice level and the launcher bubble. [#928](https://github.com/shihabal3amri/DiPlay/pull/928) - Settings search finds sliders, such as **Navigation guidance volume**, and finds the HEVC switch, now titled **Efficient video (HEVC)** ([#965](https://github.com/shihabal3amri/DiPlay/issues/965)). [#935](https://github.com/shihabal3amri/DiPlay/pull/935), [#969](https://github.com/shihabal3amri/DiPlay/pull/969) - The setup guide no longer says "Suggested for Not sure" when the DiLink version is unknown. [#929](https://github.com/shihabal3amri/DiPlay/pull/929) - The settings backup and report pages a phone opens are available in Italian. [#925](https://github.com/shihabal3amri/DiPlay/pull/925) - The phone page's address no longer changes when it is reopened right after leaving it. [#932](https://github.com/shihabal3amri/DiPlay/pull/932) - DiPlay is available in **Korean** (한국어). Thanks to @boy331990. [#1105](https://github.com/shihabal3amri/DiPlay/pull/1105) - DiPlay is available in **Turkish** (Türkçe). Thanks to @Efeeugur. [#999](https://github.com/shihabal3amri/DiPlay/pull/999) - An update is downloaded only from `https://github.com/…` with a plain APK file name, and a download over 64 MiB stops. [#1143](https://github.com/shihabal3amri/DiPlay/pull/1143) - A settings backup restores only the known picture and car hotspot settings, with the right type, so an edited backup can no longer stop DiPlay from starting. [#1136](https://github.com/shihabal3amri/DiPlay/pull/1136) ## Navigation - On ECARX head units (Geely, Lynk & Co), DiPlay sends the car's wheel speed and gear to the iPhone with **Report location to iPhone** on, read from the head unit's own car SDK, for positioning in tunnels. Tested on a Geely Monjaro. Thanks to @kuanysh-baltagarayev. [#1089](https://github.com/shihabal3amri/DiPlay/pull/1089) - DiPlay tells the iPhone it can take lane guidance, and the report logs each lane update (`DiPlay-Lane:`) for cars where lane arrows could be shown later ([#927](https://github.com/shihabal3amri/DiPlay/issues/927), [#977](https://github.com/shihabal3amri/DiPlay/issues/977)). Nothing is drawn yet. Thanks to @macheteHot. [#1028](https://github.com/shihabal3amri/DiPlay/pull/1028) ## Diagnostics - When a microphone window records only silence, the report adds the audio mode and the sources of other recordings, and the `Microphone:` lines name the source DiPlay actually records from ([#987](https://github.com/shihabal3amri/DiPlay/issues/987)). [#995](https://github.com/shihabal3amri/DiPlay/pull/995) - A minute that sent the iPhone no wheel speed says what the speed and gear reads returned ([#807](https://github.com/shihabal3amri/DiPlay/issues/807)). [#996](https://github.com/shihabal3amri/DiPlay/pull/996) - A media button that CarPlay does not use is listed under Wheel keys, so a car that sends its own code for a key shows it ([#610](https://github.com/shihabal3amri/DiPlay/issues/610)). [#970](https://github.com/shihabal3amri/DiPlay/pull/970) - The `Audio: rtp clock` line names the microphone clock for PCM correctly. [#963](https://github.com/shihabal3amri/DiPlay/pull/963) - **View report** opens at once even for a full report: it shows the report's head (version, head unit, settings) and its newest part. Saving and sharing still give the full report. [#1132](https://github.com/shihabal3amri/DiPlay/pull/1132) - The session log is written on a background thread, so the screen and network threads no longer wait for the disk; under overload the log says how many lines it dropped. [#1133](https://github.com/shihabal3amri/DiPlay/pull/1133) - Reports hide the iPhone's USB id in its dashed form too, logcat no longer shows a generated hotspot name, and wired sessions no longer log one line per USB acknowledgement. [#1141](https://github.com/shihabal3amri/DiPlay/pull/1141), [#1139](https://github.com/shihabal3amri/DiPlay/pull/1139), [#1144](https://github.com/shihabal3amri/DiPlay/pull/1144) ## Security and robustness Thanks to @aloaiza-dev for this series. A normal session behaves as before; the one visible change is the remote MFI rule below. - What another device on the same network or USB cable sends can no longer make DiPlay buffer or allocate without limit: control requests, iAP packages, Bonjour probe replies, binary plists and USB network blocks are bounded, and a bad one ends only that connection. [#1122](https://github.com/shihabal3amri/DiPlay/pull/1122), [#1125](https://github.com/shihabal3amri/DiPlay/pull/1125), [#1126](https://github.com/shihabal3amri/DiPlay/pull/1126), [#1128](https://github.com/shihabal3amri/DiPlay/pull/1128) - Other apps on the head unit can no longer open the settings backup page (which starts a web server), start a connection through DiPlay's Bluetooth wake, answer DiPlay's USB permission request on Android 12 and older, or hold more than four embedded maps. [#1138](https://github.com/shihabal3amri/DiPlay/pull/1138), [#1129](https://github.com/shihabal3amri/DiPlay/pull/1129), [#1140](https://github.com/shihabal3amri/DiPlay/pull/1140) - A remote MFI server on a public host must use `https://`; `http://` is accepted only on a private network. An owner with a public `http://` server saved now gets an error instead of connecting. [#1127](https://github.com/shihabal3amri/DiPlay/pull/1127) - The ambient light worker refuses a symlinked lock file, the BYD call tool quotes its APK path, and the sample launchers bind only DiPlay's map service. [#1135](https://github.com/shihabal3amri/DiPlay/pull/1135), [#1137](https://github.com/shihabal3amri/DiPlay/pull/1137), [#1142](https://github.com/shihabal3amri/DiPlay/pull/1142) - Screen, iAP, video-settings and event connections, and clock-timing replies, are accepted only from the iPhone that holds the control session, so another device on the network can no longer end the session with a bad frame or move the clock. Tested in real sessions over Wi-Fi Direct (IPv4 and IPv6) and USB; car hotspot mode was not tested before release. Thanks to @Boring206 for the sessions. [#1123](https://github.com/shihabal3amri/DiPlay/pull/1123) ## Updating and reporting problems Install the official APK over the previous public release to preserve settings and pairing records. The package remains `com.shihab.diplay`; release packaging verifies the existing signing certificate. Source builds omit runtime authentication assets by default; see [building from source](BUILD.md). Reproduce remaining problems on **0.2.22**, then open **Settings → Diagnostics → Save diagnostic report**. Android 10+ normally saves to **Downloads/DiPlay**; on Android 7.0–9, DiPlay asks for storage access and saves there too. If it is unavailable, follow the save confirmation and use **View report** or **Share**. Review the `.txt` and attach it as a file to a matching [existing issue](https://github.com/shihabal3amri/DiPlay/issues) or [new issue](https://github.com/shihabal3amri/DiPlay/issues/new/choose); a report pasted as text is cut off by GitHub. Connection reports require the diagnostic log. Reports are not uploaded automatically. Include car/head unit, Android/DiLink and full firmware, iPhone/iOS, USB or wireless mode, relevant settings, reproduction steps and failure time. See [validation](VALIDATION.md) for automated checks. No new maintainer vehicle test of the complete release is claimed. The entries marked "Pending in-car acceptance", the USB microphone change, car hotspot mode with the new connection checks, and the options that are off by default need current in-car feedback; test optional features while parked. Thanks to the contributors of the 84 pull requests in this release, and to the users supplying diagnostic reports and vehicle feedback.