From f02348dc6c27478fdd56b582c06685ff21170310 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 3 Jan 2023 11:50:45 +0100 Subject: [PATCH 1/7] move some search bar related code to a custom view --- .../smsmessenger/activities/MainActivity.kt | 55 ++++---------- .../smsmessenger/views/MySearchMenu.kt | 71 +++++++++++++++++++ app/src/main/res/layout/activity_main.xml | 49 +------------ app/src/main/res/layout/menu_search.xml | 48 +++++++++++++ 4 files changed, 137 insertions(+), 86 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/views/MySearchMenu.kt create mode 100644 app/src/main/res/layout/menu_search.xml 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" /> + + + + + + + + + + + + From 35e8b4f4a493b96ffc95bb8451e05bd5a81ff2a2 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 3 Jan 2023 15:04:11 +0100 Subject: [PATCH 2/7] use smaller search menu --- app/src/main/res/layout/menu_search.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/menu_search.xml b/app/src/main/res/layout/menu_search.xml index ae6f263c..48d4943b 100644 --- a/app/src/main/res/layout/menu_search.xml +++ b/app/src/main/res/layout/menu_search.xml @@ -11,8 +11,8 @@ android:id="@+id/top_toolbar_holder" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginTop="@dimen/small_margin" - android:layout_marginBottom="@dimen/small_margin" + android:layout_marginTop="@dimen/medium_margin" + android:layout_marginBottom="@dimen/medium_margin" android:background="@drawable/search_menu_background"> Date: Tue, 3 Jan 2023 15:04:25 +0100 Subject: [PATCH 3/7] prefer showing About instead of More apps from us --- app/src/main/res/menu/menu_main.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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" /> From 2d6c48cd905f75499db2904ed60a7c6441d04896 Mon Sep 17 00:00:00 2001 From: tibbi Date: Tue, 3 Jan 2023 15:38:39 +0100 Subject: [PATCH 4/7] hide the top search menu at scrolling --- .../smsmessenger/activities/MainActivity.kt | 2 ++ app/src/main/res/layout/activity_main.xml | 24 +++++++++---------- app/src/main/res/layout/menu_search.xml | 3 ++- 3 files changed, 16 insertions(+), 13 deletions(-) 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 13419d07..bd9dcaeb 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -143,10 +143,12 @@ class MainActivity : SimpleActivity() { main_menu.setupMenu() main_menu.onSearchOpenListener = { search_holder.beVisible() + conversations_fab.beGone() } main_menu.onSearchClosedListener = { search_holder.beGone() + conversations_fab.beVisible() } main_menu.onSearchTextChangedListener = { text -> diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index f755b20c..db01b379 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -13,10 +13,10 @@ + 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 index 48d4943b..7352b983 100644 --- a/app/src/main/res/layout/menu_search.xml +++ b/app/src/main/res/layout/menu_search.xml @@ -5,7 +5,8 @@ android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:layout_marginStart="@dimen/activity_margin" - android:layout_marginEnd="@dimen/activity_margin"> + android:layout_marginEnd="@dimen/activity_margin" + app:layout_scrollFlags="enterAlways|scroll"> Date: Tue, 3 Jan 2023 15:58:42 +0100 Subject: [PATCH 5/7] animate search holder visibility --- .../smsmessenger/activities/MainActivity.kt | 8 ++++++-- app/src/main/res/layout/activity_main.xml | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) 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 bd9dcaeb..4d6dca60 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -142,12 +142,12 @@ class MainActivity : SimpleActivity() { main_menu.top_toolbar.inflateMenu(R.menu.menu_main) main_menu.setupMenu() main_menu.onSearchOpenListener = { - search_holder.beVisible() + search_holder.fadeIn() conversations_fab.beGone() } main_menu.onSearchClosedListener = { - search_holder.beGone() + search_holder.fadeOut() conversations_fab.beVisible() } @@ -430,6 +430,10 @@ class MainActivity : SimpleActivity() { } private fun searchTextChanged(text: String) { + if (!main_menu.isSearchOpen) { + return + } + lastSearchedText = text search_placeholder_2.beGoneIf(text.length >= 2) if (text.length >= 2) { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index db01b379..9f46effc 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -79,6 +79,7 @@ android:id="@+id/search_holder" android:layout_width="match_parent" android:layout_height="match_parent" + android:alpha="0" android:visibility="gone"> Date: Tue, 3 Jan 2023 16:05:28 +0100 Subject: [PATCH 6/7] properly reset search results and placeholders on close --- .../smsmessenger/activities/MainActivity.kt | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) 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 4d6dca60..6137a041 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -147,7 +147,11 @@ class MainActivity : SimpleActivity() { } main_menu.onSearchClosedListener = { - search_holder.fadeOut() + search_holder.animate().alpha(0f).setDuration(SHORT_ANIMATION_DURATION).withEndAction { + search_holder.beGone() + searchTextChanged("", true) + }.start() + conversations_fab.beVisible() } @@ -429,8 +433,8 @@ class MainActivity : SimpleActivity() { .build() } - private fun searchTextChanged(text: String) { - if (!main_menu.isSearchOpen) { + private fun searchTextChanged(text: String, forceUpdate: Boolean = false) { + if (!main_menu.isSearchOpen && !forceUpdate) { return } From 888a5eea96a41c5f121e22066f9391a20698a43f Mon Sep 17 00:00:00 2001 From: Milo Ivir Date: Tue, 3 Jan 2023 14:52:04 +0000 Subject: [PATCH 7/7] Translated using Weblate (Croatian) Currently translated at 90.0% (9 of 10 strings) Translation: Simple Mobile Tools/Simple SMS Messenger metadata Translate-URL: https://hosted.weblate.org/projects/simple-mobile-tools/simple-sms-messenger-metadata/hr/ --- fastlane/metadata/android/hr/title.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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