comparison android/DWindows.kt @ 2515:211044d98e86

Android: Initial attempt at our own ComboBox class, EditText with PopupList. Still need to access the internal resource for the down arrow button.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Sat, 08 May 2021 01:15:54 +0000
parents 5f711e86a211
children 8f5d064b7054
comparison
equal deleted inserted replaced
2514:5f711e86a211 2515:211044d98e86
1 package org.dbsoft.dwindows 1 package org.dbsoft.dwindows
2 2
3 import android.app.Activity
3 import android.content.ClipData 4 import android.content.ClipData
4 import android.content.ClipboardManager 5 import android.content.ClipboardManager
6 import android.content.Context
5 import android.content.DialogInterface 7 import android.content.DialogInterface
6 import android.content.pm.ActivityInfo 8 import android.content.pm.ActivityInfo
7 import android.content.res.Configuration 9 import android.content.res.Configuration
8 import android.graphics.Bitmap 10 import android.graphics.Bitmap
9 import android.graphics.drawable.GradientDrawable 11 import android.graphics.drawable.GradientDrawable
18 import android.text.InputType 20 import android.text.InputType
19 import android.text.method.PasswordTransformationMethod 21 import android.text.method.PasswordTransformationMethod
20 import android.util.Base64 22 import android.util.Base64
21 import android.util.Log 23 import android.util.Log
22 import android.view.Gravity 24 import android.view.Gravity
25 import android.view.MotionEvent
23 import android.view.View 26 import android.view.View
27 import android.view.View.OnTouchListener
24 import android.view.ViewGroup 28 import android.view.ViewGroup
25 import android.view.inputmethod.EditorInfo 29 import android.view.inputmethod.EditorInfo
26 import android.webkit.WebView 30 import android.webkit.WebView
27 import android.webkit.WebViewClient 31 import android.webkit.WebViewClient
28 import android.widget.* 32 import android.widget.*
33 import android.widget.AdapterView.OnItemClickListener
29 import android.widget.SeekBar.OnSeekBarChangeListener 34 import android.widget.SeekBar.OnSeekBarChangeListener
30 import androidx.appcompat.app.AlertDialog 35 import androidx.appcompat.app.AlertDialog
31 import androidx.appcompat.app.AppCompatActivity 36 import androidx.appcompat.app.AppCompatActivity
37 import androidx.appcompat.widget.AppCompatEditText
32 import androidx.collection.SimpleArrayMap 38 import androidx.collection.SimpleArrayMap
33 import androidx.recyclerview.widget.RecyclerView 39 import androidx.recyclerview.widget.RecyclerView
34 import androidx.viewpager2.widget.ViewPager2 40 import androidx.viewpager2.widget.ViewPager2
35 import com.google.android.material.tabs.TabLayout 41 import com.google.android.material.tabs.TabLayout
36 import com.google.android.material.tabs.TabLayout.OnTabSelectedListener 42 import com.google.android.material.tabs.TabLayout.OnTabSelectedListener
38 import java.util.* 44 import java.util.*
39 import java.util.concurrent.locks.ReentrantLock 45 import java.util.concurrent.locks.ReentrantLock
40 46
41 47
42 class DWTabViewPagerAdapter : RecyclerView.Adapter<DWTabViewPagerAdapter.DWEventViewHolder>() { 48 class DWTabViewPagerAdapter : RecyclerView.Adapter<DWTabViewPagerAdapter.DWEventViewHolder>() {
43 public val viewList = mutableListOf<LinearLayout>() 49 val viewList = mutableListOf<LinearLayout>()
44 public val pageList = mutableListOf<Long>() 50 val pageList = mutableListOf<Long>()
45 public var currentPageID = 0L 51 var currentPageID = 0L
46 52
47 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = 53 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
48 DWEventViewHolder(viewList.get(viewType)) 54 DWEventViewHolder(viewList.get(viewType))
49 55
50 override fun getItemCount() = viewList.count() 56 override fun getItemCount() = viewList.count()
74 // Handle the DW_HTML_CHANGE_COMPLETE event 80 // Handle the DW_HTML_CHANGE_COMPLETE event
75 eventHandlerHTMLChanged(view, 19, url, 4) 81 eventHandlerHTMLChanged(view, 19, url, 4)
76 } 82 }
77 83
78 external fun eventHandlerHTMLChanged(obj1: View, message: Int, URI: String, status: Int) 84 external fun eventHandlerHTMLChanged(obj1: View, message: Int, URI: String, status: Int)
85 }
86
87 class DWComboBox(context: Context) : AppCompatEditText(context), OnTouchListener, OnItemClickListener {
88 var lpw: ListPopupWindow? = null
89 var list = mutableListOf<String>()
90
91 init {
92 //setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.unfold, 0);
93 setOnTouchListener(this)
94 lpw = ListPopupWindow(context)
95 lpw!!.setAdapter(
96 ArrayAdapter(
97 context,
98 android.R.layout.simple_list_item_1, list
99 )
100 )
101 lpw!!.anchorView = this
102 lpw!!.isModal = true
103 lpw!!.setOnItemClickListener(this)
104 }
105
106 override fun onItemClick(parent: AdapterView<*>?, view: View, position: Int, id: Long) {
107 val item = list[position]
108 setText(item)
109 lpw!!.dismiss()
110 }
111
112 override fun onTouch(v: View, event: MotionEvent): Boolean {
113 val DRAWABLE_RIGHT = 2
114 if (event.action == MotionEvent.ACTION_UP) {
115 if (event.x >= v.width - (v as EditText)
116 .compoundDrawables[DRAWABLE_RIGHT].bounds.width()
117 ) {
118 lpw!!.show()
119 return true
120 }
121 }
122 return false
123 }
79 } 124 }
80 125
81 class DWindows : AppCompatActivity() { 126 class DWindows : AppCompatActivity() {
82 var firstWindow: Boolean = true 127 var firstWindow: Boolean = true
83 var windowLayout: LinearLayout? = null 128 var windowLayout: LinearLayout? = null
970 0 -> html.goBack() 1015 0 -> html.goBack()
971 1 -> html.goForward() 1016 1 -> html.goForward()
972 2 -> html.loadUrl("http://dwindows.netlabs.org") 1017 2 -> html.loadUrl("http://dwindows.netlabs.org")
973 4 -> html.reload() 1018 4 -> html.reload()
974 5 -> html.stopLoading() 1019 5 -> html.stopLoading()
1020 }
1021 }
1022 }
1023
1024 fun comboBoxNew(text: String, cid: Int): DWComboBox?
1025 {
1026 var combobox: DWComboBox? = null
1027
1028 waitOnUiThread {
1029 var dataArrayMap = SimpleArrayMap<String, Long>()
1030
1031 combobox = DWComboBox(this)
1032 combobox!!.tag = dataArrayMap
1033 combobox!!.id = cid
1034 }
1035 return combobox
1036 }
1037
1038 fun listOrComboBoxAppend(window: View, text: String)
1039 {
1040 waitOnUiThread {
1041 if(window is DWComboBox) {
1042 val combobox = window as DWComboBox
1043
1044 combobox.list.add(text)
975 } 1045 }
976 } 1046 }
977 } 1047 }
978 1048
979 fun timerConnect(interval: Long, sigfunc: Long, data: Long): Timer 1049 fun timerConnect(interval: Long, sigfunc: Long, data: Long): Timer