Skip to content

Commit 49a3693

Browse files
Feature/david/snackbar updates (#1056)
* added snackbar * corrected styling issues * removed string resources and added new resources in string-untranslated * removed string resources and added new resources in string-untranslated * added missing tests and updated strings * updated strings to match copy review Co-authored-by: ANOOP <[email protected]>
1 parent a3558c0 commit 49a3693

File tree

9 files changed

+62
-22
lines changed

9 files changed

+62
-22
lines changed

app/src/androidTest/java/com/duckduckgo/app/bookmarks/ui/BookmarksViewModelTest.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,4 +117,10 @@ class BookmarksViewModelTest {
117117
testee.delete(bookmark)
118118
verify(faviconManager).deletePersistedFavicon(bookmark.url)
119119
}
120+
121+
@Test
122+
fun whenBookmarkInsertedThenDaoUpdated() {
123+
testee.insert(bookmark)
124+
verify(bookmarksDao).insert(bookmark)
125+
}
120126
}

app/src/androidTest/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesViewModelTest.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,17 @@ class FireproofWebsitesViewModelTest {
167167
verify(settingsDataStore).appLoginDetection = true
168168
}
169169

170+
@Test
171+
fun whenUserUndosDeleteFireproofThenSiteIsAddedBack() {
172+
173+
val entity = FireproofWebsiteEntity("domain.com")
174+
175+
viewModel.onSnackBarUndoFireproof(entity)
176+
177+
verify(mockViewStateObserver, atLeastOnce()).onChanged(viewStateCaptor.capture())
178+
assertTrue(viewStateCaptor.value.fireproofWebsitesEntities.isNotEmpty())
179+
}
180+
170181
private inline fun <reified T : FireproofWebsitesViewModel.Command> assertCommandIssued(instanceAssertions: T.() -> Unit = {}) {
171182
verify(mockCommandObserver, atLeastOnce()).onChanged(commandCaptor.capture())
172183
val issuedCommand = commandCaptor.allValues.find { it is T }

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

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ import com.duckduckgo.app.global.baseHost
4343
import com.duckduckgo.app.global.view.gone
4444
import com.duckduckgo.app.global.view.html
4545
import com.duckduckgo.app.global.view.show
46+
import com.google.android.material.snackbar.Snackbar
47+
import kotlinx.android.synthetic.main.activity_bookmarks.*
4648
import kotlinx.android.synthetic.main.content_bookmarks.emptyBookmarks
4749
import kotlinx.android.synthetic.main.content_bookmarks.recycler
4850
import kotlinx.android.synthetic.main.include_toolbar.toolbar
@@ -138,18 +140,16 @@ class BookmarksActivity : DuckDuckGoActivity() {
138140
}
139141

140142
private fun confirmDeleteBookmark(bookmark: BookmarkEntity) {
141-
val message = getString(R.string.bookmarkDeleteConfirmMessage, bookmark.title).html(this)
142-
val title = getString(R.string.dialogConfirmTitle)
143-
deleteDialog = AlertDialog.Builder(this)
144-
.setTitle(title)
145-
.setMessage(message)
146-
.setPositiveButton(android.R.string.yes) { _, _ ->
147-
delete(bookmark)
148-
}
149-
.setNegativeButton(android.R.string.no) { dialog, _ ->
150-
dialog.dismiss()
151-
}
152-
.show()
143+
val message = getString(R.string.bookmarkDeleteConfirmationMessage, bookmark.title).html(this)
144+
viewModel.delete(bookmark)
145+
Snackbar.make(
146+
bookmarkRootView,
147+
message,
148+
Snackbar.LENGTH_LONG
149+
).setAction(R.string.fireproofWebsiteSnackbarAction) {
150+
viewModel.insert(bookmark)
151+
}.show()
152+
153153
}
154154

155155
private fun delete(bookmark: BookmarkEntity) {

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,10 @@ class BookmarksViewModel(
105105
}
106106
}
107107

108+
fun insert(bookmark: BookmarkEntity) {
109+
viewModelScope.launch(dispatcherProvider.io()) {
110+
dao.insert(BookmarkEntity(title = bookmark.title, url = bookmark.url))
111+
}
112+
}
113+
108114
}

app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesActivity.kt

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,15 @@ import android.app.AlertDialog
2020
import android.content.Context
2121
import android.content.Intent
2222
import android.os.Bundle
23+
import androidx.core.text.HtmlCompat
2324
import androidx.lifecycle.Observer
2425
import com.duckduckgo.app.browser.R
2526
import com.duckduckgo.app.browser.favicon.FaviconManager
2627
import com.duckduckgo.app.fire.fireproofwebsite.data.FireproofWebsiteEntity
28+
import com.duckduckgo.app.fire.fireproofwebsite.data.website
2729
import com.duckduckgo.app.global.DuckDuckGoActivity
28-
import com.duckduckgo.app.global.view.html
30+
import com.google.android.material.snackbar.Snackbar
31+
import kotlinx.android.synthetic.main.activity_fireproof_websites.*
2932
import kotlinx.android.synthetic.main.content_fireproof_websites.*
3033
import kotlinx.android.synthetic.main.include_toolbar.*
3134
import javax.inject.Inject
@@ -76,15 +79,15 @@ class FireproofWebsitesActivity : DuckDuckGoActivity() {
7679

7780
@Suppress("deprecation")
7881
private fun confirmDeleteWebsite(entity: FireproofWebsiteEntity) {
79-
val message = getString(R.string.fireproofWebsiteDeleteConfirmMessage, entity.domain).html(this)
80-
val title = getString(R.string.dialogConfirmTitle)
81-
deleteDialog = AlertDialog.Builder(this)
82-
.setTitle(title)
83-
.setMessage(message)
84-
.setPositiveButton(android.R.string.yes) { _, _ -> viewModel.delete(entity) }
85-
.setNegativeButton(android.R.string.no) { _, _ -> }
86-
.create()
87-
deleteDialog?.show()
82+
val message = HtmlCompat.fromHtml(getString(R.string.fireproofWebsiteRemovalConfirmation, entity.website()), HtmlCompat.FROM_HTML_MODE_LEGACY)
83+
viewModel.delete(entity)
84+
Snackbar.make(
85+
fireActivityRoot,
86+
message,
87+
Snackbar.LENGTH_LONG
88+
).setAction(R.string.fireproofWebsiteSnackbarAction) {
89+
viewModel.onSnackBarUndoFireproof(entity)
90+
}.show()
8891
}
8992

9093
override fun onDestroy() {

app/src/main/java/com/duckduckgo/app/fire/fireproofwebsite/ui/FireproofWebsitesViewModel.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,13 @@ class FireproofWebsitesViewModel(
7373
command.value = ConfirmDeleteFireproofWebsite(entity)
7474
}
7575

76+
fun onSnackBarUndoFireproof(entity: FireproofWebsiteEntity) {
77+
val domain = entity.domain
78+
viewModelScope.launch(dispatcherProvider.io()) {
79+
fireproofWebsiteRepository.fireproofWebsite(domain)
80+
}
81+
}
82+
7683
fun delete(entity: FireproofWebsiteEntity) {
7784
viewModelScope.launch(dispatcherProvider.io()) {
7885
fireproofWebsiteRepository.removeFireproofWebsite(entity)

app/src/main/res/layout/activity_bookmarks.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
-->
1818

1919
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
20+
android:id="@+id/bookmarkRootView"
2021
xmlns:tools="http://schemas.android.com/tools"
2122
android:layout_width="match_parent"
2223
android:layout_height="match_parent"

app/src/main/res/layout/activity_fireproof_websites.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2020
xmlns:tools="http://schemas.android.com/tools"
2121
android:layout_width="match_parent"
22+
android:id="@+id/fireActivityRoot"
2223
android:layout_height="match_parent"
2324
android:orientation="vertical"
2425
tools:context="com.duckduckgo.app.fire.fireproofwebsite.ui.FireproofWebsitesActivity">

app/src/main/res/values/string-untranslated.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,9 @@
2525
<string name="useOurAppShortcutAddedText">Success! %s has been added to your home screen.</string>
2626
<string name="useOurAppDeletionDialogText">Checking your feed in DuckDuckGo is a great alternative to using the Facebook app!&lt;br/&gt;&lt;br/&gt;But if the Facebook app is on your phone, it can make requests for data even when you\'re not using it.&lt;br/&gt;&lt;br/&gt;Prevent this by deleting it now!</string>
2727

28+
<!-- Fireproof Websites snackbar -->
29+
<string name="fireproofWebsiteRemovalConfirmation">Fireproofing removed for &lt;b>%s&lt;/b></string>
30+
31+
<!-- Bookmark Websites snackbar -->
32+
<string name="bookmarkDeleteConfirmationMessage">Deleted &lt;b>%s&lt;/b></string>
2833
</resources>

0 commit comments

Comments
 (0)