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);
- }
- }
}