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

Commit deb46f31 authored by Jeremy Meyer's avatar Jeremy Meyer
Browse files

Handle 9patches being used for frros

This adds an api that allows creation of nine patch frros.
We process them the same as aapt2 does so that
when they are used at runtime they work correctly.

API-Coverage-Bug: 314168567
Test: manual and automatic
Bug: 296324826
Change-Id: I40da020189e9ec914fbea0c17f181209347d83de
parent 87f82bb9
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -86,6 +86,7 @@ cc_library {
            static_libs: [
                "libidmap2_policies",
                "libidmap2_protos",
                "libpng",
            ],
            shared_libs: [
                "libandroidfw",
@@ -107,6 +108,7 @@ cc_library {
                "libcutils",
                "libidmap2_policies",
                "libidmap2_protos",
                "libpng",
                "libprotobuf-cpp-lite",
                "libutils",
                "libz",
@@ -185,6 +187,7 @@ cc_test {
    static_libs: [
        "libgmock",
        "libidmap2_protos",
        "libpng",
    ],
    target: {
        android: {
@@ -258,6 +261,7 @@ cc_binary {
                "libbase",
                "libcutils",
                "libidmap2",
                "libpng",
                "libprotobuf-cpp-lite",
                "libutils",
                "libz",
@@ -275,6 +279,7 @@ cc_binary {
                "libidmap2",
                "libidmap2_policies",
                "liblog",
                "libpng",
                "libprotobuf-cpp-lite",
                "libutils",
                "libziparchive",
+2 −1
Original line number Diff line number Diff line
@@ -266,7 +266,8 @@ Status Idmap2Service::createFabricatedOverlay(
    } else if (res.binaryData.has_value()) {
      builder.SetResourceValue(res.resourceName, res.binaryData->get(),
                               res.binaryDataOffset, res.binaryDataSize,
                               res.configuration.value_or(std::string()));
                               res.configuration.value_or(std::string()),
                               res.isNinePatch);
    } else {
      builder.SetResourceValue(res.resourceName, res.dataType, res.data,
            res.configuration.value_or(std::string()));
+1 −0
Original line number Diff line number Diff line
@@ -28,4 +28,5 @@ parcelable FabricatedOverlayInternalEntry {
    @nullable @utf8InCpp String configuration;
    long binaryDataOffset;
    long binaryDataSize;
    boolean isNinePatch;
}
 No newline at end of file
+6 −2
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@

#include <libidmap2/proto/fabricated_v1.pb.h>

#include "androidfw/Streams.h"

#include <istream>
#include <map>
#include <memory>
@@ -51,7 +53,8 @@ struct FabricatedOverlay {
                              std::optional<android::base::borrowed_fd>&& binary_value,
                              off64_t data_binary_offset,
                              size_t data_binary_size,
                              const std::string& configuration);
                              const std::string& configuration,
                              bool nine_patch);

    inline Builder& setFrroPath(std::string frro_path) {
      frro_path_ = std::move(frro_path);
@@ -70,6 +73,7 @@ struct FabricatedOverlay {
      off64_t data_binary_offset;
      size_t data_binary_size;
      std::string configuration;
      bool nine_patch;
    };

    std::string package_name_;
@@ -81,7 +85,7 @@ struct FabricatedOverlay {
  };

  struct BinaryData {
    android::base::borrowed_fd file_descriptor;
    std::unique_ptr<android::InputStream> input_stream;
    off64_t offset;
    size_t size;
  };
+1 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ struct TargetValue {
  std::optional<android::base::borrowed_fd> data_binary_value;
  off64_t data_binary_offset;
  size_t data_binary_size;
  bool nine_patch;
};

struct TargetValueWithConfig {
Loading