Skip to content

Commit 3a6131a

Browse files
committed
fix: add fallback and min webview
1 parent 50dc468 commit 3a6131a

5 files changed

Lines changed: 99 additions & 7 deletions

File tree

src/components/terminal/terminalManager.js

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -670,7 +670,7 @@ class TerminalManager {
670670

671671
let lastWidth = 0;
672672
let lastHeight = 0;
673-
const resizeObserver = new ResizeObserver((entries) => {
673+
const handleResize = (entries) => {
674674
const now = Date.now();
675675
const entry = entries && entries[0];
676676
const cr = entry?.contentRect;
@@ -706,15 +706,30 @@ class TerminalManager {
706706
console.error(`Resize error for terminal ${terminalId}:`, error);
707707
}
708708
}, RESIZE_DEBOUNCE);
709-
});
709+
};
710+
711+
const resizeObserver =
712+
typeof ResizeObserver === "function"
713+
? new ResizeObserver(handleResize)
714+
: null;
715+
let resizeFallbackInterval = null;
710716

711717
// Wait for the terminal container to be available, then observe it
712718
setTimeout(() => {
713719
const containerElement = terminalFile.content;
714720
if (containerElement && containerElement instanceof Element) {
715-
resizeObserver.observe(containerElement);
716-
// store observer so we can disconnect on close
717-
terminalFile._resizeObserver = resizeObserver;
721+
if (resizeObserver) {
722+
resizeObserver.observe(containerElement);
723+
// store observer so we can disconnect on close
724+
terminalFile._resizeObserver = resizeObserver;
725+
} else {
726+
resizeFallbackInterval = setInterval(() => handleResize(), 500);
727+
terminalFile._resizeObserver = {
728+
disconnect() {
729+
clearInterval(resizeFallbackInterval);
730+
},
731+
};
732+
}
718733
} else {
719734
console.warn("Terminal container not available for ResizeObserver");
720735
}

src/main.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,11 +416,17 @@ async function setDebugInfo() {
416416
// Extract Chrome/WebView version
417417
const chromeMatch = userAgent.match(/Chrome\/([0-9.]+)/);
418418
const webviewVersion = chromeMatch ? chromeMatch[1] : "Unknown";
419+
const webviewMajor = Number.parseInt(webviewVersion, 10);
420+
const minWebviewMajor = window.__ACODE_MIN_WEBVIEW_MAJOR__ || 84;
421+
const webviewStatus =
422+
Number.isFinite(webviewMajor) && webviewMajor < minWebviewMajor
423+
? ` (minimum supported: ${minWebviewMajor})`
424+
: "";
419425

420426
const info = [
421427
`App: v${version} (${versionCode})`,
422428
`Android: ${androidVersion}`,
423-
`WebView: ${webviewVersion}`,
429+
`WebView: ${webviewVersion}${webviewStatus}`,
424430
`Language: ${language}`,
425431
].join("\n");
426432

src/pages/fileBrowser/fileBrowser.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -830,7 +830,14 @@ function FileBrowserInclude(mode, info, doesOpenLast = true) {
830830
break;
831831

832832
case "copyuri":
833-
navigator.clipboard.writeText(url);
833+
if (typeof cordova !== "undefined" && cordova?.plugins?.clipboard) {
834+
cordova.plugins.clipboard.copy(url);
835+
} else if (navigator.clipboard?.writeText) {
836+
await navigator.clipboard.writeText(url);
837+
} else {
838+
alert(strings.error, "Clipboard is not available.");
839+
break;
840+
}
834841
alert(strings.success, strings["copied to clipboard"]);
835842
break;
836843

src/utils/polyfill.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,18 @@ export default function loadPolyFill() {
3636
};
3737
}
3838

39+
if (!window.queueMicrotask) {
40+
window.queueMicrotask = function (callback) {
41+
Promise.resolve()
42+
.then(callback)
43+
.catch((error) =>
44+
setTimeout(() => {
45+
throw error;
46+
}),
47+
);
48+
};
49+
}
50+
3951
if (!HTMLElement.prototype.getParent) {
4052
HTMLElement.prototype.getParent = function (queryString) {
4153
const $$ = [...document.querySelectorAll(queryString)];

www/index.html

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131
#splash {
3232
display: none;
3333
position: fixed;
34+
top: 0;
35+
right: 0;
36+
bottom: 0;
37+
left: 0;
3438
inset: 0;
3539
z-index: 999999;
3640

@@ -74,12 +78,60 @@
7478
<!-- Set theme color BEFORE UI renders -->
7579
<script>
7680
(function () {
81+
var MIN_WEBVIEW_MAJOR = 84;
7782
var color = localStorage.getItem("__primary_color");
7883
var bg = color || "#20202c";
7984

8085
document.documentElement.style.setProperty("--bg-color", bg);
8186
document.documentElement.style.backgroundColor = bg;
8287
document.body && (document.body.style.backgroundColor = bg);
88+
89+
function getWebViewMajor() {
90+
var match = navigator.userAgent.match(/(?:Chrome|CriOS)\/(\d+)/);
91+
return match ? Number(match[1]) : 0;
92+
}
93+
94+
function setStartupMessage(message) {
95+
var applyMessage = function () {
96+
document.body.setAttribute("data-small-msg", message);
97+
};
98+
99+
if (document.body) {
100+
applyMessage();
101+
} else {
102+
document.addEventListener("DOMContentLoaded", applyMessage);
103+
}
104+
}
105+
106+
window.__ACODE_WEBVIEW_MAJOR__ = getWebViewMajor();
107+
window.__ACODE_MIN_WEBVIEW_MAJOR__ = MIN_WEBVIEW_MAJOR;
108+
109+
if (
110+
window.__ACODE_WEBVIEW_MAJOR__ &&
111+
window.__ACODE_WEBVIEW_MAJOR__ < MIN_WEBVIEW_MAJOR
112+
) {
113+
setStartupMessage(
114+
"Your Android System WebView is old. Update Android System WebView or Chrome if Acode stays on this screen.",
115+
);
116+
}
117+
118+
window.addEventListener("error", function (event) {
119+
var message = event && event.message ? event.message : "Startup error";
120+
setStartupMessage(
121+
"Acode failed to start. Update Android System WebView or Chrome. " +
122+
message,
123+
);
124+
});
125+
126+
window.addEventListener("unhandledrejection", function (event) {
127+
var reason = event && event.reason;
128+
var message =
129+
reason && reason.message ? reason.message : "Startup promise failed";
130+
setStartupMessage(
131+
"Acode failed to start. Update Android System WebView or Chrome. " +
132+
message,
133+
);
134+
});
83135
})();
84136
</script>
85137

0 commit comments

Comments
 (0)