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

Commit eb759ec5 authored by ESWAR MAGATAPALLI (xWF)'s avatar ESWAR MAGATAPALLI (xWF)
Browse files

Revert "[res] Don't create extra asset provider when not needed"

Revert submission 31021037

Reason for revert: Droidmonitor created revert due to b/388342212. Will be verifying through ABTD before submission.

Reverted changes: /q/submissionid:31021037

Change-Id: Ic1964e2db736cfa3db3835a52c00cc81acda0bde
parent 7c92db08
Loading
Loading
Loading
Loading
+25 −31
Original line number Diff line number Diff line
@@ -111,8 +111,9 @@ static void DeleteGuardedApkAssets(Guarded<AssetManager2::ApkAssetsPtr>& apk_ass
class LoaderAssetsProvider : public AssetsProvider {
 public:
  static std::unique_ptr<AssetsProvider> Create(JNIEnv* env, jobject assets_provider) {
      return std::unique_ptr<AssetsProvider>{
              assets_provider ? new LoaderAssetsProvider(env, assets_provider) : nullptr};
    return (!assets_provider) ? EmptyAssetsProvider::Create()
                              : std::unique_ptr<AssetsProvider>(new LoaderAssetsProvider(
                                    env, assets_provider));
  }

  bool ForEachFile(const std::string& /* root_path */,
@@ -211,7 +212,7 @@ class LoaderAssetsProvider : public AssetsProvider {
    auto string_result = static_cast<jstring>(env->CallObjectMethod(
        assets_provider_, gAssetsProviderOffsets.toString));
    ScopedUtfChars str(env, string_result);
    debug_name_ = std::string(str.c_str());
    debug_name_ = std::string(str.c_str(), str.size());
  }

  // The global reference to the AssetsProvider
@@ -243,7 +244,7 @@ static jlong NativeLoad(JNIEnv* env, jclass /*clazz*/, const format_type_t forma
      break;
    case FORMAT_ARSC:
      apk_assets = ApkAssets::LoadTable(AssetsProvider::CreateAssetFromFile(path.c_str()),
                                          MultiAssetsProvider::Create(std::move(loader_assets)),
                                        std::move(loader_assets),
                                        property_flags);
      break;
    case FORMAT_DIRECTORY: {
@@ -315,10 +316,9 @@ static jlong NativeLoadFromFd(JNIEnv* env, jclass /*clazz*/, const format_type_t
        break;
    }
    case FORMAT_ARSC:
        apk_assets = ApkAssets::LoadTable(AssetsProvider::CreateAssetFromFd(std::move(dup_fd),
                                                                            nullptr /* path */),
                                          MultiAssetsProvider::Create(std::move(loader_assets)),
                                          property_flags);
      apk_assets = ApkAssets::LoadTable(
          AssetsProvider::CreateAssetFromFd(std::move(dup_fd), nullptr /* path */),
          std::move(loader_assets), property_flags);
      break;
    default:
      const std::string error_msg = base::StringPrintf("Unsupported format type %d", format);
@@ -386,14 +386,11 @@ static jlong NativeLoadFromFdOffset(JNIEnv* env, jclass /*clazz*/, const format_
        break;
    }
    case FORMAT_ARSC:
        apk_assets =
                ApkAssets::LoadTable(AssetsProvider::CreateAssetFromFd(std::move(dup_fd),
                                                                       nullptr /* path */,
      apk_assets = ApkAssets::LoadTable(
          AssetsProvider::CreateAssetFromFd(std::move(dup_fd), nullptr /* path */,
                                            static_cast<off64_t>(offset),
                                                                       static_cast<off64_t>(
                                                                               length)),
                                     MultiAssetsProvider::Create(std::move(loader_assets)),
                                     property_flags);
                                            static_cast<off64_t>(length)),
          std::move(loader_assets), property_flags);
      break;
    default:
      const std::string error_msg = base::StringPrintf("Unsupported format type %d", format);
@@ -411,13 +408,10 @@ static jlong NativeLoadFromFdOffset(JNIEnv* env, jclass /*clazz*/, const format_
}

static jlong NativeLoadEmpty(JNIEnv* env, jclass /*clazz*/, jint flags, jobject assets_provider) {
    auto apk_assets = ApkAssets::Load(MultiAssetsProvider::Create(
                                              LoaderAssetsProvider::Create(env, assets_provider)),
                                      flags);
  auto apk_assets = ApkAssets::Load(LoaderAssetsProvider::Create(env, assets_provider), flags);
  if (apk_assets == nullptr) {
    const std::string error_msg =
                base::StringPrintf("Failed to load empty assets with provider %p",
                                   (void*)assets_provider);
        base::StringPrintf("Failed to load empty assets with provider %p", (void*)assets_provider);
    jniThrowException(env, "java/io/IOException", error_msg.c_str());
    return 0;
  }
+6 −11
Original line number Diff line number Diff line
@@ -24,8 +24,9 @@
#include <ziparchive/zip_archive.h>

namespace android {

static constexpr std::string_view kEmptyDebugString = "<empty>";
namespace {
constexpr const char* kEmptyDebugString = "<empty>";
} // namespace

std::unique_ptr<Asset> AssetsProvider::Open(const std::string& path, Asset::AccessMode mode,
                                            bool* file_exists) const {
@@ -355,14 +356,8 @@ MultiAssetsProvider::MultiAssetsProvider(std::unique_ptr<AssetsProvider>&& prima

std::unique_ptr<AssetsProvider> MultiAssetsProvider::Create(
    std::unique_ptr<AssetsProvider>&& primary, std::unique_ptr<AssetsProvider>&& secondary) {
  if (primary == nullptr && secondary == nullptr) {
    return EmptyAssetsProvider::Create();
  }
  if (!primary) {
    return secondary;
  }
  if (!secondary) {
    return primary;
  if (primary == nullptr || secondary == nullptr) {
    return nullptr;
  }
  return std::unique_ptr<MultiAssetsProvider>(new MultiAssetsProvider(std::move(primary),
                                                                      std::move(secondary)));
@@ -430,7 +425,7 @@ const std::string& EmptyAssetsProvider::GetDebugName() const {
  if (path_.has_value()) {
    return *path_;
  }
  constexpr static std::string kEmpty{kEmptyDebugString};
  const static std::string kEmpty = kEmptyDebugString;
  return kEmpty;
}

+1 −1
Original line number Diff line number Diff line
@@ -164,7 +164,7 @@ struct DirectoryAssetsProvider : public AssetsProvider {
// `secondary` asset provider if the asset cannot be found in the `primary`.
struct MultiAssetsProvider : public AssetsProvider {
  static std::unique_ptr<AssetsProvider> Create(std::unique_ptr<AssetsProvider>&& primary,
                                                std::unique_ptr<AssetsProvider>&& secondary = {});
                                                std::unique_ptr<AssetsProvider>&& secondary);

  bool ForEachFile(const std::string& root_path,
                   base::function_ref<void(StringPiece, FileType)> f) const override;