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

Commit 1e2bbb47 authored by mrulhania's avatar mrulhania Committed by Manjeet Rulhania
Browse files

Fix privacy controls redirection

When camera/mic global indicators are disabled,
then clicking on sensor warning banner, long press
on camera/mic QS tile or notification are redirecting
user to safety center home page, when safety center is
enabled, This leaves the user confused if they wish
to switch/enable camera/mic global toggle.

Bug: 289038596
Test: atest CameraToggleTileTest
Test: atest MicrophoneToggleTileTest
Test: test manually as well.
Change-Id: I279d5bd83eb7d4e55515ff6e55be6d4e9f64bb41
parent a9730092
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -687,7 +687,8 @@ public final class Settings {
            "com.android.settings.MONITORING_CERT_INFO";
    /**
     * Activity Action: Show settings to allow configuration of privacy options.
     * Activity Action: Show settings to allow configuration of privacy options, i.e. permission
     * manager, privacy dashboard, privacy controls and more.
     * <p>
     * In some cases, a matching Activity may not exist, so ensure you
     * safeguard against this.
@@ -700,6 +701,21 @@ public final class Settings {
    public static final String ACTION_PRIVACY_SETTINGS =
            "android.settings.PRIVACY_SETTINGS";
    /**
     * Activity Action: Show privacy controls sub-page, i.e. privacy (camera/mic) toggles and more.
     * <p>
     * In some cases, a matching Activity may not exist, so ensure you
     * safeguard against this.
     * <p>
     * Input: Nothing.
     * <p>
     * Output: Nothing.
     * @hide
     */
    @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
    public static final String ACTION_PRIVACY_CONTROLS =
            "android.settings.PRIVACY_CONTROLS";
    /**
     * Activity Action: Show settings to allow configuration of VPN.
     * <p>
+4 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.hardware.SensorPrivacyManager.Sensors.Sensor;
import android.os.Handler;
import android.os.Looper;
import android.provider.DeviceConfig;
import android.safetycenter.SafetyCenterManager;

import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
@@ -60,10 +61,11 @@ public class CameraToggleTile extends SensorPrivacyToggleTile {
            ActivityStarter activityStarter,
            QSLogger qsLogger,
            IndividualSensorPrivacyController sensorPrivacyController,
            KeyguardStateController keyguardStateController) {
            KeyguardStateController keyguardStateController,
            SafetyCenterManager safetyCenterManager) {
        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                statusBarStateController, activityStarter, qsLogger, sensorPrivacyController,
                keyguardStateController);
                keyguardStateController, safetyCenterManager);
    }

    @Override
+4 −2
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.hardware.SensorPrivacyManager.Sensors.Sensor;
import android.os.Handler;
import android.os.Looper;
import android.provider.DeviceConfig;
import android.safetycenter.SafetyCenterManager;

import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
@@ -60,10 +61,11 @@ public class MicrophoneToggleTile extends SensorPrivacyToggleTile {
            ActivityStarter activityStarter,
            QSLogger qsLogger,
            IndividualSensorPrivacyController sensorPrivacyController,
            KeyguardStateController keyguardStateController) {
            KeyguardStateController keyguardStateController,
            SafetyCenterManager safetyCenterManager) {
        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                statusBarStateController, activityStarter, qsLogger, sensorPrivacyController,
                keyguardStateController);
                keyguardStateController, safetyCenterManager);
    }

    @Override
+11 −2
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.hardware.SensorPrivacyManager.Sensors.Sensor;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
import android.safetycenter.SafetyCenterManager;
import android.service.quicksettings.Tile;
import android.view.View;
import android.widget.Switch;
@@ -54,6 +55,8 @@ public abstract class SensorPrivacyToggleTile extends QSTileImpl<QSTile.BooleanS
    private final KeyguardStateController mKeyguard;
    protected IndividualSensorPrivacyController mSensorPrivacyController;

    private final SafetyCenterManager mSafetyCenterManager;

    /**
     * @return Id of the sensor that will be toggled
     */
@@ -80,11 +83,13 @@ public abstract class SensorPrivacyToggleTile extends QSTileImpl<QSTile.BooleanS
            ActivityStarter activityStarter,
            QSLogger qsLogger,
            IndividualSensorPrivacyController sensorPrivacyController,
            KeyguardStateController keyguardStateController) {
            KeyguardStateController keyguardStateController,
            SafetyCenterManager safetyCenterManager) {
        super(host, uiEventLogger, backgroundLooper, mainHandler, falsingManager, metricsLogger,
                statusBarStateController, activityStarter, qsLogger);
        mSensorPrivacyController = sensorPrivacyController;
        mKeyguard = keyguardStateController;
        mSafetyCenterManager = safetyCenterManager;
        mSensorPrivacyController.observe(getLifecycle(), this);
    }

@@ -133,8 +138,12 @@ public abstract class SensorPrivacyToggleTile extends QSTileImpl<QSTile.BooleanS

    @Override
    public Intent getLongClickIntent() {
        if (mSafetyCenterManager.isSafetyCenterEnabled()) {
            return new Intent(Settings.ACTION_PRIVACY_CONTROLS);
        } else {
            return new Intent(Settings.ACTION_PRIVACY_SETTINGS);
        }
    }

    @Override
    public void onSensorBlockedChanged(int sensor, boolean blocked) {
+15 −1
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.systemui.qs.tiles

import android.os.Handler
import android.provider.Settings
import android.safetycenter.SafetyCenterManager
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import androidx.test.filters.SmallTest
@@ -68,6 +70,8 @@ class CameraToggleTileTest : SysuiTestCase() {
    private lateinit var keyguardStateController: KeyguardStateController
    @Mock
    private lateinit var uiEventLogger: QsEventLoggerFake
    @Mock
    private lateinit var safetyCenterManager: SafetyCenterManager

    private lateinit var testableLooper: TestableLooper
    private lateinit var tile: CameraToggleTile
@@ -89,7 +93,8 @@ class CameraToggleTileTest : SysuiTestCase() {
                activityStarter,
                qsLogger,
                privacyController,
                keyguardStateController)
                keyguardStateController,
                safetyCenterManager)
    }

    @After
@@ -117,4 +122,13 @@ class CameraToggleTileTest : SysuiTestCase() {
        assertThat(state.icon)
                .isEqualTo(QSTileImpl.ResourceIcon.get(R.drawable.qs_camera_access_icon_off))
    }

    @Test
    fun testLongClickIntent() {
        whenever(safetyCenterManager.isSafetyCenterEnabled).thenReturn(true)
        assertThat(tile.longClickIntent?.action).isEqualTo(Settings.ACTION_PRIVACY_CONTROLS)

        whenever(safetyCenterManager.isSafetyCenterEnabled).thenReturn(false)
        assertThat(tile.longClickIntent?.action).isEqualTo(Settings.ACTION_PRIVACY_SETTINGS)
    }
}
Loading