From 2ef3dacad855a3493f630b208b323fb2f6b29fa9 Mon Sep 17 00:00:00 2001 From: Mill Chen Date: Wed, 27 Mar 2019 14:27:50 -0700 Subject: [PATCH] Use explicit intent to broadcast grayscale state changed Query PackageManager for receivers that can handle the intent and send an explicit intent to these receivers. Change-Id: I06f500c20ae0a20d689cf0805b6a82247ea55e73 Fix: 118387886 Test: robotests --- .../conditional/GrayscaleConditionController.java | 20 +++++++++++++++----- .../GrayscaleConditionControllerTest.java | 13 ++++++++++++- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionController.java b/src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionController.java index 341e061256..61b24df6cb 100644 --- a/src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionController.java +++ b/src/com/android/settings/homepage/contextualcards/conditional/GrayscaleConditionController.java @@ -22,21 +22,27 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.hardware.display.ColorDisplayManager; import android.util.Log; +import androidx.annotation.VisibleForTesting; + import com.android.settings.R; import com.android.settings.homepage.contextualcards.ContextualCard; import java.net.URISyntaxException; +import java.util.List; import java.util.Objects; public class GrayscaleConditionController implements ConditionalCardController { static final int ID = Objects.hash("GrayscaleConditionController"); + @VisibleForTesting + static final String ACTION_GRAYSCALE_CHANGED = "android.settings.action.GRAYSCALE_CHANGED"; + 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); @@ -113,9 +119,13 @@ public class GrayscaleConditionController implements ConditionalCardController { } private void sendBroadcast() { - final Intent intent = new Intent(); - intent.setAction(ACTION_GRAYSCALE_CHANGED); - mAppContext.sendBroadcast(intent, Manifest.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS); + final PackageManager pm = mAppContext.getPackageManager(); + final Intent intent = new Intent(ACTION_GRAYSCALE_CHANGED); + final List receivers = pm.queryBroadcastReceivers(intent, 0 /* flags */); + for (ResolveInfo receiver : receivers) { + intent.setPackage(receiver.activityInfo.packageName); + mAppContext.sendBroadcast(intent); + } } public class Receiver extends BroadcastReceiver { 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 2fe4697f09..11e76b5329 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 @@ -25,6 +25,8 @@ import static org.mockito.Mockito.verify; import android.content.Context; import android.content.Intent; +import android.content.pm.ActivityInfo; +import android.content.pm.ResolveInfo; import android.hardware.display.ColorDisplayManager; import org.junit.Before; @@ -34,7 +36,9 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; +import org.robolectric.Shadows; import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowPackageManager; @RunWith(RobolectricTestRunner.class) public class GrayscaleConditionControllerTest { @@ -45,6 +49,7 @@ public class GrayscaleConditionControllerTest { private ColorDisplayManager mColorDisplayManager; private Context mContext; private GrayscaleConditionController mController; + private ShadowPackageManager mPackageManager; @Before public void setUp() { @@ -53,6 +58,7 @@ public class GrayscaleConditionControllerTest { mColorDisplayManager = spy(mContext.getSystemService(ColorDisplayManager.class)); doReturn(mColorDisplayManager).when(mContext).getSystemService(ColorDisplayManager.class); mController = new GrayscaleConditionController(mContext, mConditionManager); + mPackageManager = Shadows.shadowOf(mContext.getPackageManager()); } @Test @@ -85,8 +91,13 @@ public class GrayscaleConditionControllerTest { @Test public void onActionClick_shouldSendBroadcast() { + final Intent intent = new Intent(GrayscaleConditionController.ACTION_GRAYSCALE_CHANGED); + final ResolveInfo info = new ResolveInfo(); + info.activityInfo = new ActivityInfo(); + mPackageManager.addResolveInfoForIntent(intent, info); + mController.onActionClick(); - verify(mContext).sendBroadcast(any(Intent.class), any(String.class)); + verify(mContext).sendBroadcast(any(Intent.class)); } } -- 2.11.0