Align iOS home common apps and all-functions page with Android.

Add unified HomeCommonMenu/HomeAllFunctions diagnostics, rebuild all-functions from top-level menuList permissions, and document Home and AllFunctions module logic.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-30 09:40:02 +08:00
parent 63fb0462d6
commit 5692134efc
11 changed files with 693 additions and 138 deletions

View File

@ -0,0 +1,57 @@
//
// HomeAllFunctionsBuilder.swift
// suixinkan
//
// Created by Codex on 2026/6/30.
//
import Foundation
/// URI
struct HomeAllFunctionsSnapshot: Equatable {
let allFunctions: [HomeMenuItem]
let commonFunctions: [HomeMenuItem]
let moreFunctions: [HomeMenuItem]
}
/// Android `AllFunctionsViewModel`
enum HomeAllFunctionsBuilder {
/// URI /
static func build(
topLevelPermissions: [PermissionItem],
commonURIs: [String]
) -> HomeAllFunctionsSnapshot {
let allFunctions = allMenuItems(from: topLevelPermissions)
let commonSet = Set(commonURIs)
let commonFunctions = allFunctions.filter { commonSet.contains($0.uri) }
let moreFunctions = allFunctions.filter { !commonSet.contains($0.uri) }
HomeAllFunctionsDiagnostics.log(snapshot: HomeAllFunctionsSnapshot(
allFunctions: allFunctions,
commonFunctions: commonFunctions,
moreFunctions: moreFunctions
))
return HomeAllFunctionsSnapshot(
allFunctions: allFunctions,
commonFunctions: commonFunctions,
moreFunctions: moreFunctions
)
}
/// menuList API
private static func allMenuItems(from topLevelPermissions: [PermissionItem]) -> [HomeMenuItem] {
topLevelPermissions.compactMap { item -> HomeMenuItem? in
let uri = item.uri.trimmingCharacters(in: .whitespacesAndNewlines)
guard !uri.isEmpty, HomeCommonMenuStore.androidHomeMenuURIs.contains(uri) else {
return nil
}
let fallbackTitle = item.name.isEmpty ? HomeMenuRouter.title(for: uri) : item.name
return HomeMenuItem(
title: HomeMenuRouter.displayTitle(for: uri, fallback: fallbackTitle),
uri: uri,
iconSrc: item.iconSrc
)
}
}
}