@@ -157,7 +157,10 @@ void Shell::InitializeFolderSystem() {
157157 }
158158 LoadFolderVector (FOLDER_HIDDEN);
159159 LoadFolderVector (FOLDER_INVISIBLE);
160-
160+
161+ // Clean up any invalid app IDs that no longer exist
162+ CleanupInvalidApps ();
163+
161164 // Build a set of all apps that are already in folders
162165 std::unordered_set<uint32_t > apps_in_folders;
163166 for (auto & [folder_id, folder] : folders) {
@@ -343,6 +346,46 @@ void Shell::SaveAllFolderVectors() {
343346 SaveFolderVector (FOLDER_INVISIBLE);
344347}
345348
349+ void Shell::CleanupInvalidApps () {
350+ bool any_changes = false ;
351+
352+ // Clean up all folders including special ones
353+ std::vector<uint8_t > all_folders;
354+ for (uint8_t i = 0 ; i < FOLDER_COUNT; i++) {
355+ all_folders.push_back (i);
356+ }
357+ all_folders.push_back (FOLDER_HIDDEN);
358+ all_folders.push_back (FOLDER_INVISIBLE);
359+
360+ for (uint8_t folder_id : all_folders) {
361+ std::vector<uint32_t >& app_ids = folders[folder_id].app_ids ;
362+ std::vector<uint32_t > valid_apps;
363+
364+ for (uint32_t app_id : app_ids) {
365+ // Check if this app exists in the applications map
366+ auto app_it = applications.find (app_id);
367+ if (app_it != applications.end ()) {
368+ // App exists, keep it
369+ valid_apps.push_back (app_id);
370+ } else {
371+ // App doesn't exist anymore, log and remove
372+ MLOGD (" Shell" , " Removing invalid app ID %X from folder %d" , app_id, folder_id);
373+ any_changes = true ;
374+ }
375+ }
376+
377+ // Update the folder with only valid apps
378+ if (app_ids.size () != valid_apps.size ()) {
379+ app_ids = valid_apps;
380+ SaveFolderVector (folder_id);
381+ }
382+ }
383+
384+ if (any_changes) {
385+ MLOGI (" Shell" , " Cleaned up invalid app entries" );
386+ }
387+ }
388+
346389uint8_t Shell::GetAppFolder (uint32_t app_id, Application_Info* app_info) {
347390 // Check if app is invisible first
348391 if (!app_info->visibility ) {
0 commit comments