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

Commit cf6ec6a2 authored by Marie Matheson's avatar Marie Matheson Committed by Android (Google) Code Review
Browse files

Merge "Adds LockScreen SafetySource and SafetySource broadcast receivers."

parents f676ff2b 125a84f0
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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>
+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.
    }
}
+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);
    }
}
+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;
        }
    }
}
+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