Loading packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -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); Loading packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -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() { Loading packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java +42 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 { Loading @@ -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, Loading @@ -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 { Loading Loading @@ -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); Loading Loading @@ -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); } } } packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java +25 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading @@ -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, Loading @@ -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 Loading Loading
packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java +2 −1 Original line number Diff line number Diff line Loading @@ -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); Loading
packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -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() { Loading
packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java +42 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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 { Loading @@ -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, Loading @@ -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 { Loading Loading @@ -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); Loading Loading @@ -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); } } }
packages/SystemUI/tests/src/com/android/systemui/qs/external/TileServiceManagerTest.java +25 −1 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 { Loading @@ -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, Loading @@ -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 Loading