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

Commit 2ef3daca authored by Mill Chen's avatar Mill Chen
Browse files

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
parent 6d90cdfe
Loading
Loading
Loading
Loading
+15 −5
Original line number Diff line number Diff line
@@ -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<ResolveInfo> receivers = pm.queryBroadcastReceivers(intent, 0 /* flags */);
        for (ResolveInfo receiver : receivers) {
            intent.setPackage(receiver.activityInfo.packageName);
            mAppContext.sendBroadcast(intent);
        }
    }

    public class Receiver extends BroadcastReceiver {
+12 −1
Original line number Diff line number Diff line
@@ -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));
    }
}