Loading AndroidManifest.xml +7 −0 Original line number Diff line number Diff line Loading @@ -4341,6 +4341,13 @@ android:value="true" /> </activity> <receiver android:name=".safetycenter.SafetySourceBroadcastReceiver" android:exported="true"> <intent-filter> <action android:name="android.safetycenter.action.REFRESH_SAFETY_SOURCES"/> </intent-filter> </receiver> <!-- This is the longest AndroidManifest.xml ever. --> </application> </manifest> src/com/android/settings/safetycenter/BiometricsSafetySource.java 0 → 100644 +37 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.safetycenter; import android.content.Context; /** Combined Biometrics Safety Source for Safety Center. */ public final class BiometricsSafetySource { public static final String SAFETY_SOURCE_ID = "BiometricsSafetySource"; private BiometricsSafetySource() {} /** Sends biometric safety data to Safety Center. */ public static void sendSafetyData(Context context) { if (!SafetyCenterStatusHolder.get().isEnabled(context)) { return; } // TODO(b/215517420): Send biometric data to Safety Center if there are biometrics available // on this device. } } src/com/android/settings/safetycenter/LockScreenSafetySource.java 0 → 100644 +67 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.safetycenter; import android.app.PendingIntent; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.Intent; import android.safetycenter.SafetySourceData; import android.safetycenter.SafetySourceStatus; import com.android.settings.core.SubSettingLauncher; import com.android.settings.password.ChooseLockGeneric; import com.android.settingslib.transition.SettingsTransitionHelper; /** Lock Screen Safety Source for Safety Center. */ public final class LockScreenSafetySource { public static final String SAFETY_SOURCE_ID = "LockScreenSafetySource"; private LockScreenSafetySource() {} /** Sends lock screen safety data to Safety Center. */ public static void sendSafetyData(Context context) { if (!SafetyCenterStatusHolder.get().isEnabled(context)) { return; } // TODO(b/215515298): Replace placeholder SafetySourceData with real data. // TODO(b/217409995): Replace SECURITY_ALTERNATIVE with Safety Center metrics category. Intent clickIntent = new SubSettingLauncher(context) .setDestination(ChooseLockGeneric.ChooseLockGenericFragment.class.getName()) .setSourceMetricsCategory(SettingsEnums.SECURITY_ALTERNATIVE) .setTransitionType(SettingsTransitionHelper.TransitionType.TRANSITION_SLIDE) .toIntent(); PendingIntent pendingIntent = PendingIntent .getActivity( context, 0 /* requestCode */, clickIntent, PendingIntent.FLAG_IMMUTABLE); SafetySourceData safetySourceData = new SafetySourceData.Builder(SAFETY_SOURCE_ID).setStatus( new SafetySourceStatus.Builder( "Lock Screen", "Lock screen settings", SafetySourceStatus.STATUS_LEVEL_OK, pendingIntent).build() ).build(); SafetyCenterManagerWrapper.get().sendSafetyCenterUpdate(context, safetySourceData); } } src/com/android/settings/safetycenter/SafetyCenterManagerWrapper.java 0 → 100644 +61 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.safetycenter; import android.content.Context; import android.safetycenter.SafetyCenterManager; import android.safetycenter.SafetySourceData; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; /** A wrapper for the SafetyCenterManager system service. */ public class SafetyCenterManagerWrapper { private static final String TAG = "SafetyCenterManagerWrapper"; @VisibleForTesting public static SafetyCenterManagerWrapper sInstance; private SafetyCenterManagerWrapper() {} /** Returns an instance of {@link SafetyCenterManagerWrapper}. */ public static SafetyCenterManagerWrapper get() { if (sInstance == null) { sInstance = new SafetyCenterManagerWrapper(); } return sInstance; } /** Sends updated safety source data to Safety Center. */ public void sendSafetyCenterUpdate(Context context, SafetySourceData safetySourceData) { SafetyCenterManager safetyCenterManager = context.getSystemService(SafetyCenterManager.class); if (safetyCenterManager == null) { Log.e(TAG, "System service SAFETY_CENTER_SERVICE (SafetyCenterManager) is null"); return; } try { safetyCenterManager.sendSafetyCenterUpdate(safetySourceData); } catch (Exception e) { Log.e(TAG, "Failed to send SafetySourceData", e); return; } } } src/com/android/settings/safetycenter/SafetySourceBroadcastReceiver.java 0 → 100644 +47 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.safetycenter; import static android.safetycenter.SafetyCenterManager.EXTRA_REFRESH_SAFETY_SOURCE_IDS; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import com.google.common.collect.ImmutableList; /** Broadcast receiver for handling requests from Safety Center for fresh data. */ public class SafetySourceBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (!SafetyCenterStatusHolder.get().isEnabled(context)) { return; } ImmutableList<String> sourceIds = ImmutableList.copyOf(intent.getStringArrayExtra(EXTRA_REFRESH_SAFETY_SOURCE_IDS)); if (sourceIds.contains(LockScreenSafetySource.SAFETY_SOURCE_ID)) { LockScreenSafetySource.sendSafetyData(context); } if (sourceIds.contains(BiometricsSafetySource.SAFETY_SOURCE_ID)) { BiometricsSafetySource.sendSafetyData(context); } } } Loading
AndroidManifest.xml +7 −0 Original line number Diff line number Diff line Loading @@ -4341,6 +4341,13 @@ android:value="true" /> </activity> <receiver android:name=".safetycenter.SafetySourceBroadcastReceiver" android:exported="true"> <intent-filter> <action android:name="android.safetycenter.action.REFRESH_SAFETY_SOURCES"/> </intent-filter> </receiver> <!-- This is the longest AndroidManifest.xml ever. --> </application> </manifest>
src/com/android/settings/safetycenter/BiometricsSafetySource.java 0 → 100644 +37 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.safetycenter; import android.content.Context; /** Combined Biometrics Safety Source for Safety Center. */ public final class BiometricsSafetySource { public static final String SAFETY_SOURCE_ID = "BiometricsSafetySource"; private BiometricsSafetySource() {} /** Sends biometric safety data to Safety Center. */ public static void sendSafetyData(Context context) { if (!SafetyCenterStatusHolder.get().isEnabled(context)) { return; } // TODO(b/215517420): Send biometric data to Safety Center if there are biometrics available // on this device. } }
src/com/android/settings/safetycenter/LockScreenSafetySource.java 0 → 100644 +67 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.safetycenter; import android.app.PendingIntent; import android.app.settings.SettingsEnums; import android.content.Context; import android.content.Intent; import android.safetycenter.SafetySourceData; import android.safetycenter.SafetySourceStatus; import com.android.settings.core.SubSettingLauncher; import com.android.settings.password.ChooseLockGeneric; import com.android.settingslib.transition.SettingsTransitionHelper; /** Lock Screen Safety Source for Safety Center. */ public final class LockScreenSafetySource { public static final String SAFETY_SOURCE_ID = "LockScreenSafetySource"; private LockScreenSafetySource() {} /** Sends lock screen safety data to Safety Center. */ public static void sendSafetyData(Context context) { if (!SafetyCenterStatusHolder.get().isEnabled(context)) { return; } // TODO(b/215515298): Replace placeholder SafetySourceData with real data. // TODO(b/217409995): Replace SECURITY_ALTERNATIVE with Safety Center metrics category. Intent clickIntent = new SubSettingLauncher(context) .setDestination(ChooseLockGeneric.ChooseLockGenericFragment.class.getName()) .setSourceMetricsCategory(SettingsEnums.SECURITY_ALTERNATIVE) .setTransitionType(SettingsTransitionHelper.TransitionType.TRANSITION_SLIDE) .toIntent(); PendingIntent pendingIntent = PendingIntent .getActivity( context, 0 /* requestCode */, clickIntent, PendingIntent.FLAG_IMMUTABLE); SafetySourceData safetySourceData = new SafetySourceData.Builder(SAFETY_SOURCE_ID).setStatus( new SafetySourceStatus.Builder( "Lock Screen", "Lock screen settings", SafetySourceStatus.STATUS_LEVEL_OK, pendingIntent).build() ).build(); SafetyCenterManagerWrapper.get().sendSafetyCenterUpdate(context, safetySourceData); } }
src/com/android/settings/safetycenter/SafetyCenterManagerWrapper.java 0 → 100644 +61 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.safetycenter; import android.content.Context; import android.safetycenter.SafetyCenterManager; import android.safetycenter.SafetySourceData; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; /** A wrapper for the SafetyCenterManager system service. */ public class SafetyCenterManagerWrapper { private static final String TAG = "SafetyCenterManagerWrapper"; @VisibleForTesting public static SafetyCenterManagerWrapper sInstance; private SafetyCenterManagerWrapper() {} /** Returns an instance of {@link SafetyCenterManagerWrapper}. */ public static SafetyCenterManagerWrapper get() { if (sInstance == null) { sInstance = new SafetyCenterManagerWrapper(); } return sInstance; } /** Sends updated safety source data to Safety Center. */ public void sendSafetyCenterUpdate(Context context, SafetySourceData safetySourceData) { SafetyCenterManager safetyCenterManager = context.getSystemService(SafetyCenterManager.class); if (safetyCenterManager == null) { Log.e(TAG, "System service SAFETY_CENTER_SERVICE (SafetyCenterManager) is null"); return; } try { safetyCenterManager.sendSafetyCenterUpdate(safetySourceData); } catch (Exception e) { Log.e(TAG, "Failed to send SafetySourceData", e); return; } } }
src/com/android/settings/safetycenter/SafetySourceBroadcastReceiver.java 0 → 100644 +47 −0 Original line number Diff line number Diff line /* * Copyright (C) 2022 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.safetycenter; import static android.safetycenter.SafetyCenterManager.EXTRA_REFRESH_SAFETY_SOURCE_IDS; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import com.google.common.collect.ImmutableList; /** Broadcast receiver for handling requests from Safety Center for fresh data. */ public class SafetySourceBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (!SafetyCenterStatusHolder.get().isEnabled(context)) { return; } ImmutableList<String> sourceIds = ImmutableList.copyOf(intent.getStringArrayExtra(EXTRA_REFRESH_SAFETY_SOURCE_IDS)); if (sourceIds.contains(LockScreenSafetySource.SAFETY_SOURCE_ID)) { LockScreenSafetySource.sendSafetyData(context); } if (sourceIds.contains(BiometricsSafetySource.SAFETY_SOURCE_ID)) { BiometricsSafetySource.sendSafetyData(context); } } }