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 2e40c7d3d..41e3c80c5 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 @@ -26,14 +26,18 @@ import android.app.TimePickerDialog import android.content.ContentValues import android.content.Intent import android.net.Uri -import android.os.Build import android.os.Bundle import android.provider.ContactsContract import android.provider.MediaStore import android.speech.RecognizerIntent import android.text.format.DateFormat +import android.view.GestureDetector +import android.view.GestureDetector.SimpleOnGestureListener import android.view.Menu import android.view.MenuItem +import android.view.MotionEvent +import android.view.View +import android.view.View.OnTouchListener import androidx.activity.result.contract.ActivityResultContracts import androidx.appcompat.app.AlertDialog import androidx.core.app.ActivityCompat @@ -44,27 +48,25 @@ import com.google.android.flexbox.FlexboxLayoutManager import com.google.android.material.snackbar.Snackbar import com.jakewharton.rxbinding2.view.clicks import com.jakewharton.rxbinding2.widget.textChanges +import com.uber.autodispose.android.lifecycle.scope +import com.uber.autodispose.autoDisposable +import dagger.android.AndroidInjection import dev.octoshrimpy.quik.R import dev.octoshrimpy.quik.common.Navigator import dev.octoshrimpy.quik.common.base.QkThemedActivity import dev.octoshrimpy.quik.common.util.DateFormatter import dev.octoshrimpy.quik.common.util.extensions.autoScrollToStart -import dev.octoshrimpy.quik.common.util.extensions.dismissKeyboard import dev.octoshrimpy.quik.common.util.extensions.hideKeyboard -import dev.octoshrimpy.quik.common.util.extensions.resolveThemeColor import dev.octoshrimpy.quik.common.util.extensions.scrapViews import dev.octoshrimpy.quik.common.util.extensions.setBackgroundTint import dev.octoshrimpy.quik.common.util.extensions.setTint import dev.octoshrimpy.quik.common.util.extensions.setVisible import dev.octoshrimpy.quik.common.util.extensions.showKeyboard +import dev.octoshrimpy.quik.common.widget.QkEditText import dev.octoshrimpy.quik.feature.compose.editing.ChipsAdapter import dev.octoshrimpy.quik.feature.contacts.ContactsActivity import dev.octoshrimpy.quik.model.Attachment import dev.octoshrimpy.quik.model.Recipient -import com.uber.autodispose.android.lifecycle.scope -import com.uber.autodispose.autoDisposable -import dagger.android.AndroidInjection -import dev.octoshrimpy.quik.common.widget.QkEditText import io.reactivex.Observable import io.reactivex.subjects.PublishSubject import io.reactivex.subjects.Subject @@ -72,7 +74,7 @@ import kotlinx.android.synthetic.main.compose_activity.* import java.text.SimpleDateFormat import java.util.* import javax.inject.Inject -import kotlin.collections.HashMap + class ComposeActivity : QkThemedActivity(), ComposeView { @@ -178,16 +180,34 @@ class ComposeActivity : QkThemedActivity(), ComposeView { .autoDisposable(scope()) .subscribe() - findViewById(R.id.message)?.setOnLongClickListener { - val speechRecognizerIntent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH) - speechRecognizerIntent.putExtra( - RecognizerIntent.EXTRA_LANGUAGE_MODEL, - RecognizerIntent.LANGUAGE_MODEL_FREE_FORM - ) -// include if want a custom message that the STT can (optionally) display speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Dictate your message") - speechResultLauncher.launch(speechRecognizerIntent) - true - } + message.setOnTouchListener(object : OnTouchListener { + private val gestureDetector = + GestureDetector(this@ComposeActivity, object : SimpleOnGestureListener() { + override fun onDoubleTap(e: MotionEvent): Boolean { + val speechRecognizerIntent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH) + .putExtra( + RecognizerIntent.EXTRA_LANGUAGE_MODEL, + RecognizerIntent.LANGUAGE_MODEL_FREE_FORM + ) + // include if want a custom message that the STT can (optionally) display .putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak your message") + speechResultLauncher.launch(speechRecognizerIntent) + return true + } + + override fun onSingleTapConfirmed(e: MotionEvent): Boolean { + message.showKeyboard() + return true + } + + override fun onSingleTapUp(e: MotionEvent): Boolean { + return true // don't show soft keyboard on this event + } + }) + + override fun onTouch(v: View, e: MotionEvent): Boolean { + return gestureDetector.onTouchEvent(e) + } + }) window.callback = ComposeWindowCallback(window.callback, this) } diff --git a/presentation/src/main/java/com/moez/QKSMS/feature/qkreply/QkReplyActivity.kt b/presentation/src/main/java/com/moez/QKSMS/feature/qkreply/QkReplyActivity.kt index 018604ff0..5b8caa23e 100644 --- a/presentation/src/main/java/com/moez/QKSMS/feature/qkreply/QkReplyActivity.kt +++ b/presentation/src/main/java/com/moez/QKSMS/feature/qkreply/QkReplyActivity.kt @@ -20,11 +20,15 @@ package dev.octoshrimpy.quik.feature.qkreply import android.app.Activity import android.content.Intent -import android.os.Build import android.os.Bundle import android.speech.RecognizerIntent +import android.view.GestureDetector +import android.view.GestureDetector.SimpleOnGestureListener import android.view.Menu import android.view.MenuItem +import android.view.MotionEvent +import android.view.View +import android.view.View.OnTouchListener import android.view.ViewGroup import android.view.Window import android.view.WindowManager @@ -37,14 +41,14 @@ import com.jakewharton.rxbinding2.widget.textChanges import dev.octoshrimpy.quik.R import dev.octoshrimpy.quik.common.base.QkThemedActivity import dev.octoshrimpy.quik.common.util.extensions.autoScrollToStart -import dev.octoshrimpy.quik.common.util.extensions.resolveThemeColor -import dev.octoshrimpy.quik.common.util.extensions.setBackgroundTint import dev.octoshrimpy.quik.common.util.extensions.setVisible import dev.octoshrimpy.quik.feature.compose.MessagesAdapter import dagger.android.AndroidInjection +import dev.octoshrimpy.quik.common.util.extensions.showKeyboard import dev.octoshrimpy.quik.common.widget.QkEditText import io.reactivex.subjects.PublishSubject import io.reactivex.subjects.Subject +import kotlinx.android.synthetic.main.compose_activity.message import kotlinx.android.synthetic.main.qkreply_activity.* import javax.inject.Inject @@ -100,16 +104,34 @@ class QkReplyActivity : QkThemedActivity(), QkReplyView { override fun onChanged() = messages.scrollToPosition(adapter.itemCount - 1) }) - findViewById(R.id.message)?.setOnLongClickListener { - val speechRecognizerIntent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH) - speechRecognizerIntent.putExtra( - RecognizerIntent.EXTRA_LANGUAGE_MODEL, - RecognizerIntent.LANGUAGE_MODEL_FREE_FORM - ) -// include if want a custom message that the STT can (optionally) display speechRecognizerIntent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Dictate your message") - speechResultLauncher.launch(speechRecognizerIntent) - true - } + message.setOnTouchListener(object : OnTouchListener { + private val gestureDetector = + GestureDetector(this@QkReplyActivity, object : SimpleOnGestureListener() { + override fun onDoubleTap(e: MotionEvent): Boolean { + val speechRecognizerIntent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH) + .putExtra( + RecognizerIntent.EXTRA_LANGUAGE_MODEL, + RecognizerIntent.LANGUAGE_MODEL_FREE_FORM + ) + // include if want a custom message that the STT can (optionally) display .putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak your message") + speechResultLauncher.launch(speechRecognizerIntent) + return true + } + + override fun onSingleTapConfirmed(e: MotionEvent): Boolean { + message.showKeyboard() + return true + } + + override fun onSingleTapUp(e: MotionEvent): Boolean { + return true // don't show soft keyboard on this event + } + }) + + override fun onTouch(v: View, e: MotionEvent): Boolean { + return gestureDetector.onTouchEvent(e) + } + }) } override fun render(state: QkReplyState) {