* Check if device supports BLE transmitter
* Always send a state instead of blank string
* Add attribute if transmitter is supported instead of sensor availability
* Add transparent widgets
- Add options to the service, entity and template widgets to have a transparent background
- Register configuration change intent filter for widgets in order to be able to respond to day/night changes (no longer fully automatic due to setting color with int)
* Support Material You dynamic color in widgets
- In widgets that support theming (day/night or transparent), add an option to use Material You dynamic colors
- Dynamic colors is now the default widget style for new widgets on devices that support them
* Tweak dynamic color theming
- Update dynamic color values to better match other themed widgets such as those from Google
- Remove configuration changed intent receiver for widgets because it is no longer required to get colors
* Add dynamic color theming to media player widget
- Make the media player widget themeable and add an option to use dynamic colors (transparent doesn't make sense for this layout)
* Fix camera widget background if data cannot be loaded
* Add text size option to template widgets
- Added an option to set the text size to template widgets to better align with other widget options
* Additional Android 12 widget updates
- When using the dynamic color theme, also use the new Android 12 widget corner radius
- Update placeholder values in widgets to match images, and refer to dynamic color XML to provide a better preview on Android 12. Reset values when providing template to match existing behaviour when no widget is found in the database.
- Update entity state and template widget target size to 2x1 to match preview image
- Make sure media player album art doesn't extend past corner radius if possible
* Change theme selection to dropdown, text color alignment
- Change theme selection to use a dropdown menu (Spinner) instead of right-aligned radio buttons on multiple lines
- Change text color selection to left-align radio buttons
* Notification sensors: convert extra bundle arrays to lists
- If the notification extras contain any arrays, convert them to lists because when stringified, this will create a human readable text like "[Message 1, Message 2]" instead of something like "[Ljava.lang.String;@5d099f62"
* Convert BaseBundle arrays to lists as well
- Include array types that are in the superclass BaseBundle as well when converting values to a list
- Moved to another function to limit duplicated code
* Map bundles within a notification's bundle as well
- Also map any bundles we find inside a bundle, or if there is an array of bundles, to make this information readable as well
* Breaking change: send sensor list attributes as list to server
- Send a sensor attribute that is managed by the app as a list, to the server as a list as well instead of a stringified version of a list.
* Fallback to string for lists that include separator
- To prevent issues where we can't distinguish the list items separator from a value that includes the separator, don't try to convert a value to a list if that is the case but instead use string
* Improve string fallback for lists that include separator
- Instead of only falling back when a list includes a String with the separator, just use toString() to also support other objects which might include ", " when stringified, such as nested lists
* Store list data as JSON
- To remove any confusion when sending individual list items, store data as JSON to escape characters if necessary
- Map Any data in a list that is not any of the specific types to string, for consistency with the same types when not in a list and to prevent JSON serialization issues
* Ensure current mode is also supported for climate entities
* Don't crash when creating control fails
- Handle failures while creating a control gracefully: skip controls when showing all available controls, and show an error tile similar to network errors for existing controls
- Fix the Wear OS settings activity (seemingly) endlessly loading if there are no connected devices, by showing a proper error message for this situation
- Set title for Toolbar
- Show a chip suggesting the user to add the SSID of the currently connected network, if not already added to the list of home SSIDs, in the home SSID dialog
- Change icon for listed SSIDs in home SSID dialog to DKGRAY by default, and only show currently connected SSID icon in accent color
- Add missing contentDescription for ImageButtons
- Use correct tint namespace
- Update deprecated code
- Don't load the icon dialog's icon pack every time the fragment is resumed, it only needs to be loaded once
- Don't load the icon dialog's icon pack on the main thread, instead load it on the IO thread to prevent blocking the fragment UI thread (as suggested in the loadDrawables function)
- Clean up @RequiresApi(Build.VERSION_CODES.N_MR1) annotations
- Include the original webview user agent in the webview to improve compatibility with sites that use user agent sniffing
- Updates the app's user agent to use the more standard product/version (details) format
* Convert NFC tags interface to Compose
- Rebuild the NFC tags interface with Compose instead of multiple fragments, move more functionality to the NfcViewModel
- Design updates to match other settings screens (white top app bar, additional icons, don't use text inputs for showing data)
- Update strings for consistency
- Update Navigation version to latest stable, and remove non-Compose dependency because it is no longer required
* Update NFC trigger example
- Add slightly more text to explain how to use it as a trigger in the visual automation editor, which most users will use
- Add an easier example for scanning the tag, and rename the existing example to clarify that it is only for this device
* Add link to tag documentation to top app bar
* Handle NFC turned off
- Check to see if NFC is actually turned on when the user opens settings, and prompt them to turn it on if required. Also do the same for the tag writing screen because that might be opened directly by the frontend.
- Update strings to always use 'device' instead of a mix of 'device' and 'phone'
* Add option to change ID written to tag
- Allow the user to change the ID that is written to the NFC tag when using the 'write tag' button from the app settings, to match frontend and iOS which also allow the user to change the tag ID
* Don't allow setting state outside NfcViewModel
* Simplify device trigger example even further
* Don't duplicate tag data extraction code
* Also convert tag reader activity to Compose
- Shouldn't be seen in most cases by users
* Add base interface for widget entities
* Helper for widget flow -> state
* Refactor ManageWidgetsView to avoid duplicate code and string types
* Switch add/deleteAll to suspend
* Change abstract functions to suspend
* Remove unused imports
- Request an update for the detected activity sensor every minute if the app is currently doing faster sensor updates, instead of every 2 minutes, to try to have an up-to-date recognition value every time the data is sent.
- Fix inconsistent update behaviour after changing the setting but before restarting when registered for the ACTION_TIME_TICK intent by always checking the setting, and not only when set to 'fast while charging'.
* Add sticky headers to manage sensors list
- The list of managers, and for some managers the list of sensors, is getting so long that sticky headers while scrolling is nice to have to quickly see where you are when doing a fast scroll
- Remove useless sorting of managers, original list is already sorted
* Include manager name in manage sensors search
- Also match sensors when using the search function in the manage sensors list when their manager's name matches the search query. This will for example allow searching for all audio sensors, or finding high accuracy mode when searching for location.
* Add stateless/fallback/default icons to sensors
- Add a new stateless icon to sensors that is used as a default/fallback within the UI
- Add icons for sensors to the main list of sensors, blue like in the frontend when enabled and disabled alpha when disabled
- Name deviceClass and unitOfMeasurement arguments where used in sensors
* Fix sensor a-z sorting
* Show entity in details screen more like frontend
- Update the design for the entity details screen to closer match what is shown in the frontend; at the top of the screen there is now a card that mimics the layout of the entity on the (default) dashboard. This includes the icon (no longer text only), name (previously completely absent from this screen) and the state. Enable/disable is now better highlighted.
- Some technical information was removed, in line with making this page less like a database dump (use dev tools if that's required).
* Show 'None selected' for empty multi-list preferences
* Add info about update frequency to BasicSensor
- Adds information about the update frequency to a BasicSensor
- Change design for sensor details to better highlight description, and add a chip that shows current sensor update frequency taking into account app settings and Android version
* Change description on Sensor Update Frequency screen
* Fix description
* Change update type for detected activity sensor
- This uses a callback on a ~2 minute interval but can be more frequent when other apps are using the API. Worker updates only re-register the callback.
* Revert "Change update type for detected activity sensor"
- It might be updated faster but doesn't actually send new values any faster
- Fixes the default domain icon on shortcut tiles not working because of a missing ".", used an extension function to prevent this problem in the future
* Fix gesture detection on WebViewActivity
- Add actual gesture detection to the webview instead of pointer detection in order to fix the search box showing up any time 3 fingers are placed on the screen
* Remove nullable min/max velocity
- These always get a value so there is no need to make them initially nullable
* Cleanup fling detection
* Reduce minimum swipe velocity requirement
* Change direction calculation to average
- Use the average velocity of all pointers to determine in which direction the user has swiped. The previous implementation used the first/last pointer's angle which isn't necessarily the same pointer.
- Fix reducing number of pointers when velocity tracker is reset due to an opposing pointer