| /* |
| * 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.content.Context; |
| import android.content.Intent; |
| import android.os.UserHandle; |
| import android.safetycenter.SafetySourceData; |
| import android.safetycenter.SafetySourceStatus; |
| import android.safetycenter.SafetySourceStatus.IconAction; |
| |
| import com.android.settings.R; |
| import com.android.settings.security.ScreenLockPreferenceDetailsUtils; |
| import com.android.settingslib.RestrictedLockUtils; |
| import com.android.settingslib.RestrictedLockUtilsInternal; |
| |
| /** Lock Screen Safety Source for Safety Center. */ |
| public final class LockScreenSafetySource { |
| |
| public static final String SAFETY_SOURCE_ID = "LockScreen"; |
| |
| private LockScreenSafetySource() { |
| } |
| |
| /** Sends lock screen safety data to Safety Center. */ |
| public static void sendSafetyData(Context context, |
| ScreenLockPreferenceDetailsUtils screenLockPreferenceDetailsUtils) { |
| if (!SafetyCenterManagerWrapper.get().isEnabled(context)) { |
| return; |
| } |
| |
| if (!screenLockPreferenceDetailsUtils.isAvailable()) { |
| return; |
| } |
| |
| final int userId = UserHandle.myUserId(); |
| final RestrictedLockUtils.EnforcedAdmin admin = RestrictedLockUtilsInternal |
| .checkIfPasswordQualityIsSet(context, userId); |
| final PendingIntent pendingIntent = createPendingIntent(context, |
| screenLockPreferenceDetailsUtils.getLaunchChooseLockGenericFragmentIntent()); |
| final IconAction gearMenuIconAction = createGearMenuIconAction(context, |
| screenLockPreferenceDetailsUtils); |
| |
| final SafetySourceStatus status = new SafetySourceStatus.Builder( |
| context.getString(R.string.unlock_set_unlock_launch_picker_title), |
| screenLockPreferenceDetailsUtils.getSummary(UserHandle.myUserId()), |
| screenLockPreferenceDetailsUtils.isLockPatternSecure() |
| ? SafetySourceStatus.STATUS_LEVEL_OK |
| : SafetySourceStatus.STATUS_LEVEL_RECOMMENDATION, |
| pendingIntent) |
| .setEnabled( |
| !screenLockPreferenceDetailsUtils.isPasswordQualityManaged(userId, admin)) |
| .setIconAction(gearMenuIconAction).build(); |
| final SafetySourceData safetySourceData = new SafetySourceData.Builder( |
| SAFETY_SOURCE_ID).setStatus(status).build(); |
| |
| SafetyCenterManagerWrapper.get().sendSafetyCenterUpdate(context, safetySourceData); |
| } |
| |
| private static IconAction createGearMenuIconAction(Context context, |
| ScreenLockPreferenceDetailsUtils screenLockPreferenceDetailsUtils) { |
| return screenLockPreferenceDetailsUtils.shouldShowGearMenu() ? new IconAction( |
| IconAction.ICON_TYPE_GEAR, |
| createPendingIntent(context, |
| screenLockPreferenceDetailsUtils.getLaunchScreenLockSettingsIntent())) |
| : null; |
| } |
| |
| private static PendingIntent createPendingIntent(Context context, Intent intent) { |
| return PendingIntent |
| .getActivity( |
| context, |
| 0 /* requestCode */, |
| intent, |
| PendingIntent.FLAG_IMMUTABLE); |
| } |
| } |