Merge "Pull sdcard mounted atom."
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index 57c32c7..2632294d 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -303,6 +303,7 @@
DangerousPermissionState dangerous_permission_state = 10050;
TrainInfo train_info = 10051;
TimeZoneDataInfo time_zone_data_info = 10052;
+ SDCardInfo sdcard_info = 10053;
}
// DO NOT USE field numbers above 100,000 in AOSP.
@@ -3231,6 +3232,28 @@
optional int32 cycle_count = 1;
}
+/**
+ * Logs that an SD card is mounted and information about it, its type (public or private) and the
+ * size in bytes.
+ * Pulled from:
+ * StatsCompanionService
+ */
+
+message SDCardInfo {
+
+ enum Type {
+ UNKNOWN = 0;
+ TYPE_PUBLIC = 1;
+ TYPE_PRIVATE = 2;
+ OTHERS = 3;
+ }
+
+ // Type of the SD card: TYPE_PUBLIC if portable and TYPE_PRIVATE if internal.
+ optional Type type = 1;
+ // Total size of the sd card in bytes.
+ optional int64 size_bytes = 2;
+}
+
/*
* Logs when a connection becomes available and lost.
* Logged in StatsCompanionService.java
diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp
index d70c851..1513834 100644
--- a/cmds/statsd/src/external/StatsPullerManager.cpp
+++ b/cmds/statsd/src/external/StatsPullerManager.cpp
@@ -237,6 +237,9 @@
// TimeZoneDataInfo.
{android::util::TIME_ZONE_DATA_INFO,
{.puller = new StatsCompanionServicePuller(android::util::TIME_ZONE_DATA_INFO)}},
+ // SDCardInfo
+ {android::util::SDCARD_INFO,
+ {.puller = new StatsCompanionServicePuller(android::util::SDCARD_INFO)}},
};
StatsPullerManager::StatsPullerManager() : mNextPullTimeNs(NO_ALARM_UPDATE) {
diff --git a/services/core/java/com/android/server/stats/StatsCompanionService.java b/services/core/java/com/android/server/stats/StatsCompanionService.java
index edca2e3..4815e5c 100644
--- a/services/core/java/com/android/server/stats/StatsCompanionService.java
+++ b/services/core/java/com/android/server/stats/StatsCompanionService.java
@@ -85,7 +85,9 @@
import android.os.Temperature;
import android.os.UserHandle;
import android.os.UserManager;
+import android.os.storage.DiskInfo;
import android.os.storage.StorageManager;
+import android.os.storage.VolumeInfo;
import android.telephony.ModemActivityInfo;
import android.telephony.TelephonyManager;
import android.util.ArrayMap;
@@ -1956,6 +1958,27 @@
pulledData.add(e);
}
+ private void pullSDCardInfo(int tagId, long elapsedNanos, long wallClockNanos,
+ List<StatsLogEventWrapper> pulledData) {
+ StorageManager storageManager = mContext.getSystemService(StorageManager.class);
+ if (storageManager != null) {
+ List<VolumeInfo> volumes = storageManager.getVolumes();
+ for (VolumeInfo vol : volumes) {
+ final String envState = VolumeInfo.getEnvironmentForState(vol.getState());
+ final DiskInfo diskInfo = vol.getDisk();
+ if (diskInfo != null && diskInfo.isSd()) {
+ if (envState.equals(Environment.MEDIA_MOUNTED)) {
+ StatsLogEventWrapper e =
+ new StatsLogEventWrapper(tagId, elapsedNanos, wallClockNanos);
+ e.writeInt(vol.getType() + 1);
+ e.writeLong(diskInfo.size);
+ pulledData.add(e);
+ }
+ }
+ }
+ }
+ }
+
/**
* Pulls various data.
*/
@@ -2148,6 +2171,10 @@
pullTimeZoneDataInfo(tagId, elapsedNanos, wallClockNanos, ret);
break;
}
+ case StatsLog.SDCARD_INFO: {
+ pullSDCardInfo(tagId, elapsedNanos, wallClockNanos, ret);
+ break;
+ }
default:
Slog.w(TAG, "No such tagId data as " + tagId);
return null;