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

Commit 6d90cdfe authored by Mill Chen's avatar Mill Chen
Browse files

Broadcast an intent after turning off Grayscale

Settings will send a broadcast when the user disable Grayscale in
Settings. Also, Settings registers a broadcast receiver to monitor the
status changed of Grayscale.

Bug: 118387886
Test: robotests
Change-Id: I92d1b9adf7a600b4abac943ebbd5a11d02d3d1b8
parent c5dd4e50
Loading
Loading
Loading
Loading
+27 −1
Original line number Diff line number Diff line
@@ -16,9 +16,12 @@

package com.android.settings.homepage.contextualcards.conditional;

import android.Manifest;
import android.app.settings.SettingsEnums;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.hardware.display.ColorDisplayManager;
import android.util.Log;

@@ -32,10 +35,15 @@ public class GrayscaleConditionController implements ConditionalCardController {
    static final int ID = Objects.hash("GrayscaleConditionController");

    private static final String TAG = "GrayscaleCondition";
    private static final String ACTION_GRAYSCALE_CHANGED =
            "android.settings.action.GRAYSCALE_CHANGED";
    private static final IntentFilter GRAYSCALE_CHANGED_FILTER = new IntentFilter(
            ACTION_GRAYSCALE_CHANGED);

    private final Context mAppContext;
    private final ConditionManager mConditionManager;
    private final ColorDisplayManager mColorDisplayManager;
    private final Receiver mReceiver;

    private Intent mIntent;

@@ -43,6 +51,7 @@ public class GrayscaleConditionController implements ConditionalCardController {
        mAppContext = appContext;
        mConditionManager = conditionManager;
        mColorDisplayManager = mAppContext.getSystemService(ColorDisplayManager.class);
        mReceiver = new Receiver();
    }

    @Override
@@ -72,6 +81,7 @@ public class GrayscaleConditionController implements ConditionalCardController {
    public void onActionClick() {
        // Turn off grayscale
        mColorDisplayManager.setSaturationLevel(100 /* staturationLevel */);
        sendBroadcast();
        mConditionManager.onConditionChanged();
    }

@@ -93,11 +103,27 @@ public class GrayscaleConditionController implements ConditionalCardController {

    @Override
    public void startMonitoringStateChange() {

        mAppContext.registerReceiver(mReceiver, GRAYSCALE_CHANGED_FILTER,
                Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS, null /* scheduler */);
    }

    @Override
    public void stopMonitoringStateChange() {
        mAppContext.unregisterReceiver(mReceiver);
    }

    private void sendBroadcast() {
        final Intent intent = new Intent();
        intent.setAction(ACTION_GRAYSCALE_CHANGED);
        mAppContext.sendBroadcast(intent, Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS);
    }

    public class Receiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            if (ACTION_GRAYSCALE_CHANGED.equals(intent.getAction())) {
                mConditionManager.onConditionChanged();
            }
        }
    }
}
+9 −0
Original line number Diff line number Diff line
@@ -18,11 +18,13 @@ package com.android.settings.homepage.contextualcards.conditional;

import static com.google.common.truth.Truth.assertThat;

import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;

import android.content.Context;
import android.content.Intent;
import android.hardware.display.ColorDisplayManager;

import org.junit.Before;
@@ -80,4 +82,11 @@ public class GrayscaleConditionControllerTest {

        verify(mConditionManager).onConditionChanged();
    }

    @Test
    public void onActionClick_shouldSendBroadcast() {
        mController.onActionClick();

        verify(mContext).sendBroadcast(any(Intent.class), any(String.class));
    }
}