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

Commit 4fe675d7 authored by Android Build Coastguard Worker's avatar Android Build Coastguard Worker
Browse files

Snap for 12742097 from ced3c7ab to 25Q1-release

Change-Id: I7dee3f692181943d87752789154236c8b86e15a5
parents 86d7d9e8 ced3c7ab
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -95,6 +95,7 @@ aconfig_declarations_group {
        "com.android.internal.foldables.flags-aconfig-java",
        "com.android.internal.os.flags-aconfig-java",
        "com.android.internal.pm.pkg.component.flags-aconfig-java",
        "com.android.internal.widget.flags-aconfig-java",
        "com.android.media.flags.bettertogether-aconfig-java",
        "com.android.media.flags.editing-aconfig-java",
        "com.android.media.flags.performance-aconfig-java",
@@ -279,6 +280,19 @@ java_aconfig_library {
    defaults: ["framework-minus-apex-aconfig-java-defaults"],
}

aconfig_declarations {
    name: "com.android.internal.widget.flags-aconfig",
    package: "com.android.internal.widget.flags",
    container: "system",
    srcs: ["core/java/com/android/internal/widget/*.aconfig"],
}

java_aconfig_library {
    name: "com.android.internal.widget.flags-aconfig-java",
    aconfig_declarations: "com.android.internal.widget.flags-aconfig",
    defaults: ["framework-minus-apex-aconfig-java-defaults"],
}

// Text
aconfig_declarations {
    name: "com.android.text.flags-aconfig",
+1 −0
Original line number Diff line number Diff line
@@ -165,6 +165,7 @@ cc_test {
    ],
    host_supported: true,
    test_suites: ["general-tests"],
    require_root: true,
    srcs: [
        "tests/BinaryStreamVisitorTests.cpp",
        "tests/CommandLineOptionsTests.cpp",
+19 −5
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <utility>
#include <vector>

#include "android-base/scopeguard.h"
#include "androidfw/ApkAssets.h"
#include "androidfw/AssetManager.h"
#include "androidfw/Util.h"
@@ -269,27 +270,40 @@ struct ResState {
  std::unique_ptr<AssetManager2> am;
  ZipAssetsProvider* zip_assets;

  static Result<ResState> Initialize(std::unique_ptr<ZipAssetsProvider> zip,
  static Result<ResState> Initialize(std::unique_ptr<ZipAssetsProvider>&& zip,
                                     package_property_t flags) {
    ResState state;
    state.zip_assets = zip.get();
    if ((state.apk_assets = ApkAssets::Load(std::move(zip), flags)) == nullptr) {
      return Error("failed to load apk asset");
      return Error("failed to load apk asset for '%s'",
                   state.zip_assets->GetDebugName().c_str());
    }

    // Make sure we put ZipAssetsProvider where we took it if initialization fails, so the
    // original object stays valid for any next call it may get.
    auto scoped_restore_zip_assets = android::base::ScopeGuard([&zip, &state]() {
      zip = std::unique_ptr<ZipAssetsProvider>(
          static_cast<ZipAssetsProvider*>(
              std::move(const_cast<ApkAssets&>(*state.apk_assets)).TakeAssetsProvider().release()));
    });

    if ((state.arsc = state.apk_assets->GetLoadedArsc()) == nullptr) {
      return Error("failed to retrieve loaded arsc");
      return Error("failed to retrieve loaded arsc for '%s'",
                   state.zip_assets->GetDebugName().c_str());
    }

    if ((state.package = GetPackageAtIndex0(state.arsc)) == nullptr) {
      return Error("failed to retrieve loaded package at index 0");
      return Error("failed to retrieve loaded package at index 0 for '%s'",
                   state.zip_assets->GetDebugName().c_str());
    }

    state.am = std::make_unique<AssetManager2>();
    if (!state.am->SetApkAssets({state.apk_assets}, false)) {
      return Error("failed to create asset manager");
      return Error("failed to create asset manager for '%s'",
                   state.zip_assets->GetDebugName().c_str());
    }

    scoped_restore_zip_assets.Disable();
    return state;
  }
};
+14 −0
Original line number Diff line number Diff line
@@ -214,6 +214,20 @@ TEST(IdmapTests, CreateIdmapHeaderFromApkAssets) {
  ASSERT_EQ(idmap->GetHeader()->GetOverlayName(), TestConstants::OVERLAY_NAME_ALL_POLICIES);
}

TEST(IdmapTests, TargetContainerWorksAfterError) {
  auto target = TargetResourceContainer::FromPath(GetTestDataPath() + "/target/target-bad.apk");
  ASSERT_TRUE(target);

  auto crc = target->get()->GetCrc();
  ASSERT_TRUE(crc);

  // This call tries to construct the full ApkAssets state, and fails.
  ASSERT_FALSE(target->get()->DefinesOverlayable());
  auto crc2 = target->get()->GetCrc();
  ASSERT_TRUE(crc2);
  EXPECT_EQ(*crc, *crc2);
}

TEST(IdmapTests, CreateIdmapDataFromApkAssets) {
  std::string target_apk_path = GetTestDataPath() + "/target/target.apk";
  std::string overlay_apk_path = GetTestDataPath() + "/overlay/overlay.apk";
+821 B

File added.

No diff preview for this file type.

Loading