ssize_t processAssets(Bundle* bundle, ZipFile* zip, const sp<AaptDir>& dir, const AaptGroupEntry& ge) { ssize_t count = 0; const size_t ND = dir->getDirs().size(); size_t i; for (i=0; i<ND; i++) { ssize_t res = processAssets(bundle, zip, dir->getDirs().valueAt(i), ge); if (res < 0) { return res; } count += res; } const size_t NF = dir->getFiles().size(); for (i=0; i<NF; i++) { sp<AaptGroup> gp = dir->getFiles().valueAt(i); ssize_t fi = gp->getFiles().indexOfKey(ge); if (fi >= 0) { sp<AaptFile> fl = gp->getFiles().valueAt(fi); if (!processFile(bundle, zip, gp, fl)) { return UNKNOWN_ERROR; } count++; } } return count; }
ssize_t processAssets(Bundle* bundle, ZipFile* zip, const sp<AaptDir>& dir, const AaptGroupEntry& ge, const ResourceFilter* filter) { ssize_t count = 0; const size_t ND = dir->getDirs().size(); size_t i; for (i=0; i<ND; i++) { const sp<AaptDir>& subDir = dir->getDirs().valueAt(i); const bool filterable = filter != NULL && subDir->getLeaf().find("mipmap-") != 0; if (filterable && subDir->getLeaf() != subDir->getPath() && !filter->match(ge.toParams())) { continue; } ssize_t res = processAssets(bundle, zip, subDir, ge, filterable ? filter : NULL); if (res < 0) { return res; } count += res; } if (filter != NULL && !filter->match(ge.toParams())) { return count; } const size_t NF = dir->getFiles().size(); for (i=0; i<NF; i++) { sp<AaptGroup> gp = dir->getFiles().valueAt(i); ssize_t fi = gp->getFiles().indexOfKey(ge); if (fi >= 0) { sp<AaptFile> fl = gp->getFiles().valueAt(fi); if (!processFile(bundle, zip, gp, fl)) { return UNKNOWN_ERROR; } count++; } } return count; }