Skip to content

Commit

Permalink
Clear history entries from memory and database when clicking fire button
Browse files Browse the repository at this point in the history
  • Loading branch information
CrisBarreiro committed May 16, 2024
1 parent 38500c8 commit 6831b27
Show file tree
Hide file tree
Showing 7 changed files with 32 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import com.duckduckgo.app.location.GeoLocationPermissions
import com.duckduckgo.app.settings.db.SettingsDataStore
import com.duckduckgo.app.tabs.model.TabRepository
import com.duckduckgo.cookies.api.DuckDuckGoCookieManager
import com.duckduckgo.history.api.NavigationHistory
import com.duckduckgo.privacyprotectionspopup.api.PrivacyProtectionsPopupDataClearer
import com.duckduckgo.savedsites.api.SavedSitesRepository
import com.duckduckgo.site.permissions.api.SitePermissionsManager
Expand Down Expand Up @@ -63,6 +64,7 @@ class ClearPersonalDataActionTest {
private val mockSavedSitesRepository: SavedSitesRepository = mock()
private val mockSitePermissionsManager: SitePermissionsManager = mock()
private val mockPrivacyProtectionsPopupDataClearer: PrivacyProtectionsPopupDataClearer = mock()
private val mockNavigationHistory: NavigationHistory = mock()

private val fireproofWebsites: LiveData<List<FireproofWebsiteEntity>> = MutableLiveData()

Expand All @@ -84,6 +86,7 @@ class ClearPersonalDataActionTest {
savedSitesRepository = mockSavedSitesRepository,
privacyProtectionsPopupDataClearer = mockPrivacyProtectionsPopupDataClearer,
sitePermissionsManager = mockSitePermissionsManager,
navigationHistory = mockNavigationHistory,
)
whenever(mockFireproofWebsiteRepository.getFireproofWebsites()).thenReturn(fireproofWebsites)
whenever(mockDeviceSyncState.isUserSignedInOnDevice()).thenReturn(true)
Expand Down
3 changes: 3 additions & 0 deletions app/src/main/java/com/duckduckgo/app/di/PrivacyModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ import com.duckduckgo.app.trackerdetection.db.TdsEntityDao
import com.duckduckgo.common.utils.DispatcherProvider
import com.duckduckgo.cookies.api.DuckDuckGoCookieManager
import com.duckduckgo.di.scopes.AppScope
import com.duckduckgo.history.api.NavigationHistory
import com.duckduckgo.privacyprotectionspopup.api.PrivacyProtectionsPopupDataClearer
import com.duckduckgo.savedsites.api.SavedSitesRepository
import com.duckduckgo.site.permissions.api.SitePermissionsManager
Expand Down Expand Up @@ -84,6 +85,7 @@ object PrivacyModule {
deviceSyncState: DeviceSyncState,
savedSitesRepository: SavedSitesRepository,
privacyProtectionsPopupDataClearer: PrivacyProtectionsPopupDataClearer,
navigationHistory: NavigationHistory,
dispatcherProvider: DispatcherProvider,
): ClearDataAction {
return ClearPersonalDataAction(
Expand All @@ -102,6 +104,7 @@ object PrivacyModule {
deviceSyncState,
savedSitesRepository,
privacyProtectionsPopupDataClearer,
navigationHistory,
dispatcherProvider,
)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ import com.duckduckgo.app.tabs.model.TabRepository
import com.duckduckgo.common.utils.DefaultDispatcherProvider
import com.duckduckgo.common.utils.DispatcherProvider
import com.duckduckgo.cookies.api.DuckDuckGoCookieManager
import com.duckduckgo.history.api.NavigationHistory
import com.duckduckgo.privacyprotectionspopup.api.PrivacyProtectionsPopupDataClearer
import com.duckduckgo.savedsites.api.SavedSitesRepository
import com.duckduckgo.site.permissions.api.SitePermissionsManager
Expand Down Expand Up @@ -72,6 +73,7 @@ class ClearPersonalDataAction(
private val deviceSyncState: DeviceSyncState,
private val savedSitesRepository: SavedSitesRepository,
private val privacyProtectionsPopupDataClearer: PrivacyProtectionsPopupDataClearer,
private val navigationHistory: NavigationHistory,
private val dispatchers: DispatcherProvider = DefaultDispatcherProvider(),
) : ClearDataAction {

Expand Down Expand Up @@ -104,6 +106,8 @@ class ClearPersonalDataAction(
privacyProtectionsPopupDataClearer.clearPersonalData()

clearTabsAsync(appInForeground)

navigationHistory.clearHistory()
}

withContext(dispatchers.main()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,4 +34,9 @@ interface NavigationHistory {
*/
@Deprecated("RxJava is deprecated, except for Auto-Complete")
fun getHistorySingle(): Single<List<HistoryEntry>>

/**
* Clears all history entries.
*/
suspend fun clearHistory()
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@ interface HistoryRepository {
query: String?,
isSerp: Boolean,
)

suspend fun clearHistory()
}

class RealHistoryRepository(
Expand Down Expand Up @@ -78,6 +80,14 @@ class RealHistoryRepository(
}
}

override suspend fun clearHistory() {
withContext(dispatcherProvider.io()) {
cachedHistoryEntries = null
historyDao.deleteAll()
fetchAndCacheHistoryEntries()
}
}

private suspend fun fetchAndCacheHistoryEntries(): List<HistoryEntry> {
return historyDao
.getHistoryEntriesWithVisits()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,4 +42,8 @@ class RealNavigationHistory @Inject constructor(
override fun getHistorySingle(): Single<List<HistoryEntry>> {
return historyRepository.getHistoryObservable()
}

override suspend fun clearHistory() {
historyRepository.clearHistory()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,7 @@ interface HistoryDao {

@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insertVisit(visit: VisitEntity)

@Query("DELETE FROM history_entries")
suspend fun deleteAll()
}

0 comments on commit 6831b27

Please sign in to comment.