Beispiel #1
0
ECode IconPackHelper::CreateIconResource(
    /* [in] */ IContext* context,
    /* [in] */ const String& packageName,
    /* [out] */ IResources** iconRes)
{
    VALIDATE_NOT_NULL(iconRes);
    AutoPtr<IPackageManager> pm;
    context->GetPackageManager((IPackageManager**)&pm);
    AutoPtr<IPackageInfo> info;
    FAIL_RETURN(pm->GetPackageInfo(packageName, 0, (IPackageInfo**)&info))
    AutoPtr<IApplicationInfo> appInfo;
    info->GetApplicationInfo((IApplicationInfo**)&appInfo);
    String themeApk;
    appInfo->GetPublicSourceDir(&themeApk);

    String prefixPath;
    String iconPkgPath;
    String iconResPath;
    Boolean result;
    if (info->GetIsLegacyIconPackPkg(&result), result) {
        iconResPath = "";
        iconPkgPath = "";
        prefixPath = "";
    }
    else {
        prefixPath = IThemeUtils::ICONS_PATH; //path inside APK
        iconPkgPath = ThemeUtils::GetIconPackPkgPath(packageName);
        iconResPath = ThemeUtils::GetIconPackResPath(packageName);
    }

    AutoPtr<IAssetManager> assets;
    CAssetManager::New((IAssetManager**)&assets);
    Int32 cookie;
    assets->AddIconPath(themeApk, iconPkgPath,
            prefixPath, IResources::THEME_ICON_PKG_ID, &cookie);

    AutoPtr<IResources> res;
    context->GetResources((IResources**)&res);
    AutoPtr<IDisplayMetrics> dm;
    res->GetDisplayMetrics((IDisplayMetrics**)&dm);
    AutoPtr<IConfiguration> config;
    res->GetConfiguration((IConfiguration**)&config);
    return CResources::New(assets, dm, config, iconRes);
}