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

Commit 09b1588e authored by Coco Duan's avatar Coco Duan
Browse files

Clean up delete widget functions in CommunalWidgetRepository

This follow-up change (after ag/26073820) is to consolidate the two
deleteFromHost() and deleteFromDb() into one deleteWidget() function
for simplicity.

Still use DB as the source of truth to check whether the id requested
to be deleted exists then delete. If returning false, nothing will be
deleted from DB or widget host.

Bug: b/323265998
Test: atest CommunalWidgetRepositoryImplTest
Flag: ACONFIG com.android.systemui.communal_hub STAGING
Change-Id: Ied2c69bcdfad7007bbcb6762cb96ff2239752729
parent 3f220263
Loading
Loading
Loading
Loading
+10 −5
Original line number Diff line number Diff line
@@ -52,6 +52,7 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.Mock
import org.mockito.Mockito.anyInt
import org.mockito.Mockito.eq
import org.mockito.Mockito.never
import org.mockito.Mockito.verify
import org.mockito.MockitoAnnotations
@@ -198,23 +199,27 @@ class CommunalWidgetRepositoryImplTest : SysuiTestCase() {
        }

    @Test
    fun deleteWidgetFromDb() =
    fun deleteWidget_deletefromDbTrue_alsoDeleteFromHost() =
        testScope.runTest {
            val id = 1
            underTest.deleteWidgetFromDb(id)
            whenever(communalWidgetDao.deleteWidgetById(eq(id))).thenReturn(true)
            underTest.deleteWidget(id)
            runCurrent()

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

    @Test
    fun deleteWidgetFromHost() =
    fun deleteWidget_deletefromDbFalse_doesNotDeleteFromHost() =
        testScope.runTest {
            val id = 1
            underTest.deleteWidgetFromHost(id)
            whenever(communalWidgetDao.deleteWidgetById(eq(id))).thenReturn(false)
            underTest.deleteWidget(id)
            runCurrent()

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

    @Test
+9 −16
Original line number Diff line number Diff line
@@ -54,11 +54,12 @@ interface CommunalWidgetRepository {
        configurator: WidgetConfigurator? = null
    ) {}

    /** Delete a widget by id from the database. */
    fun deleteWidgetFromDb(widgetId: Int) {}

    /** Delete a widget by id from app widget host. */
    fun deleteWidgetFromHost(widgetId: Int) {}
    /**
     * Delete a widget by id from the database and app widget host.
     *
     * @param widgetId id of the widget to remove.
     */
    fun deleteWidget(widgetId: Int) {}

    /**
     * Update the order of widgets in the database.
@@ -146,22 +147,14 @@ constructor(
        }
    }

    override fun deleteWidgetFromDb(widgetId: Int) {
    override fun deleteWidget(widgetId: Int) {
        bgScope.launch {
            if (communalWidgetDao.deleteWidgetById(widgetId)) {
                logger.i("Deleted widget with id $widgetId from DB .")
            } else {
                logger.w("Widget with id $widgetId cannot be deleted from DB.")
            }
        }
    }

    override fun deleteWidgetFromHost(widgetId: Int) {
        bgScope.launch {
                appWidgetHost.deleteAppWidgetId(widgetId)
                logger.i("Deleted widget with id $widgetId.")
            }
        }
    }

    override fun updateWidgetOrder(widgetIdToPriorityMap: Map<Int, Int>) {
        bgScope.launch {
+3 −6
Original line number Diff line number Diff line
@@ -238,14 +238,11 @@ constructor(
    ) = widgetRepository.addWidget(componentName, priority, configurator)

    /**
     * Delete a widget by id from the database. [CommunalAppWidgetHostStartable] invokes this
     * function to manage the deletion from the database for uninstalled or user-deleted widgets,
     * following the removal of a widget from the host.
     * Delete a widget by id. Called when user deletes a widget from the hub or a widget is
     * uninstalled from App widget host.
     */
    fun deleteWidgetFromDb(id: Int) = widgetRepository.deleteWidgetFromDb(id)
    fun deleteWidget(id: Int) = widgetRepository.deleteWidget(id)

    /** Delete a widget by id from AppWidgetHost. Called when user deletes a widget from the hub */
    fun deleteWidgetFromHost(id: Int) = widgetRepository.deleteWidgetFromHost(id)
    /**
     * Reorder the widgets.
     *
+1 −1
Original line number Diff line number Diff line
@@ -62,7 +62,7 @@ constructor(
    override val reorderingWidgets: StateFlow<Boolean>
        get() = _reorderingWidgets

    override fun onDeleteWidget(id: Int) = communalInteractor.deleteWidgetFromHost(id)
    override fun onDeleteWidget(id: Int) = communalInteractor.deleteWidget(id)

    override fun onReorderWidgets(widgetIdToPriorityMap: Map<Int, Int>) =
        communalInteractor.updateWidgetOrder(widgetIdToPriorityMap)
+1 −1
Original line number Diff line number Diff line
@@ -50,7 +50,7 @@ constructor(
            .launchIn(bgScope)

        appWidgetHost.appWidgetIdToRemove
            .onEach { appWidgetId -> communalInteractor.deleteWidgetFromDb(appWidgetId) }
            .onEach { appWidgetId -> communalInteractor.deleteWidget(id = appWidgetId) }
            .launchIn(bgScope)
    }

Loading