mirror of
https://github.com/sudosylabs/vnidrop.git
synced 2026-08-05 02:29:55 +02:00
feat(apple): cover the window while the core boots
The core initializes asynchronously at launch, so for a moment the transfer lists look empty and the app feels stalled. Show a full-window overlay (centered spinner + "Starting…") as the top layer of the root stack while coreState.isInitialized is false; it fades out once the core is ready.
This commit is contained in:
@@ -63,6 +63,14 @@ struct RootView: View {
|
|||||||
onRefuse: approvals.refuse
|
onRefuse: approvals.refuse
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
.overlay {
|
||||||
|
// A small, unobtrusive indicator while the core finishes its async
|
||||||
|
// startup — otherwise the lists look empty and the app feels stalled.
|
||||||
|
if !sendModel.coreState.isInitialized {
|
||||||
|
CoreStartingOverlay()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.animation(.easeInOut(duration: 0.25), value: sendModel.coreState.isInitialized)
|
||||||
.vniDropTheme(isDark: isDark)
|
.vniDropTheme(isDark: isDark)
|
||||||
.preferredColorScheme(appModel.themeMode.preferredColorScheme)
|
.preferredColorScheme(appModel.themeMode.preferredColorScheme)
|
||||||
.environment(\.vniColors, isDark ? .dark : .light)
|
.environment(\.vniColors, isDark ? .dark : .light)
|
||||||
@@ -183,6 +191,32 @@ struct RootView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// A full-window cover with a centered spinner shown while the core is starting.
|
||||||
|
private struct CoreStartingOverlay: View {
|
||||||
|
var body: some View {
|
||||||
|
ZStack {
|
||||||
|
backgroundColor.ignoresSafeArea()
|
||||||
|
VStack(spacing: 16) {
|
||||||
|
ProgressView().controlSize(.large)
|
||||||
|
Text(String(localized: L10n.App.starting))
|
||||||
|
.font(.headline)
|
||||||
|
.foregroundStyle(.secondary)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.transition(.opacity)
|
||||||
|
.accessibilityElement(children: .combine)
|
||||||
|
.accessibilityLabel(Text(String(localized: L10n.App.starting)))
|
||||||
|
}
|
||||||
|
|
||||||
|
private var backgroundColor: Color {
|
||||||
|
#if os(iOS)
|
||||||
|
Color(uiColor: .systemBackground)
|
||||||
|
#else
|
||||||
|
Color(nsColor: .windowBackgroundColor)
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if os(iOS)
|
#if os(iOS)
|
||||||
import UIKit
|
import UIKit
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -321,6 +321,20 @@
|
|||||||
"ru": "О приложении"
|
"ru": "О приложении"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"app_starting": {
|
||||||
|
"context": "Shown briefly at launch while the core is still starting up.",
|
||||||
|
"translations": {
|
||||||
|
"en": "Starting…",
|
||||||
|
"fr": "Démarrage…",
|
||||||
|
"es": "Iniciando…",
|
||||||
|
"it": "Avvio…",
|
||||||
|
"de": "Wird gestartet…",
|
||||||
|
"pt": "A iniciar…",
|
||||||
|
"pl": "Uruchamianie…",
|
||||||
|
"nl": "Bezig met starten…",
|
||||||
|
"ru": "Запуск…"
|
||||||
|
}
|
||||||
|
},
|
||||||
"appearance_auto_description": {
|
"appearance_auto_description": {
|
||||||
"context": "Settings > Appearance: description for the System/auto option.",
|
"context": "Settings > Appearance: description for the System/auto option.",
|
||||||
"translations": {
|
"translations": {
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
<string name="about_privacy_title">Datenschutz & Sicherheit</string>
|
<string name="about_privacy_title">Datenschutz & Sicherheit</string>
|
||||||
<string name="about_tagline">Senden Sie Dateien direkt. Behalten Sie die Kontrolle darüber, wer sie empfängt.</string>
|
<string name="about_tagline">Senden Sie Dateien direkt. Behalten Sie die Kontrolle darüber, wer sie empfängt.</string>
|
||||||
<string name="about_title">Über</string>
|
<string name="about_title">Über</string>
|
||||||
|
<string name="app_starting">Wird gestartet…</string>
|
||||||
<string name="appearance_auto_description">Der hellen oder dunklen Darstellung dieses Geräts folgen.</string>
|
<string name="appearance_auto_description">Der hellen oder dunklen Darstellung dieses Geräts folgen.</string>
|
||||||
<string name="appearance_dark_mode">Dunkelmodus</string>
|
<string name="appearance_dark_mode">Dunkelmodus</string>
|
||||||
<string name="appearance_light_mode">Hellmodus</string>
|
<string name="appearance_light_mode">Hellmodus</string>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
<string name="about_privacy_title">Privacidad y seguridad</string>
|
<string name="about_privacy_title">Privacidad y seguridad</string>
|
||||||
<string name="about_tagline">Envíe archivos directamente. Mantenga el control de quién los recibe.</string>
|
<string name="about_tagline">Envíe archivos directamente. Mantenga el control de quién los recibe.</string>
|
||||||
<string name="about_title">Acerca de</string>
|
<string name="about_title">Acerca de</string>
|
||||||
|
<string name="app_starting">Iniciando…</string>
|
||||||
<string name="appearance_auto_description">Seguir la apariencia clara u oscura de este dispositivo.</string>
|
<string name="appearance_auto_description">Seguir la apariencia clara u oscura de este dispositivo.</string>
|
||||||
<string name="appearance_dark_mode">Modo oscuro</string>
|
<string name="appearance_dark_mode">Modo oscuro</string>
|
||||||
<string name="appearance_light_mode">Modo claro</string>
|
<string name="appearance_light_mode">Modo claro</string>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
<string name="about_privacy_title">Confidentialité et sécurité</string>
|
<string name="about_privacy_title">Confidentialité et sécurité</string>
|
||||||
<string name="about_tagline">Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit.</string>
|
<string name="about_tagline">Envoyez des fichiers directement. Gardez le contrôle de qui les reçoit.</string>
|
||||||
<string name="about_title">À propos</string>
|
<string name="about_title">À propos</string>
|
||||||
|
<string name="app_starting">Démarrage…</string>
|
||||||
<string name="appearance_auto_description">Suivre l’apparence claire ou sombre de cet appareil.</string>
|
<string name="appearance_auto_description">Suivre l’apparence claire ou sombre de cet appareil.</string>
|
||||||
<string name="appearance_dark_mode">Mode sombre</string>
|
<string name="appearance_dark_mode">Mode sombre</string>
|
||||||
<string name="appearance_light_mode">Mode clair</string>
|
<string name="appearance_light_mode">Mode clair</string>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
<string name="about_privacy_title">Privacy e sicurezza</string>
|
<string name="about_privacy_title">Privacy e sicurezza</string>
|
||||||
<string name="about_tagline">Invii file direttamente. Mantenga il controllo su chi li riceve.</string>
|
<string name="about_tagline">Invii file direttamente. Mantenga il controllo su chi li riceve.</string>
|
||||||
<string name="about_title">Informazioni</string>
|
<string name="about_title">Informazioni</string>
|
||||||
|
<string name="app_starting">Avvio…</string>
|
||||||
<string name="appearance_auto_description">Segue l’aspetto chiaro o scuro di questo dispositivo.</string>
|
<string name="appearance_auto_description">Segue l’aspetto chiaro o scuro di questo dispositivo.</string>
|
||||||
<string name="appearance_dark_mode">Modalità scura</string>
|
<string name="appearance_dark_mode">Modalità scura</string>
|
||||||
<string name="appearance_light_mode">Modalità chiara</string>
|
<string name="appearance_light_mode">Modalità chiara</string>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
<string name="about_privacy_title">Privacy en beveiliging</string>
|
<string name="about_privacy_title">Privacy en beveiliging</string>
|
||||||
<string name="about_tagline">Verstuur bestanden rechtstreeks. Houd controle over wie ze ontvangt.</string>
|
<string name="about_tagline">Verstuur bestanden rechtstreeks. Houd controle over wie ze ontvangt.</string>
|
||||||
<string name="about_title">Over</string>
|
<string name="about_title">Over</string>
|
||||||
|
<string name="app_starting">Bezig met starten…</string>
|
||||||
<string name="appearance_auto_description">De lichte of donkere weergave van dit apparaat volgen.</string>
|
<string name="appearance_auto_description">De lichte of donkere weergave van dit apparaat volgen.</string>
|
||||||
<string name="appearance_dark_mode">Donkere modus</string>
|
<string name="appearance_dark_mode">Donkere modus</string>
|
||||||
<string name="appearance_light_mode">Lichte modus</string>
|
<string name="appearance_light_mode">Lichte modus</string>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
<string name="about_privacy_title">Prywatność i bezpieczeństwo</string>
|
<string name="about_privacy_title">Prywatność i bezpieczeństwo</string>
|
||||||
<string name="about_tagline">Wysyłaj pliki bezpośrednio. Zachowaj kontrolę nad tym, kto je otrzymuje.</string>
|
<string name="about_tagline">Wysyłaj pliki bezpośrednio. Zachowaj kontrolę nad tym, kto je otrzymuje.</string>
|
||||||
<string name="about_title">Informacje</string>
|
<string name="about_title">Informacje</string>
|
||||||
|
<string name="app_starting">Uruchamianie…</string>
|
||||||
<string name="appearance_auto_description">Dopasuj do jasnego lub ciemnego wyglądu tego urządzenia.</string>
|
<string name="appearance_auto_description">Dopasuj do jasnego lub ciemnego wyglądu tego urządzenia.</string>
|
||||||
<string name="appearance_dark_mode">Tryb ciemny</string>
|
<string name="appearance_dark_mode">Tryb ciemny</string>
|
||||||
<string name="appearance_light_mode">Tryb jasny</string>
|
<string name="appearance_light_mode">Tryb jasny</string>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
<string name="about_privacy_title">Privacidade e segurança</string>
|
<string name="about_privacy_title">Privacidade e segurança</string>
|
||||||
<string name="about_tagline">Envie ficheiros diretamente. Mantenha o controlo sobre quem os recebe.</string>
|
<string name="about_tagline">Envie ficheiros diretamente. Mantenha o controlo sobre quem os recebe.</string>
|
||||||
<string name="about_title">Acerca de</string>
|
<string name="about_title">Acerca de</string>
|
||||||
|
<string name="app_starting">A iniciar…</string>
|
||||||
<string name="appearance_auto_description">Acompanhar o aspeto claro ou escuro deste dispositivo.</string>
|
<string name="appearance_auto_description">Acompanhar o aspeto claro ou escuro deste dispositivo.</string>
|
||||||
<string name="appearance_dark_mode">Modo escuro</string>
|
<string name="appearance_dark_mode">Modo escuro</string>
|
||||||
<string name="appearance_light_mode">Modo claro</string>
|
<string name="appearance_light_mode">Modo claro</string>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
<string name="about_privacy_title">Конфиденциальность и безопасность</string>
|
<string name="about_privacy_title">Конфиденциальность и безопасность</string>
|
||||||
<string name="about_tagline">Отправляйте файлы напрямую. Сохраняйте контроль над тем, кто их получает.</string>
|
<string name="about_tagline">Отправляйте файлы напрямую. Сохраняйте контроль над тем, кто их получает.</string>
|
||||||
<string name="about_title">О приложении</string>
|
<string name="about_title">О приложении</string>
|
||||||
|
<string name="app_starting">Запуск…</string>
|
||||||
<string name="appearance_auto_description">Следовать светлому или тёмному оформлению этого устройства.</string>
|
<string name="appearance_auto_description">Следовать светлому или тёмному оформлению этого устройства.</string>
|
||||||
<string name="appearance_dark_mode">Тёмный режим</string>
|
<string name="appearance_dark_mode">Тёмный режим</string>
|
||||||
<string name="appearance_light_mode">Светлый режим</string>
|
<string name="appearance_light_mode">Светлый режим</string>
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
<string name="about_privacy_title">Privacy & security</string>
|
<string name="about_privacy_title">Privacy & security</string>
|
||||||
<string name="about_tagline">Send files directly. Stay in control of who receives them.</string>
|
<string name="about_tagline">Send files directly. Stay in control of who receives them.</string>
|
||||||
<string name="about_title">About</string>
|
<string name="about_title">About</string>
|
||||||
|
<string name="app_starting">Starting…</string>
|
||||||
<string name="appearance_auto_description">Match this device’s light or dark appearance.</string>
|
<string name="appearance_auto_description">Match this device’s light or dark appearance.</string>
|
||||||
<string name="appearance_dark_mode">Dark mode</string>
|
<string name="appearance_dark_mode">Dark mode</string>
|
||||||
<string name="appearance_light_mode">Light mode</string>
|
<string name="appearance_light_mode">Light mode</string>
|
||||||
|
|||||||
Reference in New Issue
Block a user