* 3311: Add a zig-zag line to top and bottom of "load more"
* 3311: Remove unneeded extensions
* 3311: Use a simple gradient instead of zigzag line
* 3311: Use a simple gradient drawable (remove custom view)
* 3311: Remove gradient lines
* Ignore clicks outside the start/end of a line
`LinkMovementMethod` has a bug in its calculation of the clickable width of a span on a line. If the span is the last thing on the line the clickable area extends to the end of the view. So the user can tap what appears to be whitespace and open a link.
Previous code tried to fix this by adding a zero-width space after the link so that `LinkMovementMethod` wouldn't consider it empty. However the ZWS was selected by copy/paste operations, resulting in junk results if users tried to copy the link.
Fix this by subclassing `LinkMovementMethod` and fixing the click detection code to ignore clicks that are outside the bounds of the line that was clicked on.
Remove the code that adds the ZWS.
Fixes https://github.com/tuskyapp/Tusky/issues/1567
* Assume arguments are all non-null
* Use `object` for singleton
* getInstance as a one-liner
* Use an explicit SCHEMA_VERSION instead of BuildConfig.VERSION_CODE
Every nightly release has a new BuildConfig.VERSION_CODE, so the previous
code would not do the right thing.
Require the schema version to be explicitly set. While I'm here, provide
a clear set of guidelines as to what has to happen when the schema changes.
* Improve documentation links
* Update ViewVideoFragment.kt
Testing
- Open audio attachment: https://solarpunk.moe/@vv/109562659215759090
- Ensure media control UI and alt text is shown once playback starts
Fixes#3261
* Fix commit issue
* Fix spacing
* Make "Up" and "Overflow" menu icons more visible in AccountProfile
The toolbar in AccountProfile is transparent, so any profile image the user
has chosen is shown under it.
This makes the "Up" and "Overflow" menu icons also have transparent
backgrouns.
Consequently, they can be hard to spot, or possibly invisible, on backgrounds
that are very dark or very light.
Fix this by compositing the icons in a LayerDrawable, with a circular
background identical to the surface colour. This ensures they stand out
against the background image, and blend in when the user scrolls.
* Get and reuse the background drawable
* Apply a smidgen of transparency
Currently translated at 100.0% (566 of 566 strings)
Translated using Weblate (Vietnamese)
Currently translated at 100.0% (564 of 564 strings)
Co-authored-by: Hồ Nhất Duy <mastoduy@gmail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/vi/
Translation: Tusky/Tusky
Currently translated at 100.0% (566 of 566 strings)
Translated using Weblate (Ukrainian)
Currently translated at 100.0% (564 of 564 strings)
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/uk/
Translation: Tusky/Tusky
Currently translated at 100.0% (566 of 566 strings)
Translated using Weblate (Chinese (Simplified))
Currently translated at 100.0% (564 of 564 strings)
Co-authored-by: Eric <alchemillatruth@purelymail.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/zh_Hans/
Translation: Tusky/Tusky
- Add a FAB for user interaction (hide on scroll if appropriate)
- Show a dialog to collect the new hashtag
- Autocomplete hashtags the same as when composing a status
* Kotlin 1.8.10
https://github.com/JetBrains/kotlin/releases/tag/v1.8.10
* Migrate onActivityCreated to onViewCreated
* More final modifiers
* Java Cleanups
* Kotlin cleanups
* More final modifiers
* Const value TOOLBAR_HIDE_DELAY_MS
* Revert
Previous code was:
```
for (i in tabs.indices) {
// ...
if (tabs[i].id == LIST) {
tab.contentDescription = tabs[i].arguments[1]
} else {
tab.setContentDescription(tabs[i].text)
}
// ...
```
When I converted it over, `i` was replaced with `position`, but I misread `tab.contentDescription = tabs[i].arguments[1]` as `tab.contentDescription = tabs[i].arguments[i]`.
Put the `1` back.
This uses unusual code provided by Mikhail Lopatkin of Gradle Inc:
https://github.com/gradle/gradle/issues/23914#issuecomment-1431909019
It wraps the git sha function in a "value source". This allows it to interact correctly with configuration caching.
Because the code is longer than before, it is now broken out into its own file getGitSha.gradle.
Make `tabs` `var` instead of `val` in `MainPagerAdapter` so it can be updated
when tabs change.
Then detach the `tabLayoutMediator`, update the tabs, and call
`notifyItemRangeChanged` in `setupTabs()`.
This fixes a bug (not sure if it's this code, or in ViewPager2) where
assigning a new adapter to the view pager seemed to result in a leak of one
or more fragments. This wasn't user-visible, but it's a leak, and it becomes
user-visible when fragments want to display menus.
This also fixes two other bugs:
1. Be on the left-most tab. Scroll down a bit. Then modify the tabs at
"Account preferences > tabs", but keep the left-most tab as-is.
Then go back to MainActivity. Your reading position in the left-most
tab has been jumped to the top.
2. Be on any non-left-most tab. Then modify the tab list by reordering tabs
(adding/removing tabs is also OK).
Then go back to MainActivity. Your tab selection has been overridden,
and the left-most tab has been selected.
Because the fragments are not destroyed unnecessarily your reading position
is retained. And it remembers the tab you had selected, and as long as that
tab is still present you will be returned to it, even if it's changed
position in the list.
Fixes https://github.com/tuskyapp/Tusky/issues/3251
Currently translated at 100.0% (564 of 564 strings)
Translated using Weblate (Persian)
Currently translated at 100.0% (560 of 560 strings)
Co-authored-by: Danial Behzadi <dani.behzi@ubuntu.com>
Translate-URL: https://weblate.tusky.app/projects/tusky/tusky/fa/
Translation: Tusky/Tusky