* Add user activity sensor from health services for Wear OS
* Only add health services if device supports it
* Move library initialization to after isEnabled check
* Review comments
* Support zone name only location tracking
* Update strings to match iOS
* Only add Sent location setting on supported versions
* String updates
* Simplify code as the setting is always on
* Save cloud URL separately and add pref
- Save the cloud / remote UI url that is received during registration separately, and add a preference to use the cloud url instead of the external url
- Save the cloud / remote UI url and cloudhook url received during webhook config updates, to be able to support using cloud after the app was set up
- Clean up cloudhook url when logging out
* Add UI for "Use Home Assistant Cloud" url
* Cleanup
* Fix function order
* Use compressed entity changes for device controls
- Add support for the subscribe_entities websocket subscription which delivers initial state + changes in a compressed format to reduce data usage
- Use the new subscribe_entities format in device controls on supported Home Assistant versions
* Less duplicate code
* Request notification permission during onboarding
- When using Android 13 or the minimal version, add a screen to onboarding to request to enable notifications on the device. This screen is based on iOS onboarding. When tapping Continue, on Android 13 this requests the system permission and/or on the minimal version this changes the websocket setting.
- Compile with and target SDK 33 (targeting required to be able to request notification system permission on demand)
* Add notification settings link in settings when off
- Show a new setting in settings for the user to enable notifications for the Home Assistant app, either because the permission was denied (Android 13) or the user manually turned off all notifications (Android 8-12).
- This new setting replaces the notification channels setting when everything is off; in this case there is no point managing individual channels. If at least one channel is on, the existing notification channels setting is shown instead.
* Compose tweaks
- Remove redundant content description for icon
- Change to a simpler scroll modifier
* Fix skipping notifications on minimal version
- Ensure that the value is actually saved to the database
* Post Bluetooth on/off commands as if invalid
- When using Android 13, post notification commands to control Bluetooth on/off as a normal notification as if they were invalid, as the function has been deprecated for the app
* Remove type that can be inferred
- Update Gradle to latest version (7.5.1)
- Update Android Gradle plugin to latest version (7.3.0)
- Move package property out of manifest into gradle build files namespace as recommended
* Merge Follow Home Assistant/Follow System Settings theme
- As these two themes behave the same now, don't present two options but instead just one. The default setting has been renamed back to "Follow System Settings" to best match expectations. Internally the "android" setting still works, settings will show "Not set".
* Remove useless webview force dark
- The WebView force dark settings are no longer required (and will no longer be supported when targeting Android 13), as the latest appcompat/webview/HA frontend already respect the app's theme setting and allow overriding it
* Add support for showing custom icons in device controls
* Clean up and set color based on state
* Set icon size and adjust colors based on domain
* Move color values to resources and add more color options from source
* Review comments
* Only set the icon if it exists in the library
* Fix websocket subscription race/dropping first message
- Fixes a race condition in the websocket repository for subscriptions, where the first message in a subscription might be dropped because the Flow + ProducerScope that handle the message weren't set up until after the subscription confirmation was received.
- Inspired by home-assistant-js-websocket, make sure the response + subscription handlers are set up immediately after _sending_ the initial message. To make sure no messages are dropped, it'll now use a Channel to buffer event messages while not yet ready to receive them. The Channel will be collected inside the existing Flow that is only active while there are subscribers.
- Send unsubscribe when receiving events for a subscription that isn't handled by the app.
* Fix websocket notifications causing unsubscribe
* Add commands to control screen brightness and a sensor to get the value
* Minor file clean up
* Review comments
* Rename Device Settings to Display Sensors
- If the app checked for an active subscription right in between removing the flow and removing the subscription ID, this could result in an invalid state. To prevent this, use the same mutex that is used when obtaining the subscription when unsubscribing so that it is either completely removed or not removed at all.
- Remove non-null assertion !! for the returned flow, at this point it is better to return an empty flow than to crash.
* Add support for using BSSIDs for internal connection
- Add support for entering BSSIDs to use for detecting when the internal connection URL should be used. These are saved like any regular SSID, but contain the prefix "BSSID:".
* Add link to documentation
* Improve adding quick settings tiles
- Use the new option available on Android 13 to prompt the user to add a tile to the quick settings panel, if a tile wasn't already added
- Switch Toast to Snackbar
- Move some logic from the manage tiles view to viewmodel
* Only show subtitle field when supported
- Setting a tile subtitle is only supported on Android Q+, so don't show the field on versions before that!
* Deeplink into app for tiles that aren't setup
- Instead of disabling a tile if it isn't setup, if the user is logged in set it up as inactive with the default icon/label and deeplink into the app settings with a notice that it needs to be setup first. This provides a better first use experience, as the user can simply tap it to setup instead of requiring them to manually go to the settings.
- If the app tries to start a new websocket subscription before the last one was properly unsubscribed, the app will return a flow that is null and crash. To prevent this, change the unsubscribe logic to immediately remove the subscription ID - the confirmation isn't used. This will allow the app to start a new subscription and create a new flow even if the previous unsubscribe hasn't yet fully finished (which is OK).
* Always do Wear onboarding on phone
- Switch the Wear onboarding to always use the sign in flow on the paired phone, instead of offering the option to sign in completely on the watch.
- When opening the companion app using the Wear app, immediately link the user to the list of instances or sign in screen.
- Use standard OAuth flow for devices without companion app installed.
- Fix type casting of location preference in Wear onboarding result.
* Fix ListenableFuture await import
* Add BLE Beacon Monitoring Sensor
* Fix on/off toggle
* Add on/off commands
* Fix commands
* Add all beacons to attributtes
* Add Kalman Filter
* Improve performance
* More settings
* cleanup
* Fix linter errors
* Update description
* Show monitoring state in sensor
* Add missing permissions
* Fix permissions
* Fix Bluetooth state of Android 12
* Use instance instead of singelton
* Use runBlocking for updateLastSendState
* Use own scope for beacon manager
* Use new notification commands
* fix rebase
* use null instead of empty string
* return if sensor is disabled
Implement subscribe_trigger and use it in widgets
- Implement support for subscribing using subscribe_trigger, currently used to get state changes only for specific entities
- Change the entity state and media player widgets to use this new subscription instead of subscribing to all state changes, based on the template widget
- Removed some placeholder code from media player widget
* Add setting to bypass app lock on home network
* Debug loging to check logic
* Fix logic. Cleanup logging.
* Disable home lock bypass when no home networks are configured.
* Only check for WiFi SSID, not internal URL when evaluating isLockEnabled.
* Fix build error
- Add support for the new feature where core might combine multiple responses in to one single websocket message if it's faster. This might return a JSON array of objects instead of a single object.
- Adjust logging for websocket, no longer prints entire result on non-debug builds.
- Catch exceptions thrown when executing calls to change an entity state instead of crashing the app
- When revoking a session fails continue with logout as the server might no longer be available and the user otherwise might be 'locked in' with no way to change the server
* Always collapse headers and add favorites section
* Remove unneeded entity update subscription
* Process comments
* Use shorthand for favorites loop in MainView
* Update WebSocketRepository for multiple subscriptions of same type
- Change the structure of how the websocket repository tracks individual subscriptions to allow subscribing multiple times with the same type, but different data
* Update TemplateWidget to use template subscriptions
- Instead of depending on entity state changes and refreshing any time there is a change, use the render_template subscription for the template widget to limit the amount of data and power used. To make this possible without too much abstractions, the TemplateWidget no longer implements BaseWidgetProvider.
- Fix hardcoded "Loading" string
* Handle potential null subscription ID
- Implements #2795 for changes to tracked subscription ID
* Handle failed subscribing similar to other failures (null)
- When subscribing fails, return null and don't store an active subscription instead of continuing and returning a flow (which would never emit messages)
* Update manifest