use of org.robolectric.res.android.LoadedArsc.DynamicPackageEntry in project robolectric by robolectric.
the class CppAssetManager2 method BuildDynamicRefTable.
// Assigns package IDs to all shared library ApkAssets.
// Should be called whenever the ApkAssets are changed.
// void BuildDynamicRefTable();
void BuildDynamicRefTable() {
package_groups_.clear();
// package_ids_.fill(0xff);
for (int i = 0; i < package_ids_.length; i++) {
package_ids_[i] = (byte) 0xff;
}
// 0x01 is reserved for the android package.
int next_package_id = 0x02;
final int apk_assets_count = apk_assets_.size();
for (int i = 0; i < apk_assets_count; i++) {
final LoadedArsc loaded_arsc = apk_assets_.get(i).GetLoadedArsc();
// for (final std.unique_ptr<final LoadedPackage>& package_ :
for (final LoadedPackage package_ : loaded_arsc.GetPackages()) {
// Get the package ID or assign one if a shared library.
int package_id;
if (package_.IsDynamic()) {
package_id = next_package_id++;
} else {
package_id = package_.GetPackageId();
}
// Add the mapping for package ID to index if not present.
byte idx = package_ids_[package_id];
if (idx == (byte) 0xff) {
// package_ids_[package_id] = idx = static_cast<byte>(package_groups_.size());
package_ids_[package_id] = idx = (byte) package_groups_.size();
// DynamicRefTable& ref_table = package_groups_.back().dynamic_ref_table;
// ref_table.mAssignedPackageId = package_id;
// ref_table.mAppAsLib = package->IsDynamic() && package->GetPackageId() == 0x7f;
DynamicRefTable ref_table = new DynamicRefTable((byte) package_id, package_.IsDynamic() && package_.GetPackageId() == 0x7f);
PackageGroup newPackageGroup = new PackageGroup();
newPackageGroup.dynamic_ref_table = ref_table;
package_groups_.add(newPackageGroup);
}
PackageGroup package_group = package_groups_.get(idx);
// Add the package and to the set of packages with the same ID.
// package_group->packages_.push_back(ConfiguredPackage{package.get(), {}});
// package_group.cookies_.push_back(static_cast<ApkAssetsCookie>(i));
package_group.packages_.add(new ConfiguredPackage(package_));
package_group.cookies_.add(ApkAssetsCookie.forInt(i));
// Add the package name . build time ID mappings.
for (final DynamicPackageEntry entry : package_.GetDynamicPackageMap()) {
// String package_name(entry.package_name.c_str(), entry.package_name.size());
package_group.dynamic_ref_table.mEntries.put(entry.package_name, (byte) entry.package_id);
}
}
}
// Now assign the runtime IDs so that we have a build-time to runtime ID map.
for (PackageGroup iter : package_groups_) {
String package_name = iter.packages_.get(0).loaded_package_.GetPackageName();
for (PackageGroup iter2 : package_groups_) {
iter2.dynamic_ref_table.addMapping(package_name, iter.dynamic_ref_table.mAssignedPackageId);
}
}
}
Aggregations