diff --git a/apex/aidl/Android.bp b/aidl/Android.bp
similarity index 100%
rename from apex/aidl/Android.bp
rename to aidl/Android.bp
diff --git a/apex/aidl/android/os/IPendingIntentRef.aidl b/aidl/android/os/IPendingIntentRef.aidl
similarity index 100%
rename from apex/aidl/android/os/IPendingIntentRef.aidl
rename to aidl/android/os/IPendingIntentRef.aidl
diff --git a/apex/aidl/android/os/IPullAtomCallback.aidl b/aidl/android/os/IPullAtomCallback.aidl
similarity index 100%
rename from apex/aidl/android/os/IPullAtomCallback.aidl
rename to aidl/android/os/IPullAtomCallback.aidl
diff --git a/apex/aidl/android/os/IPullAtomResultReceiver.aidl b/aidl/android/os/IPullAtomResultReceiver.aidl
similarity index 100%
rename from apex/aidl/android/os/IPullAtomResultReceiver.aidl
rename to aidl/android/os/IPullAtomResultReceiver.aidl
diff --git a/apex/aidl/android/os/IStatsCompanionService.aidl b/aidl/android/os/IStatsCompanionService.aidl
similarity index 100%
rename from apex/aidl/android/os/IStatsCompanionService.aidl
rename to aidl/android/os/IStatsCompanionService.aidl
diff --git a/apex/aidl/android/os/IStatsManagerService.aidl b/aidl/android/os/IStatsManagerService.aidl
similarity index 100%
rename from apex/aidl/android/os/IStatsManagerService.aidl
rename to aidl/android/os/IStatsManagerService.aidl
diff --git a/apex/aidl/android/os/IStatsd.aidl b/aidl/android/os/IStatsd.aidl
similarity index 100%
rename from apex/aidl/android/os/IStatsd.aidl
rename to aidl/android/os/IStatsd.aidl
diff --git a/apex/aidl/android/os/StatsDimensionsValueParcel.aidl b/aidl/android/os/StatsDimensionsValueParcel.aidl
similarity index 100%
rename from apex/aidl/android/os/StatsDimensionsValueParcel.aidl
rename to aidl/android/os/StatsDimensionsValueParcel.aidl
diff --git a/apex/aidl/android/util/StatsEventParcel.aidl b/aidl/android/util/StatsEventParcel.aidl
similarity index 100%
rename from apex/aidl/android/util/StatsEventParcel.aidl
rename to aidl/android/util/StatsEventParcel.aidl
diff --git a/apex/Android.bp b/apex/Android.bp
index f13861e..9fb2a88 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -60,24 +60,3 @@
     installable: false,
 }
 
-// JNI library for StatsLog.write
-cc_library_shared {
-    name: "libstats_jni",
-    srcs: ["jni/**/*.cpp"],
-    header_libs: ["libnativehelper_header_only"],
-    shared_libs: [
-        "liblog",  // Has a stable abi - should not be copied into apex.
-        "libstatssocket",
-    ],
-    stl: "libc++_static",
-    cflags: [
-        "-Wall",
-        "-Werror",
-        "-Wextra",
-        "-Wno-unused-parameter",
-    ],
-    apex_available: [
-        "com.android.os.statsd",
-        "test_com.android.os.statsd",
-    ],
-}
diff --git a/bin/src/metrics/GaugeMetricProducer.cpp b/bin/src/metrics/GaugeMetricProducer.cpp
index 2a37b58..bca5c17 100644
--- a/bin/src/metrics/GaugeMetricProducer.cpp
+++ b/bin/src/metrics/GaugeMetricProducer.cpp
@@ -205,6 +205,12 @@
     }
     sp<EventMatcherWizard> tmpEventWizard = mEventMatcherWizard;
     mEventMatcherWizard = matcherWizard;
+
+    // If this is a config update, we must have just forced a partial bucket. Pull if needed to get
+    // data for the new bucket.
+    if (mIsActive && mIsPulled && mSamplingType == GaugeMetric::RANDOM_ONE_SAMPLE) {
+        pullAndMatchEventsLocked(mCurrentBucketStartTimeNs);
+    }
     return true;
 }
 
diff --git a/bin/tests/e2e/ConfigUpdate_e2e_ab_test.cpp b/bin/tests/e2e/ConfigUpdate_e2e_ab_test.cpp
index 098f284..17007f9 100644
--- a/bin/tests/e2e/ConfigUpdate_e2e_ab_test.cpp
+++ b/bin/tests/e2e/ConfigUpdate_e2e_ab_test.cpp
@@ -14,6 +14,7 @@
 
 #include <android-base/properties.h>
 #include <android-base/stringprintf.h>
+#include <android/binder_interface_utils.h>
 #include <gtest/gtest.h>
 
 #include "flags/flags.h"
@@ -30,6 +31,7 @@
 
 using android::base::SetProperty;
 using android::base::StringPrintf;
+using ::ndk::SharedRefBase;
 using namespace std;
 
 namespace {
@@ -319,6 +321,70 @@
                             &buffer);
 }
 
+TEST_P(ConfigUpdateE2eAbTest, TestExistingGaugePullRandomOneSample) {
+    StatsdConfig config;
+    config.add_allowed_log_source("AID_ROOT");
+    config.add_default_pull_packages("AID_ROOT");  // Fake puller is registered with root.
+
+    AtomMatcher subsystemSleepMatcher =
+            CreateSimpleAtomMatcher("SubsystemSleep", util::SUBSYSTEM_SLEEP_STATE);
+    *config.add_atom_matcher() = subsystemSleepMatcher;
+
+    GaugeMetric metric = createGaugeMetric("GaugeSubsystemSleep", subsystemSleepMatcher.id(),
+                                           GaugeMetric::RANDOM_ONE_SAMPLE, nullopt, nullopt);
+    *metric.mutable_dimensions_in_what() =
+            CreateDimensions(util::SUBSYSTEM_SLEEP_STATE, {1 /* subsystem name */});
+    *config.add_gauge_metric() = metric;
+
+    ConfigKey key(123, 987);
+    uint64_t bucketStartTimeNs = getElapsedRealtimeNs();
+    uint64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(TEN_MINUTES) * 1000000LL;
+    sp<StatsLogProcessor> processor = CreateStatsLogProcessor(
+            bucketStartTimeNs, bucketStartTimeNs, config, key,
+            SharedRefBase::make<FakeSubsystemSleepCallback>(), util::SUBSYSTEM_SLEEP_STATE);
+
+    uint64_t updateTimeNs = bucketStartTimeNs + 60 * NS_PER_SEC;
+    processor->OnConfigUpdated(updateTimeNs, key, config);
+    uint64_t dumpTimeNs = bucketStartTimeNs + 90 * NS_PER_SEC;
+    ConfigMetricsReportList reports;
+    vector<uint8_t> buffer;
+    processor->onDumpReport(key, dumpTimeNs, true, true, ADB_DUMP, NO_TIME_CONSTRAINTS, &buffer);
+    EXPECT_TRUE(reports.ParseFromArray(&buffer[0], buffer.size()));
+    backfillDimensionPath(&reports);
+    backfillStringInReport(&reports);
+    backfillStartEndTimestamp(&reports);
+    ASSERT_EQ(reports.reports_size(), 2);
+
+    // From after the update
+    ConfigMetricsReport report = reports.reports(1);
+    ASSERT_EQ(report.metrics_size(), 1);
+    // Count screen on while screen is on. There was 1 after the update.
+    StatsLogReport metricData = report.metrics(0);
+    EXPECT_EQ(metricData.metric_id(), metric.id());
+    EXPECT_TRUE(metricData.has_gauge_metrics());
+    StatsLogReport::GaugeMetricDataWrapper gaugeMetrics;
+    sortMetricDataByDimensionsValue(metricData.gauge_metrics(), &gaugeMetrics);
+    ASSERT_EQ(gaugeMetrics.data_size(), 2);
+
+    GaugeMetricData data = metricData.gauge_metrics().data(0);
+    EXPECT_EQ(util::SUBSYSTEM_SLEEP_STATE, data.dimensions_in_what().field());
+    ASSERT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size());
+    EXPECT_EQ(1 /* subsystem name field */,
+              data.dimensions_in_what().value_tuple().dimensions_value(0).field());
+    EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value(0).value_str(),
+              "subsystem_name_1");
+    ASSERT_EQ(data.bucket_info_size(), 1);
+    ASSERT_EQ(1, data.bucket_info(0).atom_size());
+    ASSERT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size());
+    EXPECT_EQ(updateTimeNs, data.bucket_info(0).elapsed_timestamp_nanos(0));
+    EXPECT_EQ(MillisToNano(NanoToMillis(updateTimeNs)),
+              data.bucket_info(0).start_bucket_elapsed_nanos());
+    EXPECT_EQ(MillisToNano(NanoToMillis(dumpTimeNs)),
+              data.bucket_info(0).end_bucket_elapsed_nanos());
+    EXPECT_TRUE(data.bucket_info(0).atom(0).subsystem_sleep_state().subsystem_name().empty());
+    EXPECT_GT(data.bucket_info(0).atom(0).subsystem_sleep_state().time_millis(), 0);
+}
+
 #else
 GTEST_LOG_(INFO) << "This test does nothing.\n";
 #endif
diff --git a/bin/tests/metrics/parsing_utils/config_update_utils_test.cpp b/bin/tests/metrics/parsing_utils/config_update_utils_test.cpp
index d06f84f..18901f9 100644
--- a/bin/tests/metrics/parsing_utils/config_update_utils_test.cpp
+++ b/bin/tests/metrics/parsing_utils/config_update_utils_test.cpp
@@ -144,23 +144,6 @@
     return metric;
 }
 
-GaugeMetric createGaugeMetric(string name, int64_t what, GaugeMetric::SamplingType samplingType,
-                              optional<int64_t> condition, optional<int64_t> triggerEvent) {
-    GaugeMetric metric;
-    metric.set_id(StringToId(name));
-    metric.set_what(what);
-    metric.set_bucket(TEN_MINUTES);
-    metric.set_sampling_type(samplingType);
-    if (condition) {
-        metric.set_condition(condition.value());
-    }
-    if (triggerEvent) {
-        metric.set_trigger_event(triggerEvent.value());
-    }
-    metric.mutable_gauge_fields_filter()->set_include_all(true);
-    return metric;
-}
-
 DurationMetric createDurationMetric(string name, int64_t what, optional<int64_t> condition,
                                     vector<int64_t> states) {
     DurationMetric metric;
diff --git a/bin/tests/statsd_test_util.cpp b/bin/tests/statsd_test_util.cpp
index 153b696..c1f3738 100644
--- a/bin/tests/statsd_test_util.cpp
+++ b/bin/tests/statsd_test_util.cpp
@@ -445,6 +445,23 @@
     return dimensions;
 }
 
+GaugeMetric createGaugeMetric(string name, int64_t what, GaugeMetric::SamplingType samplingType,
+                              optional<int64_t> condition, optional<int64_t> triggerEvent) {
+    GaugeMetric metric;
+    metric.set_id(StringToId(name));
+    metric.set_what(what);
+    metric.set_bucket(TEN_MINUTES);
+    metric.set_sampling_type(samplingType);
+    if (condition) {
+        metric.set_condition(condition.value());
+    }
+    if (triggerEvent) {
+        metric.set_trigger_event(triggerEvent.value());
+    }
+    metric.mutable_gauge_fields_filter()->set_include_all(true);
+    return metric;
+}
+
 // START: get primary key functions
 void getUidProcessKey(int uid, HashableDimensionKey* key) {
     int pos1[] = {1, 0, 0};
diff --git a/bin/tests/statsd_test_util.h b/bin/tests/statsd_test_util.h
index dc9b285..8683b53 100644
--- a/bin/tests/statsd_test_util.h
+++ b/bin/tests/statsd_test_util.h
@@ -192,6 +192,9 @@
                                                     const std::vector<Position>& positions,
                                                     const std::vector<int>& fields);
 
+GaugeMetric createGaugeMetric(string name, int64_t what, GaugeMetric::SamplingType samplingType,
+                              optional<int64_t> condition, optional<int64_t> triggerEvent);
+
 // START: get primary key functions
 // These functions take in atom field information and create FieldValues which are stored in the
 // given HashableDimensionKey.
diff --git a/apex/framework/Android.bp b/framework/Android.bp
similarity index 76%
rename from apex/framework/Android.bp
rename to framework/Android.bp
index e4299f5..59fd9c2 100644
--- a/apex/framework/Android.bp
+++ b/framework/Android.bp
@@ -45,7 +45,7 @@
     visibility: [
         "//frameworks/base", // For the "global" stubs.
         "//frameworks/base/apex/statsd:__subpackages__",
-        "//packages/modules/StatsD/apex:__subpackages__",
+        "//packages/modules/StatsD/framework:__subpackages__",
     ],
 }
 java_sdk_library {
@@ -75,7 +75,7 @@
 
     impl_library_visibility: [
         "//frameworks/base/apex/statsd/framework/test:__subpackages__",
-        "//packages/modules/StatsD/apex/framework/test:__subpackages__",
+        "//packages/modules/StatsD/framework/test:__subpackages__",
     ],
 
     apex_available: [
@@ -83,3 +83,29 @@
         "test_com.android.os.statsd",
     ],
 }
+
+// JNI library for StatsLog.write
+cc_library_shared {
+    name: "libstats_jni",
+    srcs: ["jni/**/*.cpp"],
+    header_libs: ["libnativehelper_header_only"],
+    shared_libs: [
+        "liblog",  // Has a stable abi - should not be copied into apex.
+        "libstatssocket",
+    ],
+    stl: "libc++_static",
+    cflags: [
+        "-Wall",
+        "-Werror",
+        "-Wextra",
+        "-Wno-unused-parameter",
+    ],
+    apex_available: [
+        "com.android.os.statsd",
+        "test_com.android.os.statsd",
+    ],
+    visibility: [
+        "//packages/modules/StatsD/apex:__subpackages__",
+    ],
+}
+
diff --git a/apex/framework/api/current.txt b/framework/api/current.txt
similarity index 100%
rename from apex/framework/api/current.txt
rename to framework/api/current.txt
diff --git a/apex/framework/api/module-lib-current.txt b/framework/api/module-lib-current.txt
similarity index 100%
rename from apex/framework/api/module-lib-current.txt
rename to framework/api/module-lib-current.txt
diff --git a/apex/framework/api/module-lib-removed.txt b/framework/api/module-lib-removed.txt
similarity index 100%
rename from apex/framework/api/module-lib-removed.txt
rename to framework/api/module-lib-removed.txt
diff --git a/apex/framework/api/removed.txt b/framework/api/removed.txt
similarity index 100%
rename from apex/framework/api/removed.txt
rename to framework/api/removed.txt
diff --git a/apex/framework/api/system-current.txt b/framework/api/system-current.txt
similarity index 100%
rename from apex/framework/api/system-current.txt
rename to framework/api/system-current.txt
diff --git a/apex/framework/api/system-removed.txt b/framework/api/system-removed.txt
similarity index 100%
rename from apex/framework/api/system-removed.txt
rename to framework/api/system-removed.txt
diff --git a/apex/framework/java/android/app/StatsManager.java b/framework/java/android/app/StatsManager.java
similarity index 100%
rename from apex/framework/java/android/app/StatsManager.java
rename to framework/java/android/app/StatsManager.java
diff --git a/apex/framework/java/android/os/StatsDimensionsValue.java b/framework/java/android/os/StatsDimensionsValue.java
similarity index 100%
rename from apex/framework/java/android/os/StatsDimensionsValue.java
rename to framework/java/android/os/StatsDimensionsValue.java
diff --git a/apex/framework/java/android/os/StatsFrameworkInitializer.java b/framework/java/android/os/StatsFrameworkInitializer.java
similarity index 100%
rename from apex/framework/java/android/os/StatsFrameworkInitializer.java
rename to framework/java/android/os/StatsFrameworkInitializer.java
diff --git a/apex/framework/java/android/util/StatsEvent.java b/framework/java/android/util/StatsEvent.java
similarity index 100%
rename from apex/framework/java/android/util/StatsEvent.java
rename to framework/java/android/util/StatsEvent.java
diff --git a/apex/framework/java/android/util/StatsLog.java b/framework/java/android/util/StatsLog.java
similarity index 98%
rename from apex/framework/java/android/util/StatsLog.java
rename to framework/java/android/util/StatsLog.java
index 0a9f4eb..112cd1b 100644
--- a/apex/framework/java/android/util/StatsLog.java
+++ b/framework/java/android/util/StatsLog.java
@@ -107,7 +107,7 @@
      *                             0x04: FLAG_REQUIRE_LOW_LATENCY_MONITOR
      * @param state            current install state. Defined as State enums in
      *                         BinaryPushStateChanged atom in
-     *                         frameworks/base/cmds/statsd/src/atoms.proto
+     *                         frameworks/proto_logging/stats/atoms.proto
      * @param experimentIds    experiment ids.
      * @return True if the log request was sent to statsd.
      */
diff --git a/apex/jni/android_util_StatsLog.cpp b/framework/jni/android_util_StatsLog.cpp
similarity index 100%
rename from apex/jni/android_util_StatsLog.cpp
rename to framework/jni/android_util_StatsLog.cpp
diff --git a/apex/framework/test/Android.bp b/framework/test/Android.bp
similarity index 100%
rename from apex/framework/test/Android.bp
rename to framework/test/Android.bp
diff --git a/apex/framework/test/AndroidManifest.xml b/framework/test/AndroidManifest.xml
similarity index 100%
rename from apex/framework/test/AndroidManifest.xml
rename to framework/test/AndroidManifest.xml
diff --git a/apex/framework/test/AndroidTest.xml b/framework/test/AndroidTest.xml
similarity index 100%
rename from apex/framework/test/AndroidTest.xml
rename to framework/test/AndroidTest.xml
diff --git a/apex/framework/test/src/android/app/PullAtomMetadataTest.java b/framework/test/src/android/app/PullAtomMetadataTest.java
similarity index 100%
rename from apex/framework/test/src/android/app/PullAtomMetadataTest.java
rename to framework/test/src/android/app/PullAtomMetadataTest.java
diff --git a/apex/framework/test/src/android/os/StatsDimensionsValueTest.java b/framework/test/src/android/os/StatsDimensionsValueTest.java
similarity index 100%
rename from apex/framework/test/src/android/os/StatsDimensionsValueTest.java
rename to framework/test/src/android/os/StatsDimensionsValueTest.java
diff --git a/apex/framework/test/src/android/util/StatsEventTest.java b/framework/test/src/android/util/StatsEventTest.java
similarity index 100%
rename from apex/framework/test/src/android/util/StatsEventTest.java
rename to framework/test/src/android/util/StatsEventTest.java
diff --git a/apex/service/Android.bp b/service/Android.bp
similarity index 100%
rename from apex/service/Android.bp
rename to service/Android.bp
diff --git a/apex/service/java/com/android/server/stats/StatsCompanion.java b/service/java/com/android/server/stats/StatsCompanion.java
similarity index 100%
rename from apex/service/java/com/android/server/stats/StatsCompanion.java
rename to service/java/com/android/server/stats/StatsCompanion.java
diff --git a/apex/service/java/com/android/server/stats/StatsCompanionService.java b/service/java/com/android/server/stats/StatsCompanionService.java
similarity index 100%
rename from apex/service/java/com/android/server/stats/StatsCompanionService.java
rename to service/java/com/android/server/stats/StatsCompanionService.java
diff --git a/apex/service/java/com/android/server/stats/StatsManagerService.java b/service/java/com/android/server/stats/StatsManagerService.java
similarity index 100%
rename from apex/service/java/com/android/server/stats/StatsManagerService.java
rename to service/java/com/android/server/stats/StatsManagerService.java
diff --git a/tests/apps/statsdapp/src/com/android/server/cts/device/statsd/AtomTests.java b/tests/apps/statsdapp/src/com/android/server/cts/device/statsd/AtomTests.java
index a53064b..7477d2c 100644
--- a/tests/apps/statsdapp/src/com/android/server/cts/device/statsd/AtomTests.java
+++ b/tests/apps/statsdapp/src/com/android/server/cts/device/statsd/AtomTests.java
@@ -24,7 +24,6 @@
 import android.app.ActivityManager;
 import android.app.ActivityManager.RunningServiceInfo;
 import android.app.AlarmManager;
-import android.app.AppOpsManager;
 import android.app.PendingIntent;
 import android.app.blob.BlobStoreManager;
 import android.app.job.JobInfo;
@@ -76,7 +75,6 @@
 import androidx.annotation.NonNull;
 import androidx.test.InstrumentationRegistry;
 import com.android.compatibility.common.util.ShellIdentityUtils;
-import com.android.utils.blob.FakeBlobData;
 import com.google.common.io.BaseEncoding;
 import java.net.HttpURLConnection;
 import java.net.URL;
@@ -94,115 +92,6 @@
 
     private static final String MY_PACKAGE_NAME = "com.android.server.cts.device.statsd";
 
-    private static final Map<String, Integer> APP_OPS_ENUM_MAP = new ArrayMap<>();
-    static {
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_COARSE_LOCATION, 0);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_FINE_LOCATION, 1);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_GPS, 2);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_VIBRATE, 3);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_CONTACTS, 4);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WRITE_CONTACTS, 5);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_CALL_LOG, 6);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WRITE_CALL_LOG, 7);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_CALENDAR, 8);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WRITE_CALENDAR, 9);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WIFI_SCAN, 10);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_POST_NOTIFICATION, 11);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_NEIGHBORING_CELLS, 12);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_CALL_PHONE, 13);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_SMS, 14);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WRITE_SMS, 15);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_RECEIVE_SMS, 16);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_RECEIVE_EMERGENCY_BROADCAST, 17);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_RECEIVE_MMS, 18);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_RECEIVE_WAP_PUSH, 19);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_SEND_SMS, 20);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_ICC_SMS, 21);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WRITE_ICC_SMS, 22);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WRITE_SETTINGS, 23);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_SYSTEM_ALERT_WINDOW, 24);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_ACCESS_NOTIFICATIONS, 25);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_CAMERA, 26);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_RECORD_AUDIO, 27);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_PLAY_AUDIO, 28);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_CLIPBOARD, 29);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WRITE_CLIPBOARD, 30);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_TAKE_MEDIA_BUTTONS, 31);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_TAKE_AUDIO_FOCUS, 32);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_AUDIO_MASTER_VOLUME, 33);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_AUDIO_VOICE_VOLUME, 34);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_AUDIO_RING_VOLUME, 35);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_AUDIO_MEDIA_VOLUME, 36);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_AUDIO_ALARM_VOLUME, 37);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_AUDIO_NOTIFICATION_VOLUME, 38);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_AUDIO_BLUETOOTH_VOLUME, 39);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WAKE_LOCK, 40);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_MONITOR_LOCATION, 41);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_MONITOR_HIGH_POWER_LOCATION, 42);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_GET_USAGE_STATS, 43);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_MUTE_MICROPHONE, 44);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_TOAST_WINDOW, 45);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_PROJECT_MEDIA, 46);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_ACTIVATE_VPN, 47);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WRITE_WALLPAPER, 48);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_ASSIST_STRUCTURE, 49);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_ASSIST_SCREENSHOT, 50);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_PHONE_STATE, 51);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_ADD_VOICEMAIL, 52);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_USE_SIP, 53);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_PROCESS_OUTGOING_CALLS, 54);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_USE_FINGERPRINT, 55);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_BODY_SENSORS, 56);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_CELL_BROADCASTS, 57);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_MOCK_LOCATION, 58);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_EXTERNAL_STORAGE, 59);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WRITE_EXTERNAL_STORAGE, 60);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_TURN_SCREEN_ON, 61);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_GET_ACCOUNTS, 62);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_RUN_IN_BACKGROUND, 63);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_AUDIO_ACCESSIBILITY_VOLUME, 64);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_PHONE_NUMBERS, 65);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_REQUEST_INSTALL_PACKAGES, 66);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_PICTURE_IN_PICTURE, 67);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_INSTANT_APP_START_FOREGROUND, 68);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_ANSWER_PHONE_CALLS, 69);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_RUN_ANY_IN_BACKGROUND, 70);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_CHANGE_WIFI_STATE, 71);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_REQUEST_DELETE_PACKAGES, 72);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_BIND_ACCESSIBILITY_SERVICE, 73);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_ACCEPT_HANDOVER, 74);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_MANAGE_IPSEC_TUNNELS, 75);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_START_FOREGROUND, 76);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_BLUETOOTH_SCAN, 77);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_USE_BIOMETRIC, 78);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_ACTIVITY_RECOGNITION, 79);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_SMS_FINANCIAL_TRANSACTIONS, 80);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_MEDIA_AUDIO, 81);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WRITE_MEDIA_AUDIO, 82);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_MEDIA_VIDEO, 83);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WRITE_MEDIA_VIDEO, 84);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_MEDIA_IMAGES, 85);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_WRITE_MEDIA_IMAGES, 86);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_LEGACY_STORAGE, 87);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_ACCESS_ACCESSIBILITY, 88);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_READ_DEVICE_IDENTIFIERS, 89);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_ACCESS_MEDIA_LOCATION, 90);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_QUERY_ALL_PACKAGES, 91);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_MANAGE_EXTERNAL_STORAGE, 92);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_INTERACT_ACROSS_PROFILES, 93);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_ACTIVATE_PLATFORM_VPN, 94);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_LOADER_USAGE_STATS, 95);
-        // Op 96 was deprecated/removed
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_AUTO_REVOKE_PERMISSIONS_IF_UNUSED, 97);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_AUTO_REVOKE_MANAGED_BY_INSTALLER, 98);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_NO_ISOLATED_STORAGE, 99);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_PHONE_CALL_MICROPHONE, 100);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_PHONE_CALL_CAMERA, 101);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_RECORD_AUDIO_HOTWORD, 102);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_MANAGE_ONGOING_CALLS, 103);
-        APP_OPS_ENUM_MAP.put(AppOpsManager.OPSTR_USE_ICC_AUTH_WITH_DEVICE_IDENTIFIER, 105);
-    }
-
     @Test
     public void testAudioState() {
         // TODO: This should surely be getTargetContext(), here and everywhere, but test first.
@@ -444,67 +333,6 @@
         context.stopService(intent);
     }
 
-    @Test
-    public void testForegroundServiceAccessAppOp() throws Exception {
-        Context context = InstrumentationRegistry.getContext();
-        Intent fgsIntent = new Intent(context, StatsdCtsForegroundService.class);
-        AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class);
-
-        // No foreground service session
-        noteAppOp(appOpsManager, AppOpsManager.OPSTR_COARSE_LOCATION);
-        sleep(500);
-
-        // Foreground service session 1
-        context.startService(fgsIntent);
-        while (!checkIfServiceRunning(context, StatsdCtsForegroundService.class.getName())) {
-            sleep(50);
-        }
-        noteAppOp(appOpsManager, AppOpsManager.OPSTR_CAMERA);
-        noteAppOp(appOpsManager, AppOpsManager.OPSTR_FINE_LOCATION);
-        noteAppOp(appOpsManager, AppOpsManager.OPSTR_CAMERA);
-        startAppOp(appOpsManager, AppOpsManager.OPSTR_RECORD_AUDIO);
-        noteAppOp(appOpsManager, AppOpsManager.OPSTR_RECORD_AUDIO);
-        startAppOp(appOpsManager, AppOpsManager.OPSTR_CAMERA);
-        sleep(500);
-        context.stopService(fgsIntent);
-
-        // No foreground service session
-        noteAppOp(appOpsManager, AppOpsManager.OPSTR_COARSE_LOCATION);
-        sleep(500);
-
-        // TODO(b/149098800): Start fgs a second time and log OPSTR_CAMERA again
-    }
-
-    @Test
-    public void testAppOps() throws Exception {
-        Context context = InstrumentationRegistry.getContext();
-        AppOpsManager appOpsManager = context.getSystemService(AppOpsManager.class);
-
-        String[] opsList = appOpsManager.getOpStrs();
-
-        for (int i = 0; i < opsList.length; i++) {
-            String op = opsList[i];
-            if (TextUtils.isEmpty(op)) {
-                // Operation removed/deprecated
-                continue;
-            }
-            int noteCount = APP_OPS_ENUM_MAP.getOrDefault(op, opsList.length) + 1;
-            for (int j = 0; j < noteCount; j++) {
-                try {
-                    noteAppOp(appOpsManager, opsList[i]);
-                } catch (SecurityException e) {}
-            }
-        }
-    }
-
-    private void noteAppOp(AppOpsManager aom, String opStr) {
-        aom.noteOp(opStr, android.os.Process.myUid(), MY_PACKAGE_NAME, null, "statsdTest");
-    }
-
-    private void startAppOp(AppOpsManager aom, String opStr) {
-        aom.startOp(opStr, android.os.Process.myUid(), MY_PACKAGE_NAME, null, "statsdTest");
-    }
-
     /** Check if service is running. */
     public boolean checkIfServiceRunning(Context context, String serviceName) {
         ActivityManager manager = context.getSystemService(ActivityManager.class);
@@ -957,33 +785,6 @@
     private static final byte[] FAKE_PKG_CERT_SHA256 = BaseEncoding.base16().decode(
             "187E3D3172F2177D6FEC2EA53785BF1E25DFF7B2E5F6E59807E365A7A837E6C3");
 
-    @Test
-    public void testBlobStore() throws Exception {
-        Context context = InstrumentationRegistry.getContext();
-        int uid = context.getPackageManager().getApplicationInfo(context.getPackageName(), 0).uid;
-
-        BlobStoreManager bsm = context.getSystemService(BlobStoreManager.class);
-        final long leaseExpiryMs = System.currentTimeMillis() + BLOB_LEASE_EXPIRY_DURATION_MS;
-
-        final FakeBlobData blobData = new FakeBlobData.Builder(context).setExpiryDurationMs(
-                BLOB_EXPIRY_DURATION_MS).setFileSize(BLOB_FILE_SIZE_BYTES).build();
-
-        blobData.prepare();
-        try {
-            // Commit the Blob, should result in BLOB_COMMITTED atom event
-            commitBlob(context, bsm, blobData);
-
-            // Lease the Blob, should result in BLOB_LEASED atom event
-            bsm.acquireLease(blobData.getBlobHandle(), "", leaseExpiryMs);
-
-            // Open the Blob, should result in BLOB_OPENED atom event
-            bsm.openBlob(blobData.getBlobHandle());
-
-        } finally {
-            blobData.delete();
-        }
-    }
-
     // ------- Helper methods
 
     /** Puts the current thread to sleep. */
@@ -1040,19 +841,4 @@
     private static void setScreenBrightness(int brightness) {
         runShellCommand("settings put system screen_brightness " + brightness);
     }
-
-
-    private void commitBlob(Context context, BlobStoreManager bsm, FakeBlobData blobData)
-            throws Exception {;
-        final long sessionId = bsm.createSession(blobData.getBlobHandle());
-        try (BlobStoreManager.Session session = bsm.openSession(sessionId)) {
-            blobData.writeToSession(session);
-            session.allowPackageAccess("fake.package.name", FAKE_PKG_CERT_SHA256);
-
-            final CompletableFuture<Integer> callback = new CompletableFuture<>();
-            session.commit(context.getMainExecutor(), callback::complete);
-            assertWithMessage("Session failed to commit within timeout").that(
-                    callback.get(BLOB_COMMIT_CALLBACK_TIMEOUT_SEC, TimeUnit.SECONDS)).isEqualTo(0);
-        }
-    }
 }
