comparison android/DWindows.kt @ 2501:41984ffb5ca2

Android: Initial implement of HTML control with WebView. Getting an error about view calls not on the UI thread, even though the call stack is on the main thread... confusing.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Thu, 06 May 2021 00:05:32 +0000
parents ac0b7e579229
children b6319aed3298
comparison
equal deleted inserted replaced
2500:ac0b7e579229 2501:41984ffb5ca2
12 import android.os.Handler 12 import android.os.Handler
13 import android.os.Looper 13 import android.os.Looper
14 import android.text.InputFilter 14 import android.text.InputFilter
15 import android.text.InputFilter.LengthFilter 15 import android.text.InputFilter.LengthFilter
16 import android.text.method.PasswordTransformationMethod 16 import android.text.method.PasswordTransformationMethod
17 import android.util.Base64
17 import android.util.Log 18 import android.util.Log
18 import android.view.Gravity 19 import android.view.Gravity
19 import android.view.View 20 import android.view.View
20 import android.view.ViewGroup 21 import android.view.ViewGroup
22 import android.webkit.WebView
21 import android.widget.* 23 import android.widget.*
22 import android.widget.SeekBar.OnSeekBarChangeListener 24 import android.widget.SeekBar.OnSeekBarChangeListener
23 import androidx.appcompat.app.AlertDialog 25 import androidx.appcompat.app.AlertDialog
24 import androidx.appcompat.app.AppCompatActivity 26 import androidx.appcompat.app.AppCompatActivity
25 import androidx.collection.SimpleArrayMap 27 import androidx.collection.SimpleArrayMap
26 import androidx.recyclerview.widget.RecyclerView 28 import androidx.recyclerview.widget.RecyclerView
27 import androidx.viewpager.widget.ViewPager
28 import androidx.viewpager2.widget.ViewPager2 29 import androidx.viewpager2.widget.ViewPager2
29 import com.google.android.material.tabs.TabLayout 30 import com.google.android.material.tabs.TabLayout
30 import com.google.android.material.tabs.TabLayout.OnTabSelectedListener 31 import com.google.android.material.tabs.TabLayout.OnTabSelectedListener
31 import com.google.android.material.tabs.TabLayoutMediator 32 import com.google.android.material.tabs.TabLayoutMediator
32 import java.util.* 33 import java.util.*
674 } 675 }
675 676
676 fun percentSetRange(percent: ProgressBar, range: Int) 677 fun percentSetRange(percent: ProgressBar, range: Int)
677 { 678 {
678 percent.max = range 679 percent.max = range
680 }
681
682 fun htmlNew(cid: Int): WebView?
683 {
684 val looper = Looper.myLooper()
685
686 // WebView requires an active Looper
687 if(looper == null) {
688 Looper.prepare()
689 }
690
691 var dataArrayMap = SimpleArrayMap<String, Long>()
692 val html = WebView(this)
693
694 html.tag = dataArrayMap
695 html.id = cid
696 return html
697 }
698
699 fun htmlLoadURL(html: WebView, url: String)
700 {
701 html.loadUrl(url)
702 }
703
704 fun htmlRaw(html: WebView, data: String)
705 {
706 val encodedHtml: String = Base64.encodeToString(data.toByteArray(), Base64.NO_PADDING)
707 html.loadData(encodedHtml, "text/html", "base64")
708 }
709
710 fun htmlJavascriptRun(html: WebView, javascript: String, data: Long)
711 {
712 html.evaluateJavascript(javascript) { value ->
713 // Execute onReceiveValue's code
714 eventHandlerHTMLResult(html, 18, value, data)
715 }
716 }
717
718 fun htmlAction(html: WebView, action: Int)
719 {
720 when (action) {
721 0 -> html.goBack()
722 1 -> html.goForward()
723 2 -> html.loadUrl("http://dwindows.netlabs.org")
724 4 -> html.reload()
725 5 -> html.stopLoading()
726 }
679 } 727 }
680 728
681 fun timerConnect(interval: Long, sigfunc: Long, data: Long): Timer 729 fun timerConnect(interval: Long, sigfunc: Long, data: Long): Timer
682 { 730 {
683 // creating timer task, timer 731 // creating timer task, timer
799 intd: Int 847 intd: Int
800 ) 848 )
801 external fun eventHandlerSimple(obj1: View, message: Int) 849 external fun eventHandlerSimple(obj1: View, message: Int)
802 external fun eventHandlerNotebook(obj1: View, message: Int, pageID: Long) 850 external fun eventHandlerNotebook(obj1: View, message: Int, pageID: Long)
803 external fun eventHandlerTimer(sigfunc: Long, data: Long): Int 851 external fun eventHandlerTimer(sigfunc: Long, data: Long): Int
852 external fun eventHandlerHTMLResult(obj1: View, message: Int, result: String, data: Long)
804 853
805 companion object 854 companion object
806 { 855 {
807 // Used to load the 'dwindows' library on application startup. 856 // Used to load the 'dwindows' library on application startup.
808 init 857 init