diff --git a/app/src/main/java/org/mozilla/reference/browser/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/reference/browser/browser/BrowserFragment.kt index 0fe5a31a0..390a1b496 100644 --- a/app/src/main/java/org/mozilla/reference/browser/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/reference/browser/browser/BrowserFragment.kt @@ -6,10 +6,15 @@ package org.mozilla.reference.browser.browser import android.os.Bundle import android.view.View +import androidx.lifecycle.lifecycleScope import androidx.preference.PreferenceManager import com.google.android.material.floatingactionbutton.FloatingActionButton +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import mozilla.components.browser.thumbnails.BrowserThumbnails import mozilla.components.browser.toolbar.BrowserToolbar +import mozilla.components.concept.awesomebar.AwesomeBar.Suggestion import mozilla.components.concept.engine.EngineView import mozilla.components.feature.awesomebar.AwesomeBarFeature import mozilla.components.feature.awesomebar.provider.SearchSuggestionProvider @@ -88,6 +93,10 @@ class BrowserFragment : requireComponents.core.icons, ), ) + awesomeBar.setOnRemoveSuggestionButtonClicked { + awesomeBar.addHiddenSuggestion(it) + deleteHistorySuggestion(it.suggestion) + } TabsToolbarFeature( toolbar = toolbar, @@ -150,6 +159,15 @@ class BrowserFragment : } } + @OptIn(DelicateCoroutinesApi::class) + private fun deleteHistorySuggestion(suggestion: Suggestion) { + lifecycleScope.launch(Dispatchers.IO) { + suggestion.description?.let { + requireComponents.core.historyStorage.deleteHistoryMetadataForUrl(it) + } + } + } + override fun onBackPressed(): Boolean = readerViewFeature.onBackPressed() || super.onBackPressed() companion object { diff --git a/app/src/main/java/org/mozilla/reference/browser/search/AwesomeBarWrapper.kt b/app/src/main/java/org/mozilla/reference/browser/search/AwesomeBarWrapper.kt index 50f68b219..28fccd1e6 100644 --- a/app/src/main/java/org/mozilla/reference/browser/search/AwesomeBarWrapper.kt +++ b/app/src/main/java/org/mozilla/reference/browser/search/AwesomeBarWrapper.kt @@ -14,6 +14,7 @@ import mozilla.components.compose.browser.awesomebar.AwesomeBar import mozilla.components.compose.browser.awesomebar.AwesomeBarDefaults import mozilla.components.compose.browser.awesomebar.AwesomeBarOrientation import mozilla.components.concept.awesomebar.AwesomeBar +import mozilla.components.concept.awesomebar.AwesomeBar.GroupedSuggestion import mozilla.components.support.ktx.android.view.hideKeyboard import org.mozilla.reference.browser.ext.components @@ -32,8 +33,10 @@ class AwesomeBarWrapper AwesomeBar { private val providers = mutableStateOf(emptyList()) private val text = mutableStateOf("") + private val hiddenSuggestions = mutableStateOf(emptySet()) private var onEditSuggestionListener: ((String) -> Unit)? = null private var onStopListener: (() -> Unit)? = null + private var onSuggestionRemovedListener: ((GroupedSuggestion) -> Unit)? = null @Composable @Suppress("MagicNumber") @@ -45,6 +48,7 @@ class AwesomeBarWrapper AwesomeBar( text = text.value, providers = providers.value, + hiddenSuggestions = hiddenSuggestions.value, orientation = AwesomeBarOrientation.BOTTOM, colors = AwesomeBarDefaults.colors( background = Color(0xff222222), @@ -60,6 +64,9 @@ class AwesomeBarWrapper onEditSuggestionListener?.invoke(suggestion.editSuggestion!!) }, onScroll = { hideKeyboard() }, + onRemoveClicked = { + onSuggestionRemovedListener?.invoke(it) + }, profiler = context.components.core.engine.profiler, ) } @@ -74,6 +81,7 @@ class AwesomeBarWrapper providers.value.any { current -> current.id == provider.id } override fun onInputChanged(text: String) { + hiddenSuggestions.value = emptySet() this.text.value = text } @@ -94,4 +102,21 @@ class AwesomeBarWrapper override fun setOnStopListener(listener: () -> Unit) { onStopListener = listener } + + override fun setOnRemoveSuggestionButtonClicked(listener: (GroupedSuggestion) -> Unit) { + onSuggestionRemovedListener = listener + } + + override fun updateHiddenSuggestions(hiddenSuggestions: Set) { + this.hiddenSuggestions.value = hiddenSuggestions + } + + /** + * Hide a new search suggestion. + * + * @param suggestion The new suggestion to hide. + */ + fun addHiddenSuggestion(suggestion: GroupedSuggestion) { + this.hiddenSuggestions.value += suggestion + } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8b4576f6f..7ac967eac 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] # Android Components -android-components = "149.0.20260113093356" +android-components = "149.0.20260114211245" # AGP android-gradle-plugin = "9.0.0-rc01"