Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor: AmbientAware API change #2472

Merged
merged 7 commits into from
Dec 6, 2024

Conversation

yschimke
Copy link
Collaborator

@yschimke yschimke commented Dec 4, 2024

WHAT

This change refactors the AmbientAware API to make it more intuitive and easier to use.

The following changes were made:

  • The AmbientAware composable moves to the screen level
  • The AmbientStateUpdate class was merged into AmbientState.
  • The AmbientState sealed interface now has a data object Interactive and a data class Ambient to store AmbientDetails, as well as Inactive.

WHY

HOW

Checklist 📋

  • Add explicit visibility modifier and explicit return types for public declarations
  • Run spotless check
  • Run tests
  • Update metalava's signature text files

This change refactors the `AmbientAware` API to make it more intuitive and easier to use.

The following changes were made:

- The `AmbientAware` composable function now takes a `State<AmbientStateUpdate>` as a parameter instead of an `AmbientStateUpdate`.
- A `AmbientStateUpdate` class was added to provide details about the current ambient state, including the time of the change, isInteractive, and isAmbient.
- The `AmbientState` sealed interface now has a data class `Interactive` and a data class `Ambient` to store AmbientDetails.
This change refactors the `AmbientAware` API to make it more intuitive and easier to use.

The following changes were made:

- The `AmbientAware` composable moves to the screen level
- The `AmbientStateUpdate` class was merged into `AmbientState`.
- The `AmbientState` sealed interface now has a data object `Interactive` and a data class `Ambient` to store AmbientDetails, as well as Inactive.
@yschimke yschimke marked this pull request as ready for review December 5, 2024 13:56
@yschimke
Copy link
Collaborator Author

yschimke commented Dec 5, 2024

@garanj @kul3r4 Can you take a look again, it's much simpler. If we ignore some of the weirdnesses with two things on screen, I think we can just use the current nav lifecycle to control when it's enabled.

Won't work for a pager, but maybe that's ok?

@yschimke yschimke closed this Dec 5, 2024
@yschimke yschimke reopened this Dec 5, 2024
@yschimke yschimke closed this Dec 5, 2024
@yschimke yschimke reopened this Dec 5, 2024
@yschimke yschimke merged commit f8ccc68 into google:main Dec 6, 2024
6 checks passed
yschimke added a commit to yschimke/horologist that referenced this pull request Dec 6, 2024
This change refactors the `AmbientAware` API to make it more intuitive and easier to use.

The following changes were made:

- The `AmbientAware` composable moves to the screen level
- The `AmbientStateUpdate` class was merged into `AmbientState`.
- The `AmbientState` sealed interface now has a data object `Interactive` and a data class `Ambient` to store AmbientDetails, as well as Inactive.

---------

Co-authored-by: yschimke <[email protected]>
(cherry picked from commit f8ccc68)
@yschimke yschimke mentioned this pull request Dec 6, 2024
4 tasks
yschimke added a commit that referenced this pull request Dec 6, 2024
* Refactor: AmbientAware API change (#2472)

This change refactors the `AmbientAware` API to make it more intuitive and easier to use.

The following changes were made:

- The `AmbientAware` composable moves to the screen level
- The `AmbientStateUpdate` class was merged into `AmbientState`.
- The `AmbientState` sealed interface now has a data object `Interactive` and a data class `Ambient` to store AmbientDetails, as well as Inactive.

---------

(cherry picked from commit f8ccc68)

* Fix: Handle missing AmbientLifecycleObserver in Robolectric (#2474)

* Fix: Handle missing AmbientLifecycleObserver in Robolectric

Handles missing AmbientLifecycleObserver in Robolectric tests by catching NoClassDefFoundError and returning null instead of crashing. This allows ambient-aware composables to be tested in Robolectric without requiring a real device or emulator.

---------

(cherry picked from commit 6cd025b)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants