Merge "[Home Controls] Update home controls file usage." into tm-qpr-dev

This commit is contained in:
Aaron Liu
2022-07-20 15:59:28 +00:00
committed by Android (Google) Code Review
2 changed files with 37 additions and 23 deletions

View File

@@ -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
@@ -43,6 +41,7 @@ import com.android.systemui.controls.ui.ControlsUiController
import com.android.systemui.dagger.SysUISingleton 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.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
@@ -61,6 +60,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
@@ -84,15 +84,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(
@@ -111,7 +108,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)
@@ -187,8 +184,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 }
@@ -575,18 +575,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
)
} }
/** /**

View File

@@ -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
@@ -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)
@@ -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>
@@ -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,
@@ -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
@@ -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
@@ -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 {