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" />
+
+
+
+
+
+
+
+
+
+
+
+