Loading packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/custom/data/repository/CustomTileRepositoryTest.kt +65 −1 Original line number Diff line number Diff line Loading @@ -280,9 +280,12 @@ class CustomTileRepositoryTest : SysuiTestCase() { } @Test fun isActiveFollowsPackageManagerAdapter() = fun isActiveFollowsPackageManagerAdapter_user0() = with(kosmos) { testScope.runTest { packageManagerAdapterFacade.setExclusiveForUser(0) underTest.updateWithDefaults(UserHandle.of(0), TEST_DEFAULTS_1, true) packageManagerAdapterFacade.setIsActive(false) assertThat(underTest.isTileActive()).isFalse() Loading @@ -295,6 +298,37 @@ class CustomTileRepositoryTest : SysuiTestCase() { fun isToggleableFollowsPackageManagerAdapter() = with(kosmos) { testScope.runTest { underTest.updateWithDefaults(UserHandle.of(0), TEST_DEFAULTS_1, true) packageManagerAdapterFacade.setIsToggleable(false) assertThat(underTest.isTileToggleable()).isFalse() packageManagerAdapterFacade.setIsToggleable(true) assertThat(underTest.isTileToggleable()).isTrue() } } @Test fun isActiveFollowsPackageManagerAdapter_user10_withAdapterForUser10() = with(kosmos) { testScope.runTest { packageManagerAdapterFacade.setExclusiveForUser(10) underTest.updateWithDefaults(UserHandle.of(10), TEST_DEFAULTS_1, true) packageManagerAdapterFacade.setIsActive(false) assertThat(underTest.isTileActive()).isFalse() packageManagerAdapterFacade.setIsActive(true) assertThat(underTest.isTileActive()).isTrue() } } @Test fun isToggleableFollowsPackageManagerAdapter_user10_withAdapterForUser10() = with(kosmos) { testScope.runTest { packageManagerAdapterFacade.setExclusiveForUser(10) underTest.updateWithDefaults(UserHandle.of(10), TEST_DEFAULTS_1, true) packageManagerAdapterFacade.setIsToggleable(false) assertThat(underTest.isTileToggleable()).isFalse() Loading @@ -303,6 +337,36 @@ class CustomTileRepositoryTest : SysuiTestCase() { } } @Test fun isActiveDoesntFollowPackageManagerAdapter_user10() = with(kosmos) { testScope.runTest { packageManagerAdapterFacade.setExclusiveForUser(0) underTest.updateWithDefaults(UserHandle.of(10), TEST_DEFAULTS_1, true) packageManagerAdapterFacade.setIsActive(false) assertThat(underTest.isTileActive()).isFalse() packageManagerAdapterFacade.setIsActive(true) assertThat(underTest.isTileActive()).isFalse() } } @Test fun isToggleableDoesntFollowPackageManagerAdapter_user10() = with(kosmos) { testScope.runTest { packageManagerAdapterFacade.setExclusiveForUser(0) underTest.updateWithDefaults(UserHandle.of(10), TEST_DEFAULTS_1, true) packageManagerAdapterFacade.setIsToggleable(false) assertThat(underTest.isTileToggleable()).isFalse() packageManagerAdapterFacade.setIsToggleable(true) assertThat(underTest.isTileToggleable()).isFalse() } } private companion object { val TEST_COMPONENT = ComponentName("test.pkg", "test.cls") Loading packages/SystemUI/src/com/android/systemui/qs/external/PackageManagerAdapter.java +3 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.os.RemoteException; import androidx.annotation.Nullable; import javax.inject.Inject; // Adapter that wraps calls to PackageManager or IPackageManager for {@link TileLifecycleManager}. Loading @@ -45,6 +47,7 @@ public class PackageManagerAdapter { mIPackageManager = AppGlobals.getPackageManager(); } @Nullable public ServiceInfo getServiceInfo(ComponentName className, int flags, int userId) throws RemoteException { return mIPackageManager.getServiceInfo(className, flags, userId); Loading packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java +6 −6 Original line number Diff line number Diff line Loading @@ -188,10 +188,10 @@ public class TileLifecycleManager extends BroadcastReceiver implements public boolean isActiveTile() { try { ServiceInfo info = mPackageManagerAdapter.getServiceInfo(mIntent.getComponent(), META_DATA_QUERY_FLAGS); return info.metaData != null META_DATA_QUERY_FLAGS, mUser.getIdentifier()); return info != null && info.metaData != null && info.metaData.getBoolean(TileService.META_DATA_ACTIVE_TILE, false); } catch (PackageManager.NameNotFoundException e) { } catch (RemoteException e) { return false; } } Loading @@ -206,10 +206,10 @@ public class TileLifecycleManager extends BroadcastReceiver implements public boolean isToggleableTile() { try { ServiceInfo info = mPackageManagerAdapter.getServiceInfo(mIntent.getComponent(), META_DATA_QUERY_FLAGS); return info.metaData != null META_DATA_QUERY_FLAGS, mUser.getIdentifier()); return info != null && info.metaData != null && info.metaData.getBoolean(TileService.META_DATA_TOGGLEABLE_TILE, false); } catch (PackageManager.NameNotFoundException e) { } catch (RemoteException e) { return false; } } Loading packages/SystemUI/src/com/android/systemui/qs/tiles/impl/custom/data/repository/CustomTileRepository.kt +11 −9 Original line number Diff line number Diff line Loading @@ -17,8 +17,8 @@ package com.android.systemui.qs.tiles.impl.custom.data.repository import android.content.pm.PackageManager import android.content.pm.ServiceInfo import android.graphics.drawable.Icon import android.os.RemoteException import android.os.UserHandle import android.service.quicksettings.Tile import android.service.quicksettings.TileService Loading Loading @@ -163,13 +163,14 @@ constructor( override suspend fun isTileActive(): Boolean = withContext(backgroundContext) { try { val info: ServiceInfo = val info = packageManagerAdapter.getServiceInfo( tileSpec.componentName, META_DATA_QUERY_FLAGS META_DATA_QUERY_FLAGS, getCurrentTileWithUser()?.user?.identifier ?: UserHandle.USER_CURRENT, ) info.metaData?.getBoolean(TileService.META_DATA_ACTIVE_TILE, false) == true } catch (e: PackageManager.NameNotFoundException) { info?.metaData?.getBoolean(TileService.META_DATA_ACTIVE_TILE, false) == true } catch (e: RemoteException) { false } } Loading @@ -177,13 +178,14 @@ constructor( override suspend fun isTileToggleable(): Boolean = withContext(backgroundContext) { try { val info: ServiceInfo = val info = packageManagerAdapter.getServiceInfo( tileSpec.componentName, META_DATA_QUERY_FLAGS META_DATA_QUERY_FLAGS, getCurrentTileWithUser()?.user?.identifier ?: UserHandle.USER_CURRENT ) info.metaData?.getBoolean(TileService.META_DATA_TOGGLEABLE_TILE, false) == true } catch (e: PackageManager.NameNotFoundException) { info?.metaData?.getBoolean(TileService.META_DATA_TOGGLEABLE_TILE, false) == true } catch (e: RemoteException) { false } } Loading packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java +131 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; import static com.android.systemui.Flags.FLAG_QS_CUSTOM_TILE_CLICK_GUARANTEED_BUG_FIX; import static com.google.common.truth.Truth.assertThat; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; Loading Loading @@ -50,6 +52,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.net.Uri; import android.os.Bundle; Loading Loading @@ -183,6 +186,40 @@ public class TileLifecycleManagerTest extends SysuiTestCase { .thenReturn(defaultPackageInfo); } private void setPackageInstalledForUser( boolean installed, boolean active, boolean toggleable, int user ) throws Exception { ServiceInfo defaultServiceInfo = null; if (installed) { defaultServiceInfo = new ServiceInfo(); defaultServiceInfo.metaData = new Bundle(); defaultServiceInfo.metaData.putBoolean(TileService.META_DATA_ACTIVE_TILE, active); defaultServiceInfo.metaData .putBoolean(TileService.META_DATA_TOGGLEABLE_TILE, toggleable); when(mMockPackageManagerAdapter.getServiceInfo(any(), anyInt(), eq(user))) .thenReturn(defaultServiceInfo); if (user == 0) { when(mMockPackageManagerAdapter.getServiceInfo(any(), anyInt())) .thenReturn(defaultServiceInfo); } PackageInfo defaultPackageInfo = new PackageInfo(); when(mMockPackageManagerAdapter.getPackageInfoAsUser(anyString(), anyInt(), eq(user))) .thenReturn(defaultPackageInfo); } else { when(mMockPackageManagerAdapter.getServiceInfo(any(), anyInt(), eq(user))) .thenReturn(null); if (user == 0) { when(mMockPackageManagerAdapter.getServiceInfo(any(), anyInt())) .thenThrow(new PackageManager.NameNotFoundException()); } when(mMockPackageManagerAdapter.getPackageInfoAsUser(anyString(), anyInt(), eq(user))) .thenThrow(new PackageManager.NameNotFoundException()); } } private void verifyBind(int times) { assertEquals(times > 0, mContext.isBound(mTileServiceComponentName)); } Loading Loading @@ -557,6 +594,100 @@ public class TileLifecycleManagerTest extends SysuiTestCase { verify(mockContext).unbindService(captor.getValue()); } @Test public void testIsActive_user0_packageInstalled() throws Exception { setPackageInstalledForUser(true, true, false, 0); mUser = UserHandle.of(0); TileLifecycleManager manager = new TileLifecycleManager(mHandler, mWrappedContext, mock(IQSService.class), mMockPackageManagerAdapter, mMockBroadcastDispatcher, mTileServiceIntent, mUser, mActivityManager, mDeviceIdleController, mExecutor); assertThat(manager.isActiveTile()).isTrue(); } @Test public void testIsActive_user10_packageInstalled_notForUser0() throws Exception { setPackageInstalledForUser(true, true, false, 10); setPackageInstalledForUser(false, false, false, 0); mUser = UserHandle.of(10); TileLifecycleManager manager = new TileLifecycleManager(mHandler, mWrappedContext, mock(IQSService.class), mMockPackageManagerAdapter, mMockBroadcastDispatcher, mTileServiceIntent, mUser, mActivityManager, mDeviceIdleController, mExecutor); assertThat(manager.isActiveTile()).isTrue(); } @Test public void testIsToggleable_user0_packageInstalled() throws Exception { setPackageInstalledForUser(true, false, true, 0); mUser = UserHandle.of(0); TileLifecycleManager manager = new TileLifecycleManager(mHandler, mWrappedContext, mock(IQSService.class), mMockPackageManagerAdapter, mMockBroadcastDispatcher, mTileServiceIntent, mUser, mActivityManager, mDeviceIdleController, mExecutor); assertThat(manager.isToggleableTile()).isTrue(); } @Test public void testIsToggleable_user10_packageInstalled_notForUser0() throws Exception { setPackageInstalledForUser(true, false, true, 10); setPackageInstalledForUser(false, false, false, 0); mUser = UserHandle.of(10); TileLifecycleManager manager = new TileLifecycleManager(mHandler, mWrappedContext, mock(IQSService.class), mMockPackageManagerAdapter, mMockBroadcastDispatcher, mTileServiceIntent, mUser, mActivityManager, mDeviceIdleController, mExecutor); assertThat(manager.isToggleableTile()).isTrue(); } @Test public void testIsToggleableActive_installedForDifferentUser() throws Exception { setPackageInstalledForUser(true, false, false, 10); setPackageInstalledForUser(false, true, true, 0); mUser = UserHandle.of(10); TileLifecycleManager manager = new TileLifecycleManager(mHandler, mWrappedContext, mock(IQSService.class), mMockPackageManagerAdapter, mMockBroadcastDispatcher, mTileServiceIntent, mUser, mActivityManager, mDeviceIdleController, mExecutor); assertThat(manager.isToggleableTile()).isFalse(); assertThat(manager.isActiveTile()).isFalse(); } private void mockChangeEnabled(long changeId, boolean enabled) { doReturn(enabled).when(() -> CompatChanges.isChangeEnabled(eq(changeId), anyString(), any(UserHandle.class))); Loading Loading
packages/SystemUI/multivalentTests/src/com/android/systemui/qs/tiles/impl/custom/data/repository/CustomTileRepositoryTest.kt +65 −1 Original line number Diff line number Diff line Loading @@ -280,9 +280,12 @@ class CustomTileRepositoryTest : SysuiTestCase() { } @Test fun isActiveFollowsPackageManagerAdapter() = fun isActiveFollowsPackageManagerAdapter_user0() = with(kosmos) { testScope.runTest { packageManagerAdapterFacade.setExclusiveForUser(0) underTest.updateWithDefaults(UserHandle.of(0), TEST_DEFAULTS_1, true) packageManagerAdapterFacade.setIsActive(false) assertThat(underTest.isTileActive()).isFalse() Loading @@ -295,6 +298,37 @@ class CustomTileRepositoryTest : SysuiTestCase() { fun isToggleableFollowsPackageManagerAdapter() = with(kosmos) { testScope.runTest { underTest.updateWithDefaults(UserHandle.of(0), TEST_DEFAULTS_1, true) packageManagerAdapterFacade.setIsToggleable(false) assertThat(underTest.isTileToggleable()).isFalse() packageManagerAdapterFacade.setIsToggleable(true) assertThat(underTest.isTileToggleable()).isTrue() } } @Test fun isActiveFollowsPackageManagerAdapter_user10_withAdapterForUser10() = with(kosmos) { testScope.runTest { packageManagerAdapterFacade.setExclusiveForUser(10) underTest.updateWithDefaults(UserHandle.of(10), TEST_DEFAULTS_1, true) packageManagerAdapterFacade.setIsActive(false) assertThat(underTest.isTileActive()).isFalse() packageManagerAdapterFacade.setIsActive(true) assertThat(underTest.isTileActive()).isTrue() } } @Test fun isToggleableFollowsPackageManagerAdapter_user10_withAdapterForUser10() = with(kosmos) { testScope.runTest { packageManagerAdapterFacade.setExclusiveForUser(10) underTest.updateWithDefaults(UserHandle.of(10), TEST_DEFAULTS_1, true) packageManagerAdapterFacade.setIsToggleable(false) assertThat(underTest.isTileToggleable()).isFalse() Loading @@ -303,6 +337,36 @@ class CustomTileRepositoryTest : SysuiTestCase() { } } @Test fun isActiveDoesntFollowPackageManagerAdapter_user10() = with(kosmos) { testScope.runTest { packageManagerAdapterFacade.setExclusiveForUser(0) underTest.updateWithDefaults(UserHandle.of(10), TEST_DEFAULTS_1, true) packageManagerAdapterFacade.setIsActive(false) assertThat(underTest.isTileActive()).isFalse() packageManagerAdapterFacade.setIsActive(true) assertThat(underTest.isTileActive()).isFalse() } } @Test fun isToggleableDoesntFollowPackageManagerAdapter_user10() = with(kosmos) { testScope.runTest { packageManagerAdapterFacade.setExclusiveForUser(0) underTest.updateWithDefaults(UserHandle.of(10), TEST_DEFAULTS_1, true) packageManagerAdapterFacade.setIsToggleable(false) assertThat(underTest.isTileToggleable()).isFalse() packageManagerAdapterFacade.setIsToggleable(true) assertThat(underTest.isTileToggleable()).isFalse() } } private companion object { val TEST_COMPONENT = ComponentName("test.pkg", "test.cls") Loading
packages/SystemUI/src/com/android/systemui/qs/external/PackageManagerAdapter.java +3 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,8 @@ import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.os.RemoteException; import androidx.annotation.Nullable; import javax.inject.Inject; // Adapter that wraps calls to PackageManager or IPackageManager for {@link TileLifecycleManager}. Loading @@ -45,6 +47,7 @@ public class PackageManagerAdapter { mIPackageManager = AppGlobals.getPackageManager(); } @Nullable public ServiceInfo getServiceInfo(ComponentName className, int flags, int userId) throws RemoteException { return mIPackageManager.getServiceInfo(className, flags, userId); Loading
packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java +6 −6 Original line number Diff line number Diff line Loading @@ -188,10 +188,10 @@ public class TileLifecycleManager extends BroadcastReceiver implements public boolean isActiveTile() { try { ServiceInfo info = mPackageManagerAdapter.getServiceInfo(mIntent.getComponent(), META_DATA_QUERY_FLAGS); return info.metaData != null META_DATA_QUERY_FLAGS, mUser.getIdentifier()); return info != null && info.metaData != null && info.metaData.getBoolean(TileService.META_DATA_ACTIVE_TILE, false); } catch (PackageManager.NameNotFoundException e) { } catch (RemoteException e) { return false; } } Loading @@ -206,10 +206,10 @@ public class TileLifecycleManager extends BroadcastReceiver implements public boolean isToggleableTile() { try { ServiceInfo info = mPackageManagerAdapter.getServiceInfo(mIntent.getComponent(), META_DATA_QUERY_FLAGS); return info.metaData != null META_DATA_QUERY_FLAGS, mUser.getIdentifier()); return info != null && info.metaData != null && info.metaData.getBoolean(TileService.META_DATA_TOGGLEABLE_TILE, false); } catch (PackageManager.NameNotFoundException e) { } catch (RemoteException e) { return false; } } Loading
packages/SystemUI/src/com/android/systemui/qs/tiles/impl/custom/data/repository/CustomTileRepository.kt +11 −9 Original line number Diff line number Diff line Loading @@ -17,8 +17,8 @@ package com.android.systemui.qs.tiles.impl.custom.data.repository import android.content.pm.PackageManager import android.content.pm.ServiceInfo import android.graphics.drawable.Icon import android.os.RemoteException import android.os.UserHandle import android.service.quicksettings.Tile import android.service.quicksettings.TileService Loading Loading @@ -163,13 +163,14 @@ constructor( override suspend fun isTileActive(): Boolean = withContext(backgroundContext) { try { val info: ServiceInfo = val info = packageManagerAdapter.getServiceInfo( tileSpec.componentName, META_DATA_QUERY_FLAGS META_DATA_QUERY_FLAGS, getCurrentTileWithUser()?.user?.identifier ?: UserHandle.USER_CURRENT, ) info.metaData?.getBoolean(TileService.META_DATA_ACTIVE_TILE, false) == true } catch (e: PackageManager.NameNotFoundException) { info?.metaData?.getBoolean(TileService.META_DATA_ACTIVE_TILE, false) == true } catch (e: RemoteException) { false } } Loading @@ -177,13 +178,14 @@ constructor( override suspend fun isTileToggleable(): Boolean = withContext(backgroundContext) { try { val info: ServiceInfo = val info = packageManagerAdapter.getServiceInfo( tileSpec.componentName, META_DATA_QUERY_FLAGS META_DATA_QUERY_FLAGS, getCurrentTileWithUser()?.user?.identifier ?: UserHandle.USER_CURRENT ) info.metaData?.getBoolean(TileService.META_DATA_TOGGLEABLE_TILE, false) == true } catch (e: PackageManager.NameNotFoundException) { info?.metaData?.getBoolean(TileService.META_DATA_TOGGLEABLE_TILE, false) == true } catch (e: RemoteException) { false } } Loading
packages/SystemUI/tests/src/com/android/systemui/qs/external/TileLifecycleManagerTest.java +131 −0 Original line number Diff line number Diff line Loading @@ -23,6 +23,8 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; import static com.android.systemui.Flags.FLAG_QS_CUSTOM_TILE_CLICK_GUARANTEED_BUG_FIX; import static com.google.common.truth.Truth.assertThat; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; Loading Loading @@ -50,6 +52,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ServiceInfo; import android.net.Uri; import android.os.Bundle; Loading Loading @@ -183,6 +186,40 @@ public class TileLifecycleManagerTest extends SysuiTestCase { .thenReturn(defaultPackageInfo); } private void setPackageInstalledForUser( boolean installed, boolean active, boolean toggleable, int user ) throws Exception { ServiceInfo defaultServiceInfo = null; if (installed) { defaultServiceInfo = new ServiceInfo(); defaultServiceInfo.metaData = new Bundle(); defaultServiceInfo.metaData.putBoolean(TileService.META_DATA_ACTIVE_TILE, active); defaultServiceInfo.metaData .putBoolean(TileService.META_DATA_TOGGLEABLE_TILE, toggleable); when(mMockPackageManagerAdapter.getServiceInfo(any(), anyInt(), eq(user))) .thenReturn(defaultServiceInfo); if (user == 0) { when(mMockPackageManagerAdapter.getServiceInfo(any(), anyInt())) .thenReturn(defaultServiceInfo); } PackageInfo defaultPackageInfo = new PackageInfo(); when(mMockPackageManagerAdapter.getPackageInfoAsUser(anyString(), anyInt(), eq(user))) .thenReturn(defaultPackageInfo); } else { when(mMockPackageManagerAdapter.getServiceInfo(any(), anyInt(), eq(user))) .thenReturn(null); if (user == 0) { when(mMockPackageManagerAdapter.getServiceInfo(any(), anyInt())) .thenThrow(new PackageManager.NameNotFoundException()); } when(mMockPackageManagerAdapter.getPackageInfoAsUser(anyString(), anyInt(), eq(user))) .thenThrow(new PackageManager.NameNotFoundException()); } } private void verifyBind(int times) { assertEquals(times > 0, mContext.isBound(mTileServiceComponentName)); } Loading Loading @@ -557,6 +594,100 @@ public class TileLifecycleManagerTest extends SysuiTestCase { verify(mockContext).unbindService(captor.getValue()); } @Test public void testIsActive_user0_packageInstalled() throws Exception { setPackageInstalledForUser(true, true, false, 0); mUser = UserHandle.of(0); TileLifecycleManager manager = new TileLifecycleManager(mHandler, mWrappedContext, mock(IQSService.class), mMockPackageManagerAdapter, mMockBroadcastDispatcher, mTileServiceIntent, mUser, mActivityManager, mDeviceIdleController, mExecutor); assertThat(manager.isActiveTile()).isTrue(); } @Test public void testIsActive_user10_packageInstalled_notForUser0() throws Exception { setPackageInstalledForUser(true, true, false, 10); setPackageInstalledForUser(false, false, false, 0); mUser = UserHandle.of(10); TileLifecycleManager manager = new TileLifecycleManager(mHandler, mWrappedContext, mock(IQSService.class), mMockPackageManagerAdapter, mMockBroadcastDispatcher, mTileServiceIntent, mUser, mActivityManager, mDeviceIdleController, mExecutor); assertThat(manager.isActiveTile()).isTrue(); } @Test public void testIsToggleable_user0_packageInstalled() throws Exception { setPackageInstalledForUser(true, false, true, 0); mUser = UserHandle.of(0); TileLifecycleManager manager = new TileLifecycleManager(mHandler, mWrappedContext, mock(IQSService.class), mMockPackageManagerAdapter, mMockBroadcastDispatcher, mTileServiceIntent, mUser, mActivityManager, mDeviceIdleController, mExecutor); assertThat(manager.isToggleableTile()).isTrue(); } @Test public void testIsToggleable_user10_packageInstalled_notForUser0() throws Exception { setPackageInstalledForUser(true, false, true, 10); setPackageInstalledForUser(false, false, false, 0); mUser = UserHandle.of(10); TileLifecycleManager manager = new TileLifecycleManager(mHandler, mWrappedContext, mock(IQSService.class), mMockPackageManagerAdapter, mMockBroadcastDispatcher, mTileServiceIntent, mUser, mActivityManager, mDeviceIdleController, mExecutor); assertThat(manager.isToggleableTile()).isTrue(); } @Test public void testIsToggleableActive_installedForDifferentUser() throws Exception { setPackageInstalledForUser(true, false, false, 10); setPackageInstalledForUser(false, true, true, 0); mUser = UserHandle.of(10); TileLifecycleManager manager = new TileLifecycleManager(mHandler, mWrappedContext, mock(IQSService.class), mMockPackageManagerAdapter, mMockBroadcastDispatcher, mTileServiceIntent, mUser, mActivityManager, mDeviceIdleController, mExecutor); assertThat(manager.isToggleableTile()).isFalse(); assertThat(manager.isActiveTile()).isFalse(); } private void mockChangeEnabled(long changeId, boolean enabled) { doReturn(enabled).when(() -> CompatChanges.isChangeEnabled(eq(changeId), anyString(), any(UserHandle.class))); Loading