OSDN Git Service

Broadcast an intent after turning off Grayscale
authorMill Chen <millchen@google.com>
Mon, 25 Mar 2019 23:07:47 +0000 (16:07 -0700)
committerMill Chen <millchen@google.com>
Tue, 26 Mar 2019 18:37:16 +0000 (11:37 -0700)
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

src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionController.java
tests/robotests/src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionControllerTest.java

index 664707d..341e061 100644 (file)
 
 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();
+            }
+        }
     }
 }
index 8c24735..2fe4697 100644 (file)
@@ -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));
+    }
 }