[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:
parent
5c5e1755d6
commit
8e9950a111
|
|
@ -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);
|
||||||
|
|
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue