Add MMS metrics for work profile

Track wherether the MMS is sent/received by a sub that's tied to work
profile

Bug: 261776686
Test: sample: https://paste.googleplex.com/5336247844208640
Change-Id: If2556fff36844ebf391016ece05ecf9d80339087
diff --git a/proto/src/persist_mms_atoms.proto b/proto/src/persist_mms_atoms.proto
index c562246..bde1cb9 100644
--- a/proto/src/persist_mms_atoms.proto
+++ b/proto/src/persist_mms_atoms.proto
@@ -50,6 +50,7 @@
   optional int64 mms_count = 9;
   optional int32 retry_id = 10;
   optional bool handled_by_carrier_app = 11;
+  optional bool is_managed_profile = 12;
 }
 
 message OutgoingMms {
@@ -65,4 +66,5 @@
   optional bool is_from_default_app = 10;
   optional int32 retry_id = 11;
   optional bool handled_by_carrier_app = 12;
-}
\ No newline at end of file
+  optional bool is_managed_profile = 13;
+}
diff --git a/src/com/android/mms/service/metrics/MmsMetricsCollector.java b/src/com/android/mms/service/metrics/MmsMetricsCollector.java
index f20d61a..8da61ba 100644
--- a/src/com/android/mms/service/metrics/MmsMetricsCollector.java
+++ b/src/com/android/mms/service/metrics/MmsMetricsCollector.java
@@ -90,7 +90,8 @@
                 mms.getAvgIntervalMillis(),
                 mms.getMmsCount(),
                 mms.getRetryId(),
-                mms.getHandledByCarrierApp());
+                mms.getHandledByCarrierApp(),
+                mms.getIsManagedProfile());
     }
 
     private static StatsEvent buildStatsEvent(OutgoingMms mms) {
@@ -107,7 +108,8 @@
                 mms.getMmsCount(),
                 mms.getIsFromDefaultApp(),
                 mms.getRetryId(),
-                mms.getHandledByCarrierApp());
+                mms.getHandledByCarrierApp(),
+                mms.getIsManagedProfile());
     }
 
     @Override
diff --git a/src/com/android/mms/service/metrics/MmsStats.java b/src/com/android/mms/service/metrics/MmsStats.java
index 9495edb..7e98b0b 100644
--- a/src/com/android/mms/service/metrics/MmsStats.java
+++ b/src/com/android/mms/service/metrics/MmsStats.java
@@ -26,6 +26,7 @@
 import android.os.Binder;
 import android.os.SystemClock;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.telephony.ServiceState;
 import android.telephony.SmsManager;
 import android.telephony.SubscriptionInfo;
@@ -101,6 +102,7 @@
                 .setMmsCount(1)
                 .setRetryId(retryId)
                 .setHandledByCarrierApp(handledByCarrierApp)
+                .setIsManagedProfile(isManagedProfile())
                 .build();
         mPersistMmsAtomsStorage.addIncomingMms(incomingMms);
     }
@@ -120,10 +122,21 @@
                 .setIsFromDefaultApp(isDefaultMmsApp())
                 .setRetryId(retryId)
                 .setHandledByCarrierApp(handledByCarrierApp)
+                .setIsManagedProfile(isManagedProfile())
                 .build();
         mPersistMmsAtomsStorage.addOutgoingMms(outgoingMms);
     }
 
+    /** @return {@code true} if this SIM is dedicated to work profile */
+    private boolean isManagedProfile() {
+        SubscriptionManager subManager = mContext.getSystemService(SubscriptionManager.class);
+        if (subManager == null || !subManager.isActiveSubscriptionId(mSubId)) return false;
+        UserHandle userHandle = subManager.getSubscriptionUserHandle(mSubId);
+        UserManager userManager = mContext.getSystemService(UserManager.class);
+        if (userHandle == null || userManager == null) return false;
+        return userManager.isManagedProfile(userHandle.getIdentifier());
+    }
+
     /** Returns data network type of current subscription. */
     private int getDataNetworkType() {
         return mTelephonyManager.getDataNetworkType();
@@ -216,4 +229,4 @@
     private long getInterval() {
         return (SystemClock.elapsedRealtime() - mTimestamp);
     }
-}
\ No newline at end of file
+}
diff --git a/tests/unittests/src/com/android/mms/service/metrics/MmsStatsTest.java b/tests/unittests/src/com/android/mms/service/metrics/MmsStatsTest.java
index a91d0c8..2b2cae5 100644
--- a/tests/unittests/src/com/android/mms/service/metrics/MmsStatsTest.java
+++ b/tests/unittests/src/com/android/mms/service/metrics/MmsStatsTest.java
@@ -91,6 +91,7 @@
         assertThat(incomingMms.getMmsCount()).isEqualTo(1);
         assertThat(incomingMms.getRetryId()).isEqualTo(0);
         assertThat(incomingMms.getHandledByCarrierApp()).isEqualTo(false);
+        assertThat(incomingMms.getIsManagedProfile()).isEqualTo(false);
         verifyNoMoreInteractions(mPersistMmsAtomsStorage);
     }
 
@@ -118,6 +119,7 @@
         assertThat(outgoingMms.getRetryId()).isEqualTo(0);
         assertThat(outgoingMms.getHandledByCarrierApp()).isEqualTo(false);
         assertThat(outgoingMms.getIsFromDefaultApp()).isEqualTo(false);
+        assertThat(outgoingMms.getIsManagedProfile()).isEqualTo(false);
         verifyNoMoreInteractions(mPersistMmsAtomsStorage);
     }