diff --git a/static/install/web.html b/static/install/web.html
index dc04ad3a..0ee9ea82 100644
--- a/static/install/web.html
+++ b/static/install/web.html
@@ -179,7 +179,11 @@
Then, proceed to locking the bootloader
before using the device as locking wipes the data again.
-
+
+
+
+
+
diff --git a/static/js/web-install.js b/static/js/web-install.js
index ed8c9fd2..660fd02e 100644
--- a/static/js/web-install.js
+++ b/static/js/web-install.js
@@ -148,6 +148,19 @@ async function downloadRelease(setProgress) {
return `Downloaded ${latestZip} release.`;
}
+async function reconnectCallback() {
+ let statusField = document.getElementById("flash-release-status");
+ statusField.textContent =
+ "In order to continue flashing, you need to reconnect the device by tapping here:";
+
+ let reconnectButton = document.getElementById("flash-reconnect-button");
+ reconnectButton.style.display = "inline-block";
+ reconnectButton.onclick = async () => {
+ await device.connect();
+ reconnectButton.style.display = "none";
+ };
+}
+
async function flashRelease(setProgress) {
await ensureConnected(setProgress);
@@ -162,11 +175,14 @@ async function flashRelease(setProgress) {
}
setProgress("Flashing release...");
- await fastboot.FactoryImages.flashZip(device, blob, true, (action, item) => {
- let userAction = fastboot.FactoryImages.USER_ACTION_MAP[action];
- let userItem = item === "avb_custom_key" ? "verified boot key" : item;
- setProgress(`${userAction} ${userItem}...`);
- });
+ await fastboot.FactoryImages.flashZip(
+ device, blob, true, reconnectCallback,
+ (action, item) => {
+ let userAction = fastboot.FactoryImages.USER_ACTION_MAP[action];
+ let userItem = item === "avb_custom_key" ? "verified boot key" : item;
+ setProgress(`${userAction} ${userItem}...`);
+ }
+ );
return `Flashed ${latestZip} to device.`;
}