* refactor: condensed the process of drawing the lines in the env metrics
* feat: only include iaq in the env metric graph when we have actual values
* feat: plotting barometric pressure when we have actual values
* detekt: spacing after (
---------
Co-authored-by: James Rich <2199651+jamesarich@users.noreply.github.com>
* Add initial implementation of low battery notifications for locally-connected and favorite nodes
* Hopefully make detekt happy
* detekt pls.
* Deduplicate some of the code
* detekt'd
* feat: Show alert notifications and override silent mode
This commit adds support for showing alert notifications with high priority and the ability to override silent mode to ensure they are delivered to the user.
The changes include:
- Adding `showAlertNotification` function which overrides silent mode and configures a custom volume, shows a notification with high priority.
- Creating a new notification channel for alerts.
- Adding the alert app port number to the list of remembered data types.
- Modifying `rememberDataPacket` to check for alert app messages and show alert notification.
* Add notification policy access permission and DND override for alerts
This commit adds the `ACCESS_NOTIFICATION_POLICY` permission to the manifest and requests this permission from the user. It also adds a check for notification policy access in the MainActivity, and if it's not granted, shows a rationale dialog.
Additionally, the commit adds a notification override to the `showAlertNotification` function in `MeshServiceNotifications` to temporarily disable DND for alert notifications and restore the original ringer settings afterwards.
* Refactor: Enhance Android Notification and DND Handling
- **Notification Channel Improvements:**
- Added `notificationLightColor` for better customization.
- Set `enableLights` and `enableVibration` in the alert channel.
- Use `alert.mp3` sound for alert channel.
- **DND Permission Request:**
- Introduced a new permission request flow for Do Not Disturb (DND) access.
- Show a rationale dialog before requesting permission.
- Persist if rationale was shown to avoid re-prompting.
- Added a `notificationPolicyAccessLauncher` to handle the permission request result.
- **Critical Alert Text**
- Added critical alert text in strings.
- Used critical alert text if the alert message is empty.
- **Other Changes**
- Removed unused imports and constants.
- Updated snackbar to support action.
* Refactor alert notification logic
- Change `notificationLightColor` to be lazy initialized.
- Update alert notification to use `CATEGORY_ALARM`.
- Use `dataPacket.alert` instead of `dataPacket.text` for alert content.
- Add `alert` property to `DataPacket` to handle alert messages.
* Set notification light color back to blue.
* Request notification permissions on grant
The app now checks for notification policy access after notification permissions are granted.
* make detekt happy
* updates dnd dialog text
* Refactor notification channel creation and critical alerts
- Initialize notification channels on service creation.
- Remove `ACCESS_NOTIFICATION_POLICY` permission.
- Modify the logic for requesting "Do Not Disturb" override permission to align with channel settings.
- Add new string resources for Alerts Channel Settings.
- Update wording for critical alert DND override.
- Update DND override request flow.
- Create notification channels on the service creation using `initChannels`.
- Adjust logic to check for "Do Not Disturb" override permission to align with notification channel settings.
- Ensure notification channels are created only if they do not already exist.
* refactor: Update DnD dialog with instructions for Samsung
- Renamed "Alerts Channel Settings" to "Channel Settings".
- Added Samsung-specific instructions and a link to Samsung's support page for Do Not Disturb mode in the alerts dialog.
- Updated the dialog to display Samsung-specific instructions when on a Samsung device.
* Refactor critical alerts instructions
- Updated the critical alerts instructions to include a link to Samsung's support page directly within the alert dialog.
- Removed the separate "Samsung Instructions" string and incorporated the information into the main instruction text, improving clarity and reducing redundancy.
- Made improvements to the UI.
* Add confirmation dialog for changing to router role
Introduced a confirmation dialog that will be shown when changing the device role to "router".
The confirmation dialog includes links to the "Device Role Documentation" and "Choosing The Right Device Role" blog post.
The user must check a checkbox to confirm.
* Update router role handling
Modified the handling of the router role in `DeviceConfigItemList.kt` to avoid returning prematurely from the `onItemSelected` lambda. This ensures that the role is updated properly when a user selects the "ROUTER" role.
* removes konami code check, remove testing code
* Refactor router role confirmation text
- Moves the router role confirmation text to strings.xml.
- Updates to use `AnnotatedString.fromHtml` instead of `buildAnnotatedString` and `withLink`.
- Changes from hard-coded strings to string resources.
* Implement initial support for adding and removing nodes from favorites
* Make favorite nodes' names show up bold in the node list
* Forgot to add this here when I was fixing the previous merge conflicts. Whoops!
* Make detekt happy
---------
Co-authored-by: James Rich <2199651+jamesarich@users.noreply.github.com>
* Refactor: We can draw the horizontal lines for the graphs independent of min and max entries.
* Added navigation to the PowerMetrics log with a skeleton screen.
* Drew channel 1 voltage.
* Refactor: Assigned colors for the data within the enum instead of a list-ordinal combo.
* Plotted Ch1 current line.
* Refactor: Did not need the parameters being used to get the desired ui in the TimeLabels composable.
* Added a row to help distinguish between units.
* Refactor: MetricsTimeSelector.kt to SlidingSelector.kt; the new version allows for generic options.
* Added a sliding selector to choose between power channels and changed the legend data to instead display current and voltage.
* We now plot the line for which the user has selected a power channel option.
* Don't need the current line to be dotted anymore.
* Don't think we need to display an info dialog for voltage and current.
* Wrote card to display the power channel data entries.
* detekt
* Refactor: current color change to accommodate the themes better
---------
Co-authored-by: James Rich <2199651+jamesarich@users.noreply.github.com>
* feat: add support for Device Hardware json and svg graphics
Allows for better hardware device display names, graphics, and indication of support.
* make detekt happy
* Fix: Use first image name to find vector drawable
Use the first image name from the `images` list (after removing the ".svg" suffix) to find the corresponding vector drawable resource.
* Refactor: Update device detail layout
Updated the device detail layout to group device-specific information under a "Device" category.
Added a circular background with device-specific color behind the device icon.
Moved hardware, support status details to the Device section.
* Refactor: Move device hardware logic to MetricsViewModel
Moves the logic for retrieving device hardware information and image resources from NodeDetail to MetricsViewModel.
Also replaces id lookup with when statement for image resource id mapping.
* fix: cache deviceHardwareList, add exception handling
* refactor: mutable list unnecessary
* default to hw_unknown device image
* Fix: Show 'unknown' for position logs older than 6 months
Display 'unknown' instead of the timestamp for position logs older than 6 months. This addresses an issue where unknown timestamps were incorrectly shown as 1970 (unix epoch).
* Fix: make detekt happy
* Replace "Unknown" with "Unknown Age" in position logs
The text displayed for positions older than six months in position logs has been changed from "Unknown" to "Unknown Age". This update adds clarity and context to the age of positions in the log.