补偿提交:commitOnArchive 连续第四轮未落盘(M3/M4/M5 同款故障),由主控在子会话工作树补交。 M6 统计与数据上传模块交付: - M6-02 (2.10) 项目监测计划统计列表(完成度进度条+百分比 Chip) - M6-03 (2.11) / M6-04 (2.12) 测组统计与监测点统计两层下钻 - M6-01 (2.13) SAF 选原始文件 multipart 直传 AnalysisMonitorData + 解析结果反馈 - 上传队列补传闭环 UploadQueueSyncer(应用启动 + ConnectivityManager VALIDATED onAvailable 双触发,Mutex 串行,成功 SUCCESS/失败回退 PENDING 记 retry) - Tab.STATS 业务化:挂载 StatsWorkspaceFragment,删除占位 StatsFragment - 新增 StatApi/UploadApi/StatModels + StatRepository/UploadRepository - 单测 StatsModelsTest/UploadPayloadWrapTest;静态核查 7 项 + 生产网关负向契约 4 端点
48 lines
2.0 KiB
Kotlin
48 lines
2.0 KiB
Kotlin
package com.stec.cmd
|
||
|
||
import com.stec.cmd.feature.collect.CollectWorkspaceFragment
|
||
import com.stec.cmd.feature.home.ProjectWorkspaceFragment
|
||
import com.stec.cmd.feature.mine.MineFragment
|
||
import com.stec.cmd.feature.stats.StatsWorkspaceFragment
|
||
import com.stec.cmd.feature.task.TaskWorkspaceFragment
|
||
|
||
/**
|
||
* 底部导航 5 Tab 与业务模块(功能明细表编号)的挂载点注册中心。
|
||
*
|
||
* S1+ 挂载业务页面的方式:把对应 [MountItem.fragmentClass] 从占位 Fragment
|
||
* 换成业务 Fragment 即可,导航壳(MainActivity)零改动;新增 Tab 时扩展 [Tab]。
|
||
* 挂载映射依据《安卓客户端功能明细表》:
|
||
* 首页=M2、任务=M3、采集=M4+M5、统计=M6、我的=M1。
|
||
*/
|
||
object FeatureMount {
|
||
|
||
/** 底部导航 Tab(itemId 与 res/menu/bottom_nav_menu.xml 一一对应)。 */
|
||
enum class Tab(val itemId: Int, val labelRes: Int) {
|
||
HOME(R.id.nav_home, R.string.tab_home),
|
||
TASK(R.id.nav_task, R.string.tab_task),
|
||
COLLECT(R.id.nav_collect, R.string.tab_collect),
|
||
STATS(R.id.nav_stats, R.string.tab_stats),
|
||
MINE(R.id.nav_mine, R.string.tab_mine),
|
||
}
|
||
|
||
/** 单个 Tab 的挂载项。 */
|
||
data class MountItem(
|
||
val tab: Tab,
|
||
val fragmentClass: Class<out androidx.fragment.app.Fragment>,
|
||
val moduleTag: String,
|
||
)
|
||
|
||
/** 挂载注册表:S1+ 替换 fragmentClass 即完成业务页挂载。 */
|
||
val mounts: List<MountItem> = listOf(
|
||
MountItem(Tab.HOME, ProjectWorkspaceFragment::class.java, "M2 项目工作台"),
|
||
MountItem(Tab.TASK, TaskWorkspaceFragment::class.java, "M3 任务管理"),
|
||
MountItem(Tab.COLLECT, CollectWorkspaceFragment::class.java, "M4+M5 数据采集"),
|
||
MountItem(Tab.STATS, StatsWorkspaceFragment::class.java, "M6 统计与上传"),
|
||
MountItem(Tab.MINE, MineFragment::class.java, "M1 我的"),
|
||
)
|
||
|
||
/** 按 menu itemId 取挂载项;未知 id 返回 null(容错)。 */
|
||
fun byItemId(itemId: Int): MountItem? =
|
||
mounts.firstOrNull { it.tab.itemId == itemId }
|
||
}
|