diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt index 9704e879..13419d07 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -33,6 +33,7 @@ import com.simplemobiletools.smsmessenger.models.Events import com.simplemobiletools.smsmessenger.models.Message import com.simplemobiletools.smsmessenger.models.SearchResult import kotlinx.android.synthetic.main.activity_main.* +import kotlinx.android.synthetic.main.menu_search.view.* import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.ThreadMode @@ -93,7 +94,6 @@ class MainActivity : SimpleActivity() { override fun onResume() { super.onResume() - setupToolbar(main_toolbar) updateMenuColors() getOrCreateConversationsAdapter().apply { @@ -131,35 +131,29 @@ class MainActivity : SimpleActivity() { } override fun onBackPressed() { - if (search_holder.isVisible()) { - closeSearch() + if (main_menu.isSearchOpen) { + main_menu.closeSearch() } else { super.onBackPressed() } } private fun setupOptionsMenu() { - updateMenuColors() - - main_toolbar_search_icon.setOnClickListener { - if (search_holder.isVisible()) { - closeSearch() - } else { - main_toolbar_search.requestFocus() - } + main_menu.top_toolbar.inflateMenu(R.menu.menu_main) + main_menu.setupMenu() + main_menu.onSearchOpenListener = { + search_holder.beVisible() } - main_toolbar_search.setOnFocusChangeListener { v, hasFocus -> - if (hasFocus) { - openSearch() - } + main_menu.onSearchClosedListener = { + search_holder.beGone() } - main_toolbar_search.onTextChangeListener { - searchTextChanged(it) + main_menu.onSearchTextChangedListener = { text -> + searchTextChanged(text) } - main_toolbar.setOnMenuItemClickListener { menuItem -> + main_menu.top_toolbar.setOnMenuItemClickListener { menuItem -> when (menuItem.itemId) { R.id.import_messages -> tryImportMessages() R.id.export_messages -> tryToExportMessages() @@ -173,7 +167,7 @@ class MainActivity : SimpleActivity() { } private fun refreshMenuItems() { - main_toolbar.menu.apply { + main_menu.top_toolbar.menu.apply { findItem(R.id.more_apps_from_us).isVisible = !resources.getBoolean(R.bool.hide_google_relations) } } @@ -200,15 +194,8 @@ class MainActivity : SimpleActivity() { } private fun updateMenuColors() { - val backgroundColor = getProperBackgroundColor() - val contrastColor = backgroundColor.getContrastColor() - - updateStatusbarColor(backgroundColor) - main_app_bar_layout.setBackgroundColor(backgroundColor) - main_toolbar_search_icon.applyColorFilter(contrastColor) - main_toolbar_holder.background?.applyColorFilter(getProperPrimaryColor().adjustAlpha(LOWER_ALPHA)) - main_toolbar_search.setTextColor(contrastColor) - main_toolbar_search.setHintTextColor(contrastColor.adjustAlpha(MEDIUM_ALPHA)) + updateStatusbarColor(getProperBackgroundColor()) + main_menu.updateColors() } // while SEND_SMS and READ_SMS permissions are mandatory, READ_CONTACTS is optional. If we don't have it, we just won't be able to show the contact name in some cases @@ -440,18 +427,6 @@ class MainActivity : SimpleActivity() { .build() } - private fun openSearch() { - search_holder.beVisible() - main_toolbar_search_icon.setImageResource(R.drawable.ic_arrow_left_vector) - } - - private fun closeSearch() { - hideKeyboard() - main_toolbar_search.setText("") - search_holder.beGone() - main_toolbar_search_icon.setImageResource(R.drawable.ic_search_vector) - } - private fun searchTextChanged(text: String) { lastSearchedText = text search_placeholder_2.beGoneIf(text.length >= 2) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/views/MySearchMenu.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/views/MySearchMenu.kt new file mode 100644 index 00000000..e465a106 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/views/MySearchMenu.kt @@ -0,0 +1,71 @@ +package com.simplemobiletools.smsmessenger.views + +import android.app.Activity +import android.content.Context +import android.util.AttributeSet +import com.google.android.material.appbar.AppBarLayout +import com.simplemobiletools.commons.extensions.* +import com.simplemobiletools.commons.helpers.LOWER_ALPHA +import com.simplemobiletools.commons.helpers.MEDIUM_ALPHA +import com.simplemobiletools.smsmessenger.R +import com.simplemobiletools.smsmessenger.activities.SimpleActivity +import kotlinx.android.synthetic.main.menu_search.view.* + +class MySearchMenu(context: Context, attrs: AttributeSet) : AppBarLayout(context, attrs) { + var isSearchOpen = false + var onSearchOpenListener: (() -> Unit)? = null + var onSearchClosedListener: (() -> Unit)? = null + var onSearchTextChangedListener: ((text: String) -> Unit)? = null + + init { + inflate(context, R.layout.menu_search, this) + } + + fun setupMenu() { + top_toolbar_search_icon.setOnClickListener { + if (isSearchOpen) { + closeSearch() + } else { + top_toolbar_search.requestFocus() + (context as? Activity)?.showKeyboard(top_toolbar_search) + } + } + + top_toolbar_search.setOnFocusChangeListener { v, hasFocus -> + if (hasFocus) { + openSearch() + } + } + + top_toolbar_search.onTextChangeListener { + onSearchTextChangedListener?.invoke(it) + } + } + + private fun openSearch() { + isSearchOpen = true + onSearchOpenListener?.invoke() + top_toolbar_search_icon.setImageResource(R.drawable.ic_arrow_left_vector) + } + + fun closeSearch() { + isSearchOpen = false + onSearchClosedListener?.invoke() + top_toolbar_search.setText("") + top_toolbar_search_icon.setImageResource(R.drawable.ic_search_vector) + (context as? Activity)?.hideKeyboard() + } + + fun updateColors() { + val backgroundColor = context.getProperBackgroundColor() + val contrastColor = backgroundColor.getContrastColor() + + setBackgroundColor(backgroundColor) + top_app_bar_layout.setBackgroundColor(backgroundColor) + top_toolbar_search_icon.applyColorFilter(contrastColor) + top_toolbar_holder.background?.applyColorFilter(context.getProperPrimaryColor().adjustAlpha(LOWER_ALPHA)) + top_toolbar_search.setTextColor(contrastColor) + top_toolbar_search.setHintTextColor(contrastColor.adjustAlpha(MEDIUM_ALPHA)) + (context as? SimpleActivity)?.updateTopBarColors(top_toolbar, backgroundColor) + } +} diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 50f675dc..f755b20c 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,53 +5,10 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - - - - - - + android:layout_height="wrap_content" /> + + + + + + + + + + + +