iOS/Sources/App/WebView/Extensions/NotificationPermissionRequestView.swift
Bruno Pantaleão Gonçalves 1d274b33b6
Update notifications permission UI (#3710)
<!-- 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. -->
![Simulator Screenshot - iPhone 16 - 2025-07-09 at 15 16
21](https://github.com/user-attachments/assets/3dfdaf6b-e188-4d93-b2e6-31ae951ffabb)
  
## 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>
2025-07-09 16:54:10 +02:00

63 lines
2.2 KiB
Swift

import Shared
import SwiftUI
struct NotificationPermissionRequestView: View {
@Environment(\.dismiss) private var dismiss
@State private var bottomSheetState: AppleLikeBottomSheetViewState?
var body: some View {
AppleLikeBottomSheet(
title: L10n.Permission.Notification.title, content: {
VStack(spacing: DesignSystem.Spaces.three) {
ScrollView {
Text(L10n.Permission.Notification.body)
.foregroundStyle(.secondary)
.multilineTextAlignment(.center)
.padding(.vertical, DesignSystem.Spaces.one)
.fixedSize(horizontal: false, vertical: true)
}
.frame(maxHeight: 200)
VStack(spacing: DesignSystem.Spaces.one) {
Button {
triggerNativePopup()
} label: {
Text(L10n.Permission.Notification.primaryButton)
}
.buttonStyle(.primaryButton)
Button {
triggerNativePopup()
} label: {
Text(L10n.Permission.Notification.secondaryButton)
}
.buttonStyle(.secondaryButton)
}
}
},
contentInsets: .init(
top: .zero,
leading: DesignSystem.Spaces.two,
bottom: DesignSystem.Spaces.three,
trailing: DesignSystem.Spaces.two
),
bottomSheetMinHeight: 310,
state: $bottomSheetState
)
}
private func triggerNativePopup() {
dismiss()
UNUserNotificationCenter.current().requestAuthorization(options: .defaultOptions) { _, error in
if let error {
Current.Log.error("Error when requesting notifications permissions: \(error)")
}
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
}
}
}
#Preview {
NotificationPermissionRequestView()
}