web-install: Implement Android reconnection callback

On Android, Chromium does not support automatic reconnection. The user
must manually pair the device after every reboot in order for
fastboot.js to reconnect to it. Unfortunately, this requires the user of
the library to get involved because USB device connction requests are
only allowed as the result of explicit user action, so we need to add a
reconnect request callback for the user to handle.
This commit is contained in:
Danny Lin 2021-01-29 17:46:08 -08:00 committed by Daniel Micay
parent 3f76cf5942
commit e582d6ca45
2 changed files with 26 additions and 6 deletions

View File

@ -179,7 +179,11 @@
Then, proceed to <a href="#locking-the-bootloader">locking the bootloader</a>
before using the device as locking wipes the data again.</p>
<p><strong id="flash-release-status"></strong></p>
<p>
<strong id="flash-release-status"></strong>
<!-- This appears as part of the status -->
<button id="flash-reconnect-button" style="display: none;"><strong>Reconnect device</strong></button>
</p>
</section>
<section id="locking-the-bootloader">

View File

@ -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.`;
}