diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 92dfbe51aac..7665af3e0f6 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -4367,6 +4367,7 @@ android:exported="true"> + diff --git a/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiver.java b/src/com/android/settings/safetycenter/SafetySourceBroadcastReceiver.java index 0fd0c0dee22..bdc52ad59ca 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 android.content.Intent; 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 @@ public class SafetySourceBroadcastReceiver extends BroadcastReceiver { return; } - String[] sourceIdsExtra = intent.getStringArrayExtra(EXTRA_REFRESH_SAFETY_SOURCE_IDS); - if (sourceIdsExtra != null && sourceIdsExtra.length > 0) { - ImmutableList 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)); } + return; + } - if (sourceIds.contains(BiometricsSafetySource.SAFETY_SOURCE_ID)) { - BiometricsSafetySource.sendSafetyData(context); - } + + if (ACTION_BOOT_COMPLETED.equals(intent.getAction())) { + refreshAllSafetySources(context); } } + + private static void refreshSafetySources(Context context, List 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 8806e509a94..6c9addd6a3e 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; @@ -66,13 +67,25 @@ public class SafetySourceBroadcastReceiverTest { SafetyCenterStatusHolder.sInstance = null; } + @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 @@ public class SafetySourceBroadcastReceiverTest { @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 @@ public class SafetySourceBroadcastReceiverTest { @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 class SafetySourceBroadcastReceiverTest { 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 captor = ArgumentCaptor.forClass(SafetySourceData.class); @@ -120,13 +138,31 @@ public class SafetySourceBroadcastReceiverTest { 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 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); + } }