Merge "Send safety center status on boot"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 290f84e..0279eec 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -4349,6 +4349,7 @@
                   android:exported="true">
             <intent-filter>
                 <action android:name="android.safetycenter.action.REFRESH_SAFETY_SOURCES"/>
+                <action android:name="android.intent.action.BOOT_COMPLETED"/>
             </intent-filter>
         </receiver>
 
diff --git a/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiver.java b/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiver.java
index 0fd0c0d..bdc52ad 100644
--- a/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiver.java
+++ b/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiver.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.safetycenter;
 
+import static android.content.Intent.ACTION_BOOT_COMPLETED;
+import static android.safetycenter.SafetyCenterManager.ACTION_REFRESH_SAFETY_SOURCES;
 import static android.safetycenter.SafetyCenterManager.EXTRA_REFRESH_SAFETY_SOURCE_IDS;
 
 import android.content.BroadcastReceiver;
@@ -24,6 +26,8 @@
 
 import com.google.common.collect.ImmutableList;
 
+import java.util.List;
+
 /** Broadcast receiver for handling requests from Safety Center for fresh data. */
 public class SafetySourceBroadcastReceiver extends BroadcastReceiver {
 
@@ -33,17 +37,33 @@
             return;
         }
 
-        String[] sourceIdsExtra = intent.getStringArrayExtra(EXTRA_REFRESH_SAFETY_SOURCE_IDS);
-        if (sourceIdsExtra != null && sourceIdsExtra.length > 0) {
-            ImmutableList<String> sourceIds = ImmutableList.copyOf(sourceIdsExtra);
-
-            if (sourceIds.contains(LockScreenSafetySource.SAFETY_SOURCE_ID)) {
-                LockScreenSafetySource.sendSafetyData(context);
+        if (ACTION_REFRESH_SAFETY_SOURCES.equals(intent.getAction())) {
+            String[] sourceIdsExtra =
+                    intent.getStringArrayExtra(EXTRA_REFRESH_SAFETY_SOURCE_IDS);
+            if (sourceIdsExtra != null && sourceIdsExtra.length > 0) {
+                refreshSafetySources(context, ImmutableList.copyOf(sourceIdsExtra));
             }
-
-            if (sourceIds.contains(BiometricsSafetySource.SAFETY_SOURCE_ID)) {
-                BiometricsSafetySource.sendSafetyData(context);
-            }
+            return;
         }
+
+
+        if (ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
+            refreshAllSafetySources(context);
+        }
+    }
+
+    private static void refreshSafetySources(Context context, List<String> sourceIds) {
+        if (sourceIds.contains(LockScreenSafetySource.SAFETY_SOURCE_ID)) {
+            LockScreenSafetySource.sendSafetyData(context);
+        }
+
+        if (sourceIds.contains(BiometricsSafetySource.SAFETY_SOURCE_ID)) {
+            BiometricsSafetySource.sendSafetyData(context);
+        }
+    }
+
+    private static void refreshAllSafetySources(Context context) {
+        LockScreenSafetySource.sendSafetyData(context);
+        BiometricsSafetySource.sendSafetyData(context);
     }
 }
diff --git a/tests/unit/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiverTest.java b/tests/unit/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiverTest.java
index 8806e50..6c9addd 100644
--- a/tests/unit/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiverTest.java
+++ b/tests/unit/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiverTest.java
@@ -16,6 +16,7 @@
 
 package com.android.settings.safetycenter;
 
+import static android.safetycenter.SafetyCenterManager.ACTION_REFRESH_SAFETY_SOURCES;
 import static android.safetycenter.SafetyCenterManager.EXTRA_REFRESH_SAFETY_SOURCE_IDS;
 
 import static com.google.common.truth.Truth.assertThat;
@@ -67,12 +68,24 @@
     }
 
     @Test
+    public void sendSafetyData_whenSafetyCenterIsEnabled_withNoIntentAction_sendsNoData() {
+        when(mSafetyCenterStatusHolder.isEnabled(mApplicationContext)).thenReturn(true);
+        Intent intent = new Intent().putExtra(EXTRA_REFRESH_SAFETY_SOURCE_IDS, new String[]{});
+
+        new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
+
+        verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
+    }
+
+    @Test
     public void sendSafetyData_whenSafetyCenterIsDisabled_sendsNoData() {
         when(mSafetyCenterStatusHolder.isEnabled(mApplicationContext)).thenReturn(false);
         Intent intent =
-                new Intent().putExtra(
-                        EXTRA_REFRESH_SAFETY_SOURCE_IDS,
-                        new String[]{ LockScreenSafetySource.SAFETY_SOURCE_ID });
+                new Intent()
+                        .setAction(ACTION_REFRESH_SAFETY_SOURCES)
+                        .putExtra(
+                                EXTRA_REFRESH_SAFETY_SOURCE_IDS,
+                                new String[]{ LockScreenSafetySource.SAFETY_SOURCE_ID });
 
         new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
 
@@ -82,7 +95,7 @@
     @Test
     public void sendSafetyData_whenSafetyCenterIsEnabled_withNullSourceIds_sendsNoData() {
         when(mSafetyCenterStatusHolder.isEnabled(mApplicationContext)).thenReturn(true);
-        Intent intent = new Intent();
+        Intent intent = new Intent().setAction(ACTION_REFRESH_SAFETY_SOURCES);
 
         new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
 
@@ -92,7 +105,10 @@
     @Test
     public void sendSafetyData_whenSafetyCenterIsEnabled_withNoSourceIds_sendsNoData() {
         when(mSafetyCenterStatusHolder.isEnabled(mApplicationContext)).thenReturn(true);
-        Intent intent = new Intent().putExtra(EXTRA_REFRESH_SAFETY_SOURCE_IDS, new String[]{});
+        Intent intent =
+                new Intent()
+                        .setAction(ACTION_REFRESH_SAFETY_SOURCES)
+                        .putExtra(EXTRA_REFRESH_SAFETY_SOURCE_IDS, new String[]{});
 
         new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
 
@@ -103,9 +119,11 @@
     public void sendSafetyData_withLockscreenSourceId_sendsLockscreenData() {
         when(mSafetyCenterStatusHolder.isEnabled(mApplicationContext)).thenReturn(true);
         Intent intent =
-                new Intent().putExtra(
-                        EXTRA_REFRESH_SAFETY_SOURCE_IDS,
-                        new String[]{ LockScreenSafetySource.SAFETY_SOURCE_ID });
+                new Intent()
+                        .setAction(ACTION_REFRESH_SAFETY_SOURCES)
+                        .putExtra(
+                                EXTRA_REFRESH_SAFETY_SOURCE_IDS,
+                                new String[]{ LockScreenSafetySource.SAFETY_SOURCE_ID });
 
         new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
         ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
@@ -120,13 +138,31 @@
     public void sendSafetyData_withBiometricsSourceId_sendsBiometricData() {
         when(mSafetyCenterStatusHolder.isEnabled(mApplicationContext)).thenReturn(true);
         Intent intent =
-                new Intent().putExtra(
-                        EXTRA_REFRESH_SAFETY_SOURCE_IDS,
-                        new String[]{ BiometricsSafetySource.SAFETY_SOURCE_ID });
+                new Intent()
+                        .setAction(ACTION_REFRESH_SAFETY_SOURCES)
+                        .putExtra(
+                                EXTRA_REFRESH_SAFETY_SOURCE_IDS,
+                                new String[]{ BiometricsSafetySource.SAFETY_SOURCE_ID });
 
         new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
 
         // TODO(b/215517420): Update this test when BiometricSafetySource is implemented.
         verify(mSafetyCenterManagerWrapper, never()).sendSafetyCenterUpdate(any(), any());
     }
+
+    @Test
+    public void sendSafetyData_onBootCompleted_sendsBiometricAndLockscreenData() {
+        when(mSafetyCenterStatusHolder.isEnabled(mApplicationContext)).thenReturn(true);
+        Intent intent = new Intent().setAction(Intent.ACTION_BOOT_COMPLETED);
+
+        // TODO(b/215517420): Update this test when BiometricSafetySource is implemented to test
+        // that biometrics data is also sent.
+        new SafetySourceBroadcastReceiver().onReceive(mApplicationContext, intent);
+        ArgumentCaptor<SafetySourceData> captor = ArgumentCaptor.forClass(SafetySourceData.class);
+        verify(mSafetyCenterManagerWrapper, times(1))
+                .sendSafetyCenterUpdate(any(), captor.capture());
+        SafetySourceData safetySourceData = captor.getValue();
+
+        assertThat(safetySourceData.getId()).isEqualTo(LockScreenSafetySource.SAFETY_SOURCE_ID);
+    }
 }