mirror of
https://github.com/home-assistant/iOS.git
synced 2026-06-16 23:33:36 -05:00
copilot/remove-debug-prints-codebase
3726 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
4613a18590 |
GitHub Actions: Bump ruby/setup-ruby from 1.276.0 to 1.278.0 in the dependencies group (#4153)
Bumps the dependencies group with 1 update: [ruby/setup-ruby](https://github.com/ruby/setup-ruby). Updates `ruby/setup-ruby` from 1.276.0 to 1.278.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/ruby/setup-ruby/releases">ruby/setup-ruby's releases</a>.</em></p> <blockquote> <h2>v1.278.0</h2> <h2>What's Changed</h2> <ul> <li>Set BUNDLER_VERSION whenever we know which version to use by <a href="https://github.com/eregon"><code>@eregon</code></a> in <a href="https://redirect.github.com/ruby/setup-ruby/pull/849">ruby/setup-ruby#849</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/ruby/setup-ruby/compare/v1.277.0...v1.278.0">https://github.com/ruby/setup-ruby/compare/v1.277.0...v1.278.0</a></p> <h2>v1.277.0</h2> <h2>What's Changed</h2> <ul> <li>Update CRuby releases on Windows by <a href="https://github.com/ruby-builder-bot"><code>@ruby-builder-bot</code></a> in <a href="https://redirect.github.com/ruby/setup-ruby/pull/847">ruby/setup-ruby#847</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/ruby/setup-ruby/compare/v1.276.0...v1.277.0">https://github.com/ruby/setup-ruby/compare/v1.276.0...v1.277.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
1da8113507 |
Sync network info before performing intents (#4147)
Added calls to syncNetworkInformation() at the start of various perform() methods for AppIntents and widget controls to ensure up-to-date connectivity data before executing actions. Also refactored ConnectivityWrapper to support async network info synchronization. <!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. --> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> |
||
|
|
990427c1e7 |
GitHub Actions: Bump ruby/setup-ruby from 1.275.0 to 1.276.0 in the dependencies group (#4146)
Bumps the dependencies group with 1 update: [ruby/setup-ruby](https://github.com/ruby/setup-ruby). Updates `ruby/setup-ruby` from 1.275.0 to 1.276.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/ruby/setup-ruby/releases">ruby/setup-ruby's releases</a>.</em></p> <blockquote> <h2>v1.276.0</h2> <h2>What's Changed</h2> <ul> <li>Add ruby-4.0.0 by <a href="https://github.com/ruby-builder-bot"><code>@ruby-builder-bot</code></a> in <a href="https://redirect.github.com/ruby/setup-ruby/pull/844">ruby/setup-ruby#844</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/ruby/setup-ruby/compare/v1.275.0...v1.276.0">https://github.com/ruby/setup-ruby/compare/v1.275.0...v1.276.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
317d9ecaf9 |
Update Localized Strings (#4141)
Automatically created by zacwest. Co-authored-by: Home Assistant Bot <hello@home-assistant.io> |
||
|
|
53312192b7 |
Refactor AssistWavesAnimation to use animated bars (#4143)
Replaces the previous static circle-based animation with a dynamic, reusable WaveBar component that animates capsule-shaped bars with staggered delays and randomized durations for a more organic effect. Adds a glowing background for visual enhancement and improves code modularity and readability. <!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> ## Screenshots https://github.com/user-attachments/assets/53f755e9-1e68-47d9-a9d9-cd98e723dd71 ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. --> |
||
|
|
f823d8936f |
Experimental Assist UI (#4139)
<!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> <img width="1776" height="1124" alt="CleanShot 2025-12-23 at 03 29 25@2x" src="https://github.com/user-attachments/assets/ab1a5c9f-72a9-4dc8-ae44-1f7d574738f6" /> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. --> --------- Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> |
||
|
|
86e1c83a41 |
Sort by areas and allow reordering cameras (#4135)
<!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> <img width="3534" height="1398" alt="CleanShot 2025-12-22 at 15 54 51@2x" src="https://github.com/user-attachments/assets/9512eb8a-0005-4c51-9cae-93b68e6a3ec4" /> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. --> |
||
|
|
f9814fcf8a |
Update Localized Strings (#4125)
Automatically created by bgoncal. --------- Co-authored-by: Home Assistant Bot <hello@home-assistant.io> Co-authored-by: Bruno Pantaleão Gonçalves <5808343+bgoncal@users.noreply.github.com> Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> |
||
|
|
61ffd969f0 |
Remove 37 unused localization strings (#4131)
## Summary Removes 37 unused localization string keys that were detected as unreferenced across the codebase. Affected strings span onboarding flows, settings UI, thread credentials, widgets, and root-level labels. **Removed keys by category:** - **Onboarding**: `device_name_check.error.rename_action`, location permission buttons (`allow_and_share`, `allow_for_app`, `deny`), `permission.location.privacy_note`, `scanning.manual_hint`, `welcome.continue_button`, `welcome.get_started` - **Settings**: `connection_section.activate_swipe_hint`, `connection_section.invite_to_server`, `connection_section.ssid_permission_message`, `always_fallback_internal.confirmation.confirm_button`, `reset_section.reset_alert.progress_message`, `server_select.page_title` - **Settings Details**: App icon enums (`ha_blue`, `pride_rainbow_invert`), `privacy.crash_reporting.sentry` - **Thread**: All credential screen labels (`border_agent_id_title`, `network_key_title`, `network_name_title`, `no_credential_available`, `screen_title`, `share_credentials_button_title`) - **Widgets**: `details.parameters.run_action`, `gauge.parameters.run_action` - **Watch**: `labels.no_action` - **Root level**: `off_label`, `on_label`, `reload_label`, `success_label`, `username_label` - **Other**: `about.logo.tagline`, `announcement.drop_support.button_read_more`, `connection.permission.internal_url` (body3, button_configure, button_ignore), `improv.connection_state.autorization_required` **Changes:** - Removed 1,258 key-value pairs across 34 language `.lproj/Localizable.strings` files - Removed 76 lines from `Sources/Shared/Resources/Swiftgen/Strings.swift` (corresponding L10n property declarations) Verified with `Tools/detect_unused_strings.py` - zero unused strings remain. ## Screenshots N/A - No user-facing changes (removes unused code only) ## Link to pull request in Documentation repository N/A ## Any other notes Detection was performed using the existing `detect_unused_strings.py` tool which checks for L10n property usage across all Swift source files. <!-- START COPILOT CODING AGENT SUFFIX --> <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > Remove strings detected as unused: > > Found 37 unused strings: > > > ABOUT: > - L10n.About.Logo.tagline > Key: about.logo.tagline > Line: 130 > > ANNOUNCEMENT: > - L10n.Announcement.DropSupport.buttonReadMore > Key: announcement.drop_support.button_read_more > Line: 276 > > CONNECTION: > - L10n.Connection.Permission.InternalUrl.body3 > Key: connection.permission.internal_url.body3 > Line: 927 > - L10n.Connection.Permission.InternalUrl.buttonConfigure > Key: connection.permission.internal_url.button_configure > Line: 929 > - L10n.Connection.Permission.InternalUrl.buttonIgnore > Key: connection.permission.internal_url.button_ignore > Line: 931 > > IMPROV: > - L10n.Improv.ConnectionState.autorizationRequired > Key: improv.connection_state.autorization_required > Line: 1296 > > ONBOARDING: > - L10n.Onboarding.DeviceNameCheck.Error.renameAction > Key: onboarding.device_name_check.error.rename_action > Line: 1892 > - L10n.Onboarding.Permission.Location.Buttons.allowAndShare > Key: onboarding.permission.location.buttons.allow_and_share > Line: 2064 > - L10n.Onboarding.Permission.Location.Buttons.allowForApp > Key: onboarding.permission.location.buttons.allow_for_app > Line: 2066 > - L10n.Onboarding.Permission.Location.Buttons.deny > Key: onboarding.permission.location.buttons.deny > Line: 2068 > - L10n.Onboarding.Permission.Location.privacyNote > Key: onboarding.permission.location.privacy_note > Line: 2061 > - L10n.Onboarding.Scanning.manualHint > Key: onboarding.scanning.manual_hint > Line: 2162 > - L10n.Onboarding.Welcome.continueButton > Key: onboarding.welcome.continue_button > Line: 2200 > - L10n.Onboarding.Welcome.getStarted > Key: onboarding.welcome.get_started > Line: 2206 > > SETTINGS: > - L10n.Settings.ConnectionSection.AlwaysFallbackInternal.Confirmation.confirmButton > Key: settings.connection_section.always_fallback_internal.confirmation.confirm_button > Line: 2329 > - L10n.Settings.ConnectionSection.activateSwipeHint > Key: settings.connection_section.activate_swipe_hint > Line: 2293 > - L10n.Settings.ConnectionSection.inviteToServer > Key: settings.connection_section.invite_to_server > Line: 2307 > - L10n.Settings.ConnectionSection.ssidPermissionMessage > Key: settings.connection_section.ssid_permission_message > Line: 2321 > - L10n.Settings.ResetSection.ResetAlert.progressMessage > Key: settings.reset_section.reset_alert.progress_message > Line: 2654 > - L10n.Settings.ServerSelect.pageTitle > Key: settings.server_select.page_title > Line: 2673 > > SETTINGSDETAILS: > - L10n.SettingsDetails.General.AppIcon.Enum.haBlue > Key: settings_details.general.app_icon.enum.ha_blue > Line: 2840 > - L10n.SettingsDetails.General.AppIcon.Enum.prideRainbowInvert > Key: settings_details.general.app_icon.enum.pride_rainbow_invert > Line: 2860 > - L10n.SettingsDetails.Privacy.CrashReporting.sentry > Key: settings_details.privacy.crash_reporting.sentry > Line: 3299 > > THREAD: > - L10n.Thread.Credentials.borderAgentIdTitle > Key: thread.credentials.border_agent_id_title > Line: 3432 > - L10n.Thread.Credentials.networkKeyTitle > Key: thread.credentials.network_key_title > Line: 3434 > - L10n.Thread.Credentials.networkNameTitle > Key: thread.credentials.network_name_title > Line: 3436 > - L10n.Thread.Credentials.noCredentialAvailable > Key: thread.credentials.no_credential_available > Line: 3438 > - L10n.Thread.Credentials.screenTitle > Key: thread.credentials.screen_title > Line: 3440 > - L10n.Thread.Credentials.shareCredentialsButtonTitle > Key: thread.credentials.share_credentials_button_title > Line: 3442 > > WATCH: > - L10n.Watch.Labels.noAction > Key: watch.labels.no_action > Line: 3925 > > WIDGETS: > - L10n.Widgets.Details.Parameters.runAction > Key: widgets.details.parameters.run_action > Line: 4746 > - L10n.Widgets.Gauge.Parameters.runAction > Key: widgets.gauge.parameters.run_action > Line: 4778 > > ROOT: > - L10n.offLabel > Key: off_label > Line: 38 > - L10n.onLabel > Key: on_label > Line: 42 > - L10n.reloadLabel > Key: reload_label > Line: 50 > - L10n.successLabel > Key: success_label > Line: 60 > - L10n.usernameLabel > Key: username_label > Line: 66 </details> <!-- START COPILOT CODING AGENT TIPS --> --- ✨ Let Copilot coding agent [set things up for you](https://github.com/home-assistant/iOS/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com> |
||
|
|
dd1dd76458 |
Remove unused strings cleanup automation (#4130)
## Summary Removes the automated cleanup tooling for unused localization strings. The detection script and CI checks remain to identify unused strings, but removal is now a manual process. **Deleted:** - `Tools/remove_unused_strings.py` - Script that removed unused strings from all `Localizable.strings` files - `.github/workflows/clean_unused_strings.yml` - Monthly workflow that created automated cleanup PRs **Updated:** - `Tools/README.md` - Removed `remove_unused_strings.py` documentation - `UNUSED_STRINGS.md` - Removed removal script and workflow documentation; renamed to focus on detection only - `.github/workflows/ci.yml` - Updated PR comment to suggest manual cleanup instead of referencing removed script The `detect_unused_strings.py` script and CI integration continue to function unchanged. ## Screenshots N/A - No user-facing changes ## Link to pull request in Documentation repository Documentation: home-assistant/companion.home-assistant# ## Any other notes Detection of unused strings remains automated via CI checks on pull requests. Only the removal automation has been eliminated. <!-- START COPILOT CODING AGENT SUFFIX --> <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > Delete remove_unused_strings.py and workflow </details> <!-- START COPILOT CODING AGENT TIPS --> --- 💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey). --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com> |
||
|
|
7ab7aa095d |
Add camera list screen with server filtering, area display, and iOS 18+ control widgets (#4118)
## Summary
Implements a camera list view accessible from iOS 18+ control widgets
and deeplinks, displaying all cameras from the database with server
filtering, area information, and search capabilities. Tapping a camera
opens the WebRTC video player in full screen on top of the list.
**New Components:**
- `CameraListView` - SwiftUI list with conditional server selector,
search, area display, and empty states
- `CameraListViewModel` - Fetches cameras via `ControlEntityProvider`,
handles filtering, and maps camera areas
- `OpenCameraListAppIntent` - iOS 18+ app intent for opening camera list
- `ControlOpenCamerasList` - iOS 18+ control widget for Control Center
(no configuration needed)
**Key Features:**
- **Server Picker**: Hidden when initialized with specific serverId,
always visible otherwise
- **Area Display**: Shows area name (if available) or entity ID for each
camera
- **Full Screen Behavior**: Camera opens on top of list modal without
dismissing it
- **Search**: Real-time filtering by camera name or entity ID
- **Localization**: All user-facing strings use the localization system
(`L10n.CameraList.*`)
- **Control Widgets**: Two iOS 18+ widgets for Control Center access
**iOS 18+ Control Widgets:**
1. **ControlOpenCamerasList** - Opens the full camera list with one tap
(static, no configuration)
2. **ControlOpenCamera** - Opens a specific camera directly (user
selects camera during setup)
**URL Routing:**
- `homeassistant://camera/` → Opens camera list
- `homeassistant://camera/?serverId={id}` → Opens filtered list (hides
server picker)
- `homeassistant://camera/?entityId={id}&serverId={id}` → Opens specific
camera (existing)
Updated `IncomingURLHandler.swift` to branch on `entityId` presence:
missing opens list, present opens player.
**Localization Keys:**
- `camera_list.title` - Navigation title
- `camera_list.search_placeholder` - Search bar placeholder
- `camera_list.empty.title` & `camera_list.empty.message` - Empty state
- `camera_list.no_results.title` & `camera_list.no_results.message` - No
search results
- `widgets.controls.open_cameras_list.description` - Control widget
description
**Tests:**
- Updated `WidgetsKindTests` to include assertion for
`controlOpenCamerasList` enum case
- Total enum case count updated from 26 to 27
## Screenshots
_Screenshots required for testing on macOS/iOS device_
## Link to pull request in Documentation repository
Documentation: home-assistant/companion.home-assistant#
## Any other notes
Files added to both App and Extensions-Widgets targets for proper iOS
18+ control support. Backward compatible with existing camera deeplinks.
ViewModel fetches area information from the database and maps it to
cameras for display. All strings are properly localized and ready for
translation.
The `ControlOpenCamerasList` widget uses `StaticControlConfiguration`,
requiring no user setup, making it quick to add to Control Center for
instant access to all cameras.
Tests have been updated to reflect the new `controlOpenCamerasList`
widget kind after merging with main branch changes.
<!-- START COPILOT CODING AGENT SUFFIX -->
<!-- START COPILOT ORIGINAL PROMPT -->
<details>
<summary>Original prompt</summary>
> In the App we have the options to open WebRTCVideoPlayerView from iOS
18+ controls, implement a screen that presents a list of cameras base on
all cameras in the database.
> This screen should have a server selector as well and it should allow
initializing with a specific serverId, so the list is displayed based on
1 server only.
> When tapping list row, it opens WebRTCVideoPlayerView for that
selected camera in full screen
</details>
<!-- START COPILOT CODING AGENT TIPS -->
---
✨ Let Copilot coding agent [set things up for
you](https://github.com/home-assistant/iOS/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
|
||
|
|
77e4af6c0a |
Reduce CI timeout from 60 to 45 minutes (#4129)
<!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. --> |
||
|
|
e3262a1744 |
GitHub Actions: Bump the dependencies group with 3 updates (#4124)
Bumps the dependencies group with 3 updates: [ruby/setup-ruby](https://github.com/ruby/setup-ruby), [actions/setup-python](https://github.com/actions/setup-python) and [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request). Updates `ruby/setup-ruby` from 1.270.0 to 1.275.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/ruby/setup-ruby/releases">ruby/setup-ruby's releases</a>.</em></p> <blockquote> <h2>v1.275.0</h2> <h2>What's Changed</h2> <ul> <li>Skip saving cache for merge_group event by <a href="https://github.com/ntkme"><code>@ntkme</code></a> in <a href="https://redirect.github.com/ruby/setup-ruby/pull/812">ruby/setup-ruby#812</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/ruby/setup-ruby/compare/v1.274.0...v1.275.0">https://github.com/ruby/setup-ruby/compare/v1.274.0...v1.275.0</a></p> <h2>v1.274.0</h2> <h2>What's Changed</h2> <ul> <li>Fix rubyinstaller2 urls for latest release by <a href="https://github.com/zenspider"><code>@zenspider</code></a> in <a href="https://redirect.github.com/ruby/setup-ruby/pull/842">ruby/setup-ruby#842</a></li> </ul> <h2>New Contributors</h2> <ul> <li><a href="https://github.com/zenspider"><code>@zenspider</code></a> made their first contribution in <a href="https://redirect.github.com/ruby/setup-ruby/pull/842">ruby/setup-ruby#842</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/ruby/setup-ruby/compare/v1.273.0...v1.274.0">https://github.com/ruby/setup-ruby/compare/v1.273.0...v1.274.0</a></p> <h2>v1.273.0</h2> <h2>What's Changed</h2> <ul> <li>Update CRuby releases on Windows by <a href="https://github.com/ruby-builder-bot"><code>@ruby-builder-bot</code></a> in <a href="https://redirect.github.com/ruby/setup-ruby/pull/840">ruby/setup-ruby#840</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/ruby/setup-ruby/compare/v1.272.0...v1.273.0">https://github.com/ruby/setup-ruby/compare/v1.272.0...v1.273.0</a></p> <h2>v1.272.0</h2> <h2>What's Changed</h2> <ul> <li>Add ruby-4.0.0-preview3 by <a href="https://github.com/ruby-builder-bot"><code>@ruby-builder-bot</code></a> in <a href="https://redirect.github.com/ruby/setup-ruby/pull/839">ruby/setup-ruby#839</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/ruby/setup-ruby/compare/v1.271.0...v1.272.0">https://github.com/ruby/setup-ruby/compare/v1.271.0...v1.272.0</a></p> <h2>v1.271.0</h2> <h2>What's Changed</h2> <ul> <li>Add ruby-3.4.8 by <a href="https://github.com/ruby-builder-bot"><code>@ruby-builder-bot</code></a> in <a href="https://redirect.github.com/ruby/setup-ruby/pull/838">ruby/setup-ruby#838</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/ruby/setup-ruby/compare/v1.270.0...v1.271.0">https://github.com/ruby/setup-ruby/compare/v1.270.0...v1.271.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
3f25cd80ab |
Add automation domain and iOS control widget (#4120)
## Summary Adds support for Home Assistant automations in the iOS app. Automations can now be triggered from iOS Control Center widgets (iOS 18+), similar to existing script and scene controls. **Domain & Model** - Added `automation` domain with robot icon and `trigger` service - Included automation in `AppEntitiesModel` tracked domains for database caching - Added to CarPlay supported domains **Control Widget** (iOS 18+) - `ControlAutomation` - Main control widget - `AutomationAppIntent` - Triggers `automation.trigger` service - `IntentAutomationEntity` - Entity queries and selection - `ControlAutomationsValueProvider` - Configuration with custom icons/text **Pattern** Follows existing `ControlScript` and `ControlScene` implementation patterns for consistency. **Tests** - Updated `testWidgetsKindCasesValues` to include assertion for `controlAutomation` case - Updated widget kind count validation from 25 to 26 ## Screenshots N/A - Control widgets are system UI and cannot be screenshotted during development. Widget appears in Control Center configuration with automation icon and allows selection from available automations. ## Link to pull request in Documentation repository Documentation: home-assistant/companion.home-assistant# ## Any other notes Localization strings added for English only. Additional languages will need translation via the standard localization workflow. <!-- START COPILOT CODING AGENT SUFFIX --> <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > 1 - Add "automation" in AppEntitiesModel domains > 2 - Create an iOS control for running automation like it exist for ControlScript </details> <!-- START COPILOT CODING AGENT TIPS --> --- ✨ Let Copilot coding agent [set things up for you](https://github.com/home-assistant/iOS/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com> |
||
|
|
2b4ac9cd53 | Fix authentication in clean_unused_strings workflow (#4122) | ||
|
|
69474acedd | Fix clean_unused_strings workflow: Use macOS runner (#4121) | ||
|
|
d0e30e0c1a |
Add automated detection and cleanup of unused L10n strings (#4119)
## Summary Implements automated detection and removal of unused localization strings. Currently identifies 37 unused L10n properties across the codebase (onboarding flows, settings, thread credentials, widgets, etc.). **Components:** - **Detection script** (`Tools/detect_unused_strings.py`): Parses `Strings.swift`, searches all Swift source for L10n property usage and direct key references, reports unused strings grouped by category - **Removal script** (`Tools/remove_unused_strings.py`): Deletes unused keys from all `*.lproj/Localizable.strings` files, regenerates `Strings.swift` via SwiftGen - **CI check** (`check-unused-strings` job): Runs on PRs, posts sticky comment with unused string count and details - **Automated workflow** (`clean_unused_strings.yml`): Monthly scheduled run + manual trigger, creates PR with cleanup changes **Usage:** ```bash # Detect unused strings python3 Tools/detect_unused_strings.py # Remove unused strings and regenerate code python3 Tools/remove_unused_strings.py ``` ## Screenshots N/A - No UI changes ## Link to pull request in Documentation repository Documentation: home-assistant/companion.home-assistant# ## Any other notes The detection algorithm checks three patterns to minimize false positives: 1. Full L10n path usage (`L10n.About.title`) 2. Leaf property usage (`.title`) 3. Direct Localizable key usage (`"about.title"`) Modified `.gitignore` to allow Python scripts in Tools directory. All changes pass yamllint and CodeQL security checks. <!-- START COPILOT CODING AGENT SUFFIX --> <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > Tasks: 1 - Create a script that detects L10n (Strings.swift) unused strings in the codebase 2 - From this list, extract the Localizable string and double check if they are not used directly in the codebase 3 - If both are true, the script should delete these strings from all localizable languages and L10n (Strings.swift) > 4 - Add to the CI workflow a step which checks if that PR has unused strings, if so, comment on the PR 5 - Create a workflow dedicated to delete unused strings </details> <!-- START COPILOT CODING AGENT TIPS --> --- 💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more [Copilot coding agent tips](https://gh.io/copilot-coding-agent-tips) in the docs. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com> |
||
|
|
31030a1144 |
Update Localized Strings (#4115)
Automatically created by zacwest. Co-authored-by: Home Assistant Bot <hello@home-assistant.io> |
||
|
|
7119b8a557 | Add fan domain to app database updater (#4114) | ||
|
|
6916e5437b |
Add fan entity type to Control Center controls (#4109)
## Summary
Adds fan domain support to iOS 18 Control Center controls. Users can now
toggle fan entities directly from Control Center alongside existing
light, switch, and cover controls.
## Screenshots
N/A - Control Center widget requires device testing with configured fan
entities
## Link to pull request in Documentation repository
Documentation: home-assistant/companion.home-assistant#
## Any other notes
**Implementation:**
- Added `fan` domain to `Domain` enum with on/off states and CarPlay
support
- Created `ControlFan` widget with 4 files following existing control
patterns:
- Main widget configuration with blue tint
- Intent handler for toggle/turn_on/turn_off services
- Entity query with async pattern (matching Switch/Cover for
future-proofing)
- Value provider for state management with SF Symbol icons
(`fan`/`fan.fill`) and optional displayText parameter
- Integrated fan domain into system components:
- `HAAPI.swift` - Added to toggle domain case
- `HAEntity+CarPlay.swift` - Added fan icon mapping
- `MagicItem.swift` - Added to toggle domain case
- Registered as `controlFan` in `WidgetsKind` and `WidgetsBundle18`
- Added localization strings following established patterns ("Choose
fan" for consistency)
- Added optional `displayText` parameter to `ControlFanConfiguration`
for custom display names (matching PR #4104 pattern)
**Pattern consistency:**
Mirrors Switch/Cover implementations with async entity queries. Uses
standard on/off toggle model with state-based icons. Includes
displayText override feature for user customization.
<!-- START COPILOT ORIGINAL PROMPT -->
<details>
<summary>Original prompt</summary>
>
> ----
>
> *This section details on the original issue you should resolve*
>
> <issue_title>Add "fan" entity type to control center
controls</issue_title>
> <issue_description>
> ### Discussed in
https://github.com/home-assistant/iOS/discussions/3679
>
> <div type='discussions-op-text'>
>
> <sup>Originally posted by **haydonryan** June 29, 2025</sup>
> Currently on IOS we have most of the major types except for fans.
Could we add that too please?
>
>
</div></issue_description>
>
> ## Comments on the Issue (you are @copilot in this section)
>
> <comments>
> </comments>
>
</details>
<!-- START COPILOT CODING AGENT SUFFIX -->
- Fixes home-assistant/iOS#3681
<!-- START COPILOT CODING AGENT TIPS -->
---
💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
|
||
|
|
0c860cca37 |
Update Localized Strings (#4111)
Automatically created by zacwest. Co-authored-by: Home Assistant Bot <hello@home-assistant.io> Co-authored-by: Bruno Pantaleão Gonçalves <5808343+bgoncal@users.noreply.github.com> |
||
|
|
d79ef4d400 |
Add display text override parameter to Control Center controls (#4104)
## Add display text parameter to Control Center controls - [x] Explore repository structure and understand Control Center controls - [x] Add displayText parameter to ControlButtonConfiguration (Button control) - [x] Update ControlButtonValueProvider to use displayText when available - [x] Add displayText parameter to ControlSwitchConfiguration (Switch control) - [x] Update ControlSwitchValueProvider to use displayText when available - [x] Add displayText parameter to ControlLightsConfiguration (Light control) - [x] Update ControlLightsValueProvider to use displayText when available - [x] Add displayText parameter to ControlCoverConfiguration (Cover control) - [x] Update ControlCoverValueProvider to use displayText when available - [x] Add displayText parameter to ControlSceneConfiguration (Scene control) - [x] Update ControlScenesValueProvider to use displayText when available - [x] Update ControlScene to use displayText in Label - [x] Add displayText parameter to ControlScriptsConfiguration (Script control) - [x] Update ControlScriptsValueProvider to use displayText when available - [x] Update ControlScript to use displayText in Label - [x] Add displayText parameter to ControlOpenPageConfiguration (OpenPage control) - [x] Update ControlOpenPageValueProvider to use displayText when available - [x] Update ControlOpenPage to use displayText in Label - [x] Add displayText parameter to ControlAssistConfiguration (Assist control) - [x] Update ControlAssistValueProvider to use displayText when available - [x] Update ControlAssist to use displayText in Label - [x] Add displayText parameter to all OpenEntity controls (Entity, Switch, Light, Cover, InputBoolean, Lock, Camera, Sensor) - [x] Update all OpenEntity value providers to use displayText when available - [x] Update all OpenEntity controls to use displayText in Labels - [x] Run code review - No issues found - [x] Run security checks - No vulnerabilities detected - [x] Fix SwiftFormat lint issues - wrapped long lines to meet 120 character limit ## Summary Successfully added an optional `displayText` parameter to all Control Center control configurations. This allows users to override the default display text shown on their controls without changing the underlying entity name. ### Implementation Details **Controls Updated (19 total):** 1. Button 2. Switch 3. Light 4. Cover 5. Scene 6. Script 7. OpenPage 8. Assist 9. OpenEntity 10. OpenSwitch 11. OpenLight 12. OpenCoverEntity 13. OpenInputBoolean 14. OpenLock 15. OpenCamera 16. OpenSensor **Pattern Applied:** - Added `@Parameter` for `displayText: String?` in each Configuration struct - Added `displayText: String?` field to each Item struct - Updated value providers to pass displayText through to items - Updated control widgets to use `displayText ?? defaultText` pattern for labels - Parameter is optional, maintaining backward compatibility - Fixed SwiftFormat lint issues by wrapping long lines **Files Modified:** 28 files total - 19 Configuration/ValueProvider files - 19 Control widget files (some combined in same file) All changes maintain backward compatibility - existing controls will continue to work without modification. <!-- START COPILOT CODING AGENT SUFFIX --> <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > To each Control center control that we have, add a new parameter to control configuration where the user can override the display text </details> <!-- START COPILOT CODING AGENT TIPS --> --- 💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey). --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com> |
||
|
|
cd1b11d66b | Update Xcode version on README (#4110) | ||
|
|
a7627d53aa | Fix Mac device identification on macOS Catalyst (#4108) | ||
|
|
cb62b93a78 | Fix camera stream not terminating on notification dismissal (macOS) (#4107) | ||
|
|
caa97b6034 |
Update Localized Strings (#4100)
Automatically created by zacwest. Co-authored-by: Home Assistant Bot <hello@home-assistant.io> Co-authored-by: Bruno Pantaleão Gonçalves <5808343+bgoncal@users.noreply.github.com> |
||
|
|
8d818d2276 |
Add Command+F search functionality to WebViewController (#4102)
## Summary Implements native web content search using WKWebView's find interaction API (iOS 16+). Pressing Command+F on macCatalyst now opens the standard iOS find panel with search, navigation, and match highlighting. **Implementation:** - Enabled `isFindInteractionEnabled` on WKWebView in `viewDidLoad()` - Added Command+F key command that calls `showFindInteraction()` to present find navigator - Added "Find" menu item to View menu with keyboard shortcut - Localized in English only (base localization) **Platform availability:** - macCatalyst only (keyboard shortcuts conditionally compiled) - iOS 16.0+ (graceful fallback for older versions) ## Screenshots N/A - Uses native iOS system UI ## Link to pull request in Documentation repository Documentation: home-assistant/companion.home-assistant# ## Any other notes Leverages Apple's native find interaction rather than implementing custom search UI. The find panel, keyboard navigation, match counting, and accessibility support are all provided by the system. <!-- START COPILOT CODING AGENT SUFFIX --> <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > Implement "search content" feature (aka command + F) to WebViewController </details> <!-- START COPILOT CODING AGENT TIPS --> --- ✨ Let Copilot coding agent [set things up for you](https://github.com/home-assistant/iOS/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com> |
||
|
|
6e76360d36 |
Add ControlOpen and related source files to project (#4101)
<!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> Controls that open the app need to have the main app on its target, this PR makes sure of it ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. --> |
||
|
|
50fffc8e8f |
Add external bus event handler to focus on specific HTML element (#4098)
<!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. --> |
||
|
|
32f56906ce |
Update Localized Strings (#4094)
Automatically created by zacwest. Co-authored-by: Home Assistant Bot <hello@home-assistant.io> Co-authored-by: Bruno Pantaleão Gonçalves <5808343+bgoncal@users.noreply.github.com> |
||
|
|
4d9ce70a5d |
Update getEntities to match entity ID, name, and area name (#4096)
## Summary Updated the `ControlEntityProvider.getEntities()` method to support enhanced entity filtering. Users can now search for entities by matching against entity ID, entity name, or area name, making it easier to find entities in App Intents and other contexts that use this provider. ### Changes Made - **Entity ID matching**: Users can now search by the full entity ID (e.g., "light.living_room") - **Entity name matching**: Existing functionality maintained and improved - **Area name matching**: Users can now search for entities by their area (e.g., "Kitchen") - **Improved matching algorithm**: Changed from simple case-insensitive `contains()` to use `range(of:options:)` with `.caseInsensitive` and `.diacriticInsensitive` options for better internationalization support ### Technical Details - Area information is fetched per server only when a search string is provided - Created an entity-to-area mapping for efficient lookups - Matching logic is now consistent with the implementation in `HAAppEntityAppIntentEntityQuery` - All linters passed (SwiftFormat, SwiftLint) - No security issues detected ## Screenshots <!-- Not applicable - this is a backend change to entity filtering logic --> ## Link to pull request in Documentation repository <!-- No documentation changes required for this internal filtering improvement --> Documentation: home-assistant/companion.home-assistant# ## Any other notes This change improves the user experience when searching for entities in App Intents and other contexts that use `ControlEntityProvider`, making entity discovery more intuitive and flexible. <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > ControlEntityProvider getEntities should match with entity ID, name and area name to which the entity belongs </details> <!-- START COPILOT CODING AGENT TIPS --> --- 💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more [Copilot coding agent tips](https://gh.io/copilot-coding-agent-tips) in the docs. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com> |
||
|
|
1d2adcc418 |
Exclude Mac Catalyst from MatterSupport import check (#4097)
Updated the isAvailable property to exclude macCatalyst from the MatterSupport import check, ensuring Matter features are only enabled on supported platforms. <!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. --> |
||
|
|
9e8df8ad9d |
Format BSSID MAC addresses with leading zeros for consistency with Android (#4095)
## Summary BSSID sensor reported MAC addresses without leading zeros (e.g., `18:e8:29:a7:e9:b`), inconsistent with Android companion app and standard MAC address notation. This breaks cross-platform room presence tracking. **Changes:** - Added `String.formattedBSSID` extension that pads hex octets to 2 characters - Applied formatting to BSSID sensor state in `ConnectivitySensor` - Added test coverage for formatting edge cases ```swift // Before: "18:e8:29:a7:e9:b" // After: "18:e8:29:a7:e9:0b" sensor.State = bssid.formattedBSSID ``` ## Screenshots N/A - Sensor value formatting change only ## Link to pull request in Documentation repository Documentation: home-assistant/companion.home-assistant# ## Any other notes **Breaking change:** Users with BSSID-based automations must update to the new zero-padded format. This aligns iOS with Android, standard MAC notation, and network management tools like UniFi. <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > > ---- > > *This section details on the original issue you should resolve* > > <issue_title>BSSID mac address format isn't consistant with Android Companion app</issue_title> > <issue_description>**iOS device model, version and app version** > <!-- Please include your device 'Model Name' and 'Software Version' as listed in iOS Settings>General>About. Please also give the app version listed beneath "Home Assistant Companion" in the App Configuration>About menu within the app, please include the number in brackets --> > > Model Name: IPhone 6S > Software Version: IOS 14.4.1 > App version: 2021.77 > > **Home Assistant Core Version** > version | core-2021.3.4 > -- | -- > installation_type | Home Assistant Container > dev | false > hassio | false > docker | true > virtualenv | false > python_version | 3.8.7 > os_name | Linux > os_version | 5.3.18-3-pve > arch | x86_64 > timezone | Europe/Paris > > <details><summary>Home Assistant Community Store</summary> > > GitHub API | ok > -- | -- > Github API Calls Remaining | 4998 > Installed Version | 1.11.0 > Stage | running > Available Repositories | 850 > Installed Repositories | 8 > > </details> > > <details><summary>Home Assistant Cloud</summary> > > logged_in | false > -- | -- > can_reach_cert_server | ok > can_reach_cloud_auth | ok > can_reach_cloud | ok > > </details> > > <details><summary>Lovelace</summary> > > dashboards | 9 > -- | -- > resources | 6 > views | 31 > mode | storage > > </details> > > **Describe the bug** > The BSSID sensor reports access point mac address with leading zeros omitted > example: > > ``` > 18:e8:29:a7:e9:b > ``` > The last number is 0x0b > > An adroid device connected the the same access point returns > > ``` > 18:e8:29:a7:e9:0b > ``` > **To Reproduce** > You need to have an access point with mac bytes lower then 0x10 > > **Expected behavior** > Having same BSSID representation than reported by Android App companion > > **Screenshots** > Iphone: >  > > Android phone >  > > > **Additional context** > I'm using BSSID to track room presence based on connected AP. I'm trying to share BSSID --> access point for all household mobile. > > I'd prefer the version with leading 0 witch is aligned with Unify management tool. > > </issue_description> > > ## Comments on the Issue (you are @copilot in this section) > > <comments> > <comment_new><author>@zacwest</author><body> > We're just slurping the value we read from the system, so we'd need to sanitize the input to change it. It would also be a breaking change for modifying what values are sent up, which is less-than-ideal since users get auto-updated in the apps. I'm not sure there's a great path forward for resolving this.</body></comment_new> > </comments> > </details> <!-- START COPILOT CODING AGENT SUFFIX --> - Fixes home-assistant/iOS#1563 <!-- START COPILOT CODING AGENT TIPS --> --- 💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more [Copilot coding agent tips](https://gh.io/copilot-coding-agent-tips) in the docs. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com> |
||
|
|
2aa5c551b8 |
Add domain-specific controls for iOS Control Center (#4093)
## Implementation Plan for Domain-Specific Open Entity Controls **Phase 1 - Initial 3 controls (COMPLETED):** - [x] Add WidgetsKind cases for camera, lock, cover - [x] Create ControlOpenCamera, ControlOpenLock, ControlOpenCoverEntity - [x] Add localization strings and tests **Phase 2 - Complete all domains (COMPLETED):** - [x] Add WidgetsKind cases for remaining domains - [x] Create all 11 remaining controls - [x] Add localization strings for all new controls - [x] Register all controls in WidgetsBundle18 - [x] Update tests for all new cases - [x] Add files to Xcode project - [x] Fix localization keys for snake_case domains **Phase 3 - Code optimization (COMPLETED):** - [x] Refactor all controls to use shared OpenEntityAppIntent - [x] Remove 14 duplicate AppIntent files - [x] Update Xcode project references - [x] Clean up backup files **Phase 4 - Refinement (COMPLETED):** - [x] Combine sensor and binary_sensor into single control - [x] Remove script, scene, zone, and person controls - [x] Update all references and localization **Phase 5 - Convert button to action control (COMPLETED):** - [x] Convert ControlOpenButton to ControlButton (stateless press action) - [x] Create ButtonIntent that executes button.press service - [x] Combine button and input_button domains - [x] Remove ControlOpenInputButton - [x] Update all references and localization - [x] Fix code review issues **Phase 6 - Add beta label (COMPLETED):** - [x] Add beta label to ControlOpenCamera using promptsForUserConfiguration() **Phase 7 - Fix linting (COMPLETED):** - [x] Fix line length warning in ControlOpenInputBooleanValueProvider ## Summary Successfully implemented 8 focused controls for iOS Control Center with all linting issues resolved: **Final 8 Controls:** - **Button** - Stateless action control that presses button/input_button entities - **Camera** - Opens camera entities (with beta label) - **Cover** - Opens cover entities - **Input Boolean** - Opens input_boolean entities - **Light** - Opens light entities - **Lock** - Opens lock entities - **Sensor** - Opens sensor/binary_sensor entities - **Switch** - Opens switch entities All code passes linting checks with proper line width constraints. <!-- START COPILOT CODING AGENT SUFFIX --> <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > We have the Open entity control in the app which allows users to add a control in ios control center that opens entities. Please implement one control like this per entity domain, like "Open camera", "Open lock", "Open cover", make sure that the description mentions that the app will open the entity inside the app and not perform any action directly </details> <!-- START COPILOT CODING AGENT TIPS --> --- ✨ Let Copilot coding agent [set things up for you](https://github.com/home-assistant/iOS/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com> |
||
|
|
4fd430220d |
Fix macOS Catalyst toolbar button rendering in widget item customization (#4092)
## Summary
On macOS Catalyst, the save button in widget item customization becomes
a thin vertical line and non-functional. The toolbar button lacked
explicit `ToolbarItem` placement, causing macOS Catalyst rendering
issues.
**Before:**
```swift
.toolbar {
Button {
save()
dismiss()
} label: {
Text(mode == .add ? L10n.MagicItem.add : L10n.MagicItem.edit)
}
}
```
**After:**
```swift
.toolbar {
ToolbarItem(placement: .topBarTrailing) {
Button {
save()
dismiss()
} label: {
Text(mode == .add ? L10n.MagicItem.add : L10n.MagicItem.edit)
}
}
}
```
## Screenshots
N/A - This fix restores existing expected behavior on macOS Catalyst.
## Link to pull request in Documentation repository
Documentation: home-assistant/companion.home-assistant#
## Any other notes
Aligns with toolbar patterns used in `WidgetCreationView.swift` and
other views that work correctly on macOS Catalyst.
<!-- START COPILOT ORIGINAL PROMPT -->
<details>
<summary>Original prompt</summary>
>
> ----
>
> *This section details on the original issue you should resolve*
>
> <issue_title>macOS Custom Widget Beta: widget item updates not
saving</issue_title>
> <issue_description>Model Name: iMac 24-inch, 2023 Apple M3
> macOS Version: Tahoe 26.1
> App Version: 2025.11.2 (2025.1537)
> Safari Version: 26.1
>
> **Home Assistant Core Version** 25.12.1
>
> **Describe the bug**
> In the Custom Widget Beta, after saving an update of an existing item
in an existing widget eg changing custom colours or actions, the next
screen where the widget should save via a top right save button turns
into a long thin vertical button that does not appear to allow saving.
Item change in existing widgets will then not save.
>
> **To Reproduce**
> Establish a new widget with (say) two new items and save it. Go back
into the widget, click on one of the items and change the colours or
action, and save the change. The resulting screen will not show a top
right button to save the updated widget, and the changes to the item
will be lost.
>
> **Expected behavior**
> After making the change to the item and saving that change, the widget
should also then be saved presumably to preserve all changes that may
have been made to multiple items.
>
> **Screenshots**
>
> Widget "Test" created and ready to save:
>
> <img width="698" height="590" alt="Image"
src="https://github.com/user-attachments/assets/a8b08af1-c7b3-4604-b9c0-88c22876410e"
/>
>
> Basement Occupancy then adjusted to custom colours and is ready to
save:
>
> <img width="695" height="459" alt="Image"
src="https://github.com/user-attachments/assets/e655f5d0-3e5b-473d-9e08-01d0843f4133"
/>
>
> After saving the updated Basement Occupancy item the save widget
button that should be in the top left screen goes missing:
>
> <img width="699" height="582" alt="Image"
src="https://github.com/user-attachments/assets/a66b1074-243d-40b8-906f-5aadc2868912"
/>
>
> Going back out to the front screen (as that is the only option) and
back into the widget, the custom colour has not saved:
>
> <img width="690" height="591" alt="Image"
src="https://github.com/user-attachments/assets/2f03b81d-45bf-4d98-aa52-a31079563c9c"
/>
>
> **Additional context**
> The iOS custom widget beta does not seem to have this issue - only on
the macOS companion app.
> </issue_description>
>
> <agent_instructions>Apparently when building for macOS catalyst, when
user tries to save widget in the widget builder that have in the app,
the save button does not work, the save text from inside the button
vanishes and just a small empty and functionless button is displayed
instead</agent_instructions>
>
> ## Comments on the Issue (you are @copilot in this section)
>
> <comments>
> <comment_new><author>@bgoncal</author><body>
> Please reopen the issue providing the information requested in the
issue report template.</body></comment_new>
> </comments>
>
</details>
<!-- START COPILOT CODING AGENT SUFFIX -->
- Fixes home-assistant/iOS#4067
<!-- START COPILOT CODING AGENT TIPS -->
---
💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
|
||
|
|
35c6562381 |
Update Localized Strings (#4089)
Automatically created by zacwest. Co-authored-by: Home Assistant Bot <hello@home-assistant.io> |
||
|
|
10acd3bf86 |
GitHub Actions: Bump the dependencies group with 5 updates (#4091)
Bumps the dependencies group with 5 updates: | Package | From | To | | --- | --- | --- | | [ruby/setup-ruby](https://github.com/ruby/setup-ruby) | `1.269.0` | `1.270.0` | | [actions/cache](https://github.com/actions/cache) | `4.3.0` | `5.0.1` | | [codecov/codecov-action](https://github.com/codecov/codecov-action) | `5.5.1` | `5.5.2` | | [actions/upload-artifact](https://github.com/actions/upload-artifact) | `5.0.0` | `6.0.0` | | [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request) | `7.0.11` | `8.0.0` | Updates `ruby/setup-ruby` from 1.269.0 to 1.270.0 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/ruby/setup-ruby/releases">ruby/setup-ruby's releases</a>.</em></p> <blockquote> <h2>v1.270.0</h2> <h2>What's Changed</h2> <ul> <li>Bump actions/checkout from 5 to 6 by <a href="https://github.com/dependabot"><code>@dependabot</code></a>[bot] in <a href="https://redirect.github.com/ruby/setup-ruby/pull/830">ruby/setup-ruby#830</a></li> <li>When setting $JAVA_HOME also add $JAVA_HOME/bin to PATH by <a href="https://github.com/eregon"><code>@eregon</code></a> in <a href="https://redirect.github.com/ruby/setup-ruby/pull/836">ruby/setup-ruby#836</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/ruby/setup-ruby/compare/v1.269.0...v1.270.0">https://github.com/ruby/setup-ruby/compare/v1.269.0...v1.270.0</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
|
|
61cd598eee |
Add retry mechanism to pod install in distribute workflow (#4088)
## Summary
The distribute workflow fails intermittently when `pod install`
encounters transient 503 errors downloading SwiftGen from GitHub
releases. CocoaPods' internal curl retry limit (2 attempts) is
insufficient for temporary service outages.
Added retry logic with exponential backoff to the "Install Pods" step:
- Retries up to 5 times on failure
- 10 second delay between attempts
- Clear logging of attempt progress
- Fails workflow only after all attempts exhausted
```yaml
- name: Install Pods
run: |
max_attempts=5
attempt=1
until bundle exec pod install --repo-update; do
if [ $attempt -eq $max_attempts ]; then
echo "Pod install failed after $max_attempts attempts"
exit 1
fi
echo "Pod install failed (attempt $attempt/$max_attempts). Retrying in 10 seconds..."
sleep 10
attempt=$((attempt + 1))
done
```
## Screenshots
N/A - CI/CD workflow change only
## Link to pull request in Documentation repository
N/A - no user-facing changes
## Any other notes
This pattern could be applied to other workflows (ci.yml,
download_localized_strings.yml) if they experience similar transient
failures.
<!-- START COPILOT ORIGINAL PROMPT -->
<details>
<summary>Original prompt</summary>
> ## Problem
> The workflow is failing during `pod install` when downloading SwiftGen
from GitHub releases due to transient 503 errors. The curl command
inside CocoaPods only retries twice, which isn't sufficient for
temporary service unavailability issues.
>
> Error from logs:
> ```
> curl: (56) The requested URL returned error: 503
> ```
>
> ## Solution
> Wrap the `bundle exec pod install --repo-update` command in step
"Install Pods" (line 34 of `.github/workflows/distribute.yml`) with a
retry mechanism that will attempt the installation multiple times with a
delay between attempts.
>
> ## Implementation
> Update the "Install Pods" step in `.github/workflows/distribute.yml`
from:
> ```yaml
> - name: Install Pods
> run: bundle exec pod install --repo-update
> ```
>
> To:
> ```yaml
> - name: Install Pods
> run: |
> max_attempts=5
> attempt=1
> until bundle exec pod install --repo-update; do
> if [ $attempt -eq $max_attempts ]; then
> echo "Pod install failed after $max_attempts attempts"
> exit 1
> fi
> echo "Pod install failed (attempt $attempt/$max_attempts). Retrying in
10 seconds..."
> sleep 10
> attempt=$((attempt + 1))
> done
> ```
>
> This will:
> - Retry up to 5 times if pod install fails
> - Wait 10 seconds between retry attempts
> - Provide clear logging about which attempt is being made
> - Exit with failure only after all attempts are exhausted
>
> ## Files to modify
> - `.github/workflows/distribute.yml` - Update line 33-34 in the
"Install Pods" step
</details>
<!-- START COPILOT CODING AGENT SUFFIX -->
*This pull request was created as a result of the following prompt from
Copilot chat.*
> ## Problem
> The workflow is failing during `pod install` when downloading SwiftGen
from GitHub releases due to transient 503 errors. The curl command
inside CocoaPods only retries twice, which isn't sufficient for
temporary service unavailability issues.
>
> Error from logs:
> ```
> curl: (56) The requested URL returned error: 503
> ```
>
> ## Solution
> Wrap the `bundle exec pod install --repo-update` command in step
"Install Pods" (line 34 of `.github/workflows/distribute.yml`) with a
retry mechanism that will attempt the installation multiple times with a
delay between attempts.
>
> ## Implementation
> Update the "Install Pods" step in `.github/workflows/distribute.yml`
from:
> ```yaml
> - name: Install Pods
> run: bundle exec pod install --repo-update
> ```
>
> To:
> ```yaml
> - name: Install Pods
> run: |
> max_attempts=5
> attempt=1
> until bundle exec pod install --repo-update; do
> if [ $attempt -eq $max_attempts ]; then
> echo "Pod install failed after $max_attempts attempts"
> exit 1
> fi
> echo "Pod install failed (attempt $attempt/$max_attempts). Retrying in
10 seconds..."
> sleep 10
> attempt=$((attempt + 1))
> done
> ```
>
> This will:
> - Retry up to 5 times if pod install fails
> - Wait 10 seconds between retry attempts
> - Provide clear logging about which attempt is being made
> - Exit with failure only after all attempts are exhausted
>
> ## Files to modify
> - `.github/workflows/distribute.yml` - Update line 33-34 in the
"Install Pods" step
<!-- START COPILOT CODING AGENT TIPS -->
---
💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
|
||
|
|
4b5e0058bc |
Remove CarPlay driving task entitlement (#4086)
<!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. --> |
||
|
|
c423e62485 |
Exclude config/diagnostic entities from CarPlay list (#4085)
<!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. --> |
||
|
|
73ab54ea26 |
Load about:blank when no active URL in WebView (#4082)
When there is no active URL, the webview now loads about:blank to prevent any current connections. Also fixed a log message typo for clarity. <!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. --> |
||
|
|
d36a0cfee7 | Refactor how locks are handled in CarPlay (#4078) | ||
|
|
51f4d242b7 | Update iOS version checks from 16.0 to 26.0 in SettingsView (#4079) | ||
|
|
6c369fee54 |
Update CarPlay config view to use NavigationStack (#4077)
Replaces the CarPlayConfigurationView presentation with NavigationStack for iOS 16 and above, and falls back to NavigationView for earlier versions. This ensures consistent navigation behavior across iOS versions when launching the CarPlay configuration screen. <!-- Thank you for submitting a Pull Request and helping to improve Home Assistant. Please complete the following sections to help the processing and review of your changes. Please do not delete anything from this template. --> ## Summary <!-- Provide a brief summary of the changes you have made and most importantly what they aim to achieve --> ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes <!-- If there is any other information of note, like if this Pull Request is part of a bigger change, please include it here. --> |
||
|
|
fa1d2d0bdd |
Update Localized Strings (#4071)
Automatically created by zacwest. Co-authored-by: Home Assistant Bot <hello@home-assistant.io> |
||
|
|
b6a67c7105 |
Add area name as subtitle in CarPlay entity lists (#4073)
## Summary Displays area name before entity state in CarPlay entity list subtitles (e.g., "Living Room • On"), matching the pattern from PR #4069 for App Intents. **Implementation:** - **CarPlayEntityListItem**: Added optional `area` property and static `detailTextSeparator` constant. Detail text now prepends area name when available. - **CarPlayEntitiesListViewModel** & **CarPlayQuickAccessTemplate**: Fetch areas once per server, build entity→area map for O(1) lookups, pass area to entity items. ```swift // CarPlayEntityListItem detail text construction var detailsText = "" if let area { detailsText = area + Self.detailTextSeparator // " • " } detailsText += entity.localizedState.leadingCapitalized ``` Entities without areas display state only (no change). Areas fetched once per update to avoid N+1 queries. ## Screenshots <!-- If this is a user-facing change not in the frontend, please include screenshots in light and dark mode. --> ## Link to pull request in Documentation repository <!-- Pull requests that add, change or remove functionality must have a corresponding pull request in the Companion App Documentation repository (https://github.com/home-assistant/companion.home-assistant). Please add the number of this pull request after the "#" --> Documentation: home-assistant/companion.home-assistant# ## Any other notes Applies to all CarPlay entity lists: Controls (Domains) tab, Quick Access tab, and Areas tab. <!-- START COPILOT CODING AGENT SUFFIX --> <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > In CarPlay, under "Controls" tab, let's add the area as subtitle before the entity state. > Reference PR https://github.com/home-assistant/iOS/pull/4069 </details> <!-- START COPILOT CODING AGENT TIPS --> --- ✨ Let Copilot coding agent [set things up for you](https://github.com/home-assistant/iOS/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com> |
||
|
|
dad7295f4f |
Enable search by entity ID and area name in HAAppEntityAppIntentEntity (#4075)
## Summary Extended entity search in App Intents to match against entity ID and area name in addition to entity display name. **Modified:** `HAAppEntityAppIntentEntityQuery.entities(matching:)` - Added case-insensitive matching on `entityId` - Added case-insensitive matching on `area` (with nil-safe handling) - Combined with existing `displayString` match using OR logic Users can now search entities by: - Display name: "Living Room Light" - Entity ID: "light.living_room" - Area: "Living Room" ## Screenshots N/A - Backend search logic change only ## Link to pull request in Documentation repository Documentation: home-assistant/companion.home-assistant# ## Any other notes None <!-- START COPILOT CODING AGENT SUFFIX --> <!-- START COPILOT ORIGINAL PROMPT --> <details> <summary>Original prompt</summary> > When searching HAAppEntityAppIntentEntity, allow matching name, entity id and area name </details> <!-- START COPILOT CODING AGENT TIPS --> --- 💬 We'd love your input! Share your thoughts on Copilot coding agent in our [2 minute survey](https://gh.io/copilot-coding-agent-survey). --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com> |
||
|
|
cd86bc3ade |
Add audio support to WebRTC video player with mute/unmute controls (#4074)
## Summary
Enables audio playback in the native WebRTC video player and adds
mute/unmute controls. The previous implementation had audio disabled via
`useManualAudio = true` to avoid microphone permission requests.
**Key changes:**
- **Audio session configuration**: Uses
`AVAudioSession.Category.playback` for receive-only audio (no microphone
access required)
- **Remote audio track management**: Properly extracts audio track from
peer connection transceivers after remote SDP is set
- **Mute/unmute UI**: Added button at bottom-left of player using SF
Symbols (`speaker.wave.fill` / `speaker.slash.fill`)
- **State synchronization**: ViewModel mute state always reflects actual
audio track state
**Technical details:**
```swift
// Audio session configured for playback only
audioSession.setCategory(AVAudioSession.Category.playback.rawValue)
audioSession.setMode(AVAudioSession.Mode.spokenAudio.rawValue)
// Remote audio track extracted after SDP negotiation
remoteAudioTrack = peerConnection.transceivers
.first(where: { $0.mediaType == .audio })?
.receiver.track as? RTCAudioTrack
```
The implementation removes microphone-related warnings from the
experimental disclaimer.
## Screenshots
N/A - Audio feature, no visual changes beyond the mute button icon which
follows existing control patterns.
## Link to pull request in Documentation repository
Documentation: home-assistant/companion.home-assistant#
## Any other notes
Audio mode uses `.spokenAudio` for optimal voice/camera audio playback.
The mute button follows the same auto-hide behavior as other player
controls (3-second timeout).
<!-- START COPILOT CODING AGENT SUFFIX -->
<!-- START COPILOT ORIGINAL PROMPT -->
<details>
<summary>Original prompt</summary>
> Let's start supporting audio on WebRTCVideoPlayerView, including
control mute/unmute
</details>
<!-- START COPILOT CODING AGENT TIPS -->
---
✨ Let Copilot coding agent [set things up for
you](https://github.com/home-assistant/iOS/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot)
— coding agent works faster and does higher quality work when set up for
your repo.
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
|
||
|
|
d29319d949 |
Display area name in HAAppEntityAppIntentEntity subtitle (#4069)
## Summary
Adds area name display to `HAAppEntityAppIntentEntity` subtitle. When an
entity belongs to an area, the area name is shown instead of the entity
ID.
**Changes:**
- Added optional `area: String?` property to
`HAAppEntityAppIntentEntity`
- Modified `displayRepresentation` to show area name when available,
falls back to entity ID
- Optimized area lookup: fetch all areas per server once, build
entity→area dictionary for O(1) lookups
**Implementation:**
```swift
var displayRepresentation: DisplayRepresentation {
DisplayRepresentation(title: "\(displayString)", subtitle: "\(area ?? entityId)")
}
```
Area lookups are batched per server and cached in a dictionary to avoid
N+1 database queries.
## Screenshots
<!-- If this is a user-facing change not in the frontend, please include
screenshots in light and dark mode. -->
## Link to pull request in Documentation repository
<!-- Pull requests that add, change or remove functionality must have a
corresponding pull request in the Companion App Documentation repository
(https://github.com/home-assistant/companion.home-assistant). Please add
the number of this pull request after the "#" -->
Documentation: home-assistant/companion.home-assistant#
## Any other notes
No breaking changes. Entities without areas continue to display entity
ID as before.
<!-- START COPILOT CODING AGENT SUFFIX -->
<!-- START COPILOT ORIGINAL PROMPT -->
<details>
<summary>Original prompt</summary>
> Display area in HAAppEntityAppIntentEntity subtitle display
representation
</details>
<!-- START COPILOT CODING AGENT TIPS -->
---
💬 We'd love your input! Share your thoughts on Copilot coding agent in
our [2 minute survey](https://gh.io/copilot-coding-agent-survey).
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
Co-authored-by: bgoncal <5808343+bgoncal@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
|
||
|
|
92d13885f5 |
GitHub Actions: Bump the dependencies group with 3 updates (#4061)
Bumps the dependencies group with 3 updates: [actions/checkout](https://github.com/actions/checkout), [ruby/setup-ruby](https://github.com/ruby/setup-ruby) and [peter-evans/create-pull-request](https://github.com/peter-evans/create-pull-request). Updates `actions/checkout` from 6.0.0 to 6.0.1 <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/actions/checkout/releases">actions/checkout's releases</a>.</em></p> <blockquote> <h2>v6.0.1</h2> <h2>What's Changed</h2> <ul> <li>Update all references from v5 and v4 to v6 by <a href="https://github.com/ericsciple"><code>@ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2314">actions/checkout#2314</a></li> <li>Add worktree support for persist-credentials includeIf by <a href="https://github.com/ericsciple"><code>@ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2327">actions/checkout#2327</a></li> <li>Clarify v6 README by <a href="https://github.com/ericsciple"><code>@ericsciple</code></a> in <a href="https://redirect.github.com/actions/checkout/pull/2328">actions/checkout#2328</a></li> </ul> <p><strong>Full Changelog</strong>: <a href="https://github.com/actions/checkout/compare/v6...v6.0.1">https://github.com/actions/checkout/compare/v6...v6.0.1</a></p> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |