Skip to content

Commit 97dad91

Browse files
authored
Merge pull request #1 from DerGoogler/1.4.1
1.4.1
2 parents 594bdb1 + 5202cc3 commit 97dad91

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

73 files changed

+15379
-14053
lines changed

.github/workflows/webpack.yml

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: NodeJS with Webpack
1+
name: Bun with Webpack
22

33
on:
44
push:
@@ -16,17 +16,21 @@ jobs:
1616

1717
strategy:
1818
matrix:
19-
node-version: [16.x]
19+
bun-version: ["0.1.2"]
2020

2121
steps:
2222
- uses: actions/checkout@v2
2323

24-
- name: Use Node.js ${{ matrix.node-version }}
25-
uses: actions/setup-node@v1
24+
- uses: xhyrom/setup-bun@v0.1.0
2625
with:
27-
node-version: ${{ matrix.node-version }}
26+
bun-version: ${{ matrix.bun-version }}
2827

29-
- name: Build
28+
- name: Build Development
3029
run: |
31-
npm install
32-
make prod
30+
bun install --force
31+
bun run dev
32+
33+
- name: Build Production
34+
run: |
35+
bun install --force
36+
bun run prod

.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
package.json
2+
package-lock.json
3+
node_modules/
4+
__pycache__/

.vscode/settings.json

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,22 @@
11
{
2-
"liveServer.settings.root": "./Android/app/src/main/assets"
3-
}
2+
"liveServer.settings.root": "./Android/app/src/main/assets",
3+
"files.exclude": {
4+
"**/.gradle": true,
5+
"**/.idea": true,
6+
"Android/app/.cxx": true,
7+
"Android/app/build": true,
8+
"Android/app/proguard-rules.pro": true,
9+
"Android/app/release": true,
10+
"Android/build": true,
11+
"Android/gradle": true,
12+
"Android/gradlew": true,
13+
"Android/gradlew.bat": true,
14+
"Android/local.properties": true,
15+
"Website/node_modules": true,
16+
"Website/package-lock.json": true
17+
},
18+
"editor.defaultFormatter": "esbenp.prettier-vscode",
19+
"[python]": {
20+
"editor.defaultFormatter": "ms-python.python"
21+
}
22+
}

Android/app/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ android {
88
applicationId 'com.dergoogler.mmrl'
99
minSdk 26
1010
targetSdk 32
11-
versionName "1.4.0@alpha-3"
12-
versionCode "140".toInteger()
11+
versionName "1.4.1"
12+
versionCode "141".toInteger()
1313
}
1414
buildTypes {
1515
release {
@@ -43,7 +43,7 @@ repositories {
4343

4444
dependencies {
4545
implementation "androidx.browser:browser:1.4.0"
46-
implementation "com.github.topjohnwu.libsu:core:5.0.1"
46+
implementation "com.github.topjohnwu.libsu:core:5.0.2"
4747
implementation "com.github.topjohnwu.libsu:io:5.0.1"
4848
implementation "androidx.appcompat:appcompat:1.4.2"
4949
// implementation 'com.google.android.material:material:1.6.0'

Android/app/src/main/AndroidManifest.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@
1010
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
1111
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
1212

13+
<queries>
14+
<package android:name="com.topjohnwu.magisk" />
15+
<package android:name="io.github.huskydg.magisk" />
16+
</queries>
17+
1318
<application
1419
android:allowBackup="true"
1520
android:hardwareAccelerated="true"
Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
package com.dergoogler.component;
2+
3+
import androidx.annotation.Nullable;
4+
5+
import android.content.Intent;
6+
import android.graphics.Bitmap;
7+
import android.net.Uri;
8+
import android.os.Message;
9+
import android.view.View;
10+
import android.webkit.ConsoleMessage;
11+
import android.webkit.GeolocationPermissions;
12+
import android.webkit.JsPromptResult;
13+
import android.webkit.JsResult;
14+
import android.webkit.PermissionRequest;
15+
import android.webkit.ValueCallback;
16+
import android.webkit.WebChromeClient;
17+
18+
public class ModuleChromeClient extends WebChromeClient {
19+
public ModuleChromeClient() {
20+
super();
21+
}
22+
23+
public void onProgressChanged(ModuleView view, int newProgress) {
24+
super.onProgressChanged(view, newProgress);
25+
}
26+
27+
public void onReceivedTitle(ModuleView view, String title) {
28+
super.onReceivedTitle(view, title);
29+
}
30+
31+
public void onReceivedIcon(ModuleView view, Bitmap icon) {
32+
super.onReceivedIcon(view, icon);
33+
}
34+
35+
public void onReceivedTouchIconUrl(ModuleView view, String url, boolean precomposed) {
36+
super.onReceivedTouchIconUrl(view, url, precomposed);
37+
}
38+
39+
public void onShowCustomView(View view, android.webkit.WebChromeClient.CustomViewCallback callback) {
40+
super.onShowCustomView(view, callback);
41+
}
42+
43+
public void onHideCustomView() {
44+
super.onHideCustomView();
45+
}
46+
47+
public boolean onCreateWindow(ModuleView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
48+
return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg);
49+
}
50+
51+
public void onRequestFocus(ModuleView view) {
52+
super.onRequestFocus(view);
53+
}
54+
55+
public void onCloseWindow(ModuleView window) {
56+
super.onCloseWindow(window);
57+
}
58+
59+
public boolean onJsAlert(ModuleView view, String url, String message, JsResult result) {
60+
return super.onJsAlert(view, url, message, result);
61+
}
62+
63+
public boolean onJsConfirm(ModuleView view, String url, String message, JsResult result) {
64+
return super.onJsConfirm(view, url, message, result);
65+
}
66+
67+
public boolean onJsPrompt(ModuleView view, String url, String message, String defaultValue, JsPromptResult result) {
68+
return super.onJsPrompt(view, url, message, defaultValue, result);
69+
}
70+
71+
public boolean onJsBeforeUnload(ModuleView view, String url, String message, JsResult result) {
72+
return super.onJsBeforeUnload(view, url, message, result);
73+
}
74+
75+
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
76+
super.onGeolocationPermissionsShowPrompt(origin, callback);
77+
}
78+
79+
public void onGeolocationPermissionsHidePrompt() {
80+
super.onGeolocationPermissionsHidePrompt();
81+
}
82+
83+
public void onPermissionRequest(PermissionRequest request) {
84+
super.onPermissionRequest(request);
85+
}
86+
87+
public void onPermissionRequestCanceled(PermissionRequest request) {
88+
super.onPermissionRequestCanceled(request);
89+
}
90+
91+
public boolean onConsoleMessage(ConsoleMessage consoleMessage) {
92+
return super.onConsoleMessage(consoleMessage);
93+
}
94+
95+
@Nullable
96+
public Bitmap getDefaultVideoPoster() {
97+
return super.getDefaultVideoPoster();
98+
}
99+
100+
@Nullable
101+
public View getVideoLoadingProgressView() {
102+
return super.getVideoLoadingProgressView();
103+
}
104+
105+
public void getVisitedHistory(ValueCallback<String[]> callback) {
106+
super.getVisitedHistory(callback);
107+
}
108+
109+
public boolean onShowFileChooser(ModuleView webView, ValueCallback<Uri[]> filePathCallback, android.webkit.WebChromeClient.FileChooserParams fileChooserParams) {
110+
return super.onShowFileChooser(webView, filePathCallback, fileChooserParams);
111+
}
112+
113+
public abstract static class FileChooserParams {
114+
public static final int MODE_OPEN = 0;
115+
public static final int MODE_OPEN_MULTIPLE = 1;
116+
public static final int MODE_SAVE = 3;
117+
118+
public FileChooserParams() {
119+
super();
120+
}
121+
122+
public abstract int getMode();
123+
124+
public abstract String[] getAcceptTypes();
125+
126+
public abstract boolean isCaptureEnabled();
127+
128+
@Nullable
129+
public abstract CharSequence getTitle();
130+
131+
@Nullable
132+
public abstract String getFilenameHint();
133+
134+
public abstract Intent createIntent();
135+
}
136+
137+
public interface CustomViewCallback {
138+
void onCustomViewHidden();
139+
}
140+
}

Android/app/src/main/java/com/dergoogler/component/ModuleView.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,10 @@
1111
import android.util.Log;
1212
import android.view.View;
1313
import android.webkit.ValueCallback;
14+
import android.webkit.WebChromeClient;
1415
import android.webkit.WebSettings;
1516
import android.webkit.WebView;
17+
import android.webkit.WebViewClient;
1618
import android.widget.Toast;
1719

1820
import java.io.IOException;
@@ -64,6 +66,14 @@ public void setJavaScriptEnabled(boolean enabled) {
6466
this.webSettings.setJavaScriptEnabled(enabled);
6567
}
6668

69+
public void setModuleViewClient(final ModuleViewClient client) {
70+
super.setWebViewClient(client);
71+
}
72+
73+
public void setModuleChromeClient(final WebChromeClient client) {
74+
super.setWebChromeClient(client);
75+
}
76+
6777
public void setUserAgentString(String userAgent) {
6878
this.webSettings.setUserAgentString(userAgent);
6979
}

Android/app/src/main/java/com/dergoogler/core/FileSystemNative.java

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,20 @@
99

1010
import com.topjohnwu.superuser.io.SuFile;
1111
import com.topjohnwu.superuser.io.SuFileInputStream;
12+
import com.topjohnwu.superuser.io.SuFileOutputStream;
1213

14+
import java.io.BufferedInputStream;
1315
import java.io.BufferedReader;
16+
import java.io.DataInputStream;
17+
import java.io.File;
18+
import java.io.FileOutputStream;
1419
import java.io.IOException;
20+
import java.io.InputStream;
1521
import java.io.InputStreamReader;
22+
import java.io.OutputStream;
23+
import java.net.URL;
24+
import java.util.zip.ZipEntry;
25+
import java.util.zip.ZipInputStream;
1626

1727
public class FileSystemNative {
1828
private final Context ctx;
@@ -71,6 +81,57 @@ public String getExternalStorageDir() {
7181
return Environment.getExternalStorageDirectory().getAbsolutePath();
7282
}
7383

84+
@JavascriptInterface
85+
public void download(String output, String url) {
86+
try {
87+
URL u = new URL(url);
88+
InputStream is = u.openStream();
89+
DataInputStream dis = new DataInputStream(is);
90+
byte[] buffer = new byte[1024];
91+
int length;
92+
SuFile file = new SuFile(getDataDir() + "/Download");
93+
if (!file.exists()) {
94+
file.mkdirs();
95+
}
96+
OutputStream fos = SuFileOutputStream.open(new SuFile(getDataDir() + "/Download/" + output));
97+
while ((length = dis.read(buffer)) > 0) {
98+
fos.write(buffer, 0, length);
99+
}
100+
} catch (IOException | SecurityException e) {
101+
e.printStackTrace();
102+
}
103+
}
104+
105+
public void unpackZip(String path, String zipname) {
106+
InputStream is;
107+
ZipInputStream zis;
108+
try {
109+
String filename;
110+
is = SuFileInputStream.open(path + "/" + zipname);
111+
zis = new ZipInputStream(new BufferedInputStream(is));
112+
ZipEntry ze;
113+
byte[] buffer = new byte[1024];
114+
int count;
115+
while ((ze = zis.getNextEntry()) != null) {
116+
filename = ze.getName();
117+
if (ze.isDirectory()) {
118+
File fmd = new SuFile(path + filename);
119+
fmd.mkdirs();
120+
continue;
121+
}
122+
OutputStream fout = SuFileOutputStream.open(path + filename);
123+
while ((count = zis.read(buffer)) != -1) {
124+
fout.write(buffer, 0, count);
125+
}
126+
fout.close();
127+
zis.closeEntry();
128+
}
129+
zis.close();
130+
} catch (IOException e) {
131+
e.printStackTrace();
132+
}
133+
}
134+
74135
@JavascriptInterface
75136
public String getPackageDataDir() {
76137
return this.ctx.getExternalFilesDir(null).getAbsolutePath();

Android/app/src/main/java/com/dergoogler/mmrl/MainActivity.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,24 @@
11
package com.dergoogler.mmrl;
22

33
import android.annotation.SuppressLint;
4+
import android.app.DownloadManager;
5+
import android.content.Intent;
6+
import android.net.Uri;
7+
import android.os.Build;
48
import android.os.Bundle;
9+
import android.os.Environment;
10+
import android.webkit.CookieManager;
11+
import android.webkit.DownloadListener;
12+
import android.webkit.PermissionRequest;
13+
import android.webkit.URLUtil;
14+
import android.webkit.ValueCallback;
15+
import android.webkit.WebChromeClient;
16+
import android.webkit.WebView;
17+
import android.widget.Toast;
518

619
import androidx.appcompat.app.AppCompatActivity;
720

21+
import com.dergoogler.component.ModuleChromeClient;
822
import com.dergoogler.component.ModuleView;
923
import com.dergoogler.core.BuildConfigNative;
1024
import com.dergoogler.core.BuildNative;
@@ -15,6 +29,7 @@
1529

1630
public class MainActivity extends AppCompatActivity {
1731
private ModuleView view;
32+
private ValueCallback<Uri[]> fileChooserCallback;
1833

1934
@Override
2035
@SuppressLint("SetJavaScriptEnabled")

0 commit comments

Comments
 (0)