Merge branch 'number-popup' into release/2.1.0

pull/1456/head
Alinson S. Xavier 3 years ago
commit 53c270ee12

@ -19,14 +19,12 @@
package org.isoron.uhabits.activities.common.dialogs package org.isoron.uhabits.activities.common.dialogs
import android.app.Dialog
import android.content.Context import android.content.Context
import android.graphics.drawable.ColorDrawable
import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.View.GONE import android.view.View.GONE
import android.view.View.VISIBLE import android.view.View.VISIBLE
import android.widget.PopupWindow
import org.isoron.uhabits.R import org.isoron.uhabits.R
import org.isoron.uhabits.core.models.Entry.Companion.NO import org.isoron.uhabits.core.models.Entry.Companion.NO
import org.isoron.uhabits.core.models.Entry.Companion.SKIP import org.isoron.uhabits.core.models.Entry.Companion.SKIP
@ -52,6 +50,7 @@ class CheckmarkPopup(
private val anchor: View, private val anchor: View,
) { ) {
var onToggle: (Int, String) -> Unit = { _, _ -> } var onToggle: (Int, String) -> Unit = { _, _ -> }
private lateinit var dialog: Dialog
private val view = CheckmarkPopupBinding.inflate(LayoutInflater.from(context)).apply { private val view = CheckmarkPopupBinding.inflate(LayoutInflater.from(context)).apply {
// Required for round corners // Required for round corners
@ -95,29 +94,34 @@ class CheckmarkPopup(
SKIP -> if (prefs.isSkipEnabled) view.skipBtn else view.noBtn SKIP -> if (prefs.isSkipEnabled) view.skipBtn else view.noBtn
else -> null else -> null
} }
selectedBtn?.background = ColorDrawable(view.root.sres.getColor(R.attr.contrast40))
view.notes.setText(notes) view.notes.setText(notes)
} }
fun show() { fun show() {
val popup = PopupWindow() dialog = Dialog(context, android.R.style.Theme_NoTitleBar)
popup.contentView = view.root dialog.setContentView(view.root)
popup.width = view.root.dp(POPUP_WIDTH).toInt() dialog.window?.apply {
popup.height = view.root.dp(POPUP_HEIGHT).toInt() setLayout(
popup.isFocusable = true view.root.dp(POPUP_WIDTH).toInt(),
popup.elevation = view.root.dp(24f) view.root.dp(POPUP_HEIGHT).toInt()
)
setBackgroundDrawableResource(android.R.color.transparent)
}
fun onClick(v: Int) { fun onClick(v: Int) {
this.value = v this.value = v
popup.dismiss() save()
} }
view.yesBtn.setOnClickListener { onClick(YES_MANUAL) } view.yesBtn.setOnClickListener { onClick(YES_MANUAL) }
view.noBtn.setOnClickListener { onClick(NO) } view.noBtn.setOnClickListener { onClick(NO) }
view.skipBtn.setOnClickListener { onClick(SKIP) } view.skipBtn.setOnClickListener { onClick(SKIP) }
view.unknownBtn.setOnClickListener { onClick(UNKNOWN) } view.unknownBtn.setOnClickListener { onClick(UNKNOWN) }
popup.setOnDismissListener { dialog.setCanceledOnTouchOutside(true)
onToggle(value, view.notes.text.toString()) dialog.dimBehind()
} dialog.show()
popup.showAtLocation(anchor, Gravity.CENTER, 0, 0) }
popup.dimBehind()
fun save() {
onToggle(value, view.notes.text.toString().trim())
dialog.dismiss()
} }
} }

@ -19,15 +19,14 @@
package org.isoron.uhabits.activities.common.dialogs package org.isoron.uhabits.activities.common.dialogs
import android.app.Dialog
import android.content.Context import android.content.Context
import android.view.Gravity
import android.view.KeyEvent.KEYCODE_ENTER import android.view.KeyEvent.KEYCODE_ENTER
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.MotionEvent.ACTION_DOWN import android.view.MotionEvent.ACTION_DOWN
import android.view.View import android.view.View
import android.view.View.GONE import android.view.View.GONE
import android.view.View.VISIBLE import android.view.View.VISIBLE
import android.widget.PopupWindow
import org.isoron.uhabits.core.models.Entry import org.isoron.uhabits.core.models.Entry
import org.isoron.uhabits.core.preferences.Preferences import org.isoron.uhabits.core.preferences.Preferences
import org.isoron.uhabits.databinding.CheckmarkPopupBinding import org.isoron.uhabits.databinding.CheckmarkPopupBinding
@ -45,6 +44,7 @@ class NumberPopup(
) { ) {
var onToggle: (Double, String) -> Unit = { _, _ -> } var onToggle: (Double, String) -> Unit = { _, _ -> }
private val originalValue = value private val originalValue = value
private lateinit var dialog: Dialog
private val view = CheckmarkPopupBinding.inflate(LayoutInflater.from(context)).apply { private val view = CheckmarkPopupBinding.inflate(LayoutInflater.from(context)).apply {
// Required for round corners // Required for round corners
@ -72,35 +72,40 @@ class NumberPopup(
} }
fun show() { fun show() {
val popup = PopupWindow() dialog = Dialog(context, android.R.style.Theme_NoTitleBar)
popup.contentView = view.root dialog.setContentView(view.root)
popup.width = view.root.dp(POPUP_WIDTH).toInt() dialog.window?.apply {
popup.height = view.root.dp(POPUP_HEIGHT).toInt() setLayout(
popup.isFocusable = true view.root.dp(POPUP_WIDTH).toInt(),
popup.elevation = view.root.dp(24f) view.root.dp(POPUP_HEIGHT).toInt()
popup.setOnDismissListener { )
save() setBackgroundDrawableResource(android.R.color.transparent)
} }
view.value.setOnKeyListener { _, keyCode, event -> view.value.setOnKeyListener { _, keyCode, event ->
if (event.action == ACTION_DOWN && keyCode == KEYCODE_ENTER) { if (event.action == ACTION_DOWN && keyCode == KEYCODE_ENTER) {
popup.dismiss() save()
return@setOnKeyListener true return@setOnKeyListener true
} }
return@setOnKeyListener false return@setOnKeyListener false
} }
view.saveBtn.setOnClickListener { popup.dismiss() } view.saveBtn.setOnClickListener {
save()
}
view.skipBtnNumber.setOnClickListener { view.skipBtnNumber.setOnClickListener {
view.value.setText((Entry.SKIP.toDouble() / 1000).toString()) view.value.setText((Entry.SKIP.toDouble() / 1000).toString())
popup.dismiss() save()
} }
popup.showAtLocation(anchor, Gravity.CENTER, 0, 0)
view.value.requestFocusWithKeyboard() view.value.requestFocusWithKeyboard()
popup.dimBehind() dialog.setCanceledOnTouchOutside(true)
dialog.dimBehind()
dialog.show()
} }
fun save() { fun save() {
val value = view.value.text.toString().toDoubleOrNull() ?: originalValue val value = view.value.text.toString().toDoubleOrNull() ?: originalValue
val notes = view.notes.text.toString() val notes = view.notes.text.toString()
onToggle(value, notes) onToggle(value, notes)
dialog.dismiss()
} }
} }

@ -20,8 +20,8 @@
package org.isoron.uhabits.utils package org.isoron.uhabits.utils
import android.app.Activity import android.app.Activity
import android.app.Dialog
import android.content.ActivityNotFoundException import android.content.ActivityNotFoundException
import android.content.Context
import android.content.Intent import android.content.Intent
import android.graphics.Canvas import android.graphics.Canvas
import android.graphics.Color import android.graphics.Color
@ -36,7 +36,6 @@ import android.view.ViewGroup
import android.view.ViewGroup.LayoutParams.MATCH_PARENT import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.view.WindowManager import android.view.WindowManager
import android.widget.PopupWindow
import android.widget.RelativeLayout import android.widget.RelativeLayout
import android.widget.RelativeLayout.ALIGN_PARENT_BOTTOM import android.widget.RelativeLayout.ALIGN_PARENT_BOTTOM
import android.widget.RelativeLayout.ALIGN_PARENT_TOP import android.widget.RelativeLayout.ALIGN_PARENT_TOP
@ -219,15 +218,9 @@ fun View.drawNotesIndicator(canvas: Canvas, color: Int, size: Float, notes: Stri
val View.sres: StyledResources val View.sres: StyledResources
get() = StyledResources(context) get() = StyledResources(context)
fun PopupWindow.dimBehind() { fun Dialog.dimBehind() {
// https://stackoverflow.com/questions/35874001/dim-the-background-using-popupwindow-in-android window?.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
val container = contentView.rootView window?.setDimAmount(0.5f)
val context = contentView.context
val wm = context.getSystemService(Context.WINDOW_SERVICE) as WindowManager
val p = container.layoutParams as WindowManager.LayoutParams
p.flags = p.flags or WindowManager.LayoutParams.FLAG_DIM_BEHIND
p.dimAmount = 0.5f
wm.updateViewLayout(container, p)
} }
fun View.requestFocusWithKeyboard() { fun View.requestFocusWithKeyboard() {

Loading…
Cancel
Save