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);
}
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<ResolveInfo> receivers = pm.queryBroadcastReceivers(intent, 0 /* flags */);
+ for (ResolveInfo receiver : receivers) {
+ intent.setPackage(receiver.activityInfo.packageName);
+ mAppContext.sendBroadcast(intent);
+ }
}
public class Receiver extends BroadcastReceiver {
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;
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 {
private ColorDisplayManager mColorDisplayManager;
private Context mContext;
private GrayscaleConditionController mController;
+ private ShadowPackageManager mPackageManager;
@Before
public void setUp() {
mColorDisplayManager = spy(mContext.getSystemService(ColorDisplayManager.class));
doReturn(mColorDisplayManager).when(mContext).getSystemService(ColorDisplayManager.class);
mController = new GrayscaleConditionController(mContext, mConditionManager);
+ mPackageManager = Shadows.shadowOf(mContext.getPackageManager());
}
@Test
@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));
}
}