-
-
Notifications
You must be signed in to change notification settings - Fork 539
Icon Requests System
SuperDragonXD edited this page Apr 2, 2026
·
2 revisions
Lawnicons allows users to request icons for apps that are not yet themed. This feature involves detecting unthemed apps installed on the user's device, preparing a list, and then guiding the user to submit this list via email with a ZIP file containing the app icons and component data.
- The user navigates to the "Icon Request" screen from the home screen's bottom toolbar.
- If icon requests are currently disabled by the Lawnicons maintainers (a setting fetched from the Lawnicons website), a message informs the user.
- If requests are enabled and the user has unthemed apps:
- A list of unthemed apps is displayed with selection checkboxes.
- The user can select individual apps, select all, or clear the selection.
- Tapping the request button creates a ZIP file containing the selected app icons and component list, and opens an email intent to send the request.
- The user can also save the ZIP file locally or share it via other apps.
- A "Copy components" option copies the formatted component list to the clipboard.
- Announcements specific to icon requests (fetched from the website) may be displayed at the top of the screen.
-
UI Layer (
ui/package):-
destination/iconrequest/IconRequest.kt: The main screen Composable for the icon request feature.- Displays the list of requestable (unthemed) apps with selection UI.
- Provides actions: request, save, share, copy components, select all, clear selection.
- Shows announcements filtered for the
IconRequestlocation.
-
destination/home/Home.kt: The home screen checksHomeUiState.Success.hasIconRequeststo decide whether to show a navigation entry to the icon request screen.
-
-
ViewModel Layer (
ui/destination/iconrequest/package):-
IconRequestViewModel.kt:- Exposes
availableIcons(StateFlow<List<SystemIconInfo>>): The list of unthemed apps detected by theIconRequestRepository. - Exposes
isEnabled(StateFlow<Boolean>): Reflects the global icon request enable/disable setting fetched from the website. - Manages
selectedIcons(StateFlow<List<SystemIconInfo>>): Tracks which icons the user has selected for request. - Manages
isSavingInProgressfor loading state during ZIP creation. - Provides
toggleSelection(),selectAll(),clearSelection(),requestIcons(),saveFile(),shareFile(), andcopyComponents()functions. -
requestIcons()creates a ZIP file viaIconRequestRepository, formats the component list, and delegates toIconRequestHandler.execute()to open an email intent. - Also fetches
announcementsfiltered for theAnnouncementLocation.IconRequestfromAnnouncementsRepository.
- Exposes
-
-
Data Layer (
data/repository/iconrequest/package):-
IconRequestRepository.kt/IconRequestRepositoryImpl.kt:- In its
initblock, fetches all Lawnicons-supported icons and the list of user-installed apps (viaGetSystemPackageList.kt), then compares the two. - Identifies installed apps that do not have a corresponding themed icon in Lawnicons.
- Exposes the list via
iconRequestList: StateFlow<IconRequestModel?>. - Exposes
isEnabled: StateFlow<Boolean>after checking theIconRequestSettingsAPI. - Provides
createIconRequestZip()to bundle selected app icons into a ZIP file.
- In its
-
IconRequestHandler.kt/ArcticonsDashboardHandler:- Handles the actual submission — creates an email
Intentwith the ZIP file as an attachment, device info, and the component list as email body.
- Handles the actual submission — creates an email
-
GetSystemPackageList.kt: Provides the list of all launchable applications installed on the user's device. -
AdaptiveIconBitmap.kt: Utility for extracting app icon bitmaps for inclusion in the ZIP file.
-
-
Data Layer (
data/repository/package):-
PreferenceManager.kt:-
forceEnableIconRequest: A debug preference to allow developers to test the request flow even if globally disabled. -
iconRequestsEnabled: Stores the last fetched global status.
-
-
-
Model Layer (
data/model/package):-
SystemIconInfo.kt: Data class holding the icon, label, and component info for a system-installed app. -
IconRequestModel.kt: Holds a list ofSystemIconInfoobjects and the total count. -
IconRequestSettings.kt: Data class for parsing the JSON response from the website about request status. -
IconRequestData.kt: Holds the ZIP file and formatted component list string for submission.
-
-
Utility (
ui/util/package):-
Constants.kt: DefinesICON_REQUEST_EMAIL(the email address for requests).
-
-
App Startup:
IconRequestRepositorydetermines the list of unthemed apps and updatesiconRequestList. It also fetches the globalisEnabledstatus from the website API. - Navigation: User navigates to the Icon Request screen from the home screen.
-
IconRequestViewModel: ObservesiconRequestRepository.iconRequestListand exposes it asavailableIcons. Loads relevant announcements. -
User Selection: User selects icons to request using
toggleSelection(),selectAll(), orclearSelection(). -
Request Submission (
requestIcons()):- Creates a ZIP file via
iconRequestRepository.createIconRequestZip(selectedIcons). - Formats the component list via
formatIconRequestList(). - Calls
requestHandler.execute()which creates an email intent with the ZIP as an attachment and component list as the email body.
- Creates a ZIP file via
-
Alternative Actions: User can also
saveFile()to export the ZIP,shareFile()to share via other apps, orcopyComponents()to copy the component list to clipboard.
This system provides a comprehensive icon request workflow that bundles app icons and metadata for easy submission to the Lawnicons maintainers.
Found an issue or have a suggestion for this wiki? Please let us know!
- Home
- Getting started
- Architecture
- Key Feature Explanations
- Troubleshooting for Developers
- Project Glossary