From 67edb404c6c24721daf1c72a8be7d6954d2a4302 Mon Sep 17 00:00:00 2001 From: "smx.pusha" <139338836+smxpusha@users.noreply.github.com> Date: Tue, 11 Aug 2026 12:51:41 +0200 Subject: [PATCH] ENH - expand phone app experience --- frontend/src/App.vue | 11 + frontend/src/assets/main.css | 41 + frontend/src/components/PhoneStatusBar.vue | 36 +- frontend/src/stores/calls.test.ts | 50 + frontend/src/stores/calls.ts | 50 +- frontend/src/stores/phone.ts | 52 + frontend/src/types/phone.ts | 5 + frontend/src/views/apps/BillingApp.vue | 18 +- frontend/src/views/apps/CameraApp.vue | 56 +- frontend/src/views/apps/MessagesApp.vue | 2 + frontend/src/views/apps/PhoneApp.vue | 3790 ++++++++++++++++++-- frontend/testserver/index.cjs | 609 +++- sky_phone/config/config.lua | 1 + sky_phone/config/locales/en.lua | 14 +- sky_phone/source/client/main.lua | 2 + sky_phone/source/server/calls.lua | 137 +- sky_phone/source/server/db_migrate.lua | 6 + sky_phone/sql/install.sql | 18 +- 18 files changed, 4548 insertions(+), 350 deletions(-) diff --git a/frontend/src/App.vue b/frontend/src/App.vue index acb24ba..996483d 100644 --- a/frontend/src/App.vue +++ b/frontend/src/App.vue @@ -226,6 +226,9 @@ const notifications = useNotificationsStore() const route = useRoute() const router = useRouter() const isAppRoute = computed(() => route.name === 'app') +const showActiveCallReturn = computed( + () => Boolean(calls.activeCall) && route.params.appId !== 'phone', +) const appTransitionName = computed(() => route.query.transition === 'app-switch' ? 'app-switch' : 'app-window', ) @@ -818,6 +821,12 @@ function lockPhone(): void { isLocked.value = true } +function returnToActiveCall(): void { + if (!calls.activeCall) return + controlCenterOpened.value = false + void router.push('/apps/phone') +} + function unlockCamera(): void { if (phone.security.enabled) { pendingUnlockRoute.value = '/apps/camera' @@ -1044,8 +1053,10 @@ onBeforeUnmount(() => { > diff --git a/frontend/src/assets/main.css b/frontend/src/assets/main.css index 6006bb2..0ec360e 100644 --- a/frontend/src/assets/main.css +++ b/frontend/src/assets/main.css @@ -467,6 +467,47 @@ button { cursor: pointer; pointer-events: auto; } +.phone-status-bar__time-button--active-call { + isolation: isolate; + text-shadow: none; +} +.phone-status-bar__time-button--active-call::before { + position: absolute; + z-index: -1; + top: 19px; + left: calc(50% - 3px); + width: 90px; + height: 30px; + border-radius: 15px; + background: #34c759; + box-shadow: 0 2px 8px #0b6f2b66; + animation: phone-active-call-pill-in 220ms cubic-bezier(0.22, 1, 0.36, 1); + content: ''; + transform-origin: center; + transform: translateX(-50%); + transition: transform 140ms ease; +} +.phone-status-bar__time-button--active-call:active::before { + transform: translateX(-50%) scale(0.94); +} +.phone-status-bar__active-call-icon { + position: absolute; + top: 27px; + left: calc(50% - 39px); + width: 13px; + height: 13px; + stroke-width: 2.5; +} +@keyframes phone-active-call-pill-in { + from { + opacity: 0; + transform: translateX(-50%) scale(0.82); + } + to { + opacity: 1; + transform: translateX(-50%) scale(1); + } +} .phone-status-bar__indicators { position: absolute; top: 0; diff --git a/frontend/src/components/PhoneStatusBar.vue b/frontend/src/components/PhoneStatusBar.vue index 78d6706..99c7902 100644 --- a/frontend/src/components/PhoneStatusBar.vue +++ b/frontend/src/components/PhoneStatusBar.vue @@ -1,17 +1,23 @@