Skip to content

Commit 10b5d93

Browse files
committed
Merge branch 'release/5.28.2'
2 parents b353489 + f416cbd commit 10b5d93

File tree

14 files changed

+83
-36
lines changed

14 files changed

+83
-36
lines changed

app/src/androidTest/java/com/duckduckgo/app/privacy/db/NetworkLeaderboardDaoTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ class NetworkLeaderboardDaoTest {
7777
}
7878

7979
@Test
80-
fun whenSiteVisitedIncremenetedThenSiteVisitedCountIncreaesByOne() {
80+
fun whenSitesVisitedIncrementedThenSiteVisitedCountIncreasesByOne() {
8181
dao.incrementSitesVisited()
8282
assertEquals(1, dao.sitesVisited().blockingObserve())
8383
dao.incrementSitesVisited()

app/src/androidTest/java/com/duckduckgo/app/privacy/renderer/TrackersRendererTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ class TrackersRendererTest {
6565
}
6666

6767
@Test
68-
fun whenSitestVisitedIsZeroThenPercentageIsBlank() {
68+
fun whenSitesVisitedIsZeroThenPercentageIsBlank() {
6969
val text = testee.networkPercentage(NetworkLeaderboardEntry("", 10), 0)
7070
assertEquals("", text)
7171
}

app/src/androidTest/java/com/duckduckgo/app/privacy/ui/PrivacyDashboardViewModelTest.kt

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class PrivacyDashboardViewModelTest {
4848
private var viewStateObserver: Observer<PrivacyDashboardViewModel.ViewState> = mock()
4949
private var settingStore: PrivacySettingsStore = mock()
5050
private var networkLeaderboardDao: NetworkLeaderboardDao = mock()
51-
private var networkLeaserboardLiveData: LiveData<List<NetworkLeaderboardEntry>> = mock()
51+
private var networkLeaderboardLiveData: LiveData<List<NetworkLeaderboardEntry>> = mock()
5252
private var sitesVisitedLiveData: LiveData<Int> = mock()
5353
private var mockPixel: Pixel = mock()
5454

@@ -61,9 +61,9 @@ class PrivacyDashboardViewModelTest {
6161
@Before
6262
fun before() {
6363
whenever(sitesVisitedLiveData.value).thenReturn(0)
64-
whenever(networkLeaserboardLiveData.value).thenReturn(emptyList())
64+
whenever(networkLeaderboardLiveData.value).thenReturn(emptyList())
6565
whenever(networkLeaderboardDao.sitesVisited()).thenReturn(sitesVisitedLiveData)
66-
whenever(networkLeaderboardDao.trackerNetworkLeaderboard()).thenReturn(networkLeaserboardLiveData)
66+
whenever(networkLeaderboardDao.trackerNetworkLeaderboard()).thenReturn(networkLeaderboardLiveData)
6767
}
6868

6969
@After
@@ -151,32 +151,41 @@ class PrivacyDashboardViewModelTest {
151151
}
152152

153153
@Test
154-
fun whenNetworkCountIsAtLeastThreeAndTotalSitesIsOverThirtyThenShowSummaryIsTrue() {
154+
fun whenNetworkCountIsThreeAndTotalSitesIsThirtyOneThenShowSummaryIsTrue() {
155155
val first = NetworkLeaderboardEntry("Network1", 5)
156156
val second = NetworkLeaderboardEntry("Network2", 3)
157157
val third = NetworkLeaderboardEntry("Network3", 3)
158158
testee.onTrackerNetworkEntriesChanged(listOf(first, second, third))
159159
testee.onSitesVisitedChanged(31)
160-
assertTrue(testee.viewState.value!!.showTrackerNetworkLeaderboard)
160+
assertTrue(testee.viewState.value!!.shouldShowTrackerNetworkLeaderboard)
161161
}
162162

163163
@Test
164-
fun whenNetworkCountIsLessThanThreeThenShowSummaryIsFalse() {
164+
fun whenNetworkCountIsTwoAndTotalSitesIsThirtyOneThenShowSummaryIsFalse() {
165165
val first = NetworkLeaderboardEntry("Network1", 5)
166166
val second = NetworkLeaderboardEntry("Network2", 3)
167167
testee.onTrackerNetworkEntriesChanged(listOf(first, second))
168168
testee.onSitesVisitedChanged(31)
169-
assertFalse(testee.viewState.value!!.showTrackerNetworkLeaderboard)
169+
assertFalse(testee.viewState.value!!.shouldShowTrackerNetworkLeaderboard)
170170
}
171171

172172
@Test
173-
fun whenSitesIsNotOverThirtyThenShowSummaryIsFalse() {
173+
fun whenNetworkCountIsTwoAndTotalSitesIsThirtyThenShowSummaryIsFalse() {
174+
val first = NetworkLeaderboardEntry("Network1", 5)
175+
val second = NetworkLeaderboardEntry("Network2", 3)
176+
testee.onTrackerNetworkEntriesChanged(listOf(first, second))
177+
testee.onSitesVisitedChanged(30)
178+
assertFalse(testee.viewState.value!!.shouldShowTrackerNetworkLeaderboard)
179+
}
180+
181+
@Test
182+
fun whenNetworkCountIsThreeAndTotalSitesIsThirtyThenShowSummaryIsFalse() {
174183
val first = NetworkLeaderboardEntry("Network1", 5)
175184
val second = NetworkLeaderboardEntry("Network2", 3)
176185
val third = NetworkLeaderboardEntry("Network3", 3)
177186
testee.onTrackerNetworkEntriesChanged(listOf(first, second, third))
178187
testee.onSitesVisitedChanged(30)
179-
assertFalse(testee.viewState.value!!.showTrackerNetworkLeaderboard)
188+
assertFalse(testee.viewState.value!!.shouldShowTrackerNetworkLeaderboard)
180189
}
181190

182191
@Test
@@ -195,7 +204,7 @@ class PrivacyDashboardViewModelTest {
195204
testee.onTrackerNetworkEntriesChanged(emptyList())
196205
val viewState = testee.viewState.value!!
197206
assertEquals(emptyList<NetworkLeaderboardEntry>(), viewState.trackerNetworkEntries)
198-
assertFalse(viewState.showTrackerNetworkLeaderboard)
207+
assertFalse(viewState.shouldShowTrackerNetworkLeaderboard)
199208
}
200209

201210
private fun site(

app/src/main/java/com/duckduckgo/app/autocomplete/api/AutoCompleteService.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@
1616

1717
package com.duckduckgo.app.autocomplete.api
1818

19+
import com.duckduckgo.app.global.AppUrl
1920
import io.reactivex.Observable
2021
import retrofit2.http.GET
2122
import retrofit2.http.Query
2223

2324

2425
interface AutoCompleteService {
2526

26-
@GET("/ac/")
27+
@GET("${AppUrl.Url.API}/ac/")
2728
fun autoComplete(@Query("q") query: String): Observable<List<AutoCompleteServiceRawResult>>
2829
}
2930

app/src/main/java/com/duckduckgo/app/di/NetworkModule.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import com.duckduckgo.app.feedback.api.FireAndForgetFeedbackSubmitter
2828
import com.duckduckgo.app.feedback.api.SubReasonApiMapper
2929
import com.duckduckgo.app.global.AppUrl.Url
3030
import com.duckduckgo.app.global.api.ApiRequestInterceptor
31+
import com.duckduckgo.app.global.api.NetworkApiCache
3132
import com.duckduckgo.app.global.job.JobBuilder
3233
import com.duckduckgo.app.httpsupgrade.api.HttpsUpgradeService
3334
import com.duckduckgo.app.job.AppConfigurationSyncer
@@ -47,6 +48,7 @@ import okhttp3.OkHttpClient
4748
import retrofit2.Retrofit
4849
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory
4950
import retrofit2.converter.moshi.MoshiConverterFactory
51+
import java.io.File
5052
import javax.inject.Named
5153
import javax.inject.Singleton
5254

@@ -58,7 +60,8 @@ class NetworkModule {
5860
@Singleton
5961
@Named("api")
6062
fun apiOkHttpClient(context: Context, apiRequestInterceptor: ApiRequestInterceptor): OkHttpClient {
61-
val cache = Cache(context.cacheDir, CACHE_SIZE)
63+
val cacheLocation = File(context.cacheDir, NetworkApiCache.FILE_NAME)
64+
val cache = Cache(cacheLocation, CACHE_SIZE)
6265
return OkHttpClient.Builder()
6366
.addInterceptor(apiRequestInterceptor)
6467
.cache(cache)
@@ -67,7 +70,7 @@ class NetworkModule {
6770

6871
@Provides
6972
@Singleton
70-
@Named("pixel")
73+
@Named("nonCaching")
7174
fun pixelOkHttpClient(apiRequestInterceptor: ApiRequestInterceptor): OkHttpClient {
7275
return OkHttpClient.Builder()
7376
.addInterceptor(apiRequestInterceptor)
@@ -89,12 +92,13 @@ class NetworkModule {
8992

9093
@Provides
9194
@Singleton
92-
@Named("pixel")
93-
fun pixelRetrofit(@Named("pixel") okHttpClient: OkHttpClient): Retrofit {
95+
@Named("nonCaching")
96+
fun nonCachingRetrofit(@Named("nonCaching") okHttpClient: OkHttpClient, moshi: Moshi): Retrofit {
9497
return Retrofit.Builder()
95-
.baseUrl(Url.PIXEL)
98+
.baseUrl(Url.API)
9699
.client(okHttpClient)
97100
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
101+
.addConverterFactory(MoshiConverterFactory.create(moshi))
98102
.build()
99103
}
100104

@@ -112,7 +116,7 @@ class NetworkModule {
112116
retrofit.create(HttpsUpgradeService::class.java)
113117

114118
@Provides
115-
fun autoCompleteService(@Named("api") retrofit: Retrofit): AutoCompleteService =
119+
fun autoCompleteService(@Named("nonCaching") retrofit: Retrofit): AutoCompleteService =
116120
retrofit.create(AutoCompleteService::class.java)
117121

118122
@Provides

app/src/main/java/com/duckduckgo/app/di/StatisticsModule.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ import com.duckduckgo.app.statistics.pixels.Pixel
2929
import com.duckduckgo.app.statistics.store.StatisticsDataStore
3030
import dagger.Module
3131
import dagger.Provides
32-
import okhttp3.OkHttpClient
3332
import retrofit2.Retrofit
3433
import javax.inject.Named
3534

@@ -49,7 +48,7 @@ class StatisticsModule {
4948
StatisticsRequester(statisticsDataStore, statisticsService, variantManager)
5049

5150
@Provides
52-
fun pixelService(@Named("pixel") okHttpClient: OkHttpClient, @Named("pixel") retrofit: Retrofit): PixelService {
51+
fun pixelService(@Named("nonCaching") retrofit: Retrofit): PixelService {
5352
return retrofit.create(PixelService::class.java)
5453
}
5554

app/src/main/java/com/duckduckgo/app/fire/AppCacheClearer.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.duckduckgo.app.fire
1818

1919
import android.content.Context
20+
import com.duckduckgo.app.global.api.NetworkApiCache
2021
import com.duckduckgo.app.global.file.FileDeleter
2122

2223

@@ -34,13 +35,21 @@ class AndroidAppCacheClearer(private val context: Context, private val fileDelet
3435

3536
companion object {
3637

37-
/* Exclude this WebView cache directory, based on warning from Firefox Focus:
38+
/*
39+
* Exclude this WebView cache directory, based on warning from Firefox Focus:
3840
* "If the folder or its contents are deleted, WebView will stop using the disk cache entirely."
3941
*/
4042
private const val WEBVIEW_CACHE_DIR = "org.chromium.android_webview"
4143

44+
/*
45+
* Exclude the OkHttp networking cache from being deleted. This doesn't contain any sensitive information.
46+
* Deleting this would just cause large amounts of non-sensitive data to have be downloaded again when app next launches.
47+
*/
48+
private const val NETWORK_CACHE_DIR = NetworkApiCache.FILE_NAME
49+
4250
private val FILENAMES_EXCLUDED_FROM_DELETION = listOf(
43-
WEBVIEW_CACHE_DIR
51+
WEBVIEW_CACHE_DIR,
52+
NETWORK_CACHE_DIR
4453
)
4554
}
4655

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
/*
2+
* Copyright (c) 2019 DuckDuckGo
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
package com.duckduckgo.app.global.api
18+
19+
20+
class NetworkApiCache {
21+
22+
companion object {
23+
const val FILE_NAME = "okHttpCache"
24+
}
25+
}

app/src/main/java/com/duckduckgo/app/privacy/ui/PrivacyDashboardActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ class PrivacyDashboardActivity : DuckDuckGoActivity() {
9999

100100
private fun renderTrackerNetworkLeaderboard(viewState: ViewState) {
101101

102-
if (!viewState.showTrackerNetworkLeaderboard) {
102+
if (!viewState.shouldShowTrackerNetworkLeaderboard) {
103103
hideTrackerNetworkLeaderboard()
104104
return
105105
}

app/src/main/java/com/duckduckgo/app/privacy/ui/PrivacyDashboardViewModel.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ class PrivacyDashboardViewModel(
4747
val allTrackersBlocked: Boolean,
4848
val practices: PrivacyPractices.Summary,
4949
val toggleEnabled: Boolean,
50-
val showTrackerNetworkLeaderboard: Boolean,
50+
val shouldShowTrackerNetworkLeaderboard: Boolean,
5151
val sitesVisited: Int,
5252
val trackerNetworkEntries: List<NetworkLeaderboardEntry>,
5353
val shouldReloadPage: Boolean
@@ -84,7 +84,7 @@ class PrivacyDashboardViewModel(
8484
val siteCount = count ?: 0
8585
val networkCount = viewState.value?.trackerNetworkEntries?.count() ?: 0
8686
viewState.value = viewState.value?.copy(
87-
showTrackerNetworkLeaderboard = showTrackerNetworkLeaderboard(siteCount, networkCount),
87+
shouldShowTrackerNetworkLeaderboard = showTrackerNetworkLeaderboard(siteCount, networkCount),
8888
sitesVisited = siteCount
8989
)
9090
}
@@ -93,7 +93,7 @@ class PrivacyDashboardViewModel(
9393
val domainCount = viewState.value?.sitesVisited ?: 0
9494
val networkEntries = networkLeaderboardEntries ?: emptyList()
9595
viewState.value = viewState.value?.copy(
96-
showTrackerNetworkLeaderboard = showTrackerNetworkLeaderboard(domainCount, networkEntries.count()),
96+
shouldShowTrackerNetworkLeaderboard = showTrackerNetworkLeaderboard(domainCount, networkEntries.count()),
9797
trackerNetworkEntries = networkEntries
9898
)
9999
}
@@ -121,7 +121,7 @@ class PrivacyDashboardViewModel(
121121
allTrackersBlocked = true,
122122
toggleEnabled = settingsStore.privacyOn,
123123
practices = UNKNOWN,
124-
showTrackerNetworkLeaderboard = false,
124+
shouldShowTrackerNetworkLeaderboard = false,
125125
sitesVisited = 0,
126126
trackerNetworkEntries = emptyList(),
127127
shouldReloadPage = shouldReloadPage

0 commit comments

Comments
 (0)