From 6784ee39c5e89e779fd5486030cb6171c2241213 Mon Sep 17 00:00:00 2001 From: Hoa Nguyen Van Date: Wed, 3 Jun 2020 23:57:17 +0700 Subject: [PATCH] - apply vsboot to all frames - add some annotations to fix lints --- .../java/com/termux/app/TermuxInstaller.java | 1 + .../java/vn/vhn/vhscode/CodeServerService.kt | 42 ++++++++++-- .../main/java/vn/vhn/vhscode/MainActivity.kt | 3 +- .../java/vn/vhn/vhscode/VSCodeActivity.kt | 8 ++- .../webclient/VSCodeWebChromeClient.kt | 1 + .../webclient/VSCodeWebClient.kt | 34 +++++++--- app/src/main/res/raw/vsboot.js | 68 +++++++++---------- 7 files changed, 103 insertions(+), 54 deletions(-) diff --git a/app/src/main/java/com/termux/app/TermuxInstaller.java b/app/src/main/java/com/termux/app/TermuxInstaller.java index 6c14e051..b192b8d6 100644 --- a/app/src/main/java/com/termux/app/TermuxInstaller.java +++ b/app/src/main/java/com/termux/app/TermuxInstaller.java @@ -44,6 +44,7 @@ *

* (5.2) For every other zip entry, extract it into $STAGING_PREFIX and set execute permissions if necessary. */ +@SuppressWarnings("deprecation") public final class TermuxInstaller { static String str_fr = "/data/data/com.termux"; static String str_to = "/data/data/vn.vhn.vsc"; diff --git a/app/src/main/java/vn/vhn/vhscode/CodeServerService.kt b/app/src/main/java/vn/vhn/vhscode/CodeServerService.kt index 0dda2cec..01bb05b5 100644 --- a/app/src/main/java/vn/vhn/vhscode/CodeServerService.kt +++ b/app/src/main/java/vn/vhn/vhscode/CodeServerService.kt @@ -86,7 +86,7 @@ class CodeServerService : Service() { } extractTarGz( csSourceFile, - csSourceFile.parentFile, + csSourceFile.parentFile!!, progressChannel ) csSourceFile.delete() @@ -166,9 +166,9 @@ class CodeServerService : Service() { copyRawResource(ctx, R.raw.vsboot, configFile.absolutePath) } val stream = FileInputStream(configFile) - val data = stream.readBytes() + var windowScriptBytes = stream.readBytes() stream.close() - return """ + val windowScript = """ (function(){ let click = false; let click2 = false; @@ -187,7 +187,35 @@ class CodeServerService : Service() { } }); })(); - """.trimIndent() + String(data) + """.trimIndent() + String(windowScriptBytes) + return """ + (function(){ + var single_window_apply = function(window){ + if(window.__vscode_boot_included__) return; + window.__vscode_boot_included__ = true; + var document = window.document; + var local_apply = function(){ + if(!document.body) { + setTimeout(local_apply, 100); + return; + } + $windowScript + }; + local_apply(); + } + single_window_apply(window); + var vscode_boot_frames_inner = function(window){ + for(var i=0;i="a" && this.key<="z") this._vscodeCode = "Key" + this.key.toUpperCase(); - } else this._vscodeCode = orig; - } - Object.defineProperty(KeyboardEvent.prototype, 'code', { - get(){ - prepareCustomProps.apply(this); - return this._vscodeCode; - } - }); -})() \ No newline at end of file +if(!window.vscodeOrigKeyboardEventDescriptorCode) window.vscodeOrigKeyboardEventDescriptorCode = Object.getOwnPropertyDescriptor(window.KeyboardEvent.prototype, 'code'); +var codeGetter = window.vscodeOrigKeyboardEventDescriptorCode.get; +// if(!window.vscodeOrigKeyboardEventDescriptorShift) window.vscodeOrigKeyboardEventDescriptorShift = Object.getOwnPropertyDescriptor(KeyboardEvent.prototype, 'shiftKey'); +// var shiftGetter = window.vscodeOrigKeyboardEventDescriptorShift.get; +var customMapper = { + 27: 'Escape' +}; +var customKeyRemapper = { + 'Backspace': 'Backspace', + 'Control': 'ControlLeft', + 'Alt': 'AltLeft', +}; +var prepareCustomProps = function() { + if(this._vscode_modded) return; + this._vscode_modded = true; + var orig = codeGetter.apply(this); + if (this.key == 'Alt') { + this._vscodeCode = ""; + } else if (this.key === 'Shift') { + this._vscodeCode = "ShiftLeft"; + } else if (this.which in customMapper) { + this._vscodeCode = customMapper[this.which]; + } else if (orig === "" && typeof this.key === "string" && this.key.length) { + if (this.key in customKeyRemapper) this._vscodeCode = customKeyRemapper[this.key]; + else if(this.key>="a" && this.key<="z") this._vscodeCode = "Key" + this.key.toUpperCase(); + } else this._vscodeCode = orig; +} +Object.defineProperty(window.KeyboardEvent.prototype, 'code', { + get(){ + prepareCustomProps.apply(this); + return this._vscodeCode; + } +});