Skip to content

Commit b85dd7d

Browse files
committed
use the new redesigned search menu
1 parent f60b1c6 commit b85dd7d

File tree

5 files changed

+54
-118
lines changed

5 files changed

+54
-118
lines changed

app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/InsertOrEditContactActivity.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ class InsertOrEditContactActivity : SimpleActivity(), RefreshContactsListener {
191191

192192
MenuItemCompat.setOnActionExpandListener(searchMenuItem, object : MenuItemCompat.OnActionExpandListener {
193193
override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
194-
getCurrentFragment()?.onSearchOpened()
195194
isSearchOpen = true
196195
return true
197196
}

app/src/main/kotlin/com/simplemobiletools/contacts/pro/activities/MainActivity.kt

Lines changed: 51 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,17 @@ package com.simplemobiletools.contacts.pro.activities
22

33
import android.annotation.SuppressLint
44
import android.app.Activity
5-
import android.app.SearchManager
65
import android.content.ActivityNotFoundException
7-
import android.content.Context
86
import android.content.Intent
97
import android.content.pm.ShortcutInfo
108
import android.graphics.drawable.ColorDrawable
119
import android.graphics.drawable.Icon
1210
import android.graphics.drawable.LayerDrawable
1311
import android.net.Uri
1412
import android.os.Bundle
15-
import android.view.Menu
16-
import android.view.MenuItem
1713
import android.widget.ImageView
1814
import android.widget.TextView
1915
import android.widget.Toast
20-
import androidx.appcompat.widget.SearchView
21-
import androidx.core.view.MenuItemCompat
2216
import androidx.viewpager.widget.ViewPager
2317
import com.simplemobiletools.commons.dialogs.FilePickerDialog
2418
import com.simplemobiletools.commons.extensions.*
@@ -57,9 +51,6 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
5751
private val PICK_IMPORT_SOURCE_INTENT = 1
5852
private val PICK_EXPORT_FILE_INTENT = 2
5953

60-
private var isSearchOpen = false
61-
private var mSearchMenuItem: MenuItem? = null
62-
private var searchQuery = ""
6354
private var werePermissionsHandled = false
6455
private var isFirstResume = true
6556
private var isGettingContacts = false
@@ -77,6 +68,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
7768
appLaunched(BuildConfig.APPLICATION_ID)
7869
setupOptionsMenu()
7970
refreshMenuItems()
71+
updateMaterialActivityViews(main_coordinator, main_holder, useTransparentNavigation = false, useTopSearchMenu = true)
8072
storeStateVariables()
8173
setupTabs()
8274
checkContactPermissions()
@@ -126,8 +118,8 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
126118
it?.setupColors(getProperTextColor(), properPrimaryColor)
127119
}
128120

121+
updateMenuColors()
129122
setupTabColors()
130-
setupToolbar(main_toolbar, searchMenuItem = mSearchMenuItem)
131123

132124
val configStartNameWithSurname = config.startNameWithSurname
133125
if (storedStartNameWithSurname != configStartNameWithSurname) {
@@ -174,9 +166,31 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
174166
}
175167
}
176168

169+
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
170+
super.onActivityResult(requestCode, resultCode, resultData)
171+
if (requestCode == PICK_IMPORT_SOURCE_INTENT && resultCode == Activity.RESULT_OK && resultData != null && resultData.data != null) {
172+
tryImportContactsFromFile(resultData.data!!)
173+
} else if (requestCode == PICK_EXPORT_FILE_INTENT && resultCode == Activity.RESULT_OK && resultData != null && resultData.data != null) {
174+
try {
175+
val outputStream = contentResolver.openOutputStream(resultData.data!!)
176+
exportContactsTo(ignoredExportContactSources, outputStream)
177+
} catch (e: Exception) {
178+
showErrorToast(e)
179+
}
180+
}
181+
}
182+
183+
override fun onBackPressed() {
184+
if (main_menu.isSearchOpen) {
185+
main_menu.closeSearch()
186+
} else {
187+
super.onBackPressed()
188+
}
189+
}
190+
177191
private fun refreshMenuItems() {
178192
val currentFragment = getCurrentFragment()
179-
main_toolbar.menu.apply {
193+
main_menu.getToolbar().menu.apply {
180194
findItem(R.id.sort).isVisible = currentFragment != groups_fragment
181195
findItem(R.id.filter).isVisible = currentFragment != groups_fragment
182196
findItem(R.id.dialpad).isVisible = !config.showDialpadButton
@@ -185,8 +199,26 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
185199
}
186200

187201
private fun setupOptionsMenu() {
188-
setupSearch(main_toolbar.menu)
189-
main_toolbar.setOnMenuItemClickListener { menuItem ->
202+
main_menu.getToolbar().inflateMenu(R.menu.menu)
203+
main_menu.toggleHideOnScroll(false)
204+
main_menu.setupMenu()
205+
206+
main_menu.onSearchOpenListener = {
207+
main_dialpad_button.beGone()
208+
}
209+
210+
main_menu.onSearchClosedListener = {
211+
getAllFragments().forEach {
212+
it?.onSearchClosed()
213+
}
214+
main_dialpad_button.beVisibleIf(config.showDialpadButton)
215+
}
216+
217+
main_menu.onSearchTextChangedListener = { text ->
218+
getCurrentFragment()?.onSearchQueryChanged(text)
219+
}
220+
221+
main_menu.getToolbar().setOnMenuItemClickListener { menuItem ->
190222
when (menuItem.itemId) {
191223
R.id.sort -> showSortingDialog(showCustomSorting = getCurrentFragment() is FavoritesFragment)
192224
R.id.filter -> showFilterDialog()
@@ -202,26 +234,9 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
202234
}
203235
}
204236

205-
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
206-
super.onActivityResult(requestCode, resultCode, resultData)
207-
if (requestCode == PICK_IMPORT_SOURCE_INTENT && resultCode == Activity.RESULT_OK && resultData != null && resultData.data != null) {
208-
tryImportContactsFromFile(resultData.data!!)
209-
} else if (requestCode == PICK_EXPORT_FILE_INTENT && resultCode == Activity.RESULT_OK && resultData != null && resultData.data != null) {
210-
try {
211-
val outputStream = contentResolver.openOutputStream(resultData.data!!)
212-
exportContactsTo(ignoredExportContactSources, outputStream)
213-
} catch (e: Exception) {
214-
showErrorToast(e)
215-
}
216-
}
217-
}
218-
219-
override fun onBackPressed() {
220-
if (isSearchOpen && mSearchMenuItem != null) {
221-
mSearchMenuItem!!.collapseActionView()
222-
} else {
223-
super.onBackPressed()
224-
}
237+
private fun updateMenuColors() {
238+
updateStatusbarColor(getProperBackgroundColor())
239+
main_menu.updateColors()
225240
}
226241

227242
private fun storeStateVariables() {
@@ -234,51 +249,6 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
234249
}
235250
}
236251

237-
private fun setupSearch(menu: Menu) {
238-
val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
239-
mSearchMenuItem = menu.findItem(R.id.search)
240-
(mSearchMenuItem!!.actionView as SearchView).apply {
241-
setSearchableInfo(searchManager.getSearchableInfo(componentName))
242-
isSubmitButtonEnabled = false
243-
queryHint = getString(getSearchString())
244-
setOnQueryTextListener(object : SearchView.OnQueryTextListener {
245-
override fun onQueryTextSubmit(query: String) = false
246-
247-
override fun onQueryTextChange(newText: String): Boolean {
248-
if (isSearchOpen) {
249-
searchQuery = newText
250-
getCurrentFragment()?.onSearchQueryChanged(newText)
251-
}
252-
return true
253-
}
254-
})
255-
}
256-
257-
MenuItemCompat.setOnActionExpandListener(mSearchMenuItem, object : MenuItemCompat.OnActionExpandListener {
258-
override fun onMenuItemActionExpand(item: MenuItem?): Boolean {
259-
getCurrentFragment()?.onSearchOpened()
260-
isSearchOpen = true
261-
main_dialpad_button.beGone()
262-
return true
263-
}
264-
265-
override fun onMenuItemActionCollapse(item: MenuItem?): Boolean {
266-
getCurrentFragment()?.onSearchClosed()
267-
isSearchOpen = false
268-
main_dialpad_button.beVisibleIf(config.showDialpadButton)
269-
return true
270-
}
271-
})
272-
}
273-
274-
private fun getSearchString(): Int {
275-
return when (getCurrentFragment()) {
276-
favorites_fragment -> R.string.search_favorites
277-
groups_fragment -> R.string.search_groups
278-
else -> R.string.search_contacts
279-
}
280-
}
281-
282252
@SuppressLint("NewApi")
283253
private fun checkShortcuts() {
284254
val appIconColor = config.appIconColor
@@ -393,7 +363,7 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
393363
updateBottomTabItemColors(it.customView, false)
394364
},
395365
tabSelectedAction = {
396-
closeSearch()
366+
main_menu.closeSearch()
397367
view_pager.currentItem = it.position
398368
updateBottomTabItemColors(it.customView, true)
399369
}
@@ -541,13 +511,11 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
541511
}
542512

543513
private fun launchSettings() {
544-
closeSearch()
545514
hideKeyboard()
546515
startActivity(Intent(applicationContext, SettingsActivity::class.java))
547516
}
548517

549518
private fun launchAbout() {
550-
closeSearch()
551519
val licenses = LICENSE_JODA or LICENSE_GLIDE or LICENSE_GSON or LICENSE_INDICATOR_FAST_SCROLL or LICENSE_AUTOFITTEXTVIEW
552520

553521
val faqItems = arrayListOf(
@@ -599,8 +567,8 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
599567
groups_fragment?.refreshContacts(contacts)
600568
}
601569

602-
if (isSearchOpen) {
603-
getCurrentFragment()?.onSearchQueryChanged(searchQuery)
570+
if (main_menu.isSearchOpen) {
571+
getCurrentFragment()?.onSearchQueryChanged(main_menu.getCurrentQuery())
604572
}
605573
}
606574
}
@@ -639,15 +607,6 @@ class MainActivity : SimpleActivity(), RefreshContactsListener {
639607
}
640608
}
641609

642-
private fun closeSearch() {
643-
if (isSearchOpen) {
644-
getAllFragments().forEach {
645-
it?.onSearchQueryChanged("")
646-
}
647-
mSearchMenuItem?.collapseActionView()
648-
}
649-
}
650-
651610
private fun checkWhatsNewDialog() {
652611
arrayListOf<Release>().apply {
653612
add(Release(10, R.string.release_10))

app/src/main/kotlin/com/simplemobiletools/contacts/pro/fragments/MyViewPagerFragment.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -391,11 +391,6 @@ abstract class MyViewPagerFragment(context: Context, attributeSet: AttributeSet)
391391
}
392392
}
393393

394-
fun onSearchOpened() {
395-
contactsIgnoringSearch = (fragment_list?.adapter as? ContactsAdapter)?.contactItems ?: ArrayList()
396-
groupsIgnoringSearch = (fragment_list?.adapter as? GroupsAdapter)?.groups ?: ArrayList()
397-
}
398-
399394
fun onSearchClosed() {
400395
if (fragment_list.adapter is ContactsAdapter) {
401396
(fragment_list.adapter as? ContactsAdapter)?.updateItems(contactsIgnoringSearch)

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

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,10 @@
55
android:layout_width="match_parent"
66
android:layout_height="match_parent">
77

8-
<com.google.android.material.appbar.AppBarLayout
9-
android:id="@+id/main_app_bar_layout"
8+
<com.simplemobiletools.commons.views.MySearchMenu
9+
android:id="@+id/main_menu"
1010
android:layout_width="match_parent"
11-
android:layout_height="wrap_content">
12-
13-
<com.google.android.material.appbar.MaterialToolbar
14-
android:id="@+id/main_toolbar"
15-
android:layout_width="match_parent"
16-
android:layout_height="?attr/actionBarSize"
17-
android:background="@color/color_primary"
18-
app:menu="@menu/menu"
19-
app:title="@string/app_launcher_name"
20-
app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" />
21-
22-
</com.google.android.material.appbar.AppBarLayout>
11+
android:layout_height="wrap_content" />
2312

2413
<androidx.constraintlayout.widget.ConstraintLayout
2514
android:id="@+id/main_holder"

app/src/main/res/menu/menu.xml

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,6 @@
33
xmlns:app="http://schemas.android.com/apk/res-auto"
44
xmlns:tools="http://schemas.android.com/tools"
55
tools:ignore="AppCompatResource,AlwaysShowAction">
6-
<item
7-
android:id="@+id/search"
8-
android:icon="@drawable/ic_search_vector"
9-
android:title="@string/search"
10-
app:actionViewClass="androidx.appcompat.widget.SearchView"
11-
app:showAsAction="collapseActionView|always" />
126
<item
137
android:id="@+id/sort"
148
android:icon="@drawable/ic_sort_vector"

0 commit comments

Comments
 (0)