diff --git a/app/build.gradle b/app/build.gradle index bb47493a..16ab93c8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -63,7 +63,7 @@ android { } dependencies { - implementation 'com.github.SimpleMobileTools:Simple-Commons:ab6a89e3b9' + implementation 'com.github.SimpleMobileTools:Simple-Commons:4f9c2f94ff' implementation 'org.greenrobot:eventbus:3.3.1' implementation 'com.github.tibbi:IndicatorFastScroll:4524cd0b61' implementation 'com.github.tibbi:android-smsmms:1012d20ab9' 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 34e159f9..95f05312 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -12,8 +12,6 @@ import android.graphics.drawable.LayerDrawable import android.net.Uri import android.os.Bundle import android.provider.Telephony -import android.view.Menu -import android.view.MenuItem import android.widget.Toast import com.simplemobiletools.commons.dialogs.FilePickerDialog import com.simplemobiletools.commons.extensions.* @@ -55,6 +53,7 @@ class MainActivity : SimpleActivity() { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) appLaunched(BuildConfig.APPLICATION_ID) + setupOptionsMenu() if (checkAppSideloading()) { return @@ -88,6 +87,7 @@ class MainActivity : SimpleActivity() { override fun onResume() { super.onResume() + setupToolbar(main_toolbar) if (storedTextColor != getProperTextColor()) { (conversations_list.adapter as? ConversationsAdapter)?.updateTextColor(getProperTextColor()) } @@ -116,22 +116,18 @@ class MainActivity : SimpleActivity() { bus?.unregister(this) } - override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.menu_main, menu) - updateMenuItemColors(menu) - return true - } - - override fun onOptionsItemSelected(item: MenuItem): Boolean { - when (item.itemId) { - R.id.search -> launchSearch() - R.id.settings -> launchSettings() - R.id.export_messages -> tryToExportMessages() - R.id.import_messages -> tryImportMessages() - R.id.about -> launchAbout() - else -> return super.onOptionsItemSelected(item) + private fun setupOptionsMenu() { + main_toolbar.setOnMenuItemClickListener { menuItem -> + when (menuItem.itemId) { + R.id.search -> launchSearch() + R.id.settings -> launchSettings() + R.id.export_messages -> tryToExportMessages() + R.id.import_messages -> tryImportMessages() + R.id.about -> launchAbout() + else -> return@setOnMenuItemClickListener false + } + return@setOnMenuItemClickListener true } - return true } override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewConversationActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewConversationActivity.kt index acaff574..1268b88f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewConversationActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewConversationActivity.kt @@ -3,16 +3,12 @@ package com.simplemobiletools.smsmessenger.activities import android.content.Intent import android.net.Uri import android.os.Bundle -import android.view.Menu import android.view.WindowManager import com.google.gson.Gson import com.reddit.indicatorfastscroll.FastScrollItemIndicator import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* -import com.simplemobiletools.commons.helpers.MyContactsContentProvider -import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS -import com.simplemobiletools.commons.helpers.SimpleContactsHelper -import com.simplemobiletools.commons.helpers.ensureBackgroundThread +import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.smsmessenger.R @@ -46,15 +42,11 @@ class NewConversationActivity : SimpleActivity() { override fun onResume() { super.onResume() + setupToolbar(new_conversation_toolbar, NavigationIcon.Arrow) no_contacts_placeholder_2.setTextColor(getProperPrimaryColor()) no_contacts_placeholder_2.underlineText() } - override fun onCreateOptionsMenu(menu: Menu): Boolean { - updateMenuItemColors(menu) - return super.onCreateOptionsMenu(menu) - } - private fun initContacts() { if (isThirdPartyIntent()) { return diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SearchActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SearchActivity.kt index 100b1564..862e6ae6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SearchActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SearchActivity.kt @@ -37,12 +37,12 @@ class SearchActivity : SimpleActivity() { updateTextColors(search_holder) search_placeholder.setTextSize(TypedValue.COMPLEX_UNIT_PX, getTextSize()) search_placeholder_2.setTextSize(TypedValue.COMPLEX_UNIT_PX, getTextSize()) + setupSearch(search_toolbar.menu) } - override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.menu_search, menu) - setupSearch(menu) - return true + override fun onResume() { + super.onResume() + setupToolbar(search_toolbar, searchMenuItem = mSearchMenuItem) } private fun setupSearch(menu: Menu) { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt index fe85f50b..c45ada9f 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SettingsActivity.kt @@ -4,7 +4,6 @@ import android.annotation.TargetApi import android.content.Intent import android.os.Build import android.os.Bundle -import android.view.Menu import com.simplemobiletools.commons.activities.ManageBlockedNumbersActivity import com.simplemobiletools.commons.dialogs.ChangeDateTimeFormatDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog @@ -27,6 +26,7 @@ class SettingsActivity : SimpleActivity() { override fun onResume() { super.onResume() + setupToolbar(settings_toolbar, NavigationIcon.Arrow) setupPurchaseThankYou() setupCustomizeColors() @@ -42,7 +42,7 @@ class SettingsActivity : SimpleActivity() { setupGroupMessageAsMMS() setupLockScreenVisibility() setupMMSFileSizeLimit() - updateTextColors(settings_scrollview) + updateTextColors(settings_nested_scrollview) if (blockedNumbersAtPause != -1 && blockedNumbersAtPause != getBlockedNumbers().hashCode()) { refreshMessages() @@ -67,11 +67,6 @@ class SettingsActivity : SimpleActivity() { blockedNumbersAtPause = getBlockedNumbers().hashCode() } - override fun onCreateOptionsMenu(menu: Menu): Boolean { - updateMenuItemColors(menu) - return super.onCreateOptionsMenu(menu) - } - private fun setupPurchaseThankYou() { settings_purchase_thank_you_holder.beGoneIf(isOrWasThankYouInstalled()) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt index b4f96cff..5d037145 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -16,7 +16,9 @@ import android.telephony.SmsMessage import android.telephony.SubscriptionManager import android.text.TextUtils import android.util.TypedValue -import android.view.* +import android.view.Gravity +import android.view.View +import android.view.WindowManager import android.view.inputmethod.EditorInfo import android.widget.LinearLayout import android.widget.LinearLayout.LayoutParams @@ -84,6 +86,8 @@ class ThreadActivity : SimpleActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_thread) + setupOptionsMenu() + refreshMenuItems() val extras = intent.extras if (extras == null) { @@ -95,7 +99,7 @@ class ThreadActivity : SimpleActivity() { clearAllMessagesIfNeeded() threadId = intent.getLongExtra(THREAD_ID, 0L) intent.getStringExtra(THREAD_TITLE)?.let { - supportActionBar?.title = it + thread_toolbar.title = it } bus = EventBus.getDefault() @@ -123,6 +127,7 @@ class ThreadActivity : SimpleActivity() { override fun onResume() { super.onResume() + setupToolbar(thread_toolbar, NavigationIcon.Arrow) val smsDraft = getSmsDraft(threadId) if (smsDraft != null) { @@ -150,10 +155,9 @@ class ThreadActivity : SimpleActivity() { bus?.unregister(this) } - override fun onCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.menu_thread, menu) + private fun refreshMenuItems() { val firstPhoneNumber = participants.firstOrNull()?.phoneNumbers?.firstOrNull()?.value - menu.apply { + thread_toolbar.menu.apply { findItem(R.id.delete).isVisible = threadItems.isNotEmpty() findItem(R.id.block_number).isVisible = isNougatPlus() findItem(R.id.dial_number).isVisible = participants.size == 1 @@ -164,27 +168,25 @@ class ThreadActivity : SimpleActivity() { it.isDigit() } } - - updateMenuItemColors(menu) - return true } - override fun onOptionsItemSelected(item: MenuItem): Boolean { - if (participants.isEmpty()) { - return true - } + private fun setupOptionsMenu() { + thread_toolbar.setOnMenuItemClickListener { menuItem -> + if (participants.isEmpty()) { + return@setOnMenuItemClickListener true + } - when (item.itemId) { - R.id.block_number -> blockNumber() - R.id.delete -> askConfirmDelete() - R.id.add_number_to_contact -> addNumberToContact() - R.id.dial_number -> dialNumber() - R.id.manage_people -> managePeople() - R.id.mark_as_unread -> markAsUnread() - android.R.id.home -> onHomePressed() - else -> return super.onOptionsItemSelected(item) + when (menuItem.itemId) { + R.id.block_number -> blockNumber() + R.id.delete -> askConfirmDelete() + R.id.add_number_to_contact -> addNumberToContact() + R.id.dial_number -> dialNumber() + R.id.manage_people -> managePeople() + R.id.mark_as_unread -> markAsUnread() + else -> return@setOnMenuItemClickListener false + } + return@setOnMenuItemClickListener true } - return true } override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) { @@ -320,9 +322,10 @@ class ThreadActivity : SimpleActivity() { private fun setupAdapter() { threadItems = getThreadItems() - invalidateOptionsMenu() runOnUiThread { + refreshMenuItems() + val currAdapter = thread_messages_list.adapter if (currAdapter == null) { ThreadAdapter(this, threadItems, thread_messages_list) { @@ -514,7 +517,7 @@ class ThreadActivity : SimpleActivity() { private fun setupThreadTitle() { val threadTitle = participants.getThreadTitle() if (threadTitle.isNotEmpty()) { - supportActionBar?.title = participants.getThreadTitle() + thread_toolbar.title = participants.getThreadTitle() } } @@ -831,7 +834,7 @@ class ThreadActivity : SimpleActivity() { } private fun checkSendMessageAvailability() { - if (thread_type_message.text.isNotEmpty() || (attachmentSelections.isNotEmpty() && !attachmentSelections.values.any { it.isPending })) { + if (thread_type_message.text!!.isNotEmpty() || (attachmentSelections.isNotEmpty() && !attachmentSelections.values.any { it.isPending })) { thread_send_message.isClickable = true thread_send_message.alpha = 0.9f } else { diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/ExportMessagesDialog.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/ExportMessagesDialog.kt index 672e09f4..4c524e4d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/ExportMessagesDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/ExportMessagesDialog.kt @@ -22,31 +22,30 @@ class ExportMessagesDialog( init { val view = (activity.layoutInflater.inflate(R.layout.dialog_export_messages, null) as ViewGroup).apply { - export_messages_folder.text = activity.humanizePath(realPath) + export_messages_folder.setText(activity.humanizePath(realPath)) export_messages_filename.setText("${activity.getString(R.string.messages)}_${activity.getCurrentFormattedDateTime()}") export_sms_checkbox.isChecked = config.exportSms export_mms_checkbox.isChecked = config.exportMms if (hidePath) { - export_messages_folder_label.beGone() - export_messages_folder.beGone() + export_messages_folder_hint.beGone() } else { export_messages_folder.setOnClickListener { activity.hideKeyboard(export_messages_filename) FilePickerDialog(activity, realPath, false, showFAB = true) { - export_messages_folder.text = activity.humanizePath(it) + export_messages_folder.setText(activity.humanizePath(it)) realPath = it } } } } - AlertDialog.Builder(activity) + activity.getAlertDialogBuilder() .setPositiveButton(R.string.ok, null) .setNegativeButton(R.string.cancel, null) - .create().apply { - activity.setupDialogStuff(view, this, R.string.export_messages) { - getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { + .apply { + activity.setupDialogStuff(view, this, R.string.export_messages) { alertDialog -> + alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { val filename = view.export_messages_filename.value when { filename.isEmpty() -> activity.toast(R.string.empty_name) @@ -66,7 +65,7 @@ class ExportMessagesDialog( config.exportMms = view.export_mms_checkbox.isChecked config.lastExportPath = file.absolutePath.getParentPath() callback(file) - dismiss() + alertDialog.dismiss() } else -> activity.toast(R.string.invalid_name) } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/ImportMessagesDialog.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/ImportMessagesDialog.kt index 54df49be..3a493dc6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/ImportMessagesDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/ImportMessagesDialog.kt @@ -2,6 +2,7 @@ package com.simplemobiletools.smsmessenger.dialogs import android.view.ViewGroup import androidx.appcompat.app.AlertDialog +import com.simplemobiletools.commons.extensions.getAlertDialogBuilder import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.commons.extensions.toast import com.simplemobiletools.commons.helpers.ensureBackgroundThread @@ -27,12 +28,12 @@ class ImportMessagesDialog( import_mms_checkbox.isChecked = config.importMms } - AlertDialog.Builder(activity) + activity.getAlertDialogBuilder() .setPositiveButton(R.string.ok, null) .setNegativeButton(R.string.cancel, null) - .create().apply { - activity.setupDialogStuff(view, this, R.string.import_messages) { - getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { + .apply { + activity.setupDialogStuff(view, this, R.string.import_messages) { alertDialog -> + alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { if (ignoreClicks) { return@setOnClickListener } @@ -49,7 +50,7 @@ class ImportMessagesDialog( ensureBackgroundThread { MessagesImporter(activity).importMessages(path) { handleParseResult(it) - dismiss() + alertDialog.dismiss() } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/SelectTextDialog.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/SelectTextDialog.kt index 3c2087ed..12da5a57 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/SelectTextDialog.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/dialogs/SelectTextDialog.kt @@ -1,7 +1,7 @@ package com.simplemobiletools.smsmessenger.dialogs -import androidx.appcompat.app.AlertDialog import com.simplemobiletools.commons.activities.BaseSimpleActivity +import com.simplemobiletools.commons.extensions.getAlertDialogBuilder import com.simplemobiletools.commons.extensions.setupDialogStuff import com.simplemobiletools.smsmessenger.R import kotlinx.android.synthetic.main.dialog_select_text.view.* @@ -13,9 +13,9 @@ class SelectTextDialog(val activity: BaseSimpleActivity, val text: String) { dialog_select_text_value.text = text } - AlertDialog.Builder(activity) + activity.getAlertDialogBuilder() .setPositiveButton(R.string.ok) { dialog, which -> { } } - .create().apply { + .apply { activity.setupDialogStuff(view, this) } } diff --git a/app/src/main/res/drawable/item_selected_contact_background.xml b/app/src/main/res/drawable/item_selected_contact_background.xml index f0d2b728..2ddebb40 100644 --- a/app/src/main/res/drawable/item_selected_contact_background.xml +++ b/app/src/main/res/drawable/item_selected_contact_background.xml @@ -2,11 +2,8 @@ - - - + - diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 484e17ab..f18c078f 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -5,63 +5,94 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + android:layout_height="wrap_content"> - + android:layout_height="?attr/actionBarSize" + android:background="@color/color_primary" + app:menu="@menu/menu_main" + app:title="@string/app_launcher_name" + app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" /> - + - + + + android:layout_height="match_parent"> - + android:layout_height="match_parent"> - - + - + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_new_conversation.xml b/app/src/main/res/layout/activity_new_conversation.xml index 842bf8b2..170375c3 100644 --- a/app/src/main/res/layout/activity_new_conversation.xml +++ b/app/src/main/res/layout/activity_new_conversation.xml @@ -1,127 +1,155 @@ - - + android:layout_height="wrap_content"> - + - + - - - - - - - - - - - - + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + - + - + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_search.xml b/app/src/main/res/layout/activity_search.xml index a8e2fe2d..78af7f2e 100644 --- a/app/src/main/res/layout/activity_search.xml +++ b/app/src/main/res/layout/activity_search.xml @@ -1,46 +1,77 @@ - - + android:layout_height="wrap_content"> - + - + + + android:fillViewport="true" + android:scrollbars="none" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_settings.xml b/app/src/main/res/layout/activity_settings.xml index b7147f6b..72c41af8 100644 --- a/app/src/main/res/layout/activity_settings.xml +++ b/app/src/main/res/layout/activity_settings.xml @@ -1,325 +1,350 @@ - + android:layout_height="match_parent"> - + android:layout_height="wrap_content"> - + android:layout_height="?attr/actionBarSize" + android:background="@color/color_primary" + app:title="@string/settings" + app:titleTextAppearance="@style/AppTheme.ActionBar.TitleTextStyle" /> + + + + - + android:text="@string/color_customization" /> - + + + android:background="@drawable/ripple_all_corners"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/app/src/main/res/layout/activity_thread.xml b/app/src/main/res/layout/activity_thread.xml index 1815c4f0..316e5298 100644 --- a/app/src/main/res/layout/activity_thread.xml +++ b/app/src/main/res/layout/activity_thread.xml @@ -1,223 +1,246 @@ - + android:layout_height="match_parent"> + + + + + + + android:layout_marginBottom="@dimen/tiny_margin" + app:layout_behavior="@string/appbar_scrolling_view_behavior"> - + android:visibility="gone" + tools:visibility="visible"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +