Mercurial > dwindows
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 |