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_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) -->
|
||||
<View
|
||||
android:id="@+id/adminTapArea"
|
||||
|
||||
@@ -4,4 +4,5 @@
|
||||
<color name="primary_container">#BBDEFB</color>
|
||||
<color name="white">#FFFFFF</color>
|
||||
<color name="black">#000000</color>
|
||||
<color name="progress_color">#667eea</color>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user