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

Commit b9c9b23f authored by Ryan Mitchell's avatar Ryan Mitchell Committed by Automerger Merge Worker
Browse files

Merge "Set ApkAssets path for fabricated rros" into sc-dev am: 47fb18be

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13732295

Change-Id: I272bfca41fa6c71b1617aaf2269ff22ad5c5ab8a
parents acd46221 47fb18be
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -88,7 +88,7 @@ std::unique_ptr<ApkAssets> ApkAssets::LoadOverlay(const std::string& idmap_path,
  if (IsFabricatedOverlay(overlay_path)) {
    // Fabricated overlays do not contain resource definitions. All of the overlay resource values
    // are defined inline in the idmap.
    overlay_assets = EmptyAssetsProvider::Create();
    overlay_assets = EmptyAssetsProvider::Create(overlay_path);
  } else {
    // The overlay should be an APK.
    overlay_assets = ZipAssetsProvider::Create(overlay_path);
+16 −16
Original line number Diff line number Diff line
@@ -612,6 +612,11 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntry(
        result->entry = overlay_entry.GetInlineValue();
        result->dynamic_ref_table = id_map.overlay_res_maps_.GetOverlayDynamicRefTable();
        result->cookie = id_map.cookie;

        if (UNLIKELY(logging_enabled)) {
          last_resolution_.steps.push_back(
              Resolution::Step{Resolution::Step::Type::OVERLAID_INLINE, String8(), result->cookie});
        }
        continue;
      }

@@ -640,7 +645,6 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntry(
      if (UNLIKELY(logging_enabled)) {
        last_resolution_.steps.push_back(
            Resolution::Step{Resolution::Step::Type::OVERLAID, overlay_result->config.toString(),
                             overlay_result->package_name,
                             overlay_result->cookie});
      }
    }
@@ -723,7 +727,6 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntryInternal(
        if (UNLIKELY(logging_enabled)) {
          resolution_steps.push_back(Resolution::Step{Resolution::Step::Type::SKIPPED,
                                                      this_config.toString(),
                                                      &loaded_package->GetPackageName(),
                                                      cookie});
        }
        continue;
@@ -741,7 +744,6 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntryInternal(
        if (UNLIKELY(logging_enabled)) {
          resolution_steps.push_back(Resolution::Step{Resolution::Step::Type::NO_ENTRY,
                                                      this_config.toString(),
                                                      &loaded_package->GetPackageName(),
                                                      cookie});
        }
        continue;
@@ -756,7 +758,6 @@ base::expected<FindEntryResult, NullOrIOError> AssetManager2::FindEntryInternal(
      if (UNLIKELY(logging_enabled)) {
        last_resolution_.steps.push_back(Resolution::Step{resolution_type,
                                                          this_config.toString(),
                                                          &loaded_package->GetPackageName(),
                                                          cookie});
      }

@@ -839,16 +840,16 @@ std::string AssetManager2::GetLastResourceResolution() const {
  }

  std::stringstream log_stream;
  log_stream << base::StringPrintf("Resolution for 0x%08x ", resid)
            << resource_name_string
            << "\n\tFor config -"
            << configuration_.toString();
  log_stream << base::StringPrintf("Resolution for 0x%08x %s\n"
                                   "\tFor config - %s", resid, resource_name_string.c_str(),
                                   configuration_.toString().c_str());

  for (const Resolution::Step& step : last_resolution_.steps) {
    const static std::unordered_map<Resolution::Step::Type, const char*> kStepStrings = {
        {Resolution::Step::Type::INITIAL,         "Found initial"},
        {Resolution::Step::Type::BETTER_MATCH,    "Found better"},
        {Resolution::Step::Type::OVERLAID,        "Overlaid"},
        {Resolution::Step::Type::OVERLAID_INLINE, "Overlaid inline"},
        {Resolution::Step::Type::SKIPPED,         "Skipped"},
        {Resolution::Step::Type::NO_ENTRY,        "No entry"}
    };
@@ -858,8 +859,7 @@ std::string AssetManager2::GetLastResourceResolution() const {
      continue;
    }

    log_stream << "\n\t" << prefix->second << ": " << *step.package_name << " ("
               << apk_assets_[step.cookie]->GetDebugName() << ")";
    log_stream << "\n\t" << prefix->second << ": " << apk_assets_[step.cookie]->GetDebugName();
    if (!step.config_name.isEmpty()) {
      log_stream << " - " << step.config_name;
    }
+14 −1
Original line number Diff line number Diff line
@@ -386,8 +386,15 @@ bool MultiAssetsProvider::IsUpToDate() const {
  return primary_->IsUpToDate() && secondary_->IsUpToDate();
}

EmptyAssetsProvider::EmptyAssetsProvider(std::optional<std::string>&& path) :
    path_(std::move(path)) {}

std::unique_ptr<AssetsProvider> EmptyAssetsProvider::Create() {
  return std::make_unique<EmptyAssetsProvider>();
  return std::unique_ptr<EmptyAssetsProvider>(new EmptyAssetsProvider({}));
}

std::unique_ptr<AssetsProvider> EmptyAssetsProvider::Create(const std::string& path) {
  return std::unique_ptr<EmptyAssetsProvider>(new EmptyAssetsProvider(path));
}

std::unique_ptr<Asset> EmptyAssetsProvider::OpenInternal(const std::string& /* path */,
@@ -406,10 +413,16 @@ bool EmptyAssetsProvider::ForEachFile(
}

std::optional<std::string_view> EmptyAssetsProvider::GetPath() const {
  if (path_.has_value()) {
    return *path_;
  }
  return {};
}

const std::string& EmptyAssetsProvider::GetDebugName() const {
  if (path_.has_value()) {
    return *path_;
  }
  const static std::string kEmpty = kEmptyDebugString;
  return kEmpty;
}
+1 −4
Original line number Diff line number Diff line
@@ -458,6 +458,7 @@ class AssetManager2 {
        INITIAL,
        BETTER_MATCH,
        OVERLAID,
        OVERLAID_INLINE,
        SKIPPED,
        NO_ENTRY,
      };
@@ -468,10 +469,6 @@ class AssetManager2 {
      // Built name of configuration for this step.
      String8 config_name;

      // Marks the package name of the better resource found in this step.
      const std::string* package_name;

      //
      ApkAssetsCookie cookie = kInvalidCookie;
    };

+5 −0
Original line number Diff line number Diff line
@@ -176,6 +176,7 @@ struct MultiAssetsProvider : public AssetsProvider {
// Does not provide any assets.
struct EmptyAssetsProvider : public AssetsProvider {
  static std::unique_ptr<AssetsProvider> Create();
  static std::unique_ptr<AssetsProvider> Create(const std::string& path);

  bool ForEachFile(const std::string& path,
                  const std::function<void(const StringPiece&, FileType)>& f) const override;
@@ -188,6 +189,10 @@ struct EmptyAssetsProvider : public AssetsProvider {
 protected:
  std::unique_ptr<Asset> OpenInternal(const std::string& path, Asset::AccessMode mode,
                                      bool* file_exists) const override;

 private:
  explicit EmptyAssetsProvider(std::optional<std::string>&& path);
  std::optional<std::string> path_;
};

}  // namespace android
Loading