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 @@