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

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

Merge "[Home Controls] Update home controls file usage."

parents 0b2a4d09 e4c256d9
Loading
Loading
Loading
Loading
+14 −20
Original line number Original line Diff line number Diff line
@@ -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
@@ -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
@@ -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
@@ -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(
@@ -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)
@@ -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 }
@@ -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
    )
}
}


/**
/**
+23 −3
Original line number Original line 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.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 {