pachli-android/core/navigation
Nik Clayton 41c702fc1b
change: Display "About" information in tabs (#420)
Previously, `AboutActivity` had buttons and links to show the privacy
policy and licenses of dependencies.

Change this to a selection of fragments in tabs, one tab each for:

- General "About" information
- Licenses
- Privacy Policy

The information shown hasn't changed, but this lays the groundwork for
including additional tabs in the future for information like server
rules, detected capabilities, or troubleshooting information.
2024-02-06 00:43:26 +01:00
..
src/main change: Display "About" information in tabs (#420) 2024-02-06 00:43:26 +01:00
README.md refactor: Break navigation dependency cycles with :core:navigation (#305) 2023-12-07 18:36:00 +01:00
build.gradle.kts refactor: Break navigation dependency cycles with :core:navigation (#305) 2023-12-07 18:36:00 +01:00
lint-baseline.xml refactor: Break navigation dependency cycles with :core:navigation (#305) 2023-12-07 18:36:00 +01:00

README.md

:core:navigation

package app.pachli.core.navigation

Intents for starting activities to break circular dependencies.

A common approach for surfacing type-safe (ish) intents to start activities is for the activity-to-be-launched to provide a method in a companion object that returns the relevant intent, possibly taking additional parameters that will be included in the intent as extras.

E.g., if A wants to start B, B provides the method that returns the intent.

This introduces a dependency between A and B.

This is worse if B also wants to start A.

For example, if A is StatusListActivity and B isViewThreadActivity. The user might click a status in StatusListActivity to view the thread, starting ViewThreadActivity. But from the thread they might click a hashtag to view the list of statuses with that hashtag. Now StatusListActivity and ViewThreadActivity have a circular dependency.

Even if that doesn't happen the dependency means that any changes to B will trigger a rebuild of A, even if the changes to B are not relevant.

This package contains Intent subclasses that should be used instead. The quadrant plugin is used to generate constants that can be used to launch activities by name instead of by class, breaking the dependency chain.

If the activity's intent requires specific extras those are passed via the constructor, with companion object methods to extract them from the intent.

Using the intent classes from this package is enforced by a lint IntentDetector which will warn if any intents are created using a class literal.