Fix aapt2 --min-sdk-version after finalized SDK

aapt2 --min-sdk-version was using AppsDefaultVersionName(), which
is OMR1 for a non-finalized SDK, but 8.1.0 after finalization.
Add PlatformSdkCodename() for non-finalized SDKs, use it for
DefaultAppTargetSdk(), and pass it for aapt2 --min-sdk-version.

Bug: 78224641
Test: TestAppSdkVersion in app_test.go
Change-Id: I622eaf92f8a940f79007c2a579536da325700b06
Merged-In: I622eaf92f8a940f79007c2a579536da325700b06
(cherry picked from commit d09b0b653b615c322266fa2a41ecf0f0066bc93d)
diff --git a/java/app_test.go b/java/app_test.go
index ba017a1..2e53130 100644
--- a/java/app_test.go
+++ b/java/app_test.go
@@ -16,8 +16,10 @@
 
 import (
 	"android/soong/android"
+	"fmt"
 	"reflect"
 	"sort"
+	"strings"
 	"testing"
 )
 
@@ -237,3 +239,94 @@
 		})
 	}
 }
+
+func TestAppSdkVersion(t *testing.T) {
+	testCases := []struct {
+		name                  string
+		sdkVersion            string
+		platformSdkInt        int
+		platformSdkCodename   string
+		platformSdkFinal      bool
+		expectedMinSdkVersion string
+	}{
+		{
+			name:                  "current final SDK",
+			sdkVersion:            "current",
+			platformSdkInt:        27,
+			platformSdkCodename:   "REL",
+			platformSdkFinal:      true,
+			expectedMinSdkVersion: "27",
+		},
+		{
+			name:                  "current non-final SDK",
+			sdkVersion:            "current",
+			platformSdkInt:        27,
+			platformSdkCodename:   "OMR1",
+			platformSdkFinal:      false,
+			expectedMinSdkVersion: "OMR1",
+		},
+		{
+			name:                  "default final SDK",
+			sdkVersion:            "",
+			platformSdkInt:        27,
+			platformSdkCodename:   "REL",
+			platformSdkFinal:      true,
+			expectedMinSdkVersion: "27",
+		},
+		{
+			name:                  "default non-final SDK",
+			sdkVersion:            "",
+			platformSdkInt:        27,
+			platformSdkCodename:   "OMR1",
+			platformSdkFinal:      false,
+			expectedMinSdkVersion: "OMR1",
+		},
+		{
+			name:                  "14",
+			sdkVersion:            "14",
+			expectedMinSdkVersion: "14",
+		},
+	}
+
+	for _, test := range testCases {
+		t.Run(test.name, func(t *testing.T) {
+			bp := fmt.Sprintf(`android_app {
+					name: "foo",
+					srcs: ["a.java"],
+					sdk_version: "%s",
+				}`, test.sdkVersion)
+
+			config := testConfig(nil)
+			config.TestProductVariables.Platform_sdk_version = &test.platformSdkInt
+			config.TestProductVariables.Platform_sdk_codename = &test.platformSdkCodename
+			config.TestProductVariables.Platform_sdk_final = &test.platformSdkFinal
+
+			ctx := testAppContext(config, bp, nil)
+
+			run(t, ctx, config)
+
+			foo := ctx.ModuleForTests("foo", "android_common")
+			link := foo.Output("package-res.apk")
+			linkFlags := strings.Split(link.Args["flags"], " ")
+			min := android.IndexList("--min-sdk-version", linkFlags)
+			target := android.IndexList("--target-sdk-version", linkFlags)
+
+			if min == -1 || target == -1 || min == len(linkFlags)-1 || target == len(linkFlags)-1 {
+				t.Fatalf("missing --min-sdk-version or --target-sdk-version in link flags: %q", linkFlags)
+			}
+
+			gotMinSdkVersion := linkFlags[min+1]
+			gotTargetSdkVersion := linkFlags[target+1]
+
+			if gotMinSdkVersion != test.expectedMinSdkVersion {
+				t.Errorf("incorrect --min-sdk-version, expected %q got %q",
+					test.expectedMinSdkVersion, gotMinSdkVersion)
+			}
+
+			if gotTargetSdkVersion != test.expectedMinSdkVersion {
+				t.Errorf("incorrect --target-sdk-version, expected %q got %q",
+					test.expectedMinSdkVersion, gotTargetSdkVersion)
+			}
+		})
+	}
+}