Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c0a6d776 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix long paths on Windows"

parents 6d4ce1e5 a55dc2ed
Loading
Loading
Loading
Loading
+5 −2
Original line number Original line Diff line number Diff line
@@ -343,7 +343,9 @@ static jobject NativeGetOverlayableMap(JNIEnv* env, jclass /*clazz*/, jlong ptr,
  assetmanager->ForEachPackage([&](const std::string& this_package_name, uint8_t package_id) {
  assetmanager->ForEachPackage([&](const std::string& this_package_name, uint8_t package_id) {
    if (this_package_name == std_package_name) {
    if (this_package_name == std_package_name) {
      map = assetmanager->GetOverlayableMapForPackage(package_id);
      map = assetmanager->GetOverlayableMapForPackage(package_id);
      return false;
    }
    }
    return true;
  });
  });


  if (map == nullptr) {
  if (map == nullptr) {
@@ -521,15 +523,16 @@ static jobject NativeGetAssignedPackageIdentifiers(JNIEnv* env, jclass /*clazz*/
    return nullptr;
    return nullptr;
  }
  }


  assetmanager->ForEachPackage([&](const std::string& package_name, uint8_t package_id) {
  assetmanager->ForEachPackage([&](const std::string& package_name, uint8_t package_id) -> bool {
    jstring jpackage_name = env->NewStringUTF(package_name.c_str());
    jstring jpackage_name = env->NewStringUTF(package_name.c_str());
    if (jpackage_name == nullptr) {
    if (jpackage_name == nullptr) {
      // An exception is pending.
      // An exception is pending.
      return;
      return false;
    }
    }


    env->CallVoidMethod(sparse_array, gSparseArrayOffsets.put, static_cast<jint>(package_id),
    env->CallVoidMethod(sparse_array, gSparseArrayOffsets.put, static_cast<jint>(package_id),
                        jpackage_name);
                        jpackage_name);
    return true;
  });
  });
  return sparse_array;
  return sparse_array;
}
}
+39 −25
Original line number Original line Diff line number Diff line
@@ -356,6 +356,7 @@ std::unique_ptr<Asset> AssetManager2::OpenNonAsset(const std::string& filename,


ApkAssetsCookie AssetManager2::FindEntry(uint32_t resid, uint16_t density_override,
ApkAssetsCookie AssetManager2::FindEntry(uint32_t resid, uint16_t density_override,
                                         bool /*stop_at_first_match*/,
                                         bool /*stop_at_first_match*/,
                                         bool ignore_configuration,
                                         FindEntryResult* out_entry) const {
                                         FindEntryResult* out_entry) const {
  // Might use this if density_override != 0.
  // Might use this if density_override != 0.
  ResTable_config density_override_config;
  ResTable_config density_override_config;
@@ -399,7 +400,7 @@ ApkAssetsCookie AssetManager2::FindEntry(uint32_t resid, uint16_t density_overri


  // If desired_config is the same as the set configuration, then we can use our filtered list
  // If desired_config is the same as the set configuration, then we can use our filtered list
  // and we don't need to match the configurations, since they already matched.
  // and we don't need to match the configurations, since they already matched.
  const bool use_fast_path = desired_config == &configuration_;
  const bool use_fast_path = !ignore_configuration && desired_config == &configuration_;


  for (size_t pi = 0; pi < package_count; pi++) {
  for (size_t pi = 0; pi < package_count; pi++) {
    const ConfiguredPackage& loaded_package_impl = package_group.packages_[pi];
    const ConfiguredPackage& loaded_package_impl = package_group.packages_[pi];
@@ -475,9 +476,10 @@ ApkAssetsCookie AssetManager2::FindEntry(uint32_t resid, uint16_t density_overri
      // ResTable_config, we must copy it.
      // ResTable_config, we must copy it.
      const auto iter_end = type_spec->types + type_spec->type_count;
      const auto iter_end = type_spec->types + type_spec->type_count;
      for (auto iter = type_spec->types; iter != iter_end; ++iter) {
      for (auto iter = type_spec->types; iter != iter_end; ++iter) {
        ResTable_config this_config;
        ResTable_config this_config{};
        this_config.copyFromDtoH((*iter)->config);


        if (!ignore_configuration) {
          this_config.copyFromDtoH((*iter)->config);
          if (!this_config.match(*desired_config)) {
          if (!this_config.match(*desired_config)) {
            continue;
            continue;
          }
          }
@@ -491,6 +493,7 @@ ApkAssetsCookie AssetManager2::FindEntry(uint32_t resid, uint16_t density_overri
          } else {
          } else {
            continue;
            continue;
          }
          }
        }


        // The configuration matches and is better than the previous selection.
        // The configuration matches and is better than the previous selection.
        // Find the entry value if it exists for this configuration.
        // Find the entry value if it exists for this configuration.
@@ -506,6 +509,11 @@ ApkAssetsCookie AssetManager2::FindEntry(uint32_t resid, uint16_t density_overri
        best_config = &best_config_copy;
        best_config = &best_config_copy;
        best_offset = offset;
        best_offset = offset;


        if (ignore_configuration) {
          // Any configuration will suffice, so break.
          break;
        }

        if (resource_resolution_logging_enabled_) {
        if (resource_resolution_logging_enabled_) {
          resolution_steps.push_back(Resolution::Step{resolution_type,
          resolution_steps.push_back(Resolution::Step{resolution_type,
                                                      this_config.toString(),
                                                      this_config.toString(),
@@ -622,8 +630,9 @@ std::string AssetManager2::GetLastResourceResolution() const {


bool AssetManager2::GetResourceName(uint32_t resid, ResourceName* out_name) const {
bool AssetManager2::GetResourceName(uint32_t resid, ResourceName* out_name) const {
  FindEntryResult entry;
  FindEntryResult entry;
  ApkAssetsCookie cookie =
  ApkAssetsCookie cookie = FindEntry(resid, 0u /* density_override */,
      FindEntry(resid, 0u /* density_override */, true /* stop_at_first_match */, &entry);
                                     true /* stop_at_first_match */,
                                     true /* ignore_configuration */, &entry);
  if (cookie == kInvalidCookie) {
  if (cookie == kInvalidCookie) {
    return false;
    return false;
  }
  }
@@ -652,13 +661,14 @@ bool AssetManager2::GetResourceName(uint32_t resid, ResourceName* out_name) cons


bool AssetManager2::GetResourceFlags(uint32_t resid, uint32_t* out_flags) const {
bool AssetManager2::GetResourceFlags(uint32_t resid, uint32_t* out_flags) const {
  FindEntryResult entry;
  FindEntryResult entry;
  ApkAssetsCookie cookie =
  ApkAssetsCookie cookie = FindEntry(resid, 0u /* density_override */,
      FindEntry(resid, 0u /* density_override */, false /* stop_at_first_match */, &entry);
                                     false /* stop_at_first_match */,
                                     true /* ignore_configuration */, &entry);
  if (cookie != kInvalidCookie) {
  if (cookie != kInvalidCookie) {
    *out_flags = entry.type_flags;
    *out_flags = entry.type_flags;
    return cookie;
    return true;
  }
  }
  return kInvalidCookie;
  return false;
}
}


ApkAssetsCookie AssetManager2::GetResource(uint32_t resid, bool may_be_bag,
ApkAssetsCookie AssetManager2::GetResource(uint32_t resid, bool may_be_bag,
@@ -666,8 +676,8 @@ ApkAssetsCookie AssetManager2::GetResource(uint32_t resid, bool may_be_bag,
                                           ResTable_config* out_selected_config,
                                           ResTable_config* out_selected_config,
                                           uint32_t* out_flags) const {
                                           uint32_t* out_flags) const {
  FindEntryResult entry;
  FindEntryResult entry;
  ApkAssetsCookie cookie =
  ApkAssetsCookie cookie = FindEntry(resid, density_override, false /* stop_at_first_match */,
      FindEntry(resid, density_override, false /* stop_at_first_match */, &entry);
                                     false /* ignore_configuration */, &entry);
  if (cookie == kInvalidCookie) {
  if (cookie == kInvalidCookie) {
    return kInvalidCookie;
    return kInvalidCookie;
  }
  }
@@ -759,8 +769,10 @@ const ResolvedBag* AssetManager2::GetBag(uint32_t resid, std::vector<uint32_t>&
  }
  }


  FindEntryResult entry;
  FindEntryResult entry;
  ApkAssetsCookie cookie =
  ApkAssetsCookie cookie = FindEntry(resid, 0u /* density_override */,
      FindEntry(resid, 0u /* density_override */, false /* stop_at_first_match */, &entry);
                                     false /* stop_at_first_match */,
                                     false /* ignore_configuration */,
                                     &entry);
  if (cookie == kInvalidCookie) {
  if (cookie == kInvalidCookie) {
    return nullptr;
    return nullptr;
  }
  }
@@ -1387,7 +1399,9 @@ void Theme::SetTo(const Theme& o) {
            // Find the cookie of the attribute resource id
            // Find the cookie of the attribute resource id
            FindEntryResult attribute_entry_result;
            FindEntryResult attribute_entry_result;
            ApkAssetsCookie attribute_cookie =
            ApkAssetsCookie attribute_cookie =
                o.asset_manager_->FindEntry(make_resid(p, t, e), 0 /* density_override */ , false,
                o.asset_manager_->FindEntry(make_resid(p, t, e), 0 /* density_override */ ,
                                            true /* stop_at_first_match */,
                                            true /* ignore_configuration */,
                                            &attribute_entry_result);
                                            &attribute_entry_result);


            // Determine the package id of the attribute in the destination AssetManager
            // Determine the package id of the attribute in the destination AssetManager
+9 −5
Original line number Original line Diff line number Diff line
@@ -257,11 +257,12 @@ class AssetManager2 {
  // Creates a new Theme from this AssetManager.
  // Creates a new Theme from this AssetManager.
  std::unique_ptr<Theme> NewTheme();
  std::unique_ptr<Theme> NewTheme();


  template <typename Func>
  void ForEachPackage(const std::function<bool(const std::string&, uint8_t)> func) const {
  void ForEachPackage(Func func) const {
    for (const PackageGroup& package_group : package_groups_) {
    for (const PackageGroup& package_group : package_groups_) {
      func(package_group.packages_.front().loaded_package_->GetPackageName(),
      if (!func(package_group.packages_.front().loaded_package_->GetPackageName(),
           package_group.dynamic_ref_table.mAssignedPackageId);
           package_group.dynamic_ref_table.mAssignedPackageId)) {
        return;
      }
    }
    }
  }
  }


@@ -282,10 +283,13 @@ class AssetManager2 {
  // care about the value. In this case, the value of `FindEntryResult::type_flags` is incomplete
  // care about the value. In this case, the value of `FindEntryResult::type_flags` is incomplete
  // and should not be used.
  // and should not be used.
  //
  //
  // When `ignore_configuration` is true, FindEntry will return always select the first entry in
  // for the type seen regardless of its configuration.
  //
  // NOTE: FindEntry takes care of ensuring that structs within FindEntryResult have been properly
  // NOTE: FindEntry takes care of ensuring that structs within FindEntryResult have been properly
  // bounds-checked. Callers of FindEntry are free to trust the data if this method succeeds.
  // bounds-checked. Callers of FindEntry are free to trust the data if this method succeeds.
  ApkAssetsCookie FindEntry(uint32_t resid, uint16_t density_override, bool stop_at_first_match,
  ApkAssetsCookie FindEntry(uint32_t resid, uint16_t density_override, bool stop_at_first_match,
                            FindEntryResult* out_entry) const;
                            bool ignore_configuration, FindEntryResult* out_entry) const;


  // Assigns package IDs to all shared library ApkAssets.
  // Assigns package IDs to all shared library ApkAssets.
  // Should be called whenever the ApkAssets are changed.
  // Should be called whenever the ApkAssets are changed.
+36 −0
Original line number Original line Diff line number Diff line
@@ -44,6 +44,7 @@ constexpr int32_t kNonBreakingSpace = 0xa0;


Maybe<ResourceName> ToResourceName(
Maybe<ResourceName> ToResourceName(
    const android::ResTable::resource_name& name_in) {
    const android::ResTable::resource_name& name_in) {
  // TODO: Remove this when ResTable and AssetManager(1) are removed from AAPT2
  ResourceName name_out;
  ResourceName name_out;
  if (!name_in.package) {
  if (!name_in.package) {
    return {};
    return {};
@@ -79,6 +80,41 @@ Maybe<ResourceName> ToResourceName(
  return name_out;
  return name_out;
}
}


Maybe<ResourceName> ToResourceName(const android::AssetManager2::ResourceName& name_in) {
  ResourceName name_out;
  if (!name_in.package) {
    return {};
  }

  name_out.package = std::string(name_in.package, name_in.package_len);

  const ResourceType* type;
  if (name_in.type16) {
    type = ParseResourceType(
        util::Utf16ToUtf8(StringPiece16(name_in.type16, name_in.type_len)));
  } else if (name_in.type) {
    type = ParseResourceType(StringPiece(name_in.type, name_in.type_len));
  } else {
    return {};
  }

  if (!type) {
    return {};
  }

  name_out.type = *type;

  if (name_in.entry16) {
    name_out.entry =
        util::Utf16ToUtf8(StringPiece16(name_in.entry16, name_in.entry_len));
  } else if (name_in.entry) {
    name_out.entry = std::string(name_in.entry, name_in.entry_len);
  } else {
    return {};
  }
  return name_out;
}

bool ParseResourceName(const StringPiece& str, ResourceNameRef* out_ref,
bool ParseResourceName(const StringPiece& str, ResourceNameRef* out_ref,
                       bool* out_private) {
                       bool* out_private) {
  if (str.empty()) {
  if (str.empty()) {
+7 −0
Original line number Original line Diff line number Diff line
@@ -20,6 +20,7 @@
#include <functional>
#include <functional>
#include <memory>
#include <memory>


#include "androidfw/AssetManager2.h"
#include "androidfw/ConfigDescription.h"
#include "androidfw/ConfigDescription.h"
#include "androidfw/ResourceTypes.h"
#include "androidfw/ResourceTypes.h"
#include "androidfw/StringPiece.h"
#include "androidfw/StringPiece.h"
@@ -77,6 +78,12 @@ bool IsAttributeReference(const android::StringPiece& str);
Maybe<ResourceName> ToResourceName(
Maybe<ResourceName> ToResourceName(
    const android::ResTable::resource_name& name);
    const android::ResTable::resource_name& name);


/**
 * Convert an android::AssetManager2::ResourceName to an aapt::ResourceName struct.
 */
Maybe<ResourceName> ToResourceName(
    const android::AssetManager2::ResourceName& name_in);

/**
/**
 * Returns a boolean value if the string is equal to TRUE, true, True, FALSE,
 * Returns a boolean value if the string is equal to TRUE, true, True, FALSE,
 * false, or False.
 * false, or False.
Loading