ADD - expand phone application platform

Add the Companies app, resilient call handling, custom app registry, vendor compatibility, storage policies, frontend bridge, tests, documentation, config, locale, and SQL migrations.
This commit is contained in:
Leon.Schmidt
2026-08-11 00:22:39 +02:00
parent 72e5f91e02
commit 42ac955052
77 changed files with 17630 additions and 333 deletions
+21 -9
View File
@@ -11,7 +11,11 @@ export type HomeLayout = {
dock: HomeSlot[]
grid: HomeSlot[]
hidden: LaunchablePhoneAppId[]
version: 2
version: 3
}
function isPersistableAppId(value: unknown): value is LaunchablePhoneAppId {
return typeof value === 'string' && /^[a-z0-9][a-z0-9._-]{1,63}$/.test(value)
}
function readAppIds(
@@ -134,7 +138,7 @@ export function createDefaultHomeLayout(
dock[index] = id
}
return { dock, grid, hidden: [], version: 2 }
return { dock, grid, hidden: [], version: 3 }
}
export function parseHomeLayout(
@@ -146,6 +150,14 @@ export function parseHomeLayout(
const source = value as Partial<Record<keyof HomeLayout, unknown>>
const availableIds = new Set(installedIds)
if (source.version === 3) {
for (const collection of [source.dock, source.grid, source.hidden]) {
if (!Array.isArray(collection)) continue
for (const appId of collection) {
if (isPersistableAppId(appId)) availableIds.add(appId)
}
}
}
const hidden = readAppIds(source.hidden, availableIds)
const hiddenIds = new Set(hidden)
const persistedGridLength = Array.isArray(source.grid)
@@ -158,7 +170,7 @@ export function parseHomeLayout(
let grid: HomeSlot[]
let dock: HomeSlot[]
if (source.version === 2) {
if (source.version === 2 || source.version === 3) {
grid = readSlots(source.grid, availableIds, gridLength)
dock = readSlots(source.dock, availableIds, HOME_DOCK_CAPACITY)
} else {
@@ -189,7 +201,7 @@ export function parseHomeLayout(
}
}
return { dock, grid, hidden, version: 2 }
return { dock, grid, hidden, version: 3 }
}
export function removeHomeApp(
@@ -202,7 +214,7 @@ export function removeHomeApp(
hidden: layout.hidden.includes(appId)
? [...layout.hidden]
: [...layout.hidden, appId],
version: 2,
version: 3,
}
}
@@ -217,7 +229,7 @@ export function restoreHomeApp(
dock: [...layout.dock],
grid,
hidden: layout.hidden.filter((id) => id !== appId),
version: 2,
version: 3,
}
}
@@ -230,7 +242,7 @@ export function addHomePage(layout: HomeLayout): HomeLayout {
dock: [...layout.dock],
grid: [...layout.grid, ...createSlots(HOME_GRID_PAGE_SIZE)],
hidden: [...layout.hidden],
version: 2,
version: 3,
}
}
@@ -252,7 +264,7 @@ export function deleteHomePage(layout: HomeLayout, page: number): HomeLayout {
dock: [...layout.dock],
grid,
hidden: [...layout.hidden],
version: 2,
version: 3,
}
}
@@ -267,7 +279,7 @@ export function moveHomeApp(
dock: [...layout.dock],
grid: [...layout.grid],
hidden: [...layout.hidden],
version: 2,
version: 3,
}
const source = next[from]
const target = next[to]