feat: Add loading progress indicator
- ProgressBar in activity_main.xml (top of screen) - LoadingProgress.kt utility with WebChromeClient - Shows during page load, hides on complete - Smooth UX with slight hide delay Integration: webView.setupProgressBar(binding.progressBar)
This commit is contained in:
@@ -0,0 +1,46 @@
|
|||||||
|
package farm.hobbs.kioskbrowser
|
||||||
|
|
||||||
|
import android.view.View
|
||||||
|
import android.webkit.WebChromeClient
|
||||||
|
import android.webkit.WebView
|
||||||
|
import android.widget.ProgressBar
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WebChromeClient that updates a ProgressBar during page loads.
|
||||||
|
*
|
||||||
|
* Usage:
|
||||||
|
* ```
|
||||||
|
* webView.webChromeClient = LoadingProgress.createClient(progressBar)
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
object LoadingProgress {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a WebChromeClient that controls the progress bar
|
||||||
|
*/
|
||||||
|
fun createClient(progressBar: ProgressBar): WebChromeClient {
|
||||||
|
return object : WebChromeClient() {
|
||||||
|
override fun onProgressChanged(view: WebView?, newProgress: Int) {
|
||||||
|
super.onProgressChanged(view, newProgress)
|
||||||
|
|
||||||
|
progressBar.progress = newProgress
|
||||||
|
|
||||||
|
if (newProgress < 100) {
|
||||||
|
progressBar.visibility = View.VISIBLE
|
||||||
|
} else {
|
||||||
|
// Hide with slight delay for smooth UX
|
||||||
|
progressBar.postDelayed({
|
||||||
|
progressBar.visibility = View.GONE
|
||||||
|
}, 200)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extension to easily wire up progress tracking
|
||||||
|
*/
|
||||||
|
fun WebView.setupProgressBar(progressBar: ProgressBar) {
|
||||||
|
webChromeClient = createClient(progressBar)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,6 +8,19 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" />
|
android:layout_height="match_parent" />
|
||||||
|
|
||||||
|
<!-- Loading progress bar (top of screen) -->
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/progressBar"
|
||||||
|
style="@style/Widget.AppCompat.ProgressBar.Horizontal"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="4dp"
|
||||||
|
android:layout_gravity="top"
|
||||||
|
android:indeterminate="false"
|
||||||
|
android:max="100"
|
||||||
|
android:progress="0"
|
||||||
|
android:progressTint="@color/progress_color"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
<!-- Invisible admin tap area (top-left corner) -->
|
<!-- Invisible admin tap area (top-left corner) -->
|
||||||
<View
|
<View
|
||||||
android:id="@+id/adminTapArea"
|
android:id="@+id/adminTapArea"
|
||||||
|
|||||||
@@ -4,4 +4,5 @@
|
|||||||
<color name="primary_container">#BBDEFB</color>
|
<color name="primary_container">#BBDEFB</color>
|
||||||
<color name="white">#FFFFFF</color>
|
<color name="white">#FFFFFF</color>
|
||||||
<color name="black">#000000</color>
|
<color name="black">#000000</color>
|
||||||
|
<color name="progress_color">#667eea</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
Reference in New Issue
Block a user