Merge "Removes unused GarageModeAtomTests.java, because the test itself was migrated."
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);
-        }
-    }
 }