Files
Felitendo 656f87b10c feat: one dynamic island for every install, and a floating download circle
The island used to be one activity per install, which works for exactly one:
iOS collapses the Dynamic Island to its minimal presentation as soon as a
second activity exists, so two installs bought two dots and no numbers, and
past the concurrent-activity cap further ones were refused outright. It is one
activity describing the batch now, which is also the only shape that can say
how many apps are coming, add up a transfer rate, or count down to the last
byte.

What the island gained: a name or a count, the batch progress, bytes in over
bytes expected, the combined rate, and a countdown the system ticks on its own
between updates. Above iOS 17 it also carries a pause button. Below that it
stays the read-only island it has always been.

Downloads can now be held and carried on. The task is cancelled while paused
and the bytes so far are kept as resume data, so nothing already fetched is
fetched twice. Speed sampling is reset around a pause, or the first sample
after resuming divides the new bytes by the whole idle time.

The banner above the tab view is gone and a draggable circle replaces it. The
banner described manual imports only, showed the first of them only, and
pushed the whole app down by its own height to do it. The circle covers
nothing, counts everything, snaps to whichever side it is let go nearer, and
remembers where it was put. Tapping it opens the list: every download in
flight, its own pause and stop, and pause or stop for the lot.

Store installs and manual imports are listed together on purpose. They are the
same thing to whoever is waiting for them, and which code path started one is
not a distinction worth a separate screen.
2026-08-17 10:43:45 +02:00

515 lines
12 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"sourceLanguage": "en",
"strings": {
"%lld apps": {
"extractionState": "manual",
"localizations": {
"ar": {
"stringUnit": {
"state": "translated",
"value": "%lld تطبيقات"
}
},
"cs": {
"stringUnit": {
"state": "translated",
"value": "%lld aplikací"
}
},
"de": {
"stringUnit": {
"state": "translated",
"value": "%lld Apps"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "%lld apps"
}
},
"es": {
"stringUnit": {
"state": "translated",
"value": "%lld apps"
}
},
"fa": {
"stringUnit": {
"state": "translated",
"value": "%lld برنامه"
}
},
"fr": {
"stringUnit": {
"state": "translated",
"value": "%lld apps"
}
},
"id": {
"stringUnit": {
"state": "translated",
"value": "%lld aplikasi"
}
},
"it": {
"stringUnit": {
"state": "translated",
"value": "%lld app"
}
},
"pl": {
"stringUnit": {
"state": "translated",
"value": "%lld aplikacji"
}
},
"pt-BR": {
"stringUnit": {
"state": "translated",
"value": "%lld apps"
}
},
"ru": {
"stringUnit": {
"state": "translated",
"value": "%lld прил."
}
},
"th": {
"stringUnit": {
"state": "translated",
"value": "%lld แอป"
}
},
"tr": {
"stringUnit": {
"state": "translated",
"value": "%lld uygulama"
}
},
"vi": {
"stringUnit": {
"state": "translated",
"value": "%lld ứng dụng"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "%lld 个 App"
}
}
}
},
"Downloading": {
"comment": "Install phase, shown on the Live Activity",
"extractionState": "manual",
"localizations": {
"ar": {
"stringUnit": {
"state": "translated",
"value": "جارٍ التنزيل"
}
},
"cs": {
"stringUnit": {
"state": "translated",
"value": "Stahování"
}
},
"de": {
"stringUnit": {
"state": "translated",
"value": "Wird geladen"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Downloading"
}
},
"es": {
"stringUnit": {
"state": "translated",
"value": "Descargando"
}
},
"fa": {
"stringUnit": {
"state": "translated",
"value": "در حال دانلود"
}
},
"fr": {
"stringUnit": {
"state": "translated",
"value": "Téléchargement"
}
},
"id": {
"stringUnit": {
"state": "translated",
"value": "Mengunduh"
}
},
"it": {
"stringUnit": {
"state": "translated",
"value": "Download in corso"
}
},
"pl": {
"stringUnit": {
"state": "translated",
"value": "Pobieranie"
}
},
"pt-BR": {
"stringUnit": {
"state": "translated",
"value": "Baixando"
}
},
"ru": {
"stringUnit": {
"state": "translated",
"value": "Загрузка"
}
},
"th": {
"stringUnit": {
"state": "translated",
"value": "กำลังดาวน์โหลด"
}
},
"tr": {
"stringUnit": {
"state": "translated",
"value": "İndiriliyor"
}
},
"vi": {
"stringUnit": {
"state": "translated",
"value": "Đang tải xuống"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "正在下载"
}
}
}
},
"Installing": {
"comment": "Install phase, shown on the Live Activity",
"extractionState": "manual",
"localizations": {
"ar": {
"stringUnit": {
"state": "translated",
"value": "جارٍ التثبيت"
}
},
"cs": {
"stringUnit": {
"state": "translated",
"value": "Instalace"
}
},
"de": {
"stringUnit": {
"state": "translated",
"value": "Wird installiert"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Installing"
}
},
"es": {
"stringUnit": {
"state": "translated",
"value": "Instalando"
}
},
"fa": {
"stringUnit": {
"state": "translated",
"value": "در حال نصب"
}
},
"fr": {
"stringUnit": {
"state": "translated",
"value": "Installation"
}
},
"id": {
"stringUnit": {
"state": "translated",
"value": "Memasang"
}
},
"it": {
"stringUnit": {
"state": "translated",
"value": "Installazione"
}
},
"pl": {
"stringUnit": {
"state": "translated",
"value": "Instalowanie"
}
},
"pt-BR": {
"stringUnit": {
"state": "translated",
"value": "Instalando"
}
},
"ru": {
"stringUnit": {
"state": "translated",
"value": "Установка"
}
},
"th": {
"stringUnit": {
"state": "translated",
"value": "กำลังติดตั้ง"
}
},
"tr": {
"stringUnit": {
"state": "translated",
"value": "Yükleniyor"
}
},
"vi": {
"stringUnit": {
"state": "translated",
"value": "Đang cài đặt"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "正在安装"
}
}
}
},
"Paused": {
"extractionState": "manual",
"localizations": {
"ar": {
"stringUnit": {
"state": "translated",
"value": "متوقف مؤقتًا"
}
},
"cs": {
"stringUnit": {
"state": "translated",
"value": "Pozastaveno"
}
},
"de": {
"stringUnit": {
"state": "translated",
"value": "Pausiert"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Paused"
}
},
"es": {
"stringUnit": {
"state": "translated",
"value": "En pausa"
}
},
"fa": {
"stringUnit": {
"state": "translated",
"value": "متوقف شده"
}
},
"fr": {
"stringUnit": {
"state": "translated",
"value": "Suspendu"
}
},
"id": {
"stringUnit": {
"state": "translated",
"value": "Dijeda"
}
},
"it": {
"stringUnit": {
"state": "translated",
"value": "Sospeso"
}
},
"pl": {
"stringUnit": {
"state": "translated",
"value": "Wstrzymano"
}
},
"pt-BR": {
"stringUnit": {
"state": "translated",
"value": "Pausado"
}
},
"ru": {
"stringUnit": {
"state": "translated",
"value": "Приостановлено"
}
},
"th": {
"stringUnit": {
"state": "translated",
"value": "หยุดชั่วคราว"
}
},
"tr": {
"stringUnit": {
"state": "translated",
"value": "Duraklatıldı"
}
},
"vi": {
"stringUnit": {
"state": "translated",
"value": "Đã tạm dừng"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "已暂停"
}
}
}
},
"Preparing": {
"comment": "Install phase, shown on the Live Activity",
"extractionState": "manual",
"localizations": {
"ar": {
"stringUnit": {
"state": "translated",
"value": "جارٍ التحضير"
}
},
"cs": {
"stringUnit": {
"state": "translated",
"value": "Příprava"
}
},
"de": {
"stringUnit": {
"state": "translated",
"value": "Wird vorbereitet"
}
},
"en": {
"stringUnit": {
"state": "translated",
"value": "Preparing"
}
},
"es": {
"stringUnit": {
"state": "translated",
"value": "Preparando"
}
},
"fa": {
"stringUnit": {
"state": "translated",
"value": "در حال آماده‌سازی"
}
},
"fr": {
"stringUnit": {
"state": "translated",
"value": "Préparation"
}
},
"id": {
"stringUnit": {
"state": "translated",
"value": "Menyiapkan"
}
},
"it": {
"stringUnit": {
"state": "translated",
"value": "Preparazione"
}
},
"pl": {
"stringUnit": {
"state": "translated",
"value": "Przygotowywanie"
}
},
"pt-BR": {
"stringUnit": {
"state": "translated",
"value": "Preparando"
}
},
"ru": {
"stringUnit": {
"state": "translated",
"value": "Подготовка"
}
},
"th": {
"stringUnit": {
"state": "translated",
"value": "กำลังเตรียม"
}
},
"tr": {
"stringUnit": {
"state": "translated",
"value": "Hazırlanıyor"
}
},
"vi": {
"stringUnit": {
"state": "translated",
"value": "Đang chuẩn bị"
}
},
"zh-Hans": {
"stringUnit": {
"state": "translated",
"value": "正在准备"
}
}
}
}
},
"version": "1.0"
}