Commit Graph

4946 Commits

Author SHA1 Message Date
Nik Clayton 3a274b0594
refactor: Replace .to... with .from() in most cases (#82)
The previous code generally converted between a higher and a lower type
by putting the type conversion functions on the lower type.

This introduced cycles in the code dependency graph, and made it more
difficult to follow the code flow.

Refactor the code so that types generally have a `from(...)` static
factory method that can create an instance from a lower type, and if
appropriate a `to...()` method that can also create an instance of that
lower type.

Add `docs/code-style.md` which explains the rationale for this change
in more detail so that future contributors can write code in the same
style.
2023-09-22 15:17:38 +02:00
Nik Clayton f45a3df83f refactor: Use resource strings on the hashtag toolbar menu 2023-09-20 19:05:35 +02:00
Nik Clayton 2b2d5d4bd8 refactor: Remove unnecessary tint from composeToggleVisibilityButton 2023-09-20 19:05:35 +02:00
Nik Clayton f9e5063ce6 fix: Label the header and avatar on the account screen 2023-09-20 19:05:35 +02:00
Nik Clayton 2bcb595777 fix: Label the image on the focus dialog 2023-09-20 19:05:35 +02:00
Nik Clayton 254edf5e6f refactor: Mark the image overlay is not important for accessibility 2023-09-20 19:05:35 +02:00
Nik Clayton 0fadb6f3fd fix: Set the contentDescription for avatars 2023-09-20 19:05:35 +02:00
Nik Clayton acaf2a7d89 refactor: Remove warnings about unclosed resources
In `MediaUploader` the lint warning can be ignored, as the stream is
closed elsewhere.

In the other files `.use` is used to simplify the code and remove
the need for Closeable.closeQuietly (as `.use` catches exceptions that
are thrown when closing).
2023-09-20 19:05:35 +02:00
Nik Clayton d00dc97a5f refactor: Suppress an unncessary CheckResult lint error
The result is used, lint isn't smart enough to figure that out.
2023-09-20 19:05:35 +02:00
Nik Clayton d555e2a69c refactor: Fix KDoc warnings 2023-09-20 19:05:35 +02:00
Nik Clayton 1aea1cde8b refactor: Resolve theoretical `BaseActivity` NPEs 2023-09-20 19:05:35 +02:00
Nik Clayton 4db1af5b50 refactor: Resolve theoretical `StatusBaseViewHolder` NPEs
Use `assert` to note when a nullable value is known to be non-null.

Extract a method call to a variable where necessary to do this.
2023-09-20 19:05:35 +02:00
Nik Clayton a6bad12271 refactor: Resolve theoretical Notification NPEs
Use `assert` to note when a nullable value is known to be non-null.

Extract a method call to a variable where necessary to do this.

Update `CharSequence.unicodeWrap()` to handle a null `CharSequence`.
2023-09-20 19:05:35 +02:00
Nik Clayton 7b7976c31b refactor: Rewrite `onRequestPermissionsResult` to remove a theoretical NPE 2023-09-20 19:05:35 +02:00
Nik Clayton e762008a2a refactor: Use Java enhanced switch 2023-09-20 19:05:35 +02:00
Nik Clayton 1a817d9b29 fix: Fix potential NPE in `ConversationViewHolder`
`ConversationViewHolder` calls `getDisplayName()`, which may return
null.

Replace with `getName()`, which is consistent with usage in other
classes. Mark `getDisplayName()` as deprecated to prevent future
usage.
2023-09-20 19:05:35 +02:00
Nik Clayton da808793f5 refactor: Remove unncessary `val` from constructor parameter 2023-09-20 19:05:35 +02:00
Nik Clayton 26ff8e5bad refactor: Remove unnecessary return type from `handleProfileClick` 2023-09-20 19:05:35 +02:00
Nik Clayton 8c95472d42 refactor: Remove unused `consumed` property 2023-09-20 19:05:35 +02:00
Nik Clayton ba8048a3d6 refactor: Remove unnecessary SVG metadata 2023-09-20 19:05:35 +02:00
Nik Clayton 249718edf3 refactor: Remove unused `statusAsync` function 2023-09-20 19:05:35 +02:00
Nik Clayton 7b7c304f61 refactor: Remove unused `hasTab` function 2023-09-20 19:05:35 +02:00
Nik Clayton c335fa6217 refactor: Suppress lint errors for unused log TAG variables 2023-09-20 19:05:35 +02:00
Nik Clayton 986ccd0532 refactor: Remove unnecessary `?:` operator
Left hand side of the operation was always non-null.
2023-09-20 19:05:35 +02:00
Nik Clayton 20e5877a29 refactor: Convert sealed sub-objects to `data object` 2023-09-20 19:05:35 +02:00
Nik Clayton 9f81be7bb7 refactor: Replace `try/finally` with `use` 2023-09-20 19:05:35 +02:00
Nik Clayton b157791058
refactor: Convert ProgressRequestBody to Kotlin (#78) 2023-09-19 22:18:29 +02:00
Nik Clayton 9de829995b
fix: Check permissions before sending a failure notification (#77) 2023-09-19 22:18:17 +02:00
Nik Clayton 0f6975ffcc
fix: Check build version is >= T before POST_NOTIFICATIONS request (#76) 2023-09-19 22:04:42 +02:00
Nik Clayton ffa8ea615b
refactor: Convert AccountActionListener to Kotlin (#74) 2023-09-19 21:38:27 +02:00
Nik Clayton 5193f31ad8
refactor: Convert StatusActionListener to Kotlin (#73) 2023-09-19 17:57:35 +02:00
Nik Clayton 0bf459d385
refactor: Use "compat" drawables where appropriate (#72)
Use AppCompatResources.getDrawable() and app:drawableStartCompat.
Resolves existing lint issues.
2023-09-19 17:42:20 +02:00
Nik Clayton c97c3a4156
refactor: Add @NonNull and @Nullable annotations where appropriate (#71)
Adding the annotations cleans up an entire class of lint errors, and
it will be easire to convert from Java to Kotlin later.
2023-09-19 17:17:31 +02:00
Nik Clayton e0e4235354
change: Deprecate the "develop" branch (#70)
The separation between the `develop` and `main` branches was inherited
from Tusky and isn't helpful, complicating the release process and
causing CI to repeatedly run the same actions on the same code.

Deprecate the `develop` branch by removing references to it in the
documentation and updating the CI configuration as necessary.

Separately, the GitHub settings will be changed to set `main` as the
default branch, and the `develop` branch will be deleted.
2023-09-19 16:40:07 +02:00
Nik Clayton 26482c4b78
ci: Support generating whatsnew and uploading to Google Play (#69)
Add additional steps which:

- Generate the whatsnew-en-US file from the Fastlane metadata
- Uploads the generated AAB file to Google Play
2023-09-19 12:05:06 +02:00
Nik Clayton 4775ef85e9
chore: Prepare release 1.1 (versionCode 2) (#59) 2023-09-18 15:47:33 +02:00
Nik Clayton b739dc0a94
fix: Use correct colours for preference switches (#56)
The previous code used SwitchPreference to generate the switches, which
didn't apply the Material colours. This made it difficult to distinguish
between the on/off states, as the non-Material colours for those states
are very similar.

Fix by using SwitchPreferenceCompat which uses the correct Material
colours.
2023-09-18 12:21:49 +02:00
Nik Clayton b787f76cf6
fix: Use correct colour on "mute account" dialog (#55)
The previous code used "?attr/colorOnTertiary", which is the wrong
colour for the default background. Remove the override, so the correct
styled colour is used.
2023-09-18 12:12:35 +02:00
Nik Clayton 8ebc4e19ea
change: Fetch cached timeline when lifecycle is CREATED (#51)
Fetching data for a cached timeline can start on `onCreateView`, as soon
as the `viewLifecycle` state transitions to `CREATED`.
2023-09-16 15:32:43 +02:00
Nik Clayton 2c5c93e33a
ci: Start creating the build / sign / upload-to-Google-Play pipeline (#50)
This action should build the APK and AAB, sign them, and store the APK
as an asset.

Uploading to the correct Google Play release track will come later.
2023-09-15 22:15:50 +02:00
Nik Clayton f4e14dcf44
fix: Restore the user's reading position in more circumstances (#49)
The previous code only attempted to restore the user's reading position
once, after any initial refresh.

Adjust this so the position is restored after any refresh (which may
have been triggered from a menu instead of a swipe), and use
`scrollToPositionWithOffset` to ensure it's visible.
2023-09-15 16:09:18 +02:00
Nik Clayton ccb8ec06e7
fix: Fix toolbar flickering in additional activities (#48)
Testing showed additional activities with toolbar flicking issues. Fix
as before, using `setLiftOnScrollTargetView` to specify the scrolling
view the toolbar should lift above.
2023-09-14 22:19:26 +02:00
Nik Clayton 676c1eea2b
fix: Use the correct contrast colour on hashtag tab chips (#47)
The chips for adding a new hashtag to a tab specified the background
colour without setting the text colour, resulting in the colour being
too low-contrast against the background.

Use `?colorOnPrimary` to get the correct colour.
2023-09-14 22:19:10 +02:00
Nik Clayton 3577084b41
fix: Scale the monochrome icon to fit (#46)
The icon was appearing zoomed in when the user enabled theming in the
launcher.

Scale and translate the path to position it correctly.
2023-09-14 22:18:52 +02:00
Nik Clayton 7bb1e6fe17
change: Restore dividers between list items (#45)
Switching to the Material 3 themes caused the previous list dividers to
disappear.

Replace `DividerItemDecoration` with `MaterialDividerItemDecoration` to
restore them.
2023-09-14 19:10:59 +02:00
Nik Clayton fd7912e73c
fix: Restore the user's home timeline position (#44)
The previous code would always fetch the latest statuses when the app
restarts, jumping the user to the top of the home timeline. This is
because state.anchorPosition was null in this case.

Fix this by passing the saved initialKey to CachedTimelineRemoteMediator
and using it to construct a page of statuses around the requested
status.

This restores the user's reading position, and ensures that if the
user is at the top of the list their reading position is not reset
to the second item in the list.

Fixes #41, #42
2023-09-14 17:19:02 +02:00
Nik Clayton 402bcef588
fix: Ensure refreshing does not create a gap in the timeline (#43)
The previous code did not handle refreshing correctly; it retained some
of the cache, and tried merge new statuses in to the cache. This does
not work, and resulted in the app creating gaps in the timeline if more
than a page's worth of statuses had appeared since the user last
refreshed (e.g., overnight).

Fix this by treating the on-device cache as disposable, as the Paging3
library intends. On refresh the cached timeline is emptied and replaced
with a fresh page.

This causes a problem for state that is not stored on the server but is
part of a status' viewdata (has the user toggled viewing a piece of
media, expanded a CW, etc).

The previous code tried to work around that by pulling the state out of
the page cache and copying it in to the new statuses. That won't work
when the page cache is being destroyed.

So do it properly -- store the viewdata state in a separate (sparse)
table that contains only rows for statuses that have a non-default
state.

Save changes to the state when the user interacts with a status, and
use the state to ensure that the viewdata for a status in a thread
matches the viewdata for the same status if it is shown on the home
timeline (and vice-versa).

Fixes #16
2023-09-14 15:12:48 +02:00
Nik Clayton 6679a411e2
Update CONTRIBUTING.md (#31) 2023-09-12 13:18:50 +02:00
Nik Clayton a0f749b89a
ci: Rename pr-conventional-commit to pr-conventional-commit.yml (#32) 2023-09-12 13:01:47 +02:00
Nik Clayton 35afc574ab
ci: Check PR titles have conventional commit metadata (#30) 2023-09-12 12:59:29 +02:00