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

Commit ec7cf25c authored by Aaron Liu's avatar Aaron Liu Committed by Android (Google) Code Review
Browse files

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

parents 91066c7d e776d8f8
Loading
Loading
Loading
Loading
+14 −20
Original line number Diff line number Diff line
@@ -20,13 +20,11 @@ import android.app.PendingIntent
import android.app.backup.BackupManager
import android.content.BroadcastReceiver
import android.content.ComponentName
import android.content.ContentResolver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.database.ContentObserver
import android.net.Uri
import android.os.Environment
import android.os.UserHandle
import android.service.controls.Control
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.qualifiers.Background
import com.android.systemui.dump.DumpManager
import com.android.systemui.settings.UserFileManager
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_SEEDING_COMPLETED
@@ -61,6 +60,7 @@ class ControlsControllerImpl @Inject constructor (
    private val bindingController: ControlsBindingController,
    private val listingController: ControlsListingController,
    private val broadcastDispatcher: BroadcastDispatcher,
    private val userFileManager: UserFileManager,
    optionalWrapper: Optional<ControlsFavoritePersistenceWrapper>,
    dumpManager: DumpManager,
    userTracker: UserTracker
@@ -84,15 +84,12 @@ class ControlsControllerImpl @Inject constructor (
    override val currentUserId
        get() = currentUser.identifier

    private val contentResolver: ContentResolver
        get() = context.contentResolver

    private val persistenceWrapper: ControlsFavoritePersistenceWrapper
    @VisibleForTesting
    internal var auxiliaryPersistenceWrapper: AuxiliaryPersistenceWrapper

    init {
        userStructure = UserStructure(context, currentUser)
        userStructure = UserStructure(context, currentUser, userFileManager)

        persistenceWrapper = optionalWrapper.orElseGet {
            ControlsFavoritePersistenceWrapper(
@@ -111,7 +108,7 @@ class ControlsControllerImpl @Inject constructor (
    private fun setValuesForUser(newUser: UserHandle) {
        Log.d(TAG, "Changing to user: $newUser")
        currentUser = newUser
        userStructure = UserStructure(context, currentUser)
        userStructure = UserStructure(context, currentUser, userFileManager)
        persistenceWrapper.changeFileAndBackupManager(
                userStructure.file,
                BackupManager(userStructure.userContext)
@@ -187,8 +184,11 @@ class ControlsControllerImpl @Inject constructor (

                // When a component is uninstalled, allow seeding to happen again if the user
                // reinstalls the app
                val prefs = userStructure.userContext.getSharedPreferences(
                    PREFS_CONTROLS_FILE, Context.MODE_PRIVATE)
                val prefs = userFileManager.getSharedPreferences(
                    PREFS_CONTROLS_FILE,
                    Context.MODE_PRIVATE,
                    userTracker.userId
                )
                val completedSeedingPackageSet = prefs.getStringSet(
                    PREFS_CONTROLS_SEEDING_COMPLETED, mutableSetOf<String>())
                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 file = Environment.buildPath(
            userContext.filesDir,
            ControlsFavoritePersistenceWrapper.FILE_NAME
    )

    val auxiliaryFile = Environment.buildPath(
            userContext.filesDir,
            AuxiliaryPersistenceWrapper.AUXILIARY_FILE_NAME
    )
    val file = userFileManager.getFile(ControlsFavoritePersistenceWrapper.FILE_NAME,
        user.identifier)
    val auxiliaryFile = userFileManager.getFile(AuxiliaryPersistenceWrapper.AUXILIARY_FILE_NAME,
        user.identifier)
}

/**
+23 −3
Original line number Diff line number Diff line
@@ -37,9 +37,14 @@ import com.android.systemui.controls.ControlsServiceInfo
import com.android.systemui.controls.management.ControlsListingController
import com.android.systemui.controls.ui.ControlsUiController
import com.android.systemui.dump.DumpManager
import com.android.systemui.settings.UserFileManager
import com.android.systemui.settings.UserTracker
import com.android.systemui.util.concurrency.FakeExecutor
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.Assert.assertEquals
import org.junit.Assert.assertFalse
@@ -50,20 +55,20 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.ArgumentCaptor
import org.mockito.ArgumentMatchers
import org.mockito.ArgumentMatchers.anyString
import org.mockito.Captor
import org.mockito.Mock
import org.mockito.Mockito
import org.mockito.Mockito.anyInt
import org.mockito.Mockito.`when`
import org.mockito.Mockito.inOrder
import org.mockito.Mockito.mock
import org.mockito.Mockito.never
import org.mockito.Mockito.reset
import org.mockito.Mockito.times
import org.mockito.Mockito.verify
import org.mockito.Mockito.verifyNoMoreInteractions
import org.mockito.Mockito.`when`
import org.mockito.MockitoAnnotations
import java.util.Optional
import java.util.function.Consumer

@SmallTest
@RunWith(AndroidTestingRunner::class)
@@ -85,6 +90,8 @@ class ControlsControllerImplTest : SysuiTestCase() {
    private lateinit var listingController: ControlsListingController
    @Mock(stubOnly = true)
    private lateinit var userTracker: UserTracker
    @Mock
    private lateinit var userFileManager: UserFileManager

    @Captor
    private lateinit var structureInfoCaptor: ArgumentCaptor<StructureInfo>
@@ -153,6 +160,9 @@ class ControlsControllerImplTest : SysuiTestCase() {

        canceller = DidRunRunnable()
        `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(
                wrapper,
@@ -161,6 +171,7 @@ class ControlsControllerImplTest : SysuiTestCase() {
                bindingController,
                listingController,
                broadcastDispatcher,
                userFileManager,
                Optional.of(persistenceWrapper),
                mock(DumpManager::class.java),
                userTracker
@@ -217,6 +228,7 @@ class ControlsControllerImplTest : SysuiTestCase() {
                bindingController,
                listingController,
                broadcastDispatcher,
                userFileManager,
                Optional.of(persistenceWrapper),
                mock(DumpManager::class.java),
                userTracker
@@ -911,6 +923,14 @@ class ControlsControllerImplTest : SysuiTestCase() {

        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 {