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

Commit d1a1b991 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Add flags to package Broadcast Receivers"

parents 5bfeae6f 6c006dd7
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -329,7 +329,8 @@ public class TileLifecycleManager extends BroadcastReceiver implements
        filter.addDataScheme("package");
        try {
            mPackageReceiverRegistered.set(true);
            mContext.registerReceiverAsUser(this, mUser, filter, null, mHandler);
            mContext.registerReceiverAsUser(
                    this, mUser, filter, null, mHandler, Context.RECEIVER_EXPORTED);
        } catch (Exception ex) {
            mPackageReceiverRegistered.set(false);
            Log.e(TAG, "Could not register package receiver", ex);
+1 −1
Original line number Diff line number Diff line
@@ -92,7 +92,7 @@ public class TileServiceManager {
        filter.addDataScheme("package");
        Context context = mServices.getContext();
        context.registerReceiverAsUser(mUninstallReceiver, userTracker.getUserHandle(), filter,
                null, mHandler);
                null, mHandler, Context.RECEIVER_EXPORTED);
    }

    boolean isLifecycleStarted() {
+42 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyInt;
import static org.mockito.Mockito.anyString;
@@ -27,8 +28,12 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageInfo;
import android.content.pm.ServiceInfo;
import android.net.Uri;
@@ -42,6 +47,7 @@ import android.service.quicksettings.Tile;
import android.service.quicksettings.TileService;
import android.test.suitebuilder.annotation.SmallTest;

import androidx.annotation.Nullable;
import androidx.test.runner.AndroidJUnit4;

import com.android.systemui.SysuiTestCase;
@@ -69,6 +75,7 @@ public class TileLifecycleManagerTest extends SysuiTestCase {
    private HandlerThread mThread;
    private Handler mHandler;
    private TileLifecycleManager mStateManager;
    private TestContextWrapper mWrappedContext;

    @Before
    public void setUp() throws Exception {
@@ -81,12 +88,14 @@ public class TileLifecycleManagerTest extends SysuiTestCase {

        mContext.addMockService(mTileServiceComponentName, mMockTileService);

        mWrappedContext = new TestContextWrapper(mContext);

        mTileServiceIntent = new Intent().setComponent(mTileServiceComponentName);
        mUser = new UserHandle(UserHandle.myUserId());
        mThread = new HandlerThread("TestThread");
        mThread.start();
        mHandler = Handler.createAsync(mThread.getLooper());
        mStateManager = new TileLifecycleManager(mHandler, mContext,
        mStateManager = new TileLifecycleManager(mHandler, mWrappedContext,
                Mockito.mock(IQSService.class), new Tile(),
                mTileServiceIntent,
                mUser,
@@ -97,6 +106,7 @@ public class TileLifecycleManagerTest extends SysuiTestCase {
    @After
    public void tearDown() throws Exception {
        mThread.quit();
        mStateManager.handleDestroy();
    }

    private void setPackageEnabled(boolean enabled) throws Exception {
@@ -126,6 +136,18 @@ public class TileLifecycleManagerTest extends SysuiTestCase {
        verifyBind(1);
    }

    @Test
    public void testPackageReceiverExported() throws Exception {
        // Make sure that we register a receiver
        setPackageEnabled(false);
        mStateManager.setBindService(true);
        IntentFilter filter = mWrappedContext.mLastIntentFilter;
        assertTrue(filter.hasAction(Intent.ACTION_PACKAGE_ADDED));
        assertTrue(filter.hasAction(Intent.ACTION_PACKAGE_CHANGED));
        assertTrue(filter.hasDataScheme("package"));
        assertNotEquals(0, mWrappedContext.mLastFlag & Context.RECEIVER_EXPORTED);
    }

    @Test
    public void testUnbind() {
        mStateManager.setBindService(true);
@@ -247,4 +269,23 @@ public class TileLifecycleManagerTest extends SysuiTestCase {
    public void testToggleableTile() throws Exception {
        assertTrue(mStateManager.isToggleableTile());
    }

    private static class TestContextWrapper extends ContextWrapper {
        private IntentFilter mLastIntentFilter;
        private int mLastFlag;

        TestContextWrapper(Context base) {
            super(base);
        }

        @Override
        public Intent registerReceiverAsUser(@Nullable BroadcastReceiver receiver, UserHandle user,
                IntentFilter filter, @Nullable String broadcastPermission,
                @Nullable Handler scheduler, int flags) {
            mLastIntentFilter = filter;
            mLastFlag = flags;
            return super.registerReceiverAsUser(receiver, user, filter, broadcastPermission,
                    scheduler, flags);
        }
    }
}
+25 −1
Original line number Diff line number Diff line
@@ -20,6 +20,9 @@ import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertTrue;

import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.UserHandle;
@@ -47,6 +50,7 @@ public class TileServiceManagerTest extends SysuiTestCase {
    private Handler mHandler;
    private TileServiceManager mTileServiceManager;
    private UserTracker mUserTracker;
    private Context mMockContext;

    @Before
    public void setUp() throws Exception {
@@ -58,7 +62,8 @@ public class TileServiceManagerTest extends SysuiTestCase {
        Mockito.when(mUserTracker.getUserId()).thenReturn(UserHandle.USER_SYSTEM);
        Mockito.when(mUserTracker.getUserHandle()).thenReturn(UserHandle.SYSTEM);

        Mockito.when(mTileServices.getContext()).thenReturn(mContext);
        mMockContext = Mockito.mock(Context.class);
        Mockito.when(mTileServices.getContext()).thenReturn(mMockContext);
        mTileLifecycle = Mockito.mock(TileLifecycleManager.class);
        Mockito.when(mTileLifecycle.isActiveTile()).thenReturn(false);
        ComponentName componentName = new ComponentName(mContext,
@@ -71,6 +76,25 @@ public class TileServiceManagerTest extends SysuiTestCase {
    @After
    public void tearDown() throws Exception {
        mThread.quit();
        mTileServiceManager.handleDestroy();
    }

    @Test
    public void testUninstallReceiverExported() {
        ArgumentCaptor<IntentFilter> intentFilterCaptor =
                ArgumentCaptor.forClass(IntentFilter.class);

        Mockito.verify(mMockContext).registerReceiverAsUser(
                Mockito.any(),
                Mockito.any(),
                intentFilterCaptor.capture(),
                Mockito.any(),
                Mockito.any(),
                Mockito.eq(Context.RECEIVER_EXPORTED)
        );
        IntentFilter filter = intentFilterCaptor.getValue();
        assertTrue(filter.hasAction(Intent.ACTION_PACKAGE_REMOVED));
        assertTrue(filter.hasDataScheme("package"));
    }

    @Test