diff --git a/app/src/main/java/net/pokeranalytics/android/ui/adapter/HandHistoryAdapter.kt b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HandHistoryAdapter.kt index f5b3358d..9ed629a0 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/adapter/HandHistoryAdapter.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/adapter/HandHistoryAdapter.kt @@ -1,5 +1,7 @@ package net.pokeranalytics.android.ui.adapter +import android.app.Activity +import android.content.Context import android.content.res.ColorStateList import android.text.Editable import android.text.InputType @@ -8,6 +10,7 @@ import android.view.LayoutInflater import android.view.MotionEvent import android.view.View import android.view.ViewGroup +import android.view.inputmethod.InputMethodManager import android.widget.Button import android.widget.EditText import androidx.recyclerview.widget.RecyclerView @@ -15,6 +18,7 @@ import net.pokeranalytics.android.R import net.pokeranalytics.android.exceptions.PAIllegalStateException import net.pokeranalytics.android.model.handhistory.ComputedAction import net.pokeranalytics.android.model.handhistory.HHKeyboard +import net.pokeranalytics.android.ui.extensions.hideKeyboard import net.pokeranalytics.android.ui.view.RowRepresentable import net.pokeranalytics.android.ui.view.holder.RowViewHolder import net.pokeranalytics.android.ui.view.rowrepresentable.ViewIdentifier @@ -114,14 +118,16 @@ class HandHistoryAdapter( amountEditText.isFocusableInTouchMode = true amountEditText.setOnTouchListener { v, event -> + Timber.d("touch action = ${event.action}") if (this.amountCanBeEdited) { - // Both are required, otherwise requestFocus() fails - amountEditText.isFocusable = true - amountEditText.isFocusableInTouchMode = true - amountEditText.requestFocus() + if (event.action == MotionEvent.ACTION_UP) { + // Both are required, otherwise requestFocus() fails + amountEditText.isFocusable = true + amountEditText.isFocusableInTouchMode = true + + requestFocusAndShowKeyboard(amountEditText) - if (event.action == MotionEvent.ACTION_DOWN) { editTextSelected(amountEditText, true, HHKeyboard.AMOUNT.ordinal) } } @@ -146,6 +152,7 @@ class HandHistoryAdapter( private fun buttonEdited(button: Button, selected: Boolean, tag: Int) { button.backgroundTintList = ColorStateList.valueOf(color(selected)) + (itemView.context as Activity).hideKeyboard() if (selected) { val row = dataSource.rowRepresentableForPosition(currentPosition) @@ -161,7 +168,7 @@ class HandHistoryAdapter( override fun onBind(position: Int, row: RowRepresentable, adapter: RecyclerAdapter) { - Timber.d("onbind @position = $position") +// Timber.d("onbind @position = $position") this.currentPosition = position @@ -181,6 +188,9 @@ class HandHistoryAdapter( val selected = adapter.dataSource.isSelected(position, row, tag) // Timber.d("Action at $position is selected: $selected") actionButton.backgroundTintList = ColorStateList.valueOf(color(selected)) + if (selected) { + (itemView.context as Activity).hideKeyboard() + } computedAction.action.type?.resId?.let { actionButton.setText(it) @@ -205,17 +215,26 @@ class HandHistoryAdapter( amountEditText.setText(computedAction.action.displayedFormattedAmount) - val tookFocus = if (selected) { - amountEditText.requestFocus() + if (selected) { + requestFocusAndShowKeyboard(amountEditText) } else { amountEditText.clearFocus() - false } - Timber.d("tookFocus: $tookFocus") } } + + private fun requestFocusAndShowKeyboard(editText: EditText) { + editText.requestFocus() + + if (editText.requestFocus()) { + val imm = itemView.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager + imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0) +// imm.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT) + } + + } } /** diff --git a/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt b/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt index 2aa93dd1..c48d1fc8 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt @@ -11,6 +11,7 @@ import android.graphics.Color import android.net.Uri import android.util.TypedValue import android.view.View +import android.view.inputmethod.InputMethodManager import android.widget.ImageView import android.widget.LinearLayout import android.widget.Toast @@ -205,3 +206,16 @@ fun Bitmap.toByteArray() : ByteArray { this.compress(Bitmap.CompressFormat.PNG, 100, baos) return baos.toByteArray() } + +fun Activity.hideKeyboard() { + this.currentFocus?.let { + val imm = getSystemService(InputMethodManager::class.java) +// imm.showSoftInput() + imm.hideSoftInputFromWindow(it.windowToken, 0) + } +} + +//fun Context.showKeyboard(view: View) { +// val imm = getSystemService(InputMethodManager::class.java) +// imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0) +//} \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HandHistoryFragment.kt b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HandHistoryFragment.kt index c2fe82ae..486616f6 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/fragment/HandHistoryFragment.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/fragment/HandHistoryFragment.kt @@ -5,7 +5,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import androidx.lifecycle.ViewModelProviders -import androidx.recyclerview.widget.LinearLayoutManager import kotlinx.android.synthetic.main.fragment_hand_history.* import kotlinx.android.synthetic.main.fragment_settings.recyclerView import net.pokeranalytics.android.R @@ -19,6 +18,7 @@ import net.pokeranalytics.android.ui.adapter.RowRepresentableDataSource import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate import net.pokeranalytics.android.ui.fragment.components.RealmFragment import net.pokeranalytics.android.ui.view.RowRepresentable +import net.pokeranalytics.android.ui.view.SmoothScrollLinearLayoutManager import net.pokeranalytics.android.ui.view.handhistory.KeyboardListener import net.pokeranalytics.android.ui.view.handhistory.StreetCardHeader import net.pokeranalytics.android.ui.viewmodel.HandHistoryViewModel @@ -84,12 +84,13 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDataSource, RowRepr setDisplayHomeAsUpEnabled(true) - val viewManager = LinearLayoutManager(requireContext()) +// SmoothScrollLinearLayoutManager(requireContext()) +// val viewManager = LinearLayoutManager(requireContext()) handHistoryAdapter = HandHistoryAdapter(this, this) recyclerView.apply { setHasFixedSize(true) - layoutManager = viewManager + layoutManager = SmoothScrollLinearLayoutManager(requireContext()) adapter = handHistoryAdapter } @@ -117,7 +118,7 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDataSource, RowRepr private fun findNextActionToEdit(startIndex: Int, keyboard: HHKeyboard? = null) { this.model.findIndexForEdition(startIndex, keyboard)?.let { - this.keyboard.show(it) + this.keyboard.show(it, this.requireActivity()) this.refreshCells(startIndex) } ?: run { this.keyboard.hide() @@ -158,7 +159,8 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDataSource, RowRepr this.model.currentSelection = HHSelection(position, HHKeyboard.values()[tag]) // scrolls to selected position - this.recyclerView.scrollToPosition(position) +// this.recyclerView.scrollToPosition(position) + this.recyclerView.smoothScrollToPosition(position) val keyboard = when (row) { is ComputedAction -> { @@ -174,7 +176,7 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDataSource, RowRepr else -> null } Timber.d("row $position selected, show keyboard = $keyboard") - keyboard?.let { this.keyboard.show(keyboard) } + keyboard?.let { this.keyboard.show(keyboard, requireActivity()) } } @@ -231,6 +233,10 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDataSource, RowRepr this.refreshCurrentRow() } + override fun closeKeyboard() { + this.keyboard?.hide() + } + // Table refresh private fun refreshCells(oldIndex: Int) { @@ -245,4 +251,5 @@ class HandHistoryFragment : RealmFragment(), RowRepresentableDataSource, RowRepr } } + } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/handhistory/KeyboardAmountView.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/handhistory/KeyboardAmountView.kt index 057a30fa..f1ee5bd2 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/handhistory/KeyboardAmountView.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/handhistory/KeyboardAmountView.kt @@ -18,6 +18,10 @@ class KeyboardAmountView(context: Context) : AbstractKeyboardView(context) { this.clearButton.setOnClickListener { this.keyboardListener?.clearAmount() } + + this.closeButton.setOnClickListener { + this.keyboardListener?.closeKeyboard() + } } } \ No newline at end of file diff --git a/app/src/main/java/net/pokeranalytics/android/ui/view/handhistory/KeyboardContainer.kt b/app/src/main/java/net/pokeranalytics/android/ui/view/handhistory/KeyboardContainer.kt index d77ec7e8..93279e25 100644 --- a/app/src/main/java/net/pokeranalytics/android/ui/view/handhistory/KeyboardContainer.kt +++ b/app/src/main/java/net/pokeranalytics/android/ui/view/handhistory/KeyboardContainer.kt @@ -1,22 +1,24 @@ package net.pokeranalytics.android.ui.view.handhistory +import android.app.Activity import android.content.Context import android.util.AttributeSet import android.view.View import android.widget.FrameLayout -import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.isVisible import net.pokeranalytics.android.R import net.pokeranalytics.android.model.handhistory.HHKeyboard import net.pokeranalytics.android.model.realm.handhistory.Action import net.pokeranalytics.android.model.realm.handhistory.Card + interface KeyboardListener { fun actionSelected(action: Action.Type) fun cardValueSelected(value: Int) fun cardSuitSelected(suit: Card.Suit) fun amountValidated() fun clearAmount() + fun closeKeyboard() } class KeyboardContainer(context: Context, attrs: AttributeSet?) : FrameLayout(context, attrs) { @@ -25,7 +27,7 @@ class KeyboardContainer(context: Context, attrs: AttributeSet?) : FrameLayout(co val keyboards = HashMap() - private lateinit var constraintLayout: ConstraintLayout +// private lateinit var constraintLayout: ConstraintLayout init { this.setBackgroundColor(context.getColor(R.color.kaki_darker)) @@ -39,7 +41,7 @@ class KeyboardContainer(context: Context, attrs: AttributeSet?) : FrameLayout(co this.isVisible = false } - fun show(type: HHKeyboard) { + fun show(type: HHKeyboard, activity: Activity) { // Timber.d("show keyboard : $type") show() @@ -48,9 +50,18 @@ class KeyboardContainer(context: Context, attrs: AttributeSet?) : FrameLayout(co if (view == null) { view = when(type) { - HHKeyboard.ACTION -> { KeyboardActionView(context) } - HHKeyboard.AMOUNT -> { KeyboardAmountView(context) } - HHKeyboard.CARD -> { KeyboardCardView(context) } + HHKeyboard.ACTION -> { +// activity.hideKeyboard() + KeyboardActionView(context) + } + HHKeyboard.AMOUNT -> { +// activity.showKeyboard() + KeyboardAmountView(context) + } + HHKeyboard.CARD -> { +// activity.hideKeyboard() + KeyboardCardView(context) + } } view.keyboardListener = this.keyboardListener this.keyboards[type] = view diff --git a/app/src/main/res/layout/fragment_hand_history.xml b/app/src/main/res/layout/fragment_hand_history.xml index d7cf3389..e1eb2179 100644 --- a/app/src/main/res/layout/fragment_hand_history.xml +++ b/app/src/main/res/layout/fragment_hand_history.xml @@ -29,7 +29,7 @@ android:id="@+id/recyclerView" android:layout_width="0dp" android:layout_height="0dp" - app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintBottom_toTopOf="@id/keyboard" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/appBar" /> @@ -37,8 +37,7 @@ diff --git a/app/src/main/res/layout/row_hand_action.xml b/app/src/main/res/layout/row_hand_action.xml index 8d3f451e..8fe2e83e 100644 --- a/app/src/main/res/layout/row_hand_action.xml +++ b/app/src/main/res/layout/row_hand_action.xml @@ -38,6 +38,7 @@