feat: Add loading progress indicator
CI / build (push) Has been cancelled
CI / lint (push) Has been cancelled

- 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:
2026-02-03 15:17:27 +00:00
parent 3c0c31fe67
commit 95036915f6
3 changed files with 60 additions and 0 deletions
@@ -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)
}
}
+13
View File
@@ -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"
+1
View File
@@ -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>