Add updatable_media_stubs to prevent private API use.

Also resolve dependency cycle between framework and updatable-media.

Bug: 123551910, Bug: 123253805
Test: build
Change-Id: I220bc32319b53d77a14b7e9a36ab0faca0003d66
diff --git a/Android.bp b/Android.bp
index c6cf75d..a467a04 100644
--- a/Android.bp
+++ b/Android.bp
@@ -735,6 +735,7 @@
     no_framework_libs: true,
     libs: [
         "ext",
+        "updatable_media_stubs",
     ],
 
     jarjar_rules: "jarjar_rules_hidl.txt",
@@ -1296,7 +1297,7 @@
         ":non_openjdk_javadoc_files",
         ":android_icu4j_src_files_for_docs",
         ":conscrypt_public_api_files",
-        ":media-srcs-without-aidls",
+        ":updatable-media-srcs-without-aidls",
         "test-mock/src/**/*.java",
         "test-runner/src/**/*.java",
     ],
@@ -1358,7 +1359,7 @@
         ":non_openjdk_javadoc_files",
         ":android_icu4j_src_files_for_docs",
         ":conscrypt_public_api_files",
-        ":media-srcs-without-aidls",
+        ":updatable-media-srcs-without-aidls",
     ],
     srcs_lib: "framework",
     srcs_lib_whitelist_dirs: frameworks_base_subdirs,
diff --git a/media/Android.bp b/media/Android.bp
index c7d5ace..1c9a7f0 100644
--- a/media/Android.bp
+++ b/media/Android.bp
@@ -2,8 +2,7 @@
     name: "updatable-media",
 
     srcs: [
-        ":mediaplayer2-srcs",
-        ":mediasession2-srcs",
+        ":updatable-media-srcs",
         ":framework-media-annotation-srcs",
     ],
 
@@ -12,8 +11,12 @@
             "apex/java",
         ],
 
+        // It would be great if we don't need to add include_dirs for public
+        // parcelable classes. Find a better way.
         include_dirs: [
-            // For the usage of android.os.Bundle and android.os.ResultReceiver in aidl files
+            // To refer:
+            // android.os.Bundle
+            // android.os.ResultReceiver
             "frameworks/base/core/java",
         ],
     },
@@ -29,7 +32,15 @@
 }
 
 filegroup {
-    name: "media-srcs-without-aidls",
+    name: "updatable-media-srcs",
+    srcs: [
+        ":mediasession2-srcs",
+        ":mediaplayer2-srcs",
+    ],
+}
+
+filegroup {
+    name: "updatable-media-srcs-without-aidls",
     srcs : [
         ":mediasession2-srcs-without-aidls",
         ":mediaplayer2-srcs",
@@ -84,3 +95,32 @@
         "apex/java/android/media/BufferingParams.java",
     ],
 }
+
+metalava_updatable_media_args = " --error UnhiddenSystemApi " +
+    "--hide RequiresPermission " +
+    "--hide MissingPermission --hide BroadcastBehavior " +
+    "--hide HiddenSuperclass --hide DeprecationMismatch --hide UnavailableSymbol " +
+    "--hide SdkConstant --hide HiddenTypeParameter --hide Todo --hide Typo " +
+    "--hide HiddenTypedefConstant "
+
+droidstubs {
+    name: "updatable-media-stubs",
+    srcs: [
+        ":updatable-media-srcs-without-aidls",
+        ":framework-media-annotation-srcs",
+    ],
+    args: metalava_updatable_media_args + " --show-annotation android.annotation.SystemApi " +
+        " --show-annotation android.annotation.TestApi ",
+    // Ideally, sdk_version here should be "current_system", but "current - 1" is used
+    // to avoid dependency cycle with framework.
+    sdk_version: "28",
+}
+
+java_library {
+    name: "updatable_media_stubs",
+    srcs: [":updatable-media-stubs"],
+    // Ideally, sdk_version here should be "current_system", but "current - 1" is used
+    // to avoid dependency cycle with framework.
+    sdk_version: "28",
+}
+