Introduce framework-minus-apex and create jobscheduler-framework.jar

Bug: 137763703
Test: Clean local build + "flash -w" and boot
Test: Presubmit
Test: atest CtsJobSchedulerTestCases
Test: ./cts/tests/signature/runSignatureTests.sh
Change-Id: Ie2a5a7a17f903ac18de0bcdde5be25311a62fa01
diff --git a/Android.bp b/Android.bp
index 4ef6c5e..1023b48 100644
--- a/Android.bp
+++ b/Android.bp
@@ -26,7 +26,35 @@
 // READ ME: ########################################################
 
 java_defaults {
+    name: "framework-aidl-export-defaults",
+
+    aidl: {
+        export_include_dirs: [
+            // From build/make/core/pathmap.mk FRAMEWORK_BASE_SUBDIRS
+            "core/java",
+            "graphics/java",
+            "location/java",
+            "lowpan/java",
+            "media/java",
+            "media/apex/java",
+            "media/mca/effect/java",
+            "media/mca/filterfw/java",
+            "media/mca/filterpacks/java",
+            "drm/java",
+            "opengl/java",
+            "sax/java",
+            "telecomm/java",
+            "telephony/java",
+            "wifi/java",
+            "keystore/java",
+            "rs/java",
+        ],
+    },
+}
+
+java_defaults {
     name: "framework-defaults",
+    defaults: ["framework-aidl-export-defaults"],
     installable: true,
 
     srcs: [
@@ -78,9 +106,6 @@
         "core/java/android/app/ISearchManagerCallback.aidl",
         "core/java/android/app/IServiceConnection.aidl",
         "core/java/android/app/IStopUserCallback.aidl",
-        "core/java/android/app/job/IJobCallback.aidl",
-        "core/java/android/app/job/IJobScheduler.aidl",
-        "core/java/android/app/job/IJobService.aidl",
         "core/java/android/app/ITransientNotification.aidl",
         "core/java/android/app/IUidObserver.aidl",
         "core/java/android/app/IUiAutomationConnection.aidl",
@@ -702,27 +727,6 @@
     ],
 
     aidl: {
-        export_include_dirs: [
-            // From build/make/core/pathmap.mk FRAMEWORK_BASE_SUBDIRS
-            "core/java",
-            "graphics/java",
-            "location/java",
-            "lowpan/java",
-            "media/java",
-            "media/apex/java",
-            "media/mca/effect/java",
-            "media/mca/filterfw/java",
-            "media/mca/filterpacks/java",
-            "drm/java",
-            "opengl/java",
-            "sax/java",
-            "telecomm/java",
-            "telephony/java",
-            "wifi/java",
-            "keystore/java",
-            "rs/java",
-        ],
-
         include_dirs: [
             "system/update_engine/binder_bindings",
             "frameworks/native/aidl/binder",
@@ -838,7 +842,7 @@
 }
 
 java_library {
-    name: "framework",
+    name: "framework-minus-apex",
     defaults: ["framework-defaults"],
     javac_shard_size: 150,
     required: [
@@ -848,6 +852,17 @@
 }
 
 java_library {
+    name: "framework",
+    defaults: ["framework-aidl-export-defaults"],
+    installable: true,
+    static_libs: [
+        "framework-minus-apex",
+        "jobscheduler-framework",
+    ],
+    sdk_version: "core_platform",
+}
+
+java_library {
     name: "framework-annotation-proc",
     defaults: ["framework-defaults"],
     installable: false,
@@ -1371,8 +1386,9 @@
         ":updatable-media-srcs-without-aidls",
         "test-mock/src/**/*.java",
         "test-runner/src/**/*.java",
+        ":jobscheduler-framework-source",
     ],
-    srcs_lib: "framework",
+    srcs_lib: "framework-minus-apex",
     srcs_lib_whitelist_dirs: frameworks_base_subdirs,
     srcs_lib_whitelist_pkgs: packages_to_document,
     libs: framework_docs_only_libs,
@@ -1428,8 +1444,9 @@
         ":opt-net-voip-srcs",
         ":core_public_api_files",
         ":updatable-media-srcs-without-aidls",
+        ":jobscheduler-framework-source",
     ],
-    srcs_lib: "framework",
+    srcs_lib: "framework-minus-apex",
     srcs_lib_whitelist_dirs: frameworks_base_subdirs,
     srcs_lib_whitelist_pkgs: packages_to_document,
     local_sourcepaths: frameworks_base_subdirs,
diff --git a/apex/jobscheduler/framework/Android.bp b/apex/jobscheduler/framework/Android.bp
new file mode 100644
index 0000000..bdb5248
--- /dev/null
+++ b/apex/jobscheduler/framework/Android.bp
@@ -0,0 +1,29 @@
+filegroup {
+    name: "jobscheduler-framework-source",
+    srcs: [
+        "java/**/*.java",
+        "java/android/app/job/IJobCallback.aidl",
+        "java/android/app/job/IJobScheduler.aidl",
+        "java/android/app/job/IJobService.aidl",
+    ],
+    path: "java",
+}
+
+java_library {
+    name: "jobscheduler-framework",
+    installable: true,
+    sdk_version: "core_platform",
+
+    srcs: [
+        ":jobscheduler-framework-source",
+    ],
+
+    aidl: {
+        export_include_dirs: [
+            "java",
+        ],
+    },
+    libs: [
+        "framework-minus-apex",
+    ],
+}
diff --git a/core/java/android/app/JobSchedulerImpl.java b/apex/jobscheduler/framework/java/android/app/JobSchedulerImpl.java
similarity index 95%
rename from core/java/android/app/JobSchedulerImpl.java
rename to apex/jobscheduler/framework/java/android/app/JobSchedulerImpl.java
index 924a708..f59e7a4 100644
--- a/core/java/android/app/JobSchedulerImpl.java
+++ b/apex/jobscheduler/framework/java/android/app/JobSchedulerImpl.java
@@ -14,7 +14,6 @@
  * limitations under the License.
  */
 
-// in android.app so ContextImpl has package access
 package android.app;
 
 import android.app.job.IJobScheduler;
@@ -27,10 +26,12 @@
 import java.util.List;
 
 
-// APEX NOTE: Class path referred to by robolectric, so can't move it.
-
 /**
  * Concrete implementation of the JobScheduler interface
+ *
+ * Note android.app.job is the better package to put this class, but we can't move it there
+ * because that'd break robolectric. Grr.
+ *
  * @hide 
  */
 public class JobSchedulerImpl extends JobScheduler {
diff --git a/core/java/android/app/job/IJobCallback.aidl b/apex/jobscheduler/framework/java/android/app/job/IJobCallback.aidl
similarity index 100%
rename from core/java/android/app/job/IJobCallback.aidl
rename to apex/jobscheduler/framework/java/android/app/job/IJobCallback.aidl
diff --git a/core/java/android/app/job/IJobScheduler.aidl b/apex/jobscheduler/framework/java/android/app/job/IJobScheduler.aidl
similarity index 100%
rename from core/java/android/app/job/IJobScheduler.aidl
rename to apex/jobscheduler/framework/java/android/app/job/IJobScheduler.aidl
diff --git a/core/java/android/app/job/IJobService.aidl b/apex/jobscheduler/framework/java/android/app/job/IJobService.aidl
similarity index 100%
rename from core/java/android/app/job/IJobService.aidl
rename to apex/jobscheduler/framework/java/android/app/job/IJobService.aidl
diff --git a/core/java/android/app/job/JobInfo.aidl b/apex/jobscheduler/framework/java/android/app/job/JobInfo.aidl
similarity index 100%
rename from core/java/android/app/job/JobInfo.aidl
rename to apex/jobscheduler/framework/java/android/app/job/JobInfo.aidl
diff --git a/core/java/android/app/job/JobInfo.java b/apex/jobscheduler/framework/java/android/app/job/JobInfo.java
similarity index 100%
rename from core/java/android/app/job/JobInfo.java
rename to apex/jobscheduler/framework/java/android/app/job/JobInfo.java
diff --git a/core/java/android/app/job/JobParameters.aidl b/apex/jobscheduler/framework/java/android/app/job/JobParameters.aidl
similarity index 100%
rename from core/java/android/app/job/JobParameters.aidl
rename to apex/jobscheduler/framework/java/android/app/job/JobParameters.aidl
diff --git a/core/java/android/app/job/JobParameters.java b/apex/jobscheduler/framework/java/android/app/job/JobParameters.java
similarity index 97%
rename from core/java/android/app/job/JobParameters.java
rename to apex/jobscheduler/framework/java/android/app/job/JobParameters.java
index ecc859d..150cdbc 100644
--- a/core/java/android/app/job/JobParameters.java
+++ b/apex/jobscheduler/framework/java/android/app/job/JobParameters.java
@@ -52,6 +52,11 @@
 
     /**
      * All the stop reason codes. This should be regarded as an immutable array at runtime.
+     *
+     * Note the order of these values will affect "dumpsys batterystats", and we do not want to
+     * change the order of existing fields, so adding new fields is okay but do not remove or
+     * change existing fields. When deprecating a field, just replace that with "-1" in this array.
+     *
      * @hide
      */
     public static final int[] JOB_STOP_REASON_CODES = {
diff --git a/core/java/android/app/job/JobScheduler.java b/apex/jobscheduler/framework/java/android/app/job/JobScheduler.java
similarity index 100%
rename from core/java/android/app/job/JobScheduler.java
rename to apex/jobscheduler/framework/java/android/app/job/JobScheduler.java
diff --git a/core/java/android/app/job/JobSchedulerFrameworkInitializer.java b/apex/jobscheduler/framework/java/android/app/job/JobSchedulerFrameworkInitializer.java
similarity index 100%
rename from core/java/android/app/job/JobSchedulerFrameworkInitializer.java
rename to apex/jobscheduler/framework/java/android/app/job/JobSchedulerFrameworkInitializer.java
diff --git a/core/java/android/app/job/JobService.java b/apex/jobscheduler/framework/java/android/app/job/JobService.java
similarity index 100%
rename from core/java/android/app/job/JobService.java
rename to apex/jobscheduler/framework/java/android/app/job/JobService.java
diff --git a/core/java/android/app/job/JobServiceEngine.java b/apex/jobscheduler/framework/java/android/app/job/JobServiceEngine.java
similarity index 100%
rename from core/java/android/app/job/JobServiceEngine.java
rename to apex/jobscheduler/framework/java/android/app/job/JobServiceEngine.java
diff --git a/core/java/android/app/job/JobSnapshot.aidl b/apex/jobscheduler/framework/java/android/app/job/JobSnapshot.aidl
similarity index 100%
rename from core/java/android/app/job/JobSnapshot.aidl
rename to apex/jobscheduler/framework/java/android/app/job/JobSnapshot.aidl
diff --git a/core/java/android/app/job/JobSnapshot.java b/apex/jobscheduler/framework/java/android/app/job/JobSnapshot.java
similarity index 100%
rename from core/java/android/app/job/JobSnapshot.java
rename to apex/jobscheduler/framework/java/android/app/job/JobSnapshot.java
diff --git a/core/java/android/app/job/JobWorkItem.aidl b/apex/jobscheduler/framework/java/android/app/job/JobWorkItem.aidl
similarity index 100%
rename from core/java/android/app/job/JobWorkItem.aidl
rename to apex/jobscheduler/framework/java/android/app/job/JobWorkItem.aidl
diff --git a/core/java/android/app/job/JobWorkItem.java b/apex/jobscheduler/framework/java/android/app/job/JobWorkItem.java
similarity index 100%
rename from core/java/android/app/job/JobWorkItem.java
rename to apex/jobscheduler/framework/java/android/app/job/JobWorkItem.java
diff --git a/core/java/com/android/server/job/JobSchedulerInternal.java b/apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java
similarity index 100%
rename from core/java/com/android/server/job/JobSchedulerInternal.java
rename to apex/jobscheduler/framework/java/com/android/server/job/JobSchedulerInternal.java
diff --git a/location/lib/Android.bp b/location/lib/Android.bp
index 16f1428..ab01ddb 100644
--- a/location/lib/Android.bp
+++ b/location/lib/Android.bp
@@ -21,7 +21,7 @@
         "androidx.annotation_annotation",
     ],
     api_packages: ["com.android.location.provider"],
-    srcs_lib: "framework",
+    srcs_lib: "framework-minus-apex",
     srcs_lib_whitelist_dirs: ["location/java"],
     srcs_lib_whitelist_pkgs: ["com.android.internal.location"],
 }
diff --git a/media/lib/signer/Android.bp b/media/lib/signer/Android.bp
index 44f8725..f320397 100644
--- a/media/lib/signer/Android.bp
+++ b/media/lib/signer/Android.bp
@@ -18,7 +18,7 @@
     name: "com.android.mediadrm.signer",
     srcs: ["java/**/*.java"],
     api_packages: ["com.android.mediadrm.signer"],
-    srcs_lib: "framework",
+    srcs_lib: "framework-minus-apex",
     srcs_lib_whitelist_dirs: ["media/java"],
     srcs_lib_whitelist_pkgs: ["android.media"],
 }
diff --git a/test-mock/Android.bp b/test-mock/Android.bp
index a5cd175..0129c4c 100644
--- a/test-mock/Android.bp
+++ b/test-mock/Android.bp
@@ -25,7 +25,7 @@
         "android.test.mock",
     ],
 
-    srcs_lib: "framework",
+    srcs_lib: "framework-minus-apex",
     srcs_lib_whitelist_dirs: ["core/java"],
     srcs_lib_whitelist_pkgs: ["android"],
     compile_dex: true,