Skip to content

fix: restore Samsung Theme Park / Good Lock themed icons#31

Open
x-JOC wants to merge 1 commit into
LawnchairLauncher:16-devfrom
x-JOC:fix/samsung-themed-icons
Open

fix: restore Samsung Theme Park / Good Lock themed icons#31
x-JOC wants to merge 1 commit into
LawnchairLauncher:16-devfrom
x-JOC:fix/samsung-themed-icons

Conversation

@x-JOC

@x-JOC x-JOC commented Jun 17, 2026

Copy link
Copy Markdown
Contributor

Summary

Restores Samsung Theme Park / Good Lock themed app icons, which regressed in Lawnchair 16.

Regression

loadPackageIcon loads app icons straight from the app's resources via getResourcesForApplication(), which bypasses Samsung's framework theming — SemApplicationPackageManager intercepts getActivityIcon() / getApplicationIcon() to return Theme Park / Good Lock themed icons.

This regressed in 4767f8b ("Merge tag 'android-16.0.0_r2' into 15-dev"): before that merge, app icons fell back to ActivityInfo.loadIcon(PackageManager) (which Samsung themes); the Android 16 launcher3 rework replaced that path with the resource-based loadPackageIcon(). As a result, themed icons that rendered in Lawnchair 15 stopped appearing in 16-dev.

Verified across the file history: at 4767f8b the ActivityInfo.loadIcon(pm) fallback was removed and loadPackageIcon() (resource-based) introduced; the commit is in 16-dev but not in the v15 line.

Fix

Try the PackageManager icon APIs first (getActivityIcon, then getApplicationIcon), falling back to the existing resource-based path when the system returns the default icon (isDefaultApplicationIcon) or the lookup throws.

Demo (before / after)

Same Samsung device, same Theme Park theme, icon source kept on System the whole time — only the build differs.

Samsung themed icons (this PR) — compare Lawnchair (NoFix) vs the fixed build:

Build Samsung themed icons
Lawnchair 15 (official)
16-dev without this fix (NoFix) ❌ default icons
16-dev with this fix ✅ restored

Also visible in the same clip — transparent icon backgrounds (LawnchairLauncher/lawnchair#6890) — compare Lawnchair 15 vs the fixed build: v15 still draws the automatic white plate behind transparent / themed icons, the fixed build removes it. (Separate PR; shown here only because it's the same recording.)

Since the icon source never leaves System, both differences come from the code, not from a user setting.

▶️ video below
https://github.com/user-attachments/assets/91d138ce-72cf-4775-9fe2-f03f685d6dbe

Notes

Split out of #30 to keep it atomic — that PR keeps the transparent-icon-background changes.

🤖 Generated with Claude Code

Regression introduced by merging android-16.0.0_r2 (4767f8b "Merge tag
'android-16.0.0_r2' into 15-dev"). Before that merge, app icons fell back to
ActivityInfo.loadIcon(PackageManager), which Samsung's
SemApplicationPackageManager intercepts to return Theme Park / Good Lock
themed icons. The Android 16 launcher3 rework replaced that path with
loadPackageIcon(), which reads the icon straight from the app's resources via
getResourcesForApplication() and therefore bypasses Samsung's theming. As a
result, themed icons that rendered in Lawnchair 15 stopped appearing in 16-dev.

Try the PackageManager icon APIs first (getActivityIcon, then
getApplicationIcon), falling back to the existing resource-based path when the
system returns the default icon or the lookup fails.

Split out of the transparent-icon-backgrounds work so it can land atomically.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
x-JOC added a commit to x-JOC/platform_frameworks_libs_systemui that referenced this pull request Jun 17, 2026
The Theme Park / Good Lock themed-icon fix (loadPackageIcon) is tracked
separately in LawnchairLauncher#31 so this PR stays scoped to transparent icon backgrounds.
Restores IconProvider.java to the base; the transparent-background changes
(IconPreferences, BaseIconFactory) are unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant