Releases: thejaustin/AppManager
AppManager v4.0.5 (CI Build
CI Build MuntashirAkon#80
Version: v4.0.5
Branch: master
Commit: e7aa267
Latest Changes:
Remove Qwen workflows
Signed-off-by: thejaustin the.j.austin@gmail.com
🤖 Automatically generated CI build
AppManager_v4.0.5-DEBUG#232
Debug Build MuntashirAkon#232
Version: v4.0.5
Commit: e7aa267
Changes:
Remove Qwen workflows
Signed-off-by: thejaustin the.j.austin@gmail.com
🤖 Automatically generated debug build
AppManager v4.0.5 (CI Build
CI Build MuntashirAkon#79
Version: v4.0.5
Branch: master
Commit: 9c6fa4d
Latest Changes:
chore: disable automated triage workflows
🤖 Automatically generated CI build
AppManager v4.0.5 (CI Build
CI Build MuntashirAkon#78
Version: v4.0.5
Branch: master
Commit: b1bed80
Latest Changes:
fix: resolve compilation errors and string resource formatting
- Add missing imports for SuggestionHandler and App entity
- Complete Parcelable implementation for BatchArchiveOptions
- Fix multiple substitutions in strings.xml using positional arguments
- Update IBatchOpOptions deserializer to include BatchArchiveOptions
🤖 Automatically generated CI build
AppManager_v4.0.5-DEBUG#165
Debug Build MuntashirAkon#165
Version: v4.0.5
Commit: 9c6fa4d
Changes:
chore: disable automated triage workflows
🤖 Automatically generated debug build
AppManager_v4.0.5-DEBUG#164
Debug Build MuntashirAkon#164
Version: v4.0.5
Commit: b1bed80
Changes:
fix: resolve compilation errors and string resource formatting
- Add missing imports for SuggestionHandler and App entity
- Complete Parcelable implementation for BatchArchiveOptions
- Fix multiple substitutions in strings.xml using positional arguments
- Update IBatchOpOptions deserializer to include BatchArchiveOptions
🤖 Automatically generated debug build
AppManager_v4.0.5-DEBUG#162
Debug Build MuntashirAkon#162
Version: v4.0.5
Commit: ef3d66a
Changes:
fix: Remove invalid make_latest parameter from release workflow
The make_latest parameter is not supported in softprops/action-gh-release@v1.
Removing it to fix the workflow error:
'Unexpected input(s) make_latest, valid inputs are [...]'
GitHub will automatically manage the 'latest' release based on
publication date, so this parameter is not needed.
🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 noreply@anthropic.com
🤖 Automatically generated debug build
AppManager v4.0.5 (CI Build
CI Build MuntashirAkon#73
Version: v4.0.5
Branch: master
Commit: 563086d
Latest Changes:
Feat: Implement UI improvements for app list and search bar
Signed-off-by: thejaustin the.j.austin@gmail.com
🤖 Automatically generated CI build
AppManager v4.0.5 (CI Build
CI Build MuntashirAkon#68
Version: v4.0.5
Branch: master
Commit: b349596
Latest Changes:
safety: Add comprehensive error handling to IPC operations
Add exception handling around all expensive IPC operations to ensure
that if any individual operation fails, the app list loading continues
instead of crashing or hanging.
Changes:
-
ComponentsBlocker.getInstance() - Wrap in try-catch
- If it fails, log warning and continue with rulesCount=0
- Prevents app list load failure due to components blocker issues
-
PackageUtils.getPackageSizeInfo() - Wrap in try-catch
- If it fails, log warning and continue with size=0
- Prevents app list load failure due to StorageStats IPC issues
-
KeyStoreUtils.hasKeyStore() - Wrap in try-catch
- If it fails, log warning and continue with hasKeystore=false
- Prevents app list load failure due to su command failures
Why This Matters:
Without error handling, a single failing app (corrupted package,
permission issues, etc.) could crash the entire app list loading
process. With this change, problematic apps are logged and skipped,
allowing the rest of the list to load successfully.
This is especially important for the KeyStoreUtils call which runs
su commands that could fail for various reasons (no root, su timeout,
SELinux denials, etc.).
🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 noreply@anthropic.com
🤖 Automatically generated CI build
AppManager v4.0.5 (CI Build
CI Build MuntashirAkon#67
Version: v4.0.5
Branch: master
Commit: 0205458
Latest Changes:
perf: Skip expensive IPC operations during initial app list load
This commit eliminates THREE CATASTROPHIC bottlenecks that were causing
startup times of 200-2000+ seconds on some devices by deferring non-
critical metadata updates until after initial display.
CRITICAL BOTTLENECKS FIXED:
-
KeyStoreUtils.hasKeyStore() on Android S+ (Line 419)
- Was running
su keystore_cli_v2 listfor EACH app - Cost: 500-2000ms PER APP × 2000 apps = 1000-4000 SECONDS!
- Impact: Catastrophic on rooted Android 12+ devices
- Solution: Skip during initial load, set hasKeystore=false
- Was running
-
PackageUtils.getPackageSizeInfo() (Line 406)
- IPC call to IStorageStatsManager for EACH app
- Cost: 50-200ms per app × 2000 apps = 100-400 SECONDS
- Impact: Severe when usage stats permission enabled
- Solution: Skip during initial load, show sizes on refresh
-
ComponentsBlocker.getInstance() (Line 397)
- IPC call to PackageManager for EACH app
- Cost: 10-50ms per app × 2000 apps = 20-100 SECONDS
- Impact: Significant for all users
- Solution: Skip during initial load, set rulesCount=0
IMPLEMENTATION:
Added skipExpensiveOps parameter to updateVariableData():
- Initial load (updateApplications): skipExpensiveOps=true
- Incremental updates: skipExpensiveOps=false
- User-triggered refresh: skipExpensiveOps=false
This preserves data accuracy for incremental updates while making
initial startup DRAMATICALLY faster.
PERFORMANCE IMPACT:
Before:
- Cold start: 5-15s (best case) to 2000s+ (worst case with root on S+)
- Database load dominated by IPC calls
- Catastrophic on rooted Android 12+ devices
After:
- Cold start: 2-5s (database + PackageManager only)
- ~2000 seconds saved in worst case
- ~240 seconds saved in typical case
TRADE-OFF:
On first startup after clearing data, users will see:
- Blocked components count: 0 (updated on next refresh)
- App sizes: 0 (updated on next refresh)
- Keystore status: false (updated on next refresh)
This is acceptable because:
- Users want to see their apps FAST, not perfect metadata
- These values update automatically on manual refresh
- Incremental app installs still get full data
- The alternative is a 5-40 minute wait on first launch!
WHY THIS WORKS:
These operations fetch cosmetic/supplementary data that isn't critical
for basic app list display. The app list functions perfectly with
default values, and users can refresh to get full data once the UI
is responsive.
🤖 Generated with Claude Code
Co-Authored-By: Claude Sonnet 4.5 noreply@anthropic.com
🤖 Automatically generated CI build