Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f348c2c0 authored by Elliot Sisteron's avatar Elliot Sisteron Committed by Android (Google) Code Review
Browse files

Merge "Handle "Blocked by your IT admin" better." into main

parents 8cef63ac 8744e021
Loading
Loading
Loading
Loading
+72 −70
Original line number Original line Diff line number Diff line
@@ -46,11 +46,11 @@ public final class LockScreenSafetySource {
    private static final int REQUEST_CODE_SCREEN_LOCK = 1;
    private static final int REQUEST_CODE_SCREEN_LOCK = 1;
    private static final int REQUEST_CODE_SCREEN_LOCK_SETTINGS = 2;
    private static final int REQUEST_CODE_SCREEN_LOCK_SETTINGS = 2;


    private LockScreenSafetySource() {
    private LockScreenSafetySource() {}
    }


    /** Sets lock screen safety data for Safety Center. */
    /** Sets lock screen safety data for Safety Center. */
    public static void setSafetySourceData(Context context,
    public static void setSafetySourceData(
            Context context,
            ScreenLockPreferenceDetailsUtils screenLockPreferenceDetailsUtils,
            ScreenLockPreferenceDetailsUtils screenLockPreferenceDetailsUtils,
            SafetyEvent safetyEvent) {
            SafetyEvent safetyEvent) {
        if (!SafetyCenterManagerWrapper.get().isEnabled(context)) {
        if (!SafetyCenterManagerWrapper.get().isEnabled(context)) {
@@ -63,59 +63,61 @@ public final class LockScreenSafetySource {
        }
        }


        if (!screenLockPreferenceDetailsUtils.isAvailable()) {
        if (!screenLockPreferenceDetailsUtils.isAvailable()) {
            SafetyCenterManagerWrapper.get().setSafetySourceData(
            SafetyCenterManagerWrapper.get()
                    context,
                    .setSafetySourceData(
                    SAFETY_SOURCE_ID,
                            context, SAFETY_SOURCE_ID, /* safetySourceData= */ null, safetyEvent);
                    /* safetySourceData= */ null,
                    safetyEvent
            );
            return;
            return;
        }
        }


        final int userId = UserHandle.myUserId();
        final int userId = UserHandle.myUserId();
        final RestrictedLockUtils.EnforcedAdmin admin = RestrictedLockUtilsInternal
        final RestrictedLockUtils.EnforcedAdmin admin =
                .checkIfPasswordQualityIsSet(context, userId);
                RestrictedLockUtilsInternal.checkIfPasswordQualityIsSet(context, userId);
        final PendingIntent pendingIntent = createPendingIntent(context,
        final PendingIntent pendingIntent =
                createPendingIntent(
                        context,
                        screenLockPreferenceDetailsUtils.getLaunchChooseLockGenericFragmentIntent(
                        screenLockPreferenceDetailsUtils.getLaunchChooseLockGenericFragmentIntent(
                        SettingsEnums.SAFETY_CENTER), REQUEST_CODE_SCREEN_LOCK);
                                SettingsEnums.SAFETY_CENTER),
        final IconAction gearMenuIconAction = createGearMenuIconAction(context,
                        REQUEST_CODE_SCREEN_LOCK);
                screenLockPreferenceDetailsUtils);
        final IconAction gearMenuIconAction =
        final boolean enabled =
                createGearMenuIconAction(context, screenLockPreferenceDetailsUtils);
        final boolean lockScreenAllowedByAdmin =
                !screenLockPreferenceDetailsUtils.isPasswordQualityManaged(userId, admin);
                !screenLockPreferenceDetailsUtils.isPasswordQualityManaged(userId, admin);
        final boolean isLockPatternSecure = screenLockPreferenceDetailsUtils.isLockPatternSecure();
        final boolean isLockPatternSecure = screenLockPreferenceDetailsUtils.isLockPatternSecure();
        final int severityLevel = enabled
        final int severityLevel =
                lockScreenAllowedByAdmin
                        ? isLockPatternSecure
                        ? isLockPatternSecure
                                ? SafetySourceData.SEVERITY_LEVEL_INFORMATION
                                ? SafetySourceData.SEVERITY_LEVEL_INFORMATION
                                : SafetySourceData.SEVERITY_LEVEL_RECOMMENDATION
                                : SafetySourceData.SEVERITY_LEVEL_RECOMMENDATION
                        : SafetySourceData.SEVERITY_LEVEL_UNSPECIFIED;
                        : SafetySourceData.SEVERITY_LEVEL_UNSPECIFIED;



        final SafetySourceStatus status =
        final SafetySourceStatus status = new SafetySourceStatus.Builder(
                new SafetySourceStatus.Builder(
                                context.getString(R.string.unlock_set_unlock_launch_picker_title),
                                context.getString(R.string.unlock_set_unlock_launch_picker_title),
                screenLockPreferenceDetailsUtils.getSummary(UserHandle.myUserId()),
                                lockScreenAllowedByAdmin
                                        ? screenLockPreferenceDetailsUtils.getSummary(
                                                UserHandle.myUserId())
                                        : context.getString(R.string.disabled_by_policy_title),
                                severityLevel)
                                severityLevel)
                .setPendingIntent(pendingIntent)
                        .setPendingIntent(lockScreenAllowedByAdmin ? pendingIntent : null)
                .setEnabled(enabled)
                        .setEnabled(lockScreenAllowedByAdmin)
                .setIconAction(gearMenuIconAction).build();
                        .setIconAction(lockScreenAllowedByAdmin ? gearMenuIconAction : null)
                        .build();
        final SafetySourceData.Builder safetySourceDataBuilder =
        final SafetySourceData.Builder safetySourceDataBuilder =
                new SafetySourceData.Builder().setStatus(status);
                new SafetySourceData.Builder().setStatus(status);
        if (enabled && !isLockPatternSecure) {
        if (lockScreenAllowedByAdmin && !isLockPatternSecure) {
            safetySourceDataBuilder.addIssue(createNoScreenLockIssue(context, pendingIntent));
            safetySourceDataBuilder.addIssue(createNoScreenLockIssue(context, pendingIntent));
        }
        }
        final SafetySourceData safetySourceData = safetySourceDataBuilder.build();
        final SafetySourceData safetySourceData = safetySourceDataBuilder.build();


        SafetyCenterManagerWrapper.get().setSafetySourceData(
        SafetyCenterManagerWrapper.get()
                context,
                .setSafetySourceData(context, SAFETY_SOURCE_ID, safetySourceData, safetyEvent);
                SAFETY_SOURCE_ID,
                safetySourceData,
                safetyEvent
        );
    }
    }


    /** Notifies Safety Center of a change in lock screen settings. */
    /** Notifies Safety Center of a change in lock screen settings. */
    public static void onLockScreenChange(Context context) {
    public static void onLockScreenChange(Context context) {
        setSafetySourceData(
        setSafetySourceData(
                context, new ScreenLockPreferenceDetailsUtils(context),
                context,
                new ScreenLockPreferenceDetailsUtils(context),
                new SafetyEvent.Builder(SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build());
                new SafetyEvent.Builder(SAFETY_EVENT_TYPE_SOURCE_STATE_CHANGED).build());


        // Also send refreshed safety center data for biometrics, since changing lockscreen settings
        // Also send refreshed safety center data for biometrics, since changing lockscreen settings
@@ -123,33 +125,33 @@ public final class LockScreenSafetySource {
        BiometricsSafetySource.onBiometricsChanged(context);
        BiometricsSafetySource.onBiometricsChanged(context);
    }
    }


    private static IconAction createGearMenuIconAction(Context context,
    private static IconAction createGearMenuIconAction(
            ScreenLockPreferenceDetailsUtils screenLockPreferenceDetailsUtils) {
            Context context, ScreenLockPreferenceDetailsUtils screenLockPreferenceDetailsUtils) {
        return screenLockPreferenceDetailsUtils.shouldShowGearMenu() ? new IconAction(
        return screenLockPreferenceDetailsUtils.shouldShowGearMenu()
                ? new IconAction(
                        IconAction.ICON_TYPE_GEAR,
                        IconAction.ICON_TYPE_GEAR,
                createPendingIntent(context,
                        createPendingIntent(
                                context,
                                screenLockPreferenceDetailsUtils.getLaunchScreenLockSettingsIntent(
                                screenLockPreferenceDetailsUtils.getLaunchScreenLockSettingsIntent(
                                        SettingsEnums.SAFETY_CENTER),
                                        SettingsEnums.SAFETY_CENTER),
                                REQUEST_CODE_SCREEN_LOCK_SETTINGS))
                                REQUEST_CODE_SCREEN_LOCK_SETTINGS))
                : null;
                : null;
    }
    }


    private static PendingIntent createPendingIntent(Context context, Intent intent,
    private static PendingIntent createPendingIntent(
            int requestCode) {
            Context context, Intent intent, int requestCode) {
        return PendingIntent
        return PendingIntent.getActivity(
                .getActivity(
                context, requestCode, intent, PendingIntent.FLAG_IMMUTABLE);
                        context,
                        requestCode,
                        intent,
                        PendingIntent.FLAG_IMMUTABLE);
    }
    }


    private static SafetySourceIssue createNoScreenLockIssue(Context context,
    private static SafetySourceIssue createNoScreenLockIssue(
            PendingIntent pendingIntent) {
            Context context, PendingIntent pendingIntent) {
        final SafetySourceIssue.Action action = new SafetySourceIssue.Action.Builder(
        final SafetySourceIssue.Action action =
                new SafetySourceIssue.Action.Builder(
                                SET_SCREEN_LOCK_ACTION_ID,
                                SET_SCREEN_LOCK_ACTION_ID,
                                context.getString(R.string.no_screen_lock_issue_action_label),
                                context.getString(R.string.no_screen_lock_issue_action_label),
                pendingIntent).build();
                                pendingIntent)
                        .build();
        // Custom notification deliberately has zero actions
        // Custom notification deliberately has zero actions
        final SafetySourceIssue.Notification customNotification =
        final SafetySourceIssue.Notification customNotification =
                new SafetySourceIssue.Notification.Builder(
                new SafetySourceIssue.Notification.Builder(
+164 −106

File changed.

Preview size limit exceeded, changes collapsed.