From 6d90cdfea7c0a0a9d7158a19a6642c4bc7a0450b Mon Sep 17 00:00:00 2001 From: Mill Chen Date: Mon, 25 Mar 2019 16:07:47 -0700 Subject: [PATCH] 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 --- .../conditional/GrayscaleConditionController.java | 28 +++++++++++++++++++++- .../GrayscaleConditionControllerTest.java | 9 +++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionController.java b/src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionController.java index 664707def6..341e061256 100644 --- a/src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionController.java +++ b/src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionController.java @@ -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(); + } + } } } diff --git a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionControllerTest.java b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionControllerTest.java index 8c24735c77..2fe4697f09 100644 --- a/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionControllerTest.java +++ b/tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionControllerTest.java @@ -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)); + } } -- 2.11.0