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..6137a041 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,35 @@ 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.fadeIn() + conversations_fab.beGone() } - main_toolbar_search.setOnFocusChangeListener { v, hasFocus -> - if (hasFocus) { - openSearch() - } + main_menu.onSearchClosedListener = { + search_holder.animate().alpha(0f).setDuration(SHORT_ANIMATION_DURATION).withEndAction { + search_holder.beGone() + searchTextChanged("", true) + }.start() + + conversations_fab.beVisible() } - 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 +173,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 +200,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,19 +433,11 @@ class MainActivity : SimpleActivity() { .build() } - private fun openSearch() { - search_holder.beVisible() - main_toolbar_search_icon.setImageResource(R.drawable.ic_arrow_left_vector) - } + private fun searchTextChanged(text: String, forceUpdate: Boolean = false) { + if (!main_menu.isSearchOpen && !forceUpdate) { + return + } - 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) if (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..9f46effc 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,61 +5,18 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - - - - - - - - - - - - + android:layout_height="wrap_content" /> + android:scrollbars="none" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - - - + + + diff --git a/app/src/main/res/layout/menu_search.xml b/app/src/main/res/layout/menu_search.xml new file mode 100644 index 00000000..7352b983 --- /dev/null +++ b/app/src/main/res/layout/menu_search.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml index c7ca15ce..c77cc142 100644 --- a/app/src/main/res/menu/menu_main.xml +++ b/app/src/main/res/menu/menu_main.xml @@ -17,7 +17,7 @@ android:id="@+id/more_apps_from_us" android:icon="@drawable/ic_google_play_vector" android:title="@string/more_apps_from_us" - app:showAsAction="always" /> + app:showAsAction="ifRoom" /> + app:showAsAction="always" /> diff --git a/fastlane/metadata/android/hr/title.txt b/fastlane/metadata/android/hr/title.txt index cca56e43..a7610bc9 100644 --- a/fastlane/metadata/android/hr/title.txt +++ b/fastlane/metadata/android/hr/title.txt @@ -1 +1 @@ -Jednostavan SMS slatelj +Jednostavan SMS messenger