diff options
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebContextMenu.kt')
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebContextMenu.kt | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebContextMenu.kt b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebContextMenu.kt new file mode 100644 index 00000000..e0aa5ebd --- /dev/null +++ b/app/src/main/kotlin/com/pitchedapps/frost/web/FrostWebContextMenu.kt @@ -0,0 +1,100 @@ +package com.pitchedapps.frost.web + +import android.content.Context +import android.support.constraint.ConstraintLayout +import android.support.constraint.ConstraintSet +import android.text.method.ScrollingMovementMethod +import android.util.AttributeSet +import android.widget.TextView +import ca.allanwang.kau.logging.KL +import ca.allanwang.kau.utils.* +import com.pitchedapps.frost.R +import com.pitchedapps.frost.utils.Prefs + +/** + * Created by Allan Wang on 2017-07-06. + */ +class FrostWebContextMenu @JvmOverloads constructor( + context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr) { + + var url = "" + + val urlHolder = TextView(context, attrs, defStyleAttr) + + init { + layoutParams = LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT) + elevation = 20f + setBackgroundColor(0x80000000.toInt()) + gone() + + val tc = Prefs.textColor + val bg = Prefs.bgColor.colorToForeground(0.1f).withAlpha(255) + + urlHolder.apply { + isVerticalScrollBarEnabled = true + movementMethod = ScrollingMovementMethod() + maxHeight = 60.dpToPx + } + addView(urlHolder) + + //collection of items in our menu and their click event + val data = arrayOf( + R.string.copy_link to { context.copyToClipboard(url) } + ) + + //add views and extract ids + val views = data.map { + (textId, onClick) -> + val tv = TextView(context).apply { + text = context.string(textId) + setOnClickListener({ onClick(); close() }) + } + addView(tv) + tv + }.toMutableList() + + views.add(0, urlHolder) + + val ids = views.mapIndexed { index, textView -> + textView.apply { + id = 74329 + index //totally arbitrary + setTextColor(tc) + setBackgroundColor(bg) + } + KL.d("ID ${textView.text}") + textView.id + } + + //clone to set only after ids are set + val set = ConstraintSet() + set.clone(this) + + ids.forEach { + set.connect(it, ConstraintSet.START, ConstraintSet.PARENT_ID, ConstraintSet.START, 16) + set.connect(it, ConstraintSet.END, ConstraintSet.PARENT_ID, ConstraintSet.END, 16) + } + + + set.createVerticalChain(ConstraintSet.PARENT_ID, ConstraintSet.TOP, ConstraintSet.PARENT_ID, ConstraintSet.BOTTOM, + ids.toIntArray(), null, ConstraintSet.CHAIN_PACKED) + + set.applyTo(this) + setOnClickListener { + close() + } + } + + fun close() { + transitionAuto() + gone() + } + + fun show(url: String) { + this.url = url + urlHolder.text = this.url + transitionAuto() + visible() + } + +}
\ No newline at end of file |