Skip to content

Conversation

garanj
Copy link
Contributor

@garanj garanj commented Sep 29, 2025

Watch Face Push allows the developer to supply a default watch face. However, this watch face will not be updated when the containing app is updated.

To enable this behavior, this PR adds a receiver for the MY_PACKAGE_REPLACED action.

When triggered, this creates a WorkManager job which checks to see whether the newly-supplied package contains an update for the default watch face. This requires checking to see if the default watch face is already installed, and whether the latest version is greater than the existing installed version.

This PR also modifies the build process to keep the default watch face and Wear OS app version code aligned at all times, so if a change is made to the default watch face, it is not necessary to manually change the watch face version code - it is enough to increment the overall app version code.

Copy link
Contributor

Summary of Changes

Hello @garanj, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request introduces a crucial feature for Wear OS applications that provide a default watch face: the ability to automatically update that watch face when the main application itself is updated. By leveraging a BroadcastReceiver for package replacement events and orchestrating the update through WorkManager, the system can reliably check for and apply newer versions of the default watch face. This enhancement ensures that users always have the latest version of the default watch face without manual intervention, improving the overall user experience and simplifying the development workflow by synchronizing watch face and app versioning.

Highlights

  • Automatic Watch Face Updates: Introduced a new mechanism to automatically update the default watch face when the containing application is updated, addressing a previous limitation where default watch faces would not receive updates.
  • Package Replacement Listener: Added a BroadcastReceiver that listens for the MY_PACKAGE_REPLACED action, which triggers the watch face update process when the main application package is replaced (e.g., during an app update).
  • WorkManager Integration: Utilized Android's WorkManager to schedule and execute the watch face update logic asynchronously. This ensures that the update process is handled reliably in the background, checking for newer versions and applying them.
  • Version Code Synchronization: Modified the build process to automatically align the default watch face's version code with the main Wear OS app's version code, simplifying maintenance and ensuring consistency across updates.
  • Dependency Addition: Added the androidx.work:work-runtime-ktx library as a new dependency to support the WorkManager implementation.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Contributor

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request introduces a mechanism to automatically update the default watch face when the main application is updated. The implementation uses a BroadcastReceiver for MY_PACKAGE_REPLACED which triggers a WorkManager job. The overall approach is sound, but I have a few suggestions to improve code quality, correctness, and resource management.

My main points are:

  • In UpdateReceiver, the onReceive parameters can be non-nullable, simplifying the code.
  • In UpdateWorker, there's a potential resource leak with ParcelFileDescriptor that should be fixed using a use block.
  • The worker should return Result.failure() when an error occurs to correctly signal the job status.
  • I've also pointed out some opportunities for code simplification and improving maintainability, such as removing a redundant appContext property and extracting a magic number from the Gradle scripts into a version catalog constant.

@garanj garanj merged commit f194cd3 into android:main Oct 7, 2025
4 checks passed
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.

2 participants