Skip to content

Releases: thejaustin/AppManager

AppManager v4.0.5 (CI Build

19 Feb 14:27

Choose a tag to compare

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

19 Feb 14:26

Choose a tag to compare

Pre-release

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

12 Feb 01:11

Choose a tag to compare

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

12 Feb 00:56

Choose a tag to compare

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

12 Feb 01:10

Choose a tag to compare

Pre-release

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

12 Feb 00:56

Choose a tag to compare

Pre-release

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

30 Dec 04:05

Choose a tag to compare

Pre-release

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

29 Dec 07:48

Choose a tag to compare

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

29 Dec 03:08

Choose a tag to compare

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:

  1. 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
  2. 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
  3. 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

29 Dec 00:32

Choose a tag to compare

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:

  1. KeyStoreUtils.hasKeyStore() on Android S+ (Line 419)

    • Was running su keystore_cli_v2 list for 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
  2. 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
  3. 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:

  1. Users want to see their apps FAST, not perfect metadata
  2. These values update automatically on manual refresh
  3. Incremental app installs still get full data
  4. 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