Global Icon Pack

An Xposed module for applying icon packs globally

GitHub Repo stars IzzyOnDroid

Some launchers support icon packs, however the icons are usually inconsistent across the whole system. For example, the Settings page and the Recent Apps screen may retain the default icons. This module is designed to extend the icon packs throughout the entire system.

Get it on IzzyOnDroid

Preview

Requirements

  • LSPosed
  • Android 8.1+ (I tested on Android 14, 15. @Mickmick21 tested on Android 10, 12L.)
  • Some features require AOSP-like OS

Installation

  1. Install the apk.
  2. Select apps in lsposed. It should work for most apps/launchers , depending on the api they use.
  3. Open Global Icon Pack, choose an icon pack.
  4. Open the three dot menu, click each of Restart xxx.

Notes

Modes

  • Use share mode whenever possible. The provider mode serves as a fallback if share mode doesn't work. Local mode is only reserved for testing and you can't use icon variants with this mode (However it maybe faster if there are only a few icon records).
  • If you are using share mode, after uninstallation, you must remove /data/misc/com.richardluo.globalIconPack/iconPack.db manually.
  • Sometimes system update may reset the permissions of share mode database. It is recommended that you deselect apps in LSPosed, after the update, select them again, and open GIP at least once (to setup the permissions), then click each of Restart xxx.
  • System update may also break the splash screen. The icons on it may be so large that they appear to be clipped. Go to lsposed, locate System UI, long press it and select reoptimize, then restart System UI. The splash screen should return to normal.

Tips

  • You can long press icon in icon chooser bottom sheet to try as calendar icon.
  • In icon variant, the option Modified indicates that you have made changes to the icon variants. If enabled, when the icon pack updates, it will only add new icons instead of replacing all icons. Note that this could cause issues if any icon entry is missing in the new version!

Launcher 3

  • If you are using a different launcher3 based launcher, please input its package name into the launcher package name in pixel settings. If it is not launcher3 based, some functions may not work.
  • Recent screen will use your default launcher unless you use quickswitch, so you will need to select pixel launcher for that to work.
  • Pixel launcher saves its icon database in /data/data/com.google.android.apps.nexuslauncher/databases/app_icons.db.

For icon pack developers

  • You can create a shortcut record by appending @ to the end of package name, and shortcut id as classname.

Known Issues

  • If the launcher is slow to boot or crashes, switch to 'local' mode.
  • If it says "Please ensure the Xposed module has been enabled first" and you have the module enabled already, try to force stop then restart the app.
  • Regardless of the minimum SDK version, you must test compatibility with android versions below 14 by yourself.

Help with Localization

Crowdin | Agile localization for tech companies

Main Translators

The list may not be latest.

  • Chinese Simplified
    • RichardLuo
  • German
    • elisenlebkuch
    • Max
  • Russian
    • Кирилл Гук
    • Artem Dreznel
  • Chinese Traditional
    • Jia-Bin
  • Turkish
    • Holi
  • French
    • MickMick21
    • Jules
  • Portuguese
    • Cauã

Disclaimer

[!WARNING]

  • Please note that this module may not be fully compatible with all custom ROMs.
  • I do not take any responsibility for any damage or issues that may occur to your device.

Package

com.richardluo.globalIconPack

Authors

RichardLuo

Releases

0.5.1

Release type: Stable

9/7/2025, 5:55:26 PM

🐛 Fixes

  • fix: AppIconListPage title does not wrap
  • fix: List item will not care about the actual height, just the min height of text part
  • fix: scroll indicator persists even when strokeWidth = 0
  • fix: search bar shadow needs to be applied after padding
  • fix: ClockDrawableWrapper causes crash on android 16 qpr2 beta
  • fix(merger): content padding issue
  • fix: constructed ClockAnimationInfo is not returned
  • fix: hook only the overload with TaskDescription to fix crash

💬 Other

  • docs: update readme
  • chore: upgrade dependency

0.5.0

Release type: Stable

8/25/2025, 11:31:14 AM

🚀 Features

  • feat: material expressive init support
  • feat: add color preview in shape color
  • feat: expressive shapes for dialog button
  • feat: preference screen list style change
  • feat: updated snackbar visual
  • feat: redesign filter
  • feat: IconButtonWithTooltip with shapes
  • feat: redesigned list item
  • feat: add thumb icon to switch
  • feat: hide appfilter when scrolling up
  • feat: redesigned bottom navigation
  • feat: redesigned search bar
  • feat: redesigned app icon list page
  • feat: redesigned animated fab
  • feat: redesigned import/export as fab menu
  • feat: scroll indication box around icon chooser grid
  • feat(IconChooser): expand search bar only when needed
  • feat: ScrollIndicator supports shape
  • feat: clear focus on scroll

🐛 Fixes

  • fix: force create the preference file and use its selinux context
  • fix: option dialog doesn't retain scroll state
  • fix: loading circle doesn't fill max size
  • fix: scale drawable float precision
  • refactor: constant state
  • fix: adjust Preference spacing and color
  • fix: icons invisible introduced by b11f1d12
  • refactor: loading defaults to fillMaxSize()
  • fix: scale drawable applies a new bounds instead of canvas scale to eliminate burr
  • fix: list item wrong text color
  • perf: remove onGloballyPositioned
  • fix(MainActivity): avoid overlapping with toolbar
  • fix: center search bar
  • fix: clear focus after search
  • fix(Merger): can only scroll to next page when base pack is selected
  • fix(IconChooser): add shadow to RoundSearchBar, change content alignment of its expand transition
  • fix: none style icon button does not change shape
  • fix: scroll state will reset if bottom sheet is closed
  • fix: add clear button to search bar
  • fix: next step only shows when base pack is chosen
  • fix: ExpandedScrollConnection will expand only when bigger than a threshold
  • fix: use md3 default search bar
  • fix: clear button will fade out when text is empty
  • fix: animations recalibrate

💬 Other

  • chore: change main dropdownmenu leading icons
  • chore: upgrade dependency

0.4.10

Release type: Stable

8/15/2025, 2:06:46 PM

🐛 Fixes

  • fix: clock entries in all drawables
  • fix: apps search bar will search for package name
  • refactor: getCurrentIconPack() to currentIconPack prop
  • fix: show loading circle after changing base pack
  • fix: rename translation keys to ensure clarity
  • refactor: move prefixMsg out of utility function throwOnFail
  • refactor: use rememberLauncherForActivityResult to replace registerForActivityResult in initialization path
  • fix: use world preference selinux context only if it exists
  • fix: provider mode doesn't work because application context isn't ready at ContentProvider.onCreate()

💬 Other

  • chore: upgrade dependency

0.4.9

Release type: Stable

8/5/2025, 5:11:32 AM

🐛 Fixes

  • fix(IconPackCreator): progress doesn't advance
  • fix: 76db6707 doesn't fix all
  • fix: add launcher3 to recommends in case user forgets
  • fix: deoptimize accessibility methods
  • fix: runCatching ShareSource getId
  • fix: delete uninstalled iconPack before checking for current pack update time
  • fix(ShareSource): log on exception
  • fix: put the database to null when migrating
  • fix: safer resetting db permission
  • fix: iconPackAsFallback defaults to true
  • fix: reset the permission for journal file so it won't crash
  • fix: remove sort in activity icon list
  • fix: allow custom share db path
  • fix: set memory journal mode for SQLite to avoid journal files

💬 Other

  • chore: remove unnecessary suppress
  • chore: expose only flow interface

0.4.8

Release type: Stable

8/4/2025, 9:43:28 AM

🚀 Features

  • feat: clock use fallback mask
  • feat: disable clock seconds
  • feat: add shimmer to unloaded lazy image
  • feat: clear all in AppIconListPage
  • feat: restore default in merger

🐛 Fixes

  • fix(Provider): reset strict mode allow thread disk reads
  • fix: ClockDrawableWrapper.forExtras() does not work since android 15 r20
  • fix(ClockDrawableWrapper): add range check
  • fix: icon variant and merger no longer use icon pack as fallback setting
  • fix: move tooltip below icon button
  • refactor(IconChooserSheet): move replaceIcon callback to UI
  • fix(IconChooser): there is always a original icon when searching
  • fix: grammar
  • fix(IconChooserSheet): suggest icons do not disappear immediately when searching
  • fix: appbar scroll behavior will reacts to page changes
  • fix(TextFieldDialogContent): cursor will be set to the end of init value
  • fix: shape color dialog should not be dismissed until a valid color
  • fix: shape color dialog is unable to parse color
  • fix: shape color pref will display the color in summary
  • fix: arbitrary pages
  • fix: safer migrate db
  • refactor: save viewmodel state, refactor state and navigation
  • fix: PackInfoForm on landscape
  • fix: simplify too long english strings
  • refactor: pass old db from helper
  • fix(MainPreference): wrong divider position

💬 Other

  • docs(issue template): comment out desc
  • build: move from groovy to kotlin
  • docs: update third-party-libs.html
  • ci: move refactor and revert to fixes
  • chore: delete .github/ISSUE_TEMPLATE/custom.md
  • docs: new screenshots

0.4.7

Release type: Stable

7/23/2025, 8:30:04 AM

🐛 Fixes

  • fix(AppIconListVM): distinct and sort items by icon
  • fix(AppIconListPage): edge to edge for IconList
  • fix: appIconEntry not being changed
  • perf: distinctBy only when app changes
  • fix(InstanceManager): cache lock
  • fix: db early error
  • fix: remove unnecessary mapLatest
  • fix: set db parent to 0777 to avoid potential issue
  • fix: remove LoadingDialog title space

💬 Other

  • build: some commits are not included
  • refactor: ConsumablePadding
  • refactor: simplify WorldPreference

0.4.6

Release type: Stable

7/21/2025, 1:09:03 PM

🚀 Features

  • feat: compatible with android >= 8 (#102) @Mickmick21

🐛 Fixes

  • fix: reset db permission in provider mode
  • fix: remove duplicate debounceInput
  • perf(AppIconList): stop and lazy restart flow as needed
  • fix: change min sdk to 27. SQLite won't work otherwise.
  • fix: PIXEL_LAUNCHER_PACKAGE pref will use TextFieldDialogContent
  • fix: u:object_r:magisk_file does not work for ksu android 16
  • fix: double the icon cache size
  • fix(AppIconListVM): flow is not started as intended

💬 Other

  • chore: cleanup

0.4.5

Release type: Stable

7/19/2025, 7:36:51 AM

🚀 Features

  • feat: radio button in merger base pack selection
  • feat: use broken_image.xml to represent missing icons
  • feat(Merger): ripple round corner
  • feat: auto fill missing icons from other icon packs

🐛 Fixes

  • fix: deoptimize system ui methods
  • perf: minus assign instead of filterKeys
  • fix(AutoFill): move draggable handle to drag indicator icon, to avoid conflict with lazy column
  • perf(IconPackApps): flow stops after a timeout

💬 Other

  • chore: code cleanup
  • chore: upgrade dependencies
  • refactor: object Apps
  • docs: add missing licenses
  • chore: cleanup

0.4.4

Release type: Stable

6/22/2025, 8:01:43 AM

🚀 Features

  • feat: add com.google.android.apps.wellbeing to xposed scope

🐛 Fixes

  • fix: android 15 qpr2
  • fix: > android 15 r20 and fallback icon may be processed twice

0.4.3

Release type: Stable

6/7/2025, 8:53:14 AM

🚀 Features

  • feat: add progress report to icon pack creator

🐛 Fixes

  • fix: probably uninitialized prefFlow before setup.
  • fix(Merger): correct bottom padding for fab and nav pill
  • fix(create_icon_pack.sh): wording

💬 Other

  • build: upgrade dependency
  • docs: add OTA instruction

0.4.2

Release type: Stable

5/23/2025, 2:11:01 PM

🚀 Features

  • feat: improved page transition and shared bounds between pages

💬 Other

  • build: match fix(a.xml): xxx

0.4.1

Release type: Stable

5/21/2025, 9:54:45 AM

🚀 Features

  • feat: override with shape and disable foreground

0.4.0

Release type: Stable

5/14/2025, 4:47:48 PM

🚀 Features

  • feat: add loading dialog for import and export
  • feat: set icons for activities
  • feat: generate fallback icon for sym_def_app_icon

🐛 Fixes

  • fix: read closed cursor
  • fix(IconVariant): the sdk unflattenFromString can not handle empty classname

0.3.13

Release type: Stable

5/11/2025, 4:32:56 PM

🚀 Features

  • feat: auto refresh app list when new app is installed

🐛 Fixes

  • fix: reset permission each time in share mode

💬 Other

  • chore: update dependency
  • docs: uninstallation in share mode instruction

0.3.12

Release type: Stable

5/1/2025, 4:10:46 PM

🐛 Fixes

  • fix: restart pixel launcher will now restart user defined launcher
  • fix: not work for some highly optimized systems

💬 Other

0.3.11

Release type: Stable

4/30/2025, 5:24:10 PM

🐛 Fixes

  • fix: icon pack selection dialog not opening if the icon pack has been uninstalled

💬 Other

  • chore: code cleanup

0.3.10

Release type: Stable

4/30/2025, 4:55:02 AM

🚀 Features

  • feat: display the pixel launcher package name in summary if it is not the default value

🐛 Fixes

  • fix: scale task icon using NON_ADAPTIVE_SCALE
  • fix: hook nexus launcher and launcher3 even if launcher package is set to other value

💬 Other

  • refactor: PrefEntry instead of just Pair
  • docs: README.md

0.3.9

Release type: Stable

4/29/2025, 12:54:25 PM

🚀 Features

  • feat: replace icon in task description (for example custom tabs)

🐛 Fixes

  • fix(ScrollIndicationBox): use DarkGray in light mode
  • fix(Utils): asType does not do type checking
  • fix(task icon): use primary color as background

💬 Other

  • refactor: move sources to .source, models to .model
  • refactor: use MethodHookParam as receiver
  • docs: add new translator

0.3.8

Release type: Stable

4/28/2025, 11:24:47 AM

🚀 Features

  • feat: suggest icon based on current icon entry

🐛 Fixes

  • fix: Custom Drawable can work with color filter
  • fix: some errors in android 14
  • fix: for non adaptive icon, mask should be applied
  • fix: limit height of info dialog to 600 dp
  • fix: limit height of lazy dialog to 600 dp and add a scroll indication

💬 Other

  • refactor(MainVM): make it more clear
  • docs: bug_report.md
  • refactor: a more kotlin way of reflection

0.3.7

Release type: Stable

4/20/2025, 7:50:09 PM

🚀 Features

  • feat: non adaptive icon will use backAsAdaptiveBack
  • feat(Merger): support setting icon for merged icon pack

🐛 Fixes

  • perf: store drawable id in database
  • fix(processIcon): incorrect handling of non adaptive icon back as adaptive back
  • fix: incorrect make adaptive back

💬 Other

  • docs: drop android 11
  • docs: add mode description