Loading packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt +14 −20 Original line number Original line Diff line number Diff line Loading @@ -20,13 +20,11 @@ import android.app.PendingIntent import android.app.backup.BackupManager import android.app.backup.BackupManager import android.content.BroadcastReceiver import android.content.BroadcastReceiver import android.content.ComponentName import android.content.ComponentName import android.content.ContentResolver import android.content.Context import android.content.Context import android.content.Intent import android.content.Intent import android.content.IntentFilter import android.content.IntentFilter import android.database.ContentObserver import android.database.ContentObserver import android.net.Uri import android.net.Uri import android.os.Environment import android.os.UserHandle import android.os.UserHandle import android.service.controls.Control import android.service.controls.Control import android.service.controls.actions.ControlAction import android.service.controls.actions.ControlAction Loading @@ -45,6 +43,7 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dump.DumpManager import com.android.systemui.dump.DumpManager import com.android.systemui.people.widget.PeopleSpaceWidgetProvider.EXTRA_USER_HANDLE import com.android.systemui.people.widget.PeopleSpaceWidgetProvider.EXTRA_USER_HANDLE import com.android.systemui.settings.UserFileManager import com.android.systemui.settings.UserTracker import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_FILE import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_FILE import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_SEEDING_COMPLETED import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_SEEDING_COMPLETED Loading @@ -63,6 +62,7 @@ class ControlsControllerImpl @Inject constructor ( private val bindingController: ControlsBindingController, private val bindingController: ControlsBindingController, private val listingController: ControlsListingController, private val listingController: ControlsListingController, private val broadcastDispatcher: BroadcastDispatcher, private val broadcastDispatcher: BroadcastDispatcher, private val userFileManager: UserFileManager, optionalWrapper: Optional<ControlsFavoritePersistenceWrapper>, optionalWrapper: Optional<ControlsFavoritePersistenceWrapper>, dumpManager: DumpManager, dumpManager: DumpManager, userTracker: UserTracker userTracker: UserTracker Loading @@ -86,15 +86,12 @@ class ControlsControllerImpl @Inject constructor ( override val currentUserId override val currentUserId get() = currentUser.identifier get() = currentUser.identifier private val contentResolver: ContentResolver get() = context.contentResolver private val persistenceWrapper: ControlsFavoritePersistenceWrapper private val persistenceWrapper: ControlsFavoritePersistenceWrapper @VisibleForTesting @VisibleForTesting internal var auxiliaryPersistenceWrapper: AuxiliaryPersistenceWrapper internal var auxiliaryPersistenceWrapper: AuxiliaryPersistenceWrapper init { init { userStructure = UserStructure(context, currentUser) userStructure = UserStructure(context, currentUser, userFileManager) persistenceWrapper = optionalWrapper.orElseGet { persistenceWrapper = optionalWrapper.orElseGet { ControlsFavoritePersistenceWrapper( ControlsFavoritePersistenceWrapper( Loading @@ -113,7 +110,7 @@ class ControlsControllerImpl @Inject constructor ( private fun setValuesForUser(newUser: UserHandle) { private fun setValuesForUser(newUser: UserHandle) { Log.d(TAG, "Changing to user: $newUser") Log.d(TAG, "Changing to user: $newUser") currentUser = newUser currentUser = newUser userStructure = UserStructure(context, currentUser) userStructure = UserStructure(context, currentUser, userFileManager) persistenceWrapper.changeFileAndBackupManager( persistenceWrapper.changeFileAndBackupManager( userStructure.file, userStructure.file, BackupManager(userStructure.userContext) BackupManager(userStructure.userContext) Loading Loading @@ -189,8 +186,11 @@ class ControlsControllerImpl @Inject constructor ( // When a component is uninstalled, allow seeding to happen again if the user // When a component is uninstalled, allow seeding to happen again if the user // reinstalls the app // reinstalls the app val prefs = userStructure.userContext.getSharedPreferences( val prefs = userFileManager.getSharedPreferences( PREFS_CONTROLS_FILE, Context.MODE_PRIVATE) PREFS_CONTROLS_FILE, Context.MODE_PRIVATE, userTracker.userId ) val completedSeedingPackageSet = prefs.getStringSet( val completedSeedingPackageSet = prefs.getStringSet( PREFS_CONTROLS_SEEDING_COMPLETED, mutableSetOf<String>()) PREFS_CONTROLS_SEEDING_COMPLETED, mutableSetOf<String>()) val servicePackageSet = serviceInfoSet.map { it.packageName } val servicePackageSet = serviceInfoSet.map { it.packageName } Loading Loading @@ -577,18 +577,12 @@ class ControlsControllerImpl @Inject constructor ( } } } } class UserStructure(context: Context, user: UserHandle) { class UserStructure(context: Context, user: UserHandle, userFileManager: UserFileManager) { val userContext = context.createContextAsUser(user, 0) val userContext = context.createContextAsUser(user, 0) val file = userFileManager.getFile(ControlsFavoritePersistenceWrapper.FILE_NAME, val file = Environment.buildPath( user.identifier) userContext.filesDir, val auxiliaryFile = userFileManager.getFile(AuxiliaryPersistenceWrapper.AUXILIARY_FILE_NAME, ControlsFavoritePersistenceWrapper.FILE_NAME user.identifier) ) val auxiliaryFile = Environment.buildPath( userContext.filesDir, AuxiliaryPersistenceWrapper.AUXILIARY_FILE_NAME ) } } /** /** Loading packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt +23 −3 Original line number Original line Diff line number Diff line Loading @@ -37,9 +37,14 @@ import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.ui.ControlsUiController import com.android.systemui.controls.ui.ControlsUiController import com.android.systemui.dump.DumpManager import com.android.systemui.dump.DumpManager import com.android.systemui.settings.UserFileManager import com.android.systemui.settings.UserTracker import com.android.systemui.settings.UserTracker import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.time.FakeSystemClock import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import java.io.File import java.util.Optional import java.util.function.Consumer import org.junit.After import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertFalse Loading @@ -50,20 +55,20 @@ import org.junit.Test import org.junit.runner.RunWith import org.junit.runner.RunWith import org.mockito.ArgumentCaptor import org.mockito.ArgumentCaptor import org.mockito.ArgumentMatchers import org.mockito.ArgumentMatchers import org.mockito.ArgumentMatchers.anyString import org.mockito.Captor import org.mockito.Captor import org.mockito.Mock import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito import org.mockito.Mockito.anyInt import org.mockito.Mockito.anyInt import org.mockito.Mockito.`when` import org.mockito.Mockito.inOrder import org.mockito.Mockito.inOrder import org.mockito.Mockito.mock import org.mockito.Mockito.mock import org.mockito.Mockito.never import org.mockito.Mockito.never import org.mockito.Mockito.reset import org.mockito.Mockito.reset import org.mockito.Mockito.times import org.mockito.Mockito.verify import org.mockito.Mockito.verify import org.mockito.Mockito.verifyNoMoreInteractions import org.mockito.Mockito.verifyNoMoreInteractions import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations import java.util.Optional import java.util.function.Consumer @SmallTest @SmallTest @RunWith(AndroidTestingRunner::class) @RunWith(AndroidTestingRunner::class) Loading @@ -85,6 +90,8 @@ class ControlsControllerImplTest : SysuiTestCase() { private lateinit var listingController: ControlsListingController private lateinit var listingController: ControlsListingController @Mock(stubOnly = true) @Mock(stubOnly = true) private lateinit var userTracker: UserTracker private lateinit var userTracker: UserTracker @Mock private lateinit var userFileManager: UserFileManager @Captor @Captor private lateinit var structureInfoCaptor: ArgumentCaptor<StructureInfo> private lateinit var structureInfoCaptor: ArgumentCaptor<StructureInfo> Loading Loading @@ -153,6 +160,9 @@ class ControlsControllerImplTest : SysuiTestCase() { canceller = DidRunRunnable() canceller = DidRunRunnable() `when`(bindingController.bindAndLoad(any(), any())).thenReturn(canceller) `when`(bindingController.bindAndLoad(any(), any())).thenReturn(canceller) `when`(userFileManager.getFile(anyString(), anyInt())).thenReturn(mock(File::class.java)) `when`(userFileManager.getSharedPreferences(anyString(), anyInt(), anyInt())) .thenReturn(context.getSharedPreferences("test", Context.MODE_PRIVATE)) controller = ControlsControllerImpl( controller = ControlsControllerImpl( wrapper, wrapper, Loading @@ -161,6 +171,7 @@ class ControlsControllerImplTest : SysuiTestCase() { bindingController, bindingController, listingController, listingController, broadcastDispatcher, broadcastDispatcher, userFileManager, Optional.of(persistenceWrapper), Optional.of(persistenceWrapper), mock(DumpManager::class.java), mock(DumpManager::class.java), userTracker userTracker Loading Loading @@ -217,6 +228,7 @@ class ControlsControllerImplTest : SysuiTestCase() { bindingController, bindingController, listingController, listingController, broadcastDispatcher, broadcastDispatcher, userFileManager, Optional.of(persistenceWrapper), Optional.of(persistenceWrapper), mock(DumpManager::class.java), mock(DumpManager::class.java), userTracker userTracker Loading Loading @@ -911,6 +923,14 @@ class ControlsControllerImplTest : SysuiTestCase() { assertTrue(controller.getFavoritesForStructure(TEST_COMPONENT_2, TEST_STRUCTURE).isEmpty()) assertTrue(controller.getFavoritesForStructure(TEST_COMPONENT_2, TEST_STRUCTURE).isEmpty()) } } @Test fun testUserStructure() { val userStructure = UserStructure(context, context.user, userFileManager) verify(userFileManager, times(2)) .getFile(ControlsFavoritePersistenceWrapper.FILE_NAME, context.user.identifier) assertThat(userStructure.file).isNotNull() } } } private class DidRunRunnable() : Runnable { private class DidRunRunnable() : Runnable { Loading Loading
packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt +14 −20 Original line number Original line Diff line number Diff line Loading @@ -20,13 +20,11 @@ import android.app.PendingIntent import android.app.backup.BackupManager import android.app.backup.BackupManager import android.content.BroadcastReceiver import android.content.BroadcastReceiver import android.content.ComponentName import android.content.ComponentName import android.content.ContentResolver import android.content.Context import android.content.Context import android.content.Intent import android.content.Intent import android.content.IntentFilter import android.content.IntentFilter import android.database.ContentObserver import android.database.ContentObserver import android.net.Uri import android.net.Uri import android.os.Environment import android.os.UserHandle import android.os.UserHandle import android.service.controls.Control import android.service.controls.Control import android.service.controls.actions.ControlAction import android.service.controls.actions.ControlAction Loading @@ -45,6 +43,7 @@ import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dagger.qualifiers.Background import com.android.systemui.dump.DumpManager import com.android.systemui.dump.DumpManager import com.android.systemui.people.widget.PeopleSpaceWidgetProvider.EXTRA_USER_HANDLE import com.android.systemui.people.widget.PeopleSpaceWidgetProvider.EXTRA_USER_HANDLE import com.android.systemui.settings.UserFileManager import com.android.systemui.settings.UserTracker import com.android.systemui.settings.UserTracker import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_FILE import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_FILE import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_SEEDING_COMPLETED import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_SEEDING_COMPLETED Loading @@ -63,6 +62,7 @@ class ControlsControllerImpl @Inject constructor ( private val bindingController: ControlsBindingController, private val bindingController: ControlsBindingController, private val listingController: ControlsListingController, private val listingController: ControlsListingController, private val broadcastDispatcher: BroadcastDispatcher, private val broadcastDispatcher: BroadcastDispatcher, private val userFileManager: UserFileManager, optionalWrapper: Optional<ControlsFavoritePersistenceWrapper>, optionalWrapper: Optional<ControlsFavoritePersistenceWrapper>, dumpManager: DumpManager, dumpManager: DumpManager, userTracker: UserTracker userTracker: UserTracker Loading @@ -86,15 +86,12 @@ class ControlsControllerImpl @Inject constructor ( override val currentUserId override val currentUserId get() = currentUser.identifier get() = currentUser.identifier private val contentResolver: ContentResolver get() = context.contentResolver private val persistenceWrapper: ControlsFavoritePersistenceWrapper private val persistenceWrapper: ControlsFavoritePersistenceWrapper @VisibleForTesting @VisibleForTesting internal var auxiliaryPersistenceWrapper: AuxiliaryPersistenceWrapper internal var auxiliaryPersistenceWrapper: AuxiliaryPersistenceWrapper init { init { userStructure = UserStructure(context, currentUser) userStructure = UserStructure(context, currentUser, userFileManager) persistenceWrapper = optionalWrapper.orElseGet { persistenceWrapper = optionalWrapper.orElseGet { ControlsFavoritePersistenceWrapper( ControlsFavoritePersistenceWrapper( Loading @@ -113,7 +110,7 @@ class ControlsControllerImpl @Inject constructor ( private fun setValuesForUser(newUser: UserHandle) { private fun setValuesForUser(newUser: UserHandle) { Log.d(TAG, "Changing to user: $newUser") Log.d(TAG, "Changing to user: $newUser") currentUser = newUser currentUser = newUser userStructure = UserStructure(context, currentUser) userStructure = UserStructure(context, currentUser, userFileManager) persistenceWrapper.changeFileAndBackupManager( persistenceWrapper.changeFileAndBackupManager( userStructure.file, userStructure.file, BackupManager(userStructure.userContext) BackupManager(userStructure.userContext) Loading Loading @@ -189,8 +186,11 @@ class ControlsControllerImpl @Inject constructor ( // When a component is uninstalled, allow seeding to happen again if the user // When a component is uninstalled, allow seeding to happen again if the user // reinstalls the app // reinstalls the app val prefs = userStructure.userContext.getSharedPreferences( val prefs = userFileManager.getSharedPreferences( PREFS_CONTROLS_FILE, Context.MODE_PRIVATE) PREFS_CONTROLS_FILE, Context.MODE_PRIVATE, userTracker.userId ) val completedSeedingPackageSet = prefs.getStringSet( val completedSeedingPackageSet = prefs.getStringSet( PREFS_CONTROLS_SEEDING_COMPLETED, mutableSetOf<String>()) PREFS_CONTROLS_SEEDING_COMPLETED, mutableSetOf<String>()) val servicePackageSet = serviceInfoSet.map { it.packageName } val servicePackageSet = serviceInfoSet.map { it.packageName } Loading Loading @@ -577,18 +577,12 @@ class ControlsControllerImpl @Inject constructor ( } } } } class UserStructure(context: Context, user: UserHandle) { class UserStructure(context: Context, user: UserHandle, userFileManager: UserFileManager) { val userContext = context.createContextAsUser(user, 0) val userContext = context.createContextAsUser(user, 0) val file = userFileManager.getFile(ControlsFavoritePersistenceWrapper.FILE_NAME, val file = Environment.buildPath( user.identifier) userContext.filesDir, val auxiliaryFile = userFileManager.getFile(AuxiliaryPersistenceWrapper.AUXILIARY_FILE_NAME, ControlsFavoritePersistenceWrapper.FILE_NAME user.identifier) ) val auxiliaryFile = Environment.buildPath( userContext.filesDir, AuxiliaryPersistenceWrapper.AUXILIARY_FILE_NAME ) } } /** /** Loading
packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt +23 −3 Original line number Original line Diff line number Diff line Loading @@ -37,9 +37,14 @@ import com.android.systemui.controls.ControlsServiceInfo import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.management.ControlsListingController import com.android.systemui.controls.ui.ControlsUiController import com.android.systemui.controls.ui.ControlsUiController import com.android.systemui.dump.DumpManager import com.android.systemui.dump.DumpManager import com.android.systemui.settings.UserFileManager import com.android.systemui.settings.UserTracker import com.android.systemui.settings.UserTracker import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.concurrency.FakeExecutor import com.android.systemui.util.time.FakeSystemClock import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat import java.io.File import java.util.Optional import java.util.function.Consumer import org.junit.After import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertFalse Loading @@ -50,20 +55,20 @@ import org.junit.Test import org.junit.runner.RunWith import org.junit.runner.RunWith import org.mockito.ArgumentCaptor import org.mockito.ArgumentCaptor import org.mockito.ArgumentMatchers import org.mockito.ArgumentMatchers import org.mockito.ArgumentMatchers.anyString import org.mockito.Captor import org.mockito.Captor import org.mockito.Mock import org.mockito.Mock import org.mockito.Mockito import org.mockito.Mockito import org.mockito.Mockito.anyInt import org.mockito.Mockito.anyInt import org.mockito.Mockito.`when` import org.mockito.Mockito.inOrder import org.mockito.Mockito.inOrder import org.mockito.Mockito.mock import org.mockito.Mockito.mock import org.mockito.Mockito.never import org.mockito.Mockito.never import org.mockito.Mockito.reset import org.mockito.Mockito.reset import org.mockito.Mockito.times import org.mockito.Mockito.verify import org.mockito.Mockito.verify import org.mockito.Mockito.verifyNoMoreInteractions import org.mockito.Mockito.verifyNoMoreInteractions import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations import java.util.Optional import java.util.function.Consumer @SmallTest @SmallTest @RunWith(AndroidTestingRunner::class) @RunWith(AndroidTestingRunner::class) Loading @@ -85,6 +90,8 @@ class ControlsControllerImplTest : SysuiTestCase() { private lateinit var listingController: ControlsListingController private lateinit var listingController: ControlsListingController @Mock(stubOnly = true) @Mock(stubOnly = true) private lateinit var userTracker: UserTracker private lateinit var userTracker: UserTracker @Mock private lateinit var userFileManager: UserFileManager @Captor @Captor private lateinit var structureInfoCaptor: ArgumentCaptor<StructureInfo> private lateinit var structureInfoCaptor: ArgumentCaptor<StructureInfo> Loading Loading @@ -153,6 +160,9 @@ class ControlsControllerImplTest : SysuiTestCase() { canceller = DidRunRunnable() canceller = DidRunRunnable() `when`(bindingController.bindAndLoad(any(), any())).thenReturn(canceller) `when`(bindingController.bindAndLoad(any(), any())).thenReturn(canceller) `when`(userFileManager.getFile(anyString(), anyInt())).thenReturn(mock(File::class.java)) `when`(userFileManager.getSharedPreferences(anyString(), anyInt(), anyInt())) .thenReturn(context.getSharedPreferences("test", Context.MODE_PRIVATE)) controller = ControlsControllerImpl( controller = ControlsControllerImpl( wrapper, wrapper, Loading @@ -161,6 +171,7 @@ class ControlsControllerImplTest : SysuiTestCase() { bindingController, bindingController, listingController, listingController, broadcastDispatcher, broadcastDispatcher, userFileManager, Optional.of(persistenceWrapper), Optional.of(persistenceWrapper), mock(DumpManager::class.java), mock(DumpManager::class.java), userTracker userTracker Loading Loading @@ -217,6 +228,7 @@ class ControlsControllerImplTest : SysuiTestCase() { bindingController, bindingController, listingController, listingController, broadcastDispatcher, broadcastDispatcher, userFileManager, Optional.of(persistenceWrapper), Optional.of(persistenceWrapper), mock(DumpManager::class.java), mock(DumpManager::class.java), userTracker userTracker Loading Loading @@ -911,6 +923,14 @@ class ControlsControllerImplTest : SysuiTestCase() { assertTrue(controller.getFavoritesForStructure(TEST_COMPONENT_2, TEST_STRUCTURE).isEmpty()) assertTrue(controller.getFavoritesForStructure(TEST_COMPONENT_2, TEST_STRUCTURE).isEmpty()) } } @Test fun testUserStructure() { val userStructure = UserStructure(context, context.user, userFileManager) verify(userFileManager, times(2)) .getFile(ControlsFavoritePersistenceWrapper.FILE_NAME, context.user.identifier) assertThat(userStructure.file).isNotNull() } } } private class DidRunRunnable() : Runnable { private class DidRunRunnable() : Runnable { Loading