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
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryImplTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryImplTest.kt
index 475179d..a54a00d 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryImplTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/communal/data/repository/CommunalWidgetRepositoryImplTest.kt
@@ -52,6 +52,7 @@
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 @@
}
@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
diff --git a/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepository.kt b/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepository.kt
index 2ac9d05..e4c9195 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepository.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/data/repository/CommunalWidgetRepository.kt
@@ -54,11 +54,12 @@
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,23 +147,15 @@
}
}
- 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.")
+ appWidgetHost.deleteAppWidgetId(widgetId)
+ logger.i("Deleted widget with id $widgetId.")
}
}
}
- 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 {
communalWidgetDao.updateWidgetOrder(widgetIdToPriorityMap)
diff --git a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt b/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt
index 950ac3c..33520ef 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/domain/interactor/CommunalInteractor.kt
@@ -238,14 +238,11 @@
) = 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.
*
diff --git a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalEditModeViewModel.kt b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalEditModeViewModel.kt
index 69d5581..0b355cc 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalEditModeViewModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/ui/viewmodel/CommunalEditModeViewModel.kt
@@ -62,7 +62,7 @@
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)
diff --git a/packages/SystemUI/src/com/android/systemui/communal/widgets/CommunalAppWidgetHostStartable.kt b/packages/SystemUI/src/com/android/systemui/communal/widgets/CommunalAppWidgetHostStartable.kt
index 6fd0fbe..4ddd768 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/widgets/CommunalAppWidgetHostStartable.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/widgets/CommunalAppWidgetHostStartable.kt
@@ -50,7 +50,7 @@
.launchIn(bgScope)
appWidgetHost.appWidgetIdToRemove
- .onEach { appWidgetId -> communalInteractor.deleteWidgetFromDb(appWidgetId) }
+ .onEach { appWidgetId -> communalInteractor.deleteWidget(id = appWidgetId) }
.launchIn(bgScope)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/FakeCommunalWidgetRepository.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/FakeCommunalWidgetRepository.kt
index 7301404..fab64e3 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/FakeCommunalWidgetRepository.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/communal/data/repository/FakeCommunalWidgetRepository.kt
@@ -36,7 +36,7 @@
}
}
- override fun deleteWidgetFromDb(widgetId: Int) {
+ override fun deleteWidget(widgetId: Int) {
if (_communalWidgets.value.none { it.appWidgetId == widgetId }) {
return
}
@@ -44,10 +44,6 @@
_communalWidgets.value = _communalWidgets.value.filter { it.appWidgetId != widgetId }
}
- override fun deleteWidgetFromHost(widgetId: Int) {
- deleteWidgetFromDb(widgetId)
- }
-
private fun onConfigured(id: Int, providerInfo: AppWidgetProviderInfo, priority: Int) {
_communalWidgets.value += listOf(CommunalWidgetContentModel(id, providerInfo, priority))
}