Commit graph

240 commits

Author SHA1 Message Date
Thomas Ricouard
9897307c79 Better safeguard around timeline refresh 2023-04-09 15:11:02 +02:00
Chris Kolbu
9e347c75b9
Timeline & Timeline detail accessibility uplift (#1323)
* Improve accessibility of StatusPollView

Previously, this view did not provide the proper context to indicate that it represented a poll.

Now, we’ve added
- A container that will stay “Active poll” or “Poll results” when the cursor first hits one of the options;
- A prefix to say “Option X of Y” before each option;
- A Selected trait on the selected option(s), if present
- Consolidating and adding an `.updatesFrequently` trait to the footer view with the countdown.

* Add poll description in StatusRowView combinedAccessibilityLabel

This largely duplicates the logic in `StatusPollView`.

* Improve accessibility of media attachments

Previously, the media attachments without alt text would not show up in the consolidated `StatusRowView`, nor would they be meaningfully explained on the status detail screen.

Now, they are presented with their attachment type.

* Change accessibilityRepresentation of AppAcountsSelectorView

* Change Notifications tab title view accessibility representation to Menu

Previously it would present as a button

* Hide layout `Rectangle`s from accessibility

* Consolidate `StatusRowDetailView` accessibility representation

* Improve readability of Poll accessibility label

* Ensure poll options don’t present as interactive when the poll is finished

* Improve accessibility of StatusRowCardView

Previously, it would present as four separate elements, including an image without a description, all interactive, none with an interactive trait.

Now, it presents as a single element with the `.link` trait

* Improve accessibility of StatusRowHeaderView

Previously, it had no traits and no actions except inherited ones.

Now it presents as a button, triggering its primary action.

It also has custom actions corresponding to its context menu

* Avoid applying the StatusRowView custom actions to every view when contained

* Provide context for the application name

* Add pauses to StatusRowView combinedAccessibilityLabel

* Hide `TimelineView.scrollToTopView` from accessibility

* Set appropriate font style on Notification header

After the change the Text needed a `.headline` style to match the prior appearance.

* Fix bug in accessibilityRepresentation of TimelineView nav bar title

Previously, it would not display the proper label for .remoteLocal filter options.

* Ensure that pop-up button nav bar titles are interactive

* Ensure TextView responds to Environment.sizeCategory

This resolves #1309

* Fix button

---------

Co-authored-by: Thomas Ricouard <ricouard77@gmail.com>
2023-03-28 18:48:58 +02:00
Chris Kolbu
b2f594f174
Accessibility tweaks + Notifications and Messages tab uplift (#1292)
* Improve StatusRowView accessibility actions

Previously, there was no way to interact with links and hashtags.

Now, these are added to the Actions rotor

* Hide `topPaddingView`s from accessibility

* Fix accessible header rendering in non-filterable TimelineViews

Previously, all navigation title views were assumed to be popup buttons.

Now, we only change the representation for timelines that are filterable.

* Combine tagHeaderView text elements

Previously, these were two separate items

* Prefer shorter Quote action label

* Improve accessibility of StatusEmbeddedView

Previously, this element would be three different ones, and include all the actions on the `StatusRowView` proper. Now, it presents as one element with no actions.

* Add haptics to StatusRowView accessibility actions

* Improve accessibility of ConversationsListRow

This commit adds:
- A combined representation of the component views
- “Unread” as the first part of the label (if this is the case)
- All relevant actions as custom actions
- Reply as magic tap

* Remove StatusRowView accessibilityActions if viewModel.showActions is false

* Hide media attachments from accessibility if the view is not focused

* Combine NotificationRowView accessibility elements; add user actions

Previously, there was no real way to interact with these notifications.

Now, the notifications that show the actions row have the appropriate StatusRowView-derived actions, and new followers notifications have more actions that let you see each user’s profile.

* Prefer @Environment’s `accessibilityEnabled` over `isVoiceOverRunning`

This way we can cater for Voice Control, Full Keyboard Access and Switch Control as well.

---------

Co-authored-by: Thomas Ricouard <ricouard77@gmail.com>
2023-03-24 07:52:29 +01:00
Chris Kolbu
eab69ce9fa
Timeline tab accessibility uplift (#1277)
* Refine Profile tab VoiceOver order to prioritise user information

Previously, VoiceOver user would have to traverse through header image, “follows you”, and the profile image before getting to the display name of the user.

Now, this element is the first element after the navigation bar.

* Add accessibility label to Timeline Compose post button

Previously, this button was using the SF symbol fallback label.

Now, it has a localized equivalent in addition to two other options: “New”, and “Create”

* Change accessible representation of Timeline nav bar menu

Previously, this would present as a static text.

Now, it has the header trait. In addition, by changing the representation, VoiceOver will read it out as “Home, Pop-up button, Header”, indicating that it opens a menu.

* Add accessibilityHint to Timeline tab Accounts selector

* Add accessibilityLabel and hint to PendingStatusesObserver

Previously, this button would have a label equal to the count of unread posts. Now, it states “X new posts” with the hint “Scrolls the timeline”
2023-03-20 06:33:42 +01:00
Thomas Ricouard
6c307aba63 SwiftFormat 2023-03-13 13:38:28 +01:00
Thomas Ricouard
21fd0b0541 Datasource: don't return filtered hidden statuses close #1175 2023-03-07 07:23:17 +01:00
Thomas Ricouard
d2d297f019 StatusDataController: Update on timeline fetch 2023-03-02 06:42:58 +01:00
Thomas Ricouard
a3e2d3f8b3 Add sound effects 2023-02-28 18:55:08 +01:00
Thomas Ricouard
4bc2672583 Timeline: Fix trending refreshing when navigating back 2023-02-27 18:41:51 +01:00
Jim Dovey
d1209e6704
Updated to resolve all possible Sendability warnings from Swift 6 compatibility mode. (#1072)
Co-authored-by: Jim Dovey <jimdovey@apple.com>
2023-02-27 06:39:07 +01:00
Thomas Ricouard
b75dd65ac4 Timeline only clear cache if previous value was .home 2023-02-27 06:23:03 +01:00
Thomas Ricouard
f22671cc66 Fix jump to latest not working on home 2023-02-27 06:21:49 +01:00
Thomas Ricouard
8c4b286751 Timeline: Check for task cancellation before loading next page 2023-02-26 19:09:21 +01:00
Thomas Ricouard
347335f770 Move userMentioned outside of Status 2023-02-26 09:38:26 +01:00
Thomas Ricouard
83e4e74329 Swiftformat 2023-02-26 06:45:57 +01:00
Thomas Ricouard
93ee83c65d Timeline: Cleanup 2023-02-25 19:47:15 +01:00
Thomas Ricouard
151154b335 Timeline: Enable jump to latest + in place refresh for all other timeline types 2023-02-25 19:32:47 +01:00
Thomas Ricouard
b036e90ce4 Simplify Timeline refresh 2023-02-25 10:10:27 +01:00
Thomas Durand
482d93a68d
Removed Boutique, using Bogeda directly (#1007)
* Removed Boutique, using Bogeda directly

* Updated about screen
2023-02-22 18:56:37 +01:00
Thomas Ricouard
b259b6739e Swiftformat 2023-02-21 07:23:42 +01:00
Thomas Ricouard
1a7ef62fd6 Fix trending refresh 2023-02-19 21:37:22 +01:00
Thomas Ricouard
65e63c4586 Remove Sendable conformance on Client as it's not needed 2023-02-19 07:51:16 +01:00
Alex Grebenyuk
a8459638e9
Add image prefetch to the timeline + resize close #931 (#930)
* Add image prefectch to the timeline

* Use preview url for post with multiple attachements

* Add image resize

* Prefetch link cards

---------

Co-authored-by: Thomas Ricouard <ricouard77@gmail.com>
2023-02-18 18:44:43 +01:00
Thomas Ricouard
7112e6515b Timeline: wrap datasource in an actor for safety and perforamances 2023-02-18 18:04:46 +01:00
Thomas Ricouard
9bc65d5563 Enable landscape on iOS 2023-02-18 07:42:35 +01:00
Thomas Ricouard
ca4e80101f Swiftformat 2023-02-18 07:26:48 +01:00
Thomas Ricouard
9f894858ae Don't load new pages if the timeline changed 2023-02-16 07:28:52 +01:00
Thomas Ricouard
3843d18f2f Fix trending timeline resetting to first page 2023-02-16 07:22:26 +01:00
Thomas Ricouard
d958d10036 Remove Client and RouterPath from StatusRowView env object 2023-02-15 08:46:14 +01:00
Thomas Ricouard
eb6050a38f Swiftformat 2023-02-12 16:29:41 +01:00
Yusuke Arakawa
dae7b85d3d
Timeline: restore the selected timeline at the next startup (#694)
* Timeline: restore the selected timeline at the next startup

Signed-off-by: Yusuke Arakawa <nekolaboratory@users.noreply.github.com>

* Rename: UserDefaultas label name

Signed-off-by: Yusuke Arakawa <nekolaboratory@users.noreply.github.com>

* Timeline: RawRepresentable of TimelineFilter

Signed-off-by: Yusuke Arakawa <nekolaboratory@users.noreply.github.com>

* Cleanup code

* Supports RemoteTimelineFilter

* Cleanup code

* Safe saves last viewed status

---------

Signed-off-by: Yusuke Arakawa <nekolaboratory@users.noreply.github.com>
Co-authored-by: Yusuke Arakawa <nekolaboratory@users.noreply.github.com>
2023-02-09 12:27:59 +01:00
Thomas Ricouard
013410a80e Faster / Cached ServerDate decoding 2023-02-09 09:12:44 +01:00
Sean Goldin
0c359f2b79
Add direct status highlighting (#720) 2023-02-08 18:47:09 +01:00
Thomas Ricouard
eb5733a90b Handle Task Cancelling in the timeline 2023-02-08 18:46:09 +01:00
Thomas Ricouard
970305210b Bump cache to 600 posts 2023-02-08 08:48:18 +01:00
Thomas Ricouard
49791d2c86 Fix timeline cache caching something else than home Fix #710 2023-02-08 06:52:15 +01:00
Sean Goldin
90ec3d419c
Clean up HapticManager (#678)
* Check for haptic capabilities

* Make manager do most of work

* ABC enum

* Fix spelling 😊

* Small tweak
2023-02-06 17:53:27 +01:00
Thomas Ricouard
5f76a8057c Filter remote local timeline 2023-02-06 12:24:48 +01:00
Thomas Ricouard
b0630ae9c3 Add more safety to scroll to 2023-02-05 08:13:38 +01:00
Thomas Ricouard
f53cfd89fe Ensure all pages are loaded when resuming session 2023-02-05 07:44:05 +01:00
Thomas Ricouard
5afd2dc73c Add Jump to Latest to clear out cache and reload home timeline 2023-02-04 21:21:36 +01:00
Thomas Ricouard
e96c1c5da7 Fix next page state 2023-02-04 20:37:22 +01:00
Thomas Ricouard
65ed2d871c Add settings for haptic feedbacks 2023-02-04 17:38:48 +01:00
Thomas Ricouard
6b285cdbcf Cleanup 2023-02-04 17:17:38 +01:00
Thomas Ricouard
427452db30 Don't update the timeline is the tab is not visible 2023-02-04 16:54:03 +01:00
Thomas Ricouard
8c7efb7df5 Add settings to clear the cache 2023-02-04 15:08:54 +01:00
Thomas Ricouard
288a0eac9f Save / Restore latest seen statuses 2023-02-04 14:42:10 +01:00
Thomas Ricouard
b57df4a9d7 Scroll to latest pending post on button tap 2023-02-04 14:05:30 +01:00
Thomas Ricouard
aae6b12666 Replace memory cache with Boutique SQLite cache 2023-02-04 12:33:28 +01:00
Thomas Ricouard
3c0ffdb1ae Prepare disk cache for Timeline 2023-02-04 12:17:16 +01:00
Thomas Ricouard
4104fdf4f5 Fix the crash once and for all by using Introspect 2023-02-03 16:24:09 +01:00
Thomas Ricouard
eb80225bb0 Mitigate #623 2023-02-03 08:06:16 +01:00
Thomas Ricouard
fcb7ddcbdb Fix crash when trying to cache an empty timeline 2023-02-02 21:21:07 +01:00
Thomas Ricouard
e278eae144 Reset pending statuses when reaching top 2023-02-02 17:47:35 +01:00
Thomas Ricouard
bb6910cd83 Centralize haptic feedbacks 2023-02-02 16:56:42 +01:00
Thomas Ricouard
262f7288ad Fix the crash while restoring position? 2023-02-02 16:38:19 +01:00
Sean Goldin
10946fef10
Timeline highlight mentions (#595)
* Introduce fetchPages

* Set up highlighting

* Implement highlighting stage 1

* Implement highlighting stage 2

* Implement highlighting.

* Fix merge

* Add protocol

* Remove debug prints
2023-02-02 06:39:03 +01:00
Gareth Simpson
fdb402a065
Boost deduplicating (#524)
* Trying something with caching boosts

* Use an actual cache for caching

* Persist cache to documents folder

* Stray debugging variable

* Unpublish seen variable in the ViewModel

* Settings for deduplicating boosts.

* Changes from review / merge conflicts
2023-02-01 18:56:06 +01:00
Thomas Ricouard
43d975a27b Better caching 2023-02-01 13:41:28 +01:00
Thomas Ricouard
ed80895fcd Cache streamed status 2023-02-01 13:28:04 +01:00
Thomas Ricouard
4e77669181 Swiftformat 2023-02-01 12:49:59 +01:00
Thomas Ricouard
383eb84e98 Fix import 2023-02-01 12:49:47 +01:00
Thomas Ricouard
cdf45fa58c Refactor Timeline position management + add thin cache layer + fix crashes 2023-02-01 12:43:11 +01:00
Thomas Ricouard
9bf40b262f Various optimizations for the new timeline 2023-02-01 09:22:08 +01:00
Thomas Ricouard
2e850e9643 Bump to 1.3.2 + workaround List crash? 2023-01-31 19:43:07 +01:00
Thomas Ricouard
ed0bfb7d94 Even better refresh / timeline position management 2023-01-31 17:43:06 +01:00
Thomas Ricouard
dd4ca27a5b Remove bogus flag 2023-01-31 13:43:27 +01:00
Thomas Ricouard
62b26fdbb7 Timeline: Do nothing if no new statuses 2023-01-31 13:19:32 +01:00
Thomas Ricouard
52eff96ab4 Iron out timeline issues with the new behaviour 2023-01-31 12:17:35 +01:00
Thomas Ricouard
c88ef750f0 Fix multiple timeline refresh on launch close #555 2023-01-31 12:17:03 +01:00
Thomas Ricouard
0695fd5733 Isolate pending statuses observer for smoother scrolling 2023-01-31 09:01:26 +01:00
Thomas Ricouard
0f98337a13 Remove test value 2023-01-31 08:20:20 +01:00
Thomas Ricouard
d9b166339d Fixes for iPad layout 2023-01-31 08:16:36 +01:00
Thomas Ricouard
1a351eaa7c Smoother scrolling up in the Timeline 2023-01-31 08:04:35 +01:00
Thomas Ricouard
d64d674389 Make appending new statuses safer 2023-01-30 22:11:55 +01:00
Thomas Ricouard
d88d9db1dc Transition Timeline to List + stream post automatically + keep position + new counter UI 2023-01-30 21:41:42 +01:00
Thomas Ricouard
fbf1c30b7c Add haptic feedback on more buttons fix #315 2023-01-24 09:19:53 +01:00
Sean Goldin
97f8dfd74d
Add localisation plurals (#239)
* Add localisation plurals

* Add more languages to plurals

* Remove unused localised keys

* Update per #225
2023-01-22 15:47:44 +01:00
Thomas Ricouard
a79c5691e0 Run SwiftFormat 2023-01-22 06:38:30 +01:00
Thomas
980b9a5dd6
Implement Localization (#80)
* Implement localization

* Fix some localization keys

* Adapt to recent changes
2023-01-19 18:14:08 +01:00
Thomas Ricouard
1b9d4e0247 Add some macOS menu & shortcuts 2023-01-18 08:27:42 +01:00
Thomas Ricouard
4143e82fbc Multi account sidebar + scaled font size on macOS + better iPad / macOS app UX 2023-01-17 19:41:46 +01:00
Thomas Ricouard
7f6419ebae Swiftformat 2023-01-17 11:36:01 +01:00
Thomas Ricouard
c05768c793 The Mac App 2023-01-16 14:40:23 +01:00
Thomas Ricouard
e69fcee9fb Various small UI fixes 2023-01-12 19:12:23 +01:00
Jérôme Danthinne
d447a8fdd2
add some top padding when new posts button is shown (#55)
Co-authored-by: Jérôme Danthinne <jerome.danthinne@smile.eu>
2023-01-10 14:44:34 +01:00
Thomas Ricouard
75fda4b709 Tip jar + New display name 2023-01-07 13:44:13 +01:00
Thomas Ricouard
7f5330f284 Redesigned settings tab 2023-01-06 17:14:34 +01:00
Thomas Ricouard
f922ba344d Search & Pin remote local timeline + general polish 2023-01-06 12:14:05 +01:00
Thomas Ricouard
88b56fe016 Timeline: Dequeue one 2023-01-05 07:07:28 +01:00
Thomas Ricouard
511717e492 Smarter timeline 2023-01-05 06:39:23 +01:00
Thomas Ricouard
dcdd8402e9 Timeline: Add filter for followed tags 2023-01-04 18:37:58 +01:00
Thomas Ricouard
a1681c3f1b Display pinned statuses on profile 2023-01-03 18:22:08 +01:00
Sean Goldin
41d7f4ca62
Less typing padding constants (#23)
* Change enum of constants to CGFloat extension

* Use CGFloat padding extension
2023-01-03 07:41:29 +01:00
Thomas Ricouard
e0253fb439 Added lists support + bunch of bug fixes 2023-01-02 19:23:44 +01:00
Thomas Ricouard
9f009376f5 Add trending as a timeline 2023-01-01 14:28:15 +01:00
Thomas Ricouard
b324c87ae1 Timeline tab: Quick accounts switcher + new filter menu 2023-01-01 14:02:11 +01:00
Thomas Ricouard
a592341768 Account: Added filter for accounts status 2023-01-01 08:22:39 +01:00
Thomas Ricouard
a06386c1da Fixed scroll to top 2022-12-31 15:41:44 +01:00
Thomas Ricouard
315a57b447 Tab timeline tab top scroll to top 2022-12-31 12:28:27 +01:00
Thomas Ricouard
3a076492a1 Multi accounts 2022-12-30 08:36:22 +01:00
Thomas Ricouard
d00c3e533e Theme support + default theme 2022-12-29 10:39:34 +01:00
Thomas Ricouard
789adc8b22 Haptic feedback when refreshing timeline 2022-12-29 09:10:59 +01:00
Thomas Ricouard
d393c4b90f Fix notifications tab + prepare multi account 2022-12-29 06:55:53 +01:00
Thomas Ricouard
2b733e6b10 Timeline: Fetch up to 10 new pages on pull to refresh 2022-12-28 19:10:13 +01:00
Thomas Ricouard
ee39840713 Account: Internal isCurrentUser 2022-12-27 13:49:54 +01:00
Thomas Ricouard
94d4db6214 Various fixes 2022-12-27 09:11:12 +01:00
Thomas Ricouard
e5fb3acd07 Quote status + embed status 2022-12-27 07:51:44 +01:00
Thomas Ricouard
bda77571b6 Editor: Simple edit 2022-12-26 08:24:55 +01:00
Thomas Ricouard
fded30bb76 Refactor live timeline + handle more events 2022-12-26 07:36:54 +01:00
Thomas Ricouard
b04ccc18fa Ensure own status is added on top 2022-12-25 19:18:19 +01:00
Thomas Ricouard
827e06b26c More safeguard 2022-12-25 18:48:50 +01:00
Thomas Ricouard
758fa8a6f9 Fix button 2022-12-25 18:46:54 +01:00
Thomas Ricouard
11d4d20873 Timeline scroll to top UX / Flow 2022-12-25 18:43:15 +01:00
Thomas Ricouard
93543cad6b Post / Delete a status and watch main timeline 2022-12-25 12:46:42 +01:00
Thomas Ricouard
8df70043cb Very basic status post 2022-12-25 08:17:16 +01:00
Thomas Ricouard
e569bb1d74 Use Nuke where relevant 2022-12-25 07:43:02 +01:00
Thomas Ricouard
70ee6e0d27 Post boosted by / favourited by 2022-12-24 13:41:25 +01:00
Thomas Ricouard
569aedeaeb Prepend new timeline statuses and new notifications 2022-12-24 12:20:42 +01:00
Thomas Ricouard
7068ad90bb Share + Fixed logged out mode 2022-12-23 15:53:02 +01:00
Thomas Ricouard
1a85fa19f8 Quick look support for media preview 2022-12-22 10:53:36 +01:00
Thomas Ricouard
0f2c2df624 Featured tags 2022-12-21 20:26:38 +01:00
Thomas Ricouard
2cd28c13f3 Follow tags + various enhancements 2022-12-21 12:39:29 +01:00
Thomas Ricouard
3d7042832e Open HashTag 2022-12-20 15:37:51 +01:00
Thomas Ricouard
cab21c137b Notification tab 2022-12-19 12:28:55 +01:00
Thomas Ricouard
e2455a472e Generic Statuses list 2022-12-19 07:17:01 +01:00
Thomas Ricouard
4c3809a95b Account statuses and more packages 2022-12-18 20:30:19 +01:00
Thomas Ricouard
70d28e697c Begin profile + media preview 2022-12-17 13:37:46 +01:00
Thomas Ricouard
eb4dc011b6 A bit better timeline UI 2022-12-16 13:16:48 +01:00
Thomas Ricouard
df2d383b8a OAuth + Home timeline 2022-12-01 09:05:26 +01:00
Thomas Ricouard
203abbcf0d Account screen WIP 2022-11-29 12:18:06 +01:00
Thomas Ricouard
567cb4cc47 New Routeur 2022-11-29 11:46:02 +01:00
Thomas Ricouard
202bf06dc6 Split Models from Network package 2022-11-29 09:28:17 +01:00
Thomas Ricouard
4742e3112b Remove needless fetchArray 2022-11-25 12:29:42 +01:00
Thomas Ricouard
e91a8b4b0a Forward error 2022-11-25 12:01:55 +01:00
Thomas Ricouard
ec8de5fb83 Paginated tiemeline and refactoring 2022-11-25 12:00:01 +01:00
Thomas Ricouard
0608996bb8 Render Status as Markdown 2022-11-25 10:03:42 +01:00
Thomas Ricouard
3c1b879d1a Better status header 2022-11-21 14:42:59 +01:00
Thomas Ricouard
a694c5d80c Browse and connect to multiple timelines 2022-11-21 13:52:13 +01:00
Thomas Ricouard
864a0b3969 New Timeline architecture 2022-11-21 09:31:32 +01:00