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

Commit 47fb18be authored by Ryan Mitchell's avatar Ryan Mitchell Committed by Android (Google) Code Review
Browse files

Merge "Set ApkAssets path for fabricated rros" into sc-dev

parents 186d52af bdc0ae12
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