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

Commit 9769c564 authored by Darrell Shi's avatar Darrell Shi
Browse files

Request backup when communal data changes

Test: atest CommunalWidgetRepositoryImplTest
Bug: 309809222
Flag: ACONFIG com.android.systemui.communal_hub TEAMFOOD
Change-Id: I6bfc94831ea4bf0656cd60a52f4d9264fdc8a67d
parent d8353986
Loading
Loading
Loading
Loading
+29 −2
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.communal.data.repository

import android.app.backup.BackupManager
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProviderInfo
import android.appwidget.AppWidgetProviderInfo.WIDGET_FEATURE_CONFIGURATION_OPTIONAL
@@ -68,6 +69,7 @@ class CommunalWidgetRepositoryImplTest : SysuiTestCase() {
    @Mock private lateinit var providerInfoA: AppWidgetProviderInfo
    @Mock private lateinit var communalWidgetHost: CommunalWidgetHost
    @Mock private lateinit var communalWidgetDao: CommunalWidgetDao
    @Mock private lateinit var backupManager: BackupManager

    private lateinit var logBuffer: LogBuffer
    private lateinit var fakeWidgets: MutableStateFlow<Map<CommunalItemRank, CommunalWidgetItem>>
@@ -106,6 +108,7 @@ class CommunalWidgetRepositoryImplTest : SysuiTestCase() {
                communalWidgetHost,
                communalWidgetDao,
                logBuffer,
                backupManager,
            )
    }

@@ -129,6 +132,9 @@ class CommunalWidgetRepositoryImplTest : SysuiTestCase() {
                        priority = communalItemRankEntry.rank,
                    )
                )

            // Verify backup not requested
            verify(backupManager, never()).dataChanged()
        }

    @Test
@@ -152,6 +158,9 @@ class CommunalWidgetRepositoryImplTest : SysuiTestCase() {

            verify(communalWidgetHost).allocateIdAndBindWidget(provider, user)
            verify(communalWidgetDao).addWidget(id, provider, priority)

            // Verify backup requested
            verify(backupManager).dataChanged()
        }

    @Test
@@ -176,6 +185,9 @@ class CommunalWidgetRepositoryImplTest : SysuiTestCase() {
            verify(communalWidgetHost).allocateIdAndBindWidget(provider, user)
            verify(communalWidgetDao, never()).addWidget(id, provider, priority)
            verify(appWidgetHost).deleteAppWidgetId(id)

            // Verify backup not requested
            verify(backupManager, never()).dataChanged()
        }

    @Test
@@ -202,6 +214,9 @@ class CommunalWidgetRepositoryImplTest : SysuiTestCase() {
            verify(communalWidgetHost).allocateIdAndBindWidget(provider, user)
            verify(communalWidgetDao, never()).addWidget(id, provider, priority)
            verify(appWidgetHost).deleteAppWidgetId(id)

            // Verify backup not requested
            verify(backupManager, never()).dataChanged()
        }

    @Test
@@ -225,10 +240,13 @@ class CommunalWidgetRepositoryImplTest : SysuiTestCase() {

            verify(communalWidgetHost).allocateIdAndBindWidget(provider, user)
            verify(communalWidgetDao).addWidget(id, provider, priority)

            // Verify backup requested
            verify(backupManager).dataChanged()
        }

    @Test
    fun deleteWidget_deletefromDbTrue_alsoDeleteFromHost() =
    fun deleteWidget_deleteFromDbTrue_alsoDeleteFromHost() =
        testScope.runTest {
            val id = 1
            whenever(communalWidgetDao.deleteWidgetById(eq(id))).thenReturn(true)
@@ -237,10 +255,13 @@ class CommunalWidgetRepositoryImplTest : SysuiTestCase() {

            verify(communalWidgetDao).deleteWidgetById(id)
            verify(appWidgetHost).deleteAppWidgetId(id)

            // Verify backup requested
            verify(backupManager).dataChanged()
        }

    @Test
    fun deleteWidget_deletefromDbFalse_doesNotDeleteFromHost() =
    fun deleteWidget_deleteFromDbFalse_doesNotDeleteFromHost() =
        testScope.runTest {
            val id = 1
            whenever(communalWidgetDao.deleteWidgetById(eq(id))).thenReturn(false)
@@ -249,6 +270,9 @@ class CommunalWidgetRepositoryImplTest : SysuiTestCase() {

            verify(communalWidgetDao).deleteWidgetById(id)
            verify(appWidgetHost, never()).deleteAppWidgetId(id)

            // Verify backup not requested
            verify(backupManager, never()).dataChanged()
        }

    @Test
@@ -259,6 +283,9 @@ class CommunalWidgetRepositoryImplTest : SysuiTestCase() {
            runCurrent()

            verify(communalWidgetDao).updateWidgetOrder(widgetIdToPriorityMap)

            // Verify backup requested
            verify(backupManager).dataChanged()
        }

    private fun installedProviders(providers: List<AppWidgetProviderInfo>) {
+5 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.systemui.communal.data.repository

import android.app.backup.BackupManager
import android.appwidget.AppWidgetManager
import android.content.ComponentName
import android.os.UserHandle
@@ -82,6 +83,7 @@ constructor(
    private val communalWidgetHost: CommunalWidgetHost,
    private val communalWidgetDao: CommunalWidgetDao,
    @CommunalLog logBuffer: LogBuffer,
    private val backupManager: BackupManager,
) : CommunalWidgetRepository {
    companion object {
        const val TAG = "CommunalWidgetRepository"
@@ -143,6 +145,7 @@ constructor(
                    provider = provider,
                    priority = priority,
                )
                backupManager.dataChanged()
            } else {
                appWidgetHost.deleteAppWidgetId(id)
            }
@@ -155,6 +158,7 @@ constructor(
            if (communalWidgetDao.deleteWidgetById(widgetId)) {
                appWidgetHost.deleteAppWidgetId(widgetId)
                logger.i("Deleted widget with id $widgetId.")
                backupManager.dataChanged()
            }
        }
    }
@@ -165,6 +169,7 @@ constructor(
            logger.i({ "Updated the order of widget list with ids: $str1." }) {
                str1 = widgetIdToPriorityMap.toString()
            }
            backupManager.dataChanged()
        }
    }

+8 −0
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.systemui.dagger;

import android.app.INotificationManager;
import android.app.Service;
import android.app.backup.BackupManager;
import android.content.Context;
import android.service.dreams.IDreamManager;

@@ -309,6 +310,13 @@ public abstract class SystemUIModule {
        return new Monitor(executor, Collections.singleton(systemProcessCondition), logBuffer);
    }

    /** Provides the package name for SystemUI. */
    @SysUISingleton
    @Provides
    static BackupManager provideBackupManager(@Application Context context) {
        return new BackupManager(context);
    }

    @BindsOptionalOf
    abstract CommandQueue optionalCommandQueue();