* 初始版本 * refactor(reader): MVI architecture + menu settings overhaul MVI/UDF Architecture: - Add ReadBookContract: UiState, Intent, Effect, Sheet, Dialog, ConfigUpdate - Refactor ReadBookViewModel with onIntent() entry point - Add ReadBookScreen/ReadBookRouteScreen stateless composables - Add ReadBookColorTheme for reader-specific theme override - Add ReadConfigContract for read config screen MVI ReadStyleSheet Decomposition: - Split ReadStyleSheet into SystemMenuPage, TextTitleSheet, HeaderFooterPage, TitleBarIconSheet, GlobalThemePage - Each page owns its tab state, color picker, and config mutations Data Layer (DataStore-backed Repositories): - Add ReadSettingsRepository with ReadPreferences flow - Add MangaSettingsRepository with MangaPreferences flow - Add ReadAloudSettingsRepository for TTS settings - Add ReadStyleRepository (file I/O for read style configs) - Add ReadBookStyleConfigRepository (repository boundary) - Add ReadStyleResolver for background/theme resolution - Remove legacy ReadTipConfig (merged into ReadBookConfig) - Register all new repositories in Koin appModule Menu Settings: - Add unified border settings (width, color, colorNight) for both top and bottom bars with drawWithCache + drawPath - Add ColorModePill with light/dark toggle and '+' icon for no-color state in TinySettingItems - Add TinyClearColorModeSettingItem for border color config - Add menu color customization (bg, accent, container) with day/night variants and seed color mode - Add bottom bar layout settings (corner radius, margins) - Add custom icon support for menu buttons and title bar icons - Add title bar icon position setting Config Pipeline: - Consolidate all ReadBookConfig mutations into typed ConfigUpdate sealed interface with legacy UP_CONFIG code mapping - Add resolvedMenuBorderColor (auto day/night switching) - Add 20 new PreferKey constants for menu settings - Update manga config dialogs to use MangaSettingsRepository - Update ReadConfigViewModel with DataStore flow observation * feat(reader): add liquid glass menu bars and floating bottom bar - Integrate com.kyant.backdrop 2.0.0 for liquid glass blur/vibrancy effects on reading menu top bar and bottom bar (Android 13+) - Add floating bottom bar toggle replacing manual margin sliders - Extract ReadMenuConfig data class for proper MVI state management of all menu configuration properties - Enable edge-to-edge in BaseComposeActivity, remove manual navigation bar color management across base classes and controller - Fix fullScreen() to use setDecorFitsSystemWindows(false) * Refactor series button rendering * 实现液态玻璃 * 优化液态玻璃 * @ fix(reader): fix MVI behavior issues and improve sheet lifecycle Behavior fixes: - Fix AddSourceAsNewBook empty implementation — wire intent to addToBookshelf - Fix content edit loading stuck on null chapter/content — use onFinally - Fix cannot save empty content — remove isEmpty guard, use title as loaded proxy - Fix bookmark not opening — use openReadMenuRoute instead of dead activeSheet path - Fix chapter source sheet persists — animate dismiss via show param before removal - Fix chapter source reopens to TOC — reset showToc in initData - Fix SaveChapterContent saves to wrong chapter — carry chapterIndex in intent - Fix chapter source search runs after dismiss — cancel searchJob in dispose - Fix "go to background" button in ReadAloud — use CloseReadBook intent Architecture improvements: - ReadMenuConfig uses ImmutableMap for Compose stability - Fix stale remember in ReadBookMenuBar title bar icons - Move icon picker file IO from composable to ViewModel - Route launcher results through MVI intents instead of direct calls - Fix ChangeChapterSource effect collector key — use viewModel not Unit - Make ReadAloudConfigSheet UDF-compliant — stateless with intents - Remove main menu buttons from AutoRead and ReadAloud sheets @ * @ refactor(reader): use Material Icons and ConfirmDismissButtonsRow - TitleBarIconSheet: replace drawable resources with Icons library, use ConfirmDismissButtonsRow for save/cancel buttons - SystemMenuPage MenuCustomIconSheet: same icon and button treatment - ReadBookMenuBar: update ToolButtonDef/TitleBarIconDef to use ImageVector instead of drawable resource Int - Use AutoMirrored variants for List and HelpOutline icons @ * feat: 优化液态玻璃 * feat: 优化液态玻璃 * fix(AppLogSheet): 从本地文件读取日志,替代内存列表 * @ feat(reader): highlight rules, theme refactor & MVI improvements - Add HighlightRule entity, DAO, and config/edit sheets - Add ThemeConfigStore, remove OldThemeConfig - Refactor ReadBookContract/ViewModel/Screen for deeper MVI - Add CharStyle for text rendering, refactor TextLine/TextChapterLayout - Add SectionTitle, TinySettingItems UI components - Remove legacy XML layouts (regex_color_config) - Update database schema to v90 - Various sheet and widget refinements @ * @ fix: address PR review feedback - ReadStyleRepository: fix copy-paste bug (bgStrNight→bgStr) + add bgTypeNight import - BgImageSpan: replace Bitmap.createScaledBitmap with BitmapShader matrix scaling - HighlightRule: use UUID.randomUUID() instead of System.currentTimeMillis() - ChangeSourceSearchUseCase: guard against empty chapters list @ * @fix: remove residual regexColorRules references after merge - ChangeSourceSearchUseCase: adapt filter lambda to new 3-param signature - TextChapterLayout: remove globalRegexResult field, preApplyRegexColorRules call, and the entire regexColorRules fullTextBuilder block @ * fix: 图标间距
119 lines
6.8 KiB
JSON
119 lines
6.8 KiB
JSON
{
|
|
"permissions": {
|
|
"allow": [
|
|
"Bash(./gradlew compileAppDebugKotlin)",
|
|
"Bash(./gradlew test *)",
|
|
"Bash(./gradlew :app:compileAppDebugUnitTestKotlin)",
|
|
"Bash(head -n 508 \"app/src/main/java/io/legado/app/model/CacheBook.kt\")",
|
|
"Bash(mv /tmp/cachebook_tmp.kt \"app/src/main/java/io/legado/app/model/CacheBook.kt\")",
|
|
"Bash(./gradlew :app:cleanCompileAppDebugKotlin)",
|
|
"Bash(./gradlew :app:compileAppDebugKotlin --rerun-tasks)",
|
|
"Bash(./gradlew :app:compileAppDebugKotlin)",
|
|
"Bash(./gradlew :app:cleanCompileAppDebugKotlin :app:compileAppDebugKotlin)",
|
|
"Bash(cp -r \"D:/AndroidPrj/legado-with-MD3/.codex/skills/legado-compose-review/SKILL.md\" \"D:/AndroidPrj/legado-with-MD3/.claude/skills/legado-compose-review/SKILL.md\")",
|
|
"Bash(cp -r \"D:/AndroidPrj/legado-with-MD3/.codex/skills/legado-compose-review/references\" \"D:/AndroidPrj/legado-with-MD3/.claude/skills/legado-compose-review/\")",
|
|
"WebSearch",
|
|
"Bash(./gradlew assembleAppDebug)",
|
|
"Bash(git checkout *)",
|
|
"Bash(./gradlew :app:compileAppDebugKotlin --no-daemon)",
|
|
"Bash(Select-Object -Last 50)",
|
|
"PowerShell(./gradlew :app:compileAppDebugKotlin --no-daemon 2>&1 | Select-Object -Last 50)",
|
|
"PowerShell(./gradlew :app:compileAppDebugKotlin --rerun-tasks 2>&1 | Select-Object -Last 30)",
|
|
"PowerShell(./gradlew :app:compileAppDebugKotlin --rerun-tasks 2>&1 | Select-Object -Last 40)",
|
|
"PowerShell(./gradlew :app:compileAppDebugKotlin --rerun-tasks 2>&1 | Select-Object -Last 15)",
|
|
"PowerShell(./gradlew :app:compileAppDebugKotlin --rerun-tasks 2>&1 | Select-Object -Last 5)",
|
|
"Bash(./gradlew assembleAppNoR8)",
|
|
"Bash(.\\\\gradlew.bat :app:compileAppDebugKotlin)",
|
|
"PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin 2>&1 | Select-Object -Last 30)",
|
|
"PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin 2>&1 | Select-Object -Last 15)",
|
|
"PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin 2>&1 | Select-Object -Last 10)",
|
|
"PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin 2>&1 | Select-Object -Last 8)",
|
|
"Bash(Get-ChildItem \"app/src/main/java/io/legado/app/ui/main/bookshelf/\" -Name)",
|
|
"Bash(Sort-Object)",
|
|
"Bash(git rm *)",
|
|
"Bash(git commit *)",
|
|
"Bash(Select-Object -Last 30)",
|
|
"Bash(./gradlew.bat :app:compileAppDebugKotlin)",
|
|
"Bash(git add *)",
|
|
"Bash(git mv *)",
|
|
"PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin 2>&1)",
|
|
"WebFetch(domain:cs.android.com)",
|
|
"WebFetch(domain:github.com)",
|
|
"PowerShell(Get-ChildItem *)",
|
|
"PowerShell(Get-ChildItem -Path \"D:\\\\Android\\\\.gradle\\\\caches\\\\modules-2\\\\files-2.1\\\\androidx.navigation3\\\\navigation3-runtime-android\\\\1.0.1\" -Recurse | ForEach-Object { $_.FullName + \" \\(\" + $_.Length + \" bytes\\)\" })",
|
|
"Bash(jar tf *)",
|
|
"Read(//d/tmp/**)",
|
|
"Bash(jar xf *)",
|
|
"PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin)",
|
|
"PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin 2>&1 | Select-Object -Last 5)",
|
|
"PowerShell(.\\\\gradlew.bat test 2>&1 | Select-Object -Last 10)",
|
|
"Bash(npx skills *)",
|
|
"Bash(npx *)",
|
|
"PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin 2>&1 | Select-Object -Last 20)",
|
|
"Bash(cmd /c \"gradlew.bat :app:compileAppDebugKotlin\")",
|
|
"Bash(cmd /c \"gradlew.bat :app:compileAppDebugKotlin 2>&1\")",
|
|
"PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin 2>&1 | Select-Object -Last 40)",
|
|
"PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin 2>&1 | Select-Object -Last 100)",
|
|
"PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin 2>&1 | Select-Object -Last 50)",
|
|
"Bash(python3 *)",
|
|
"WebFetch(domain:raw.githubusercontent.com)",
|
|
"Bash(xargs -I{} jar -tf {})",
|
|
"Bash(gh api *)",
|
|
"Bash(rustup show *)",
|
|
"PowerShell(rustup show *)",
|
|
"PowerShell(npm *)",
|
|
"PowerShell(gcc *)",
|
|
"Bash(gh repo *)",
|
|
"Bash(Test-Path *)",
|
|
"Bash(git stash *)",
|
|
"Bash(Select-String -Pattern \"FAILED|error:\")",
|
|
"Bash(Select-Object -First 5)",
|
|
"Bash(Select-String -NotMatch \"^\\\\s*$\")",
|
|
"Bash(Select-Object -Last 20)",
|
|
"WebFetch(domain:compose-miuix-ui.github.io)",
|
|
"Bash(Select-Object -Last 60)",
|
|
"PowerShell(.\\\\gradlew.bat :app:compileAppDebugKotlin 2>&1 | Select-Object -Last 60)",
|
|
"Bash(New-Item *)",
|
|
"Bash(dir /s /b \"%USERPROFILE%\\\\.gradle\\\\caches\\\\*miuix*\")",
|
|
"Bash(findstr /i \"jar\\\\|aar\")",
|
|
"Bash(dir /s /b \"%USERPROFILE%\\\\.gradle\\\\caches\\\\transforms-*\\\\*PullToRefresh*\")",
|
|
"Bash(dir /s /b \"D:\\\\AndroidPrj\\\\legado-with-MD3\\\\app\\\\build\\\\*PullToRefresh*\")",
|
|
"Bash(dir /s /b \"D:\\\\AndroidPrj\\\\legado-with-MD3\")",
|
|
"Bash(findstr /i \"miuix.*\\\\.kt\")",
|
|
"Bash(findstr /v \"\\\\\\\\build\\\\\\\\\")",
|
|
"Bash(dir /s /b \"D:\\\\AndroidPrj\\\\legado-with-MD3\\\\.gradle\\\\*miuix*\")",
|
|
"Skill(legado-compose-review)",
|
|
"Bash(cmd /c \".\\\\gradlew.bat :app:compileAppDebugKotlin\")",
|
|
"PowerShell(gh search *)",
|
|
"WebFetch(domain:repo1.maven.org)",
|
|
"WebFetch(domain:s01.oss.sonatype.org)",
|
|
"WebFetch(domain:api.github.com)",
|
|
"Bash(javap -public /tmp/classes.jar!top/yukonga/miuix/kmp/basic/NavigationBarKt.class)",
|
|
"Bash(javap -public -cp /tmp/classes.jar top.yukonga.miuix.kmp.basic.NavigationBarKt)",
|
|
"PowerShell(Join-Path *)",
|
|
"Bash(dir /s /b \"C:\\\\Users\\\\*\\\\.gradle\\\\caches\")",
|
|
"Bash(findstr /i \"material3\")",
|
|
"Bash(findstr /i \"sources\")",
|
|
"Bash(dir /s /b \"%USERPROFILE%\\\\.gradle\\\\caches\")",
|
|
"Bash(findstr /i \"material3.*sources\")",
|
|
"WebFetch(domain:android.googlesource.com)",
|
|
"Read(//c/Users//**)",
|
|
"Bash(Get-ChildItem -Path \"D:\\\\AndroidPrj\\\\legado-with-MD3\" -Directory -Depth 0)",
|
|
"Bash(Select-Object Name)",
|
|
"PowerShell(Get-ChildItem -Path \"D:\\\\AndroidPrj\\\\legado-with-MD3\\\\app\\\\src\\\\main\\\\java\\\\io\\\\legado\\\\app\" -Directory -Depth 1 | ForEach-Object { $_.FullName.Replace\\(\"D:\\\\AndroidPrj\\\\legado-with-MD3\\\\app\\\\src\\\\main\\\\java\\\\io\\\\legado\\\\app\\\\\", \"\"\\) })",
|
|
"Bash(gh pr *)",
|
|
"PowerShell(Get-Content *)",
|
|
"Bash(python *)",
|
|
"Bash(C:\\\\Users\\\\www13\\\\.claude\\\\projects\\\\D--AndroidPrj-legado-with-MD3\\\\c1441549-f22e-480f-8eaf-d830b19148d1\\\\tool-results\\\\guangyu_source.json)",
|
|
"Bash(node -e ' *)",
|
|
"Bash(node *)",
|
|
"Bash(Select-String -Pattern \"BUILD|error|Error\")",
|
|
"Bash(Select-Object -First 10)",
|
|
"Bash(Select-Object -Last 10)",
|
|
"Bash(dir /s /b \"%USERPROFILE%\\\\.gradle\\\\caches\\\\*kyant*\")",
|
|
"Bash(Select-String -Pattern \"\\(BUILD|error:|FAILED\\)\")",
|
|
"PowerShell(grep *)"
|
|
]
|
|
}
|
|
}
|