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