Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f3c3b579 authored by cketti's avatar cketti
Browse files

Reuse existing SearchView when recreating the toolbar menu

parent df50ff50
Loading
Loading
Loading
Loading
+28 −4
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ import android.view.animation.AnimationUtils
import android.widget.ProgressBar
import android.widget.Toast
import androidx.appcompat.app.ActionBar
import androidx.appcompat.view.ActionMode
import androidx.appcompat.widget.SearchView
import androidx.appcompat.widget.Toolbar
import androidx.drawerlayout.widget.DrawerLayout
@@ -708,7 +709,7 @@ open class MessageList :
                showMessageList()
            }
        } else if (this::searchView.isInitialized && !searchView.isIconified) {
            searchView.isIconified = true
            collapseSearchView()
        } else {
            if (isDrawerEnabled && account != null && supportFragmentManager.backStackEntryCount == 0) {
                if (K9.isShowUnifiedInbox) {
@@ -918,6 +919,7 @@ open class MessageList :
                    if (drawer!!.isOpen) {
                        drawer!!.close()
                    } else {
                        collapseSearchView()
                        drawer!!.open()
                    }
                } else {
@@ -935,16 +937,28 @@ open class MessageList :
    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        menuInflater.inflate(R.menu.message_list_option, menu)

        // setup search view
        val searchItem = menu.findItem(R.id.search)
        initializeSearchMenuItem(searchItem)

        return true
    }

    private fun initializeSearchMenuItem(searchItem: MenuItem) {
        // Reuse existing SearchView if available
        if (::searchView.isInitialized) {
            searchItem.actionView = searchView
            return
        }

        searchView = searchItem.actionView as SearchView
        searchView.maxWidth = Int.MAX_VALUE
        searchView.queryHint = resources.getString(R.string.search_action)
        val searchManager = getSystemService(Context.SEARCH_SERVICE) as SearchManager
        val searchManager = getSystemService(SEARCH_SERVICE) as SearchManager
        searchView.setSearchableInfo(searchManager.getSearchableInfo(componentName))
        searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
            override fun onQueryTextSubmit(query: String): Boolean {
                messageListFragment?.onSearchRequested(query)
                collapseSearchView()
                return true
            }

@@ -952,8 +966,11 @@ open class MessageList :
                return false
            }
        })
    }

        return true
    private fun collapseSearchView() {
        searchView.setQuery(null, false)
        searchView.isIconified = true
    }

    fun setActionBarTitle(title: String, subtitle: String? = null) {
@@ -1000,6 +1017,8 @@ open class MessageList :
                showMessageView()
            }
        }

        collapseSearchView()
    }

    override fun onForward(messageReference: MessageReference, decryptionResultForReply: Parcelable?) {
@@ -1082,6 +1101,11 @@ open class MessageList :
        return true
    }

    override fun startSupportActionMode(callback: ActionMode.Callback): ActionMode? {
        collapseSearchView()
        return super.startSupportActionMode(callback)
    }

    override fun showThread(account: Account, threadRootId: Long) {
        showMessageViewPlaceHolder()

+2 −3
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@ import android.widget.AdapterView.OnItemLongClickListener
import android.widget.ListView
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.view.ActionMode
import androidx.core.os.bundleOf
import androidx.fragment.app.Fragment
@@ -1534,8 +1533,7 @@ class MessageListFragment :
    }

    private fun startAndPrepareActionMode() {
        val activity = requireActivity() as AppCompatActivity
        actionMode = activity.startSupportActionMode(actionModeCallback)
        actionMode = fragmentListener.startSupportActionMode(actionModeCallback)
        actionMode?.invalidate()
    }

@@ -2003,6 +2001,7 @@ class MessageListFragment :
        fun setMessageListTitle(title: String, subtitle: String?)
        fun onCompose(account: Account?)
        fun startSearch(query: String, account: Account?, folderId: Long?): Boolean
        fun startSupportActionMode(callback: ActionMode.Callback): ActionMode?
        fun goBack()
        fun onFolderNotFoundError()