Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
344 commits
Select commit Hold shift + click to select a range
be04a68
compose test [nfc]: Give enterTopic a dartdoc
chrisbobbe Dec 30, 2024
cb1eb7d
compose_box test [nfc]: Make a enterContent helper
chrisbobbe Jan 22, 2025
c0b9a5d
test [nfc]: Factor out `checkNoErrorDialog` helper
chrisbobbe Dec 30, 2024
e67b014
compose test: Test topic- and content-max-length validation errors
chrisbobbe Dec 30, 2024
a23309a
compose: Enforce max topic/content length by code points, following API
chrisbobbe Dec 30, 2024
12ce869
subscription_list: Sort leading emoji first in channel names
lakshya1goel Jan 23, 2025
dbe1cad
test_app: Assert the store has an Account for the passed `accountId`
chrisbobbe Dec 11, 2024
79ada37
app_bar [nfc]: Centralize _getEffectiveCenterTitle in our wrapper
chrisbobbe Dec 11, 2024
f53763a
msglist [nfc]: Remove no-op Center widget in _MessageListPageState
chrisbobbe Nov 1, 2024
e0511c4
msglist [nfc]: Comment more about another inset, for completeness
chrisbobbe Jan 18, 2025
4c04d07
msglist [nfc]: Update a SafeArea comment to mention scroll-to-bottom …
chrisbobbe Jan 18, 2025
ae7939a
ci: Add setup script for running in Flutter "customer testing"
gnprice Jan 23, 2025
127239b
home test [nfc]: Extract helpers to be shared
PIG208 Jan 24, 2025
1c684a4
home: Stop assuming account existence from loading page
PIG208 Dec 30, 2024
4e85445
deps: Upgrade Flutter to 3.29.0-1.0.pre.105
PIG208 Jan 24, 2025
7b25db0
Revert "ci: Remove --depth=1000 in doing Flutter clone, to be added b…
PIG208 Jan 24, 2025
a4f2270
action_sheet test: Make the app-bar topic-row finder more precise
chrisbobbe Dec 13, 2024
8d800f0
action_sheet test [nfc]: Make checkButtons helper for showTopicAction…
chrisbobbe Dec 13, 2024
c7c60e8
action_sheet test [nfc]: Add new '{topic,message} action sheet' groups
chrisbobbe Dec 14, 2024
4ff9842
action_sheet test: Make some show-from-inbox setup optional in a `pre…
chrisbobbe Jan 23, 2025
cdbd967
action_sheet test [nfc]: Parameterize a `prepare` by channel and topic
chrisbobbe Jan 23, 2025
74a1f48
action_sheet test [nfc]: Pull out `someMessage` variable
chrisbobbe Jan 23, 2025
1e8c916
action_sheet test [nfc]: Add zulipFeatureLevel param to a `prepare`
chrisbobbe Dec 14, 2024
1dc1808
action_sheet test [nfc]: Add subscription-related params to a `prepare`
chrisbobbe Dec 14, 2024
449f3d7
action_sheet test [nfc]: Add `visibilityPolicy` to a `prepare`
chrisbobbe Dec 14, 2024
c27b9f4
action_sheet test: Use eg.otherUser for a sender in setupToTopicActio…
chrisbobbe Dec 14, 2024
1991556
action_sheet test [nfc]: Pull out a `prepare` function and reuse
chrisbobbe Dec 14, 2024
4498df6
action_sheet test [nfc]: Simplify some setup by using someChannel
chrisbobbe Jan 23, 2025
212afe5
action_sheet test [nfc]: Pull out showFromInbox helper
chrisbobbe Dec 14, 2024
fa8a07c
action_sheet test [nfc]: Pull out showFromAppBar helper
chrisbobbe Dec 14, 2024
ea9ec76
action_sheet test: Cut assumption of topic recipient header in topic …
chrisbobbe Jan 16, 2025
210f1d9
action_sheet test [nfc]: Pull out showFromRecipientHeader helper
chrisbobbe Jan 16, 2025
f4e3457
test [nfc]: Comment on where to find topic-action-sheet tests
chrisbobbe Jan 23, 2025
faed229
action_sheet test: Move some logic out of checkButtons helper
chrisbobbe Jan 23, 2025
55fdfd3
action_sheet test [nfc]: Have showFromAppBar take `messages`, not `me…
chrisbobbe Jan 23, 2025
f4b0b80
msglist [nfc]: Move _containsDifferentChannels to StreamMessageRecipi…
lakshya1goel Jan 24, 2025
abec662
msglist: In single-conversation view, make recipient headers not tapp…
lakshya1goel Jan 29, 2025
1731385
i18n [nfc]: Add doc on GlobalLocalizations.zulipLocalizations
gnprice Jan 30, 2025
8decc4e
store test: Check for data consistency when adding account
PIG208 Jan 21, 2025
3098349
store: Add realmMandatoryTopics realm setting
PIG208 Jan 21, 2025
9e5f803
compose test [nfc]: Remove unused prepareComposeBox param
PIG208 Jan 21, 2025
f76b003
compose test [nfc]: Rename param from user to otherUsers
PIG208 Jan 27, 2025
f1646c4
compose: Respect realm setting for mandatory topics
PIG208 Jan 21, 2025
9498edb
api: Add `realmWildcardMentionPolicy` to `InitialSnapshot`
sm-sayedi Dec 3, 2024
3575a3b
store: Add `realmWildcardMentionPolicy` to `PerAccountStore`
sm-sayedi Dec 3, 2024
8053da0
icons: Add "three_person.svg" icon for wildcard mentions
sm-sayedi Dec 6, 2024
a26f16f
autocomplete test: Make `setupToComposeInput` accept `narrow` param
sm-sayedi Dec 6, 2024
6686664
autocomplete [nfc]: Move down `MentionAutocompleteView.computeResults`
sm-sayedi Dec 3, 2024
449f326
autocomplete: Support @-wildcard in user-mention autocomplete
sm-sayedi Dec 3, 2024
7659479
compose: Make compose-box border more prominent in dark mode
lakshya1goel Feb 1, 2025
ed7f39e
display [nfc]: Mention issue for notification channel name's i18n TODO
PIG208 Jan 15, 2025
419c20c
i18n [nfc]: Mention issue for translating styled strings
PIG208 Jan 15, 2025
d1c871b
app: Translate the "about" page button on popup menu
PIG208 Dec 12, 2024
1aa88a4
inbox: Make header titles localizable
PIG208 Dec 12, 2024
449d670
profile: Translate strings on _ProfileErrorPage
PIG208 Dec 12, 2024
22e0645
msglist: Localize message list title for "DMs with yourself"
PIG208 Dec 12, 2024
76425ed
i18n: Sweep for non-localized '(unknown user)' strings
PIG208 Dec 12, 2024
627dead
i18n: Sweep for non-localized '(unknown channel)' strings
PIG208 Dec 12, 2024
e5a6957
lightbox: Translate video position slider semantic labels
PIG208 Jan 8, 2025
a8a0c25
msglist: Mostly translate remaining strings on message list page
PIG208 Jan 8, 2025
f104dc8
content: Translate error dialog for _launchUrl
PIG208 Jan 8, 2025
7ccb8d3
emoji: Translate "You" string for reactions added by self
PIG208 Jan 8, 2025
399835a
compose: Translate "(loading message {messageId})"
PIG208 Jan 15, 2025
9517336
poll: Translate voter names wrapped in parentheses
PIG208 Jan 15, 2025
ca26330
android build: Allow Gradle to use more memory
PIG208 Feb 4, 2025
294cce6
notif [nfc]: Note a todo-i18n for display names of notif sound files
gnprice Feb 5, 2025
e0019ee
lightbox [nfc]: Note todo-i18n on video durations
gnprice Feb 5, 2025
64a822e
i18n [nfc]: Standardize a todo-i18n comment, from "intl"
gnprice Feb 5, 2025
d22a97e
i18n [nfc]: Standardize more todo-i18n comments, from free-form
gnprice Feb 5, 2025
c66a905
android build: Allow Gradle to use even more memory, 4 GiB
PIG208 Feb 5, 2025
aa53cf6
sticky_header: Add example app
gnprice Jan 24, 2025
7814138
sticky_header test [nfc]: Cut a commented-out debug print
gnprice Jan 30, 2024
b39f6a9
sticky_header [nfc]: Add comments about child sliver
gnprice Jan 31, 2025
40bc4bc
sticky_header [nfc]: Add comments on _headerEndBound conditions
gnprice Jan 25, 2025
40ac6de
sticky_header [nfc]: Cut redundant assert on header size
gnprice Jan 25, 2025
ff252d7
sticky_header: Use cacheExtent from child
gnprice Jan 27, 2025
366144d
sticky_header [nfc]: Add asserts from studying possible child geometr…
gnprice Jan 25, 2025
66cc727
sticky_header: Handle scrollOffsetCorrection
gnprice Jan 28, 2025
4f80b30
sticky_header [nfc]: Skip hitTestExtent, further using simplifying as…
gnprice Jan 25, 2025
a702bd2
sticky_header [nfc]: Explicitly use single "childExtent"
gnprice Jan 25, 2025
5ad545b
sticky_header example: Add a double-sliver example
gnprice Jan 24, 2025
1e8899b
sticky_header: Fix _findChildAtEnd when viewport partly consumed already
gnprice Jan 18, 2024
5d58143
sticky_header: Avoid header at sliver/sliver boundary
gnprice Jan 26, 2024
52118ab
icons: Add resolve/unresolve-topic icons, from Figma
chrisbobbe Dec 5, 2024
2412fbc
action_sheet: Add and use PageRoot
chrisbobbe Jan 29, 2025
731b44f
action_sheet: Implement resolve/unresolve in topic action sheet
chrisbobbe Dec 5, 2024
0e6cacb
msglist: Fix DM header color lerp bug.
E-m-i-n-e-n-c-e Jan 30, 2025
bc0dfde
changelog: Describe changes since 0.0.25
gnprice Feb 7, 2025
ebd7a99
version: Bump version to 0.0.26
gnprice Feb 7, 2025
c4be9ea
doc: Before release, update translations
gnprice Feb 8, 2025
812d95c
l10n: Update translations from Weblate
gnprice Feb 8, 2025
c8aa4c8
i18n [nfc]: Explain why we skip translating licenses
PIG208 Feb 5, 2025
6dab833
about_zulip: Translate unknown app version placeholder
PIG208 Feb 6, 2025
0ac905c
app: Translate (well, transliterate) app title
PIG208 Feb 6, 2025
a08dcda
compose: Translate message for a filename with size
PIG208 Feb 6, 2025
9ba7faf
i18n [nfc]: Improve errorFilesTooLarge example for listMessage
PIG208 Feb 6, 2025
c6db6aa
login [nfc]: Shorten string for server URL input label
PIG208 Feb 6, 2025
0417c87
login [nfc]: Document need for "server URL" hint value to be reserved
gnprice Feb 8, 2025
6765f66
notif test: Clean up `TestPlatformDispatcher.defaultRouteNameTestValue`
rajveermalviya Jan 2, 2025
05628ca
app: Query initial-account-id while handling initial routes
rajveermalviya Jan 27, 2025
4ece284
app [nfc]: Reorder _ZulipAppState methods
rajveermalviya Feb 7, 2025
6d7c751
app: Pull out `_handleGenerateInitialRoutes`
rajveermalviya Jan 2, 2025
bd70287
page [nfc]: Add interface to get account ID for most of our routes
gnprice Jan 30, 2025
4b2f51e
notif: Use associated account as initial account, if opened from back…
rajveermalviya Dec 30, 2024
fb1b97f
notif: Query account by realm URL origin, not full URL
rajveermalviya Jan 28, 2025
9aafbd4
doc: Add libdrm troubleshooting entry
gnprice Jan 24, 2025
1e8397b
msglist: Update label to "Messages with yourself" in DM header
lakshya1goel Feb 12, 2025
f6655b8
login [nfc]: Pass GlobalStore to logOutAccount
PIG208 Jan 6, 2025
8b601be
actions test [nfc]: Move a store-related test to a better home
PIG208 Feb 11, 2025
d186ed0
actions [nfc]: Move logOutAccount and unregisterToken under lib/model
PIG208 Jan 16, 2025
a055486
msglist: Ensure sole ownership of MessageListView
PIG208 Feb 11, 2025
b8c26ec
doc: Update GSoC reference in README
gnprice Feb 14, 2025
96bdc7d
sticky_header [nfc]: Document SliverStickyHeaderList
gnprice Jan 31, 2025
41c410c
sticky_header example: Enable ink splashes, to demo hit-testing
gnprice Jan 31, 2025
16308e5
sticky_header example: Set allowOverflow true in double-sliver example
gnprice Jan 24, 2025
4ab8121
sticky_header example: Make double slivers not back-to-back
gnprice Feb 1, 2025
ca394c0
sticky_header test: Favor drag gestures over taps, when they compete
gnprice Jan 31, 2025
63f66d1
sticky_header test [nfc]: Generalize tap-logging from headers
gnprice Jan 31, 2025
8bf8c24
sticky_header test: Record taps on _Item widgets too
gnprice Jan 31, 2025
b541ea3
sticky_header example: Add double slivers with header at bottom
gnprice Feb 8, 2025
628ac15
sticky_header test [nfc]: Make "first/last item" finders more robust
gnprice Feb 11, 2025
488c60c
sticky_header test [nfc]: Prepare generic test for more generality
gnprice Feb 11, 2025
7df2c37
sticky_header test [nfc]: Prepare list of slivers more uniformly
gnprice Feb 11, 2025
fba97d8
sticky_header test: Use 10 items instead of 100
gnprice Feb 11, 2025
f53521b
sticky_header test: Test slivers splitting viewport
gnprice Feb 11, 2025
d98b67b
sticky_header [nfc]: Fix childMainAxisPosition to properly use paintE…
gnprice Feb 8, 2025
4cc3cb1
sticky_header [nfc]: Split header-overflows-sliver condition explicitly
gnprice Feb 11, 2025
afeacd5
sticky_header: Cut wrong use of calculatePaintOffset
gnprice Jan 31, 2025
732761f
sticky_header [nfc]: Expand on the header-overflows-sliver case
gnprice Feb 8, 2025
dc2c9f0
sticky_header: Fix hit-testing when header overflows sliver
gnprice Jan 31, 2025
043ae10
sticky_header [nfc]: Doc overflow behavior and paint-order constraints
gnprice Jan 31, 2025
c87d48b
content: Move math block parsing to the callers of `parseBlockContent`
rajveermalviya Feb 13, 2025
866faf5
content: Handle multiple math blocks in `<p>`
rajveermalviya Dec 13, 2024
44df81f
msglist: Move star icon 2px away from the edge of the screen
lakshya1goel Feb 14, 2025
724c6b9
api [nfc]: Assert ZulipApiException.data is free of redundant keys
gnprice Feb 14, 2025
fcc8926
test [nfc]: Pull out an example UNAUTHORIZED API exception, and add doc
gnprice Feb 14, 2025
2786055
fake_api [nfc]: Clarify prepared exception is at HTTP layer
gnprice Feb 16, 2025
b7194f0
fake_api: Add apiException parameter; switch to it where needed
gnprice Feb 16, 2025
1b13a8e
fake_api [nfc]: Check for confusion in httpException use
gnprice Feb 16, 2025
f43d2e0
test [nfc]: Introduce eg.apiBadRequest
gnprice Feb 16, 2025
48d67f1
l10n [nfc]: Use a generalized name for errorCouldNotConnectTitle
PIG208 Jan 2, 2025
710c4a1
log [nfc]: Rename ReportErrorCallback to ReportErrorCancellablyCallback
PIG208 Jan 2, 2025
293f213
app test [nfc]: Move error reporting tests to a separate group
PIG208 Feb 13, 2025
4b3ae12
log [nfc]: Pull out _reportErrorToConsole
PIG208 Feb 14, 2025
639c408
log: Add reportErrorModally
PIG208 Jan 2, 2025
87cfc06
action test [nfc]: Remove irrelevant issue reference
PIG208 Jan 7, 2025
ade1f43
store [nfc]: Add TODO for handling auth errors when polling
PIG208 Feb 7, 2025
6cd9e07
store [nfc]: Mention issue number for register-queue feedback
PIG208 Feb 7, 2025
608a028
app: Maintain that the navigator stack is never empty
PIG208 Feb 7, 2025
740efb4
store [nfc]: Mention TODO for checking account existence
PIG208 Feb 13, 2025
938b530
test [nfc]: Introduce apiExceptionBadEventQueueId
PIG208 Feb 18, 2025
9d69074
store: Expect AccountNotFoundException when reloading store
PIG208 Feb 13, 2025
7cd25f2
store: Handle invalid API key on register-queue
PIG208 Dec 19, 2024
4f438d3
home: Center align the "try another account" message in loading place…
KYash03 Feb 5, 2025
3017ba6
actions [nfc]: Namespace actions as statics on a ZulipAction class
gnprice Feb 19, 2025
a198f72
actions [nfc]: Document remaining methods
gnprice Feb 19, 2025
d7fbff2
db [nfc]: Remove dead code
PIG208 Dec 13, 2024
5ad630e
db [nfc]: Mention build_runner for schema changes
PIG208 Dec 17, 2024
9b2d580
db test: Add missing `after.close` call
PIG208 Dec 18, 2024
d302584
deps [nfc]: Set minimum version of drift to 2.23.0
PIG208 Dec 30, 2024
33da884
db test: Test simple migrations without data programmatically
PIG208 Jan 3, 2025
3cff396
db: Start generating schema versions for migrations
PIG208 Dec 18, 2024
5fb8158
db [nfc]: Use step-by-step migration helper
PIG208 Feb 19, 2025
601936d
db: Drop all tables on downgrade
PIG208 Jan 3, 2025
26073e8
compose [nfc]: Simplify content-input state, deduplicating topic text
gnprice Feb 20, 2025
7ea7424
api [nfc]: Rename resolveDmElements to resolveApiNarrowForServer
chrisbobbe Oct 22, 2024
48da972
msglist test [nfc]: Make groups for fetchInitial and fetchOlder tests
chrisbobbe Oct 22, 2024
1b59036
msglist test [nfc]: Refactor fetchInitial smoke, preparing for more n…
chrisbobbe Oct 30, 2024
c655631
msglist test: Add fetchInitial smoke test that uses a topic narrow
chrisbobbe Oct 22, 2024
327ae54
msglist test [nfc]: Remove indentation on an empty line
chrisbobbe Feb 14, 2025
a458ac2
msglist test [nfc]: Add feature-level param to setupMessageListPage
chrisbobbe Oct 30, 2024
be71501
msglist test: Add and use helper checkAppBarChannelTopic
chrisbobbe Feb 13, 2025
5f3a682
api test [nfc]: Separate some checks on "special" narrows from other …
chrisbobbe Feb 20, 2025
c8494a8
msglist: Follow /with/ links through message moves
chrisbobbe Oct 19, 2024
6d6dc6d
compose [nfc]: Derive hintText from topic display name
PIG208 Jan 22, 2025
c4f9341
compose [nfc]: Extract isTopicVacuous helper
PIG208 Feb 4, 2025
3523bc0
compose test: Add tests for hintText
PIG208 Jan 22, 2025
a5af8d3
compose: Avoid translating Zulip message destinations
PIG208 Feb 5, 2025
3321ad4
mailmap: Update Rajesh's entry
rajveermalviya Feb 25, 2025
fbee491
test [nfc]: Add the few missing awaits on handleEvent calls
gnprice Feb 15, 2025
d5caa78
user: Split a UserStore out from PerAccountStore
gnprice Feb 5, 2025
af10aea
user [nfc]: Refer to "user store" rather than "store.users" in text
gnprice Feb 15, 2025
7168c48
user [nfc]: Document users map, especially its incompleteness
gnprice Feb 5, 2025
a7ecf5b
user [nfc]: Factor out a userDisplayName
gnprice Feb 5, 2025
cffe2e4
inbox [nfc]: Inline and unhoist a self-user lookup
gnprice Feb 5, 2025
c077a45
recent dms [nfc]: Unhoist a self-user lookup
gnprice Feb 5, 2025
581e377
compose [nfc]: Unhoist a self-user lookup
gnprice Feb 5, 2025
ea46825
store [nfc]: Add a zulipFeatureLevel getter
gnprice Feb 5, 2025
1fd0c3f
user [nfc]: Move selfUserId to UserStore
gnprice Feb 5, 2025
626d473
user [nfc]: Add a selfUser getter
gnprice Feb 5, 2025
de98200
compose [nfc]: Take UserStore in userMention, rather than bare Map
gnprice Feb 5, 2025
8b172ba
user [nfc]: Introduce senderDisplayName
gnprice Feb 5, 2025
4adf1fc
user [nfc]: Note unknown-user crashes where senderDisplayName can help
gnprice Feb 5, 2025
b61f135
user [nfc]: Note places lacking live-update where senderDisplayName h…
gnprice Feb 5, 2025
6bbe209
autocomplete [nfc]: Make explicit why two user lookups have null-asse…
gnprice Feb 5, 2025
268a462
user [nfc]: Factor out a getUser method
gnprice Feb 5, 2025
dadf9de
user [nfc]: Factor out an allUsers iterable
gnprice Feb 5, 2025
30c64a0
user [nfc]: Make the actual users Map private
gnprice Feb 5, 2025
1929da2
content [nfc]: Move link color to `ContentTheme.colorLink`
rajveermalviya Jan 20, 2025
08dc485
content: Handle `message_embed` website previews
rajveermalviya Feb 19, 2025
e0df0ed
content: Handle legacy website previews
rajveermalviya Feb 21, 2025
70589a8
check: Ensure GNU coreutils are used on macOS
rajveermalviya Feb 27, 2025
b0ecf60
github: Elevate permisisons to allow creating branches and PRs.
alexmv Dec 20, 2024
8742422
github: Add steps to update generated code as well.
alexmv Dec 20, 2024
6bbe74f
github: Maybe lag behind main, instead of failing a merge --ff-only.
alexmv Feb 26, 2025
99af264
icons: Add icon for switch account, from Figma
rishichirchi Feb 15, 2025
4cc8da9
home: Add switch account icon in main menu
rishichirchi Feb 21, 2025
28600b9
content: Add start attribute support for ordered list
lakshya1goel Feb 26, 2025
ce338ab
content: Fix ordered list layout to handle long numbers in <ol>
lakshya1goel Feb 26, 2025
e0ee70e
content test [nfc]: Use checks-extensions in list-marker tests; expla…
gnprice Mar 3, 2025
7ee4431
theme: Replace `colorMessageHeaderIconInteractive` with `title`
Gaurav-Kushwaha-1225 Jan 15, 2025
18b8725
theme: Replace `dateSeparatorText` & `messageTimestamp` with `labelTime`
Gaurav-Kushwaha-1225 Jan 28, 2025
a6c6af4
theme: Replace `senderName` & `recipientHeaderText` with `title`
Gaurav-Kushwaha-1225 Jan 29, 2025
59f13a9
theme: Replace `streamMessageBgDefault` with `bgMessageRegular`
Gaurav-Kushwaha-1225 Jan 31, 2025
46a8cdb
theme [nfc]: Replace `dateSeparator` with `foreground`
Gaurav-Kushwaha-1225 Jan 31, 2025
a8c9d14
emoji test: Make a more specific finder helper
PIG208 Jan 30, 2025
12a0af6
emoji: Fix bottom padding of emoji picker
PIG208 Jan 30, 2025
78f58ac
emoji: Remove bottom shadow on the emoji picker scrollable
PIG208 Feb 14, 2025
57871ee
user [nfc]: Move getDisplayEmailFor method to lib/model/store.dart
fombalang Oct 15, 2024
dd900b5
autocomplete test [nfc]: Fix brittle avatar image finder
fombalang Nov 12, 2024
995fdc2
autocomplete test [nfc]: Remove unused store from helper
PIG208 Feb 28, 2025
1aca726
autocomplete test [nfc]: Use findExactly for checks
PIG208 Feb 28, 2025
61b64cd
autocomplete: Implement new design for @-mention autocomplete items
fombalang Oct 9, 2024
f86a893
theme: Fix wrong variable in contextMenuItemText color field
fombalang Nov 9, 2024
2841a13
autocomplete: Update emoji-results style to follow design
gnprice Nov 26, 2024
f2d8241
deps: Upgrade Flutter to 3.30.0-1.0.pre.428
rajveermalviya Feb 25, 2025
a15d6b4
deps: Update dart_style to 3.0.1, from 2.x
gnprice Mar 4, 2025
249875d
deps: Update pigeon to 24.2.1, from 22.7.4
rajveermalviya Feb 25, 2025
2d3209a
deps: Update file_picker to 9.0.2
rajveermalviya Feb 25, 2025
3ba9985
deps: Upgrade firebase_core, firebase_messaging to latest
rajveermalviya Feb 25, 2025
d291098
deps: Upgrade packages within constraints (tools/upgrade pub)
rajveermalviya Feb 25, 2025
9e70ae9
mailmap: Map kssakhilraj@gmail.com to K Akhil
E-m-i-n-e-n-c-e Mar 7, 2025
6fec187
store: Add realmEmptyTopicDisplayName
PIG208 Jan 16, 2025
303649a
autocomplete test [nfc]: Use plain strings for finding topic
PIG208 Jan 21, 2025
a2bdbc8
autocomplete test [nfc]: Remove checkTopicShown helper
PIG208 Jan 21, 2025
0ba9b44
autocomplete [nfc]: Handle autocompleting to empty topic
PIG208 Jan 16, 2025
65e0d4a
inbox [nfc]: Display realmEmptyTopicDisplayName where empty topic app…
PIG208 Jan 17, 2025
8e21f98
msglist [nfc]: Display realmEmptyTopicDisplayName where empty topic a…
PIG208 Jan 21, 2025
e1daad8
msglist: Update "Mark all messages as read" button icon
lakshya1goel Feb 1, 2025
3c20064
action_sheet: Add "Mark Topic As Read" button
lakshya1goel Mar 8, 2025
870bae6
actions: Add specific handling for ZulipApiException
chimnayajith Feb 19, 2025
191a571
action_sheet: Add channel action sheet with mark as read option
chimnayajith Feb 19, 2025
b421570
mailmap: Add Tomlin7's entry
tomlin7 Mar 7, 2025
8b7c242
deps: Update drift to 2.26.0
PIG208 Mar 10, 2025
c5dce93
db: Store GlobalSettings in database
PIG208 Dec 16, 2024
ad5fa18
store [nfc]: Update outdated references to loadGlobalStore
PIG208 Dec 16, 2024
b2a1ffd
test [nfc]: Use eg.globalStore when possible
PIG208 Feb 20, 2025
8cbea53
store: Store global settings on global store
PIG208 Dec 17, 2024
99d1bbe
theme: Track theme through global settings
PIG208 Feb 20, 2025
c9cae02
settings: Add easy settings page using (adaptive) Material widgets
PIG208 Dec 19, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 35 additions & 1 deletion .github/workflows/update-translations.yml
Original file line number Diff line number Diff line change
@@ -1,19 +1,53 @@
name: Update translations from Weblate
permissions:
contents: write
pull-requests: write
on:
schedule:
- cron: "0 10 * * 1"
workflow_dispatch:

jobs:
update-translations:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: Fetch and merge from Weblate
# The commit message is generated in Weblate; see https://hosted.weblate.org/addon/17163/
run: |
git remote add weblate https://hosted.weblate.org/git/zulip/zulip-flutter/
git fetch weblate
git merge --ff-only weblate/main
# This may lag behind `main` if weblate is backlogged; this can
# theoretically cause the PR to not be able to auto-merged, though
# re-running the action once weblate has caught up should be
# sufficient to fix that.
git reset --hard weblate/main

- name: Clone Flutter SDK
# We can't do a depth-1 clone, because we need the most recent tag
# so that Flutter knows its version and sees the constraint in our
# pubspec is satisfied. It's uncommon for flutter/flutter to go
# more than 100 commits between tags. Fetch 1000 for good measure.
run: |
git clone --depth=1000 -b main https://github.com/flutter/flutter ~/flutter
TZ=UTC git --git-dir ~/flutter/.git log -1 --format='%h | %ci | %s' --date=iso8601-local
echo ~/flutter/bin >> "$GITHUB_PATH"

# The Flutter tool assumes the tip of tree is "origin/master"
# (or "upstream/master"):
# https://github.com/flutter/flutter/issues/160626
# TODO(upstream): make workaround unneeded
git --git-dir ~/flutter/.git update-ref refs/remotes/origin/master origin/main

- name: Update generated code
run: |
mkdir -p build
tools/check l10n --fix
git add lib/generated/l10n/
GIT_COMMITTER_NAME="Hosted Weblate" GIT_COMMITTER_EMAIL="hosted@weblate.org" \
git commit --amend -C HEAD

- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
with:
Expand Down
4 changes: 3 additions & 1 deletion .mailmap
Original file line number Diff line number Diff line change
Expand Up @@ -14,9 +14,11 @@

Chris Bobbe <cbobbe@zulip.com> <csbobbe@gmail.com>
Greg Price <greg@zulip.com> <gnprice@gmail.com>
K Akhil <kssakhilraj@gmail.com>
Lalit Kumar Singh <lalitkumarsingh3716@gmail.com>
Rajesh Malviya <rajveer0malviya@gmail.com>
Rajesh Malviya <rmalviya@zulip.com> <rajveer0malviya@gmail.com>
Shu Chen <shu@zulip.com> <shu.chen@freelancedreams.com>
Tomlin7 <billydevbusiness@gmail.com>

# The goal when editing this file is to group all of a given person's
# contributions together, and under their preferred name and email
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ You can also [try out this beta app][beta].
Contributions to this app are welcome.

If you're looking to participate in Google Summer of Code with Zulip,
this is one of the projects we're [accepting GSoC 2024 applications][]
this is one of the projects we intend to accept [GSoC 2025 applications][gsoc]
for.

[accepting GSoC 2024 applications]: https://zulip.readthedocs.io/en/latest/outreach/gsoc.html#mobile-app
[gsoc]: https://zulip.readthedocs.io/en/latest/outreach/gsoc.html#mobile-app


### Picking an issue to work on
Expand Down
2 changes: 2 additions & 0 deletions android/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ gradle-wrapper.jar
/local.properties
GeneratedPluginRegistrant.java

.cxx/

*keystore.properties
*.keystore
*.keystore.pgp
Expand Down
156 changes: 74 additions & 82 deletions android/app/src/main/kotlin/com/zulip/flutter/Notifications.g.kt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// Autogenerated from Pigeon (v20.0.2), do not edit directly.
// Autogenerated from Pigeon (v24.2.1), do not edit directly.
// See also: https://pub.dev/packages/pigeon
@file:Suppress("UNCHECKED_CAST", "ArrayInDataClass")

Expand All @@ -7,7 +7,9 @@ package com.zulip.flutter
import android.util.Log
import io.flutter.plugin.common.BasicMessageChannel
import io.flutter.plugin.common.BinaryMessenger
import io.flutter.plugin.common.EventChannel
import io.flutter.plugin.common.MessageCodec
import io.flutter.plugin.common.StandardMethodCodec
import io.flutter.plugin.common.StandardMessageCodec
import java.io.ByteArrayOutputStream
import java.nio.ByteBuffer
Expand Down Expand Up @@ -64,17 +66,16 @@ data class NotificationChannel (
val lightsEnabled: Boolean? = null,
val soundUrl: String? = null,
val vibrationPattern: LongArray? = null

) {
)
{
companion object {
@Suppress("LocalVariableName")
fun fromList(__pigeon_list: List<Any?>): NotificationChannel {
val id = __pigeon_list[0] as String
val importance = __pigeon_list[1].let { num -> if (num is Int) num.toLong() else num as Long }
val name = __pigeon_list[2] as String?
val lightsEnabled = __pigeon_list[3] as Boolean?
val soundUrl = __pigeon_list[4] as String?
val vibrationPattern = __pigeon_list[5] as LongArray?
fun fromList(pigeonVar_list: List<Any?>): NotificationChannel {
val id = pigeonVar_list[0] as String
val importance = pigeonVar_list[1] as Long
val name = pigeonVar_list[2] as String?
val lightsEnabled = pigeonVar_list[3] as Boolean?
val soundUrl = pigeonVar_list[4] as String?
val vibrationPattern = pigeonVar_list[5] as LongArray?
return NotificationChannel(id, importance, name, lightsEnabled, soundUrl, vibrationPattern)
}
}
Expand Down Expand Up @@ -104,14 +105,13 @@ data class AndroidIntent (
val dataUrl: String,
/** A combination of flags from [IntentFlag]. */
val flags: Long

) {
)
{
companion object {
@Suppress("LocalVariableName")
fun fromList(__pigeon_list: List<Any?>): AndroidIntent {
val action = __pigeon_list[0] as String
val dataUrl = __pigeon_list[1] as String
val flags = __pigeon_list[2].let { num -> if (num is Int) num.toLong() else num as Long }
fun fromList(pigeonVar_list: List<Any?>): AndroidIntent {
val action = pigeonVar_list[0] as String
val dataUrl = pigeonVar_list[1] as String
val flags = pigeonVar_list[2] as Long
return AndroidIntent(action, dataUrl, flags)
}
}
Expand Down Expand Up @@ -139,14 +139,13 @@ data class PendingIntent (
* with `Intent`; see Android docs for `PendingIntent.getActivity`.
*/
val flags: Long

) {
)
{
companion object {
@Suppress("LocalVariableName")
fun fromList(__pigeon_list: List<Any?>): PendingIntent {
val requestCode = __pigeon_list[0].let { num -> if (num is Int) num.toLong() else num as Long }
val intent = __pigeon_list[1] as AndroidIntent
val flags = __pigeon_list[2].let { num -> if (num is Int) num.toLong() else num as Long }
fun fromList(pigeonVar_list: List<Any?>): PendingIntent {
val requestCode = pigeonVar_list[0] as Long
val intent = pigeonVar_list[1] as AndroidIntent
val flags = pigeonVar_list[2] as Long
return PendingIntent(requestCode, intent, flags)
}
}
Expand All @@ -168,12 +167,11 @@ data class PendingIntent (
*/
data class InboxStyle (
val summaryText: String

) {
)
{
companion object {
@Suppress("LocalVariableName")
fun fromList(__pigeon_list: List<Any?>): InboxStyle {
val summaryText = __pigeon_list[0] as String
fun fromList(pigeonVar_list: List<Any?>): InboxStyle {
val summaryText = pigeonVar_list[0] as String
return InboxStyle(summaryText)
}
}
Expand Down Expand Up @@ -205,14 +203,13 @@ data class Person (
val iconBitmap: ByteArray? = null,
val key: String,
val name: String

) {
)
{
companion object {
@Suppress("LocalVariableName")
fun fromList(__pigeon_list: List<Any?>): Person {
val iconBitmap = __pigeon_list[0] as ByteArray?
val key = __pigeon_list[1] as String
val name = __pigeon_list[2] as String
fun fromList(pigeonVar_list: List<Any?>): Person {
val iconBitmap = pigeonVar_list[0] as ByteArray?
val key = pigeonVar_list[1] as String
val name = pigeonVar_list[2] as String
return Person(iconBitmap, key, name)
}
}
Expand All @@ -236,14 +233,13 @@ data class MessagingStyleMessage (
val text: String,
val timestampMs: Long,
val person: Person

) {
)
{
companion object {
@Suppress("LocalVariableName")
fun fromList(__pigeon_list: List<Any?>): MessagingStyleMessage {
val text = __pigeon_list[0] as String
val timestampMs = __pigeon_list[1].let { num -> if (num is Int) num.toLong() else num as Long }
val person = __pigeon_list[2] as Person
fun fromList(pigeonVar_list: List<Any?>): MessagingStyleMessage {
val text = pigeonVar_list[0] as String
val timestampMs = pigeonVar_list[1] as Long
val person = pigeonVar_list[2] as Person
return MessagingStyleMessage(text, timestampMs, person)
}
}
Expand All @@ -266,17 +262,16 @@ data class MessagingStyleMessage (
data class MessagingStyle (
val user: Person,
val conversationTitle: String? = null,
val messages: List<MessagingStyleMessage?>,
val messages: List<MessagingStyleMessage>,
val isGroupConversation: Boolean

) {
)
{
companion object {
@Suppress("LocalVariableName")
fun fromList(__pigeon_list: List<Any?>): MessagingStyle {
val user = __pigeon_list[0] as Person
val conversationTitle = __pigeon_list[1] as String?
val messages = __pigeon_list[2] as List<MessagingStyleMessage?>
val isGroupConversation = __pigeon_list[3] as Boolean
fun fromList(pigeonVar_list: List<Any?>): MessagingStyle {
val user = pigeonVar_list[0] as Person
val conversationTitle = pigeonVar_list[1] as String?
val messages = pigeonVar_list[2] as List<MessagingStyleMessage>
val isGroupConversation = pigeonVar_list[3] as Boolean
return MessagingStyle(user, conversationTitle, messages, isGroupConversation)
}
}
Expand All @@ -299,14 +294,13 @@ data class MessagingStyle (
*/
data class Notification (
val group: String,
val extras: Map<String?, String?>

) {
val extras: Map<String, String>
)
{
companion object {
@Suppress("LocalVariableName")
fun fromList(__pigeon_list: List<Any?>): Notification {
val group = __pigeon_list[0] as String
val extras = __pigeon_list[1] as Map<String?, String?>
fun fromList(pigeonVar_list: List<Any?>): Notification {
val group = pigeonVar_list[0] as String
val extras = pigeonVar_list[1] as Map<String, String>
return Notification(group, extras)
}
}
Expand All @@ -329,14 +323,13 @@ data class StatusBarNotification (
val id: Long,
val tag: String,
val notification: Notification

) {
)
{
companion object {
@Suppress("LocalVariableName")
fun fromList(__pigeon_list: List<Any?>): StatusBarNotification {
val id = __pigeon_list[0].let { num -> if (num is Int) num.toLong() else num as Long }
val tag = __pigeon_list[1] as String
val notification = __pigeon_list[2] as Notification
fun fromList(pigeonVar_list: List<Any?>): StatusBarNotification {
val id = pigeonVar_list[0] as Long
val tag = pigeonVar_list[1] as String
val notification = pigeonVar_list[2] as Notification
return StatusBarNotification(id, tag, notification)
}
}
Expand Down Expand Up @@ -370,14 +363,13 @@ data class StoredNotificationSound (
val isOwned: Boolean,
/** A `content://…` URL pointing to the sound file. */
val contentUrl: String

) {
)
{
companion object {
@Suppress("LocalVariableName")
fun fromList(__pigeon_list: List<Any?>): StoredNotificationSound {
val fileName = __pigeon_list[0] as String
val isOwned = __pigeon_list[1] as Boolean
val contentUrl = __pigeon_list[2] as String
fun fromList(pigeonVar_list: List<Any?>): StoredNotificationSound {
val fileName = pigeonVar_list[0] as String
val isOwned = pigeonVar_list[1] as Boolean
val contentUrl = pigeonVar_list[2] as String
return StoredNotificationSound(fileName, isOwned, contentUrl)
}
}
Expand All @@ -389,7 +381,7 @@ data class StoredNotificationSound (
)
}
}
private object NotificationsPigeonCodec : StandardMessageCodec() {
private open class NotificationsPigeonCodec : StandardMessageCodec() {
override fun readValueOfType(type: Byte, buffer: ByteBuffer): Any? {
return when (type) {
129.toByte() -> {
Expand Down Expand Up @@ -561,7 +553,7 @@ interface AndroidNotificationHostApi {
* https://developer.android.com/reference/kotlin/android/app/NotificationManager.html#notify
* https://developer.android.com/reference/androidx/core/app/NotificationCompat.Builder
*/
fun notify(tag: String?, id: Long, autoCancel: Boolean?, channelId: String, color: Long?, contentIntent: PendingIntent?, contentText: String?, contentTitle: String?, extras: Map<String?, String?>?, groupKey: String?, inboxStyle: InboxStyle?, isGroupSummary: Boolean?, messagingStyle: MessagingStyle?, number: Long?, smallIconResourceName: String?)
fun notify(tag: String?, id: Long, autoCancel: Boolean?, channelId: String, color: Long?, contentIntent: PendingIntent?, contentText: String?, contentTitle: String?, extras: Map<String, String>?, groupKey: String?, inboxStyle: InboxStyle?, isGroupSummary: Boolean?, messagingStyle: MessagingStyle?, number: Long?, smallIconResourceName: String?)
/**
* Wraps `androidx.core.app.NotificationManagerCompat.getActiveNotifications`,
* combined with `androidx.core.app.NotificationCompat.MessagingStyle.extractMessagingStyleFromNotification`.
Expand Down Expand Up @@ -597,7 +589,7 @@ interface AndroidNotificationHostApi {
companion object {
/** The codec used by AndroidNotificationHostApi. */
val codec: MessageCodec<Any?> by lazy {
NotificationsPigeonCodec
NotificationsPigeonCodec()
}
/** Sets up an instance of `AndroidNotificationHostApi` to handle messages through the `binaryMessenger`. */
@JvmOverloads
Expand Down Expand Up @@ -693,19 +685,19 @@ interface AndroidNotificationHostApi {
channel.setMessageHandler { message, reply ->
val args = message as List<Any?>
val tagArg = args[0] as String?
val idArg = args[1].let { num -> if (num is Int) num.toLong() else num as Long }
val idArg = args[1] as Long
val autoCancelArg = args[2] as Boolean?
val channelIdArg = args[3] as String
val colorArg = args[4].let { num -> if (num is Int) num.toLong() else num as Long? }
val colorArg = args[4] as Long?
val contentIntentArg = args[5] as PendingIntent?
val contentTextArg = args[6] as String?
val contentTitleArg = args[7] as String?
val extrasArg = args[8] as Map<String?, String?>?
val extrasArg = args[8] as Map<String, String>?
val groupKeyArg = args[9] as String?
val inboxStyleArg = args[10] as InboxStyle?
val isGroupSummaryArg = args[11] as Boolean?
val messagingStyleArg = args[12] as MessagingStyle?
val numberArg = args[13].let { num -> if (num is Int) num.toLong() else num as Long? }
val numberArg = args[13] as Long?
val smallIconResourceNameArg = args[14] as String?
val wrapped: List<Any?> = try {
api.notify(tagArg, idArg, autoCancelArg, channelIdArg, colorArg, contentIntentArg, contentTextArg, contentTitleArg, extrasArg, groupKeyArg, inboxStyleArg, isGroupSummaryArg, messagingStyleArg, numberArg, smallIconResourceNameArg)
Expand Down Expand Up @@ -759,7 +751,7 @@ interface AndroidNotificationHostApi {
channel.setMessageHandler { message, reply ->
val args = message as List<Any?>
val tagArg = args[0] as String?
val idArg = args[1].let { num -> if (num is Int) num.toLong() else num as Long }
val idArg = args[1] as Long
val wrapped: List<Any?> = try {
api.cancel(tagArg, idArg)
listOf(null)
Expand Down
Loading