From 30126523aefe6d53dcda3efe4ec0cf21816c8a0e Mon Sep 17 00:00:00 2001 From: moezbhatti Date: Sun, 17 Nov 2019 02:10:55 -0500 Subject: [PATCH] Show keyboard when selecting contact and contact selected --- .../common/util/extensions/ActivityExtensions.kt | 3 +-- .../QKSMS/common/util/extensions/ViewExtensions.kt | 9 +++++++-- .../moez/QKSMS/feature/compose/ComposeActivity.kt | 12 ++++++++---- .../com/moez/QKSMS/feature/compose/ComposeView.kt | 1 + .../moez/QKSMS/feature/compose/ComposeViewModel.kt | 1 + .../moez/QKSMS/feature/contacts/ContactsActivity.kt | 9 +++++++++ .../moez/QKSMS/feature/contacts/ContactsContract.kt | 1 + .../moez/QKSMS/feature/contacts/ContactsViewModel.kt | 7 +++++++ 8 files changed, 35 insertions(+), 8 deletions(-) diff --git a/presentation/src/main/java/com/moez/QKSMS/common/util/extensions/ActivityExtensions.kt b/presentation/src/main/java/com/moez/QKSMS/common/util/extensions/ActivityExtensions.kt index 83c103ad..3d4f59f5 100644 --- a/presentation/src/main/java/com/moez/QKSMS/common/util/extensions/ActivityExtensions.kt +++ b/presentation/src/main/java/com/moez/QKSMS/common/util/extensions/ActivityExtensions.kt @@ -24,8 +24,7 @@ import android.view.inputmethod.InputMethodManager fun Activity.dismissKeyboard() { window.currentFocus?.let { focus -> - val imm = getSystemService( - Context.INPUT_METHOD_SERVICE) as InputMethodManager + val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager imm.hideSoftInputFromWindow(focus.windowToken, 0) focus.clearFocus() diff --git a/presentation/src/main/java/com/moez/QKSMS/common/util/extensions/ViewExtensions.kt b/presentation/src/main/java/com/moez/QKSMS/common/util/extensions/ViewExtensions.kt index 3adb55dc..3dea161c 100644 --- a/presentation/src/main/java/com/moez/QKSMS/common/util/extensions/ViewExtensions.kt +++ b/presentation/src/main/java/com/moez/QKSMS/common/util/extensions/ViewExtensions.kt @@ -39,11 +39,16 @@ var ViewGroup.animateLayoutChanges: Boolean layoutTransition = if (value) LayoutTransition() else null } - fun EditText.showKeyboard() { requestFocus() val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager - imm.showSoftInput(this, 0) + imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT) +} + +fun EditText.hideKeyboard() { + requestFocus() + val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + imm.hideSoftInputFromWindow(windowToken, 0) } fun ImageView.setTint(color: Int) { diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeActivity.kt b/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeActivity.kt index be4028a5..e5eb83ba 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeActivity.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeActivity.kt @@ -47,6 +47,7 @@ import com.moez.QKSMS.common.Navigator import com.moez.QKSMS.common.base.QkThemedActivity import com.moez.QKSMS.common.util.DateFormatter import com.moez.QKSMS.common.util.extensions.autoScrollToStart +import com.moez.QKSMS.common.util.extensions.hideKeyboard import com.moez.QKSMS.common.util.extensions.resolveThemeColor import com.moez.QKSMS.common.util.extensions.scrapViews import com.moez.QKSMS.common.util.extensions.setBackgroundTint @@ -207,10 +208,6 @@ class ComposeActivity : QkThemedActivity(), ComposeView { toolbar.menu.findItem(R.id.next)?.isVisible = state.selectedMessages == 0 && state.query.isNotEmpty() toolbar.menu.findItem(R.id.clear)?.isVisible = state.selectedMessages == 0 && state.query.isNotEmpty() - if (chipsAdapter.data.isEmpty() && state.selectedChips.isNotEmpty()) { - message.showKeyboard() - } - chipsAdapter.data = state.selectedChips loading.setVisible(state.loading) @@ -289,12 +286,19 @@ class ComposeActivity : QkThemedActivity(), ComposeView { } override fun showContacts(chips: List) { + message.hideKeyboard() val serialized = HashMap(chips.associate { chip -> chip.address to chip.contact?.lookupKey }) val intent = Intent(this, ContactsActivity::class.java) .putExtra(ContactsActivity.ChipsKey, serialized) startActivityForResult(intent, SELECT_CONTACT_REQUEST_CODE) } + override fun showKeyboard() { + message.postDelayed({ + message.showKeyboard() + }, 200) + } + override fun requestCamera() { cameraDestination = SimpleDateFormat("yyyyMMdd_HHmmss", Locale.getDefault()).format(Date()) .let { timestamp -> ContentValues().apply { put(MediaStore.Images.Media.TITLE, timestamp) } } diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeView.kt b/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeView.kt index aa54543e..1f7efef6 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeView.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeView.kt @@ -62,6 +62,7 @@ interface ComposeView : QkView { fun requestStoragePermission() fun requestSmsPermission() fun showContacts(chips: List) + fun showKeyboard() fun requestCamera() fun requestGallery() fun requestDatePicker() diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeViewModel.kt b/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeViewModel.kt index fb8db5b0..ba36b0fd 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeViewModel.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/compose/ComposeViewModel.kt @@ -243,6 +243,7 @@ class ComposeViewModel @Inject constructor( .autoDisposable(view.scope()) .subscribe { chips -> chipsReducer.onNext { list -> list + chips } + view.showKeyboard() } // Set the contact suggestions list to visible when the add button is pressed diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/contacts/ContactsActivity.kt b/presentation/src/main/java/com/moez/QKSMS/feature/contacts/ContactsActivity.kt index 3685941c..424ae592 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/contacts/ContactsActivity.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/contacts/ContactsActivity.kt @@ -27,6 +27,8 @@ import com.jakewharton.rxbinding2.widget.textChanges import com.moez.QKSMS.R import com.moez.QKSMS.common.ViewModelFactory import com.moez.QKSMS.common.base.QkThemedActivity +import com.moez.QKSMS.common.util.extensions.hideKeyboard +import com.moez.QKSMS.common.util.extensions.showKeyboard import com.moez.QKSMS.common.widget.QkDialog import com.moez.QKSMS.extensions.Optional import com.moez.QKSMS.feature.compose.editing.ComposeItem @@ -95,7 +97,14 @@ class ContactsActivity : QkThemedActivity(), ContactsContract { } } + override fun openKeyboard() { + search.postDelayed({ + search.showKeyboard() + }, 200) + } + override fun finish(result: HashMap) { + search.hideKeyboard() val intent = Intent().putExtra(ChipsKey, result) setResult(Activity.RESULT_OK, intent) finish() diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/contacts/ContactsContract.kt b/presentation/src/main/java/com/moez/QKSMS/feature/contacts/ContactsContract.kt index 09628b38..65ed5ebe 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/contacts/ContactsContract.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/contacts/ContactsContract.kt @@ -35,6 +35,7 @@ interface ContactsContract : QkView { val phoneNumberSelectedIntent: Subject> val phoneNumberActionIntent: Subject + fun openKeyboard() fun finish(result: HashMap) } diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/contacts/ContactsViewModel.kt b/presentation/src/main/java/com/moez/QKSMS/feature/contacts/ContactsViewModel.kt index 99c94813..3a52671d 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/contacts/ContactsViewModel.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/contacts/ContactsViewModel.kt @@ -71,6 +71,8 @@ class ContactsViewModel @Inject constructor( } } + private var shouldOpenKeyboard: Boolean = true + init { syncContacts.execute(Unit) } @@ -78,6 +80,11 @@ class ContactsViewModel @Inject constructor( override fun bindView(view: ContactsContract) { super.bindView(view) + if (shouldOpenKeyboard) { + view.openKeyboard() + shouldOpenKeyboard = false + } + // Update the list of contact suggestions based on the query input, while also filtering out any contacts // that have already been selected Observables