Merge "Add LOCAL_UNINSTALLABLE_MODULE: true to test_package AndroidMkEntries" into main
diff --git a/android/Android.bp b/android/Android.bp
index 4b75148..00dc50a 100644
--- a/android/Android.bp
+++ b/android/Android.bp
@@ -171,7 +171,3 @@
     // Used by plugins
     visibility: ["//visibility:public"],
 }
-
-otatools_package_filegroup {
-    name: "otatools_package_filegroup",
-}
diff --git a/android/filegroup.go b/android/filegroup.go
index 9bcfd0a..4fad52a 100644
--- a/android/filegroup.go
+++ b/android/filegroup.go
@@ -33,7 +33,6 @@
 func RegisterFilegroupBuildComponents(ctx RegistrationContext) {
 	ctx.RegisterModuleType("filegroup", FileGroupFactory)
 	ctx.RegisterModuleType("filegroup_defaults", FileGroupDefaultsFactory)
-	ctx.RegisterModuleType("otatools_package_filegroup", OtatoolsFileGroupFactory)
 }
 
 type fileGroupProperties struct {
@@ -164,54 +163,3 @@
 		}
 	}
 }
-
-type OtatoolsFileGroup struct {
-	ModuleBase
-}
-
-func OtatoolsFileGroupFactory() Module {
-	module := &OtatoolsFileGroup{}
-	InitAndroidModule(module)
-	AddLoadHook(module, func(ctx LoadHookContext) {
-		module.createOTAToolsPackagefilegroup(ctx)
-	})
-	return module
-}
-
-func (fg *OtatoolsFileGroup) GenerateAndroidBuildActions(ctx ModuleContext) {
-}
-
-// Create the filegroup to collect cert files for otatools.zip.
-func (fg *OtatoolsFileGroup) createOTAToolsPackagefilegroup(ctx LoadHookContext) {
-	ctx.CreateModuleInDirectory(
-		FileGroupFactory,
-		".",
-		&struct {
-			Name       *string
-			Srcs       []string
-			Visibility []string
-		}{
-			Name: proptools.StringPtr("soong_generated_otatools_package_filegroup"),
-			Srcs: []string{
-				"build/make/target/product/security/**/*.x509.pem",
-				"build/make/target/product/security/**/*.pk8",
-				"device/**/*.pk8",
-				"device/**/verifiedboot*",
-				"device/**/*.pem",
-				"device/**/oem*.prop",
-				"device/**/*.avbpubkey",
-				"external/avb/test/data/**/testkey_*.pem",
-				"external/avb/test/data/**/atx_metadata.bin",
-				"packages/modules/**/*.x509.pem",
-				"packages/modules/**/*.pk8",
-				"packages/modules/**/*.key.pem",
-				"vendor/**/*.pk8",
-				"vendor/**/verifiedboot*",
-				"vendor/**/*.pem",
-				"vendor/**/oem*.prop",
-				"vendor/**/*.avbpubkey",
-			},
-			Visibility: []string{"//build/make/tools/otatools_package"},
-		},
-	)
-}
diff --git a/filesystem/bootimg.go b/filesystem/bootimg.go
index 7959365..a1c4bce 100644
--- a/filesystem/bootimg.go
+++ b/filesystem/bootimg.go
@@ -510,6 +510,25 @@
 	return propFile, deps
 }
 
+func (b *bootimg) getAvbHashFooterArgs(ctx android.ModuleContext) string {
+	ret := ""
+	if !b.bootImageType.isVendorBoot() {
+		ret += "--prop " + fmt.Sprintf("com.android.build.%s.os_version:%s", b.bootImageType.String(), ctx.Config().PlatformVersionLastStable())
+	}
+
+	fingerprintFile := ctx.Config().BuildFingerprintFile(ctx)
+	ret += " --prop " + fmt.Sprintf("com.android.build.%s.fingerprint:{CONTENTS_OF:%s}", b.bootImageType.String(), fingerprintFile.String())
+
+	if b.properties.Security_patch != nil {
+		ret += " --prop " + fmt.Sprintf("com.android.build.%s.security_patch:%s", b.bootImageType.String(), *b.properties.Security_patch)
+	}
+
+	if b.properties.Avb_rollback_index != nil {
+		ret += " --rollback_index " + strconv.FormatInt(*b.properties.Avb_rollback_index, 10)
+	}
+	return strings.TrimSpace(ret)
+}
+
 func (b *bootimg) buildPropFileForMiscInfo(ctx android.ModuleContext) android.Path {
 	var sb strings.Builder
 	addStr := func(name string, value string) {
@@ -517,15 +536,28 @@
 	}
 
 	bootImgType := proptools.String(b.properties.Boot_image_type)
-	addStr("avb_"+bootImgType+"_add_hash_footer_args", "TODO(b/398036609)")
+	addStr("avb_"+bootImgType+"_add_hash_footer_args", b.getAvbHashFooterArgs(ctx))
 	if b.properties.Avb_private_key != nil {
 		addStr("avb_"+bootImgType+"_algorithm", proptools.StringDefault(b.properties.Avb_algorithm, "SHA256_RSA4096"))
 		addStr("avb_"+bootImgType+"_key_path", android.PathForModuleSrc(ctx, proptools.String(b.properties.Avb_private_key)).String())
 		addStr("avb_"+bootImgType+"_rollback_index_location", strconv.Itoa(proptools.Int(b.properties.Avb_rollback_index_location)))
 	}
+	if b.properties.Partition_size != nil {
+		addStr(bootImgType+"_size", strconv.FormatInt(*b.properties.Partition_size, 10))
+	}
+	if bootImgType != "boot" {
+		addStr(bootImgType, "true")
+	}
 
-	propFile := android.PathForModuleOut(ctx, "prop_for_misc_info")
-	android.WriteFileRuleVerbatim(ctx, propFile, sb.String())
+	propFilePreProcessing := android.PathForModuleOut(ctx, "prop_for_misc_info_pre_processing")
+	android.WriteFileRuleVerbatim(ctx, propFilePreProcessing, sb.String())
+	propFile := android.PathForModuleOut(ctx, "prop_file_for_misc_info")
+	ctx.Build(pctx, android.BuildParams{
+		Rule:   textFileProcessorRule,
+		Input:  propFilePreProcessing,
+		Output: propFile,
+	})
+
 	return propFile
 }