Skip to content

Commit

Permalink
clean up search bars
Browse files Browse the repository at this point in the history
  • Loading branch information
malmstein committed Jan 14, 2025
1 parent bfa94e1 commit ba072fe
Show file tree
Hide file tree
Showing 2 changed files with 147 additions and 23 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@ package com.duckduckgo.savedsites.impl.bookmarks
import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.text.SpannableString
import android.text.style.ForegroundColorSpan
import android.view.Menu
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
Expand All @@ -43,13 +46,15 @@ import com.duckduckgo.common.ui.view.SearchBar
import com.duckduckgo.common.ui.view.button.ButtonType.DESTRUCTIVE
import com.duckduckgo.common.ui.view.button.ButtonType.GHOST_ALT
import com.duckduckgo.common.ui.view.dialog.TextAlertDialogBuilder
import com.duckduckgo.common.ui.view.getColorFromAttr
import com.duckduckgo.common.ui.view.gone
import com.duckduckgo.common.ui.view.show
import com.duckduckgo.common.ui.viewbinding.viewBinding
import com.duckduckgo.common.utils.DispatcherProvider
import com.duckduckgo.common.utils.extensions.html
import com.duckduckgo.common.utils.plugins.PluginPoint
import com.duckduckgo.di.scopes.ActivityScope
import com.duckduckgo.mobile.android.R as commonR
import com.duckduckgo.navigation.api.GlobalActivityStarter
import com.duckduckgo.saved.sites.impl.R
import com.duckduckgo.saved.sites.impl.databinding.ActivityBookmarksBinding
Expand Down Expand Up @@ -122,6 +127,22 @@ class BookmarksActivity : DuckDuckGoActivity(), BookmarksScreenPromotionPlugin.C
private val binding: ActivityBookmarksBinding by viewBinding()
private lateinit var contentBookmarksBinding: ContentBookmarksBinding

private val toolbar
get() =
if (bookmarksSortingFeature.self().isEnabled()) {
binding.toolbarSorting
} else {
binding.toolbar
}

private val searchBar
get() =
if (bookmarksSortingFeature.self().isEnabled()) {
binding.searchBarSorting
} else {
binding.searchBar
}

private val startBookmarkFoldersActivityForResult =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
if (result.resultCode == RESULT_OK) {
Expand Down Expand Up @@ -149,21 +170,31 @@ class BookmarksActivity : DuckDuckGoActivity(), BookmarksScreenPromotionPlugin.C
}

private fun configureToolbar() {
binding.browserMenu.setOnClickListener {
showBookmarksPopupMenu(binding.browserMenu)
}
binding.searchMenu.setOnClickListener {
showSearchBar()
}
binding.addFolderMenu.setOnClickListener {
launchAddFolder()
if (bookmarksSortingFeature.self().isEnabled()) {
binding.browserMenu.setOnClickListener {
showBookmarksPopupMenu(binding.browserMenu)
}
binding.searchMenu.setOnClickListener {
showSearchBar()
}
binding.addFolderMenu.setOnClickListener {
launchAddFolder()
}
binding.appBarLayout.gone()
} else {
binding.appBarLayoutSorting.gone()
}
setupToolbar(binding.toolbarSorting)

setupToolbar(toolbar)
setToolbarTitle(getParentFolderName())
}

private fun setToolbarTitle(title: String) {
binding.toolbarTitle.text = title
if (bookmarksSortingFeature.self().isEnabled()) {
binding.toolbarTitle.text = title
} else {
supportActionBar?.title = title
}
}

private fun getParentFolderName() =
Expand Down Expand Up @@ -239,6 +270,57 @@ class BookmarksActivity : DuckDuckGoActivity(), BookmarksScreenPromotionPlugin.C
}
}

override fun onCreateOptionsMenu(menu: Menu): Boolean {
return if (bookmarksSortingFeature.self().isEnabled()) {
false
} else {
menuInflater.inflate(R.menu.bookmark_activity_menu, menu)
true
}
}

override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.bookmark_import -> {
launchBookmarkImport()
}

R.id.bookmark_export -> {
val intent = Intent()
.setType("text/html")
.setAction(Intent.ACTION_CREATE_DOCUMENT)
.addCategory(Intent.CATEGORY_OPENABLE)
.putExtra(Intent.EXTRA_TITLE, EXPORT_BOOKMARKS_FILE_NAME)

startActivityForResult(intent, EXPORT_BOOKMARKS_REQUEST_CODE)
}

R.id.action_add_folder -> {
val parentId = getParentFolderId()
val parentFolderName = getParentFolderName()
val dialog = AddBookmarkFolderDialogFragment.instance(parentId, parentFolderName)
dialog.show(supportFragmentManager, ADD_BOOKMARK_FOLDER_FRAGMENT_TAG)
dialog.listener = viewModel
}
}
return super.onOptionsItemSelected(item)
}

override fun onPrepareOptionsMenu(menu: Menu): Boolean {
searchMenuItem = menu.findItem(R.id.action_search)
exportMenuItem = menu.findItem(R.id.bookmark_export)
if (viewModel.viewState.value?.bookmarkItems?.isEmpty() == true) {
val textColorAttr = commonR.attr.daxColorTextDisabled
val spannable = SpannableString(getString(R.string.exportBookmarksMenu))
spannable.setSpan(ForegroundColorSpan(binding.root.context.getColorFromAttr(textColorAttr)), 0, spannable.length, 0)
exportMenuItem?.title = spannable
exportMenuItem?.isEnabled = false
}
searchMenuItem?.isVisible = viewModel.viewState.value?.enableSearch == true || getParentFolderId() != SavedSitesNames.BOOKMARKS_ROOT
initializeSearchBar()
return super.onPrepareOptionsMenu(menu)
}

private fun setupBookmarksRecycler() {
bookmarksAdapter = BookmarksAdapter(
layoutInflater,
Expand Down Expand Up @@ -395,15 +477,20 @@ class BookmarksActivity : DuckDuckGoActivity(), BookmarksScreenPromotionPlugin.C

private fun initializeSearchBar() {
searchListener = BookmarksQueryListener(viewModel, bookmarksAdapter)
searchMenuItem?.setOnMenuItemClickListener {
showSearchBar()
return@setOnMenuItemClickListener true
}
binding.searchMenu.setOnClickListener {
showSearchBar()
if (bookmarksSortingFeature.self().isEnabled()) {
binding.searchMenu.setOnClickListener {
showSearchBar()
}
binding.searchBar.gone()
} else {
searchMenuItem?.setOnMenuItemClickListener {
showSearchBar()
return@setOnMenuItemClickListener true
}
binding.searchBarSorting.gone()
}

binding.searchBarSorting.onAction {
searchBar.onAction {
when (it) {
is SearchBar.Action.PerformUpAction -> hideSearchBar()
is SearchBar.Action.PerformSearch -> if (this::searchListener.isInitialized) {
Expand All @@ -414,17 +501,17 @@ class BookmarksActivity : DuckDuckGoActivity(), BookmarksScreenPromotionPlugin.C
}

override fun onBackPressed() {
if (binding.searchBarSorting.isVisible) {
if (searchBar.isVisible) {
hideSearchBar()
} else {
super.onBackPressed()
}
}

private fun showSearchBar() {
binding.toolbarSorting.gone()
viewModel.fetchAllBookmarksAndFolders()
binding.searchBarSorting.handle(SearchBar.Event.ShowSearchBar)
toolbar.gone()
searchBar.handle(SearchBar.Event.ShowSearchBar)
bookmarksAdapter.isInSearchMode = true
}

Expand Down Expand Up @@ -456,9 +543,9 @@ class BookmarksActivity : DuckDuckGoActivity(), BookmarksScreenPromotionPlugin.C
}

private fun hideSearchBar() {
binding.toolbarSorting.show()
toolbar.show()
viewModel.fetchBookmarksAndFolders(getParentFolderId())
binding.searchBarSorting.handle(SearchBar.Event.DismissSearchBar)
searchBar.handle(SearchBar.Event.DismissSearchBar)
bookmarksAdapter.isInSearchMode = false
}

Expand Down Expand Up @@ -608,6 +695,7 @@ class BookmarksActivity : DuckDuckGoActivity(), BookmarksScreenPromotionPlugin.C
R.id.bookmark_folder_edit -> {
viewModel.onEditBookmarkFolderRequested(bookmarkFolder)
}

R.id.bookmark_folder_delete -> {
viewModel.onDeleteBookmarkFolderRequested(bookmarkFolder)
}
Expand All @@ -621,7 +709,10 @@ class BookmarksActivity : DuckDuckGoActivity(), BookmarksScreenPromotionPlugin.C
popup.show()
}

private fun showBookmarkOverFlowMenu(anchor: View, bookmark: SavedSite.Bookmark) {
private fun showBookmarkOverFlowMenu(
anchor: View,
bookmark: SavedSite.Bookmark,
) {
val wrapper = ContextThemeWrapper(this, com.duckduckgo.mobile.android.R.style.Widget_DuckDuckGo_PopupMenu)
val popup = androidx.appcompat.widget.PopupMenu(wrapper, anchor)
popup.menuInflater.inflate(R.menu.bookmark_popup_menu, popup.menu)
Expand All @@ -637,9 +728,11 @@ class BookmarksActivity : DuckDuckGoActivity(), BookmarksScreenPromotionPlugin.C
R.id.bookmark_edit -> {
viewModel.onEditSavedSiteRequested(bookmark)
}

R.id.bookmark_add_to_favorites -> {
addRemoveFavorite(bookmark)
}

R.id.bookmark_delete -> {
viewModel.onDeleteSavedSiteRequested(bookmark)
viewModel.onBookmarkItemDeletedFromOverflowMenu()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,37 @@
</FrameLayout>
</com.google.android.material.appbar.AppBarLayout>

<com.google.android.material.appbar.AppBarLayout
android:id="@+id/appBarLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/Widget.DuckDuckGo.ToolbarTheme">

<FrameLayout
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/daxColorSurface">

<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/daxColorSurface"
android:theme="@style/Widget.DuckDuckGo.ToolbarTheme"
app:popupTheme="@style/Widget.DuckDuckGo.PopUpOverflowMenu" />

<com.duckduckgo.common.ui.view.SearchBarView
android:id="@+id/searchBar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/keyline_2"
android:visibility="gone"
app:clearActionContentDescription="@string/searchbar_cleartextaction_content_description_default"
app:searchHint="@string/searchBookmarks" />
</FrameLayout>

</com.google.android.material.appbar.AppBarLayout>

<include layout="@layout/content_bookmarks" />

</LinearLayout>

0 comments on commit ba072fe

Please sign in to comment.