- Update Assist on Wear to automatically open the login screen when logged out, instead of asking the user to close and login, to prevent text being cut off issues
- Add another item at the top of Assist on Wear to allow the pipeline selector to be scrolled into the center of the screen (the first item cannot be scrolled into the center of the screen)
- To (hopefully) finally address review failures about text being cut off on round screens replace it with an icon. Same icon as used in the previous screen so should be pretty clear.
* Support multiple Template tiles on Wear OS
* Add `TemplateTileConfig` data class
* Fix migration
* `Pair` -> `TemplateTileConfig` fixes
* Fix `getAllTemplateTiles` implementation
* Initial work on companion <-> wearable device communication
* More work on phone <-> wear device communication
* Save updated template in phone app
* Get the template to render using the right method
* Fix CI complaints
* Work on Wear UI for multiple template tiles
* Update wear manifest
* Wear migration and navigation fixes
* Fix Template tile IDs in mobile app
* Make adding a new Template tile on Wear device work
* Small cleanups and TODO fixes
* Try to fix template config refresh in settings
* Fix after rebase
* Adopt blocking approach for reacting to tile events, inspired by #3974
* Use `OpenTileSettingsActivity` for template tile
* Adopt Material 3 and other UI-related changes
* Show help text in phone app if no template tiles have been added yet
* Reference the view model variable inside the function
By having the view model variable outside the block, the updated template tile
might not be propagated to the template settings view.
* Reload template tiles when opening the template tiles from settings
* Replace null key with -1 for old template tile
* Lint complaints fixes
* remove TODO
* Store error
* Scrollable list of template tiles
* Move "Configure template tile" to header
* Replace with methods with copy
* Show template as secondary text
* Fix scrolling
* Update app/src/full/java/io/homeassistant/companion/android/settings/wear/views/SettingsWearTemplateTileList.kt
Co-authored-by: Joris Pelgröm <jpelgrom@users.noreply.github.com>
* Remove unused field
* Move padding to "no tiles" text
* Add deep link
---------
Co-authored-by: Joris Pelgröm <jpelgrom@users.noreply.github.com>
- Addresses the following warning: The option setting 'android.defaults.buildfeatures.buildconfig=true' is deprecated. Each module uses the BuildConfig class so it's added everywhere.
* Add Wear OS TLS client certificate authentication (TLS CCA) support
Wear OS does not currently allow the user to install certificates to the
system-wide KeyChain for TLS CCA support. This commit adds support for
using certificates from the app-specific Android KeyStore with UI for
setting up a certificate during the Wear OS onboarding process.
The manual step in the onboarding process is required since we cannot
transmit certificates of the Android KeyChain because they are not
extractable.
In particular, this commit adds the following changes:
* KeyStoreImpl as an additional KeyChainRepository interface
implementation for loading and storing keys to the application's
KeyStore. TLSHelper uses KeyStoreImpl as a fallback key manager.
* UI for selecting a certificate file with GET_CONTENT intent during
Wear OS onboarding in OnboardingActivity if it is detected that the
Home Assistant may require TLS CCA. The UI includes a password check
for the PKCS12 container.
* During onboarding the app sends the raw PKCS12 data to Wear OS
together with the container password. The connection is assumed to be
encrypted and trusted so that no additional encryption is necessary.
* Move PKCS12 password check to lifecycle scope
* Remove redundant try-catch when loading PKCS12
* Simplify MobileAppIntegrationView layout code
* mobile_app_notification_cleared for wearos
* Fix imports
* Remove database id extra
* Fix whitespace
* Reformatted imports and added the receiver to the manifest
* Move `handleDeleteIntent` to common
Update tiles logged out state to prevent cut off overflow
- Limit length of logged out state string to prevent text cut off and shorten strings to help with translations
- Fix inconsistent shortcuts tile name
- Updates the shortcut tile's handling of add/remove event + destroying the service, just like the camera tile, to prevent the service scope being cancelled while the app is still storing tile added/removed
- (this service already didn't overwrite existing tile data when onTileAddEvent was called again)
* Update launcher icon, Play Store feature graphic
- Update launcher icon to better match other Android app launcher icon sizes
- Update Play Store feature graphic to new version
* Cannot deduplicate this launcher icon on Wear
* ktlint
- If there is already a camera tile with the ID of the tile in `onTileAddEvent` stored in the database, don't overwrite it with a new blank tile as the user configuration might be lost.
- Run add/remove event code blocking to prevent the system immediately destroying the service and as a result cancelling the work to save tile data in the database. Without the blocking code I could semi-reliably get it to destroy the service within several milliseconds of adding/removing, often preventing the database code from running.
* Update complication config screen to m3 components
* Clean up some code so its resuable
* Review comments and bump library
* Migrate more screens
* Review comments
* Tweak some colors
* Use consistent button container color
* Remove unnecessary font color
* Tweak Button disabled color to match ToggleButton
* Update a couple more chips and a preview
* Use in app color default
* Update manual onboarding screen to prevent the button from overlapping elements
* Limit to 2 lines of text
* Switch to ScrollView
* Add padding for round devices
* Review comments
* First commit of migrating Wear OS components to Material 3
* Tweak more colors, fix some variables, use switches and bold more text
* More clean up
* Fix color in default chip
* Clean up unused code
* Add first draft for NFC sensor
* Rename NfcSensorManager.nfcSensor to nfcStateSensor
* Move NfcSensorManager to the common module
* Add BroadcastReceiver subscription to NfcAdapter.ACTION_ADAPTER_STATE_CHANGED in both the app and wear modules
* Remove TODO comments
* Change updateType to INTENT
* Convert simple methods to expression body
* Change mdi:nfc to mdi:nfc-variant
* Fix docs URL
* Reword NFC sensor manager according to the PR suggestions
* Use recommended splash screen library for Wear OS
* More tweaks per recommendations
* Add splash screen to Assist
* Add splash screen for Assist
* Use mipmap instead of drawable
ListHeader: set overflow, limit lines based on font size
- Set overflow for ListHeader to ellipsis instead of cutting of text
- Set the maximum number of lines for ListHeader based on the font size
- Center text in the list header for nicer appearance in case of multiple ines
* Update icon
- Replace old icon with the new icon
- Update app primary color to new blue tint
- Deduplicate resources
* Update feature graphic
* Decouple app icon color from main color
- The recent switch to Horologist modifiers for rotary input broke after the first screen because of manual focus requesting, and the refresh interval picker in general so also switch that to a Horologist modifier.
* [WIP] Prepare camera snapshot tile
* Deduplicate refresh views
* Get/save tile config in the database
* Deduplicate haptic click, add to camera refresh
* [WIP] Camera tile settings UI
- Create UI to set camera tile settings
- Reuse shortcut tile settings activity as a general tile settings activity
* Rename camera snapshot tile to camera tile
* Cleanup: camera entities selection, empty state, preview image
- On initial load also create a list of camera entities to make it possible to select them without showing up elsewhere in the app
- Add text to empty state instructing the user to set a camera
- Update tile preview images
* Fix logged out state on missing tile config
* Force tile update on login
* Scale bitmap to fit inside screen size
- Scale the received image to a bitmap that does not exceed the screen size to ensure timely refreshes and prevent parcels that are too big
- Update to Kotlin 1.9
- Update to Compose 1.5 and Compose Wear 1.2, both depend on and are required for Kotlin 1.9. Compose Wear includes lazy classes moving to a different package so updated imports.
- Update to AGP 8.1.1 to remove compatibility warning
- Update Navigation Compose to 2.7.1 as it uses Compose 1.5 internally
- Update Accompanist to 0.32 as it uses Compose 1.5 internally
- Switch Room to KSP instead of kapt because this (latest stable) release doesn't work with Kotlin 1.9 otherwise. As a result, we no longer need to specifically enable incremental compilation.
* Android Auto: Set icon color when entity is considered in an active state
* Add link to frontend code for determing active state
* Add lawn_mower domain and a check on supported colored domains
* Split up isActive and state colored domains
* Update map screen
* [WIP] Widget tap action: toggle entity
* Add feedback on press and failure
* Share code for pressing on entities
* Align cover press action
- Toggle will stop if possible when opening/closing if supported so prefer toggle instead of open/close
* Toggle by default if supported
- Set the default tap action for supported entities to toggle instead of refresh
* Update widget description
Assist last used: remember STT and record before connected
- For the last used pipeline for Assist, remember whether or not it supports STT input, and if it does start recording proactively/as soon as possible to avoid missing voice input while doing network checks.
- Fix potential wrong server while sending voice data.
- Fix voice input remaining active after getting an error response.
* Initial work on migrating plugins to catalogs.
* Remove Enterprise Build profiling since we really don't use it.
* Use a common Java Version and sdk versions.
* ktlint
* Review comments.
Fix: allow selecting unavailable entities for complications/tiles
- It should be possible to choose an unavailable entity for display on a complication or tile, as you can with favorites, and even entities that are available now can become unavailable later