* Don't include devices twice in Bluetooth list
- Don't include Bluetooth devices twice in the devices list when using it for location-related functions. Do allow duplicates for the BT sensor for backwards compatibility.
* Switch high accuracy mode BT constraint to device address
- Change the Bluetooth device constraint for high accuracy mode for location updates to use the Bluetooth device address instead of the device name to ensure uniqueness + fix crash in sensor settings screen
- Set padding in Scaffold because lint doesn't seem to like ignoring it
* Migrate high accuracy mode BT constraint names to addresses
- When enabling the high accuracy mode, make sure that all data for the Bluetooth device constraint is a Bluetooth device address and if not try to match it to a device.
- Because the database can contain devices that are not currently paired/connected, without changing to a new setting this check always must be executed, which is why it is placed in the function for enabling the high accuracy mode.
* Also show user-friendly labels in sensor settings detail screen
- Update the sensor settings detail screen to also show a user-friendly label for list settings on the main screen, before opening a dialog. This will use the same function as when the dialog info is populated, which simplifies code.
- Merge SensorSettingType.LIST with other list types rows in sensor settings detail screen, remove getSettingTranslatedEntry in viewmodel which is no longer necessary.
* Fix empty Bluetooth list setting value when off
* Bump reorderable and fix breaking changes
* Only include reorderable with full version
* Improve "Wear Favorite Entities" screen design
- Fix too small touch targets for dragging
- Fix no background resulting in overlapping text when dragging
- Update design to standard Material design
- Re-use Composable for selected and unselected favorite entities
* Add dagger module for daos
* Update classes in common to inject daos
* Update app view models to use inject
* Use inject with widgets
* Update app activities and fragments to use inject
* Clean up imports
* Make TileExtensions use coroutines
- Instead of silently failing, inform the user that a sensor cannot be enabled due to missing permissions and provide a link to change the setting. If possible, name the specific permission that is required.
* Sync sensor enabled state from app to core
- Change sensor 'registered' to indicate not registered, registered as disabled or registered as enabled
- When a sensor is disabled, set it's status as such on core 2022.6 servers
- In the sensor registration, use the basic sensor details in case there is no info in the database that can be used
* Clean up version check
- Now that there is a standard function to get the version, re-use it
* Improve which sensors are synced to core
- Update database migration to reset registration state on db upgrade to make sure the information is correct for all sensors
- Only sync sensors that are actually available on the device
- Fix registering all sensors on core <2022.6 on app/core version change
- Fix unnecessary sensor updates due to location sensors which are never registered always triggering update on core >=2022.6
* Sync sensor enabled state from core to app
- After pushing app enabled changes to core, if on core 2022.6 check if the enabled state for any of the sensors is different from what is registered in the app and try to update the sensors. This is done by reading the entire config, because otherwise we wouldn't know about sensors that have been enabled and the app already updates all sensors at the same time so no need for tracking individual updates in the sensor update response.
- Restore getting config using webhooks, because only the webhook config contains information about entity enabled state
- Add support for opening a specific sensor's settings page, used for the notification when trying to enable a sensor that requires granting (additional) permissions
* Update Media Player Widget Preview
* Add support for multiple media players. optionally show media source label
* fix crop of media player widget preview image. avoid unnecessary api call's when finding active media player. add db migrations. add text color to media source label. set default value of showsource to false.
* remove placeholder source for source icon to fix widget preview
- Use unique tags to allow identifying which function receives an error
- Actually use the onReceivedSslError callback error
- Also show SSL errors in the external auth callback
* Provide Compose preview for Play Store listing screens
* Update previews for onboarding
- Set theme correctly and show system UI
- Add variant for dark mode
* Update Wear OS listing image
* Remove specific icon, we can use domain default
* Improve time zone sensor string
- Update string to reflect if the time zone is using summer/daylight savings time or not
- Use the user's language settings instead of always using English
* Keep using English for sensor state
- Catch any exceptions thrown during app registration (after webview login) instead of crashing. There should only be a few errors possible here that are not encountered in the webview.
- Set dialog theme to fix background on API <31
- Set the width of the LazyColumn, which provides the scrollable container for this screen, to the full width of the screen to also allow scrolling the screen when touching on the right of narrow buttons
- The touch target for the refresh button is really small and there aren't any other conflicting actions, so allow tapping anywhere to refresh the content