@@ -2,23 +2,17 @@ package com.simplemobiletools.contacts.pro.activities
22
33import android.annotation.SuppressLint
44import android.app.Activity
5- import android.app.SearchManager
65import android.content.ActivityNotFoundException
7- import android.content.Context
86import android.content.Intent
97import android.content.pm.ShortcutInfo
108import android.graphics.drawable.ColorDrawable
119import android.graphics.drawable.Icon
1210import android.graphics.drawable.LayerDrawable
1311import android.net.Uri
1412import android.os.Bundle
15- import android.view.Menu
16- import android.view.MenuItem
1713import android.widget.ImageView
1814import android.widget.TextView
1915import android.widget.Toast
20- import androidx.appcompat.widget.SearchView
21- import androidx.core.view.MenuItemCompat
2216import androidx.viewpager.widget.ViewPager
2317import com.simplemobiletools.commons.dialogs.FilePickerDialog
2418import 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))
0 commit comments