[core] Inject back into shell and use okhttp to load image (#1130)

* Use okhttp to intercept webview request

* Inject back into shell again

* Clean code

* Fix mime
This commit is contained in:
LoveSy 2021-09-18 15:09:41 +08:00 committed by GitHub
parent 5c5e1755d6
commit 8e9950a111
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 2 deletions

View File

@ -31,6 +31,7 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.webkit.WebResourceRequest; import android.webkit.WebResourceRequest;
import android.webkit.WebResourceResponse;
import android.webkit.WebSettings; import android.webkit.WebSettings;
import android.webkit.WebView; import android.webkit.WebView;
import android.webkit.WebViewClient; import android.webkit.WebViewClient;
@ -72,6 +73,9 @@ import java.util.List;
import java.util.ListIterator; import java.util.ListIterator;
import java.util.stream.IntStream; import java.util.stream.IntStream;
import okhttp3.Headers;
import okhttp3.Request;
import okhttp3.Response;
import rikka.core.util.ResourceUtils; import rikka.core.util.ResourceUtils;
import rikka.recyclerview.RecyclerViewKt; import rikka.recyclerview.RecyclerViewKt;
import rikka.widget.borderview.BorderNestedScrollView; import rikka.widget.borderview.BorderNestedScrollView;
@ -161,6 +165,34 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.Listene
NavUtil.startURL(requireActivity(), request.getUrl()); NavUtil.startURL(requireActivity(), request.getUrl());
return true; return true;
} }
@Nullable
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) {
if (!request.getUrl().getScheme().startsWith("http")) return null;
var client = App.getOkHttpClient();
var call = client.newCall(
new Request.Builder()
.url(request.getUrl().toString())
.method(request.getMethod(), null)
.headers(Headers.of(request.getRequestHeaders()))
.build());
try {
Response reply = call.execute();
var contentTypes = reply.header("content-type", "image/*;charset=utf-8").split(";\\s*");
var mimeType = contentTypes.length > 0 ? contentTypes[0] : "image/*";
var charset = contentTypes.length > 1 ? contentTypes[1].split("=\\s*")[1] : "utf-8";
Log.e(App.TAG, "type " + mimeType);
Log.e(App.TAG, "charset " + charset);
return new WebResourceResponse(
mimeType,
charset,
reply.body().byteStream()
);
} catch (Throwable e) {
return null;
}
}
}); });
view.loadDataWithBaseURL("https://github.com", body, "text/html", view.loadDataWithBaseURL("https://github.com", body, "text/html",
StandardCharsets.UTF_8.name(), null); StandardCharsets.UTF_8.name(), null);

View File

@ -107,8 +107,8 @@ android {
"DEFAULT_MANAGER_PACKAGE_NAME", "DEFAULT_MANAGER_PACKAGE_NAME",
""""$defaultManagerPackageName"""" """"$defaultManagerPackageName""""
) )
buildConfigField("String", "MANAGER_INJECTED_PKG_NAME", """"com.android.settings"""") buildConfigField("String", "MANAGER_INJECTED_PKG_NAME", """"com.android.shell"""")
buildConfigField("int", "MANAGER_INJECTED_UID", """1000""") buildConfigField("int", "MANAGER_INJECTED_UID", """2000""")
} }
lint { lint {