Compare commits

...
672 Commits
Author SHA1 Message Date
GitHub Actions 6915b12db8 feat(release): bump version 2025-01-31 12:52:25 +00:00
Harsh Shandilya ec7cc7b9ba chore: update changelog 2025-01-31 18:14:30 +05:30
Harsh Shandilya ca315429d6 fix: drop unused store module
I'm giving up hope on their paging integration ever shipping
2025-01-31 18:11:15 +05:30
renovate[bot]andGitHub ab525d052c fix(deps): update sentry to v8.1.0 2025-01-30 21:34:59 +00:00
renovate[bot]andGitHub 13623f8121 chore(deps): update gradle/actions digest to 94baf22 2025-01-30 18:25:04 +00:00
renovate[bot]andGitHub 1e501037a6 chore(deps): update plugin dependencyanalysis to v2.8.0 2025-01-30 01:24:50 +00:00
renovate[bot]andGitHub 19b61182b7 fix(deps): update androidx 2025-01-29 21:48:50 +00:00
renovate[bot]andGitHub 7dfeeb6873 chore(deps): update actions/setup-java action to v4.7.0 2025-01-29 05:47:29 +00:00
renovate[bot]andGitHub c2f725ab95 chore(deps): update plugin ksp to v2.1.10-1.0.29 2025-01-28 21:53:50 +00:00
renovate[bot]andGitHub 3bf3d6aba6 fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v5 2025-01-28 13:14:53 +00:00
renovate[bot]andGitHub a97f4990ae fix(deps): update haze to v1.3.0 2025-01-27 21:44:38 +00:00
renovate[bot]andGitHub 3b5780221d fix(deps): update kotlin and compose to v2.1.10 2025-01-27 10:13:00 +00:00
renovate[bot]andGitHub f0d574126e chore(deps): update plugin anvil to v2.5.1 2025-01-25 01:02:55 +00:00
renovate[bot]andGitHub 5947b0b640 chore(deps): update dependency gradle to v8.12.1 2025-01-24 14:34:36 +00:00
Harsh Shandilya 25249629fd chore: remove years from license headers
These are a useless annoyance

See: https://daniel.haxx.se/blog/2023/01/08/copyright-without-years/
2025-01-23 23:45:10 +05:30
renovate[bot]andHarsh Shandilya 17d9768a7b chore(deps): update plugin com.gradle.develocity to v3.19.1
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2025-01-23 23:40:07 +05:30
renovate[bot]andGitHub 1fa2d1fadb fix(deps): update sentry to v8 2025-01-21 14:30:54 +00:00
renovate[bot]andGitHub db3889c638 fix(deps): update sentry to v7.20.1 2025-01-20 16:50:26 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>Harsh Shandilya
4a9236e7c2 fix(deps): update dependency androidx.compose:compose-bom-alpha to v2025 (#759)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[androidx.compose:compose-bom-alpha](https://developer.android.com/jetpack)
| `2024.12.01` -> `2025.01.00` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.compose:compose-bom-alpha/2025.01.00?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.compose:compose-bom-alpha/2025.01.00?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.compose:compose-bom-alpha/2024.12.01/2025.01.00?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.compose:compose-bom-alpha/2024.12.01/2025.01.00?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS4xMDcuMCIsInVwZGF0ZWRJblZlciI6IjM5LjEwNy4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
2025-01-18 22:11:03 +00:00
renovate[bot]andGitHub 6fab6fe587 fix(deps): update haze to v1.2.2 2025-01-16 21:32:42 +00:00
renovate[bot]andGitHub 92e90471d7 chore(deps): update plugin modulegraphassert to v2.7.3 2025-01-16 00:34:34 +00:00
Harsh Shandilya c5c47d10b5 fix(deps): update androidx.core:core to 1.16.0-alpha01 2025-01-16 03:54:34 +05:30
renovate[bot]andHarsh Shandilya cf451e9980 chore(deps): update dependency com.facebook:ktfmt to v0.54 2025-01-16 03:39:10 +05:30
renovate[bot]andGitHub b4f621b14c fix(deps): update dependency androidx.activity:activity-compose to v1.10.0 2025-01-15 21:16:15 +00:00
renovate[bot]andGitHub 112a1f86c7 chore(deps): update plugin modulegraphassert to v2.7.2 2025-01-15 01:10:44 +00:00
renovate[bot]andGitHub 5e2bbf62c5 fix(deps): update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.2 2025-01-14 21:58:45 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
b79be58dd2 fix(deps): update haze to v1.2.1 (#756)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[dev.chrisbanes.haze:haze-materials](https://redirect.github.com/chrisbanes/haze)
| `1.2.0` -> `1.2.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/dev.chrisbanes.haze:haze-materials/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/dev.chrisbanes.haze:haze-materials/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/dev.chrisbanes.haze:haze-materials/1.2.0/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/dev.chrisbanes.haze:haze-materials/1.2.0/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[dev.chrisbanes.haze:haze](https://redirect.github.com/chrisbanes/haze)
| `1.2.0` -> `1.2.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/dev.chrisbanes.haze:haze/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/dev.chrisbanes.haze:haze/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/dev.chrisbanes.haze:haze/1.2.0/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/dev.chrisbanes.haze:haze/1.2.0/1.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>chrisbanes/haze (dev.chrisbanes.haze:haze-materials)</summary>

###
[`v1.2.1`](https://redirect.github.com/chrisbanes/haze/releases/tag/1.2.1)

[Compare
Source](https://redirect.github.com/chrisbanes/haze/compare/1.2.0...1.2.1)

##### What's Changed

- Fix Haze not drawing any effects in previews by
[@&#8203;chrisbanes](https://redirect.github.com/chrisbanes) in
[https://github.com/chrisbanes/haze/pull/470](https://redirect.github.com/chrisbanes/haze/pull/470)
- Fix issues with missing effects in LazyLayouts by
[@&#8203;chrisbanes](https://redirect.github.com/chrisbanes) in
[https://github.com/chrisbanes/haze/pull/469](https://redirect.github.com/chrisbanes/haze/pull/469)

**Full Changelog**:
https://github.com/chrisbanes/haze/compare/1.2.0...1.2.1

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS45Mi4wIiwidXBkYXRlZEluVmVyIjoiMzkuOTIuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-14 16:11:18 +00:00
Harsh Shandilya 1b79de1514 chore: fix spotless 2025-01-14 21:31:09 +05:30
Harsh Shandilya 276578d9da feat: add Google's security lints 2025-01-13 21:11:55 +05:30
renovate[bot]andGitHub e2ae36616c chore(deps): update plugin dependencyanalysis to v2.7.0 2025-01-11 05:32:06 +00:00
renovate[bot]andGitHub ec350c8e67 chore(deps): update actions/upload-artifact action to v4.6.0 2025-01-10 17:57:44 +00:00
renovate[bot]andGitHub 473c116243 fix(deps): update dagger to v2.55 2025-01-10 06:50:54 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
d6e80456b8 fix(deps): update agp to v8.8.0 (#752)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [com.android.test](https://developer.android.com/studio/build)
([source](https://android.googlesource.com/platform/tools/base)) |
`8.7.3` -> `8.8.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.test:com.android.test.gradle.plugin/8.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.android.test:com.android.test.gradle.plugin/8.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.android.test:com.android.test.gradle.plugin/8.7.3/8.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.android.test:com.android.test.gradle.plugin/8.7.3/8.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [com.android.lint](https://developer.android.com/studio/build)
([source](https://android.googlesource.com/platform/tools/base)) |
`8.7.3` -> `8.8.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.lint:com.android.lint.gradle.plugin/8.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.android.lint:com.android.lint.gradle.plugin/8.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.android.lint:com.android.lint.gradle.plugin/8.7.3/8.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.android.lint:com.android.lint.gradle.plugin/8.7.3/8.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[com.android.tools.build:gradle](https://developer.android.com/studio/build)
([source](https://android.googlesource.com/platform/tools/base)) |
`8.7.3` -> `8.8.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.tools.build:gradle/8.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.android.tools.build:gradle/8.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.android.tools.build:gradle/8.7.3/8.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.android.tools.build:gradle/8.7.3/8.8.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOS45Mi4wIiwidXBkYXRlZEluVmVyIjoiMzkuOTIuMCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-01-10 03:02:52 +00:00
Harsh Shandilya fa5cb1f484 fix(deps): upgrade haze to 1.2.0 2025-01-10 02:41:27 +05:30
Harsh Shandilya 059d6db316 fixup! fix(deps): update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.0 2025-01-10 00:14:25 +05:30
renovate[bot]andGitHub 275bb4e69d fix(deps): update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.1 2025-01-08 13:53:04 +00:00
renovate[bot]andGitHub b0b2ea3387 fix(deps): update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.0 2025-01-07 01:03:23 +00:00
renovate[bot]andGitHub 3638de0ac0 fix(deps): update serialization to v1.8.0 2025-01-06 16:34:50 +00:00
Harsh Shandilya a831090160 fix(renovate): prevent AboutLibraries from being upgraded to 11.3.0 or higher
Fixes COMPOSE-LOBSTERS-73
2025-01-04 21:01:17 +05:30
Harsh Shandilya 06acdfb80f Revert "fix(deps): update aboutlibraries to v11.3.0"
This reverts commit 614b61bc9f.
2025-01-04 21:01:17 +05:30
Harsh Shandilya d3807f14c3 Revert "fix(deps): update aboutlibraries to v11.4.0"
This reverts commit a50f42832a.
2025-01-04 21:01:17 +05:30
renovate[bot]andGitHub a50f42832a fix(deps): update aboutlibraries to v11.4.0 2025-01-04 13:05:59 +00:00
renovate[bot]andGitHub 614b61bc9f fix(deps): update aboutlibraries to v11.3.0 2025-01-03 19:26:06 +00:00
renovate[bot]andHarsh Shandilya c1b4af7484 fix(deps): update sentry to v7.20.0
msfjarvis: disable Session Replay now that it's out of beta and paid
2025-01-03 14:51:06 +05:30
Harsh Shandilya 28720b06bb chore(build): ensure AboutLibraries tasks avoid rate limits 2025-01-03 14:23:21 +05:30
Harsh Shandilya b20b087b8b feat: start work on a new tablet screen
Updates #726
2025-01-02 14:44:13 +05:30
Harsh Shandilya 4aee4de560 fix(renovate): migrate config to matchPackageNames 2025-01-01 11:50:03 +05:30
renovate[bot]andGitHub 1aa8e14544 chore(deps): update plugin poko to v0.18.2 2024-12-27 19:23:20 +00:00
renovate[bot]andGitHub 3772bd56a7 fix(deps): update sentry to v7.19.1 2024-12-23 17:45:15 +00:00
renovate[bot]andGitHub 6ebf22fbc6 chore(deps): update dependency de.mannodermaus.android-junit5 to v1.11.3.0 2024-12-23 14:30:47 +00:00
renovate[bot]andGitHub 1f92211854 fix(deps): update kotlinresult to v2.0.1 2024-12-23 01:44:24 +00:00
renovate[bot]andGitHub 6f38cf6bf6 fix(deps): update dagger to v2.54 2024-12-20 21:08:38 +00:00
Harsh Shandilya 28cda7e375 Merge remote-tracking branches 'origin/renovate/gradle-8.x' and 'origin/renovate/kotlinx-coroutines-monorepo'
* origin/renovate/gradle-8.x:
  chore(deps): update dependency gradle to v8.12

* origin/renovate/kotlinx-coroutines-monorepo:
  fix(deps): update kotlinx-coroutines monorepo to v1.10.1
2024-12-21 02:35:51 +05:30
renovate[bot]andGitHub 6b6bad513b chore(deps): update dependency gradle to v8.12 2024-12-20 18:25:46 +00:00
renovate[bot]andGitHub 374cd1c6cd fix(deps): update kotlinx-coroutines monorepo to v1.10.1 2024-12-20 18:21:12 +00:00
renovate[bot]andGitHub 60ff0927a3 fix(deps): update kotlinx-coroutines monorepo to v1.10.0 2024-12-19 20:53:52 +00:00
renovate[bot]andGitHub 8ad95e9438 chore(deps): update actions/setup-java action to v4.6.0 2024-12-18 06:28:09 +00:00
renovate[bot]andGitHub 1045e600b9 chore(deps): update gradle/actions digest to 0bdd871 2024-12-18 05:16:15 +00:00
renovate[bot]andGitHub fef69ee8b1 chore(deps): update actions/upload-artifact action to v4.5.0 2024-12-18 00:11:14 +00:00
renovate[bot]andGitHub 799b15097f fix(deps): update junit5 monorepo to v5.11.4 2024-12-16 17:11:45 +00:00
renovate[bot]andGitHub 074f642075 chore(deps): update plugin dependencyanalysis to v2.6.1 2024-12-14 18:41:06 +00:00
Harsh Shandilya ae84a3ea02 chore: remove unncessary licensee config 2024-12-14 16:21:47 +05:30
renovate[bot]andGitHub 9f0ba9b705 chore(deps): update plugin poko to v0.18.1 2024-12-14 06:19:43 +00:00
renovate[bot]andGitHub de89b100dc fix(deps): update sentry to v7.19.0 2024-12-12 20:12:04 +00:00
renovate[bot]andGitHub 257c3eec46 chore(deps): update plugin com.gradle.develocity to v3.19 2024-12-12 16:38:08 +00:00
Harsh Shandilya 1980387d4f fix(build): apply DAGP to all subprojects 2024-12-12 22:07:11 +05:30
Harsh Shandilya 6dbb1e4e59 fix(build): opt into JSpecify annotations
Jetpack has started using these and recommends the compiler flags
2024-12-12 15:20:27 +05:30
Harsh Shandilya 7b4379ad0f ifix(ci): also run build-logic checks 2024-12-12 15:20:27 +05:30
renovate[bot]andGitHub 7705386433 fix(deps): update androidx 2024-12-11 19:27:03 +00:00
renovate[bot]andGitHub ad6d0b4d0f fix(deps): update dagger to v2.53.1 2024-12-10 21:05:21 +00:00
renovate[bot]andHarsh Shandilya a617db2340 fix(deps): update dependency com.slack.eithernet:eithernet to v2
Co-Authored-by: Harsh Shandilya <me@msfjarvis.dev>
2024-12-11 02:33:18 +05:30
Harsh Shandilya f8d1662a62 ifix(ci): do not persist checkout credentials when not required 2024-12-11 01:40:21 +05:30
Harsh Shandilya 5a7e178c6d fix(deps): update richtext to v1.0.0-alpha02 2024-12-09 16:07:26 +05:30
Harsh ShandilyaandGitHub f0472b3d0c ifix(ci): update CI to JDK 23
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2024-12-09 11:11:32 +05:30
renovate[bot]andGitHub e27d8dfa54 chore(deps): update plugin dependencyanalysis to v2.6.0 2024-12-05 00:37:36 +00:00
renovate[bot]andGitHub 73af3c5c28 chore(deps): update plugin anvil to v2.5.0 2024-12-04 17:46:50 +00:00
renovate[bot]andGitHub 5a053d1f0d fix(deps): update haze to v1.1.1 2024-12-04 11:11:33 +00:00
renovate[bot]andGitHub 8adaf327d1 fix(deps): update dagger to v2.53 2024-12-03 00:40:41 +00:00
renovate[bot]andGitHub f20cf7f9a6 fix(deps): update haze to v1.1.0 2024-12-02 21:30:15 +00:00
renovate[bot]andGitHub 2eaa72f4fc chore(deps): update agp to v8.7.3 2024-12-02 20:18:03 +00:00
renovate[bot]andGitHub 72a4ca478f chore(deps): update plugin poko to v0.18.0 2024-12-02 16:59:21 +00:00
Harsh Shandilya d4d11b9254 refactor: de-duplicate navigation destinations 2024-12-02 15:58:19 +05:30
renovate[bot]andGitHub def815cc10 chore(deps): update plugin org.gradle.toolchains.foojay-resolver-convention to v0.9.0 2024-12-02 09:40:31 +00:00
renovate[bot]andGitHub aa5d67e41a fix(deps): update dependency org.jsoup:jsoup to v1.18.3 2024-12-01 23:05:56 +00:00
Harsh Shandilya f35c12fcbd fix(build): enable new PausableComposition Compose Compiler feature 2024-12-02 01:02:43 +05:30
GitHub Actions ba7607429a feat(release): start next development iteration 2024-11-30 13:32:42 +00:00
GitHub Actions 0224255ac6 feat(release): bump version 2024-11-30 13:24:59 +00:00
Harsh Shandilya 57bc93d5ea feat(ui): reintroduce navigation rail to tablet UI 2024-11-30 13:53:55 +05:30
renovate[bot]andGitHub d2202204d2 fix(deps): update sentry to v7.18.1 2024-11-29 10:54:49 +00:00
renovate[bot]andGitHub 9bb04973f1 chore(deps): update plugin ksp to v2.1.0-1.0.29 2024-11-28 01:56:22 +00:00
renovate[bot]andGitHub e3e0a2447a fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.14.1 2024-11-27 21:27:05 +00:00
renovate[bot]andGitHub c4cfcb1cc2 chore(deps): update kotlin and compose to v2.1.0 2024-11-27 13:08:09 +00:00
renovate[bot]andGitHub 5da76414a9 fix(deps): update dependency org.jsoup:jsoup to v1.18.2 2024-11-27 01:51:57 +00:00
Harsh Shandilya 6f4581d24c chore: fix incorrect changelog heading 2024-11-26 16:26:02 +05:30
GitHub Actions de85b1aa2e feat(release): start next development iteration 2024-11-26 10:49:06 +00:00
GitHub Actions 9e8e4813b1 feat(release): bump version 2024-11-26 10:48:06 +00:00
renovate[bot]andGitHub 84fea18a74 fix(deps): update coil3 to v3.0.4 2024-11-25 23:23:44 +00:00
renovate[bot]andGitHub 30cd657370 fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.14.0 2024-11-25 14:11:20 +00:00
renovate[bot]andGitHub f636b5b05f chore(deps): update plugin dependencyanalysis to v2.5.0 2024-11-21 10:50:39 +00:00
renovate[bot]andGitHub ef0f4e27d6 chore(deps): update actions/dependency-review-action digest to 3b139cf 2024-11-20 23:32:13 +00:00
renovate[bot]andGitHub 69019140af chore(deps): update dependency gradle to v8.11.1 2024-11-20 18:13:48 +00:00
renovate[bot]andGitHub 4f5de88df2 chore(deps): update plugin screenshot to v0.0.1-alpha08 2024-11-18 22:19:18 +00:00
renovate[bot]andGitHub c93d1fd53d chore(deps): update gradle/actions digest to cc4fc85 2024-11-18 18:20:41 +00:00
renovate[bot]andGitHub fbffd78053 fix(deps): update sentry to v7.18.0 2024-11-18 17:35:07 +00:00
Harsh Shandilya 45a26854cd fix(deps): upgrade to konvert 4.0.1 2024-11-18 02:05:39 +05:30
Harsh Shandilya 7f4a7db435 chore: update changelog 2024-11-17 22:44:42 +05:30
Harsh Shandilya 2816beff7f fix(ci): remove useless step in release workflow 2024-11-17 22:43:53 +05:30
Harsh Shandilya 76dd90a287 fix(android): prevent transparent navigation bar on API <= 31
Haze only works on API 32 and above so we set a solid background
color for devices without blur.
2024-11-16 22:50:55 +05:30
renovate[bot]andGitHub cf5ebcf712 chore(deps): update plugin ksp to v2.0.21-1.0.28 2024-11-16 04:50:31 +00:00
renovate[bot]andGitHub 844c875fca fix(deps): update haze to v1.0.2 2024-11-15 16:49:57 +00:00
renovate[bot]andGitHub 87b0757740 fix(deps): update coil3 to v3.0.3 2024-11-15 07:59:54 +00:00
renovate[bot]andGitHub 013f9630f0 fix(deps): update androidx 2024-11-13 20:03:01 +00:00
Harsh Shandilya f66ba9eef4 chore: update changelog 2024-11-14 01:21:03 +05:30
Harsh Shandilya 5db68ba186 feat: highlight story author in comments 2024-11-14 01:21:03 +05:30
renovate[bot]andGitHub 7bdaf691df chore(deps): update plugin com.gradle.develocity to v3.18.2 2024-11-13 13:58:44 +00:00
renovate[bot]andGitHub 9274b5d01f chore(deps): update gradle/actions digest to 473878a 2024-11-12 20:38:52 +00:00
Harsh Shandilya f00853dcc4 fix(comments): preserve scroll state 2024-11-13 01:00:07 +05:30
renovate[bot]andGitHub d9b1d082f9 fix(deps): update dependency io.sentry:sentry-bom to v7.17.0 2024-11-12 14:31:14 +00:00
renovate[bot]andGitHub d7fc14ea95 fix(deps): update haze to v1.0.1 2024-11-11 23:10:44 +00:00
renovate[bot]andGitHub d33f0c56bf chore(deps): update dependency gradle to v8.11 2024-11-11 15:34:46 +00:00
renovate[bot]andGitHub 4d30b26b7e fix(deps): update coil3 to v3.0.2 2024-11-10 03:52:25 +00:00
renovate[bot]andGitHub 1e9263a98f chore(deps): update plugin ksp to v2.0.21-1.0.27 2024-11-07 23:09:47 +00:00
renovate[bot]andGitHub b99b4dc4ba fix(deps): update haze to v1 2024-11-07 17:13:42 +00:00
renovate[bot]andGitHub 62589be921 chore(deps): update dependency gradle to v8.11-rc-3 2024-11-07 14:43:26 +00:00
renovate[bot]andGitHub 4c17a24bd8 fix(deps): update coil3 to v3.0.1 2024-11-07 09:41:16 +00:00
Harsh ShandilyaandGitHub dd95801b78 fix(ci): remove code quality workflows
These are too finicky to maintain and the value is mostly dubious for a relatively simple app like this.

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2024-11-05 17:48:13 +05:30
Harsh Shandilya 103f495ee1 fix: tweak Coil cache configuration
Reduce in-memory cache size and provide a bigger disk cache instead
2024-11-05 13:13:59 +05:30
Harsh Shandilya b24a180780 refactor: migrate to Coil3 2024-11-05 13:13:59 +05:30
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
e7e060e324 chore(deps): update mobsf/mobsfscan digest to 7d67c71 (#705)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| MobSF/mobsfscan | action | digest | `f6322a0` -> `7d67c71` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xNDIuNCIsInVwZGF0ZWRJblZlciI6IjM4LjE0Mi40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-11-05 05:53:21 +00:00
Harsh Shandilya 9e403cd199 fix(renoate): migrate config 2024-11-05 11:19:39 +05:30
renovate[bot]andGitHub bc81e91573 chore(deps): update plugin dependencyanalysis to v2.4.2 2024-11-04 02:05:33 +00:00
Harsh Shandilya c2c16a5d08 fix(deps): update Haze 2024-11-03 03:21:45 +05:30
renovate[bot]andGitHub b26338a8b4 fix(deps): update konvert to v3.2.3 2024-11-02 05:04:45 +00:00
renovate[bot]andGitHub 64230b291c chore(deps): update plugin dependencyanalysis to v2.4.1 2024-11-02 01:26:29 +00:00
renovate[bot]andGitHub 7ada1e388f chore(deps): update agp to v8.7.2 2024-10-31 22:57:19 +00:00
Harsh Shandilya 4bac4c6404 fixup! refactor(android): remove TwoPaneLayoutPostActions 2024-11-01 00:09:30 +05:30
Harsh Shandilya 4d260933c0 refactor(android): remove TwoPaneLayoutPostActions 2024-11-01 00:00:33 +05:30
Harsh Shandilya 37d0614830 fix(android): switch to LocalActivity from activity-compose 2024-10-31 23:38:00 +05:30
renovate[bot]andGitHub 925206a237 chore(deps): update dependency gradle to v8.11-rc-2 2024-10-31 17:55:20 +00:00
Harsh Shandilya 858160efd7 fix(deps): upgrade AndroidX to current unstable releases 2024-10-31 16:27:00 +05:30
renovate[bot]andGitHub 8d26473fab chore(deps): update plugin dependencyanalysis to v2.4.0 2024-10-31 02:02:10 +00:00
renovate[bot]andGitHub 6024703c33 chore(deps): update dependency com.facebook:ktfmt to v0.53 2024-10-30 19:21:14 +00:00
renovate[bot]andGitHub e50d716bc2 fix(deps): update androidx 2024-10-30 17:43:39 +00:00
renovate[bot]andGitHub bb42d36586 chore(deps): update actions/dependency-review-action digest to 4081bf9 2024-10-28 19:28:41 +00:00
renovate[bot]andGitHub 1a927e9f8c fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.13.0 2024-10-28 17:50:28 +00:00
renovate[bot]andGitHub 1b5ee72058 chore(deps): update mobsf/mobsfscan digest to f6322a0 2024-10-28 12:17:47 +00:00
Harsh Shandilya 1fc8f9a2be refactor(android): revamp the user interactions of tablet UI and cleanup code 2024-10-28 01:14:39 +05:30
Harsh Shandilya b51eb5415a fix(android): ignore some androidx.window stuff from R8 2024-10-28 00:25:41 +05:30
Harsh Shandilya 8303530857 chore: update changelog 2024-10-27 02:32:36 +05:30
b84f266db7 Add tablet specific UI (#686)
Hi @msfjarvis! Please have a look at what I have been able to implement
so far. When trying to call the ListDetail version in the MainActivity I
realized that the MainActivity is based on the BaseActivity class, and I
wasn't exactly sure how to set the parameters for ListDetail. Let me
know your thoughts when you get a chance. Thanks!

---------

Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
2024-10-26 20:53:43 +00:00
Harsh Shandilya f215210ffa refactor(android): make navigation destinations parcelable 2024-10-27 01:36:58 +05:30
Harsh Shandilya 3921771938 fix(deps): add Material3 adaptive 2024-10-27 01:36:32 +05:30
renovate[bot]andGitHub f7a0929669 fix(deps): update haze to v0.9.0-rc02 2024-10-26 12:09:29 +00:00
Harsh Shandilya a3fa7b9c78 Merge remote-tracking branches 'origin/renovate/com.autonomousapps.dependency-analysis-2.x', 'origin/renovate/com.diffplug.spotless-spotless-plugin-gradle-7.x' and 'origin/renovate/nl.littlerobots.version-catalog-update-nl.littlerobots.version-catalog-update.gradle.plugin-0.x'
* origin/renovate/com.autonomousapps.dependency-analysis-2.x:
  chore(deps): update plugin dependencyanalysis to v2.3.0

* origin/renovate/com.diffplug.spotless-spotless-plugin-gradle-7.x:
  fix(deps): update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.0.beta4

* origin/renovate/nl.littlerobots.version-catalog-update-nl.littlerobots.version-catalog-update.gradle.plugin-0.x:
  fix(deps): update dependency nl.littlerobots.version-catalog-update:nl.littlerobots.version-catalog-update.gradle.plugin to v0.8.5
2024-10-25 03:25:58 +05:30
renovate[bot]andGitHub 9fe92264c1 chore(deps): update plugin dependencyanalysis to v2.3.0 2024-10-24 21:36:13 +00:00
renovate[bot]andGitHub ae5e9a0d71 fix(deps): update dependency nl.littlerobots.version-catalog-update:nl.littlerobots.version-catalog-update.gradle.plugin to v0.8.5 2024-10-24 21:36:10 +00:00
renovate[bot]andGitHub 39d77a3282 fix(deps): update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.0.beta4 2024-10-24 21:36:08 +00:00
renovate[bot]andGitHub b7d1f36fb1 fix(deps): update dependency androidx.work:work-runtime to v2.10.0-rc01 2024-10-24 20:07:38 +00:00
renovate[bot]andGitHub 28662a6cf9 chore(deps): update actions/setup-python digest to 0b93645 2024-10-24 19:48:46 +00:00
renovate[bot]andGitHub e0b3b21b5b chore(deps): update actions/setup-java action to v4.5.0 2024-10-24 15:02:07 +00:00
renovate[bot]andGitHub 291b5367c9 chore(deps): update plugin ksp to v2.0.21-1.0.26 2024-10-23 21:49:53 +00:00
renovate[bot]andGitHub 2d3743ed4e chore(deps): update actions/checkout action to v4.2.2 2024-10-23 17:11:00 +00:00
renovate[bot]andGitHub 62bacd34ed fix(deps): update sentry to v7.16.0 2024-10-23 14:31:19 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
6e191c639f chore(deps): update actions/dependency-review-action digest to 5a2ce3f (#692)
This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[actions/dependency-review-action](https://redirect.github.com/actions/dependency-review-action)
| action | digest | `a6993e2` -> `5a2ce3f` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled because a matching PR was automerged
previously.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-23 09:05:49 +05:30
renovate[bot]andGitHub 3d61901425 chore(deps): update github/codeql-action action to v3.27.0 2024-10-22 23:10:28 +00:00
renovate[bot]andGitHub 8e1491d3c3 fix(deps): update dependency com.slack.lint.compose:compose-lint-checks to v1.4.2 2024-10-22 18:18:19 +00:00
Harsh Shandilya 6763022e04 fix(ci): remove CodeQL job
This is too flaky recently
2024-10-22 23:46:15 +05:30
renovate[bot]andGitHub f827c10990 chore(deps): update actions/dependency-review-action digest to a6993e2 2024-10-22 00:18:35 +00:00
renovate[bot]andGitHub df3dc62bb6 fix(deps): update haze to v0.9.0-rc01 2024-10-21 21:27:40 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
96c2046cc1 fix(deps): update junit5 monorepo to v5.11.3 (#690)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [org.junit.jupiter:junit-jupiter-engine](https://junit.org/junit5/)
([source](https://redirect.github.com/junit-team/junit5)) | `5.11.2` ->
`5.11.3` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.junit.jupiter:junit-jupiter-engine/5.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.junit.jupiter:junit-jupiter-engine/5.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.junit.jupiter:junit-jupiter-engine/5.11.2/5.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.junit.jupiter:junit-jupiter-engine/5.11.2/5.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [org.junit.jupiter:junit-jupiter-api](https://junit.org/junit5/)
([source](https://redirect.github.com/junit-team/junit5)) | `5.11.2` ->
`5.11.3` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.junit.jupiter:junit-jupiter-api/5.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.junit.jupiter:junit-jupiter-api/5.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.junit.jupiter:junit-jupiter-api/5.11.2/5.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.junit.jupiter:junit-jupiter-api/5.11.2/5.11.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-21 15:52:38 +00:00
Harsh Shandilya c2b58dbe58 fix: prevent navigation bugs with back button 2024-10-20 22:52:43 +05:30
renovate[bot]andGitHub baebc56ab1 chore(deps): update plugin dependencyanalysis to v2.2.0 2024-10-19 00:31:44 +00:00
renovate[bot]andGitHub 13d18514dd chore(deps): update plugin poko to v0.17.2 2024-10-18 21:23:53 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
1e519ab0ec fix(deps): update dependency org.mobilenativefoundation.store:store5 to v5.1.0-alpha05 (#687)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[org.mobilenativefoundation.store:store5](https://redirect.github.com/MobileNativeFoundation/Store)
| `5.1.0-alpha04` -> `5.1.0-alpha05` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.mobilenativefoundation.store:store5/5.1.0-alpha05?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.mobilenativefoundation.store:store5/5.1.0-alpha05?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.mobilenativefoundation.store:store5/5.1.0-alpha04/5.1.0-alpha05?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.mobilenativefoundation.store:store5/5.1.0-alpha04/5.1.0-alpha05?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>MobileNativeFoundation/Store
(org.mobilenativefoundation.store:store5)</summary>

###
[`v5.1.0-alpha05`](https://redirect.github.com/MobileNativeFoundation/Store/releases/tag/5.1.0-alpha05)

[Compare
Source](https://redirect.github.com/MobileNativeFoundation/Store/compare/5.1.0-alpha04...5.1.0-alpha05)

#### What's Changed

- Update kermit to 2.0.4 by
[@&#8203;solcott](https://redirect.github.com/solcott) in
[https://github.com/MobileNativeFoundation/Store/pull/655](https://redirect.github.com/MobileNativeFoundation/Store/pull/655)
- Avoid deadlock in RealMutableStore by
[@&#8203;amrfarid140](https://redirect.github.com/amrfarid140) in
[https://github.com/MobileNativeFoundation/Store/pull/658](https://redirect.github.com/MobileNativeFoundation/Store/pull/658)
- Typo fix RealStore.kt by
[@&#8203;Shabinder](https://redirect.github.com/Shabinder) in
[https://github.com/MobileNativeFoundation/Store/pull/662](https://redirect.github.com/MobileNativeFoundation/Store/pull/662)
- Fix Failing Node JS Tests by
[@&#8203;matt-ramotar](https://redirect.github.com/matt-ramotar) in
[https://github.com/MobileNativeFoundation/Store/pull/665](https://redirect.github.com/MobileNativeFoundation/Store/pull/665)

#### New Contributors

- [@&#8203;solcott](https://redirect.github.com/solcott) made their
first contribution in
[https://github.com/MobileNativeFoundation/Store/pull/655](https://redirect.github.com/MobileNativeFoundation/Store/pull/655)
- [@&#8203;amrfarid140](https://redirect.github.com/amrfarid140) made
their first contribution in
[https://github.com/MobileNativeFoundation/Store/pull/658](https://redirect.github.com/MobileNativeFoundation/Store/pull/658)

**Full Changelog**:
https://github.com/MobileNativeFoundation/Store/compare/5.1.0-alpha04...5.1.0-alpha05

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMjAuMSIsInVwZGF0ZWRJblZlciI6IjM4LjEyMC4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-10-18 19:57:19 +00:00
Harsh Shandilya 241a8ca426 fix(build): workaround IDE bug with BaseAppModuleExtension 2024-10-17 18:03:39 +05:30
Harsh Shandilya c2e609bdf7 fix(build): upgrade to Gradle 8.11-rc-1 2024-10-17 17:59:39 +05:30
Harsh Shandilya 7a23aa35c5 chore: refresh Lint baseline 2024-10-17 15:31:10 +05:30
Harsh Shandilya 329322e8f3 chore: mark test resources as vendored 2024-10-17 15:13:37 +05:30
Harsh Shandilya 55cae9107d fix(deps): upgrade androidx.compose:compose-bom to 2024.10.00 2024-10-17 14:52:59 +05:30
renovate[bot]andGitHub f9f71315b0 fix(deps): update androidx 2024-10-16 20:00:28 +00:00
renovate[bot]andGitHub a1a51d3fea fix(deps): update haze to v0.9.0-beta04.1 2024-10-16 16:27:22 +00:00
renovate[bot]andGitHub 795759eded fix(deps): update haze to v0.9.0-beta04 2024-10-16 08:41:45 +00:00
renovate[bot]andGitHub f5e8fab444 fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.12.0 2024-10-16 02:45:39 +00:00
renovate[bot]andGitHub 43c4201fee chore(deps): update plugin licensee to v1.12.0 2024-10-15 21:59:06 +00:00
renovate[bot]andGitHub 53cf1e65fe fix(deps): update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.0.beta3 2024-10-15 20:54:30 +00:00
renovate[bot]andGitHub 2dfc3414b5 fix(deps): update dependency com.slack.lint:slack-lint-checks to v0.8.2 2024-10-15 01:59:13 +00:00
renovate[bot]andGitHub c2256acc2a chore(deps): update github/codeql-action action to v3.26.13 2024-10-14 21:47:14 +00:00
renovate[bot]andGitHub 720ddbce38 chore(deps): update agp to v8.7.1 2024-10-14 19:39:44 +00:00
Harsh ShandilyaandGitHub 66331d21de chore: refresh changelog
Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2024-10-12 01:39:34 +05:30
renovate[bot]andGitHub b2c278428a chore(deps): update plugin ksp to v2.0.21-1.0.25 2024-10-11 06:18:18 +00:00
renovate[bot]andGitHub 75dd48b0dc chore(deps): update kotlin and compose to v2.0.21 2024-10-10 10:34:09 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>Harsh Shandilya
70a47e7162 fix(deps): update sentry to v7.15.0 (#679)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[io.sentry:sentry-bom](https://redirect.github.com/getsentry/sentry-java)
| `7.14.0` -> `7.15.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/io.sentry:sentry-bom/7.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.sentry:sentry-bom/7.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.sentry:sentry-bom/7.14.0/7.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.sentry:sentry-bom/7.14.0/7.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[io.sentry:sentry-android](https://redirect.github.com/getsentry/sentry-java)
| `7.14.0` -> `7.15.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/io.sentry:sentry-android/7.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.sentry:sentry-android/7.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.sentry:sentry-android/7.14.0/7.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.sentry:sentry-android/7.14.0/7.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>getsentry/sentry-java (io.sentry:sentry-bom)</summary>

###
[`v7.15.0`](https://redirect.github.com/getsentry/sentry-java/blob/HEAD/CHANGELOG.md#7150)

[Compare
Source](https://redirect.github.com/getsentry/sentry-java/compare/7.14.0...7.15.0)

##### Features

- Add support for `feedback` envelope header item type
([#&#8203;3687](https://redirect.github.com/getsentry/sentry-java/pull/3687))
- Add breadcrumb.origin field
([#&#8203;3727](https://redirect.github.com/getsentry/sentry-java/pull/3727))
- Session Replay: Add options to selectively mask/unmask views captured
in replay. The following options are available:
([#&#8203;3689](https://redirect.github.com/getsentry/sentry-java/pull/3689))
- `android:tag="sentry-mask|sentry-unmask"` in XML or
`view.setTag("sentry-mask|sentry-unmask")` in code tags
- if you already have a tag set for a view, you can set a tag by id:
`<tag android:id="@&#8203;id/sentry_privacy"
android:value="mask|unmask"/>` in XML or
`view.setTag(io.sentry.android.replay.R.id.sentry_privacy,
"mask|unmask")` in code
- `view.sentryReplayMask()` or `view.sentryReplayUnmask()` extension
functions
- mask/unmask `View`s of a certain type by adding fully-qualified
classname to one of the lists
`options.experimental.sessionReplay.addMaskViewClass()` or
`options.experimental.sessionReplay.addUnmaskViewClass()`. Note, that
all of the view subclasses/subtypes will be masked/unmasked as well
- For example, (this is already a default behavior) to mask all
`TextView`s and their subclasses (`RadioButton`, `EditText`, etc.):
`options.experimental.sessionReplay.addMaskViewClass("android.widget.TextView")`
- If you're using code obfuscation, adjust your proguard-rules
accordingly, so your custom view class name is not minified
- Session Replay: Support Jetpack Compose masking
([#&#8203;3739](https://redirect.github.com/getsentry/sentry-java/pull/3739))
- To selectively mask/unmask
[@&#8203;Composables](https://redirect.github.com/Composables), use
`Modifier.sentryReplayMask()` and `Modifier.sentryReplayUnmask()`
modifiers
- Session Replay: Mask `WebView`, `VideoView` and
`androidx.media3.ui.PlayerView` by default
([#&#8203;3775](https://redirect.github.com/getsentry/sentry-java/pull/3775))

##### Fixes

- Avoid stopping appStartProfiler after application creation
([#&#8203;3630](https://redirect.github.com/getsentry/sentry-java/pull/3630))
- Session Replay: Correctly detect dominant color for `TextView`s with
Spans
([#&#8203;3682](https://redirect.github.com/getsentry/sentry-java/pull/3682))
- Fix ensure Application Context is used even when SDK is initialized
via Activity Context
([#&#8203;3669](https://redirect.github.com/getsentry/sentry-java/pull/3669))
- Fix potential ANRs due to `Calendar.getInstance` usage in Breadcrumbs
constructor
([#&#8203;3736](https://redirect.github.com/getsentry/sentry-java/pull/3736))
- Fix potential ANRs due to default integrations
([#&#8203;3778](https://redirect.github.com/getsentry/sentry-java/pull/3778))
- Lazily initialize heavy `SentryOptions` members to avoid ANRs on app
start
([#&#8203;3749](https://redirect.github.com/getsentry/sentry-java/pull/3749))

*Breaking changes*:

- `options.experimental.sessionReplay.errorSampleRate` was renamed to
`options.experimental.sessionReplay.onErrorSampleRate`
([#&#8203;3637](https://redirect.github.com/getsentry/sentry-java/pull/3637))
- Manifest option `io.sentry.session-replay.error-sample-rate` was
renamed to `io.sentry.session-replay.on-error-sample-rate`
([#&#8203;3637](https://redirect.github.com/getsentry/sentry-java/pull/3637))
- Change `redactAllText` and `redactAllImages` to `maskAllText` and
`maskAllImages`
([#&#8203;3741](https://redirect.github.com/getsentry/sentry-java/pull/3741))

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4xMTQuMCIsInVwZGF0ZWRJblZlciI6IjM4LjExNC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
2024-10-10 08:13:53 +00:00
renovate[bot]andGitHub 3c9ce1d9b3 chore(deps): update actions/upload-artifact action to v4.4.3 2024-10-09 19:56:47 +00:00
Harsh Shandilya 6c012f93ce fix(common): restore support for collapsing child comments
Fixes: 86400c352b ("feat(comments): remember comment collapsed state")
2024-10-09 11:46:01 +05:30
renovate[bot]andGitHub 43b6f9411e chore(deps): update actions/upload-artifact action to v4.4.2 2024-10-08 19:35:24 +00:00
renovate[bot]andGitHub 9cc6570693 chore(deps): update github/codeql-action action to v3.26.12 2024-10-08 00:28:30 +00:00
renovate[bot]andGitHub e8e1bc6be6 chore(deps): update actions/upload-artifact action to v4.4.1 2024-10-07 22:22:13 +00:00
renovate[bot]andGitHub 4ec6efe4ff chore(deps): update actions/checkout action to v4.2.1 2024-10-07 19:12:07 +00:00
renovate[bot]andGitHub a111289c85 chore(deps): update dependency de.mannodermaus.android-junit5 to v1.11.2.0 2024-10-05 04:27:53 +00:00
renovate[bot]andGitHub f33b3e784c fix(deps): update haze to v0.9.0-beta03 2024-10-05 00:10:42 +00:00
renovate[bot]andGitHub 1c1e69c184 chore(deps): update plugin dependencyanalysis to v2.1.4 2024-10-04 21:30:14 +00:00
Harsh Shandilya d4fffee328 Merge branch 'remember-comment-collapsed-tate'
* remember-comment-collapsed-tate:
  feat(comments): remember comment collapsed state
2024-10-05 00:44:47 +05:30
renovate[bot]andGitHub 812da8dd3d fix(deps): update junit5 monorepo to v5.11.2 2024-10-04 14:30:33 +00:00
Ruben Quadros 86400c352b feat(comments): remember comment collapsed state
Remember the comment expanded/collapsed state when scrolling. Previously,
the state was remembered inside the `Node` composable. When the users scroll,
and `Node` re-composes, the state was being reset.

In this commit, we add the collapsed state into the `CommentNode`. This makes
sure that the state is retained even when the UI is re-composed.
2024-10-04 19:51:39 +05:30
Harsh Shandilya 0b549dde2d chore: refresh Lint baselines 2024-10-04 12:36:48 +05:30
Harsh Shandilya 62ac78bad6 fix(api): fix AvoidUsingNotNullOperator lint 2024-10-04 12:36:48 +05:30
Harsh Shandilya c72ba1ab97 fix(build): avoid most project isolation violations 2024-10-04 12:25:04 +05:30
renovate[bot]andHarsh Shandilya 0151a4d1d6 fix(deps): update dependency com.slack.lint:slack-lint-checks to v0.8.1 2024-10-04 11:46:58 +05:30
renovate[bot]andGitHub 8ccad5e259 chore(deps): update plugin dependencyanalysis to v2.1.3 2024-10-04 04:12:32 +00:00
renovate[bot]andGitHub aec252ed0a chore(deps): update github/codeql-action action to v3.26.11 2024-10-03 21:59:49 +00:00
renovate[bot]andGitHub 00c75588cd chore(deps): update plugin dependencyanalysis to v2.1.2 2024-10-03 16:49:26 +00:00
renovate[bot]andGitHub 61203b350a fix(deps): update dependency com.slack.lint:slack-lint-checks to v0.8.0 2024-10-03 01:26:28 +00:00
renovate[bot]andGitHub 498b165b68 fix(deps): update dependency com.slack.lint.compose:compose-lint-checks to v1.4.1 2024-10-02 22:18:37 +00:00
renovate[bot]andGitHub ea710454f4 fix(deps): update androidx 2024-10-02 18:46:21 +00:00
Harsh Shandilya 7d31979221 refactor(android): workaround ContentEmitterReturningValues lint 2024-10-02 20:26:04 +05:30
Harsh Shandilya fc45376b39 fix(ci): remove deprecated option 2024-10-02 17:08:11 +05:30
renovate[bot]andHarsh Shandilya e081e79820 fix(deps): update dependency com.slack.lint.compose:compose-lint-checks to v1.4.0
(cherry picked from commit 8c417f24007da7e9ef535bc8d88ff32663649234)
2024-10-02 17:08:11 +05:30
renovate[bot]andHarsh Shandilya 4a0786e9cb fix(deps): update haze to v0.9.0-beta02
(cherry picked from commit 0c8602230a3e6f3f370cd6106411e6a039fbdaa9)
2024-10-02 17:08:11 +05:30
Harsh Shandilya d50e0e99b3 fix(build): enable Compose Compiler feature flags 2024-10-02 17:08:11 +05:30
Harsh Shandilya bee721d9d8 fix(build): remove deprecated ComposeOptions 2024-10-02 01:23:53 +05:30
renovate[bot]andGitHub e00d6e5819 chore(deps): update agp to v8.7.0 2024-10-01 18:46:29 +00:00
renovate[bot]andGitHub 9e4172baca chore(deps): update github/codeql-action action to v3.26.10 2024-09-30 15:32:50 +00:00
renovate[bot]andGitHub 1ba7c1a306 chore(deps): update plugin dependencyanalysis to v2.1.1 2024-09-28 00:50:36 +00:00
renovate[bot]andGitHub d27d1cbb56 chore(deps): update actions/checkout action to v4.2.0 2024-09-25 19:16:50 +00:00
renovate[bot]andGitHub 490fbb5eb7 fix(deps): update junit5 monorepo to v5.11.1 2024-09-25 09:10:05 +00:00
renovate[bot]andGitHub 65984053e1 chore(deps): update github/codeql-action action to v3.26.9 2024-09-24 20:01:34 +00:00
renovate[bot]andGitHub 0a2879646c chore(deps): update actions/setup-java action to v4.4.0 2024-09-24 14:30:41 +00:00
renovate[bot]andGitHub 9d8c40d537 chore(deps): update plugin dependencyanalysis to v2.1.0 2024-09-24 02:34:51 +00:00
renovate[bot]andGitHub 2971e2cf76 chore(deps): update dependency gradle to v8.10.2 2024-09-23 23:49:21 +00:00
Harsh Shandilya bee67d6213 fix(database): force load SQLite library 2024-09-22 23:04:39 +05:30
GitHub Actions cb071da730 feat(release): start next development iteration 2024-09-22 14:05:31 +00:00
GitHub Actions a223470da5 feat(release): bump version 2024-09-22 14:02:16 +00:00
renovate[bot]andGitHub 1e5421fbc2 fix(deps): update serialization to v1.7.3 2024-09-19 17:03:22 +00:00
renovate[bot]andGitHub 4087ce1941 chore(deps): update github/codeql-action action to v3.26.8 2024-09-19 11:36:00 +00:00
renovate[bot]andGitHub 63e8ca3df8 fix(deps): update androidx 2024-09-18 18:12:17 +00:00
renovate[bot]andGitHub a9a304cd96 chore(deps): update agp to v8.6.1 2024-09-17 21:58:09 +00:00
renovate[bot]andGitHub 8dd15b8276 chore(deps): update plugin poko to v0.17.1 2024-09-17 20:06:29 +00:00
Harsh Shandilya 5c2793fff3 fix(android): add a theme preview for SettingsScreen 2024-09-16 13:17:34 +05:30
Harsh Shandilya 245437c739 refactor(android): prepare SettingsScreen composable for standalone preview 2024-09-16 13:17:33 +05:30
Harsh Shandilya 2fdbff6f12 fix(core): drop obsolete OptIn and use a named dispatcher 2024-09-16 12:39:39 +05:30
Harsh Shandilya 2bc86509cf chore: update changelog 2024-09-16 12:34:37 +05:30
Harsh Shandilya 1dfea689c6 Revert "refactor: make PostComments non-nullable"
This reverts commit 39e3d783cd.
2024-09-16 12:34:37 +05:30
Harsh Shandilya a0276c4873 Revert "fix(common): reintroduce handling for first views for comment state"
This reverts commit 1cbd3b5bd0.
2024-09-16 12:30:37 +05:30
renovate[bot]andGitHub fbb13c5acf chore(deps): update plugin screenshot to v0.0.1-alpha07 2024-09-14 05:20:46 +00:00
renovate[bot]andGitHub 95b3030e19 chore(deps): update plugin dependencyanalysis to v2.0.2 2024-09-14 02:25:34 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
0f2bb909d4 fix(deps): update coroutines to v1.9.0 (#656)
This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[org.jetbrains.kotlinx:kotlinx-coroutines-test](https://redirect.github.com/Kotlin/kotlinx.coroutines)
| `1.9.0-RC.2` -> `1.9.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlinx:kotlinx-coroutines-test/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlinx:kotlinx-coroutines-test/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlinx:kotlinx-coroutines-test/1.9.0-RC.2/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlinx:kotlinx-coroutines-test/1.9.0-RC.2/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.jetbrains.kotlinx:kotlinx-coroutines-core](https://redirect.github.com/Kotlin/kotlinx.coroutines)
| `1.9.0-RC.2` -> `1.9.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlinx:kotlinx-coroutines-core/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlinx:kotlinx-coroutines-core/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlinx:kotlinx-coroutines-core/1.9.0-RC.2/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlinx:kotlinx-coroutines-core/1.9.0-RC.2/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[org.jetbrains.kotlinx:kotlinx-coroutines-android](https://redirect.github.com/Kotlin/kotlinx.coroutines)
| `1.9.0-RC.2` -> `1.9.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlinx:kotlinx-coroutines-android/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlinx:kotlinx-coroutines-android/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlinx:kotlinx-coroutines-android/1.9.0-RC.2/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlinx:kotlinx-coroutines-android/1.9.0-RC.2/1.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>Kotlin/kotlinx.coroutines
(org.jetbrains.kotlinx:kotlinx-coroutines-test)</summary>

###
[`v1.9.0`](https://redirect.github.com/Kotlin/kotlinx.coroutines/blob/HEAD/CHANGES.md#Version-190)

[Compare
Source](https://redirect.github.com/Kotlin/kotlinx.coroutines/compare/1.9.0-RC.2...1.9.0)

##### Features

- Wasm/WASI target support
([#&#8203;4064](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4064)).
Thanks,
[@&#8203;igoriakovlev](https://redirect.github.com/igoriakovlev)!
- `limitedParallelism` now optionally accepts the name of the dispatcher
view for easier debugging
([#&#8203;4023](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4023)).
- No longer initialize `Dispatchers.IO` on the JVM when other standard
dispatchers are accessed
([#&#8203;4166](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4166)).
Thanks,
[@&#8203;metalhead8816](https://redirect.github.com/metalhead8816)!
- Introduced the `Flow<T>.chunked(size: Int): Flow<List<T>>` operator
that groups emitted values into groups of the given size
([#&#8203;1290](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/1290)).
- Closeable dispatchers are instances of `AutoCloseable` now
([#&#8203;4123](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4123)).

##### Fixes

- Calling `hasNext` on a `Channel`'s iterator is idempotent
([#&#8203;4065](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4065)).
Thanks, [@&#8203;gitpaxultek](https://redirect.github.com/gitpaxultek)!
- `CoroutineScope()` created without an explicit dispatcher uses
`Dispatchers.Default` on Native
([#&#8203;4074](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4074)).
Thanks, [@&#8203;whyoleg](https://redirect.github.com/whyoleg)!
- Fixed a bug that prevented non-Android `Dispatchers.Main` from
initializing when the Firebase dependency is used
([#&#8203;3914](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3914)).
- Ensured a more intuitive ordering of tasks in `runBlocking`
([#&#8203;4134](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4134)).
- Forbid casting a `Mutex` to `Semaphore`
([#&#8203;4176](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4176)).
- Worked around a stack overflow that may occur when calling
`asDeferred` on a `Future` many times
([#&#8203;4156](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4156)).

##### Deprecations and promotions

- Advanced the deprecation levels for `BroadcastChannel`-based API
([#&#8203;4197](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4197)).
- Advanced the deprecation levels for the old `kotlinx-coroutines-test`
API
([#&#8203;4198](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4198)).
- Deprecated `Job.cancelFutureOnCompletion`
([#&#8203;4173](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4173)).
- Promoted `CoroutineDispatcher.limitedParallelism` to stable
([#&#8203;3864](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3864)).
- Promoted `CoroutineStart.ATOMIC` from `ExperimentalCoroutinesApi` to
`DelicateCoroutinesApi`
([#&#8203;4169](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4169)).
- Promoted `CancellableContinuation.resume` with an `onCancellation`
lambda to stable, providing extra arguments to the lambda
([#&#8203;4088](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4088)).
- Marked the classes and interfaces that are not supposed to be
inherited from with the new `InternalForInheritanceCoroutinesApi` opt-in
([#&#8203;3770](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3770)).
- Marked the classes and interfaces inheriting from which is not stable
with the new `ExperimentalForInheritanceCoroutinesApi` opt-in
([#&#8203;3770](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/3770)).

##### Other

- Kotlin was updated to 2.0
([#&#8203;4137](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4137)).
- Reworked the documentation for `CoroutineStart` and `Channel`-based
API
([#&#8203;4147](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4147),
[#&#8203;4148](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4148),
[#&#8203;4167](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4167)).
Thanks, [@&#8203;globsterg](https://redirect.github.com/globsterg)!
- Simplified the internal implementation of `Job`
([#&#8203;4053](https://redirect.github.com/Kotlin/kotlinx.coroutines/issues/4053)).
-   Small tweaks, fixes, and documentation improvements.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend Renovate](https://mend.io/renovate/).
View the [repository job
log](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC43NC4xIiwidXBkYXRlZEluVmVyIjoiMzguNzQuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-09-13 20:23:57 +00:00
renovate[bot]andGitHub d2e1ae91da chore(deps): update github/codeql-action action to v3.26.7 2024-09-13 14:17:46 +00:00
renovate[bot]andGitHub 82a024baee chore(deps): update gradle/actions digest to d156388 2024-09-13 04:17:11 +00:00
renovate[bot]andGitHub 3021b55fce chore(deps): update plugin com.gradle.develocity to v3.18.1 2024-09-10 18:50:10 +00:00
Harsh Shandilya 7506dd5ca9 fix(build): upgrade to target SDK 35 2024-09-10 22:32:26 +05:30
renovate[bot]andGitHub d3d4519daa chore(deps): update actions/setup-java action to v4.3.0 2024-09-09 17:09:35 +00:00
renovate[bot]andGitHub 83b58aa7fb chore(deps): update dependency gradle to v8.10.1 2024-09-09 11:48:05 +00:00
Harsh Shandilya aa2093424c fix(common): restore missing padding to UserProfile page 2024-09-08 21:08:30 +05:30
Harsh Shandilya 501721fca9 fix(renovate): only allow alpha versions of Compose BOM 2024-09-06 18:16:06 +05:30
Harsh Shandilya aa088f5dd7 fix(deps): pull out Haze version 2024-09-06 17:27:39 +05:30
Harsh Shandilya b0b47d98a5 fix(common): handle pluralization for unread comments note 2024-09-06 15:30:16 +05:30
Harsh Shandilya 2109bcf12c chore(renovate): remove obsolete Compose Compiler directive 2024-09-06 15:30:16 +05:30
Harsh Shandilya 6bc6b13ea6 fix(deps): migrate to the official Compose alpha BOM 2024-09-06 15:30:16 +05:30
renovate[bot]andGitHub 0f20366cf3 chore(deps): update plugin ksp to v2.0.20-1.0.25 2024-09-05 21:51:21 +00:00
renovate[bot]andGitHub 723ab0add3 fix(deps): update dependency org.jetbrains.kotlinx:kotlinx-collections-immutable to v0.3.8 2024-09-05 16:34:11 +00:00
renovate[bot]andGitHub 77dd4496a5 fix(deps): update dependency dev.chrisbanes.haze:haze-materials to v0.9.0-beta01 2024-09-05 14:31:15 +00:00
renovate[bot]andGitHub 1e8a93fde8 fix(deps): update dependency dev.chrisbanes.haze:haze to v0.9.0-beta01 2024-09-05 12:22:20 +00:00
Harsh Shandilya fe0e0ea10e fix(deps): update dev.chrisbanes.compose:compose-bom to 2024.09.00-alpha01 2024-09-05 10:25:35 +05:30
renovate[bot]andGitHub d26245da17 fix(deps): update androidx 2024-09-05 01:26:15 +00:00
renovate[bot]andGitHub aa60160378 chore(deps): update plugin screenshot to v0.0.1-alpha06 2024-09-04 23:00:02 +00:00
Harsh Shandilya 943cddd8a4 fix(android): cache search results properly 2024-09-02 14:11:36 +05:30
Harsh Shandilya d5a0bb256f fix(build): inject test dependencies in the screenshotTest source set 2024-09-02 12:49:32 +05:30
Harsh Shandilya 1ebf610794 fix(common): slightly increase padding in LobstersCard 2024-09-02 12:49:32 +05:30
Harsh Shandilya 784dcf16f8 feat(android): add a screenshot test for NetworkPosts 2024-09-02 12:49:32 +05:30
Harsh Shandilya cc5b95e9c8 fix(ci): always download LFS files 2024-09-02 12:49:32 +05:30
Harsh Shandilya e317a1f4f3 feat(common): add a basic screenshot test for MonthHeader 2024-09-02 12:49:32 +05:30
Harsh Shandilya ed4c573ee4 feat(common): set up for Compose screenshot testing 2024-09-02 03:02:49 +05:30
Harsh Shandilya 7037d55bf2 fix(android): collect saved posts flow in a Lifecycle aware manner 2024-09-02 00:51:30 +05:30
Harsh Shandilya 4ab76c60bb fix(android): ensure pull refresh indicator is visible 2024-09-02 00:31:54 +05:30
renovate[bot]andGitHub 0fe83e8583 chore(deps): update actions/upload-artifact action to v4.4.0 2024-08-30 20:04:41 +00:00
GitHub Actions 68bcae572b feat(release): start next development iteration 2024-08-30 14:34:08 +00:00
GitHub Actions edfe72f12a feat(release): bump version 2024-08-30 14:30:24 +00:00
renovate[bot]andGitHub 4ae70e2129 chore(deps): update agp to v8.6.0 2024-08-30 01:26:51 +00:00
renovate[bot]andGitHub 54c1d4438c chore(deps): update plugin dependencyanalysis to v2.0.1 2024-08-29 21:51:58 +00:00
renovate[bot]andGitHub 3e673b09b6 chore(deps): update actions/setup-python digest to f677139 2024-08-29 18:40:39 +00:00
Harsh Shandilya 77439a5799 fix(common): correctly size spacer to match system bars 2024-08-29 23:13:26 +05:30
renovate[bot]andGitHub adf1af691f chore(deps): update github/codeql-action action to v3.26.6 2024-08-29 14:03:24 +00:00
Harsh Shandilya 1d60fca7eb chore: refresh changelog 2024-08-29 16:54:32 +05:30
Harsh Shandilya 8224b71465 fix(common): manually roll equals/hashCode for CommentNode
Excludes the parent field for comparison since it can trigger cycles in some situations

Fixes COMPOSE-LOBSTERS-5G
2024-08-29 16:47:48 +05:30
Harsh Shandilya bf52966772 fix(common): re-add spacer to comments page 2024-08-29 16:34:43 +05:30
Harsh Shandilya dc06410fc4 fix(common): set item keys in comments page 2024-08-29 16:34:15 +05:30
Harsh Shandilya 7b78438385 chore: refresh screenshots 2024-08-29 12:42:22 +05:30
Harsh Shandilya 077c855ef3 fix(android): give the right padding to SearchBar
Fixes #644
2024-08-29 12:42:22 +05:30
GitHub Actions f7f3f55261 feat(release): start next development iteration 2024-08-29 03:49:12 +00:00
GitHub Actions 74af4ad5b6 feat(release): bump version 2024-08-29 03:45:26 +00:00
renovate[bot]andGitHub 6988b5d412 fix(deps): update serialization to v1.7.2 2024-08-28 21:23:08 +00:00
renovate[bot]andGitHub ecc7b79720 chore(deps): update plugin modulegraphassert to v2.7.1 2024-08-28 20:29:15 +00:00
Harsh Shandilya 1de4916c9c feat: redesign bottom navigation bar 2024-08-28 15:17:38 +05:30
Harsh Shandilya 4f3bafc051 fix(android): migrate to Material3 pull refresh indicator 2024-08-28 13:42:36 +05:30
Harsh Shandilya 8651a4f66b refactor: lazily query saved and read state in UI
Having this always be read from the UI avoids values going stale inside data models

Fixes #641
2024-08-28 13:12:31 +05:30
Harsh Shandilya 6f424ae2d5 fix(android): avoid triggering a refresh on saving posts
The underlying issue is still not resolved since work on paging has stalled out in
Store5, but this trades the bad UX of an unwanted refresh for the slightly less
bad UX of the saved state sometimes being stale.

Fixes #558
2024-08-28 12:37:57 +05:30
Harsh Shandilya c8d1491196 refactor(android): inline refresh load state 2024-08-28 12:18:58 +05:30
Harsh Shandilya e68af9be16 chore: enable ktfmt in IDEA
It's more annoying to have code be incorrectly reformatted during editing than the occasional jumpy cursor
2024-08-28 12:08:50 +05:30
renovate[bot]andGitHub 482258a162 chore(deps): update plugin dependencyanalysis to v2 2024-08-28 00:37:41 +00:00
renovate[bot]andGitHub ee44d99f94 chore(deps): update plugin modulegraphassert to v2.7.0 2024-08-27 23:05:29 +00:00
renovate[bot]andGitHub 6a7de43b15 chore(deps): update gradle/actions digest to 16bf8bc 2024-08-27 01:31:32 +00:00
renovate[bot]andGitHub 89b490d841 fix(deps): update dependency com.diffplug.spotless:spotless-plugin-gradle to v7.0.0.beta2 2024-08-25 23:13:20 +00:00
Harsh Shandilya 1cbd3b5bd0 fix(common): reintroduce handling for first views for comment state 2024-08-24 16:02:56 +05:30
Harsh Shandilya 1dfcda4a64 feat(android): enable Sentry session replay 2024-08-24 16:02:56 +05:30
renovate[bot]andGitHub 18f6689c47 chore(deps): update github/codeql-action action to v3.26.5 2024-08-23 23:37:08 +00:00
renovate[bot]andGitHub 022e05696b chore(deps): update aboutlibraries to v11.2.3 2024-08-23 11:17:01 +00:00
renovate[bot]andGitHub e2bbe9c264 chore(deps): update plugin poko to v0.17.0 2024-08-23 03:23:10 +00:00
renovate[bot]andGitHub d0762b5cae chore(deps): update plugin ksp to v2.0.20-1.0.24 2024-08-22 21:43:00 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>Harsh Shandilya
f452833f6d chore(deps): update kotlin and compose to v2.0.20 (#635)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [org.jetbrains.kotlin.plugin.serialization](https://kotlinlang.org/)
([source](https://togithub.com/JetBrains/kotlin)) | `2.0.10` -> `2.0.20`
|
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlin.plugin.serialization/2.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlin.plugin.serialization/2.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlin.plugin.serialization/2.0.10/2.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlin.plugin.serialization/2.0.10/2.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [org.jetbrains.kotlin.plugin.compose](https://kotlinlang.org/)
([source](https://togithub.com/JetBrains/kotlin)) | `2.0.10` -> `2.0.20`
|
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlin.plugin.compose/2.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlin.plugin.compose/2.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlin.plugin.compose/2.0.10/2.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlin.plugin.compose/2.0.10/2.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [org.jetbrains.kotlin:kotlin-gradle-plugin](https://kotlinlang.org/)
([source](https://togithub.com/JetBrains/kotlin)) | `2.0.10` -> `2.0.20`
|
[![age](https://developer.mend.io/api/mc/badges/age/maven/org.jetbrains.kotlin:kotlin-gradle-plugin/2.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.jetbrains.kotlin:kotlin-gradle-plugin/2.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.jetbrains.kotlin:kotlin-gradle-plugin/2.0.10/2.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.jetbrains.kotlin:kotlin-gradle-plugin/2.0.10/2.0.20?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>JetBrains/kotlin
(org.jetbrains.kotlin.plugin.serialization)</summary>

###
[`v2.0.20`](https://togithub.com/JetBrains/kotlin/compare/v2.0.10...v2.0.20)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR was generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View the
[repository job
log](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzOC4yNi4xIiwidXBkYXRlZEluVmVyIjoiMzguMjYuMSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Harsh Shandilya <me@msfjarvis.dev>
2024-08-22 18:38:00 +00:00
Harsh Shandilya eb32c84b18 fix(renovate): update Compose compiler dep name 2024-08-22 22:03:18 +05:30
renovate[bot]andGitHub 8f19f794a1 fix(deps): update dependency dev.chrisbanes.compose:compose-bom to v2024.08.00-alpha02 2024-08-22 01:13:40 +00:00
renovate[bot]andGitHub 6bb5994a37 chore(deps): update github/codeql-action action to v3.26.4 2024-08-21 21:56:35 +00:00
renovate[bot]andGitHub 26ccc0d687 fix(deps): update androidx 2024-08-21 19:07:24 +00:00
Harsh Shandilya 39e3d783cd refactor: make PostComments non-nullable 2024-08-21 13:37:48 +05:30
Harsh Shandilya c50790e4f9 refactor(common): get rid of interior mutability in CommentNode 2024-08-21 13:13:38 +05:30
Harsh Shandilya d55ff24add refactor(common): cleanup unused stuff from tree view change
Follows up from changes in 6223198191
2024-08-21 13:13:38 +05:30
Harsh Shandilya 9b2a1cba64 chore: disable ktfmt in the IDE
The auto-format option messes up Compose code
2024-08-21 13:13:38 +05:30
Harsh Shandilya 327cce9075 fix(deps): upgrade Spotless to 7.0.0.BETA1 2024-08-21 13:13:38 +05:30
renovate[bot]andGitHub 466ec7c79f fix(deps): update dependency me.saket.unfurl:unfurl to v2.2.0 2024-08-20 21:25:32 +00:00
Harsh Shandilya 06c9fa1477 chore: refresh changelog 2024-08-21 01:31:55 +05:30
Harsh Shandilya 6223198191 refactor(common): use a simpler tree view for comments 2024-08-21 01:31:54 +05:30
renovate[bot]andGitHub 789e4a124d chore(deps): update dependency com.facebook:ktfmt to v0.52 2024-08-20 11:52:10 +00:00
renovate[bot]andGitHub e3745d0c58 chore(deps): update github/codeql-action action to v3.26.3 2024-08-19 19:03:49 +00:00
renovate[bot]andGitHub 26b35d4dd8 chore(deps): update plugin com.gradle.develocity to v3.18 2024-08-19 12:58:50 +00:00
renovate[bot]andGitHub 691a18b889 fix(deps): update dependency me.saket.unfurl:unfurl to v2 2024-08-15 06:38:31 +00:00
Harsh Shandilya 789339eacb Revert "fix(renovate): avoid Unfurl upgrades for now"
This reverts commit 995caae174.
2024-08-15 12:05:49 +05:30
renovate[bot]andGitHub 78a470dfdd fix(deps): update dependency androidx.test:runner to v1.6.2 2024-08-14 23:49:24 +00:00
renovate[bot]andGitHub eb3185d883 chore(deps): update dependency gradle to v8.10 2024-08-14 19:58:32 +00:00
renovate[bot]andGitHub bf3d507990 chore(deps): update github/codeql-action action to v3.26.2 2024-08-14 17:03:51 +00:00
renovate[bot]andGitHub faa79bcb12 chore(deps): update dependency de.mannodermaus.android-junit5 to v1.11.0.0 2024-08-14 14:54:07 +00:00
renovate[bot]andGitHub e8dcb0dfba fix(deps): update junit5 monorepo to v5.11.0 2024-08-14 10:29:54 +00:00
renovate[bot]andGitHub d502716652 chore(deps): update github/codeql-action action to v3.26.1 2024-08-13 21:03:56 +00:00
renovate[bot]andGitHub bb29924822 fix(deps): update coroutines to v1.9.0-rc.2 2024-08-13 11:55:57 +00:00
renovate[bot]andGitHub 101cd8894f fix(deps): update sentry to v7.14.0 2024-08-13 09:50:01 +00:00
Harsh Shandilya 995caae174 fix(renovate): avoid Unfurl upgrades for now 2024-08-12 15:40:50 +05:30
Harsh Shandilya 1a7b1fbdd1 Revert "fix(deps): update dependency me.saket.unfurl:unfurl to v2"
This reverts commit 7875c63bde.
2024-08-12 15:40:11 +05:30
Harsh Shandilya 9c6008b36e refactor(common): rename Comments.kt 2024-08-12 00:54:18 +05:30
renovate[bot]andGitHub 7875c63bde fix(deps): update dependency me.saket.unfurl:unfurl to v2 2024-08-09 11:23:26 +00:00
renovate[bot]andGitHub 68fe458f7d chore(deps): update agp to v8.5.2 2024-08-09 05:10:22 +00:00
renovate[bot]andGitHub f611b9aa25 fix(deps): update androidx 2024-08-08 01:09:29 +00:00
Harsh Shandilya 67b253ba62 fix(android): reorder settings items 2024-08-08 03:44:03 +05:30
Harsh Shandilya a8f559fe06 fix(build): reduce Gradle heap size 2024-08-08 03:44:03 +05:30
Harsh Shandilya 45dab6d513 fix(build): compile against SDK 35 2024-08-08 03:44:03 +05:30
Harsh Shandilya 13f6467a16 fix(deps): upgrade dev.chrisbanes.compose:compose-bom to 2024.08.00-alpha01 2024-08-08 02:45:40 +05:30
renovate[bot]andGitHub 871abf7873 fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.11.0 2024-08-07 11:55:06 +00:00
renovate[bot]andGitHub 866b487256 chore(deps): update plugin ksp to v2.0.10-1.0.24 2024-08-06 20:32:09 +00:00
renovate[bot]andGitHub 63adacbea8 chore(deps): update github/codeql-action action to v3.26.0 2024-08-06 18:22:54 +00:00
renovate[bot]andGitHub 65b10a0071 chore(deps): update actions/upload-artifact action to v4.3.6 2024-08-06 16:16:33 +00:00
renovate[bot]andGitHub e20af353ac chore(deps): update dependency org.jetbrains.kotlin.plugin.compose to v2.0.10 2024-08-06 12:11:25 +00:00
renovate[bot]andGitHub ba0f62febe fix(deps): update dagger to v2.52 2024-08-05 20:13:37 +00:00
renovate[bot]andGitHub 3a1012288d chore(deps): update actions/setup-java action to v4.2.2 2024-08-05 16:59:32 +00:00
renovate[bot]andGitHub 8424798257 chore(deps): update gradle/actions action to v4 2024-08-04 01:01:10 +00:00
renovate[bot]andGitHub a7e5ede51a chore(deps): update actions/upload-artifact action to v4.3.5 2024-08-02 15:13:54 +00:00
Harsh Shandilya 1197e7fd7f fix(build): remove unused libraries 2024-08-01 22:45:49 +05:30
renovate[bot]andGitHub 72a684dbd1 fix(deps): update sentry to v7.13.0 2024-07-31 10:07:24 +00:00
renovate[bot]andGitHub ba47885490 chore(deps): update plugin anvil to v2.5.0-beta11 2024-07-30 03:02:55 +00:00
renovate[bot]andGitHub 9f153d62ba chore(deps): update plugin ksp to v2.0.0-1.0.24 2024-07-30 00:46:37 +00:00
renovate[bot]andGitHub 9bceb5c680 chore(deps): update plugin dependencyanalysis to v1.33.0 2024-07-27 19:58:13 +00:00
renovate[bot]andGitHub 99d69f1bef chore(deps): update github/codeql-action action to v3.25.15 2024-07-26 14:31:04 +00:00
renovate[bot]andGitHub 1a72d2cbbe fix(deps): update sentry to v7.12.1 2024-07-25 21:46:41 +00:00
renovate[bot]andGitHub e22ecb51d3 fix(deps): update dependency dev.chrisbanes.compose:compose-bom to v2024.07.00-alpha02 2024-07-25 18:08:09 +00:00
renovate[bot]andGitHub 68f779c395 chore(deps): update dependency de.mannodermaus.android-junit5 to v1.10.2.0 2024-07-25 14:31:08 +00:00
renovate[bot]andGitHub 954341c0fb chore(deps): update github/codeql-action action to v3.25.14 2024-07-25 08:57:30 +00:00
renovate[bot]andGitHub 798ffb8bb6 fix(deps): update androidx 2024-07-24 17:36:50 +00:00
renovate[bot]andGitHub a137900ac7 chore(deps): update plugin modulegraphassert to v2.6.0 2024-07-24 11:39:18 +00:00
renovate[bot]andGitHub fdd4f3d1dc chore(deps): update plugin anvil to v2.5.0-beta10 2024-07-23 00:04:50 +00:00
renovate[bot]andGitHub 4c975471fd chore(deps): update plugin com.gradle.develocity to v3.17.6 2024-07-22 10:30:48 +00:00
renovate[bot]andGitHub e2d530635d chore(deps): update github/codeql-action action to v3.25.13 2024-07-19 19:33:18 +00:00
Harsh Shandilya 371780a1fd fixup! feat(common): visually distinguish between read and unread comments 2024-07-18 16:23:20 +05:30
renovate[bot]andGitHub b1d6cbcb39 fix(deps): update coil to v2.7.0 2024-07-17 18:56:26 +00:00
renovate[bot]andGitHub a07c55a430 fix(deps): update sentry 2024-07-16 01:31:16 +00:00
renovate[bot]andGitHub 8415c46492 chore(deps): update gradle/actions digest to d9c87d4 2024-07-15 22:21:24 +00:00
renovate[bot]andGitHub 771892bfb1 fix(deps): update dependency com.google.truth:truth to v1.4.4 2024-07-12 22:31:07 +00:00
renovate[bot]andGitHub 66e69a333c chore(deps): update github/codeql-action action to v3.25.12 2024-07-12 17:13:51 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
67dccf949c chore(deps): update actions/dependency-review-action digest to 5a2ce3f (#611)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-12 20:10:19 +05:30
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
f411460841 chore(deps): update agp to v8.5.1 (#608)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [com.android.test](https://developer.android.com/studio/build)
([source](https://android.googlesource.com/platform/tools/base)) |
`8.5.0` -> `8.5.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.test/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.android.test/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.android.test/8.5.0/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.android.test/8.5.0/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [com.android.lint](https://developer.android.com/studio/build)
([source](https://android.googlesource.com/platform/tools/base)) |
`8.5.0` -> `8.5.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.lint/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.android.lint/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.android.lint/8.5.0/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.android.lint/8.5.0/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[com.android.tools.build:gradle](https://developer.android.com/studio/build)
([source](https://android.googlesource.com/platform/tools/base)) |
`8.5.0` -> `8.5.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.android.tools.build:gradle/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.android.tools.build:gradle/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.android.tools.build:gradle/8.5.0/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.android.tools.build:gradle/8.5.0/8.5.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40MjUuMSIsInVwZGF0ZWRJblZlciI6IjM3LjQyNS4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-07-12 10:01:27 +00:00
renovate[bot]andGitHub 17bd98d96d chore(deps): update plugin ksp to v2.0.0-1.0.23 2024-07-12 07:02:25 +00:00
Harsh Shandilya fa2c0bc047 fix(deps): update dev.chrisbanes.compose:compose-bom to 2024.07.00-alpha01 2024-07-12 02:08:34 +05:30
renovate[bot]andGitHub 3dbca71de3 chore(deps): update dependency gradle to v8.9 2024-07-11 17:15:05 +00:00
renovate[bot]andGitHub 2c4f0fa4e2 chore(deps): update androidx 2024-07-10 18:00:45 +00:00
renovate[bot]andGitHub ce7e9db135 chore(deps): update actions/setup-python digest to 39cd149 2024-07-10 15:53:17 +00:00
renovate[bot]andGitHub babd40109b fix(deps): update dependency org.jsoup:jsoup to v1.18.1 2024-07-10 08:23:50 +00:00
Harsh Shandilya f1fcaf53f4 feat(android): link up bottombar visibility with scroll 2024-07-09 23:43:31 +05:30
renovate[bot]andGitHub d678843230 fix(deps): update dependency org.mobilenativefoundation.store:store5 to v5.1.0-alpha04 2024-07-07 22:40:08 +00:00
renovate[bot]andGitHub f7d9447ca0 fix(deps): update dependency org.mobilenativefoundation.store:store5 to v5.1.0-alpha03 2024-07-07 18:25:34 +00:00
Harsh Shandilya 03b0097ae1 chore: brush up changelog 2024-07-07 23:53:33 +05:30
Harsh Shandilya a53af77705 feat(common): visually distinguish between read and unread comments 2024-07-07 23:42:19 +05:30
Harsh Shandilya 05a8b9bc67 fix(build): only enable -Werror in CI 2024-07-07 23:18:38 +05:30
renovate[bot]andGitHub 9815ef1910 chore(deps): update dependency gradle to v8.9-rc-2 2024-07-05 18:02:15 +00:00
renovate[bot]andGitHub 7c9f61eb5e chore(deps): update actions/upload-artifact action to v4.3.4 2024-07-05 17:13:10 +00:00
Harsh Shandilya 8f69490c11 Reapply "refactor(android): migrate to navigation safe-args"
This reverts commit 6296afe51a.
2024-07-03 14:03:48 +05:30
renovate[bot]andGitHub a7dd2c52f5 fix(deps): update konvert to v3.2.2 2024-07-03 01:08:28 +00:00
renovate[bot]andGitHub 100387c759 fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.9.0 2024-07-02 13:24:02 +00:00
renovate[bot]andGitHub ce8d79f08c chore(deps): update mobsf/mobsfscan digest to 25184ed 2024-07-01 20:11:50 +00:00
renovate[bot]andGitHub 4a75ea99a3 fix(deps): update sentry to v7.11.0 2024-07-01 17:20:17 +00:00
renovate[bot]andGitHub bd8148b74b fix(deps): update dependency androidx.lifecycle:lifecycle-viewmodel-compose to v2.8.3 2024-07-01 17:04:59 +00:00
renovate[bot]andGitHub 2b9810c5d4 chore(deps): update plugin invert to v0.0.1-dev 2024-07-01 04:53:54 +00:00
renovate[bot]andGitHub 0e5052a5bb chore(deps): update aboutlibraries to v11.2.2 2024-06-29 14:02:17 +00:00
renovate[bot]andGitHub ffe40d41fd chore(deps): update github/codeql-action action to v3.25.11 2024-06-28 16:07:17 +00:00
renovate[bot]andGitHub 46cf368b99 fix(deps): update junit5 monorepo to v5.10.3 2024-06-27 15:38:30 +00:00
renovate[bot]andGitHub 1d0386f332 fix(deps): update dependency com.google.truth:truth to v1.4.3 2024-06-27 15:28:57 +00:00
Harsh Shandilya 4a621fa120 fix(deps): update dev.chrisbanes.compose:compose-bom to 2024.06.00-alpha01 2024-06-27 20:14:15 +05:30
renovate[bot]andGitHub a53dece4d1 fix(deps): update androidx 2024-06-27 00:50:09 +00:00
renovate[bot]andGitHub a2c6fb40bf fix(deps): update dependency androidx.navigation:navigation-compose to v2.8.0-beta04 2024-06-26 18:48:41 +00:00
Harsh Shandilya b132410282 feat: show "Authored by" on posts when applicable 2024-06-26 21:29:41 +05:30
Harsh Shandilya 4ebb99bf7d fix(build): update to Gradle 8.9-rc-1 2024-06-26 21:11:16 +05:30
Harsh Shandilya 3a15eea2fd Revert "fix(common): temporarily disable collapsible comments feature"
Doesn't fix the bug.

This reverts commit 7ae94ee2e6.
2024-06-26 12:01:16 +05:30
Harsh Shandilya 3a6f7be808 fix(android): surface upstream downtime more prominently 2024-06-26 11:58:12 +05:30
renovate[bot]andGitHub 1cb978aa92 fix(deps): update serialization to v1.7.1 2024-06-25 16:46:06 +00:00
renovate[bot]andGitHub e0de9c97de fix(deps): update androidx 2024-06-24 23:25:23 +00:00
Harsh Shandilya 7ae94ee2e6 fix(common): temporarily disable collapsible comments feature 2024-06-22 19:01:34 +05:30
renovate[bot]andGitHub 5d8467bc67 fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.8.0 2024-06-19 19:51:56 +00:00
renovate[bot]andGitHub 378f4e413a chore(deps): update gradle/actions digest to dbbdc27 2024-06-17 22:50:23 +00:00
renovate[bot]andGitHub 6727424092 chore(deps): update gradle/actions digest to 31ae356 2024-06-15 08:10:21 +00:00
renovate[bot]andGitHub 9594a4dc9e chore(deps): update dependency com.facebook:ktfmt to v0.51 2024-06-14 15:33:25 +00:00
renovate[bot]andGitHub f7fb007f85 chore(deps): update gradle/actions digest to d9336da 2024-06-13 21:13:45 +00:00
renovate[bot]andGitHub 710d2d2c35 chore(deps): update agp to v8.5.0 2024-06-13 18:20:45 +00:00
renovate[bot]andGitHub c3139bfc9d chore(deps): update github/codeql-action action to v3.25.10 2024-06-13 17:50:28 +00:00
Harsh Shandilya e2bcabe4e5 chore: refresh Lint baseline 2024-06-13 20:56:45 +05:30
Harsh Shandilya 9610241489 fix(common): tweak LobstersCard layout to improve touch targets 2024-06-13 20:46:01 +05:30
Harsh Shandilya cef05306ba fix(android): update LeakCanary API usage
Fixes 9a1f42764e
2024-06-13 20:46:01 +05:30
Harsh Shandilya c4aad66c03 refactor(common): move setExpanded to CommentNode 2024-06-13 20:46:01 +05:30
renovate[bot]andGitHub 7f2b052df5 fix(deps): update androidx 2024-06-13 00:38:31 +00:00
renovate[bot]andGitHub 0a3bf1e06a chore(deps): update actions/checkout action to v4.1.7 2024-06-12 21:15:14 +00:00
renovate[bot]andGitHub a779bee74c chore(deps): update plugin com.gradle.develocity to v3.17.5 2024-06-12 18:06:08 +00:00
renovate[bot]andGitHub 7ac87046ae chore(deps): update github/codeql-action action to v3.25.9 2024-06-12 17:04:50 +00:00
Harsh Shandilya 742a30bfdd Revert "fix(android): attempt to workaround duplicate item keys bug"
Doesn't seem to have resolved the issue.

This reverts commit 9c07169b1b.
2024-06-11 19:45:58 +05:30
renovate[bot]andGitHub ecad03e749 chore(deps): update agp to v8.4.2 2024-06-10 16:52:14 +00:00
Harsh Shandilya d2289da184 feat(build): add Invert plugin 2024-06-08 12:57:19 +05:30
Harsh Shandilya 2e91db6908 feat(store): init module
Fixes PP-83
2024-06-07 17:50:03 +05:30
Harsh Shandilya 679e177d47 chore: adjust Renovate config 2024-06-07 10:40:18 +05:30
renovate[bot]andGitHub feb4aa7b17 chore(deps): update dependency com.facebook:ktfmt to v0.50 2024-06-07 03:10:05 +00:00
renovate[bot]andGitHub c6bae7d92a fix(deps): update serialization to v1.7.0 2024-06-06 14:31:42 +00:00
renovate[bot]andGitHub 0277b987da fix(deps): update dependency io.sentry:sentry-bom to v7.10.0 2024-06-06 13:33:28 +00:00
renovate[bot]andGitHub 5024bfa160 fix(deps): update dependency com.slack.eithernet:eithernet to v1.9.0 2024-06-06 04:57:02 +00:00
renovate[bot]andGitHub 60c3d91087 chore(deps): update plugin ksp to v2.0.0-1.0.22 2024-06-06 01:12:50 +00:00
renovate[bot]andGitHub 559cfbb223 chore(deps): update actions/dependency-review-action digest to 72eb03d 2024-06-05 21:47:19 +00:00
renovate[bot]andGitHub 8e1e63b573 fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.7.1 2024-06-05 14:30:59 +00:00
GitHub Actions b0c6806226 feat(release): start next development iteration 2024-06-05 07:52:29 +00:00
GitHub Actions 6e29d61799 feat(release): bump version 2024-06-05 07:49:10 +00:00
Harsh Shandilya 1ee9d92b40 chore: update changelog 2024-06-05 13:12:57 +05:30
Harsh Shandilya 9c07169b1b fix(android): attempt to workaround duplicate item keys bug
Fixes COMPOSE-LOBSTERS-2E
2024-06-05 13:12:52 +05:30
renovate[bot]andGitHub 81f4d35f93 fix(deps): update dependency com.squareup.leakcanary:leakcanary-android-test to v3.0-alpha-8 2024-06-04 23:13:29 +00:00
renovate[bot]andGitHub 361082ded4 chore(deps): update github/codeql-action action to v3.25.8 2024-06-04 16:15:41 +00:00
renovate[bot]andGitHub 4fe43dbdc9 fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.7.0 2024-06-04 08:22:24 +00:00
renovate[bot]andGitHub cef45bd3e5 chore(deps): update dependency gradle to v8.8 2024-05-31 22:51:30 +00:00
renovate[bot]andGitHub c45dd76fc4 chore(deps): update github/codeql-action action to v3.25.7 2024-05-31 10:52:15 +00:00
renovate[bot]andGitHub 9a1f42764e fix(deps): update dependency com.squareup.leakcanary:leakcanary-android-test to v3.0-alpha-7 2024-05-31 02:01:11 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
e62a0eaa84 fix(deps): update androidx (#577)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [androidx.test:runner](https://developer.android.com/testing) |
`1.6.0-beta01` -> `1.6.0-rc01` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.test:runner/1.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.test:runner/1.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.test:runner/1.6.0-beta01/1.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.test:runner/1.6.0-beta01/1.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [androidx.test:rules](https://developer.android.com/testing) |
`1.6.0-beta01` -> `1.6.0-rc01` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.test:rules/1.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.test:rules/1.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.test:rules/1.6.0-beta01/1.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.test:rules/1.6.0-beta01/1.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [androidx.test.ext:junit](https://developer.android.com/testing) |
`1.2.0-beta01` -> `1.2.0-rc01` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.test.ext:junit/1.2.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.test.ext:junit/1.2.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.test.ext:junit/1.2.0-beta01/1.2.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.test.ext:junit/1.2.0-beta01/1.2.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[androidx.test.espresso:espresso-core](https://developer.android.com/testing)
| `3.6.0-beta01` -> `3.6.0-rc01` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.test.espresso:espresso-core/3.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.test.espresso:espresso-core/3.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.test.espresso:espresso-core/3.6.0-beta01/3.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.test.espresso:espresso-core/3.6.0-beta01/3.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [androidx.test:core](https://developer.android.com/testing) |
`1.6.0-beta01` -> `1.6.0-rc01` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/androidx.test:core/1.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/androidx.test:core/1.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/androidx.test:core/1.6.0-beta01/1.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/androidx.test:core/1.6.0-beta01/1.6.0-rc01?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNzcuOCIsInVwZGF0ZWRJblZlciI6IjM3LjM3Ny44IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-30 21:13:05 +00:00
Harsh Shandilya 6296afe51a Revert "refactor(android): migrate to navigation safe-args"
This reverts commit cf390de486 and bb3cef2f5b.
2024-05-31 01:05:14 +05:30
Harsh Shandilya cf390de486 refactor(android): move navigation extensions to their own file 2024-05-30 18:07:23 +05:30
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
99a45ab5df chore(deps): update aboutlibraries to v11.2.1 (#574)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| com.mikepenz.aboutlibraries.plugin | `11.2.0` -> `11.2.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.mikepenz.aboutlibraries.plugin/11.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.mikepenz.aboutlibraries.plugin/11.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.mikepenz.aboutlibraries.plugin/11.2.0/11.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.mikepenz.aboutlibraries.plugin/11.2.0/11.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[com.mikepenz:aboutlibraries-compose-m3](https://togithub.com/mikepenz/AboutLibraries)
| `11.2.0` -> `11.2.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.mikepenz:aboutlibraries-compose-m3/11.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.mikepenz:aboutlibraries-compose-m3/11.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.mikepenz:aboutlibraries-compose-m3/11.2.0/11.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.mikepenz:aboutlibraries-compose-m3/11.2.0/11.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>mikepenz/AboutLibraries
(com.mikepenz:aboutlibraries-compose-m3)</summary>

###
[`v11.2.1`](https://togithub.com/mikepenz/AboutLibraries/releases/tag/11.2.1)

[Compare
Source](https://togithub.com/mikepenz/AboutLibraries/compare/11.2.0...11.2.1)

#### 💬 Other

-   Reduce noise of AmbiguousArtifactVariantsException logs even more
- PR:
[#&#8203;990](https://togithub.com/mikepenz/AboutLibraries/issues/990)
    -   Thanks [@&#8203;sebokopter](https://togithub.com/sebokopter)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNzcuOCIsInVwZGF0ZWRJblZlciI6IjM3LjM3Ny44IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-30 10:57:41 +00:00
Harsh Shandilya 5257d0876a fix(ci): explicitly run assemble task
Seems like the Sentry Gradle plugin doesn't run otherwise
2024-05-30 14:17:39 +05:30
Harsh Shandilya bb3cef2f5b refactor(android): migrate to navigation safe-args
(cherry picked from commit 127a69249e)

Fixes PP-77
2024-05-30 14:03:42 +05:30
Harsh Shandilya a791588423 fix(android): work around weird scroll issue with saved posts 2024-05-30 13:07:51 +05:30
Harsh Shandilya 535624bf22 fix(deps): upgrade to Compose 1.7 betas 2024-05-30 13:04:02 +05:30
Harsh Shandilya b5a7225bd8 chore: update gitignore 2024-05-30 03:19:12 +05:30
Harsh Shandilya 8c0734a19a fix(build): enable Compose strong skipping mode 2024-05-30 02:02:12 +05:30
renovate[bot]andGitHub 71afc634b9 fix(deps): update androidx 2024-05-29 17:28:26 +00:00
renovate[bot]andGitHub fbaede8215 chore(deps): update plugin poko to v0.16.0 2024-05-28 23:03:26 +00:00
Harsh Shandilya 948aea7ea8 fix(deps): upgrade coroutines to 1.9.0-RC 2024-05-29 01:16:44 +05:30
renovate[bot]andGitHub 6acab19b28 chore(deps): update mobsf/mobsfscan digest to 849b749 2024-05-27 22:55:17 +00:00
renovate[bot]andGitHub 2555140ca1 chore(deps): update dependency gradle to v8.8-rc-2 2024-05-27 09:48:31 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
4a5980fd62 fix(deps): update konvert to v3.2.1 (#569)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [io.mcarle:konvert](https://togithub.com/mcarleio/konvert) | `3.2.0`
-> `3.2.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/io.mcarle:konvert/3.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.mcarle:konvert/3.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.mcarle:konvert/3.2.0/3.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.mcarle:konvert/3.2.0/3.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [io.mcarle:konvert-api](https://togithub.com/mcarleio/konvert) |
`3.2.0` -> `3.2.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/io.mcarle:konvert-api/3.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.mcarle:konvert-api/3.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.mcarle:konvert-api/3.2.0/3.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.mcarle:konvert-api/3.2.0/3.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
| [io.mcarle:konvert-annotations](https://togithub.com/mcarleio/konvert)
| `3.2.0` -> `3.2.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/io.mcarle:konvert-annotations/3.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.mcarle:konvert-annotations/3.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.mcarle:konvert-annotations/3.2.0/3.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.mcarle:konvert-annotations/3.2.0/3.2.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNjguMTAiLCJ1cGRhdGVkSW5WZXIiOiIzNy4zNjguMTAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-24 09:04:05 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
215afd208e chore(deps): update plugin dependencyanalysis to v1.32.0 (#568)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[com.autonomousapps.dependency-analysis](https://togithub.com/autonomousapps/dependency-analysis-android-gradle-plugin)
| `1.31.0` -> `1.32.0` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.autonomousapps.dependency-analysis/1.32.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.autonomousapps.dependency-analysis/1.32.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.autonomousapps.dependency-analysis/1.31.0/1.32.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.autonomousapps.dependency-analysis/1.31.0/1.32.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>autonomousapps/dependency-analysis-android-gradle-plugin
(com.autonomousapps.dependency-analysis)</summary>

###
[`v1.32.0`](https://togithub.com/autonomousapps/dependency-analysis-android-gradle-plugin/blob/HEAD/CHANGELOG.md#Version-1320)

- \[New]: Output dominator tree results in JSON format including size
and total size of deps.
-   \[New]: Allow to force app behavior for pure Java projects.
-   \[New]: `generateProjectGraph` task.
-   \[New]: `reason` works for multi-capabilities.
-   \[New]: Print build file path in `projectHealth` console report.
- \[Fix]: Enhance logging (more) when `ConstantPoolParser` throws
exception.
- \[Fix]: Do not dotty for path matching and remove prefix and suffix
from binary class name.
-   \[Fix]: Fix Windows file separator incompatibility.
- \[Fix]: Don't suggest adding `testImplementation` dependency on self.
-   \[Fix]: DAGP variants have a `Category` of 'dependency-analysis'.
-   \[Fix]: Sort an input map for better reproducibility.

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNjguMTAiLCJ1cGRhdGVkSW5WZXIiOiIzNy4zNjguMTAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-24 04:41:12 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
806ef65e08 fix(deps): update dependency com.squareup.leakcanary:leakcanary-android-test to v3.0-alpha-6 (#566)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[com.squareup.leakcanary:leakcanary-android-test](https://togithub.com/square/leakcanary)
| `3.0-alpha-5` -> `3.0-alpha-6` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.squareup.leakcanary:leakcanary-android-test/3.0-alpha-6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.squareup.leakcanary:leakcanary-android-test/3.0-alpha-6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.squareup.leakcanary:leakcanary-android-test/3.0-alpha-5/3.0-alpha-6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.squareup.leakcanary:leakcanary-android-test/3.0-alpha-5/3.0-alpha-6?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>square/leakcanary
(com.squareup.leakcanary:leakcanary-android-test)</summary>

###
[`v3.0-alpha-6`](https://togithub.com/square/leakcanary/releases/tag/v3.0-alpha-6)

See [Change Log](https://square.github.io/leakcanary/changelog)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zNjguMTAiLCJ1cGRhdGVkSW5WZXIiOiIzNy4zNjguMTAiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbXX0=-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-05-22 16:43:47 +00:00
Harsh Shandilya 35e143a458 chore: update changelog 2024-05-22 14:29:21 +05:30
Harsh Shandilya 5b4d1fc48e Merge remote-tracking branches 'origin/renovate/aboutlibraries' and 'origin/renovate/com.slack.lint-slack-lint-checks-0.x'
* origin/renovate/aboutlibraries:
  chore(deps): update aboutlibraries to v11.2.0

* origin/renovate/com.slack.lint-slack-lint-checks-0.x:
  fix(deps): update dependency com.slack.lint:slack-lint-checks to v0.7.4
2024-05-22 14:14:05 +05:30
renovate[bot]andGitHub c9098bbd44 chore(deps): update aboutlibraries to v11.2.0 2024-05-21 21:11:40 +00:00
renovate[bot]andGitHub b7eecd10b4 fix(deps): update dependency com.slack.lint:slack-lint-checks to v0.7.4 2024-05-21 21:11:36 +00:00
Harsh Shandilya c471fee4ee fix(build): cut over to upstream Compose Compiler 2024-05-22 02:40:24 +05:30
Harsh Shandilya e3ed059fde fix(deps): upgrade ksp and poko 2024-05-22 02:39:02 +05:30
renovate[bot]andGitHub 44355de333 chore(deps): update kotlin and compose to v2 2024-05-21 14:31:31 +00:00
renovate[bot]andGitHub 92dc6d9e4c fix(deps): update dependency com.squareup.leakcanary:leakcanary-android-test to v3.0-alpha-5 2024-05-21 05:58:36 +00:00
renovate[bot]andGitHub 68ca569b9d chore(deps): update agp to v8.4.1 2024-05-20 23:29:23 +00:00
renovate[bot]andGitHub 105a33e335 chore(deps): update github/codeql-action action to v3.25.6 2024-05-20 15:03:52 +00:00
renovate[bot]andGitHub 7862b4b5c8 chore(deps): update plugin poko to v0.15.3 2024-05-20 00:10:30 +00:00
Harsh Shandilya b12b5c800f feat(android): add share action 2024-05-20 01:37:00 +05:30
Harsh Shandilya b56de40b12 fix(build): downgrade to stable AGP 2024-05-20 01:29:22 +05:30
renovate[bot]andGitHub 8243b8998c chore(deps): update plugin com.gradle.develocity to v3.17.4 2024-05-17 17:50:12 +00:00
renovate[bot]andGitHub 195b50f919 fix(deps): update androidx 2024-05-17 02:28:27 +00:00
Harsh Shandilya 2d7903efc1 Merge remote-tracking branches 'origin/renovate/actions-checkout-4.x', 'origin/renovate/agp' and 'origin/renovate/sentry'
* origin/renovate/actions-checkout-4.x:
  chore(deps): update actions/checkout action to v4.1.6

* origin/renovate/agp:
  chore(deps): update agp to v8.5.0-beta02

* origin/renovate/sentry:
  fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.6.0
2024-05-17 00:53:33 +05:30
renovate[bot]andGitHub e2ab469ecc fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.6.0 2024-05-16 19:18:13 +00:00
renovate[bot]andGitHub 4ccf8959d9 chore(deps): update agp to v8.5.0-beta02 2024-05-16 19:18:08 +00:00
renovate[bot]andGitHub b73a758501 chore(deps): update actions/checkout action to v4.1.6 2024-05-16 19:18:05 +00:00
Harsh Shandilya cfaa1c17a0 fix(deps): update Compose Compiler to 1.5.14 2024-05-17 00:43:56 +05:30
renovate[bot]andGitHub 47332c22ec fix(deps): update androidx 2024-05-14 17:29:24 +00:00
GitHub Actions ce64454cec feat(release): start next development iteration 2024-05-14 07:49:51 +00:00
GitHub Actions b3313efbbe feat(release): bump version 2024-05-14 07:46:16 +00:00
renovate[bot]andGitHub bc14e58513 chore(deps): update github/codeql-action action to v3.25.5 2024-05-13 14:30:30 +00:00
Harsh Shandilya 83eb3c13b2 feat(android): add a heap growth detection test 2024-05-13 02:51:25 +05:30
Harsh Shandilya 59acbe2a37 fix(build): also inject test dependencies to androidTest source set 2024-05-13 02:07:36 +05:30
renovate[bot]andGitHub 7e31de67b4 chore(deps): update agp to v8.5.0-beta01 2024-05-10 18:21:22 +00:00
renovate[bot]andGitHub 37230e03c4 fix(deps): update coroutines to v1.8.1 2024-05-10 12:47:15 +00:00
renovate[bot]andGitHub fbf937dce2 chore(deps): update plugin com.gradle.develocity to v3.17.3 2024-05-10 11:38:07 +00:00
renovate[bot]andGitHub ee9db517f7 chore(deps): update plugin anvil to v2.5.0-beta09 2024-05-10 00:50:17 +00:00
Harsh Shandilya a4dcdc6f88 chore: refresh feature graphics 2024-05-09 18:11:39 +05:30
Harsh Shandilya c9c908d1a5 fix(android): improve TopAppBar layout spacing 2024-05-09 18:11:39 +05:30
Harsh Shandilya 2ce804ed90 refactor: inline ClawAppBar 2024-05-09 18:02:02 +05:30
Harsh Shandilya 3b044a8d23 chore: reflow UserProfile code for pedantic reasons 2024-05-09 17:54:01 +05:30
Harsh Shandilya bdca0799db fix(common): restore older link styling in user profiles 2024-05-09 17:51:06 +05:30
renovate[bot]andGitHub ca37557297 chore(deps): update actions/checkout action to v4.1.5 2024-05-09 00:49:43 +00:00
Harsh Shandilya 9c0c270f5c chore: refresh feature graphic 2024-05-08 22:53:00 +05:30
Harsh Shandilya 8a9cc844b9 fix(deps): upgrade Compose Compiler to 1.5.14-dev-k1.9.24-50022def4af 2024-05-08 20:11:44 +05:30
renovate[bot]andGitHub 452ba7dbf9 chore(deps): update kotlin and compose 2024-05-08 14:03:41 +00:00
Harsh Shandilya 9edfc23ee3 Merge remote-tracking branches 'origin/renovate/sentry' and 'origin/renovate/github-codeql-action-3.x'
* origin/renovate/sentry:
  fix(deps): update sentry to v7.9.0

* origin/renovate/github-codeql-action-3.x:
  chore(deps): update github/codeql-action action to v3.25.4
2024-05-08 19:32:17 +05:30
renovate[bot]andGitHub 3057f5fede fix(deps): update sentry to v7.9.0 2024-05-08 13:59:12 +00:00
renovate[bot]andGitHub 157748bc61 chore(deps): update github/codeql-action action to v3.25.4 2024-05-08 13:59:06 +00:00
Harsh Shandilya 68a5de84f7 Revert "refactor(android): migrate to navigation safe-args"
This reverts commit 127a69249e.
2024-05-08 19:28:24 +05:30
Harsh Shandilya b69fa43d29 Revert "fix(android): correct navigation route for attribution page"
This reverts commit 60a7b815ea.
2024-05-08 19:24:05 +05:30
Harsh Shandilya 6f76a15ded fix: downgrade to Compose stable
Fixes PP-56
Fixes PP-61
Fixes COMPOSE-LOBSTERS-3Z
Fixes COMPOSE-LOBSTERS-40
2024-05-07 14:02:08 +05:30
Harsh Shandilya 9fe6e34015 chore: make LaunchedEffect keys consistent 2024-05-07 13:09:30 +05:30
Harsh Shandilya 847858d852 fix(common): set key for comment entries 2024-05-04 04:23:28 +05:30
Harsh Shandilya 8735f7f8e8 fix(common): mark CommentNode#findTopMostParent as tailrec 2024-05-04 04:23:28 +05:30
renovate[bot]andGitHub 5061843779 fix(deps): update dependency com.slack.lint:slack-lint-checks to v0.7.3 2024-05-03 21:41:12 +00:00
renovate[bot]andGitHub b8480f1994 chore(deps): update agp to v8.5.0-alpha08 2024-05-03 19:10:12 +00:00
Harsh Shandilya 60a7b815ea fix(android): correct navigation route for attribution page
Fixes PP-54
2024-05-03 23:59:21 +05:30
renovate[bot]andGitHub bff56aa52b fix(deps): update dependency com.slack.lint:slack-lint-checks to v0.7.2 2024-05-02 22:03:33 +00:00
Harsh Shandilya 3137a1bb42 chore: update changelog 2024-05-03 01:27:19 +05:30
Harsh Shandilya 127a69249e refactor(android): migrate to navigation safe-args 2024-05-03 01:27:19 +05:30
Harsh Shandilya 9361c7ef47 fix(deps): upgrade whetstone to 0.9.0-beta02 2024-05-02 12:01:29 +05:30
Harsh Shandilya e8a9594e4c Merge remote-tracking branch 'origin/renovate/com.squareup.anvil-2.x'
* origin/renovate/com.squareup.anvil-2.x:
  chore(deps): update plugin anvil to v2.5.0-beta08
2024-05-02 11:50:18 +05:30
Harsh Shandilya 0a8ca5719d fix(deps): update dev.chrisbanes.compose:compose-bom to 2024.05.00-alpha01 2024-05-02 11:49:01 +05:30
Harsh Shandilya d87e2d1b9c fix(build): adapt strong skipping plugin arg 2024-05-02 11:48:49 +05:30
renovate[bot]andGitHub 774c6cea9b chore(deps): update plugin anvil to v2.5.0-beta08 2024-05-01 18:59:03 +00:00
renovate[bot]andGitHub 5753f65737 chore(deps): update androidx 2024-05-01 18:59:01 +00:00
renovate[bot]andGitHub 17965097bc chore(deps): update aboutlibraries to v11.1.4 2024-05-01 13:15:02 +00:00
renovate[bot]andGitHub f1d06116bc fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.5.1 2024-04-30 23:12:09 +00:00
renovate[bot]andGitHub 319e30c174 chore(deps): update actions/dependency-review-action digest to 0c155c5 2024-04-30 19:37:16 +00:00
Harsh Shandilya 8e8b710603 chore: update changelog 2024-04-30 10:42:48 +05:30
renovate[bot]andGitHub a142563ad8 chore(deps): update agp to v8.5.0-alpha07 2024-04-29 20:12:22 +00:00
Harsh Shandilya 9bd0df2aa8 fix(model): restore konvert-api dependency 2024-04-30 01:41:31 +05:30
Harsh Shandilya 54ec5a4c8d Revert "fix: remove visual divider"
It's better with it

This reverts commit 687cb32f7c.
2024-04-30 01:16:17 +05:30
Harsh Shandilya c79b7114fb refactor: selectively apply DAGP advice 2024-04-30 00:53:21 +05:30
Harsh Shandilya a6fb1fd788 fix(build): add dependency-analysis plugin 2024-04-30 00:25:05 +05:30
Harsh Shandilya 5a268fa5bd Merge remote-tracking branches 'origin/renovate/androidx' and 'origin/renovate/actions-dependency-review-action-digest'
* origin/renovate/androidx:
  fix(deps): update androidx

* origin/renovate/actions-dependency-review-action-digest:
  chore(deps): update actions/dependency-review-action digest to e58c696
2024-04-30 00:19:32 +05:30
renovate[bot]andGitHub 431dabbc09 fix(deps): update androidx 2024-04-29 18:09:12 +00:00
renovate[bot]andGitHub d7f71878f6 chore(deps): update actions/dependency-review-action digest to e58c696 2024-04-29 18:09:09 +00:00
Harsh ShandilyaandGitHub 196dfd056b chore: update changelog 2024-04-29 02:19:24 +05:30
Harsh Shandilya 6d3e749ad6 fix(database): ensure DB is only opened once
Fixes COMPOSE-LOBSTERS-3S
2024-04-28 19:10:05 +05:30
Harsh Shandilya e808e77ab8 fixup! fix(build): upgrade to Gradle 8.8-RC1 2024-04-27 20:34:22 +05:30
Harsh Shandilya d8b2ff6c8d fix(android): add missing user destination to search screen
Fixes COMPOSE-LOBSTERS-3V
2024-04-27 16:56:16 +05:30
Harsh Shandilya 55635f1101 fix(build): upgrade to Gradle 8.8-RC1 2024-04-27 16:24:09 +05:30
renovate[bot]andGitHub a70801c635 chore(deps): update dependency com.facebook:ktfmt to v0.49 2024-04-26 18:45:10 +00:00
Harsh Shandilya 3a60e8f2a1 chore(ci): run on Java 22 2024-04-27 00:13:36 +05:30
renovate[bot]andGitHub 80183fd248 chore(deps): update dependency com.facebook:ktfmt to v0.48 2024-04-26 15:40:32 +00:00
Harsh Shandilya 7cbb8e6237 fix(android): eagerly init ClawApplication#applicationComponent 2024-04-26 17:45:18 +05:30
renovate[bot]andGitHub 32cba40e91 chore(deps): update github/codeql-action action to v3.25.3 2024-04-26 01:33:33 +00:00
renovate[bot]andGitHub a8cef93096 chore(deps): update gradle/actions digest to db19848 2024-04-25 23:14:46 +00:00
renovate[bot]andGitHub b3ea9c6faf chore(deps): update actions/checkout action to v4.1.4 2024-04-25 14:14:23 +00:00
GitHub Actions 215b259288 feat(release): start next development iteration 2024-04-24 18:32:18 +00:00
GitHub Actions ab1f276a08 feat(release): bump version 2024-04-24 18:28:03 +00:00
Harsh Shandilya ca03561df0 fix(common): force titles in lists to be a single line 2024-04-24 23:55:09 +05:30
Harsh Shandilya 687cb32f7c fix: remove visual divider 2024-04-24 23:44:36 +05:30
Harsh Shandilya 12e57298af chore: refresh changelog 2024-04-24 23:32:14 +05:30
Harsh Shandilya 5abb5f109b fix(android): disable back invoked callback
Testing if this fixes the bug I'm seeing

Fixes COMPOSE-LOBSTERS-2X
2024-04-24 23:31:35 +05:30
Harsh Shandilya c8eaf8d769 fix(api): remove sentry-okhttp integration
This keeps logging HTTP 500 errors despite me opting out of them

Fixes COMPOSE-LOBSTERS-2T
2024-04-24 22:58:59 +05:30
GitHub Actions 24a4d20a03 feat(release): start next development iteration 2024-04-24 06:51:09 +00:00
GitHub Actions 57f95d790d feat(release): bump version 2024-04-24 06:47:57 +00:00
renovate[bot]andGitHub 09a6e3e32b chore(deps): update msfjarvis/keep-a-changelog-new-release action to v2.2.0 2024-04-24 01:14:57 +00:00
renovate[bot]andGitHub 491be53dc3 fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.5.0 2024-04-23 14:16:31 +00:00
renovate[bot]andGitHub d1e6260136 chore(deps): update github/codeql-action action to v3.25.2 2024-04-22 21:21:03 +00:00
renovate[bot]andGitHub c71b33a07f chore(deps): update actions/upload-artifact action to v4.3.3 2024-04-22 18:02:54 +00:00
renovate[bot]andGitHub 7d2094866b chore(deps): update actions/checkout action to v4.1.3 2024-04-22 14:30:42 +00:00
Harsh Shandilya a3e9957e49 fix(build): make internal build debuggable
Makes it easier to pull out the database
2024-04-22 01:21:49 +05:30
Harsh Shandilya cec2d70fda fix(common): make LobstersCard more compact
Fixes #526
2024-04-20 15:18:10 +05:30
Harsh Shandilya ec4066c472 chore(android): add a preview to NetworkPosts 2024-04-20 15:18:10 +05:30
Harsh Shandilya 433727a386 refactor(common): expose fields for LobstersCard previews 2024-04-20 15:18:10 +05:30
renovate[bot]andGitHub 1238012e0b chore(deps): update agp to v8.5.0-alpha06 2024-04-18 22:41:29 +00:00
renovate[bot]andGitHub 96e53f104d chore(deps): update gradle/actions digest to 750cdda 2024-04-18 20:34:58 +00:00
renovate[bot]andGitHub e1fed9ccc8 chore(deps): update actions/upload-artifact action to v4.3.2 2024-04-18 17:34:35 +00:00
Harsh Shandilya ced43b00be refactor(android): boost page load performance
This is kinda embarassing tbh.
2024-04-18 17:50:23 +05:30
Harsh Shandilya 0ca18d9216 fix(android): add log tags to Unfurl logger 2024-04-18 17:46:30 +05:30
Harsh ShandilyaandGitHub 1aa2dee779 fix(build): revert Develocity ToS url change
It redirects to the one I had set but the plugin still expects the older one.

Signed-off-by: Harsh Shandilya <me@msfjarvis.dev>
2024-04-18 15:00:05 +05:30
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
7f4a382f40 fix(deps): update dependency dev.chrisbanes.compose:compose-bom to v2024.04.00-alpha02 (#523)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
|
[dev.chrisbanes.compose:compose-bom](https://togithub.com/chrisbanes/compose-bom)
| `2024.04.00-alpha01` -> `2024.04.00-alpha02` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/dev.chrisbanes.compose:compose-bom/2024.04.00-alpha02?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/dev.chrisbanes.compose:compose-bom/2024.04.00-alpha02?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/dev.chrisbanes.compose:compose-bom/2024.04.00-alpha01/2024.04.00-alpha02?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/dev.chrisbanes.compose:compose-bom/2024.04.00-alpha01/2024.04.00-alpha02?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>chrisbanes/compose-bom
(dev.chrisbanes.compose:compose-bom)</summary>

###
[`v2024.04.00-alpha02`](https://togithub.com/chrisbanes/compose-bom/releases/tag/v2024.04.00-alpha02)

#### What's Changed

- chore(deps): update plugin com.android.library to v8.3.2 by
[@&#8203;renovate](https://togithub.com/renovate) in
[https://github.com/chrisbanes/compose-bom/pull/130](https://togithub.com/chrisbanes/compose-bom/pull/130)
- fix(deps): update jetpack compose by
[@&#8203;renovate](https://togithub.com/renovate) in
[https://github.com/chrisbanes/compose-bom/pull/131](https://togithub.com/chrisbanes/compose-bom/pull/131)
- Add material3-common by
[@&#8203;eygraber](https://togithub.com/eygraber) in
[https://github.com/chrisbanes/compose-bom/pull/132](https://togithub.com/chrisbanes/compose-bom/pull/132)

**Full Changelog**:
https://github.com/chrisbanes/compose-bom/compare/v2024.04.00-alpha01...v2024.04.00-alpha02

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMDEuNCIsInVwZGF0ZWRJblZlciI6IjM3LjMwMS40IiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-18 01:16:41 +00:00
Harsh Shandilya ed5b6c21da Revert "fix(deps): upgrade Compose"
I guess it is not unmaintained

This reverts commit d19c1e11be.
2024-04-18 03:48:34 +05:30
Harsh Shandilya d0bf2a4fb2 fix: handle user profile navigation correctly 2024-04-18 01:54:26 +05:30
Harsh Shandilya 2b9680d3d8 refactor: remove deeplinks
Fixes #484
2024-04-18 01:08:42 +05:30
Harsh Shandilya d19c1e11be fix(deps): upgrade Compose
The BOM is likely to go unmaintained in the future

See: https://github.com/chrisbanes/compose-bom/issues/97
2024-04-18 01:02:26 +05:30
renovate[bot]andGitHub 809cec61cd chore(deps): update dependency androidx.compose.compiler:compiler to v1.5.12 2024-04-17 17:47:28 +00:00
Harsh Shandilya 13feb83063 chore(deps): upgrade AndroidX libraries 2024-04-17 23:16:47 +05:30
renovate[bot]andGitHub 40b7884520 chore(deps): update plugin com.gradle.develocity to v3.17.2 2024-04-17 14:31:29 +00:00
renovate[bot]andGitHub 75b05b83c1 chore(deps): update github/codeql-action action to v3.25.1 2024-04-17 12:26:22 +00:00
renovate[bot]andGitHub 9afe913548 chore(deps): update plugin anvil to v2.5.0-beta07 2024-04-17 00:39:33 +00:00
renovate[bot]andGitHub 44d589e729 chore(deps): update plugin anvil to v2.5.0-beta06 2024-04-16 17:24:25 +00:00
renovate[bot]andGitHub ace1a3c94c fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.4.1 2024-04-15 21:41:22 +00:00
renovate[bot]andGitHub 31c94dc8cc chore(deps): update github/codeql-action action to v3.25.0 2024-04-15 14:31:03 +00:00
Harsh Shandilya 493ab8712c chore: add changelog entry 2024-04-14 21:10:50 +05:30
Harsh Shandilya 1fff9d9aa2 fix(android): only attempt to scroll when items exist
Fixes COMPOSE-LOBSTERS-3F
2024-04-14 20:51:57 +05:30
Harsh Shandilya 9357362ef6 fix(ci): validate Gradle wrappers in CI 2024-04-13 14:18:45 +05:30
Harsh Shandilya 7b07a4676b refactor(ci): introduce a reusable workflow 2024-04-13 14:08:30 +05:30
renovate[bot]andGitHub e272427031 fix(deps): update konvert to v3.2.0 2024-04-12 21:14:45 +00:00
renovate[bot]andGitHub 7882b86b39 chore(deps): update gradle/actions digest to 6cec5d4 2024-04-12 20:11:13 +00:00
renovate[bot]andGitHub afb00c64fc chore(deps): update agp to v8.5.0-alpha05 2024-04-11 18:17:03 +00:00
renovate[bot]andGitHub 3a7727e563 chore(deps): update plugin anvil to v2.5.0-beta05 2024-04-09 19:02:52 +00:00
Harsh Shandilya d28c9c2e61 Revert "fix(deps): update glance to 1.1.0-beta01"
This reverts commit dc70293bd4.
2024-04-10 00:31:52 +05:30
renovate[bot]andHarsh Shandilya 99aff514f2 fix(deps): update sentry to v7.8.0 2024-04-10 00:31:52 +05:30
renovate[bot]andHarsh Shandilya 0e8f1a51bf chore(deps): update plugin com.gradle.develocity to v3.17.1 2024-04-10 00:31:52 +05:30
renovate[bot]andGitHub 52829fedb2 chore(deps): update dependency com.mikepenz.aboutlibraries.plugin to v11.1.3 2024-04-09 17:12:54 +00:00
renovate[bot]andGitHub 4e479cf0f1 chore(deps): update aboutlibraries to v11.1.2 2024-04-09 14:30:56 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2020f43dd6 chore(deps): update gradle/actions digest to 1168cd3 (#514)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [gradle/actions](https://togithub.com/gradle/actions) | action |
digest | `e24011a` -> `1168cd3` |

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjkuMiIsInVwZGF0ZWRJblZlciI6IjM3LjI2OS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-04-09 04:17:33 +00:00
Harsh Shandilya 659eaf9789 feat: enable Compose strong skipping mode 2024-04-09 09:43:22 +05:30
renovate[bot]andGitHub a410267f99 chore(deps): update agp to v8.5.0-alpha04 2024-04-08 18:31:44 +00:00
renovate[bot]andGitHub 6f248c529e fix(deps): update sentry to v7.7.0 2024-04-08 12:56:18 +00:00
renovate[bot]andGitHub 142fafba23 fix(deps): update konvert to v3.1.0 2024-04-06 03:34:33 +00:00
renovate[bot]andGitHub 7119cda579 chore(deps): update sqldelight to v2.0.2 2024-04-06 01:21:27 +00:00
renovate[bot]andGitHub e3c1213be6 chore(deps): update github/codeql-action action to v3.24.10 2024-04-05 17:12:11 +00:00
renovate[bot]andGitHub 5487615436 chore(deps): update plugin ksp to v1.9.23-1.0.20 2024-04-05 02:24:24 +00:00
renovate[bot]andGitHub 619b771aff chore(deps): update gradle/actions digest to e24011a 2024-04-04 21:53:02 +00:00
Harsh Shandilya a12a1f92a5 fix(deps): update dev.chrisbanes.compose:compose-bom to 2024.04.00-alpha01 2024-04-04 04:28:24 +05:30
Harsh Shandilya dc70293bd4 fix(deps): update glance to 1.1.0-beta01 2024-04-04 04:22:42 +05:30
renovate[bot]andGitHub f9ecdebc63 fix(deps): update androidx 2024-04-03 19:35:21 +00:00
renovate[bot]andHarsh Shandilya 4a96af17f4 chore(deps): update plugin com.gradle.enterprise to v3.17 2024-04-03 11:22:18 +05:30
renovate[bot]andGitHub e9b69c5cad chore(deps): update agp to v8.5.0-alpha03 2024-04-02 14:08:09 +00:00
Harsh Shandilya d3f9bb4c00 fix(build): switch over to includeGroupAndSubgroups API
The bug that broke this was fixed in Gradle 8.7
2024-03-31 17:33:16 +05:30
renovate[bot]andHarsh Shandilya feae5d2630 chore(deps): update plugin licensee to v1.11.0
(cherry picked from commit a030290ec242a469d5610c85e2faa1c26ed2535f)
2024-03-30 03:00:45 +05:30
renovate[bot]andGitHub df7868de2d fix(deps): update dagger to v2.51.1 2024-03-29 20:04:32 +00:00
renovate[bot]andGitHub 8a66361a98 fix(deps): update retrofit to v2.11.0 2024-03-29 01:03:51 +00:00
renovate[bot]andGitHub 3099ffe201 chore(deps): update plugin licensee to v1.10.0 2024-03-28 21:21:17 +00:00
renovate[bot]andGitHub 0fc9c28354 fix(deps): update dependency com.slack.lint:slack-lint-checks to v0.7.1 2024-03-27 18:10:39 +00:00
renovate[bot]andGitHub 6ba7dec98d chore(deps): update actions/setup-python digest to 82c7e63 2024-03-26 16:20:57 +00:00
renovate[bot]andGitHub 332a84c6ec fix(deps): update dependency io.sentry.android.gradle:io.sentry.android.gradle.gradle.plugin to v4.4.0 2024-03-26 13:09:10 +00:00
renovate[bot]andGitHub a19a5e926c chore(deps): update actions/dependency-review-action digest to 5bbc3ba 2024-03-26 08:10:02 +00:00
renovate[bot]andGitHub bd952b74d8 chore(deps): update actions/dependency-review-action digest to 733dd5d 2024-03-24 14:30:41 +00:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
3e374df3aa chore(deps): update aboutlibraries to v11.1.1 (#499)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| com.mikepenz.aboutlibraries.plugin | `11.1.0` -> `11.1.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.mikepenz.aboutlibraries.plugin/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.mikepenz.aboutlibraries.plugin/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.mikepenz.aboutlibraries.plugin/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.mikepenz.aboutlibraries.plugin/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
|
[com.mikepenz:aboutlibraries-compose-m3](https://togithub.com/mikepenz/AboutLibraries)
| `11.1.0` -> `11.1.1` |
[![age](https://developer.mend.io/api/mc/badges/age/maven/com.mikepenz:aboutlibraries-compose-m3/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/com.mikepenz:aboutlibraries-compose-m3/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/com.mikepenz:aboutlibraries-compose-m3/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/com.mikepenz:aboutlibraries-compose-m3/11.1.0/11.1.1?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>mikepenz/AboutLibraries
(com.mikepenz:aboutlibraries-compose-m3)</summary>

###
[`v11.1.1`](https://togithub.com/mikepenz/AboutLibraries/releases/tag/v11.1.1)

##### 🚀 Features

-   Library Serializer
- PR:
[#&#8203;963](https://togithub.com/mikepenz/AboutLibraries/issues/963)
    -   Thanks [@&#8203;DatL4g](https://togithub.com/DatL4g)
-   Update major dependencies | Compose 1.6.4 | Compose-MP 1.6.1
- PR:
[#&#8203;968](https://togithub.com/mikepenz/AboutLibraries/issues/968)

##### 🐛 Fixes

- Set onclick listener of SimpleLibraryItem to null if no license is
known
- PR:
[#&#8203;966](https://togithub.com/mikepenz/AboutLibraries/issues/966)
    -   Thanks [@&#8203;alexbakker](https://togithub.com/alexbakker)
-   Sort a copy of the list of libraries to prevent a crash
- PR:
[#&#8203;967](https://togithub.com/mikepenz/AboutLibraries/issues/967)
    -   Thanks [@&#8203;alexbakker](https://togithub.com/alexbakker)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about these
updates again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yNjEuMCIsInVwZGF0ZWRJblZlciI6IjM3LjI2MS4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-23 16:40:19 +00:00
renovate[bot]andGitHub 6b67819007 chore(deps): update mobsf/mobsfscan digest to 35b2016 2024-03-23 00:34:18 +00:00
Harsh Shandilya 83af44b0e6 Merge remote-tracking branches 'origin/renovate/agp' and 'origin/renovate/gradle-8.x'
* origin/renovate/agp:
  chore(deps): update agp to v8.5.0-alpha02

* origin/renovate/gradle-8.x:
  chore(deps): update dependency gradle to v8.7
2024-03-23 00:42:53 +05:30
renovate[bot]andGitHub bec12d8e09 chore(deps): update dependency gradle to v8.7 2024-03-22 18:18:14 +00:00
renovate[bot]andGitHub b34fc8c721 chore(deps): update agp to v8.5.0-alpha02 2024-03-22 18:10:16 +00:00
renovate[bot]andGitHub dc51fa7802 chore(deps): update github/codeql-action action to v3.24.9 2024-03-22 11:49:49 +00:00
renovate[bot]andGitHub 42a667462f fix(deps): update dependency dev.chrisbanes.compose:compose-bom to v2024.03.00-alpha02 2024-03-20 22:24:53 +00:00
renovate[bot]andGitHub c76661762f chore(deps): update actions/dependency-review-action digest to 0fa40c3 2024-03-20 20:39:57 +00:00
Harsh Shandilya 9dab223da8 fix(deps): update agp to 8.5.0-alpha01 2024-03-21 01:57:58 +05:30
Harsh Shandilya 1ef6b2bf91 chore: minor formatting tweak 2024-03-21 01:29:44 +05:30
Harsh Shandilya f2f3319ac4 fix(deps): update AndroidX dependencies 2024-03-21 01:21:39 +05:30
Harsh Shandilya 7fd9cef051 chore: fix link to IzzyOnDroid badge 2024-03-20 23:21:26 +05:30
Harsh Shandilya 4d4cccbba9 chore(readme): add IzzyOnDroid badge 2024-03-19 22:41:25 +05:30
GitHub Actions aff0e366fe feat(release): start next development iteration 2024-03-19 12:57:11 +00:00
GitHub Actions f00f185f6d feat(release): bump version 2024-03-19 12:54:12 +00:00
Harsh Shandilya a08ffb903c chore: bump changelog 2024-03-19 18:20:40 +05:30
Harsh Shandilya 4eaf25e189 fix(database/core): fix upgrade path for ReadPosts table
Fixes COMPOSE-LOBSTERS-2S
2024-03-19 17:59:35 +05:30
renovate[bot]andGitHub 109176768c chore(deps): update agp to v8.3.1 2024-03-18 21:22:57 +00:00
Harsh Shandilya cf0ef021d8 fix(deps): update retrofit to 2.10.0 2024-03-19 02:48:42 +05:30
renovate[bot]andGitHub 59ba98174c chore(deps): update github/codeql-action action to v3.24.8 2024-03-18 17:32:16 +00:00
GitHub Actions afe78aa82f feat(release): start next development iteration 2024-03-17 08:24:44 +00:00
GitHub Actions 0a70924cab feat(release): bump version 2024-03-17 08:22:24 +00:00
renovate[bot]andGitHub ae362c2e03 fix(deps): update dependency com.michael-bull.kotlin-result:kotlin-result-coroutines to v2 2024-03-17 00:39:13 +00:00
renovate[bot]andGitHub 83ca0e6167 fix(deps): update dependency com.michael-bull.kotlin-result:kotlin-result-coroutines to v1.1.21 2024-03-16 21:46:14 +00:00
Harsh Shandilya 71977c5b2c refactor(android): move UIPost rewrite into PagingSource 2024-03-16 23:45:56 +05:30
Harsh Shandilya 047d6badb0 fix(core): do not capture failed network requests for Sentry
Fixes COMPOSE-LOBSTERS-2Q
2024-03-16 22:19:39 +05:30
Harsh Shandilya 5c0b5bb4f7 fix(widget): open comments screen directly for lobsters-native posts
Fixes COMPOSE-LOBSTERS-2P
2024-03-16 18:01:30 +05:30
renovate[bot]andGitHub 7762733da2 chore(deps): update msfjarvis/keep-a-changelog-new-release action to v2.1.1 2024-03-16 09:54:32 +00:00
GitHub Actions 9f705ca02a feat(release): start next development iteration 2024-03-16 06:06:39 +00:00
GitHub Actions 6c5b54587e feat(release): bump version 2024-03-16 06:04:08 +00:00
Harsh Shandilya e318ea3a35 fix(ci): drop release snapshots 2024-03-16 11:28:04 +05:30
Harsh Shandilya 5ba0c9a544 refactor(build): always enable Sentry and set environment
Thx Static-Var my beloved
2024-03-16 10:14:57 +05:30
Harsh Shandilya 85fc5cac21 fix: adjust for new API changes 2024-03-16 09:48:08 +05:30
Harsh Shandilya 86a40d2e84 fix(deps): upgrade dev.msfjarvis.whetstone to 0.9.0-beta01 2024-03-15 13:21:02 +05:30
renovate[bot]andGitHub 557407347b chore(deps): update plugin anvil to v2.5.0-beta04 2024-03-14 23:08:38 +00:00
renovate[bot]andGitHub b0467aa36c chore(deps): update actions/setup-java action to v4.2.1 2024-03-14 17:04:59 +00:00
renovate[bot]andGitHub d29b4e2ee2 chore(deps): update actions/setup-java action to v4.2.0 2024-03-13 14:30:50 +00:00
renovate[bot]andGitHub 64fb1235d5 chore(deps): update github/codeql-action action to v3.24.7 2024-03-12 19:00:05 +00:00
Harsh Shandilya d46993aaf6 fix(deps): bump Compose Compiler to 1.5.11-dev-k1.9.23-96ef9dc6af1 2024-03-12 18:59:05 +05:30
renovate[bot]andGitHub 310db93ff0 chore(deps): update kotlin and compose 2024-03-12 13:27:21 +00:00
Harsh Shandilya f07a5682a1 Revert "fix(renovate): temporarily disable Kotlin group"
This reverts commit f54d790da4.
2024-03-12 18:56:23 +05:30
Harsh Shandilya bcde4b9719 fix(ci): build internal flavor for CodeQL 2024-03-11 07:46:01 +05:30
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
e2e2f4f574 chore(deps): update mindsers/changelog-reader-action action to v2.2.3 (#482)
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[mindsers/changelog-reader-action](https://togithub.com/mindsers/changelog-reader-action)
| action | patch | `v2.2.2` -> `v2.2.3` |

---

### Release Notes

<details>
<summary>mindsers/changelog-reader-action
(mindsers/changelog-reader-action)</summary>

###
[`v2.2.3`](https://togithub.com/mindsers/changelog-reader-action/releases/tag/v2.2.3)

[Compare
Source](https://togithub.com/mindsers/changelog-reader-action/compare/v2.2.2...v2.2.3)

##### Fixed

-   Upgrade dependencies to solve deprecation issues.
-   Use node v20
-   Remove useless empty line between links in the body of a version

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/msfjarvis/compose-lobsters).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4yMzAuMCIsInVwZGF0ZWRJblZlciI6IjM3LjIzMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2024-03-11 00:47:49 +00:00
Harsh Shandilya a42139ae1e fix(ci): upload Sentry mappings from Tramline releases 2024-03-08 22:57:41 +05:30
Harsh Shandilya 5d0e56f115 fix(build): catch up on SentryExtension changes 2024-03-08 22:57:41 +05:30
renovate[bot]andGitHub fa31e300e9 fix(deps): update sentry to v7.6.0 2024-03-08 14:31:16 +00:00
Harsh Shandilya f54d790da4 fix(renovate): temporarily disable Kotlin group 2024-03-08 17:22:02 +05:30
GitHub Actions 96c8a0450e feat(release): start next development iteration 2024-03-07 19:47:35 +00:00
207 changed files with 2838 additions and 1835 deletions
+2 -2
View File
@@ -1,5 +1,5 @@
* text=auto eol=lf
**/dependencies/** linguist-generated
**/clawicons/** linguist-generated
**/*.html linguist-vendored
android/src/main/baseline-prof.txt linguist-generated -diff
android/src/main/generated/** linguist-generated -diff
**/screenshotTest/**/*.png filter=lfs diff=lfs merge=lfs -text
Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 KiB

After

Width:  |  Height:  |  Size: 319 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 KiB

After

Width:  |  Height:  |  Size: 315 KiB

+26 -25
View File
@@ -1,12 +1,17 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:base",
"config:recommended",
":dependencyDashboard",
"helpers:pinGitHubActionDigests",
"github>msfjarvis/shared-workflows//renovate/automerge"
],
"branchConcurrentLimit": 15,
"github-actions": {
"fileMatch": [
".github/reusable-workflows/.+\\.ya?ml$",
],
},
"packageRules": [
{
matchDatasources: [
@@ -20,43 +25,50 @@
],
},
{
"matchPackageNames": [
"androidx.compose.compiler:compiler",
"matchDepNames": [
"com.google.devtools.ksp",
"dev.drewhamilton.poko",
"org.jetbrains.kotlin:kotlin-gradle-plugin",
"org.jetbrains.kotlin.plugin.compose",
"org.jetbrains.kotlin.plugin.serialization",
],
"groupName": "Kotlin and Compose",
},
{
"matchPackagePatterns": [
"^androidx.*",
"matchPackageNames": [
"/^androidx.*/",
],
"groupName": "AndroidX"
},
{
"matchPackagePatterns": [
"^io.sentry",
"^sentry",
"matchPackageNames": [
"/^io.sentry/",
"/^sentry/",
],
"groupName": "Sentry"
},
{
"matchPackagePatterns": [
"^com.squareup.anvil"
"matchPackageNames": [
"/^com.squareup.anvil/"
],
"allowedVersions": "!/.*-1-8$/",
},
{
"matchPackagePatterns": [
"^androidx.glance",
"matchPackageNames": [
"/^androidx.glance/",
],
"allowedVersions": "<=1.0.0",
},
],
"regexManagers": [
{
"matchPackageNames": [
"/.*aboutlibraries.*/",
],
"allowedVersions": "<11.3.0",
},
],
"customManagers": [
{
"customType": "regex",
"fileMatch": [
"SpotlessPlugin\.kt$"
],
@@ -67,16 +79,5 @@
"depNameTemplate": "com.facebook:ktfmt",
"registryUrlTemplate": "https://repo1.maven.org/maven2/",
},
{
"fileMatch": [
"gradle/libs.versions.toml"
],
"matchStrings": [
"composeCompiler = \"(?<currentValue>.*)\""
],
"datasourceTemplate": "maven",
"depNameTemplate": "androidx.compose.compiler:compiler",
"registryUrlTemplate": "https://maven.google.com",
},
],
}
@@ -0,0 +1,47 @@
name: 'Setup Gradle'
description: 'Checks out the repository and sets up Java and Gradle'
inputs:
token:
description: 'token input for actions/checkout'
required: false
default: ${{ github.token }}
fetch-depth:
description: 'fetch-depth input for actions/checkout'
required: false
default: 1
cache-read-only:
description: 'cache-read-only input for gradle/actions/setup-gradle'
required: false
default: ${{ github.event.repository != null && github.ref_name != github.event.repository.default_branch }}
dependency-graph:
description: 'dependency-graph input for gradle/actions/setup-gradle'
required: false
default: 'disabled'
persist-credentials:
description: 'Control the actions/checkout persist-credentials setting'
required: false
default: false
runs:
using: "composite"
steps:
- name: Checkout repository
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: ${{ inputs.fetch-depth }}
token: ${{ inputs.token }}
lfs: true
persist-credentials: ${{ inputs.persist-credentials }}
- name: Set up JDK
uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0
with:
distribution: temurin
java-version: 23
- name: Setup Gradle
uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4
with:
add-job-summary: always
cache-read-only: ${{ inputs.cache-read-only }}
dependency-graph: ${{ inputs.dependency-graph }}
validate-wrappers: true
+11 -56
View File
@@ -18,37 +18,27 @@ jobs:
check:
runs-on: macos-14
steps:
- name: Checkout repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Setup build environment
uses: msfjarvis/compose-lobsters/.github/reusable-workflows/setup-gradle@main
with:
fetch-depth: 0
- name: Set up JDK
uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0
with:
distribution: temurin
java-version: 18
- name: Setup Gradle
uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3
with:
cache-read-only: ${{ github.ref != 'refs/heads/main' }}
gradle-home-cache-cleanup: true
add-job-summary: always
dependency-graph: generate-and-submit
- name: Check changelog format
uses: mindsers/changelog-reader-action@b97ce03a10d9bdbb07beb491c76a5a01d78cd3ef # v2.2.2
uses: mindsers/changelog-reader-action@32aa5b4c155d76c94e4ec883a223c947b2f02656 # v2.2.3
with:
path: ./CHANGELOG.md
validation_level: error
- name: Run unit tests
run: ./gradlew --no-configuration-cache --stacktrace check -PslimTests
run: ./gradlew --no-configuration-cache --stacktrace :build-logic:check check -PslimTests
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: (Fail-only) Upload test report
if: failure()
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
with:
name: Test report
path: '**/build/reports/tests/**'
@@ -60,47 +50,12 @@ jobs:
- check
steps:
- name: Checkout repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
persist-credentials: false
- name: Dependency Review
uses: actions/dependency-review-action@9129d7d40b8c12c1ed0f60400d00c92d437adcce # v4
uses: actions/dependency-review-action@3b139cfc5fae8b618d3eae3675e383bb1769c019 # v4
with:
base-ref: refs/heads/main
head-ref: ${{ github.ref }}
deploy-release-snapshot:
runs-on: macos-14
if: "github.event_name == 'push' && github.event.ref == 'refs/heads/main'"
needs:
- check
steps:
- name: Checkout repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Set up JDK
uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0
with:
distribution: temurin
java-version: 18
- name: Setup Gradle
uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3
with:
cache-read-only: ${{ github.ref != 'refs/heads/main' }}
gradle-home-cache-cleanup: true
add-job-summary: always
dependency-graph: generate-and-submit
- name: Build release APK
run: |
./scripts/setup-age.sh
./scripts/signing-setup.sh "$AGE_SECRET_KEY"
./gradlew --no-configuration-cache --stacktrace collectReleaseApks
./scripts/signing-cleanup.sh
./scripts/deploy-snapshot.sh
env:
AGE_SECRET_KEY: ${{ secrets.AGE_SECRET_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
@@ -1,75 +0,0 @@
name: Code quality analysis
on:
push:
branches:
- main
- renovate/**
schedule:
- cron: '31 7 * * 3'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
security-events: write
jobs:
codeql:
name: CodeQL
runs-on: macos-14
steps:
- name: Checkout repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Set up JDK
uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0
with:
distribution: temurin
java-version: 18
- name: Setup Gradle
uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3
with:
cache-read-only: true
- name: Initialize CodeQL
uses: github/codeql-action/init@8a470fddafa5cbb6266ee11b37ef4d8aae19c571 # v3.24.6
with:
languages: java
tools: latest
queries: +security-extended
- name: Build project
shell: bash
run: |
./gradlew assembleDebug assembleRelease
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@8a470fddafa5cbb6266ee11b37ef4d8aae19c571 # v3.24.6
with:
category: "/language:java"
mobsfscan:
name: MobSF
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Setup python
uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5
with:
python-version: 3.8
- name: Run mobsfscan
uses: MobSF/mobsfscan@e29e85c36fa1aa950d7f1b1064345d94a70b2a28
with:
args: . --sarif --output results.sarif || true
- name: Upload mobsfscan report
uses: github/codeql-action/upload-sarif@8a470fddafa5cbb6266ee11b37ef4d8aae19c571 # v3.24.6
with:
sarif_file: results.sarif
+8 -18
View File
@@ -5,7 +5,7 @@ on:
inAppUpdatePriority:
description: 'In app update priority (0-5)'
type: number
default: "0"
default: 0
required: false
concurrency:
@@ -15,23 +15,13 @@ jobs:
publish-google-play-release:
runs-on: macos-14
steps:
- name: Checkout repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Setup build environment
uses: msfjarvis/compose-lobsters/.github/reusable-workflows/setup-gradle@main
with:
token: ${{ secrets.POST_RELEASE_GH_TOKEN }}
fetch-depth: 0
- name: Set up JDK
uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0
with:
distribution: temurin
java-version: 18
- name: Setup Gradle
uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3
with:
cache-read-only: ${{ github.ref != 'refs/heads/main' }}
gradle-home-cache-cleanup: true
persist-credentials: true
- name: Set up Git author
shell: bash
@@ -54,7 +44,7 @@ jobs:
echo VERSION="${VERSION}" >> $GITHUB_ENV
- name: Update changelog
uses: msfjarvis/keep-a-changelog-new-release@bf43ae42f4e42f137572950af426efcf6e777207 # 2.1.0
uses: msfjarvis/keep-a-changelog-new-release@e60399f488b25149c0963a4e22fff928a9277ce7 # v2.2.0
with:
tag: v${{ env.VERSION }}
version: ${{ env.VERSION }}
@@ -69,15 +59,16 @@ jobs:
env:
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
./gradlew --no-configuration-cache collectReleaseApks collectReleaseBundle -PsentryUploadMappings
./gradlew --no-configuration-cache assembleRelease collectReleaseApks collectReleaseBundle -PenableSentry
- name: Clean secrets
run: scripts/signing-cleanup.sh
- name: Get changelog entry
id: changelog_reader
uses: mindsers/changelog-reader-action@b97ce03a10d9bdbb07beb491c76a5a01d78cd3ef # v2.2.2
uses: mindsers/changelog-reader-action@32aa5b4c155d76c94e4ec883a223c947b2f02656 # v2.2.3
with:
version: ${{ env.VERSION }}
path: ./CHANGELOG.md
@@ -118,6 +109,5 @@ jobs:
# Start the next development iteration
./gradlew -q --no-configuration-cache bumpSnapshot
truncate -s 0 distribution/whatsnew/whatsnew-en-GB # Clear changelog
git commit -am 'feat(release): start next development iteration'
git push -u origin
+5 -14
View File
@@ -16,35 +16,26 @@ jobs:
signed-build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Set up JDK
uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0
with:
distribution: temurin
java-version: 18
- name: Setup Gradle
uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 # v3
- name: Setup build environment
uses: msfjarvis/compose-lobsters/.github/reusable-workflows/setup-gradle@main
with:
cache-read-only: true
gradle-home-cache-cleanup: true
- name: Build release app
run: |
./scripts/setup-age.sh
./scripts/signing-setup.sh "$AGE_SECRET_KEY"
./gradlew --no-configuration-cache --stacktrace collectReleaseBundle
./gradlew --no-configuration-cache --stacktrace assembleRelease collectReleaseBundle -PenableSentry
./scripts/signing-cleanup.sh
env:
AGE_SECRET_KEY: ${{ secrets.AGE_SECRET_KEY }}
SENTRY_DSN: ${{ secrets.SENTRY_DSN }}
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
ORG_GRADLE_PROJECT_VERSION_NAME: ${{ github.event.inputs.versionName }}
ORG_GRADLE_PROJECT_VERSION_CODE: ${{ github.event.inputs.versionCode }}
- name: Upload app bundle
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
with:
name: release-aab
path: android/build/outputs/bundle/release/android-release.aab
+1
View File
@@ -247,3 +247,4 @@ keystore.properties
distribution/
screenshots/
claw-export.json
.kotlin/
+1
View File
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="KtfmtSettings">
<option name="enableKtfmt" value="Enabled" />
<option name="enabled" value="true" />
<option name="uiFormatterStyle" value="Google (internal)" />
</component>
+269 -163
View File
@@ -7,443 +7,549 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
## [1.54.0] - 2025-01-31
### Fixed
- Upgrade to Compose 2025-01 releases
- Upgrade all dependencies
## [1.53.0] - 2024-11-30
### Fixed
- Tablet users can now navigate between hottest/newest/saved posts again
## [1.52.0] - 2024-11-26
### Added
- A brand new tablet-specific UI — Thanks [@ThanaReka](https://github.com/@ThanaReka)
- Usernames of story authors are highlighted in comments
### Fixed
- Add a workaround for rare crashes while loading SQLite with older devices
- Fix comments page resetting collapsed state while scrolling
- Images are cached for longer on disk
- Navigation bar now renders a solid background on API levels 31 and below
## [1.51.0] - 2024-09-22
### Fixed
- Pull to refresh indicator is no longer hiding behind the top app bar
- User profile page correctly renders contents below the top app bar
- Revert unread comment handling changes that caused false positives
## [1.50.0] - 2024-08-30
### Fixed
- Search bar draws under the status bar when hiding keyboard
- Bottom of the comments page is cut off by the navigation bar
- Rare crash in comments page
## [1.49.0] - 2024-08-29
### Added
- Opening posts you have previously seen will show the number of new comments since last visit
### Fixed
- Saving posts no longer triggers a page refresh that invalidates scroll position
### Changed
- Change submitter text to 'authored' when applicable
- Unread comments now have a brighter background rather than a text badge
- Bottom navigation bar has been redesigned
## [1.48.0] - 2024-06-05
### Added
- Swiping a post from left to right now offers a share action
### Fixed
- Try to workaround an infrequent crash when scrolling hottest/newest posts
### Changed
- Upgrade to Kotlin 2.0.0
- Upgrade to Compose May beta releases
## [1.47.0] - 2024-05-14
### Changed
- Bring back dividers between posts (I regret my earlier choices)
- Upgrade to Compose May stable releases
### Fixed
- Navigating to user profiles now works when invoked from the search
results page
- Fix occasional crashes due to the app incorrectly trying to open
multiple database connections
## [1.46.0] - 2024-04-24
### Changed
- Remove dividers between posts
- Post titles in lists are now truncated to be a single line
### Fixed
- Disable logging of network errors to Sentry
- Add potential workaround for navigation-related crashes
## [1.45.0] - 2024-04-24
### Changed
- Upgrade to Compose April releases
- Story items are now more compact so you can see more items
on your screen.
### Fixed
- Fixed a crash when clicking an item on the bottom navigation bar
too quickly
- Removed buggy deeplinks
- Clicking a username now correctly navigates to the right page in-app
## [1.44.0] - 2024-03-19
### Fixed
- Fixed a bug in the database code that was triggering crashes for
a subset of upgrading users
## [1.43.0] - 2024-03-17
### Fixed
- Fix crash when trying to open a comments-only post from
the home screen widget
## [1.42.0] - 2024-03-16
### Fixed
- Adapt to changes in lobste.rs API
## [1.41.0] - 2024-03-07
### Fixed
* Downgrade dependency that was pulling in extraneous storage
permissions which the app does not require.
- Downgrade dependency that was pulling in extraneous storage
permissions which the app does not require.
## [1.40.0] - 2024-03-07
### Changed
* Update to Compose March releases
* Improve performance of frequently invoked database queries
* Refactor UI data model to improve state handling
* Make saved posts update in the background more often
* Consolidate widget display logic
* Rework some theming logic to align with new Material guidelines
- Update to Compose March releases
- Improve performance of frequently invoked database queries
- Refactor UI data model to improve state handling
- Make saved posts update in the background more often
- Consolidate widget display logic
- Rework some theming logic to align with new Material guidelines
## [1.39.0] - 2024-01-23
### Changed
* Add HTML bookmarks as an export format
* Rework widget item layout for consistent touch targets
* Add attribution for libraries used in the app
* Redesign settings screen
* Update to Compose December releases
- Add HTML bookmarks as an export format
- Rework widget item layout for consistent touch targets
- Add attribution for libraries used in the app
- Redesign settings screen
- Update to Compose December releases
## [1.38.0] - 2023-11-20
### Changed
* Add brand new icon by dzuk
* Fix a bug that caused the app to fetch the same 20 posts over and over
* Significantly improve scrolling performance when there are a lot of saved posts
* Move search feature to its own screen
* Make top app and bottom system bars use the same color
* Reduce unnecessary API calls in search screen
* Upgrade to Compose November releases
* Enable logging of SQLite queries
- Add brand new icon by dzuk
- Fix a bug that caused the app to fetch the same 20 posts over and over
- Significantly improve scrolling performance when there are a lot of saved posts
- Move search feature to its own screen
- Make top app and bottom system bars use the same color
- Reduce unnecessary API calls in search screen
- Upgrade to Compose November releases
- Enable logging of SQLite queries
## [1.37.0] - 2023-10-06
### Changed
* Fixed a crash that infrequently happened in the comments page
* Fixed a crash when trying to list saved posts
* Fixed a crash in home screen widget when user had less than 50 saved posts
* Upgraded to Compose 1.6.0-alpha07
- Fixed a crash that infrequently happened in the comments page
- Fixed a crash when trying to list saved posts
- Fixed a crash in home screen widget when user had less than 50 saved posts
- Upgraded to Compose 1.6.0-alpha07
## [1.36.0] - 2023-10-04
### Added
* Introduce an initial attempt at a home screen widget
- Introduce an initial attempt at a home screen widget
### Changed
* Fixed a crash triggered when swiping items
* Adjusted pull to refresh component to match Material You theme
- Fixed a crash triggered when swiping items
- Adjusted pull to refresh component to match Material You theme
## [1.35.0] - 2023-09-19
### Changed
* Fixed missing vertical spacing between post tags
* Fixed user profile links not displaying correctly in-app
* Update to Compose October release
- Fixed missing vertical spacing between post tags
- Fixed user profile links not displaying correctly in-app
- Update to Compose October release
## [1.34.0] - 2023-08-30
### Added
* Add a swipe action on each story to open the comments page on `lobste.rs`
* Automatically mark posts as "read" and visually distinguish between them
- Add a swipe action on each story to open the comments page on `lobste.rs`
- Automatically mark posts as "read" and visually distinguish between them
### Changed
* Tweak list items to reduce vertical size and adjust colors
* Drop bogus workarounds for native library crashes
* Updated Jetpack Compose and SQLite
- Tweak list items to reduce vertical size and adjust colors
- Drop bogus workarounds for native library crashes
- Updated Jetpack Compose and SQLite
### Fixed
* Rework how comments are displayed to adapt to lobste.rs API change
- Rework how comments are displayed to adapt to lobste.rs API change
## [1.33.0] - 2023-07-31
### Changed
* Yet another attempt at fixing native library crashes
* Rework how baseline profiles are generated
- Yet another attempt at fixing native library crashes
- Rework how baseline profiles are generated
## [1.32.0] - 2023-07-27
### Changed
* Upgrade to AndroidX July 26 release
* Revert selectable text feature due to sporadic crashes
- Upgrade to AndroidX July 26 release
- Revert selectable text feature due to sporadic crashes
## [1.31.0] - 2023-07-25
### Added
* Added the ability to search for posts
* Text in the comments page is now selectable
- Added the ability to search for posts
- Text in the comments page is now selectable
### Changed
* Upgrade to Compose July release
* Upgrade to Kotlin 1.9.0
- Upgrade to Compose July release
- Upgrade to Kotlin 1.9.0
## [1.30.0] - 2023-07-02
### Changed
* Added another workaround for native library loading crash
- Added another workaround for native library loading crash
## [1.29.0] - 2023-06-08
### Added
* Backup and restore options for saved posts
- Backup and restore options for saved posts
### Fixed
* Spamming the comments button no longer causes it to be opened multiple times
* Saved posts screen now has a visual indication when you have nothing saved
* Iconography has been updated across the board to be more consistent
- Spamming the comments button no longer causes it to be opened multiple times
- Saved posts screen now has a visual indication when you have nothing saved
- Iconography has been updated across the board to be more consistent
## [1.28.0] - 2023-06-03
### Changed
* Navigation transitions have been slightly sped up
- Navigation transitions have been slightly sped up
### Fixed
* Add workaround for a native library loading crash observed on some devices
- Add workaround for a native library loading crash observed on some devices
## [1.27.0] - 2023-05-31
### Changed
* Small accessibility improvements
* Slightly tweak the layout for story items to take less vertical space
* Upgrade to Compose `1.5.0-beta01` release
* Set accessibility web URI for profile screen
* Directly use Material Icons from upstream artifacts
* Upgrade dependencies
* Add adaptive navigation support (thanks @Yash-Garg)
* Use latest SQLite for backing databases
- Small accessibility improvements
- Slightly tweak the layout for story items to take less vertical space
- Upgrade to Compose `1.5.0-beta01` release
- Set accessibility web URI for profile screen
- Directly use Material Icons from upstream artifacts
- Upgrade dependencies
- Add adaptive navigation support (thanks @Yash-Garg)
- Use latest SQLite for backing databases
## [1.26.0] - 2023-05-03
### Changed
* Upgrade to Compose May release
* Disable Sentry performance reporting
* Migrate to Compose Foundation `FlowRow` in `LobstersCard`
- Upgrade to Compose May release
- Disable Sentry performance reporting
- Migrate to Compose Foundation `FlowRow` in `LobstersCard`
## [1.25.0] - 2023-04-18
### Changed
* Make the app draw edge to edge
* Simplify Top App Bar color scheme
* Rework how baseline profiles are generated
* Upgrade to Compose April release
- Make the app draw edge to edge
- Simplify Top App Bar color scheme
- Rework how baseline profiles are generated
- Upgrade to Compose April release
## [1.24.0] - 2023-03-24
### Changed
* Rebuild app icon assets to align better with Material guidelines
* Adopt Slack's Compose lints and address issues found by it
* Upgrade to OkHttp 4.x
* Upgrade to Compose March release
* Start work on support for logging in with lobste.rs
- Rebuild app icon assets to align better with Material guidelines
- Adopt Slack's Compose lints and address issues found by it
- Upgrade to OkHttp 4.x
- Upgrade to Compose March release
- Start work on support for logging in with lobste.rs
## [1.23.0] - 2023-03-02
### Added
* Introduce [Sentry](https://sentry.io) for error reporting and performance monitoring
- Introduce [Sentry](https://sentry.io) for error reporting and performance monitoring
## [1.22.0] - 2023-03-02
### Changed
* In-app browser now respects the user's choice for dark mode
* Upgrade dependencies
- In-app browser now respects the user's choice for dark mode
- Upgrade dependencies
## [1.21.0] - 2023-02-09
### Changed
* Fix bug that caused the app to crash on launch
- Fix bug that caused the app to crash on launch
## [1.20.0] - 2023-02-09
### Changed
* Upgrade dependencies
- Upgrade dependencies
## [1.19.0] - 2023-02-01
### Changed
* Upgrade dependencies
* Optimize packaged baseline profiles
- Upgrade dependencies
- Optimize packaged baseline profiles
## [1.18.0] - 2023-01-21
### Changed
* Special-case deleted stories in comments API
* Fix regression where save button had the incorrect visual state
- Special-case deleted stories in comments API
- Fix regression where save button had the incorrect visual state
## [1.17.0] - 2023-01-12
### Added
* The app will now mark new comments as unread when returning to posts
- The app will now mark new comments as unread when returning to posts
### Changed
* Upgrade to Kotlin 1.8.0
* Revert questionable app bar scrolling behaviour change
- Upgrade to Kotlin 1.8.0
- Revert questionable app bar scrolling behaviour change
## [1.16.0] - 2022-12-24
### Changed
* Fix bug where newest posts tab actually showed hottest posts instead
- Fix bug where newest posts tab actually showed hottest posts instead
## [1.15.0] - 2022-12-20
### Changed
* Fix a case where collapsing the parent of an already collapsed comment caused it to become expanded
* Tweak progress bar UI to use a linear indicator
* Allow app bar to hide when scrolling down
* Fix bug where refreshing a list of posts caused it to jump around multiple times
- Fix a case where collapsing the parent of an already collapsed comment caused it to become expanded
- Tweak progress bar UI to use a linear indicator
- Allow app bar to hide when scrolling down
- Fix bug where refreshing a list of posts caused it to jump around multiple times
## [1.14.0] - 2022-12-12
### Changed
* Rework how often saved posts are updated
* Collapsing a comment now collapses all comments under it similar to how it works on the website
- Rework how often saved posts are updated
- Collapsing a comment now collapses all comments under it similar to how it works on the website
## [1.13.0] - 2022-12-10
### Changed
* Fix crash when viewing [jcs](https://lobste.rs/u/jcs)' comments
- Fix crash when viewing [jcs](https://lobste.rs/u/jcs)' comments
## [1.12.0] - 2022-12-09
### Changed
* Do not schedule post update job every time the app starts
* Improve favicon loading to reduce unnecessary redraws
* Fix post lists being reloaded unnecessarily
- Do not schedule post update job every time the app starts
- Improve favicon loading to reduce unnecessary redraws
- Fix post lists being reloaded unnecessarily
## [1.11.0] - 2022-12-07
### Changed
* Upgrade to Compose 2022.12.00 release
* Refresh packaged baseline profile
* Improve how saved state of posts is queried
- Upgrade to Compose 2022.12.00 release
- Refresh packaged baseline profile
- Improve how saved state of posts is queried
## [1.10.0] - 2022-11-30
### Changed
* Configure Coil image loader with better caching settings
* Refresh packaged baseline profile
- Configure Coil image loader with better caching settings
- Refresh packaged baseline profile
## [1.9.0] - 2022-11-28
### Changed
* A loading indicator is added to the bottom of the post list to identify when new posts are being fetched
- A loading indicator is added to the bottom of the post list to identify when new posts are being fetched
## [1.8.0] - 2022-11-21
### Changed
* The release pipeline now automatically generates Play Store release notes from the changelog file
- The release pipeline now automatically generates Play Store release notes from the changelog file
### Fixed
* Downgrade AGP to 8.0.0-alpha07 to fix Baseline Profiles not being packaged
- Downgrade AGP to 8.0.0-alpha07 to fix Baseline Profiles not being packaged
## [1.7.0] - 2022-11-19
### Changed
* Switch to Compose Material's swipe refresh feature
* Change metadata extractor logic to no longer prefer canonical URLs. The submitted URL will be retained as-is now.
* Remove navigation transition animations
- Switch to Compose Material's swipe refresh feature
- Change metadata extractor logic to no longer prefer canonical URLs. The submitted URL will be retained as-is now.
- Remove navigation transition animations
## [1.6.0] - 2022-11-14
### Changed
* Migrate dependency injection from Hilt to Anvil + Whetstone
- Migrate dependency injection from Hilt to Anvil + Whetstone
## [1.5.0] - 2022-11-10
### Changed
* Upgrade to Compose 2022.11.00 release
- Upgrade to Compose 2022.11.00 release
## [1.4.0] - 2022-11-02
### Changed
* Misc fixes to link metadata extractor
- Misc fixes to link metadata extractor
## [1.3.0] - 2022-10-24
### Changed
* Prevent errors during link metadata retrieval from crashing the app
* Update Jetpack libraries to 2022-10-24 release
- Prevent errors during link metadata retrieval from crashing the app
- Update Jetpack libraries to 2022-10-24 release
## [1.2.0] - 2022-10-17
### Changed
* Lazily load link metadata to improve comment page loading speed
* Upgrade to latest Compose release
* Refactor code to align with Twitter's public Compose guidelines
- Lazily load link metadata to improve comment page loading speed
- Upgrade to latest Compose release
- Refactor code to align with Twitter's public Compose guidelines
## [1.1.0] - 2022-09-30
### Added
* Add score and relative time to comments
- Add score and relative time to comments
### Changed
* Update Jetpack Compose
* Declare data backup and transfer rules
* Improve legibility of links in comments and user profiles
* Commonize and improve how network errors are displayed
- Update Jetpack Compose
- Declare data backup and transfer rules
- Improve legibility of links in comments and user profiles
- Commonize and improve how network errors are displayed
## [1.0.0] - 2022-09-20
* Initial Play Store release
[Unreleased]: https://github.com/msfjarvis/compose-lobsters/compare/v1.41.0...HEAD
- Initial Play Store release
[Unreleased]: https://github.com/msfjarvis/compose-lobsters/compare/v1.54.0...HEAD
[1.54.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.53.0...v1.54.0
[1.53.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.52.0...v1.53.0
[1.52.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.51.0...v1.52.0
[1.51.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.50.0...v1.51.0
[1.50.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.49.0...v1.50.0
[1.49.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.48.0...v1.49.0
[1.48.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.47.0...v1.48.0
[1.47.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.46.0...v1.47.0
[1.46.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.45.0...v1.46.0
[1.45.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.44.0...v1.45.0
[1.44.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.43.0...v1.44.0
[1.43.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.42.0...v1.43.0
[1.42.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.41.0...v1.42.0
[1.41.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.40.0...v1.41.0
[1.40.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.39.0...v1.40.0
[1.39.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.38.0...v1.39.0
[1.38.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.37.0...v1.38.0
[1.37.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.36.0...v1.37.0
[1.36.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.35.0...v1.36.0
[1.35.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.34.0...v1.35.0
[1.34.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.33.0...v1.34.0
[1.33.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.32.0...v1.33.0
[1.32.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.31.0...v1.32.0
[1.31.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.30.0...v1.31.0
[1.30.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.29.0...v1.30.0
[1.29.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.28.0...v1.29.0
[1.28.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.27.0...v1.28.0
[1.27.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.26.0...v1.27.0
[1.26.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.25.0...v1.26.0
[1.25.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.24.0...v1.25.0
[1.24.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.23.0...v1.24.0
[1.23.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.22.0...v1.23.0
[1.22.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.21.0...v1.22.0
[1.21.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.20.0...v1.21.0
[1.20.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.19.0...v1.20.0
[1.19.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.18.0...v1.19.0
[1.18.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.17.0...v1.18.0
[1.17.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.16.0...v1.17.0
[1.16.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.15.0...v1.16.0
[1.15.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.14.0...v1.15.0
[1.14.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.13.0...v1.14.0
[1.13.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.12.0...v1.13.0
[1.12.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.11.0...v1.12.0
[1.11.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.10.0...v1.11.0
[1.10.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.9.0...v1.10.0
[1.9.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.8.0...v1.9.0
[1.8.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.7.0...1.8.0
[1.7.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.6.0...v1.7.0
[1.6.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.5.0...v1.6.0
[1.5.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.4.0...v1.5.0
[1.4.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.3.0...v1.4.0
[1.3.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.2.0...v1.3.0
[1.2.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.1.0...v1.2.0
[1.1.0]: https://github.com/msfjarvis/compose-lobsters/compare/v1.0.0...v1.1.0
[1.0.0]: https://github.com/msfjarvis/compose-lobsters/compare/29c374859b17c5fcef03585b8a01c00070de9097...v1.0.0
+7 -3
View File
@@ -8,10 +8,14 @@ Unofficial Android app for read-only access to [lobste.rs](https://lobste.rs), b
height="80" />
</a>
<a href="https://android.izzysoft.de/repo/apk/dev.msfjarvis.claw.android">
<img src="./.github/izzy-badge.webp"
alt="Get it on IzzyOnDroid"
height="80" />
</a>
> [!NOTE]
> Snapshots from the development branch can be obtained [here](https://github.com/msfjarvis/compose-lobsters/releases/tag/latest).
>
> They are also published in the Google Play 'Open Testing' channel, which can be opted into via this link: [[Android]](https://play.google.com/store/apps/details?id=dev.msfjarvis.claw.android) [[Web]](https://play.google.com/apps/testing/dev.msfjarvis.claw.android)
> Daily builds are published to the Google Play 'Open Testing' channel (if there are any changes), which can be opted into via this link: [[Android]](https://play.google.com/store/apps/details?id=dev.msfjarvis.claw.android) [[Web]](https://play.google.com/apps/testing/dev.msfjarvis.claw.android)
<img src="https://github.com/msfjarvis/compose-lobsters/blob/main/.github/readme_feature_light.webp#gh-light-mode-only"
alt="A grid of screenshots from the app, in clockwise order: the main screen, the comments page, the search page and the saved posts page"
+51 -12
View File
@@ -1,12 +1,14 @@
/*
* Copyright © 2021-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/
@file:Suppress("UnstableApiUsage")
import com.android.build.api.dsl.ApplicationExtension
import dev.msfjarvis.claw.gradle.addTestDependencies
import org.jetbrains.kotlin.compose.compiler.gradle.ComposeFeatureFlag
plugins {
id("dev.msfjarvis.claw.android-application")
@@ -15,34 +17,51 @@ plugins {
id("dev.msfjarvis.claw.kotlin-kapt")
id("dev.msfjarvis.claw.sentry")
id("dev.msfjarvis.claw.versioning-plugin")
id("kotlin-parcelize")
alias(libs.plugins.aboutlibraries)
alias(libs.plugins.android.junit5)
alias(libs.plugins.anvil)
alias(libs.plugins.modulegraphassert)
alias(libs.plugins.whetstone)
alias(libs.plugins.baselineprofile)
alias(libs.plugins.licensee)
alias(libs.plugins.tracelog)
alias(libs.plugins.kotlin.composeCompiler)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.navigation.safeargs)
alias(libs.plugins.screenshot)
alias(libs.plugins.dependencyAnalysis)
}
android {
// Directly using the generated `android` accessor lights up bright red
extensions.configure<ApplicationExtension> {
namespace = "dev.msfjarvis.claw.android"
defaultConfig.applicationId = "dev.msfjarvis.claw.android"
defaultConfig.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
buildFeatures.compose = true
composeOptions {
useLiveLiterals = false
kotlinCompilerExtensionVersion = libs.versions.composeCompiler.get()
}
buildTypes.create("internal") {
matchingFallbacks += "release"
signingConfig = signingConfigs["debug"]
applicationIdSuffix = ".internal"
isDebuggable = true
}
experimentalProperties["android.experimental.enableScreenshotTest"] = true
}
aboutLibraries.gitHubApiToken = providers.environmentVariable("GITHUB_TOKEN").orNull
baselineProfile {
mergeIntoMain = true
saveInSrc = true
from(projects.benchmark.dependencyProject)
// dependencyProject is deprecated, needs new APIs in the baseline profile plugin.
@Suppress("deprecation") from(projects.benchmark.dependencyProject)
}
composeCompiler {
featureFlags.addAll(
ComposeFeatureFlag.OptimizeNonSkippingGroups,
ComposeFeatureFlag.PausableComposition,
)
}
licensee {
@@ -71,38 +90,58 @@ dependencies {
implementation(platform(libs.okhttp.bom))
implementation(libs.aboutLibraries.m3)
implementation(libs.androidx.activity.compose)
implementation(libs.androidx.compose.animation)
implementation(libs.androidx.compose.foundation)
implementation(libs.androidx.compose.glance)
implementation(libs.androidx.compose.glance.m3)
implementation(libs.androidx.compose.material.icons.extended)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.material3.window.size)
implementation(libs.androidx.compose.material3.adaptive)
implementation(libs.androidx.compose.material3.adaptive.layout)
implementation(libs.androidx.compose.material3.adaptive.navigation)
implementation(libs.androidx.compose.material3.adaptive.navigation.suite)
implementation(libs.androidx.compose.runtime)
implementation(libs.androidx.compose.ui)
implementation(libs.androidx.compose.ui.text)
implementation(libs.androidx.compose.ui.util)
implementation(libs.androidx.core.splashscreen)
implementation(libs.androidx.lifecycle.compose)
implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.paging.compose)
implementation(libs.androidx.profileinstaller)
implementation(libs.androidx.work.runtime)
implementation(libs.coil)
implementation(libs.copydown)
implementation(libs.dagger)
implementation(libs.jsoup)
implementation(libs.eithernet)
implementation(libs.haze)
implementation(libs.haze.materials)
implementation(libs.javax.inject)
implementation(libs.kotlinx.collections.immutable)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.material3.pulltorefresh)
implementation(libs.kotlinx.serialization.core)
implementation(libs.kotlinx.serialization.json)
implementation(libs.napier)
implementation(libs.okhttp.core)
implementation(libs.okhttp.loggingInterceptor)
implementation(libs.retrofit)
implementation(libs.sqldelight.extensions.coroutines)
implementation(libs.swipe)
implementation(libs.unfurl)
implementation(projects.api)
implementation(projects.common)
implementation(projects.core)
implementation(projects.database.core)
implementation(projects.database.impl)
implementation(projects.model)
implementation(projects.web)
kapt(libs.dagger.compiler)
testImplementation(libs.kotlinx.coroutines.test)
testImplementation(libs.okhttp.mockwebserver)
screenshotTestImplementation(libs.androidx.compose.ui.tooling)
addTestDependencies(project)
androidTestImplementation(libs.androidx.test.espresso.core)
androidTestImplementation(libs.androidx.test.uiautomator)
androidTestImplementation(libs.leakcanary.android.test)
}
+1 -1
View File
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<issues format="6" by="lint 8.3.0" type="baseline" client="gradle" dependencies="true" name="AGP (8.3.0)" variant="all" version="8.3.0">
<issues format="6" by="lint 8.7.1" type="baseline" client="gradle" dependencies="true" name="AGP (8.7.1)" variant="all" version="8.7.1">
<issue
id="VectorPath"
@@ -9,3 +9,16 @@
-dontwarn org.openjsse.javax.net.ssl.SSLParameters
-dontwarn org.openjsse.javax.net.ssl.SSLSocket
-dontwarn org.openjsse.net.ssl.OpenJSSE
-dontwarn androidx.window.extensions.WindowExtensions
-dontwarn androidx.window.extensions.WindowExtensionsProvider
-dontwarn androidx.window.extensions.area.ExtensionWindowAreaPresentation
-dontwarn androidx.window.extensions.layout.DisplayFeature
-dontwarn androidx.window.extensions.layout.FoldingFeature
-dontwarn androidx.window.extensions.layout.WindowLayoutComponent
-dontwarn androidx.window.extensions.layout.WindowLayoutInfo
-dontwarn androidx.window.sidecar.SidecarDeviceState
-dontwarn androidx.window.sidecar.SidecarDisplayFeature
-dontwarn androidx.window.sidecar.SidecarInterface$SidecarCallback
-dontwarn androidx.window.sidecar.SidecarInterface
-dontwarn androidx.window.sidecar.SidecarProvider
-dontwarn androidx.window.sidecar.SidecarWindowLayoutInfo
-20
View File
@@ -1,22 +1,2 @@
-dontobfuscate
-keepattributes SourceFile, LineNumberTable
# From https://github.com/square/retrofit/blob/master/retrofit/src/main/resources/META-INF/proguard/retrofit2.pro
# With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy
# and replaces all potential values with null. Explicitly keeping the interfaces prevents this.
-if interface * { @retrofit2.http.* <methods>; }
-keep,allowobfuscation interface <1>
# Keep inherited services.
-if interface * { @retrofit2.http.* <methods>; }
-keep,allowobfuscation interface * extends <1>
# With R8 full mode generic signatures are stripped for classes that are not
# kept. Suspend functions are wrapped in continuations where the type argument
# is used.
-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation
# R8 full mode strips generic signatures from return types if not kept.
-if interface * { @retrofit2.http.* public *** *(...); }
-keep,allowoptimization,allowshrinking,allowobfuscation class <3>
@@ -0,0 +1,13 @@
<!--
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
-->
<manifest
xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Performing the heap growth analysis in process requires more heap. -->
<application
android:largeHeap="true"/>
</manifest>
@@ -0,0 +1,59 @@
/*
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/
package dev.msfjarvis.claw.android
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.By
import androidx.test.uiautomator.BySelector
import androidx.test.uiautomator.UiDevice
import androidx.test.uiautomator.UiObject2
import androidx.test.uiautomator.Until
import com.google.common.truth.Truth.assertThat
import de.mannodermaus.junit5.ActivityScenarioExtension
import leakcanary.repeatingAndroidInProcessScenario
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.RegisterExtension
import shark.HeapDiff
class HeapGrowthCheck {
@JvmField
@RegisterExtension
@Suppress("Unused")
val scenarioExtension = ActivityScenarioExtension.launch<MainActivity>()
private val detector = HeapDiff.repeatingAndroidInProcessScenario()
private lateinit var device: UiDevice
@BeforeEach
fun setUp() {
val instrumentation = InstrumentationRegistry.getInstrumentation()
device = UiDevice.getInstance(instrumentation)
}
@Test
fun verify_heap_growth() {
val heapGrowth = detector.findRepeatedlyGrowingObjects { device.exploreScreens() }
assertThat(heapGrowth.growingObjects).isEmpty()
}
private companion object {
fun UiDevice.exploreScreens() {
listOf("HOTTEST", "NEWEST", "SAVED").forEach { tag ->
waitForObject(By.res(tag)).click()
waitForIdle()
}
}
private fun UiDevice.waitForObject(selector: BySelector, timeout: Long = 10_000L): UiObject2 {
if (wait(Until.hasObject(selector), timeout)) {
return findObject(selector)
}
error("Object with selector [$selector] not found")
}
}
}
+1 -1
View File
@@ -1,5 +1,5 @@
<!--
~ Copyright © 2021-2023 Harsh Shandilya.
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:10defb7f6abec5d8bd07e07625e30e5b68d3a330e87f157e8138688f8d7ef0aa
size 214795
@@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:64dd5c002c021774469d7d9a15433678a014f720b6cde2281fbbf20daee98712
size 216093
+1 -1
View File
@@ -1,5 +1,5 @@
<!--
~ Copyright © 2021-2024 Harsh Shandilya.
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
+10 -107
View File
@@ -1,5 +1,5 @@
<!--
~ Copyright © 2021-2024 Harsh Shandilya.
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
@@ -11,7 +11,6 @@
<application
android:name=".ClawApplication"
android:dataExtractionRules="@xml/data_extraction_rules"
android:enableOnBackInvokedCallback="true"
android:fullBackupContent="@xml/full_backup_content"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
@@ -32,108 +31,8 @@
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="lobste.rs" />
<data android:pathPattern="/s/......" />
<data android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="lobste.rs" />
<data android:pathPattern="/s/....../" />
<data android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="lobste.rs" />
<data android:pathPattern="/s/....../...*" />
<data android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="lobste.rs" />
<data android:pathPattern="/s/......" />
<data android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="lobste.rs" />
<data android:pathPattern="/s/....../" />
<data android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="lobste.rs" />
<data android:pathPattern="/s/....../...*" />
<data android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="lobste.rs" />
<data android:pathPattern="/s/......" />
<data android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="lobste.rs" />
<data android:pathPattern="/s/....../" />
<data android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="lobste.rs" />
<data android:pathPattern="/s/....../...*" />
<data android:scheme="https" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:host="lobste.rs" />
<data android:pathPattern="/u/......*" />
<data android:scheme="https" />
</intent-filter>
</activity>
<activity
android:name=".SearchActivity"
android:configChanges="colorMode|density|fontScale|keyboard|keyboardHidden|layoutDirection|locale|mcc|mnc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|touchscreen|uiMode"
@@ -161,6 +60,7 @@
android:value="androidx.startup"
tools:node="remove" />
</provider>
<receiver
android:name=".glance.WidgetReceiver"
android:exported="true">
@@ -171,6 +71,7 @@
android:name="android.appwidget.provider"
android:resource="@xml/saved_posts_widget_info" />
</receiver>
<!-- Required: set your sentry.io project identifier (DSN) -->
<meta-data
android:name="io.sentry.dsn"
@@ -178,17 +79,19 @@
<!-- enable automatic breadcrumbs for user interactions (clicks, swipes, scrolls) -->
<meta-data
android:name="io.sentry.traces.user-interaction.enable"
android:value="${enableSentry}" />
android:value="true" />
<meta-data
android:name="io.sentry.breadcrumbs.user-interaction"
android:value="${enableSentry}" />
android:value="true" />
<!-- enable screenshot for crashes -->
<meta-data
android:name="io.sentry.attach-screenshot"
android:value="${enableSentry}" />
android:value="true" />
<!-- enable view hierarchy for crashes -->
<meta-data
android:name="io.sentry.attach-view-hierarchy"
android:value="${enableSentry}" />
android:value="true" />
<!-- set the environment for this build -->
<meta-data android:name="io.sentry.environment" android:value="${sentryEnvironment}" />
</application>
</manifest>
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -23,8 +23,7 @@ import javax.inject.Inject
@ContributesAppInjector(generateAppComponent = true)
class ClawApplication : Application(), ApplicationComponentOwner {
override val applicationComponent by
lazy(LazyThreadSafetyMode.NONE) { GeneratedApplicationComponent.create(this) }
override val applicationComponent = GeneratedApplicationComponent.create(this)
@Inject lateinit var plugins: Set<@JvmSuppressWildcards AppPlugin>
@@ -1,17 +1,21 @@
/*
* Copyright © 2021-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/
package dev.msfjarvis.claw.android
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
import com.deliveryhero.whetstone.activity.ContributesActivityInjector
import dev.msfjarvis.claw.android.ui.screens.LobstersPostsScreen
import dev.msfjarvis.claw.android.ui.screens.TabletScreen
@ContributesActivityInjector
class MainActivity : BaseActivity() {
@@ -20,12 +24,25 @@ class MainActivity : BaseActivity() {
@Composable
override fun Content() {
val windowSizeClass = calculateWindowSizeClass(this)
LobstersPostsScreen(
urlLauncher = urlLauncher,
htmlConverter = htmlConverter,
windowSizeClass = windowSizeClass,
setWebUri = { url -> webUri = url },
)
when (windowSizeClass.widthSizeClass) {
WindowWidthSizeClass.Compact -> {
LobstersPostsScreen(
urlLauncher = urlLauncher,
htmlConverter = htmlConverter,
windowSizeClass = windowSizeClass,
setWebUri = { url -> webUri = url },
)
}
else -> {
TabletScreen(
urlLauncher = urlLauncher,
htmlConverter = htmlConverter,
modifier = Modifier.fillMaxSize(),
)
}
}
}
override fun preLaunch() {
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2023-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2023-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -43,9 +43,10 @@ fun WidgetListEntry(post: UIPost, modifier: GlanceModifier = GlanceModifier) {
val titleStyle = MaterialTheme.typography.titleMedium
val commentsAction =
actionStartActivity<MainActivity>(actionParametersOf(destinationKey to post.shortId))
// If the URL starts with a /, it's a relative URL and we should open the comments page directly.
val postAction =
if (post.url.isNotEmpty()) actionStartActivity(Intent(Intent.ACTION_VIEW, Uri.parse(post.url)))
else commentsAction
if (post.url.startsWith('/')) commentsAction
else actionStartActivity(Intent(Intent.ACTION_VIEW, Uri.parse(post.url)))
Box(modifier.padding(8.dp)) {
Row(
verticalAlignment = Alignment.CenterVertically,
@@ -1,5 +1,5 @@
/*
* Copyright © 2023-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -22,11 +22,11 @@ object MetadataExtractorModule {
fun provideUnfurlLogger(): UnfurlLogger {
return object : UnfurlLogger {
override fun log(message: String) {
Napier.d { message }
Napier.d(tag = "Unfurler") { message }
}
override fun log(e: Throwable, message: String) {
Napier.e(e) { message }
Napier.e(tag = "Unfurler", throwable = e) { message }
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -13,8 +13,11 @@ import com.slack.eithernet.ApiResult.Success
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import dev.msfjarvis.claw.android.ui.toError
import dev.msfjarvis.claw.core.injection.IODispatcher
import dev.msfjarvis.claw.model.LobstersPost
import dev.msfjarvis.claw.model.UIPost
import dev.msfjarvis.claw.model.toUIPost
import java.io.IOException
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
@@ -24,26 +27,25 @@ class LobstersPagingSource
constructor(
@Assisted private val remoteFetcher: RemoteFetcher<LobstersPost>,
@IODispatcher private val ioDispatcher: CoroutineDispatcher,
) : PagingSource<Int, LobstersPost>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, LobstersPost> {
) : PagingSource<Int, UIPost>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, UIPost> {
val page = params.key ?: STARTING_PAGE_INDEX
return when (val result = withContext(ioDispatcher) { remoteFetcher.getItemsAtPage(page) }) {
is Success ->
LoadResult.Page(
itemsBefore = (page - 1) * PAGE_SIZE,
data = result.value,
data = result.value.map(LobstersPost::toUIPost),
prevKey = if (page == STARTING_PAGE_INDEX) null else page - 1,
nextKey = page + 1,
)
is Failure.NetworkFailure -> LoadResult.Error(result.error)
is Failure.UnknownFailure -> LoadResult.Error(result.error)
is Failure.HttpFailure,
is Failure.HttpFailure -> LoadResult.Error(result.toError())
is Failure.ApiFailure -> LoadResult.Error(IOException("API returned an invalid response"))
}
}
override fun getRefreshKey(state: PagingState<Int, LobstersPost>): Int? {
override fun getRefreshKey(state: PagingState<Int, UIPost>): Int? {
return state.anchorPosition?.let { anchorPosition ->
(anchorPosition / PAGE_SIZE).coerceAtLeast(STARTING_PAGE_INDEX)
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2022 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -14,9 +14,12 @@ import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import dev.msfjarvis.claw.android.paging.LobstersPagingSource.Companion.PAGE_SIZE
import dev.msfjarvis.claw.android.paging.LobstersPagingSource.Companion.STARTING_PAGE_INDEX
import dev.msfjarvis.claw.android.ui.toError
import dev.msfjarvis.claw.api.LobstersSearchApi
import dev.msfjarvis.claw.core.injection.IODispatcher
import dev.msfjarvis.claw.model.LobstersPost
import dev.msfjarvis.claw.model.UIPost
import dev.msfjarvis.claw.model.toUIPost
import java.io.IOException
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.withContext
@@ -33,14 +36,8 @@ constructor(
private val searchApi: LobstersSearchApi,
@Assisted private val queryProvider: () -> String,
@IODispatcher private val ioDispatcher: CoroutineDispatcher,
) : PagingSource<Int, LobstersPost>() {
override fun getRefreshKey(state: PagingState<Int, LobstersPost>): Int? {
return state.anchorPosition?.let { anchorPosition ->
(anchorPosition / PAGE_SIZE).coerceAtLeast(STARTING_PAGE_INDEX)
}
}
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, LobstersPost> {
) : PagingSource<Int, UIPost>() {
override suspend fun load(params: LoadParams<Int>): LoadResult<Int, UIPost> {
val searchQuery = queryProvider()
// If there is no query, we don't need to call the API at all.
if (searchQuery.isEmpty()) {
@@ -55,19 +52,25 @@ constructor(
val nextKey = if (result.value.isEmpty()) null else page + 1
LoadResult.Page(
itemsBefore = (page - 1) * PAGE_SIZE,
data = result.value,
data = result.value.map(LobstersPost::toUIPost),
prevKey = if (page == STARTING_PAGE_INDEX) null else page - 1,
nextKey = nextKey,
)
}
is ApiResult.Failure.NetworkFailure -> LoadResult.Error(result.error)
is ApiResult.Failure.UnknownFailure -> LoadResult.Error(result.error)
is ApiResult.Failure.HttpFailure,
is ApiResult.Failure.HttpFailure -> LoadResult.Error(result.toError())
is ApiResult.Failure.ApiFailure ->
LoadResult.Error(IOException("API returned an invalid response"))
}
}
override fun getRefreshKey(state: PagingState<Int, UIPost>): Int? {
return state.anchorPosition?.let { anchorPosition ->
(anchorPosition / PAGE_SIZE).coerceAtLeast(STARTING_PAGE_INDEX)
}
}
@AssistedFactory
interface Factory {
fun create(queryProvider: () -> String): SearchPagingSource
@@ -0,0 +1,21 @@
/*
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/
package dev.msfjarvis.claw.android.plugins
import android.app.Application
import com.deliveryhero.whetstone.app.ApplicationScope
import com.squareup.anvil.annotations.ContributesMultibinding
import dev.msfjarvis.claw.core.injection.AppPlugin
import io.sentry.android.core.SentryAndroid
import javax.inject.Inject
@ContributesMultibinding(ApplicationScope::class)
class SentryAndroidPlugin @Inject constructor() : AppPlugin {
override fun apply(application: Application) {
SentryAndroid.init(application)
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -13,16 +13,29 @@ import androidx.compose.animation.core.LinearOutSlowInEasing
import androidx.compose.animation.core.tween
import androidx.compose.animation.slideInVertically
import androidx.compose.animation.slideOutVertically
import androidx.compose.foundation.layout.navigationBarsPadding
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Icon
import androidx.compose.material3.NavigationBar
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.NavigationBarItem
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import dev.msfjarvis.claw.android.ui.navigation.Destinations
import androidx.navigation.compose.currentBackStackEntryAsState
import dev.chrisbanes.haze.HazeDefaults
import dev.chrisbanes.haze.HazeState
import dev.chrisbanes.haze.HazeStyle
import dev.chrisbanes.haze.hazeEffect
import dev.msfjarvis.claw.android.ui.navigation.AppDestinations
import dev.msfjarvis.claw.android.ui.navigation.Destination
import dev.msfjarvis.claw.android.ui.navigation.matches
import dev.msfjarvis.claw.common.ui.FloatingNavigationBar
import kotlinx.collections.immutable.ImmutableList
const val AnimationDuration = 100
@@ -32,6 +45,7 @@ fun ClawNavigationBar(
navController: NavController,
items: ImmutableList<NavigationItem>,
isVisible: Boolean,
hazeState: HazeState,
modifier: Modifier = Modifier,
) {
AnimatedVisibility(
@@ -48,45 +62,79 @@ fun ClawNavigationBar(
targetOffsetY = { fullHeight -> fullHeight },
animationSpec = tween(durationMillis = AnimationDuration, easing = FastOutLinearInEasing),
),
modifier = Modifier,
) {
NavigationBar(modifier = modifier) {
items.forEach { navItem ->
val isCurrentDestination = navController.currentDestination?.route == navItem.route
NavigationBarItem(
icon = {
Crossfade(isCurrentDestination, label = "nav-label") {
Icon(
imageVector = if (it) navItem.selectedIcon else navItem.icon,
contentDescription = navItem.label.replaceFirstChar(Char::uppercase),
)
}
},
label = { Text(text = navItem.label) },
selected = isCurrentDestination,
onClick = {
if (isCurrentDestination) {
navItem.listStateResetCallback()
} else {
navController.graph.startDestinationRoute?.let { startDestination ->
navController.popBackStack(startDestination, false)
label = "",
content = {
FloatingNavigationBar(
tonalElevation = 16.dp,
shape = MaterialTheme.shapes.extraLarge,
modifier =
modifier
.padding(horizontal = 16.dp)
.navigationBarsPadding()
.clip(MaterialTheme.shapes.extraLarge)
.hazeEffect(
hazeState,
style =
HazeStyle(
backgroundColor = MaterialTheme.colorScheme.surface,
tints = emptyList(),
blurRadius = 24.dp,
noiseFactor = 0f,
),
),
containerColor =
if (HazeDefaults.blurEnabled()) Color.Transparent else MaterialTheme.colorScheme.surface,
) {
val navBackStackEntry = navController.currentBackStackEntryAsState().value
val currentDestination = navBackStackEntry?.destination
items.forEach { navItem ->
val isSelected = currentDestination.matches(navItem.destination)
NavigationBarItem(
icon = {
Crossfade(isSelected, label = "nav-label") {
Icon(
imageVector = if (it) navItem.selectedIcon else navItem.icon,
contentDescription = navItem.label.replaceFirstChar(Char::uppercase),
)
}
if (navItem.route != Destinations.startDestination.route) {
navController.navigate(navItem.route)
},
label = { Text(text = navItem.label) },
selected = isSelected,
onClick = {
if (isSelected) {
navItem.listStateResetCallback()
} else {
navController.navigate(navItem.destination) {
popUpTo(navController.graph.startDestinationId) { saveState = true }
launchSingleTop = true
restoreState = true
}
}
}
},
modifier = Modifier.testTag(navItem.label.uppercase()),
)
},
modifier = Modifier.testTag(navItem.label.uppercase()),
)
}
}
}
}
},
)
}
class NavigationItem(
val label: String,
val route: String,
class NavigationItem
private constructor(
val icon: ImageVector,
val label: String,
val destination: Destination,
val selectedIcon: ImageVector,
val listStateResetCallback: () -> Unit,
)
) {
constructor(
destination: AppDestinations,
listStateResetCallback: () -> Unit,
) : this(
destination.icon,
destination.label,
destination.destination,
destination.selectedIcon,
listStateResetCallback,
) {}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -22,7 +22,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
import androidx.navigation.NavController
import dev.msfjarvis.claw.android.ui.navigation.Destinations
import androidx.navigation.compose.currentBackStackEntryAsState
import dev.msfjarvis.claw.android.ui.navigation.matches
import kotlinx.collections.immutable.ImmutableList
@Composable
@@ -49,12 +50,14 @@ fun ClawNavigationRail(
modifier = Modifier,
) {
NavigationRail(modifier = modifier) {
val navBackStackEntry = navController.currentBackStackEntryAsState().value
val currentDestination = navBackStackEntry?.destination
Spacer(Modifier.weight(1f))
items.forEach { navItem ->
val isCurrentDestination = navController.currentDestination?.route == navItem.route
val isSelected = currentDestination.matches(navItem.destination)
NavigationRailItem(
icon = {
Crossfade(isCurrentDestination, label = "nav-label") {
Crossfade(isSelected, label = "nav-label") {
Icon(
imageVector = if (it) navItem.selectedIcon else navItem.icon,
contentDescription = navItem.label.replaceFirstChar(Char::uppercase),
@@ -62,16 +65,15 @@ fun ClawNavigationRail(
}
},
label = { Text(text = navItem.label) },
selected = isCurrentDestination,
selected = isSelected,
onClick = {
if (isCurrentDestination) {
if (isSelected) {
navItem.listStateResetCallback()
} else {
navController.graph.startDestinationRoute?.let { startDestination ->
navController.popBackStack(startDestination, false)
}
if (navItem.route != Destinations.startDestination.route) {
navController.navigate(navItem.route)
navController.navigate(navItem.destination) {
popUpTo(navController.graph.startDestinationId) { saveState = true }
launchSingleTop = true
restoreState = true
}
}
},
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -7,68 +7,77 @@
package dev.msfjarvis.claw.android.ui
import android.content.Context
import android.content.ContextWrapper
import androidx.activity.ComponentActivity
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.navigation.NavController
import dev.msfjarvis.claw.android.ui.navigation.Destinations
import android.content.Intent
import com.slack.eithernet.ApiResult
import dev.msfjarvis.claw.android.viewmodel.ClawViewModel
import dev.msfjarvis.claw.common.posts.PostActions
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
import dev.msfjarvis.claw.model.LinkMetadata
import dev.msfjarvis.claw.model.UIPost
import java.io.IOException
import java.net.HttpURLConnection
fun Context.getActivity(): ComponentActivity? {
return when (this) {
is ComponentActivity -> this
is ContextWrapper -> baseContext.getActivity()
else -> null
}
}
@Composable
fun rememberPostActions(
fun PostActions(
context: Context,
urlLauncher: UrlLauncher,
navController: NavController,
viewModel: ClawViewModel,
navigateToComments: (String) -> Unit,
): PostActions {
return remember {
object : PostActions {
override fun viewPost(postId: String, postUrl: String, commentsUrl: String) {
viewModel.markPostAsRead(postId)
urlLauncher.openUri(postUrl.ifEmpty { commentsUrl })
}
return object : PostActions {
override fun viewPost(postId: String, postUrl: String, commentsUrl: String) {
viewModel.markPostAsRead(postId)
urlLauncher.openUri(postUrl.ifEmpty { commentsUrl })
}
override fun viewComments(postId: String) {
viewModel.markPostAsRead(postId)
val currentRoute = navController.currentDestination?.route
val newRoute =
Destinations.Comments.route.replace(Destinations.Comments.PLACEHOLDER, postId)
if (currentRoute != Destinations.Comments.route) navController.navigate(newRoute)
}
override fun viewComments(postId: String) {
viewModel.markPostAsRead(postId)
navigateToComments(postId)
}
override fun viewCommentsPage(commentsUrl: String) {
// Post links from lobste.rs are of the form $baseUrl/s/$postId/$postTitle
// Interestingly, lobste.rs does not actually care for the value of $postTitle, and will
// happily accept both a missing as well as a completely arbitrary $postTitle. We
// leverage this to create a new URL format which looks like
// $baseUrl/s/$postId/$postTitle/r, and does not trigger our deeplinks,
// instead opening in the custom tab as we want it to.
urlLauncher.openUri(commentsUrl.replaceAfterLast('/', "r"))
}
override fun viewCommentsPage(post: UIPost) {
urlLauncher.openUri(post.commentsUrl)
}
override fun toggleSave(post: UIPost) {
viewModel.toggleSave(post)
}
override fun toggleSave(post: UIPost) {
viewModel.toggleSave(post)
}
override suspend fun getComments(postId: String): UIPost {
return viewModel.getPostComments(postId)
}
override fun share(post: UIPost) {
val sendIntent: Intent =
Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, post.url.ifEmpty { post.commentsUrl })
putExtra(Intent.EXTRA_TITLE, post.title)
type = "text/plain"
}
val shareIntent = Intent.createChooser(sendIntent, null)
context.startActivity(shareIntent)
}
override suspend fun getLinkMetadata(url: String): LinkMetadata {
return viewModel.getLinkMetadata(url)
}
override fun isPostRead(post: UIPost): Boolean = viewModel.isPostRead(post)
override fun isPostSaved(post: UIPost): Boolean = viewModel.isPostSaved(post)
override suspend fun getComments(postId: String): UIPost {
return viewModel.getPostComments(postId)
}
override suspend fun getLinkMetadata(url: String): LinkMetadata {
return viewModel.getLinkMetadata(url)
}
}
}
/**
* Convert an [ApiResult.Failure.HttpFailure] to a scoped down error with a more useful user-facing
* message.
*/
@Suppress("NOTHING_TO_INLINE") // We inline this to eliminate the stacktrace frame.
inline fun <T : Any> ApiResult.Failure.HttpFailure<T>.toError(): Throwable =
when (code) {
HttpURLConnection.HTTP_NOT_FOUND -> IOException("Story was removed by moderator")
HttpURLConnection.HTTP_INTERNAL_ERROR,
HttpURLConnection.HTTP_BAD_GATEWAY,
HttpURLConnection.HTTP_UNAVAILABLE -> IOException("It appears lobste.rs is currently down")
else -> IOException("API returned an invalid response")
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -10,6 +10,7 @@ import androidx.activity.compose.ReportDrawn
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.LazyColumn
@@ -36,6 +37,7 @@ fun DatabasePosts(
items: ImmutableMap<String, List<UIPost>>,
listState: LazyListState,
postActions: PostActions,
contentPadding: PaddingValues,
modifier: Modifier = Modifier,
) {
ReportDrawn()
@@ -50,11 +52,11 @@ fun DatabasePosts(
Text(text = "No saved posts", style = MaterialTheme.typography.headlineSmall)
}
} else {
LazyColumn(state = listState) {
LazyColumn(state = listState, contentPadding = contentPadding) {
items.forEach { (month, posts) ->
stickyHeader(contentType = "month-header") { MonthHeader(label = month) }
items(items = posts, key = { it.shortId }, contentType = { "LobstersItem" }) { item ->
LobstersListItem(item = item, refresh = {}, postActions = postActions)
LobstersListItem(item = item, postActions = postActions)
HorizontalDivider()
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -8,9 +8,9 @@ package dev.msfjarvis.claw.android.ui.lists
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.Reply
import androidx.compose.material.icons.filled.Share
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import dev.msfjarvis.claw.common.posts.LobstersCard
@@ -20,19 +20,20 @@ import me.saket.swipe.SwipeAction
import me.saket.swipe.SwipeableActionsBox
@Composable
fun LobstersListItem(
item: UIPost,
postActions: PostActions,
refresh: () -> Unit,
modifier: Modifier = Modifier,
) {
fun LobstersListItem(item: UIPost, postActions: PostActions, modifier: Modifier = Modifier) {
val commentsAction =
SwipeAction(
icon = rememberVectorPainter(Icons.AutoMirrored.Filled.Reply),
background = MaterialTheme.colorScheme.tertiary,
onSwipe = { postActions.viewCommentsPage(item.commentsUrl) },
onSwipe = { postActions.viewCommentsPage(item) },
)
SwipeableActionsBox(endActions = listOf(commentsAction)) {
LobstersCard(post = item, postActions = postActions, refresh = refresh, modifier = modifier)
val shareAction =
SwipeAction(
icon = rememberVectorPainter(Icons.Filled.Share),
background = MaterialTheme.colorScheme.tertiary,
onSwipe = { postActions.share(item) },
)
SwipeableActionsBox(startActions = listOf(shareAction), endActions = listOf(commentsAction)) {
LobstersCard(post = item, postActions = postActions, modifier = modifier)
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -7,30 +7,40 @@
package dev.msfjarvis.claw.android.ui.lists
import androidx.activity.compose.ReportDrawnWhen
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentWidth
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.pulltorefresh.PullToRefreshBox
import androidx.compose.material3.pulltorefresh.PullToRefreshDefaults
import androidx.compose.material3.pulltorefresh.rememberPullToRefreshState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.paging.LoadState
import androidx.paging.PagingData
import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.collectAsLazyPagingItems
import androidx.paging.compose.itemContentType
import androidx.paging.compose.itemKey
import dev.msfjarvis.claw.common.posts.PostActions
import dev.msfjarvis.claw.common.posts.TEST_POST
import dev.msfjarvis.claw.common.posts.TEST_POST_ACTIONS
import dev.msfjarvis.claw.common.theme.LobstersTheme
import dev.msfjarvis.claw.common.ui.NetworkError
import dev.msfjarvis.claw.common.ui.ProgressBar
import dev.msfjarvis.claw.common.ui.preview.DevicePreviews
import dev.msfjarvis.claw.model.UIPost
import eu.bambooapps.material3.pullrefresh.PullRefreshIndicator
import eu.bambooapps.material3.pullrefresh.pullRefresh
import eu.bambooapps.material3.pullrefresh.rememberPullRefreshState
import kotlinx.coroutines.flow.MutableStateFlow
@OptIn(ExperimentalMaterial3Api::class)
@Composable
@@ -38,21 +48,33 @@ fun NetworkPosts(
lazyPagingItems: LazyPagingItems<UIPost>,
listState: LazyListState,
postActions: PostActions,
contentPadding: PaddingValues,
modifier: Modifier = Modifier,
) {
ReportDrawnWhen { lazyPagingItems.itemCount > 0 }
val refreshLoadState = lazyPagingItems.loadState.refresh
val isRefreshing = refreshLoadState == LoadState.Loading && lazyPagingItems.itemCount == 0
val pullRefreshState = rememberPullRefreshState(isRefreshing, lazyPagingItems::refresh)
Box(modifier = modifier.fillMaxSize().pullRefresh(pullRefreshState)) {
val refreshLoadState by rememberUpdatedState(lazyPagingItems.loadState.refresh)
val state = rememberPullToRefreshState()
PullToRefreshBox(
modifier = modifier.fillMaxSize(),
isRefreshing = refreshLoadState == LoadState.Loading,
state = state,
onRefresh = { lazyPagingItems.refresh() },
indicator = {
PullToRefreshDefaults.Indicator(
state = state,
isRefreshing = refreshLoadState == LoadState.Loading,
modifier = Modifier.align(Alignment.TopCenter).padding(contentPadding),
)
},
) {
if (lazyPagingItems.itemCount == 0 && refreshLoadState is LoadState.Error) {
NetworkError(
label = "Failed to load posts",
error = refreshLoadState.error,
error = (refreshLoadState as LoadState.Error).error,
modifier = Modifier.align(Alignment.Center),
)
} else {
LazyColumn(state = listState) {
LazyColumn(contentPadding = contentPadding, state = listState) {
items(
count = lazyPagingItems.itemCount,
key = lazyPagingItems.itemKey { it.shortId },
@@ -60,11 +82,7 @@ fun NetworkPosts(
) { index ->
val item = lazyPagingItems[index]
if (item != null) {
LobstersListItem(
item = item,
postActions = postActions,
refresh = { lazyPagingItems.refresh() },
)
LobstersListItem(item = item, postActions = postActions)
HorizontalDivider()
}
}
@@ -80,11 +98,20 @@ fun NetworkPosts(
}
}
}
PullRefreshIndicator(
refreshing = isRefreshing,
state = pullRefreshState,
modifier = Modifier.align(Alignment.TopCenter),
shadowElevation = 6.dp, // From M2 implementation
}
}
@DevicePreviews
@Composable
private fun ListPreview() {
val items = List(20) { TEST_POST.copy(shortId = "${TEST_POST.shortId}${it}") }
val flow = MutableStateFlow(PagingData.from(items))
LobstersTheme {
NetworkPosts(
lazyPagingItems = flow.collectAsLazyPagingItems(),
listState = rememberLazyListState(),
postActions = TEST_POST_ACTIONS,
contentPadding = PaddingValues(),
)
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2023-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -7,8 +7,10 @@
package dev.msfjarvis.claw.android.ui.lists
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
@@ -17,28 +19,29 @@ import androidx.compose.ui.semantics.isTraversalGroup
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex
import androidx.paging.PagingData
import androidx.paging.compose.collectAsLazyPagingItems
import androidx.paging.compose.LazyPagingItems
import dev.msfjarvis.claw.common.posts.PostActions
import dev.msfjarvis.claw.common.ui.SearchBar
import dev.msfjarvis.claw.model.UIPost
import kotlinx.coroutines.flow.Flow
@Composable
fun SearchList(
items: Flow<PagingData<UIPost>>,
lazyPagingItems: LazyPagingItems<UIPost>,
listState: LazyListState,
postActions: PostActions,
searchQuery: String,
setSearchQuery: (String) -> Unit,
contentPadding: PaddingValues,
modifier: Modifier = Modifier,
) {
val lazyPagingItems = items.collectAsLazyPagingItems()
val triggerSearch = { query: String ->
setSearchQuery(query)
lazyPagingItems.refresh()
}
Column(modifier = modifier.semantics { isTraversalGroup = true }.zIndex(1f).fillMaxWidth()) {
Column(
modifier =
modifier.systemBarsPadding().semantics { isTraversalGroup = true }.zIndex(1f).fillMaxWidth()
) {
SearchBar(
value = searchQuery,
onValueChange = setSearchQuery,
@@ -49,6 +52,7 @@ fun SearchList(
lazyPagingItems = lazyPagingItems,
listState = listState,
postActions = postActions,
contentPadding = contentPadding,
)
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2023-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -0,0 +1,63 @@
/*
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/
package dev.msfjarvis.claw.android.ui.navigation
import android.os.Parcelable
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.NewReleases
import androidx.compose.material.icons.filled.Whatshot
import androidx.compose.material.icons.outlined.FavoriteBorder
import androidx.compose.material.icons.outlined.NewReleases
import androidx.compose.material.icons.outlined.Whatshot
import androidx.compose.ui.graphics.vector.ImageVector
import kotlinx.parcelize.Parcelize
import kotlinx.serialization.Serializable
sealed interface Destination : Parcelable
@Parcelize @Serializable data object Hottest : Destination
@Parcelize @Serializable data object Newest : Destination
@Parcelize @Serializable data object Saved : Destination
@Parcelize @Serializable data class Comments(val postId: String) : Destination
@Parcelize @Serializable data class User(val username: String) : Destination
@Parcelize @Serializable data object Search : Destination
@Parcelize @Serializable data object Settings : Destination
@Parcelize @Serializable data object AboutLibraries : Destination
enum class AppDestinations(
val icon: ImageVector,
val label: String,
val destination: Destination,
val selectedIcon: ImageVector,
) {
HOTTEST(
icon = Icons.Outlined.Whatshot,
label = "Hottest",
destination = Hottest,
selectedIcon = Icons.Filled.Whatshot,
),
NEWEST(
icon = Icons.Outlined.NewReleases,
label = "Newest",
destination = Newest,
selectedIcon = Icons.Filled.NewReleases,
),
SAVED(
icon = Icons.Outlined.FavoriteBorder,
label = "Saved",
destination = Saved,
selectedIcon = Icons.Filled.Favorite,
),
}
@@ -1,50 +0,0 @@
/*
* Copyright © 2021-2024 Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/
package dev.msfjarvis.claw.android.ui.navigation
sealed class Destinations {
abstract val route: String
data object Hottest : Destinations() {
override val route = "hottest"
}
data object Newest : Destinations() {
override val route = "newest"
}
data object Saved : Destinations() {
override val route = "saved"
}
data object Comments : Destinations() {
const val PLACEHOLDER = "{postId}"
override val route = "comments/$PLACEHOLDER"
}
data object User : Destinations() {
const val PLACEHOLDER = "{username}"
override val route = "user/$PLACEHOLDER"
}
data object Search : Destinations() {
override val route = "search"
}
data object Settings : Destinations() {
override val route = "settings"
}
data object AboutLibraries : Destinations() {
override val route = "about_libraries"
}
companion object {
val startDestination
get() = Hottest
}
}
@@ -0,0 +1,30 @@
/*
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/
package dev.msfjarvis.claw.android.ui.navigation
import androidx.navigation.NavDestination
import androidx.navigation.NavDestination.Companion.hasRoute
import androidx.navigation.NavDestination.Companion.hierarchy
import kotlinx.collections.immutable.ImmutableList
/**
* Walk through the [NavDestination]'s [hierarchy] to see if it has any destination that matches the
* route defined by [dest].
*/
fun NavDestination?.matches(dest: Destination): Boolean {
return this?.hierarchy?.any { it.hasRoute(dest::class) } == true
}
/** Check if this [NavDestination] [matches] any of the potential navigation [destinations]. */
fun NavDestination?.any(destinations: ImmutableList<Destination>): Boolean {
return destinations.any { this?.matches(it) == true }
}
/** Check if this [NavDestination] [matches] none of the potential navigation [destinations]. */
fun NavDestination?.none(destinations: ImmutableList<Destination>): Boolean {
return destinations.none { this?.matches(it) == true }
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -7,44 +7,35 @@
package dev.msfjarvis.claw.android.ui.screens
import android.content.Intent
import androidx.activity.compose.LocalActivity
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material.icons.filled.Favorite
import androidx.compose.material.icons.filled.NewReleases
import androidx.compose.material.icons.filled.Search
import androidx.compose.material.icons.filled.Tune
import androidx.compose.material.icons.filled.Whatshot
import androidx.compose.material.icons.outlined.FavoriteBorder
import androidx.compose.material.icons.outlined.NewReleases
import androidx.compose.material.icons.outlined.Whatshot
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.windowsizeclass.WindowSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.ColorFilter
import androidx.compose.ui.draw.shadow
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
@@ -52,40 +43,48 @@ import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.semantics.testTagsAsResourceId
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.navigation.NavType
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.currentBackStackEntryAsState
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import androidx.navigation.navDeepLink
import androidx.navigation.toRoute
import androidx.paging.compose.collectAsLazyPagingItems
import com.deliveryhero.whetstone.compose.injectedViewModel
import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
import dev.chrisbanes.haze.HazeState
import dev.chrisbanes.haze.hazeSource
import dev.msfjarvis.claw.android.MainActivity
import dev.msfjarvis.claw.android.R
import dev.msfjarvis.claw.android.SearchActivity
import dev.msfjarvis.claw.android.ui.PostActions
import dev.msfjarvis.claw.android.ui.decorations.ClawNavigationBar
import dev.msfjarvis.claw.android.ui.decorations.ClawNavigationRail
import dev.msfjarvis.claw.android.ui.decorations.NavigationItem
import dev.msfjarvis.claw.android.ui.getActivity
import dev.msfjarvis.claw.android.ui.lists.DatabasePosts
import dev.msfjarvis.claw.android.ui.lists.NetworkPosts
import dev.msfjarvis.claw.android.ui.navigation.AboutLibraries
import dev.msfjarvis.claw.android.ui.navigation.AppDestinations
import dev.msfjarvis.claw.android.ui.navigation.ClawNavigationType
import dev.msfjarvis.claw.android.ui.navigation.Destinations
import dev.msfjarvis.claw.android.ui.rememberPostActions
import dev.msfjarvis.claw.android.ui.navigation.Comments
import dev.msfjarvis.claw.android.ui.navigation.Hottest
import dev.msfjarvis.claw.android.ui.navigation.Newest
import dev.msfjarvis.claw.android.ui.navigation.Saved
import dev.msfjarvis.claw.android.ui.navigation.Settings
import dev.msfjarvis.claw.android.ui.navigation.User
import dev.msfjarvis.claw.android.ui.navigation.any
import dev.msfjarvis.claw.android.ui.navigation.none
import dev.msfjarvis.claw.android.viewmodel.ClawViewModel
import dev.msfjarvis.claw.api.LobstersApi
import dev.msfjarvis.claw.common.comments.CommentsPage
import dev.msfjarvis.claw.common.comments.HTMLConverter
import dev.msfjarvis.claw.common.ui.decorations.ClawAppBar
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
import dev.msfjarvis.claw.common.user.UserProfile
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.persistentMapOf
import kotlinx.collections.immutable.toPersistentList
import kotlinx.coroutines.launch
@OptIn(ExperimentalComposeUiApi::class)
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun LobstersPostsScreen(
urlLauncher: UrlLauncher,
@@ -95,99 +94,87 @@ fun LobstersPostsScreen(
modifier: Modifier = Modifier,
viewModel: ClawViewModel = injectedViewModel(),
) {
val context = LocalContext.current
val activity = LocalActivity.current
val hottestListState = rememberLazyListState()
val newestListState = rememberLazyListState()
val savedListState = rememberLazyListState()
val navController = rememberNavController()
val navBackStackEntry = navController.currentBackStackEntryAsState().value
val currentDestination = navBackStackEntry?.destination
val coroutineScope = rememberCoroutineScope()
val snackbarHostState = remember { SnackbarHostState() }
val postActions = rememberPostActions(urlLauncher, navController, viewModel)
val backStackEntry by navController.currentBackStackEntryAsState()
val currentDestination = backStackEntry?.destination?.route
val context = LocalContext.current
val postActions = remember {
PostActions(context, urlLauncher, viewModel) { navController.navigate(Comments(it)) }
}
val hazeState = remember { HazeState() }
val hottestPosts = viewModel.hottestPosts.collectAsLazyPagingItems()
val newestPosts = viewModel.newestPosts.collectAsLazyPagingItems()
val savedPosts by viewModel.savedPostsByMonth.collectAsState(persistentMapOf())
val savedPosts by viewModel.savedPostsByMonth.collectAsStateWithLifecycle(persistentMapOf())
val navigationType = ClawNavigationType.fromSize(windowSizeClass.widthSizeClass)
val postIdOverride = context.getActivity()?.intent?.extras?.getString(MainActivity.NAVIGATION_KEY)
LaunchedEffect(false) {
val postIdOverride = activity?.intent?.extras?.getString(MainActivity.NAVIGATION_KEY)
LaunchedEffect(Unit) {
if (postIdOverride != null) {
navController.navigate(
Destinations.Comments.route.replace(Destinations.Comments.PLACEHOLDER, postIdOverride)
)
navController.navigate(Comments(postIdOverride))
}
}
val navItems =
persistentListOf(
NavigationItem(
label = "Hottest",
route = Destinations.Hottest.route,
icon = Icons.Outlined.Whatshot,
selectedIcon = Icons.Filled.Whatshot,
) {
coroutineScope.launch { hottestListState.animateScrollToItem(index = 0) }
NavigationItem(AppDestinations.HOTTEST) {
coroutineScope.launch {
if (hottestPosts.itemCount > 0) hottestListState.animateScrollToItem(index = 0)
}
},
NavigationItem(
label = "Newest",
route = Destinations.Newest.route,
icon = Icons.Outlined.NewReleases,
selectedIcon = Icons.Filled.NewReleases,
) {
coroutineScope.launch { newestListState.animateScrollToItem(index = 0) }
NavigationItem(AppDestinations.NEWEST) {
coroutineScope.launch {
if (newestPosts.itemCount > 0) newestListState.animateScrollToItem(index = 0)
}
},
NavigationItem(
label = "Saved",
route = Destinations.Saved.route,
icon = Icons.Outlined.FavoriteBorder,
selectedIcon = Icons.Filled.Favorite,
) {
coroutineScope.launch { savedListState.animateScrollToItem(index = 0) }
NavigationItem(AppDestinations.SAVED) {
coroutineScope.launch { if (savedPosts.isNotEmpty()) savedListState.scrollToItem(0) }
},
)
val navDestinations = navItems.map(NavigationItem::destination).toPersistentList()
Scaffold(
topBar = {
ClawAppBar(
TopAppBar(
modifier = Modifier.shadow(8.dp),
navigationIcon = {
if (
navController.previousBackStackEntry != null &&
navItems.none { it.route == currentDestination }
navController.previousBackStackEntry != null && currentDestination.none(navDestinations)
) {
IconButton(
onClick = { if (!navController.popBackStack()) context.getActivity()?.finish() }
) {
IconButton(onClick = { if (!navController.popBackStack()) activity?.finish() }) {
Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = "Go back to previous screen",
)
}
} else {
Icon(
painter = painterResource(id = R.drawable.ic_launcher_foreground),
contentDescription = "The app icon for Claw",
modifier = Modifier.size(48.dp),
)
}
},
title = {
if (navItems.any { it.route == currentDestination }) {
Row(verticalAlignment = Alignment.CenterVertically) {
Image(
painter = painterResource(id = R.drawable.ic_launcher_foreground),
contentDescription = null,
modifier = Modifier.size(48.dp),
colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onSurface),
)
Text(text = stringResource(R.string.app_name), fontWeight = FontWeight.Bold)
}
if (currentDestination.any(navDestinations)) {
Text(text = stringResource(R.string.app_name), fontWeight = FontWeight.Bold)
}
},
actions = {
if (navItems.any { it.route == currentDestination }) {
if (currentDestination.any(navDestinations)) {
IconButton(
onClick = { context.startActivity(Intent(context, SearchActivity::class.java)) }
) {
Icon(imageVector = Icons.Filled.Search, contentDescription = "Search posts")
}
IconButton(onClick = { navController.navigate(Destinations.Settings.route) }) {
IconButton(onClick = { navController.navigate(Settings) }) {
Icon(imageVector = Icons.Filled.Tune, contentDescription = "Settings")
}
}
@@ -199,63 +186,60 @@ fun LobstersPostsScreen(
ClawNavigationBar(
navController = navController,
items = navItems,
isVisible = navItems.any { it.route == currentDestination },
isVisible = currentDestination.any(navDestinations),
hazeState = hazeState,
)
}
},
snackbarHost = { SnackbarHost(snackbarHostState) },
modifier = modifier.semantics { testTagsAsResourceId = true },
) { paddingValues ->
Row(modifier = Modifier.padding(paddingValues)) {
) { contentPadding ->
Row {
AnimatedVisibility(visible = navigationType == ClawNavigationType.NAVIGATION_RAIL) {
ClawNavigationRail(
navController = navController,
items = navItems,
isVisible = navItems.any { it.route == currentDestination },
isVisible = currentDestination.any(navDestinations),
)
}
NavHost(
navController = navController,
startDestination = Destinations.startDestination.route,
startDestination = Hottest,
// Make animations 2x faster than default specs
enterTransition = { fadeIn(animationSpec = tween(350)) },
exitTransition = { fadeOut(animationSpec = tween(350)) },
modifier = Modifier.hazeSource(hazeState),
) {
val uri = LobstersApi.BASE_URL
composable(route = Destinations.Hottest.route) {
composable<Hottest> {
setWebUri("https://lobste.rs/")
NetworkPosts(
lazyPagingItems = hottestPosts,
listState = hottestListState,
postActions = postActions,
contentPadding = contentPadding,
)
}
composable(route = Destinations.Newest.route) {
composable<Newest> {
setWebUri("https://lobste.rs/")
NetworkPosts(
lazyPagingItems = newestPosts,
listState = newestListState,
postActions = postActions,
contentPadding = contentPadding,
)
}
composable(route = Destinations.Saved.route) {
composable<Saved> {
setWebUri(null)
DatabasePosts(items = savedPosts, listState = savedListState, postActions = postActions)
DatabasePosts(
items = savedPosts,
listState = savedListState,
postActions = postActions,
contentPadding = contentPadding,
)
}
composable(
route = Destinations.Comments.route,
arguments = listOf(navArgument("postId") { type = NavType.StringType }),
deepLinks =
listOf(
navDeepLink { uriPattern = "$uri/s/${Destinations.Comments.PLACEHOLDER}/.*" },
navDeepLink { uriPattern = "$uri/s/${Destinations.Comments.PLACEHOLDER}" },
),
) { backStackEntry ->
val postId =
requireNotNull(backStackEntry.arguments?.getString("postId")) {
"Navigating to ${Destinations.Comments.route} without necessary 'postId' argument"
}
composable<Comments> { backStackEntry ->
val postId = backStackEntry.toRoute<Comments>().postId
setWebUri("https://lobste.rs/s/$postId")
CommentsPage(
postId = postId,
@@ -263,32 +247,35 @@ fun LobstersPostsScreen(
htmlConverter = htmlConverter,
getSeenComments = viewModel::getSeenComments,
markSeenComments = viewModel::markSeenComments,
contentPadding = contentPadding,
openUserProfile = { navController.navigate(User(it)) },
)
}
composable(
route = Destinations.User.route,
arguments = listOf(navArgument("username") { type = NavType.StringType }),
deepLinks = listOf(navDeepLink { uriPattern = "$uri/u/${Destinations.User.PLACEHOLDER}" }),
) { backStackEntry ->
val username =
requireNotNull(backStackEntry.arguments?.getString("username")) {
"Navigating to ${Destinations.User.route} without necessary 'username' argument"
}
composable<User> { backStackEntry ->
val username = backStackEntry.toRoute<User>().username
setWebUri("https://lobste.rs/u/$username")
UserProfile(username = username, getProfile = viewModel::getUserProfile)
UserProfile(
username = username,
getProfile = viewModel::getUserProfile,
contentPadding = contentPadding,
openUserProfile = { navController.navigate(User(it)) },
)
}
composable(route = Destinations.Settings.route) {
composable<Settings> {
SettingsScreen(
context = context,
openLibrariesScreen = { navController.navigate(Destinations.AboutLibraries.route) },
openInputStream = context.contentResolver::openInputStream,
openOutputStream = context.contentResolver::openOutputStream,
openLibrariesScreen = { navController.navigate(AboutLibraries) },
importPosts = viewModel::importPosts,
exportPostsAsJson = viewModel::exportPostsAsJson,
exportPostsAsHtml = viewModel::exportPostsAsHtml,
snackbarHostState = snackbarHostState,
contentPadding = contentPadding,
modifier = Modifier.fillMaxSize(),
)
}
composable(route = Destinations.AboutLibraries.route) {
LibrariesContainer(modifier = Modifier.fillMaxSize())
composable<AboutLibraries> {
LibrariesContainer(contentPadding = contentPadding, modifier = Modifier.fillMaxSize())
}
}
}
@@ -1,29 +1,33 @@
/*
* Copyright © 2023-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/
package dev.msfjarvis.claw.android.ui.screens
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.Scaffold
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.navigation.NavType
import androidx.compose.ui.platform.LocalContext
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.navigation.navArgument
import androidx.navigation.toRoute
import androidx.paging.compose.collectAsLazyPagingItems
import com.deliveryhero.whetstone.compose.injectedViewModel
import dev.msfjarvis.claw.android.ui.PostActions
import dev.msfjarvis.claw.android.ui.lists.SearchList
import dev.msfjarvis.claw.android.ui.navigation.Destinations
import dev.msfjarvis.claw.android.ui.rememberPostActions
import dev.msfjarvis.claw.android.ui.navigation.Comments
import dev.msfjarvis.claw.android.ui.navigation.Search
import dev.msfjarvis.claw.android.ui.navigation.User
import dev.msfjarvis.claw.android.viewmodel.ClawViewModel
import dev.msfjarvis.claw.common.comments.CommentsPage
import dev.msfjarvis.claw.common.comments.HTMLConverter
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
import dev.msfjarvis.claw.common.user.UserProfile
@Composable
fun SearchScreen(
@@ -33,33 +37,29 @@ fun SearchScreen(
modifier: Modifier = Modifier,
viewModel: ClawViewModel = injectedViewModel(),
) {
val context = LocalContext.current
val navController = rememberNavController()
val postActions = rememberPostActions(urlLauncher, navController, viewModel)
val postActions = remember {
PostActions(context, urlLauncher, viewModel) { navController.navigate(Comments(it)) }
}
val listState = rememberLazyListState()
Scaffold(modifier = modifier) { paddingValues ->
NavHost(
navController = navController,
startDestination = Destinations.Search.route,
modifier = Modifier.padding(paddingValues),
) {
composable(route = Destinations.Search.route) {
val searchResults = viewModel.searchResults.collectAsLazyPagingItems()
Scaffold(modifier = modifier) { contentPadding ->
NavHost(navController = navController, startDestination = Search) {
composable<Search> {
setWebUri("https://lobste.rs/search")
SearchList(
items = viewModel.searchResults,
lazyPagingItems = searchResults,
listState = listState,
postActions = postActions,
searchQuery = viewModel.searchQuery,
contentPadding = contentPadding,
setSearchQuery = { query -> viewModel.searchQuery = query },
)
}
composable(
route = Destinations.Comments.route,
arguments = listOf(navArgument("postId") { type = NavType.StringType }),
) { backStackEntry ->
val postId =
requireNotNull(backStackEntry.arguments?.getString("postId")) {
"Navigating to ${Destinations.Comments.route} without necessary 'postId' argument"
}
composable<Comments> { backStackEntry ->
val postId = backStackEntry.toRoute<Comments>().postId
setWebUri("https://lobste.rs/s/$postId")
CommentsPage(
postId = postId,
@@ -67,6 +67,18 @@ fun SearchScreen(
htmlConverter = htmlConverter,
getSeenComments = viewModel::getSeenComments,
markSeenComments = viewModel::markSeenComments,
openUserProfile = { navController.navigate(User(it)) },
contentPadding = contentPadding,
)
}
composable<User> { backStackEntry ->
val username = backStackEntry.toRoute<User>().username
setWebUri("https://lobste.rs/u/$username")
UserProfile(
username = username,
getProfile = viewModel::getUserProfile,
openUserProfile = { navController.navigate(User(it)) },
contentPadding = contentPadding,
)
}
}
@@ -1,23 +1,24 @@
/*
* Copyright © 2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/
package dev.msfjarvis.claw.android.ui.screens
import android.content.Context
import android.net.Uri
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.LibraryBooks
import androidx.compose.material.icons.filled.Bookmarks
@@ -39,6 +40,8 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import dev.msfjarvis.claw.common.theme.LobstersTheme
import dev.msfjarvis.claw.common.ui.preview.ThemePreviews
import java.io.InputStream
import java.io.OutputStream
import kotlinx.coroutines.CoroutineScope
@@ -49,28 +52,19 @@ private const val HTML_MIME_TYPE = "application/html"
@Composable
fun SettingsScreen(
context: Context,
openLibrariesScreen: () -> Unit,
snackbarHostState: SnackbarHostState,
openInputStream: (Uri) -> InputStream?,
openOutputStream: (Uri) -> OutputStream?,
importPosts: suspend (InputStream) -> Unit,
exportPostsAsJson: suspend (OutputStream) -> Unit,
exportPostsAsHtml: suspend (OutputStream) -> Unit,
contentPadding: PaddingValues,
modifier: Modifier = Modifier,
) {
val coroutineScope = rememberCoroutineScope()
Box(modifier = modifier.fillMaxSize()) {
Box(modifier = modifier.padding(contentPadding)) {
Column {
ListItem(
headlineContent = { Text("Libraries") },
leadingContent = {
Icon(
imageVector = Icons.AutoMirrored.Filled.LibraryBooks,
contentDescription = null,
modifier = Modifier.height(32.dp),
)
},
modifier = Modifier.clickable(onClick = openLibrariesScreen),
)
ListItem(
headlineContent = { Text("Data transfer") },
leadingContent = {
@@ -85,24 +79,35 @@ fun SettingsScreen(
horizontalArrangement = Arrangement.spacedBy(32.dp),
modifier = Modifier.fillMaxWidth(),
) {
ImportPosts(context, coroutineScope, snackbarHostState, importPosts)
ImportPosts(openInputStream, coroutineScope, snackbarHostState, importPosts)
ExportPosts(
context,
coroutineScope,
snackbarHostState,
openOutputStream,
exportPostsAsJson,
exportPostsAsHtml,
)
}
},
)
ListItem(
headlineContent = { Text("Libraries") },
leadingContent = {
Icon(
imageVector = Icons.AutoMirrored.Filled.LibraryBooks,
contentDescription = null,
modifier = Modifier.height(32.dp),
)
},
modifier = Modifier.clickable(onClick = openLibrariesScreen),
)
}
}
}
@Composable
private fun RowScope.ImportPosts(
context: Context,
openInputStream: (Uri) -> InputStream?,
coroutineScope: CoroutineScope,
snackbarHostState: SnackbarHostState,
importPosts: suspend (InputStream) -> Unit,
@@ -115,7 +120,7 @@ private fun RowScope.ImportPosts(
return@rememberLauncherForActivityResult
}
coroutineScope.launch {
context.contentResolver.openInputStream(uri)?.use { stream ->
openInputStream(uri)?.use { stream ->
importPosts(stream)
snackbarHostState.showSnackbarDismissing("Successfully imported posts")
}
@@ -132,9 +137,9 @@ private fun RowScope.ImportPosts(
@Composable
private fun RowScope.ExportPosts(
context: Context,
coroutineScope: CoroutineScope,
snackbarHostState: SnackbarHostState,
openOutputStream: (Uri) -> OutputStream?,
exportPostsAsJson: suspend (OutputStream) -> Unit,
exportPostsAsHtml: suspend (OutputStream) -> Unit,
modifier: Modifier = Modifier,
@@ -147,7 +152,7 @@ private fun RowScope.ExportPosts(
return@rememberLauncherForActivityResult
}
coroutineScope.launch {
context.contentResolver.openOutputStream(uri)?.use { stream ->
openOutputStream(uri)?.use { stream ->
exportPostsAsJson(stream)
snackbarHostState.showSnackbarDismissing("Successfully exported posts")
}
@@ -161,7 +166,7 @@ private fun RowScope.ExportPosts(
return@rememberLauncherForActivityResult
}
coroutineScope.launch {
context.contentResolver.openOutputStream(uri)?.use { stream ->
openOutputStream(uri)?.use { stream ->
exportPostsAsHtml(stream)
snackbarHostState.showSnackbarDismissing("Successfully exported posts")
}
@@ -207,3 +212,11 @@ private suspend fun SnackbarHostState.showSnackbarDismissing(text: String) {
currentSnackbarData?.dismiss()
showSnackbar(text)
}
@ThemePreviews
@Composable
private fun SettingsScreenPreview() {
LobstersTheme {
SettingsScreen({}, SnackbarHostState(), { null }, { null }, {}, {}, {}, PaddingValues())
}
}
@@ -0,0 +1,237 @@
/*
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/
@file:OptIn(ExperimentalMaterial3AdaptiveApi::class)
package dev.msfjarvis.claw.android.ui.screens
import androidx.activity.compose.BackHandler
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.ArrowBack
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBar
import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi
import androidx.compose.material3.adaptive.layout.AnimatedPane
import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffold
import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole
import androidx.compose.material3.adaptive.layout.PaneAdaptedValue
import androidx.compose.material3.adaptive.navigation.BackNavigationBehavior
import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldNavigator
import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import androidx.paging.compose.collectAsLazyPagingItems
import com.deliveryhero.whetstone.compose.injectedViewModel
import dev.msfjarvis.claw.android.R
import dev.msfjarvis.claw.android.ui.PostActions
import dev.msfjarvis.claw.android.ui.decorations.ClawNavigationRail
import dev.msfjarvis.claw.android.ui.decorations.NavigationItem
import dev.msfjarvis.claw.android.ui.lists.DatabasePosts
import dev.msfjarvis.claw.android.ui.lists.NetworkPosts
import dev.msfjarvis.claw.android.ui.navigation.AppDestinations
import dev.msfjarvis.claw.android.ui.navigation.Comments
import dev.msfjarvis.claw.android.ui.navigation.Hottest
import dev.msfjarvis.claw.android.ui.navigation.Newest
import dev.msfjarvis.claw.android.ui.navigation.Saved
import dev.msfjarvis.claw.android.ui.navigation.User
import dev.msfjarvis.claw.android.viewmodel.ClawViewModel
import dev.msfjarvis.claw.common.comments.CommentsPage
import dev.msfjarvis.claw.common.comments.HTMLConverter
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.persistentMapOf
import kotlinx.coroutines.launch
private fun ThreePaneScaffoldNavigator<*>.isListExpanded() =
scaffoldValue[ListDetailPaneScaffoldRole.List] == PaneAdaptedValue.Expanded
private fun ThreePaneScaffoldNavigator<*>.isDetailExpanded() =
scaffoldValue[ListDetailPaneScaffoldRole.Detail] == PaneAdaptedValue.Expanded
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun TabletScreen(
urlLauncher: UrlLauncher,
htmlConverter: HTMLConverter,
modifier: Modifier = Modifier,
viewModel: ClawViewModel = injectedViewModel(),
) {
val context = LocalContext.current
val hottestListState = rememberLazyListState()
val newestListState = rememberLazyListState()
val savedListState = rememberLazyListState()
val navController = rememberNavController()
val coroutineScope = rememberCoroutineScope()
val hottestPosts = viewModel.hottestPosts.collectAsLazyPagingItems()
val newestPosts = viewModel.newestPosts.collectAsLazyPagingItems()
val savedPosts by viewModel.savedPostsByMonth.collectAsStateWithLifecycle(persistentMapOf())
val navigator = rememberListDetailPaneScaffoldNavigator<Comments>()
val backBehavior =
if (navigator.isListExpanded() && navigator.isDetailExpanded()) {
BackNavigationBehavior.PopUntilContentChange
} else {
BackNavigationBehavior.PopUntilScaffoldValueChange
}
val postActions = remember {
PostActions(context, urlLauncher, viewModel) {
coroutineScope.launch {
navigator.navigateTo(pane = ListDetailPaneScaffoldRole.Detail, contentKey = Comments(it))
}
}
}
val navItems =
persistentListOf(
NavigationItem(AppDestinations.HOTTEST) {
coroutineScope.launch {
if (hottestPosts.itemCount > 0) hottestListState.animateScrollToItem(index = 0)
}
},
NavigationItem(AppDestinations.NEWEST) {
coroutineScope.launch {
if (newestPosts.itemCount > 0) newestListState.animateScrollToItem(index = 0)
}
},
NavigationItem(AppDestinations.SAVED) {
coroutineScope.launch {
if (savedPosts.isNotEmpty()) savedListState.animateScrollToItem(index = 0)
}
},
)
BackHandler(navigator.canNavigateBack(backBehavior)) {
coroutineScope.launch { navigator.navigateBack(backBehavior) }
}
Scaffold(
topBar = {
TopAppBar(
navigationIcon = {
if (navigator.canNavigateBack(backBehavior)) {
IconButton(
onClick = { coroutineScope.launch { navigator.navigateBack(backBehavior) } }
) {
Icon(
imageVector = Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = "Go back to previous screen",
)
}
} else {
Icon(
painter = painterResource(id = R.drawable.ic_launcher_foreground),
contentDescription = "The app icon for Claw",
modifier = Modifier.size(48.dp),
)
}
},
title = {
if (!navigator.canNavigateBack(backBehavior)) {
Text(text = stringResource(R.string.app_name), fontWeight = FontWeight.Bold)
}
},
)
},
content = { paddingValues ->
Row {
ClawNavigationRail(navController = navController, items = navItems, isVisible = true)
ListDetailPaneScaffold(
modifier = modifier.padding(paddingValues),
directive = navigator.scaffoldDirective,
value = navigator.scaffoldValue,
listPane = {
AnimatedPane {
NavHost(
navController = navController,
startDestination = Hottest,
enterTransition = { fadeIn(tween(350)) },
exitTransition = { fadeOut(tween(350)) },
) {
composable<Hottest> {
NetworkPosts(
lazyPagingItems = hottestPosts,
listState = hottestListState,
postActions = postActions,
contentPadding = PaddingValues(),
)
}
composable<Newest> {
NetworkPosts(
lazyPagingItems = newestPosts,
listState = newestListState,
postActions = postActions,
contentPadding = PaddingValues(),
)
}
composable<Saved> {
DatabasePosts(
items = savedPosts,
listState = savedListState,
postActions = postActions,
contentPadding = PaddingValues(),
)
}
}
}
},
detailPane = {
AnimatedPane {
when (val contentKey = navigator.currentDestination?.contentKey) {
null -> {
Box(Modifier.fillMaxSize()) {
Text(
text = "Select a post to view comments",
modifier = Modifier.align(Alignment.Center),
)
}
}
else -> {
CommentsPage(
postId = contentKey.postId,
postActions = postActions,
htmlConverter = htmlConverter,
getSeenComments = viewModel::getSeenComments,
markSeenComments = viewModel::markSeenComments,
openUserProfile = { navController.navigate(User(it)) },
contentPadding = PaddingValues(),
modifier = Modifier.fillMaxSize(),
)
}
}
}
},
)
}
},
)
}
@@ -0,0 +1,170 @@
/*
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/
package dev.msfjarvis.claw.android.ui.screens
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.Icon
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffold
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.paging.compose.collectAsLazyPagingItems
import com.deliveryhero.whetstone.compose.injectedViewModel
import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
import dev.msfjarvis.claw.android.ui.PostActions
import dev.msfjarvis.claw.android.ui.lists.DatabasePosts
import dev.msfjarvis.claw.android.ui.lists.NetworkPosts
import dev.msfjarvis.claw.android.ui.navigation.AboutLibraries
import dev.msfjarvis.claw.android.ui.navigation.AppDestinations
import dev.msfjarvis.claw.android.ui.navigation.Comments
import dev.msfjarvis.claw.android.ui.navigation.Hottest
import dev.msfjarvis.claw.android.ui.navigation.Newest
import dev.msfjarvis.claw.android.ui.navigation.Saved
import dev.msfjarvis.claw.android.ui.navigation.Settings
import dev.msfjarvis.claw.android.ui.navigation.User
import dev.msfjarvis.claw.android.viewmodel.ClawViewModel
import dev.msfjarvis.claw.common.comments.CommentsPage
import dev.msfjarvis.claw.common.comments.HTMLConverter
import dev.msfjarvis.claw.common.urllauncher.UrlLauncher
import dev.msfjarvis.claw.common.user.UserProfile
import kotlinx.collections.immutable.persistentMapOf
@Composable
fun TabletScreen2(
urlLauncher: UrlLauncher,
htmlConverter: HTMLConverter,
setWebUri: (String?) -> Unit,
modifier: Modifier = Modifier,
viewModel: ClawViewModel = injectedViewModel(),
) {
// TODO: Needs a custom Saver implementation, should probably be an ArrayDeque
val navigationBackStack = rememberSaveable {
mutableStateListOf(AppDestinations.HOTTEST.destination)
}
val context = LocalContext.current
val hottestListState = rememberLazyListState()
val newestListState = rememberLazyListState()
val savedListState = rememberLazyListState()
val snackbarHostState = remember { SnackbarHostState() }
val postActions = remember {
PostActions(context, urlLauncher, viewModel) { navigationBackStack.add(Comments(it)) }
}
val hottestPosts = viewModel.hottestPosts.collectAsLazyPagingItems()
val newestPosts = viewModel.newestPosts.collectAsLazyPagingItems()
val savedPosts by viewModel.savedPostsByMonth.collectAsStateWithLifecycle(persistentMapOf())
BackHandler(navigationBackStack.size > 1) {
navigationBackStack.removeAt(navigationBackStack.size - 1)
}
val contentPadding = PaddingValues()
NavigationSuiteScaffold(
navigationSuiteItems = {
AppDestinations.entries.forEach {
item(
icon = { Icon(imageVector = it.icon, contentDescription = it.label) },
selected = it.destination == navigationBackStack.first(),
onClick = { navigationBackStack.add(it.destination) },
)
}
},
modifier = modifier,
) {
when (navigationBackStack.first()) {
AboutLibraries -> {
LibrariesContainer(contentPadding = contentPadding, modifier = Modifier.fillMaxSize())
}
Hottest -> {
setWebUri("https://lobste.rs/")
NetworkPosts(
lazyPagingItems = hottestPosts,
listState = hottestListState,
postActions = postActions,
contentPadding = contentPadding,
)
}
Newest -> {
setWebUri("https://lobste.rs/")
NetworkPosts(
lazyPagingItems = newestPosts,
listState = newestListState,
postActions = postActions,
contentPadding = contentPadding,
)
}
Saved -> {
setWebUri(null)
DatabasePosts(
items = savedPosts,
listState = savedListState,
postActions = postActions,
contentPadding = contentPadding,
)
}
Settings -> {
setWebUri(null)
SettingsScreen(
openInputStream = context.contentResolver::openInputStream,
openOutputStream = context.contentResolver::openOutputStream,
openLibrariesScreen = { navigationBackStack.add(AboutLibraries) },
importPosts = viewModel::importPosts,
exportPostsAsJson = viewModel::exportPostsAsJson,
exportPostsAsHtml = viewModel::exportPostsAsHtml,
snackbarHostState = snackbarHostState,
contentPadding = contentPadding,
modifier = Modifier.fillMaxSize(),
)
}
is Comments -> {
val postId = (navigationBackStack.first() as Comments).postId
setWebUri("https://lobste.rs/s/$postId")
CommentsPage(
postId = postId,
postActions = postActions,
htmlConverter = htmlConverter,
getSeenComments = viewModel::getSeenComments,
markSeenComments = viewModel::markSeenComments,
contentPadding = contentPadding,
openUserProfile = { navigationBackStack.add(User(it)) },
)
}
is User -> {
val username = (navigationBackStack.first() as User).username
setWebUri("https://lobste.rs/u/$username")
UserProfile(
username = username,
getProfile = viewModel::getUserProfile,
contentPadding = contentPadding,
openUserProfile = { navigationBackStack.add(User(it)) },
)
}
else -> {
Box(Modifier.fillMaxSize()) {
Text(
text = "Unexpected destination: ${navigationBackStack.first()}, please report this bug",
modifier = Modifier.align(Alignment.Center),
)
}
}
}
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -18,9 +18,7 @@ import androidx.lifecycle.AndroidViewModel
import androidx.lifecycle.viewModelScope
import androidx.paging.Pager
import androidx.paging.PagingConfig
import androidx.paging.PagingData
import androidx.paging.cachedIn
import androidx.paging.map
import com.deliveryhero.whetstone.app.ApplicationScope
import com.deliveryhero.whetstone.viewmodel.ContributesViewModel
import com.slack.eithernet.ApiResult.Failure
@@ -31,19 +29,17 @@ import dev.msfjarvis.claw.android.paging.LobstersPagingSource
import dev.msfjarvis.claw.android.paging.LobstersPagingSource.Companion.PAGE_SIZE
import dev.msfjarvis.claw.android.paging.LobstersPagingSource.Companion.STARTING_PAGE_INDEX
import dev.msfjarvis.claw.android.paging.SearchPagingSource
import dev.msfjarvis.claw.android.ui.toError
import dev.msfjarvis.claw.api.LobstersApi
import dev.msfjarvis.claw.core.injection.IODispatcher
import dev.msfjarvis.claw.core.injection.MainDispatcher
import dev.msfjarvis.claw.model.Comment
import dev.msfjarvis.claw.model.LobstersPost
import dev.msfjarvis.claw.model.UIPost
import dev.msfjarvis.claw.model.fromSavedPost
import dev.msfjarvis.claw.model.toSavedPost
import dev.msfjarvis.claw.model.toUIPost
import java.io.IOException
import java.io.InputStream
import java.io.OutputStream
import java.net.HttpURLConnection
import java.time.LocalDateTime
import java.time.ZoneId
import java.time.format.DateTimeFormatter
@@ -79,7 +75,6 @@ constructor(
pagingSourceFactory = { pagingSourceFactory.create(api::getHottestPosts) },
)
.flow
.map(::mapToUIPost)
.cachedIn(viewModelScope)
val newestPosts =
Pager(
@@ -88,7 +83,6 @@ constructor(
pagingSourceFactory = { pagingSourceFactory.create(api::getNewestPosts) },
)
.flow
.map(::mapToUIPost)
.cachedIn(viewModelScope)
val searchResults =
Pager(
@@ -97,7 +91,6 @@ constructor(
pagingSourceFactory = { searchPagingSourceFactory.create { searchQuery } },
)
.flow
.map(::mapToUIPost)
val savedPosts = savedPostsRepository.savedPosts.map { it.map(UIPost.Companion::fromSavedPost) }
val savedPostsByMonth
get() = savedPosts.map(::groupSavedPosts)
@@ -112,13 +105,6 @@ constructor(
viewModelScope.launch { readPostsRepository.readPosts.collectLatest { _readPosts = it } }
}
private fun mapToUIPost(pagingData: PagingData<LobstersPost>): PagingData<UIPost> {
return pagingData.map { post ->
val uiPost = post.toUIPost()
uiPost.copy(isSaved = isPostSaved(uiPost), isRead = isPostRead(uiPost))
}
}
private fun groupSavedPosts(items: List<UIPost>): ImmutableMap<String, List<UIPost>> {
val sorted =
items.sortedWith { post1, post2 ->
@@ -140,24 +126,19 @@ constructor(
.toImmutableMap()
}
private fun isPostSaved(post: UIPost): Boolean {
return _savedPosts.contains(post.shortId)
fun toggleSave(post: UIPost) {
viewModelScope.launch {
savedPostsRepository.toggleSave(post)
withContext(mainDispatcher) { SavedPostsWidget(savedPosts).updateAll(getApplication()) }
}
}
private fun isPostRead(post: UIPost): Boolean {
fun isPostRead(post: UIPost): Boolean {
return _readPosts.contains(post.shortId)
}
fun toggleSave(post: UIPost) {
viewModelScope.launch(ioDispatcher) {
val saved = isPostSaved(post)
if (saved) {
savedPostsRepository.removePost(post.toSavedPost())
} else {
savedPostsRepository.savePost(post.toSavedPost())
}
withContext(mainDispatcher) { SavedPostsWidget(savedPosts).updateAll(getApplication()) }
}
fun isPostSaved(post: UIPost): Boolean {
return _savedPosts.contains(post.shortId)
}
suspend fun getPostComments(postId: String) =
@@ -166,13 +147,7 @@ constructor(
is Success -> result.value.toUIPost()
is Failure.NetworkFailure -> throw result.error
is Failure.UnknownFailure -> throw result.error
is Failure.HttpFailure -> {
if (result.code == HttpURLConnection.HTTP_NOT_FOUND) {
throw IOException("Story was removed by moderator")
} else {
throw IOException("API returned an invalid response")
}
}
is Failure.HttpFailure -> throw result.toError()
is Failure.ApiFailure -> throw IOException("API returned an invalid response")
}
}
@@ -192,7 +167,7 @@ constructor(
is Success -> result.value
is Failure.NetworkFailure -> throw result.error
is Failure.UnknownFailure -> throw result.error
is Failure.HttpFailure,
is Failure.HttpFailure -> throw result.toError()
is Failure.ApiFailure -> throw IOException("API returned an invalid response")
}
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2023-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -11,9 +11,12 @@ import app.cash.sqldelight.coroutines.mapToList
import dev.msfjarvis.claw.core.injection.DatabaseDispatcher
import dev.msfjarvis.claw.database.local.SavedPost
import dev.msfjarvis.claw.database.local.SavedPostQueries
import dev.msfjarvis.claw.model.UIPost
import dev.msfjarvis.claw.model.toSavedPost
import io.github.aakira.napier.Napier
import javax.inject.Inject
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.withContext
class SavedPostsRepository
@@ -24,9 +27,14 @@ constructor(
) {
val savedPosts = savedPostQueries.selectAllPosts().asFlow().mapToList(dbDispatcher)
suspend fun savePost(post: SavedPost) {
Napier.d(tag = TAG) { "Saving post: ${post.shortId}" }
withContext(dbDispatcher) { savedPostQueries.insertOrReplacePost(post) }
suspend fun toggleSave(post: UIPost) {
if (savedPosts.firstOrNull().orEmpty().any { it.shortId == post.shortId }) {
Napier.d(tag = TAG) { "Removing post: ${post.shortId}" }
withContext(dbDispatcher) { savedPostQueries.deletePost(post.shortId) }
} else {
Napier.d(tag = TAG) { "Saving post: ${post.shortId}" }
withContext(dbDispatcher) { savedPostQueries.insertOrReplacePost(post.toSavedPost()) }
}
}
suspend fun savePosts(posts: List<SavedPost>) {
@@ -38,11 +46,6 @@ constructor(
}
}
suspend fun removePost(post: SavedPost) {
Napier.d(tag = TAG) { "Removing post: ${post.shortId}" }
withContext(dbDispatcher) { savedPostQueries.deletePost(post.shortId) }
}
private companion object {
private const val TAG = "SavedPostsRepository"
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
<!--
~ Copyright © 2024 Harsh Shandilya.
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
<!--
~ Copyright © 2023 Harsh Shandilya.
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
<!--
~ Copyright © 2023 Harsh Shandilya.
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
<!--
~ Copyright © 2021-2023 Harsh Shandilya.
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
+1 -1
View File
@@ -1,5 +1,5 @@
<!--
~ Copyright © 2021-2023 Harsh Shandilya.
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
+1 -1
View File
@@ -1,5 +1,5 @@
<!--
~ Copyright © 2021-2024 Harsh Shandilya.
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
<!--
~ Copyright © 2022-2023 Harsh Shandilya.
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
<!--
~ Copyright © 2022-2023 Harsh Shandilya.
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
<!--
~ Copyright © 2023 Harsh Shandilya.
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
@@ -0,0 +1,37 @@
/*
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
*/
package dev.msfjarvis.claw.android.ui.lists
import android.annotation.SuppressLint
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.runtime.Composable
import androidx.paging.PagingData
import androidx.paging.compose.collectAsLazyPagingItems
import dev.msfjarvis.claw.common.posts.TEST_POST
import dev.msfjarvis.claw.common.posts.TEST_POST_ACTIONS
import dev.msfjarvis.claw.common.theme.LobstersTheme
import dev.msfjarvis.claw.common.ui.preview.ThemePreviews
import kotlinx.coroutines.flow.MutableStateFlow
@SuppressLint("ComposePreviewPublic", "ComposeUnstableReceiver")
class NetworkPostsTest {
@ThemePreviews
@Composable
fun DefaultPreview() {
val items = List(20) { TEST_POST.copy(shortId = "${TEST_POST.shortId}${it}") }
val flow = MutableStateFlow(PagingData.from(items))
LobstersTheme {
NetworkPosts(
lazyPagingItems = flow.collectAsLazyPagingItems(),
listState = rememberLazyListState(),
postActions = TEST_POST_ACTIONS,
contentPadding = PaddingValues(),
)
}
}
}
+2 -2
View File
@@ -1,5 +1,5 @@
#
# This file was automatically generated by 'versioning-plugin'. DO NOT EDIT MANUALLY.
#
versioning-plugin.versionCode=14100
versioning-plugin.versionName=1.41.0
versioning-plugin.versionCode=15400
versioning-plugin.versionName=1.54.0
+9 -6
View File
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -11,6 +11,7 @@ plugins {
id("dev.msfjarvis.claw.kotlin-android")
alias(libs.plugins.anvil)
alias(libs.plugins.whetstone)
alias(libs.plugins.dependencyAnalysis)
}
android { namespace = "dev.msfjarvis.claw.api" }
@@ -18,17 +19,19 @@ android { namespace = "dev.msfjarvis.claw.api" }
anvil { generateDaggerFactories.set(true) }
dependencies {
api(libs.eithernet)
api(libs.dagger)
api(libs.javax.inject)
api(libs.okhttp.core)
api(libs.retrofit)
api(projects.model)
implementation(libs.dagger)
implementation(libs.javax.inject)
implementation(libs.eithernet)
implementation(libs.eithernet.integration.retrofit)
implementation(libs.jsoup)
testImplementation(testFixtures(libs.eithernet))
testImplementation(libs.eithernet.test.fixtures)
testImplementation(libs.kotlinx.coroutines.test)
testImplementation(libs.kotlinx.serialization.core)
testImplementation(libs.kotlinx.serialization.json)
testImplementation(libs.retrofit.kotlinxSerializationConverter)
addTestDependencies(project)
}
+1 -1
View File
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<issues format="6" by="lint 8.3.0" type="baseline" client="gradle" dependencies="true" name="AGP (8.3.0)" variant="all" version="8.3.0">
<issues format="6" by="lint 8.7.1" type="baseline" client="gradle" dependencies="true" name="AGP (8.7.1)" variant="all" version="8.7.1">
</issues>
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -19,8 +19,9 @@ object CSRFTokenConverter : Converter<ResponseBody, CSRFToken> {
val token =
Jsoup.parse(value.string(), LobstersApi.BASE_URL)
.select("meta[name=\"csrf-token\"]")
.first()!!
.attr("content")
.firstOrNull()
?.attr("content")
.orEmpty()
return CSRFToken(token)
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2023-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -8,7 +8,6 @@ package dev.msfjarvis.claw.api.converters
import dev.msfjarvis.claw.api.LobstersApi
import dev.msfjarvis.claw.model.LobstersPost
import dev.msfjarvis.claw.model.User
import java.lang.reflect.Type
import okhttp3.ResponseBody
import org.jsoup.Jsoup
@@ -32,8 +31,12 @@ object SearchConverter : Converter<ResponseBody, List<LobstersPost>> {
val url = titleElement.attr("href")
val tags = elem.select("span.tags > a").map(Element::text)
val (commentCount, commentsUrl) = getCommentsData(elem.select("span.comments_label"))
val submitter =
getSubmitter(elem.select("div.byline").first() ?: error("No byline element found"))
val submitter = elem.select("div.byline > a.u-author").text()
val userIsAuthor =
(elem.select("div.byline > span").first()?.text() ?: "").contains(
"authored",
ignoreCase = true,
)
return LobstersPost(
shortId = shortId,
title = title,
@@ -45,6 +48,7 @@ object SearchConverter : Converter<ResponseBody, List<LobstersPost>> {
// The value of these fields is irrelevant for our use case
createdAt = "",
description = "",
userIsAuthor = userIsAuthor,
)
}
@@ -55,24 +59,6 @@ object SearchConverter : Converter<ResponseBody, List<LobstersPost>> {
return (countString.toIntOrNull() ?: 0) to commentsUrl
}
/**
* Make a bare-bones [User] object given a byline [elem]. We only need this to be usable for
* displaying in a list.
*/
private fun getSubmitter(elem: Element): User {
val userElement = elem.select("a.u-author")
val avatarElement = elem.select("img.avatar")
val username = userElement.text()
val avatarUrl = avatarElement.attr("src")
return User(
username = username,
about = "",
invitedBy = null,
avatarUrl = avatarUrl,
createdAt = "",
)
}
object Factory : Converter.Factory() {
override fun responseBodyConverter(
type: Type,
@@ -1,5 +1,5 @@
/*
* Copyright © 2023-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -7,8 +7,8 @@
package dev.msfjarvis.claw.api.injection
import com.deliveryhero.whetstone.app.ApplicationScope
import com.slack.eithernet.ApiResultCallAdapterFactory
import com.slack.eithernet.ApiResultConverterFactory
import com.slack.eithernet.integration.retrofit.ApiResultCallAdapterFactory
import com.slack.eithernet.integration.retrofit.ApiResultConverterFactory
import com.squareup.anvil.annotations.ContributesTo
import dagger.Module
import dagger.Provides
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -33,7 +33,7 @@ class ApiTest {
val posts = api.getHottestPosts(1)
assertIs<Success<List<LobstersPost>>>(posts)
val commentsOnlyPosts = posts.value.asSequence().filter { it.url.isEmpty() }.toSet()
assertThat(commentsOnlyPosts).hasSize(2)
assertThat(commentsOnlyPosts).hasSize(1)
}
@Test
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -10,7 +10,6 @@ import com.google.common.truth.Truth.assertThat
import com.slack.eithernet.ApiResult
import com.slack.eithernet.test.newEitherNetController
import dev.msfjarvis.claw.model.LobstersPost
import dev.msfjarvis.claw.model.User
import dev.msfjarvis.claw.util.TestUtils.assertIs
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Test
@@ -38,9 +37,10 @@ class SearchApiTest {
createdAt = "",
commentCount = 3,
commentsUrl = "https://lobste.rs/s/gjlsdg/chatgpt_visits_emacs_doctor",
submitter = User("xenodium", "", null, "/avatars/xenodium-16.png", ""),
submitter = "xenodium",
tags = listOf("ai", "emacs"),
description = "",
userIsAuthor = true,
),
LobstersPost(
shortId = "astcqf",
@@ -50,9 +50,10 @@ class SearchApiTest {
createdAt = "",
commentCount = 0,
commentsUrl = "https://lobste.rs/s/astcqf/implementing_question_answering_system",
submitter = User("asteroid", "", null, "/avatars/asteroid-16.png", ""),
submitter = "asteroid",
tags = listOf("ai"),
description = "",
userIsAuthor = false,
),
)
}
@@ -1,5 +1,5 @@
/*
* Copyright © 2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2021-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -15,7 +15,9 @@ import kotlin.contracts.contract
object TestUtils {
fun getResource(path: String): String {
// Load the JSON response
val uri = javaClass.classLoader!!.getResource(path)
val uri =
requireNotNull(javaClass.classLoader) { "if this is null something has gone very wrong" }
.getResource(path)
val file = File(uri.path)
return String(file.readBytes())
}
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -1 +1 @@
{"username":"msfjarvis","created_at":"2020-04-24T11:41:56.000-05:00","is_admin":false,"about":"Android and Kotlin developer\r\n","is_moderator":false,"karma":574,"avatar_url":"/avatars/msfjarvis-100.png","invited_by_user":"Amolith","github_username":"msfjarvis","twitter_username":"msfjarvis"}
{"username":"msfjarvis","created_at":"2020-04-24T11:41:56.000-05:00","is_admin":false,"about":"Android and Kotlin developer, currently working for [Dyte](https://dyte.io/)","is_moderator":false,"karma":1343,"avatar_url":"/avatars/msfjarvis-100.png","invited_by_user":"Amolith","github_username":"msfjarvis"}
File diff suppressed because one or more lines are too long
+2 -1
View File
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -10,6 +10,7 @@ plugins {
id(libs.plugins.android.test.get().pluginId)
id("dev.msfjarvis.claw.kotlin-android")
alias(libs.plugins.baselineprofile)
alias(libs.plugins.dependencyAnalysis)
}
android {
+1 -1
View File
@@ -1,5 +1,5 @@
<!--
~ Copyright © 2022-2023 Harsh Shandilya.
~ Copyright © Harsh Shandilya.
~ Use of this source code is governed by an MIT-style
~ license that can be found in the LICENSE file or at
~ https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2023 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
+3 -2
View File
@@ -1,5 +1,5 @@
/*
* Copyright © 2022-2024 Harsh Shandilya.
* Copyright © Harsh Shandilya.
* Use of this source code is governed by an MIT-style
* license that can be found in the LICENSE file or at
* https://opensource.org/licenses/MIT.
@@ -7,6 +7,7 @@
plugins {
`kotlin-dsl`
alias(libs.plugins.android.lint)
alias(libs.plugins.dependencyAnalysis)
}
kotlin.jvmToolchain(17)
@@ -78,5 +79,5 @@ dependencies {
// Expose the generated version catalog API to the plugin.
implementation(files(libs::class.java.superclass.protectionDomain.codeSource.location))
lintChecks(libs.androidx.lint)
lintChecks(libs.androidx.lint.gradle)
}
+12 -1
View File
@@ -1,4 +1,15 @@
<?xml version="1.0" encoding="UTF-8"?>
<issues format="6" by="lint 8.3.0" type="baseline" client="gradle" dependencies="false" name="AGP (8.3.0)" variant="all" version="8.3.0">
<issues format="6" by="lint 8.7.1" type="baseline" client="gradle" dependencies="false" name="AGP (8.7.1)" variant="all" version="8.7.1">
<issue
id="GradleProjectIsolation"
message="Avoid using method getRootProject"
errorLine1=" val collectorTask = project.rootProject.tasks.named&lt;Copy>(&quot;collectLintReports&quot;)"
errorLine2=" ~~~~~~~~~~~">
<location
file="src/main/kotlin/dev/msfjarvis/claw/gradle/LintConfig.kt"
line="51"
column="33"/>
</issue>
</issues>

Some files were not shown because too many files have changed in this diff Show More