From 09d0b1cc283be9a163a11af70f3555a34f195bc2 Mon Sep 17 00:00:00 2001 From: wang19954 Date: Mon, 8 Sep 2025 11:04:06 +0800 Subject: [PATCH] IssueNo:#ICWTMF Description:fix icon bug Sig:SIG_ApplicaitonFramework Feature or Bugfix:Bugfix Binary Source:No Signed-off-by: wangtiantian --- .../bundle_resource_icon_rdb.cpp | 9 ++++- .../bundle_resource_parser.cpp | 6 +++- .../bms_bundle_resource_icon_rdb_test.cpp | 35 +++++++++++++++++++ .../bms_bundle_resource_test.cpp | 5 +++ 4 files changed, 53 insertions(+), 2 deletions(-) diff --git a/services/bundlemgr/src/bundle_resource/bundle_resource_icon_rdb.cpp b/services/bundlemgr/src/bundle_resource/bundle_resource_icon_rdb.cpp index ead7667356..4d25a9257e 100644 --- a/services/bundlemgr/src/bundle_resource/bundle_resource_icon_rdb.cpp +++ b/services/bundlemgr/src/bundle_resource/bundle_resource_icon_rdb.cpp @@ -367,6 +367,10 @@ bool BundleResourceIconRdb::ConvertToLauncherAbilityResourceInfo( if (getIcon) { ret = absSharedResultSet->GetString(INDEX_ICON, launcherAbilityResourceInfo.icon); CHECK_RDB_RESULT_RETURN_IF_FAIL(ret, "GetString label icon, ret: %{public}d"); + if (launcherAbilityResourceInfo.icon.empty()) { + APP_LOGE("-n %{public}s icon is empty", launcherAbilityResourceInfo.bundleName.c_str()); + return false; + } } bool getDrawable = (resourceFlag & static_cast(ResourceFlag::GET_RESOURCE_INFO_WITH_DRAWABLE_DESCRIPTOR)) @@ -374,7 +378,10 @@ bool BundleResourceIconRdb::ConvertToLauncherAbilityResourceInfo( if (getDrawable) { ret = absSharedResultSet->GetBlob(INDEX_FOREGROUND, launcherAbilityResourceInfo.foreground); CHECK_RDB_RESULT_RETURN_IF_FAIL(ret, "GetBlob foreground, ret: %{public}d"); - + if (launcherAbilityResourceInfo.foreground.empty()) { + APP_LOGE("-n %{public}s foreground is empty", launcherAbilityResourceInfo.bundleName.c_str()); + return false; + } ret = absSharedResultSet->GetBlob(INDEX_BACKGROUND, launcherAbilityResourceInfo.background); CHECK_RDB_RESULT_RETURN_IF_FAIL(ret, "GetBlob background, ret: %{public}d"); } diff --git a/services/bundlemgr/src/bundle_resource/bundle_resource_parser.cpp b/services/bundlemgr/src/bundle_resource/bundle_resource_parser.cpp index 9e41166443..0a6b889cf1 100644 --- a/services/bundlemgr/src/bundle_resource/bundle_resource_parser.cpp +++ b/services/bundlemgr/src/bundle_resource/bundle_resource_parser.cpp @@ -592,7 +592,11 @@ bool BundleResourceParser::ParseIconResourceInfosWithTheme( APP_LOGW_NOFUNC("ParseResourceInfo fail key:%{public}s", resourceInfos[index].GetKey().c_str()); } } - if (resourceInfos[0].icon_.empty()) { + bool invalidIcon = std::all_of(resourceInfos.begin(), resourceInfos.end(), + [](const auto& resourceInfo) { + return resourceInfo.icon_.empty(); + }); + if (invalidIcon) { APP_LOGE_NOFUNC("ParseResourceInfos fail -n %{public}s -m %{public}s", resourceInfos[0].bundleName_.c_str(), resourceInfos[0].moduleName_.c_str()); return false; diff --git a/services/bundlemgr/test/unittest/bms_bundle_resource_icon_test/bms_bundle_resource_icon_rdb_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_resource_icon_test/bms_bundle_resource_icon_rdb_test.cpp index d39f997d0e..8601e8e9a6 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_resource_icon_test/bms_bundle_resource_icon_rdb_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_resource_icon_test/bms_bundle_resource_icon_rdb_test.cpp @@ -214,6 +214,41 @@ HWTEST_F(BmsBundleResourceIconRdbTest, DeleteResourceIconInfo_0002, Function | S EXPECT_FALSE(ans); } +/** + * @tc.number: GetResourceIconInfos_0001 + * Function: BundleResourceIconRdb + * @tc.name: test BundleResourceIconRdb + * @tc.desc: 1. system running normally + * 2. test GetResourceIconInfos + */ +HWTEST_F(BmsBundleResourceIconRdbTest, GetResourceIconInfos_0001, Function | SmallTest | Level0) +{ + BundleResourceIconRdb resourceIconRdb; + ResourceInfo resourceInfo; + resourceInfo.bundleName_ = "bundleName_test"; + resourceInfo.appIndex_ = APP_INDEX; + resourceInfo.icon_ = ""; + bool ans = resourceIconRdb.AddResourceIconInfo(USER_ID, IconResourceType::DYNAMIC_ICON, resourceInfo); + EXPECT_TRUE(ans); + + std::vector launcherAbilityResourceInfos; + ans = resourceIconRdb.GetResourceIconInfos(resourceInfo.bundleName_, USER_ID, APP_INDEX, + static_cast(ResourceFlag::GET_RESOURCE_INFO_WITH_ICON), + launcherAbilityResourceInfos); + EXPECT_FALSE(ans); + EXPECT_TRUE(launcherAbilityResourceInfos.empty()); + + ans = resourceIconRdb.GetResourceIconInfos(resourceInfo.bundleName_, USER_ID, APP_INDEX, + static_cast(ResourceFlag::GET_RESOURCE_INFO_WITH_DRAWABLE_DESCRIPTOR), + launcherAbilityResourceInfos); + EXPECT_FALSE(ans); + EXPECT_TRUE(launcherAbilityResourceInfos.empty()); + + ans = resourceIconRdb.DeleteResourceIconInfo(resourceInfo.bundleName_, USER_ID, + APP_INDEX, IconResourceType::DYNAMIC_ICON); + EXPECT_TRUE(ans); +} + /** * @tc.number: DeleteResourceIconInfos_0001 * Function: BundleResourceIconRdb diff --git a/services/bundlemgr/test/unittest/bms_bundle_resource_test/bms_bundle_resource_test.cpp b/services/bundlemgr/test/unittest/bms_bundle_resource_test/bms_bundle_resource_test.cpp index 3bbdf81ce8..b3df5d26b1 100644 --- a/services/bundlemgr/test/unittest/bms_bundle_resource_test/bms_bundle_resource_test.cpp +++ b/services/bundlemgr/test/unittest/bms_bundle_resource_test/bms_bundle_resource_test.cpp @@ -5297,6 +5297,11 @@ HWTEST_F(BmsBundleResourceTest, ParseResourceInfosWithTheme_0010, Function | Sma resourceInfos.push_back(resourceInfo); ans = parser.ParseIconResourceInfosWithTheme(USERID, resourceInfos); EXPECT_FALSE(ans); + + resourceInfo.icon_ = "icon"; + resourceInfos.push_back(resourceInfo); + ans = parser.ParseIconResourceInfosWithTheme(USERID, resourceInfos); + EXPECT_TRUE(ans); } /** -- Gitee