Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
261 commits
Select commit Hold shift + click to select a range
3460d90
feat: add AutoCat settings and CategoryTabsManager
thejaustin Nov 23, 2025
8c2b8c2
feat: add 'Change Category' long-press menu option
thejaustin Nov 23, 2025
b469e9a
fix: use public updateAdapterItems() instead of private notifyUpdate()
thejaustin Nov 23, 2025
8130a33
fix: enable consistent APK signing for AutoCat fork
thejaustin Nov 23, 2025
7b69549
fix: properly quote KEYSTORE secret in CI workflow
thejaustin Nov 24, 2025
b20f25a
feat: add 'Change Category' long-press menu option
thejaustin Nov 24, 2025
64538ac
feat: add category management UI with create/edit/delete
thejaustin Nov 24, 2025
2b9872f
fix: add contentPadding parameter to PreferenceLazyColumn
thejaustin Nov 24, 2025
2ff0cf9
feat: add LLM categorization system with Google AI (Gemini)
thejaustin Nov 24, 2025
7b0cd6d
feat: add LLM settings UI with multi-provider support
thejaustin Nov 24, 2025
bb684cc
fix: resolve build errors in LLM settings and preferences
thejaustin Nov 24, 2025
1946c34
fix: use PreferenceManager.getInstance and remove isPassword param
thejaustin Nov 24, 2025
09e1159
style: apply spotless formatting
thejaustin Nov 24, 2025
6490d5d
feat: add manual trigger for LLM categorization
thejaustin Nov 24, 2025
9f9cf53
feat: add in-memory caching and progress tracking for categorization
thejaustin Nov 24, 2025
412f6d7
fix: update deprecated Android APIs for compatibility
thejaustin Nov 24, 2025
be82d48
perf: optimize CI workflow for faster builds
thejaustin Nov 24, 2025
2b1a346
chore: remove unused CI jobs and workflows
thejaustin Nov 24, 2025
16099dc
perf: build only Github Debug APK variant
thejaustin Nov 24, 2025
c31fea0
fix: restore submodules for check-style job
thejaustin Nov 24, 2025
40503e1
fix: add missing runBlocking import
thejaustin Nov 24, 2025
e040663
feat: automatically recategorize apps when new categories are added
thejaustin Nov 24, 2025
ed5da64
feat: add AI-powered category suggestions
thejaustin Nov 24, 2025
fd17177
fix: use GoogleAIProvider directly instead of non-existent factory
thejaustin Nov 24, 2025
a3f2494
fix: add missing LLM preference fields for API key configuration
thejaustin Nov 24, 2025
6d82647
fix: remove duplicate LLM preference declarations
thejaustin Nov 24, 2025
a7e52a3
fix: add user feedback for AI suggestions errors
thejaustin Nov 24, 2025
9240e8c
fix: prioritize custom categories over built-in categories
thejaustin Nov 24, 2025
206f22e
fix: use v1 API instead of v1beta for Gemini
thejaustin Nov 24, 2025
01e3e50
feat: upgrade Gemini to 2.5 Flash and add multi-provider fallback sup…
thejaustin Nov 24, 2025
bbc45a6
feat: add API key debugging and visual status indicators
thejaustin Nov 25, 2025
51b9af7
fix: use v1 API instead of v1beta for Gemini
thejaustin Nov 25, 2025
a61ce54
fix: restore Gemini 1.5 Flash model and prioritize user-selected LLM …
thejaustin Nov 27, 2025
3b76651
fix: update Perplexity model and clarify Gemini API key requirement
thejaustin Nov 27, 2025
9337592
fix: ensure AI suggestions feature uses user's preferred provider
thejaustin Nov 27, 2025
bb30a9a
feat: add comprehensive LLM enhancements with batch processing and du…
thejaustin Nov 28, 2025
a0c8d6b
fix: resolve compilation errors in folder sync and batch categorization
thejaustin Nov 28, 2025
d7663d7
feat: fix Google AI 2.0 API and add comprehensive UI enhancements
thejaustin Nov 28, 2025
abce31b
fix: update Perplexity models to 2025 API and prevent folder sync hangs
thejaustin Nov 28, 2025
2514b39
fix: exclude 'Other' category from folder sync
thejaustin Nov 28, 2025
df8c240
feat: enhance category management UI with better feedback and provide…
thejaustin Nov 28, 2025
ccaa3d0
feat: add real-time batch progress, error retry logic, and parallel p…
thejaustin Nov 29, 2025
c29a89b
feat: add automatic model fallback for Google AI provider
thejaustin Nov 29, 2025
12b65c0
feat: add automatic model fallback for Claude, OpenAI, and Perplexity…
thejaustin Nov 29, 2025
0417569
feat: enhance progress UI and improve Perplexity API error handling
thejaustin Nov 29, 2025
e7cc953
fix: trigger app drawer reload after folder sync to display folders
thejaustin Nov 29, 2025
e2bc240
perf: dramatically optimize folder sync performance (10x+ faster)
thejaustin Nov 29, 2025
5b0856c
debug: add logging to diagnose folder sorting issues
thejaustin Nov 29, 2025
cc8b46e
feat: improve LLM prompts to prefer specific categories over broad ones
thejaustin Nov 29, 2025
7ca6b99
fix: add null safety check for ComponentName in folder sync fallback
thejaustin Nov 29, 2025
e3c5bc6
fix: resolve type mismatch and null safety errors in categorization
thejaustin Nov 29, 2025
1ffba72
fix: handle malformed JSON from Gemini in category suggestions
thejaustin Nov 29, 2025
2cbd704
feat: add app descriptions, LLM reasoning, and batch progress improve…
thejaustin Nov 30, 2025
af65962
feat: add manual category override UI for app categorizations
thejaustin Dec 4, 2025
3c91777
feat: implement learning from user corrections to improve categorization
thejaustin Dec 4, 2025
26bf4ef
fix: remove excessive per-app progress updates in batch categorization
thejaustin Dec 4, 2025
3252124
feat: add comprehensive error handling and diagnostics to batch categ…
thejaustin Dec 4, 2025
b57f5dd
fix: trigger folder sync when user manually overrides app category
thejaustin Dec 4, 2025
3c0f445
feat: add developer mode with diagnostics UI and GitHub Actions CI/CD
thejaustin Dec 4, 2025
1c631b3
feat: major performance and UX improvements for categorization system
thejaustin Dec 4, 2025
0acafcf
fix: optimize CI workflow and remove redundant build workflows
thejaustin Dec 4, 2025
3b402c4
fix: Restore Android SDK in CI workflow
thejaustin Dec 4, 2025
f84d3e1
refactor: reorganize categorization settings for better UX
thejaustin Dec 4, 2025
2302fad
feat: add Smart Launcher backup importer
thejaustin Dec 4, 2025
87ca3d3
chore: apply code formatting and add security to gitignore
thejaustin Dec 4, 2025
7f63036
docs: update README with comprehensive feature list and current progress
thejaustin Dec 4, 2025
cbdbb6b
fix: add missing Compose layout imports to fix build errors
thejaustin Dec 4, 2025
a070ed7
fix: add missing animation imports (animateFloatAsState, tween)
thejaustin Dec 4, 2025
0e6b443
Potential fix for code scanning alert no. 1: Workflow does not contai…
thejaustin Dec 4, 2025
b0f20e9
Merge pull request #1 from thejaustin/alert-autofix-1
thejaustin Dec 4, 2025
46f62df
feat: Implement nested folders and custom folder icons for Smart Laun…
thejaustin Dec 4, 2025
caaac67
feat: consolidate categorization settings and enhance UI
thejaustin Dec 4, 2025
f88b631
fix: remove Composable call from coroutine scope
thejaustin Dec 4, 2025
fd05770
chore: apply code style formatting fixes
thejaustin Dec 5, 2025
f25199d
fix: correct parameter name in CategoryGroupHeader call
thejaustin Dec 5, 2025
a96c458
refactor: consolidate and reorganize categorization settings UI
thejaustin Dec 5, 2025
c9b6c8e
refactor: reorganize categorization settings with subpage navigation
thejaustin Dec 5, 2025
f715776
feat: add preference for category tabs in app drawer
thejaustin Dec 5, 2025
f9faca5
feat: implement category tabs foundation for app drawer
thejaustin Dec 5, 2025
cbadd88
feat: add scrollable category tab strip for N tabs
thejaustin Dec 5, 2025
939a16e
fix: improve CategoryTabStrip findViewById logic
thejaustin Dec 5, 2025
7df824d
fix: add explicit type parameter to MainThreadInitializedObject
thejaustin Dec 5, 2025
1c4a4da
fix: implement SafeCloseable in CategoryTabsController
thejaustin Dec 5, 2025
7cbbcef
feat(categorization): add Work tab support to Category Tabs
thejaustin Dec 6, 2025
0a7ce95
Fix AutoCat tab visibility and add subcategory support
thejaustin Dec 6, 2025
9b902a8
Fix build failure in ActivityAllAppsContainerView: restore onActivePa…
thejaustin Dec 6, 2025
03caf73
Apply spotless formatting to fix build
thejaustin Dec 6, 2025
0dbdca0
Fix category crash and enable subcategory folders
thejaustin Dec 6, 2025
e15b164
Optimize category switching speed by caching categorized data and ski…
thejaustin Dec 6, 2025
280c8c7
Fix category tab sizing to match standard tabs
thejaustin Dec 6, 2025
153b00b
Implement persistence and loading of custom subcategory folder icons
thejaustin Dec 6, 2025
c22ddad
Prioritize folders at top of app list in category tabs
thejaustin Dec 6, 2025
8f00451
Implement long-press context menu for category editing and deletion
thejaustin Dec 6, 2025
dc02b19
Group app categorizations by category with expandable headers in sett…
thejaustin Dec 6, 2025
8dc01cf
Reorganize App Categorization settings with icons and clearer groups
thejaustin Dec 6, 2025
33b0e54
Fix NavigationActionPreference icon logic and use safe icons
thejaustin Dec 6, 2025
cc62be4
Disable standard ViewPager for categories and implement horizontal sw…
thejaustin Dec 6, 2025
bf4628d
Implement Filter and Subcategory editing in App Categorization settings
thejaustin Dec 6, 2025
ffcc80e
Add @OptIn for ExperimentalMaterial3Api in AppCategorizationListPrefe…
thejaustin Dec 6, 2025
f751e94
Fix: Resolve Unresolved reference for PackageManager in AppCategoriza…
thejaustin Dec 6, 2025
d06b15c
Fix: Apply spotless formatting to AppCategorizationListPreferences.kt
thejaustin Dec 6, 2025
2b189c4
feat: Implement app drawer category fixes and categorization features
thejaustin Dec 6, 2025
fe1c19a
Fix: Resolve 'categorizeNewApp' unresolved reference and update Perpl…
thejaustin Dec 6, 2025
d01200a
Fix: Address compilation errors in AutoCatAppProvider.kt
thejaustin Dec 6, 2025
ca75f87
Style: Apply spotless formatting to AutoCatAppProvider.kt
thejaustin Dec 6, 2025
756260d
Fix: Refine AppInfo usage and coroutine imports in AutoCatAppProvider.kt
thejaustin Dec 7, 2025
1147db2
Fix: Resolve AppInfo type mismatches in LawnchairAlphabeticalAppsList.kt
thejaustin Dec 7, 2025
b2d7a49
Style: Apply spotless formatting
thejaustin Dec 7, 2025
89992a7
Fix: Further refine AppInfo conversions in LawnchairAlphabeticalAppsL…
thejaustin Dec 7, 2025
0c030e4
Style: Apply spotless formatting to LawnchairAlphabeticalAppsList.kt
thejaustin Dec 7, 2025
4e4fefb
Fix: Final refinement of AppInfo conversions in LawnchairAlphabetical…
thejaustin Dec 7, 2025
693369d
Style: Apply spotless formatting to LawnchairAlphabeticalAppsList.kt
thejaustin Dec 7, 2025
c7d4a3f
Fix: Final refinement of AppInfo conversions in LawnchairAlphabetical…
thejaustin Dec 7, 2025
afbfa05
Style: Apply spotless formatting to LawnchairAlphabeticalAppsList.kt
thejaustin Dec 7, 2025
b4fa008
Fix: Resolve compilation errors in LawnchairAlphabeticalAppsList
thejaustin Dec 7, 2025
e4e555b
fix: Critical security and reliability improvements
thejaustin Dec 7, 2025
06e6cdc
fix: Complete prompt injection protection for all LLM providers
thejaustin Dec 7, 2025
fdf131b
perf: Fix N+1 query problem in categorization for 80-90% speedup
thejaustin Dec 7, 2025
2742d3d
refactor: Rename 'categories' to 'tabs' throughout data layer (#21)
thejaustin Dec 8, 2025
bdc60c2
feat(WIP): Add LLM folder auto-sort for imported apps (#28)
thejaustin Dec 8, 2025
ae7e4cc
feat: Complete suggestFolders implementation for all LLM providers
thejaustin Dec 8, 2025
004772a
feat: Implement folder creation in FolderAutoSortService (#28)
thejaustin Dec 8, 2025
a39976d
refactor: Update app categorization/tab data access and app info retr…
thejaustin Dec 8, 2025
f632070
fix: Resolve compilation error in CategoryFolderSyncService and clean…
thejaustin Dec 8, 2025
41598d4
feat: wire up Smart Launcher import and folder auto-sort in settings
thejaustin Dec 8, 2025
aed364e
fix: resolve unresolved reference 'AppTab' in LawnchairShortcut
thejaustin Dec 8, 2025
007b793
fix: remove trailing whitespace in CategorizationSettingsPreferences
thejaustin Dec 8, 2025
93b4e77
fix: resolve app drawer icon loading issue by using proper AppInfo co…
thejaustin Dec 9, 2025
ee5102c
feat: Address issues #10, #14, and start #21 refactor
thejaustin Dec 10, 2025
79d98d9
fix: continue addressing compilation errors and code cleanup
thejaustin Dec 10, 2025
0e5f934
fix: resolve ktlint errors and formatting violations
thejaustin Dec 10, 2025
06d6807
fix: remove duplicate string resource gesture_handler_open_app_config
thejaustin Dec 10, 2025
bc34a19
fix: rename CustomCategoryTab to CustomTab to fix KSP build error
thejaustin Dec 12, 2025
ba06acf
fix: complete CustomTab rename and fix TabCount query
thejaustin Dec 12, 2025
423908f
fix: remove broken SelectFolderIconPreference to fix build
thejaustin Dec 12, 2025
a607546
fix: comment out incomplete folder icon and sync implementations
thejaustin Dec 12, 2025
85b4891
fix: remove commented import to resolve ktlint ordering error
thejaustin Dec 12, 2025
97efba4
fix: update remaining CustomCategoryTab references and SelectAppPrefe…
thejaustin Dec 12, 2025
ef9620c
fix: resolve variable naming issues after category→tab refactor
thejaustin Dec 12, 2025
1498356
fix: comment out CategoryFolderSyncService calls and fix LLMCategoriz…
thejaustin Dec 12, 2025
30e8baa
fix: remove CustomizeFolderDialog and fix Preferences/LawnchairShortcut
thejaustin Dec 12, 2025
68f99a2
fix: resolve remaining parameter and route naming issues
thejaustin Dec 12, 2025
29b4c93
fix: move commented import to end to resolve ktlint ordering error
thejaustin Dec 12, 2025
08a5eec
fix: add missing SelectApp import and fix parameter name
thejaustin Dec 12, 2025
c9df0aa
fix: remove commented import to resolve ktlint ordering issue
thejaustin Dec 12, 2025
9fa7502
fix: resolve Java compilation errors in FolderInfo and FolderIcon
thejaustin Dec 12, 2025
1f132bb
fix: prevent crash by capturing context/resources on main thread
thejaustin Dec 12, 2025
6a98fef
fix: make CategoryFolderSyncService and dependencies lazy to prevent …
thejaustin Dec 12, 2025
85a0b3d
fix: add missing Resources import to FolderIcon
thejaustin Dec 12, 2025
7938801
fix: resolve critical startup crashes from unsafe initialization
thejaustin Dec 12, 2025
134f992
fix: defer initialization to prevent early startup crashes
thejaustin Dec 12, 2025
a68e755
fix: make all categorization properties lazy to prevent eager initial…
thejaustin Dec 13, 2025
7da84b2
test: trigger build to verify startup fixes
thejaustin Dec 13, 2025
c12616c
test: trigger CI build for startup verification
thejaustin Dec 13, 2025
4b167c1
fix: remove init block from CategoryTabsController to prevent early d…
thejaustin Dec 13, 2025
6116a4e
fix: make all categorization properties lazy to prevent startup crashes
thejaustin Dec 14, 2025
c896f8a
fix: defer ALL TabDatabase access to prevent startup crashes
thejaustin Dec 14, 2025
37f01ae
fix: make folderOrder lazy in LawnchairAlphabeticalAppsList
thejaustin Dec 14, 2025
727e1d4
fix: make launcherApps and appFilter lazy in FolderAutoSortService
thejaustin Dec 14, 2025
e7498cd
fix(FolderAutoSortService): Address smart cast issue with launcherApps
thejaustin Dec 14, 2025
8698cc7
fix(FolderService): Lazily initialize dependencies and use Dispatcher…
thejaustin Dec 14, 2025
c066956
fix(folders): Address startup crashes and broken folder icons
thejaustin Dec 14, 2025
fd88887
fix(startup): Temporarily allow main thread DB queries for TabDatabase
thejaustin Dec 14, 2025
22d9c0e
fix(startup): Temporarily allow main thread DB queries for AppDatabase
thejaustin Dec 14, 2025
2c90ce4
fix(AppInfo): Add null checks for ApplicationInfo and LauncherActivit…
thejaustin Dec 14, 2025
e3d721f
Fix launch crashes: Add permissions, harden initialization, and fix i…
thejaustin Dec 15, 2025
42a1c69
Fix ANR: Optimize AppInfo retrieval in LawnchairAlphabeticalAppsList
thejaustin Dec 15, 2025
95882eb
Fix ANR: Wrap custom addAppsWithSections in try-catch to prevent crashes
thejaustin Dec 15, 2025
016e06e
Enhance crash reporting: Initialize LawnchairBugReporter early and ad…
thejaustin Dec 16, 2025
1fa6f57
Fix potential late-init crash in LawnchairLauncher and add view setup…
thejaustin Dec 16, 2025
6bd2435
Fix build error: Add missing arguments to AppInfo constructor in erro…
thejaustin Dec 16, 2025
d510501
Fix compilation and formatting: Import Log in LawnchairLauncher and a…
thejaustin Dec 16, 2025
91a8d53
Fix ambiguous TAG reference in LawnchairLauncher
thejaustin Dec 16, 2025
048bd16
Fix UI blocking: Remove runBlocking from LawnchairShortcut, and fix c…
thejaustin Dec 16, 2025
6bde253
Consolidate categorization settings, fix UI lag, and add Auto model s…
thejaustin Dec 16, 2025
61822a3
Fix spotless violations after previous changes
thejaustin Dec 16, 2025
21e6efb
Fix: Search suggestions not visible on tablet
thejaustin Dec 16, 2025
952d644
Feature: Implement Circuit Breaker for LLM Providers
thejaustin Dec 16, 2025
1ef1bd5
Feature: Implement Circuit Breaker UI in LLM Settings
thejaustin Dec 16, 2025
bfe2661
Feature: Implement Confidence Score Calibration and AppTab Tracking
thejaustin Dec 16, 2025
6962f70
Feature: Add toggles for Quickstep settings visibility and general se…
thejaustin Dec 16, 2025
6cfe96d
Fix: Unresolved references in LawnchairShortcut.kt
thejaustin Dec 16, 2025
c44679b
Chore: Apply spotless formatting after calibration implementation
thejaustin Dec 16, 2025
3400729
Fix: Resolve compilation errors after recent feature implementations
thejaustin Dec 16, 2025
08ab17e
Fix(build): Resolve compilation errors after last push
thejaustin Dec 16, 2025
3fbb0e9
Fix(build): Resolve persistent compilation errors and type mismatches
thejaustin Dec 16, 2025
cab79d7
Refactor(build): Remove redundant rememberTransformAdapter definition
thejaustin Dec 16, 2025
fd62e95
Fix(crash): Add logging to app categorization screen for crash diagnosis
thejaustin Dec 16, 2025
42209e8
Fix(build): Restore missing Compose imports in AppCategorizationListP…
thejaustin Dec 16, 2025
303db41
Fix(crash): Add comprehensive error handling to app categorization sc…
thejaustin Dec 16, 2025
36b128a
Fix(crash): Prevent freezes in 3 more preference screens with async i…
thejaustin Dec 17, 2025
dbd040a
Style: Apply spotless formatting to preference screens
thejaustin Dec 17, 2025
53a1564
Fix(LLM): Add environment variable support for all LLM provider API keys
thejaustin Dec 17, 2025
546714d
Fix(database): Increment TabDatabase version to 5 for schema changes
thejaustin Dec 17, 2025
65d7022
Style: Apply spotless formatting to LLM provider files
thejaustin Dec 17, 2025
45057d5
Refactor coroutine usage to replace runBlocking and improve resource …
thejaustin Dec 18, 2025
0888f1e
Refactor: Improve UI responsiveness by moving blocking calls to Dispa…
thejaustin Dec 19, 2025
53d452f
UI: Move category tabs to bottom of app drawer (#23)
thejaustin Dec 19, 2025
27db64b
Add missing LaunchedEffect import
thejaustin Dec 19, 2025
244cbf9
Update CreateBackupScreen.kt
thejaustin Dec 19, 2025
6079659
Fix: Apply spotless formatting to NotificationDotsPreference.kt
thejaustin Dec 19, 2025
34a127c
Fix: Address security vulnerabilities in AppDatabase and fix empty file
thejaustin Dec 19, 2025
6d1453e
Fix: Update CreateBackupScreen to match expected ViewModel parameter
thejaustin Dec 19, 2025
50b607f
Improve categorization settings: Add overview screen and enhance drop…
thejaustin Dec 19, 2025
3fd9627
Improve layout and structure: Fix filter dropdowns and enhance UI com…
thejaustin Dec 19, 2025
c737590
Fix: Add missing import for CategorizationOverviewPreferences
thejaustin Dec 20, 2025
8674dc2
Fix: Resolve Compose syntax errors in CategorizationOverviewPreferences
thejaustin Dec 20, 2025
bb7fd54
Fix: Correct navigation route reference in CategorizationOverviewPref…
thejaustin Dec 20, 2025
8b83edf
Fix: Add missing imports and correct layout in AppCategorizationListP…
thejaustin Dec 20, 2025
5c66b84
Style: Apply spotless formatting to AppCategorizationListPreferences
thejaustin Dec 20, 2025
30fb2e3
Fix: Correct remaining background usage in AppCategorizationListPrefe…
thejaustin Dec 20, 2025
709e674
Fix: Final background() usage in reasoning section
thejaustin Dec 20, 2025
71f5747
Perf: Optimize app startup by skipping already-categorized apps
thejaustin Dec 20, 2025
2e361aa
Refactor: Migrate LLM API calls from HttpURLConnection to OkHttpClient
thejaustin Dec 21, 2025
fe52c4a
UX: Enhance app categorization UI with Material 3 Expressive design
thejaustin Dec 24, 2025
5a26db9
UX: Complete Material 3 Expressive redesign of category management sc…
thejaustin Dec 24, 2025
5b76004
Perf: Implement batch database inserts in BuiltInCategorizer
thejaustin Dec 25, 2025
71cc812
UX: Apply Material 3 Expressive design to LLM Settings screen
thejaustin Dec 25, 2025
c46a4f1
UX: Apply Material 3 Expressive design to Categorization Settings screen
thejaustin Dec 25, 2025
bd56dfa
Merge upstream Lawnchair 15-dev updates into AutoCat
thejaustin Dec 25, 2025
e4776fb
Fix: Add missing Flowerpot import after upstream merge
thejaustin Dec 25, 2025
432c961
Feature: Add comprehensive accuracy metrics tracking for LLM predictions
thejaustin Dec 25, 2025
661a418
Style: Fix code formatting for accuracy tracking files
thejaustin Dec 25, 2025
ac636fa
Feature: Phase 2 - Adaptive Model Selection (Auto-Select Best Provider)
thejaustin Dec 25, 2025
e15734e
Fix: Add missing AdaptiveModelSelector import
thejaustin Dec 25, 2025
0bfbc5a
Style: Apply spotless formatting to Phase 2 code
thejaustin Dec 25, 2025
79cbc88
Docs: Update README with accuracy tracking features
thejaustin Dec 25, 2025
1f531f6
Docs: Add comprehensive wiki documentation
thejaustin Dec 25, 2025
c68c786
Docs: Complete Build History with ALL 100+ builds (Phase 1/4)
thejaustin Dec 25, 2025
c45afe6
Docs: Complete Changelog & Bug Fixes Registry (Phase 2/4)
thejaustin Dec 25, 2025
1689dab
Docs: Complete Feature Timeline & File Inventory (Phase 3-4/4) ✅ 100%…
thejaustin Dec 25, 2025
ed736d2
docs: Complete comprehensive wiki documentation
thejaustin Dec 25, 2025
a397dc9
feat: Add wiki navigation sidebar and reorganize home page
thejaustin Dec 25, 2025
cdaf57c
docs: Add comprehensive development conversation logs
thejaustin Dec 25, 2025
87e0610
feat: Implement comprehensive Settings UI enhancement with Material Y…
thejaustin Dec 27, 2025
6f46718
feat: Add comprehensive iconography system for Settings UI
thejaustin Dec 27, 2025
a6648fa
feat: Add folder sync mode selector UI and nested folders design
thejaustin Dec 27, 2025
695e448
fix: Code formatting and Compose parameter ordering
thejaustin Dec 27, 2025
4185f31
fix: Resolve compilation errors in Settings UI components
thejaustin Dec 27, 2025
ebc9e23
fix: Resolve remaining compilation errors in Settings UI
thejaustin Dec 27, 2025
47545b6
fix: Final fixes for compilation errors
thejaustin Dec 27, 2025
b2bd14f
fix: Simplify CollapsiblePreferenceGroup description lambda
thejaustin Dec 27, 2025
13858c6
fix: Use conditional rendering in description lambda
thejaustin Dec 27, 2025
ee7cff0
fix: Ensure app folder icons display properly with icon pack support
thejaustin Jan 2, 2026
70de88d
style: Apply spotless formatting to folder icon fixes
thejaustin Jan 2, 2026
623c486
feat: Add comprehensive UI/UX optimizations and improvements
thejaustin Jan 3, 2026
6d52fa7
fix: Use mutableIntStateOf for better performance
thejaustin Jan 3, 2026
7c15d30
feat: Implement task lock state cleanup on app uninstall
claude Jan 5, 2026
95f2b3c
fix: Remove invalid import in TaskUtilLockState
claude Jun 14, 2026
2499c19
refactor: Improve task locking code quality and documentation
claude Jun 14, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 32 additions & 0 deletions .gemini_security/DRAFT_SECURITY_REPORT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
Vulnerability: SQL Injection
Severity: Medium
Location: /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/AppDatabase.kt (lines 20-22)
Line Content:
suspend fun checkpoint() {
iconOverrideDao().checkpoint(SimpleSQLiteQuery("pragma wal_checkpoint(full)"))
wallpaperDao().checkpoint(SimpleSQLiteQuery("pragma wal_checkpoint(full)"))
folderDao().checkpoint(SimpleSQLiteQuery("pragma wal_checkpoint(full)"))
}
Description: The `checkpoint()` method, and by extension the `iconOverrideDao().checkpoint()`, `wallpaperDao().checkpoint()`, and `folderDao().checkpoint()` methods, accept a `SimpleSQLiteQuery` object. While the current usage hardcodes a safe SQL string ("pragma wal_checkpoint(full)"), this pattern can be problematic if `SimpleSQLiteQuery` is instantiated with a string that is constructed, even partially, from untrusted input. This could allow for SQL injection, where an attacker manipulates the SQL query to execute arbitrary database commands, potentially leading to data exfiltration, modification, or deletion.
Recommendation:
1. **Prefer Parameterized Queries:** Always use parameterized queries (e.g., Room's `@Query` with parameters or `RoomDatabase.query` with `CancellationSignal` and `bindStatement`) instead of raw SQL strings that could be concatenated with untrusted input.
2. **Strict Input Validation:** If raw SQL strings must be used, ensure all components of the string are rigorously validated and sanitized to prevent injection attacks.
3. **Audit `checkpoint` usages:** Audit all usages of `checkpoint` functions in `IconOverrideDao`, `WallpaperDao`, and `FolderDao` to ensure that `SimpleSQLiteQuery` is never constructed from untrusted input.

Vulnerability: Insecure Data Storage
Severity: Medium
Location: /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/AppDatabase.kt (lines 57-58)
Line Content:
database.execSQL("ALTER TABLE Folders ADD COLUMN icon TEXT DEFAULT NULL")
Description: The `Folders` table schema is altered in `MIGRATION_3_4` to include an `icon TEXT DEFAULT NULL` column. If this `icon` field is later populated with untrusted input (e.g., user-provided paths, external data) without proper validation, it could become a vector for path traversal attacks or lead to insecure data access if the paths are used to read/write files. Additionally, storing arbitrary text without length limits can lead to database bloat, impacting performance and storage, and potentially a denial-of-service if an attacker can inject excessively long strings.
Recommendation:
1. **Strict Path Validation:** Whenever data is written to the `icon` column, ensure that it is a valid, safe URI or canonicalized path. Implement strict whitelisting for allowed schemes, hosts, and paths. Prevent any path traversal sequences (e.g., `../`).
2. **Length Constraints:** Enforce reasonable length constraints on the `icon` field to prevent excessive data storage and potential denial-of-service.

Vulnerability: Temporary `allowMainThreadQueries()`
Severity: Low (Informational)
Location: /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/AppDatabase.kt (line 74)
Line Content:
.allowMainThreadQueries() // Temporary fix to prevent startup crashes
Description: The database builder uses `allowMainThreadQueries()`, enabling database operations on the main thread. While noted as a temporary fix for startup crashes, performing blocking I/O operations on the main thread can lead to Application Not Responding (ANR) errors, causing a poor user experience. While not a direct security vulnerability in terms of data compromise, a persistent ANR could be leveraged by an attacker to degrade user experience or make the device unresponsive (a form of Denial of Service), especially if an attacker can trigger a long-running query on the main thread.
Recommendation: Remove `allowMainThreadQueries()` and ensure all database operations are performed on a background thread (e.g., using Kotlin Coroutines with `Dispatchers.IO`) to maintain UI responsiveness and prevent ANRs. This is a best practice for Android development.
70 changes: 70 additions & 0 deletions .gemini_security/SECURITY_ANALYSIS_TODO.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
- [x] Define the audit scope.
- [ ] Conduct a two-pass SAST analysis on all files within scope.
- [x] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/AutoCatAppProvider.kt
- [x] Investigate data flow from `jsonStr` on line 58 in `loadSubCategoryIcons()`.
- [x] Investigate data flow from `iconPath` on line 74 in `saveSubCategoryIcon()`.
- [x] Investigate data flow from `packageName` on line 120 in `categorizeNewApp()`.
- [x] Investigate data flow from `appInfo` to `llmCategorizer.categorize()` from `categorizeNewApp()` on line 133.
- [x] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/CategorizationManager.kt
- [x] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/stages/BuiltInCategorizer.kt
- [x] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/CategoryTabsController.kt
- [x] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/CategoryTabsManager.kt
- [x] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/FolderAutoSortService.kt
- [x] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/importer/SmartLauncherImporter.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/learning/UserCorrectionLearner.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/llm/BatchCalculator.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/llm/ClaudeProvider.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/llm/ConfidenceCalibrator.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/llm/GoogleAIProvider.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/llm/LLMLogger.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/llm/LLMProvider.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/llm/ModelConfig.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/llm/OpenAIProvider.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/llm/PerplexityProvider.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/llm/ProviderCircuitBreaker.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/categorization/stages/LLMCategorizer.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/AssistantIconView.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/GoogleQsbContainerView.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/LawnQsbLayout.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/QsbIconUtil.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/AppSearch.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Bing.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Brave.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/DuckDuckGo.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Ecosia.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Fennec.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Firefox.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/GitHub.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Google.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/GoogleGo.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Iceraven.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/IronFox.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Kagi.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/PixelSearch.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Presearch.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/QsbSearchProvider.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Sesame.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Startpage.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Wikipedia.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Yandex.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/qsb/providers/Youtube.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/AppDatabase.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/Converters.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/folder/FolderEntity.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/folder/model/FolderViewModel.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/folder/service/FolderDao.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/folder/service/FolderService.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/iconoverride/IconOverride.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/iconoverride/IconOverrideDao.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/iconoverride/IconOverrideRepository.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/wallpaper/Wallpaper.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/wallpaper/model/WallpaperViewModel.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/wallpaper/service/WallpaperDao.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/wallpaper/service/WallpaperService.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/apps/AppMetadataProvider.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/apps/AppInfo.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/tab/entities/CustomTab.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/tab/entities/AppTab.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/tab/TabDatabase.kt
- [ ] SAST Recon on /data/data/com.termux/files/home/AutoCat/lawnchair/src/app/lawnchair/data/tab/TabDao.kt
- [ ] Conduct the final review of all findings as per your **Minimizing False Positives** operating principle and generate the final report.
38 changes: 0 additions & 38 deletions .github/workflows/build_release_apk.yml

This file was deleted.

Loading