Skip to content

Commit 4d0d3ce

Browse files
committed
Merge branch 'hotfix/4.0.11'
2 parents 0a0bd95 + d7cf123 commit 4d0d3ce

32 files changed

+216
-199
lines changed

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ apply plugin: 'kotlin-kapt'
66
apply from: '../versioning.gradle'
77

88
ext {
9-
VERSION_NAME = "4.0.10"
9+
VERSION_NAME = "4.0.11"
1010
}
1111

1212
android {

app/src/androidTest/java/com/duckduckgo/app/browser/BrowserViewModelTest.kt

Lines changed: 2 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,12 @@ import android.arch.persistence.room.Room
2424
import android.net.Uri
2525
import android.support.test.InstrumentationRegistry
2626
import com.duckduckgo.app.autocomplete.api.AutoCompleteApi
27-
import com.duckduckgo.app.blockingObserve
2827
import com.duckduckgo.app.bookmarks.db.BookmarkEntity
2928
import com.duckduckgo.app.bookmarks.db.BookmarksDao
30-
import com.duckduckgo.app.bookmarks.ui.BookmarksActivity
3129
import com.duckduckgo.app.browser.BrowserViewModel.Command
3230
import com.duckduckgo.app.browser.BrowserViewModel.Command.LandingPage
3331
import com.duckduckgo.app.browser.BrowserViewModel.Command.Navigate
3432
import com.duckduckgo.app.browser.omnibar.OmnibarEntryConverter
35-
import com.duckduckgo.app.global.StringResolver
3633
import com.duckduckgo.app.global.db.AppDatabase
3734
import com.duckduckgo.app.privacymonitor.db.NetworkLeaderboardDao
3835
import com.duckduckgo.app.privacymonitor.db.NetworkLeaderboardEntry
@@ -46,10 +43,7 @@ import com.duckduckgo.app.settings.db.SettingsDataStore
4643
import com.duckduckgo.app.trackerdetection.model.TrackerNetwork
4744
import com.duckduckgo.app.trackerdetection.model.TrackerNetworks
4845
import com.duckduckgo.app.trackerdetection.model.TrackingEvent
49-
import com.nhaarman.mockito_kotlin.any
50-
import com.nhaarman.mockito_kotlin.doReturn
51-
import com.nhaarman.mockito_kotlin.mock
52-
import com.nhaarman.mockito_kotlin.whenever
46+
import com.nhaarman.mockito_kotlin.*
5347
import org.junit.After
5448
import org.junit.Assert.*
5549
import org.junit.Before
@@ -70,8 +64,6 @@ class BrowserViewModelTest {
7064

7165
private var lastNetworkLeaderboardEntry: NetworkLeaderboardEntry? = null
7266

73-
private val testStringResolver: StringResolver = object : StringResolver {}
74-
7567
private val testNetworkLeaderboardDao: NetworkLeaderboardDao = object : NetworkLeaderboardDao {
7668
override fun insert(leaderboardEntry: NetworkLeaderboardEntry) {
7769
lastNetworkLeaderboardEntry = leaderboardEntry
@@ -122,7 +114,6 @@ class BrowserViewModelTest {
122114
termsOfServiceStore = mockTermsOfServiceStore,
123115
trackerNetworks = TrackerNetworks(),
124116
privacyMonitorRepository = PrivacyMonitorRepository(),
125-
stringResolver = testStringResolver,
126117
networkLeaderboardDao = testNetworkLeaderboardDao,
127118
autoCompleteApi = mockAutoCompleteApi,
128119
appSettingsPreferencesStore = mockSettingsStore,
@@ -151,15 +142,6 @@ class BrowserViewModelTest {
151142
assertEquals("nytimes.com", testee.viewState.value!!.omnibarText)
152143
}
153144

154-
@Test
155-
fun whenBookmarksResultCodeIsOpenUrlThenNavigate() {
156-
testee.receivedBookmarksResult(BookmarksActivity.OPEN_URL_RESULT_CODE, "www.example.com")
157-
val captor: ArgumentCaptor<Command> = ArgumentCaptor.forClass(Command::class.java)
158-
verify(mockNavigationObserver).onChanged(captor.capture())
159-
assertNotNull(captor.value)
160-
assertTrue(captor.value is Navigate)
161-
}
162-
163145
@Test
164146
fun whenUrlPresentThenAddBookmarkButtonEnabled() {
165147
testee.urlChanged("www.example.com")
@@ -261,7 +243,7 @@ class BrowserViewModelTest {
261243
fun whenSharedTextReceivedThenNavigationTriggered() {
262244
testee.onSharedTextReceived("http://example.com")
263245
val captor: ArgumentCaptor<Command> = ArgumentCaptor.forClass(Command::class.java)
264-
verify(mockNavigationObserver).onChanged(captor.capture())
246+
verify(mockNavigationObserver, times(2)).onChanged(captor.capture())
265247
assertNotNull(captor.value)
266248
assertTrue(captor.value is Navigate)
267249
}

app/src/main/AndroidManifest.xml

Lines changed: 14 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,10 @@
1111
android:allowBackup="false"
1212
android:icon="@mipmap/ic_launcher"
1313
android:label="@string/appName"
14+
android:networkSecurityConfig="@xml/network_security_config"
1415
android:supportsRtl="true"
1516
android:theme="@style/AppTheme"
16-
android:networkSecurityConfig="@xml/network_security_config"
1717
tools:ignore="GoogleAppIndexingWarning">
18-
1918
<meta-data
2019
android:name="android.webkit.WebView.MetricsOptOut"
2120
android:value="true" />
@@ -25,10 +24,10 @@
2524
android:label="@string/appName">
2625
<intent-filter>
2726
<action android:name="android.intent.action.MAIN" />
27+
2828
<category android:name="android.intent.category.LAUNCHER" />
2929
</intent-filter>
3030
</activity>
31-
3231
<activity
3332
android:name="com.duckduckgo.app.home.HomeActivity"
3433
android:label="@string/appName"
@@ -48,60 +47,58 @@
4847
<!-- Allows apps to consume links and text shared from other apps e.g chrome -->
4948
<intent-filter>
5049
<action android:name="android.intent.action.SEND" />
50+
5151
<category android:name="android.intent.category.DEFAULT" />
52+
5253
<data android:mimeType="text/plain" />
5354
</intent-filter>
54-
5555
</activity>
56-
5756
<activity
5857
android:name=".BrowserActivity"
5958
android:configChanges="keyboardHidden|orientation|screenSize"
60-
android:launchMode="singleTask"
6159
android:parentActivityName="com.duckduckgo.app.home.HomeActivity" />
62-
6360
<activity
6461
android:name="com.duckduckgo.app.privacymonitor.ui.PrivacyDashboardActivity"
6562
android:label="@string/privacyDashboardActivityTitle"
6663
android:parentActivityName=".BrowserActivity" />
67-
6864
<activity
6965
android:name="com.duckduckgo.app.privacymonitor.ui.ScorecardActivity"
7066
android:label="@string/scorecardActivityTitle"
7167
android:parentActivityName="com.duckduckgo.app.privacymonitor.ui.PrivacyDashboardActivity" />
72-
7368
<activity
7469
android:name="com.duckduckgo.app.privacymonitor.ui.TrackerNetworksActivity"
7570
android:label="@string/networksActivityTitle"
7671
android:parentActivityName="com.duckduckgo.app.privacymonitor.ui.PrivacyDashboardActivity" />
77-
7872
<activity
7973
android:name="com.duckduckgo.app.privacymonitor.ui.PrivacyPracticesActivity"
8074
android:label="@string/privacyTermsActivityTitle"
8175
android:parentActivityName="com.duckduckgo.app.privacymonitor.ui.PrivacyDashboardActivity" />
82-
8376
<activity
8477
android:name="com.duckduckgo.app.settings.SettingsActivity"
85-
android:label="@string/settingsActivityTitle"
86-
android:parentActivityName=".BrowserActivity" />
78+
android:label="@string/settingsActivityTitle"/>
8779

8880
<activity
8981
android:name="com.duckduckgo.app.about.AboutDuckDuckGoActivity"
9082
android:label="@string/aboutActivityTitle"
9183
android:parentActivityName="com.duckduckgo.app.settings.SettingsActivity"
92-
9384
android:theme="@style/AppTheme" />
94-
9585
<activity
9686
android:name="com.duckduckgo.app.bookmarks.ui.BookmarksActivity"
97-
android:label="@string/bookmarksActivityTitle"
98-
android:parentActivityName=".BrowserActivity" />
87+
android:label="@string/bookmarksActivityTitle" />
9988

10089
<service
10190
android:name="com.duckduckgo.app.job.AppConfigurationJobService"
10291
android:permission="android.permission.BIND_JOB_SERVICE" />
10392

93+
<receiver android:name="com.duckduckgo.widget.SearchWidget">
94+
<intent-filter>
95+
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
96+
</intent-filter>
10497

98+
<meta-data
99+
android:name="android.appwidget.provider"
100+
android:resource="@xml/search_widget_info" />
101+
</receiver>
105102
</application>
106103

107104
</manifest>

app/src/main/java/com/duckduckgo/app/about/AboutDuckDuckGoActivity.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import android.content.Intent
2121
import android.os.Bundle
2222
import android.support.v7.app.AppCompatActivity
2323
import com.duckduckgo.app.browser.R
24+
import com.duckduckgo.app.home.HomeActivity
2425
import kotlinx.android.synthetic.main.content_about_duck_duck_go.*
2526
import kotlinx.android.synthetic.main.include_toolbar.*
2627

@@ -32,7 +33,7 @@ class AboutDuckDuckGoActivity : AppCompatActivity() {
3233
configureActionBar()
3334

3435
learnMoreLink.setOnClickListener {
35-
setResult(RESULT_CODE_LOAD_ABOUT_DDG_WEB_PAGE)
36+
startActivity(HomeActivity.intent(this, getString(R.string.aboutUrl)))
3637
finish()
3738
}
3839
}

app/src/main/java/com/duckduckgo/app/bookmarks/ui/BookmarksActivity.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import com.duckduckgo.app.bookmarks.db.BookmarkEntity
3333
import com.duckduckgo.app.browser.R
3434
import com.duckduckgo.app.global.DuckDuckGoActivity
3535
import com.duckduckgo.app.global.ViewModelFactory
36+
import com.duckduckgo.app.home.HomeActivity
3637
import kotlinx.android.synthetic.main.content_bookmarks.*
3738
import kotlinx.android.synthetic.main.include_toolbar.*
3839
import kotlinx.android.synthetic.main.view_bookmark_entry.view.*
@@ -85,8 +86,7 @@ class BookmarksActivity : DuckDuckGoActivity() {
8586
}
8687

8788
private fun openBookmark(bookmark: BookmarkEntity) {
88-
val intent = Intent(bookmark.url)
89-
setResult(OPEN_URL_RESULT_CODE, intent)
89+
startActivity(HomeActivity.intent(this, bookmark.url))
9090
finish()
9191
}
9292

@@ -116,8 +116,6 @@ class BookmarksActivity : DuckDuckGoActivity() {
116116
fun intent(context: Context): Intent {
117117
return Intent(context, BookmarksActivity::class.java)
118118
}
119-
120-
val OPEN_URL_RESULT_CODE = Activity.RESULT_FIRST_USER
121119
}
122120

123121
class BookmarksAdapter(val context: Context, val viewModel: BookmarksViewModel) : Adapter<BookmarksViewHolder>() {

app/src/main/java/com/duckduckgo/app/browser/BrowserActivity.kt

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,7 @@ class BrowserActivity : DuckDuckGoActivity() {
9898
configureAutoComplete()
9999

100100
if (savedInstanceState == null) {
101-
consumeSharedTextExtra()
101+
consumeSharedQuery()
102102
}
103103
}
104104

@@ -122,12 +122,6 @@ class BrowserActivity : DuckDuckGoActivity() {
122122
it?.let { render(it) }
123123
})
124124

125-
viewModel.privacyGrade.observe(this, Observer<PrivacyGrade> {
126-
it?.let {
127-
privacyGradeMenu?.icon = getDrawable(it.icon())
128-
}
129-
})
130-
131125
viewModel.url.observe(this, Observer {
132126
it?.let { webView.loadUrl(it) }
133127
})
@@ -154,6 +148,13 @@ class BrowserActivity : DuckDuckGoActivity() {
154148
val intent = Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:${it.telephoneNumber}"))
155149
startActivity(intent)
156150
}
151+
is BrowserViewModel.Command.ShowKeyboard -> {
152+
Timber.i("Command: showing keyboard")
153+
omnibarTextInput.postDelayed({omnibarTextInput.showKeyboard()}, 300)
154+
}
155+
is BrowserViewModel.Command.ReinitialiseWebView -> {
156+
webView.clearHistory()
157+
}
157158
}
158159
})
159160
}
@@ -171,8 +172,8 @@ class BrowserActivity : DuckDuckGoActivity() {
171172
autoCompleteSuggestionsList.adapter = autoCompleteSuggestionsAdapter
172173
}
173174

174-
private fun consumeSharedTextExtra() {
175-
val sharedText = intent.getStringExtra(SHARED_TEXT_EXTRA)
175+
private fun consumeSharedQuery() {
176+
val sharedText = intent.getStringExtra(QUERY_EXTRA)
176177
if (sharedText != null) {
177178
viewModel.onSharedTextReceived(sharedText)
178179
}
@@ -293,7 +294,7 @@ class BrowserActivity : DuckDuckGoActivity() {
293294
setSupportZoom(true)
294295
}
295296

296-
webView.setDownloadListener { url, userAgent, contentDisposition, mimetype, contentLength ->
297+
webView.setDownloadListener { url, _, _, _, _ ->
297298
val request = DownloadManager.Request(Uri.parse(url))
298299
request.allowScanningByMediaScanner()
299300
request.setNotificationVisibility(VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
@@ -342,6 +343,11 @@ class BrowserActivity : DuckDuckGoActivity() {
342343

343344
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
344345
menuInflater.inflate(R.menu.menu_browser_activity, menu)
346+
viewModel.privacyGrade.observe(this, Observer<PrivacyGrade> {
347+
it?.let {
348+
privacyGradeMenu?.icon = getDrawable(it.icon())
349+
}
350+
})
345351
return true
346352
}
347353

@@ -379,31 +385,37 @@ class BrowserActivity : DuckDuckGoActivity() {
379385
popupMenu.show(rootView, anchorView)
380386
}
381387

388+
@Suppress("UNUSED_PARAMETER")
382389
fun onGoForwardClicked(view: View) {
383390
webView.goForward()
384391
popupMenu.dismiss()
385392
}
386393

394+
@Suppress("UNUSED_PARAMETER")
387395
fun onGoBackClicked(view: View) {
388396
webView.goBack()
389397
popupMenu.dismiss()
390398
}
391399

400+
@Suppress("UNUSED_PARAMETER")
392401
fun onRefreshClicked(view: View) {
393402
webView.reload()
394403
popupMenu.dismiss()
395404
}
396405

406+
@Suppress("UNUSED_PARAMETER")
397407
fun onBookmarksClicked(view: View) {
398408
launchBookmarksView()
399409
popupMenu.dismiss()
400410
}
401411

412+
@Suppress("UNUSED_PARAMETER")
402413
fun onAddBookmarkClicked(view: View) {
403414
addBookmark()
404415
popupMenu.dismiss()
405416
}
406417

418+
@Suppress("UNUSED_PARAMETER")
407419
fun onSettingsClicked(view: View) {
408420
launchSettingsView()
409421
popupMenu.dismiss()
@@ -421,19 +433,16 @@ class BrowserActivity : DuckDuckGoActivity() {
421433
}
422434

423435
private fun launchSettingsView() {
424-
startActivityForResult(SettingsActivity.intent(this), SETTINGS_REQUEST_CODE)
436+
startActivity(SettingsActivity.intent(this))
425437
}
426438

427439
private fun launchBookmarksView() {
428-
startActivityForResult(BookmarksActivity.intent(this), BOOKMARKS_REQUEST_CODE)
440+
startActivity(BookmarksActivity.intent(this))
429441
}
430442

431443
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
432-
when (requestCode) {
433-
DASHBOARD_REQUEST_CODE -> viewModel.receivedDashboardResult(resultCode)
434-
SETTINGS_REQUEST_CODE -> viewModel.receivedSettingsResult(resultCode)
435-
BOOKMARKS_REQUEST_CODE -> viewModel.receivedBookmarksResult(resultCode, data?.action)
436-
else -> super.onActivityResult(requestCode, resultCode, data)
444+
if (requestCode == DASHBOARD_REQUEST_CODE ) {
445+
viewModel.receivedDashboardResult(resultCode)
437446
}
438447
}
439448

@@ -468,16 +477,14 @@ class BrowserActivity : DuckDuckGoActivity() {
468477

469478
companion object {
470479

471-
fun intent(context: Context, sharedText: String? = null): Intent {
480+
fun intent(context: Context, queryExtra: String? = null): Intent {
472481
val intent = Intent(context, BrowserActivity::class.java)
473-
intent.putExtra(SHARED_TEXT_EXTRA, sharedText)
482+
intent.putExtra(QUERY_EXTRA, queryExtra)
474483
return intent
475484
}
476485

477-
private const val SHARED_TEXT_EXTRA = "SHARED_TEXT_EXTRA"
478-
private const val SETTINGS_REQUEST_CODE = 100
479-
private const val DASHBOARD_REQUEST_CODE = 101
480-
private const val BOOKMARKS_REQUEST_CODE = 102
486+
private const val QUERY_EXTRA = "QUERY_EXTRA"
487+
private const val DASHBOARD_REQUEST_CODE = 100
481488
}
482489

483490
}

0 commit comments

Comments
 (0)