WIP: Run on Android System WebView 80 (Android 11's stock 83) #49
Closed
asxpi
wants to merge 2 commits from
asxpi/anotherim-js:fix/webview-80 into develop
pull from: asxpi/anotherim-js:fix/webview-80
merge into: another-im:develop
another-im:develop
another-im:fix/relock-dismiss
another-im:fix/settings-accounts
another-im:feat/unified-dialogs-1
another-im:feat/unified-dialogs-2
another-im:feat/unified-dialogs-3
another-im:feat/one-status
another-im:macos-0.6.1
another-im:fix/console-tab-out
another-im:fix/desktop-drop
another-im:fix/xml-console-menu
another-im:feat/telegram-connect
another-im:feat/chat-tags
another-im:feat/muc-omemo
another-im:integrate/origin-develop-2026-10-02
another-im:fix/media-bubble-size
another-im:fix/empty-click-focus
another-im:feat/system-font-default
another-im:integrate/develop-2026-10-02
another-im:fix/attachment-decrypt
another-im:feat/system-font
another-im:fix/chat-links
another-im:fix/android-background-network
another-im:feat/tray
another-im:feat/thumb-cache
another-im:fix/android-csi-native
another-im:feat/opfs-store
another-im:fix/alttab-focus
another-im:try/groupcalls
another-im:feat/pwa-install
another-im:integrate/0.3.0
another-im:fix/upload-bubble-030
another-im:feat/drag-select
another-im:fix/upload-bubble
another-im:feat/encryption-info
another-im:chore/libtacky-path
another-im:feat/chat-header-menus
another-im:integrate/develop
another-im:fix/saved-top-linux-voice
another-im:fix/dialog-close-icons
another-im:feat/window-title-unread
another-im:feat/groupcalls
another-im:fix/open-picture-one-tap
another-im:feat/server-info-console
another-im:fix/chat-open-scroll-end
another-im:fix/desktop-push-mutes
another-im:fix/android-mute-push-selection
another-im:feat/otr-lock-colours
another-im:otr-v3-secret-chats
another-im:chore/remove-otr
another-im:feat/room-invites
another-im:feat/voice-video-messages
another-im:docs/readme
another-im:fix/android-empty-files
another-im:api-freeze
another-im:feat/push-counts
another-im:feat/h264-android-save
another-im:feat/keep-attachments-decrypted
another-im:feat/media-player
another-im:feat/fix-subdomain-attachments
another-im:feat/fonts-pt-sans
another-im:feat/always-decrypt-on-the-fly
another-im:feat/default-scale-125
another-im:fix/composer-focus-after-send
another-im:feat/android-native-calls
another-im:feat/media-stream-decrypt
another-im:feat/download-failure
another-im:feat/outbox-cap
another-im:feat/web-call-sheet
another-im:feat/first-run-push-check
another-im:feat/font-size-110
another-im:feat/log-view
another-im:fix/failed-transfer-history
another-im:feat/secure-unlock
another-im:feat/tpm-desktop
another-im:feat/tpm-android
another-im:feat/api-freeze-client
No reviewers
Labels
Clear labels
bug
Something is not working
duplicate
This issue or pull request already exists
feature request
New feature
linux
linux exclusive
macos
macos exclusive
needsinfo
Needs more information
severity: high
Major issue, significantly impacts usability or blocks core functionality
severity: low
Minor issue, cosmetic or rarely affects usage
severity: medium
Noticeable issue, but there is a workaround or limited impact
telegram_gw
issues related to the telegram gw
ui/ux
issues related to the interface and user experience (visual glitches, layout, interactions, usability problems)
windows
windows exclusive
wontfix
This won't be fixed
No labels
bug
duplicate
feature request
linux
macos
needsinfo
severity: high
severity: low
severity: medium
telegram_gw
ui/ux
windows
wontfix
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set
Reference
another-im/anotherim-js!49
Loading…
Reference in a new issue
No description provided.
Delete branch "asxpi/anotherim-js:fix/webview-80"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The app on Android System WebView 80 to 110, which covers Android 11's stock WebView (83).
What was wrong
Array.prototype.at(Chromium 92) andArray.prototype.with(110) threw before the first screen, which then showed only "another.im failed to start".inert(102), so on older engines Tab reached fields and a call's Answer button behind the PIN.gap(84),inset(87),aspect-ratio(88),:where()(88),:focus-visibleinside selector lists (86) andcolor-mix()(111) are all missing there. The visible results:<button>there can't be a grid container--chat-*tokens intheme.csswere dropped together with their:where()ruleWhat this changes
ui/src/polyfills.ts, imported first bymain.ts, addsat()andwith()where missing, plusstructuredClonein mock builds.test/polyfills.test.tsalso scanssrc/for other post-80 built-ins, so a new one fails the tests.inertis missing.ui/legacy-css.tsis a Vite plugin that runs in production builds only. It rewrites the Litcssliterals and the global sheets:insetandmargin-inline/padding-block,:focus-visiblesplit out of selector lists,:where()unwrapped, avhfallback beforedvh,::-webkit-scrollbarbesidescrollbar-width, and a viewport@mediacopy of@container.color-mix(…)becomesvar(--cm-<hash>, color-mix(…)).aspect-ratiobeside a width that doesn't depend on the parent gets a height under@supports not (aspect-ratio: 1).gapand centring grids get margin fallbacks and flex-column fallbacks, scoped to:host-context(.no-flex-gap)and.no-button-grid.ui/src/legacy-css.tsruns in the page. It setsno-flex-gap,no-button-gridandno-focus-visibleon<html>only where the engine lacks the feature. It also computes every--cm-*from the theme on:root, and recomputes on theme or accent changes.build.cssTarget: 'chrome80'stops the minifier from foldinginsetback together.shotBox/clipBox/stickers).aim-webview-bannershows a note at the top of the chat list on Chromium/WebView older than 88. In the app it has an "Update…" button that opens Android System WebView on Play. Closing it is remembered per WebView version. Its strings are in all catalogues.Tested
make build-mock. Phone and desktop sizes, the chat list, an open chat, sheets, Preferences › Appearance and Night mode were compared side by side with Chromium 154; they match to within a few pixels.fcvtzu d1, d0inlibanotherim_tacky.so. That's a gap in the emulator, not the app; a real arm64 phone runs the instruction natively. It still needs a check on a real Android 11 phone.make check STRICT=1is clean.legacy-css(12),legacy-css-runtime(5), and the app lock.make test-uirun passed 2674 of 2687, with 8 skipped and 5 failures in timing-sensitive tests. One of those,one-client's broker sign-in, fails just as often on plaindevelopunder load. The other four didn't fail again when their files were rerun on their own.Known gaps on 80–87
color-mix()of tokens defined only on a subtree (a chat side's own tokens) or ofcurrentColor: 4 uses, which stay unset as before.aspect-ratiobeside percentage widths on the call/camera video tiles, which keep their natural shape instead.Note for the AI that merges this
This branch is based on
developatdc75e941. Before merging:developand rerunmake check STRICT=1andmake test-ui.developsincedc75e941for code that needs the same treatment:toSorted,findLast,Object.hasOwn,structuredCloneoutside the mock,replaceAll,Promise.withResolvers,groupBy, iterator helpers,AbortSignal.timeout. Add each one toui/src/polyfills.ts, or write it out.test/polyfills.test.ts'sPAST_80list only catches what it names, so extend it for anything new.:has(),:is(), CSS nesting,subgrid,@layer,light-dark(), relative colours,text-wrap,translate/scale/rotateas properties,inertused for anything other than the lock.gap,inset,color-mix()on root tokens, and centring grids.media-browser.ts,theme-picker.tsandmessage-row.ts:aspect-ratiobeside a%widthgap,aspect-ratioorcolor-mix()in inlinestyle=strings, which the plugin can't seecolor-mix()of tokens defined only inside a componenttabindex="-1"containers focused from script are covered bysharedStyles, provided the component includessharedStyles.make build-mock, servebuild/ui-mock, and open it in the Chromium snapshotLinux_x64/722234. The pages to look at are the chat list, an open chat, a sheet, and Preferences › Appearance.tools/i18n-extract.mjs --check --strict).🤖 Generated with Claude Code
Pull request closed