* Multiserver foundation
- A foundation to build multiserver support on. Not ready for general use.
* Update new vehicle support
* Rebase fixes
* Multiserver settings
- Show settings for the correct server when editing server settings from the settings
* Bind session to device/install
- Save an install id with the app install to make sure that it isn't re-used on another device causing issues
* Add migration
- Migrate server info from shared preferences to the database after database migration and clean up
- Remove unused url shared preferences
- Read/save server version from/to database
* Fix auth error when session is refreshed
* Show server name instead of URL
- Read the server name when getting the config, and save it to the database
- Allow the user to override the server name in the app's settings
* Multiserver notifications
- Make notifications aware of which server sent the notification
- Show server name in notification if more than 1 server is added to the app
- Use the server-specific repositories when calling webhooks/authenticating/etc
* Handle multiserver in websocket worker
- Copy the settings database row to the new server ID to allow for server-level settings (websocket) while keeping the original for app-level settings (sensor update frequency), and handle this in onboarding
- Make the websocket worker check in on all servers and open/close connections where required
- Add the webhook_id to websocket notifications to link them to servers
- Update ServerManager servers to defaultServers because I'm using the same filter everywhere
* Migrate shared preferences
- Move server-specific device name to Server and secret key to ServerConnectionInfo
- Add a server ID key to the remaining shared preferences and migrate existing values
* Add option to delete server from settings
- Allow deleting servers directly from the app's settings, because you might not be able to do so from the frontend.
* WebView switching and active server management
- Allow switching which server is considered 'active' and used for the webview when loading
- On auth errors remove the server instead of removing the URLs (?)
- When getting external auth consider that the server might just have been removed (possible race condition from frontend which frequently causes 1 unauthorized connection when logging out)
- Fetch config after adding a new server to fill in name and version before first use
* Sync registrations and blocking load
- When starting the app, sync all registrations
- Remove Wear state with server but new registration required
- When receiving a new push token, update all registrations
- Do a blocking load for getting the servers because otherwise the app might think it's not registered when running in the background
* Use StateFlow for the server list
- Don't manually refresh but use a StateFlow to get updates pushed when the list of servers changes
- Make settings use unique server keys to prevent constant remove/re-add
* Sensor updates and sync with multiple servers
- Send sensor updates to all servers and sync changes to the app. Sensors are shared across all servers the app is connected to so changing enabled state on one server will update it for all servers.
- Don't update sensor enabled state for location tracking directly from onboarding, this should be done in the result.
- Remove unused SensorWithSettings class
* Send NFC tag scans to all servers
* QS tiles server selection
- Listen to updates for a specific server
- Allow selecting server if there is more than one
* Shortcuts server selection
- Allow selecting server if there is more than one
- Extract OutlinedButton with DropdownMenu for server selection to a standalone Composable
- Update QS tiles to not automatically reset server ID when server no longer exists, align with shortcuts
* Fix revoked sessions + crashing app
- When a session is revoked update the session object to reflect it
- Fix app crashes on revoked sessions because of race conditions with the AlertDialog causing window active/inactive at the same time as finishing it
* Extra server onboarding tweaks
- Skip welcome and location
- Save/fix notification preference for minimal version
* Fix sensor state type conversion errors for new servers
- If the state is removed but the type isn't, this can result in unwanted conversions throwing errors so remove the state type as well when copying a sensor
* Matter multiserver
- Request specific server ID in Matter functions
- Add server selection to shared Matter device flow
* Android Auto multiserver
- Allow switching server in Android Auto. Defaults to active server, note that it doesn't change the default but only changes it in AA.
* Widgets server selection
- Add server selection to all widgets and update handling to use the selected server
* Clean up TODOs out of scope
* Device controls multiserver
- Subscribe to updates for each server that controls are added for
- Allow managing lock screen enabled controls for each server
* Don't try to register sensors when finishing
- Don't try to do a sensor update when finishing, as this may cause unintended use of resources we're trying to clean up (when deleting a server)
* Server-level zones and location tracking
- Keep track of which server a zone belongs to for location tracking, and send updates only to that server
- Add server name to zone selection setting
* Merge fix
* Show 'Activate Server' any time there are multiple servers
- If the user is looking for the option to go to their server why hide it if it is already used, making them go back twice?
* More consistent strings
* Improve add server feedback in settings
- Preserve the activate server before adding a new one to prevent unexpected active server changes
- Show a Snackbar when another server is added indicating success with a button to activate it, or failure
* Remove unused ServerManager
* Fix tag import
- Update images to align with Matter branding guidelines
- Remove "shared" from screens as this flow is also used for fast pair where it makes no sense
* Move server settings to a server settings screen
- Move server-specific settings to a new screen to be accessed from the main settings only containing server specific settings in preparation for multiserver
- Sensors is currently not server-specific even though one setting is stored by server ID, to be fixed later
* Store app preferences in another shared preferences file
- Store app preferences not in the integration shared preferences file, but in the shared preferences file for general prefs (it is named themes but there are already other app-level prefs in it)
- Move Wear specific preferences to it's own repository + shared preferences file
* Improve server row with local data
- While we don't have a server name or user name, show the registration name when available to improve the server row layout
* Simplify location permission request code
- Remove the flexible permission requests as it isn't used in the current settings structure, only expect location permissions
- Switch from the deprecated functions to the new flow using activity result contracts
* Remove unused string
* Initial commit of wear OS notifications
* Update to allow message and title
* Move constants to object to reduce imports
* Split up logic to match phone app
* Update readme and set websocket to false for wear OS
* Bump firebase BOM
* Initial work on Android Auto support.
* Get some toggling working, add a main view that is useful.
* Make sure we can test this on every commit.
* Migrate to full flavor.
- Add option to quick settings tile to only allow interacting with it when the device is unlocked, similar to device controls on Android 13 (but phrased differently to match the system default behavior)
- Add a lot more quick settings tile services
- Enable QS tile services only for tiles up to the highest tile # in use + 4, with a minimum of 12, to prevent long lists and make it work 'automagically'
* Update instead of cancel notification on reply
- When a notification is replied to, update it instead of cancelling it to allow the other to continue manipulating it
* Support multiple replies
- Keep a history of replies in the bundle to match system behavior
* Only keep replies that are actually shown
* Update Matter dependency
* Improve shared device commissioning
- Show device name if available
- Show error codes if returned
* Show toast for commissioning request errors
- When an error occurs for commissioning requests/before the Play Services UI is shown, show a toast informing the user that Matter is currently unavailable. Most user-facing errors will be shown in the Play Services UI (during commissioning).
* Add setting to start the app always on the first dashboard view
* Run linting
* Do not close SettingsActivity
* Only show first view if not in HA Config + Fix flash of dashboard when navigating to app settings
* Scroll to top when calling first view of dashboard
If we are on a another view a we are scrolled to the bottom, the first view will be also at the bottom
* Use default dashboard as starting dashboard
* Allow HA config dashboard to call the first view of dashboard
- Also disallow /hassio (Home Assistant addons) to call the first view
* Enhance show first view setting description
* Fix class name spelling LifecycleHandler
* Fix calling first view of dashboard on config/areas and config/automation
Co-authored-by: Justin Bassett <bassett.justint@gmail.com>