[app] Scroll WebView (#776)

This commit is contained in:
vvb2060 2021-06-25 17:25:25 +08:00 committed by GitHub
parent aed23f65e8
commit 2d907cb911
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 65 additions and 4 deletions

View File

@ -162,8 +162,6 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.Listene
} else {
body = HTML_TEMPLATE.replace("@body@", text);
}
body = body.replace("src=\"/", "src=\"/Xposed-Modules-Repo/" + module.getName() + "/raw/main/")
.replace("href=\"/", "href=\"/Xposed-Modules-Repo/" + module.getName() + "/blob/main/");
view.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

View File

@ -0,0 +1,63 @@
package org.lsposed.manager.ui.widget;
import android.annotation.SuppressLint;
import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewParent;
import android.webkit.WebView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.view.ScrollingView;
import androidx.viewpager2.widget.ViewPager2;
public class ScrollWebView extends WebView {
public ScrollWebView(@NonNull Context context) {
super(context);
}
public ScrollWebView(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public ScrollWebView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public ScrollWebView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
@SuppressLint("ClickableViewAccessibility")
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
var viewParent = findViewParentIfNeeds(this);
if (viewParent != null) viewParent.requestDisallowInterceptTouchEvent(true);
}
return super.onTouchEvent(event);
}
@Override
protected void onOverScrolled(int scrollX, int scrollY, boolean clampedX, boolean clampedY) {
if (clampedX) {
var viewParent = findViewParentIfNeeds(this);
if (viewParent != null) viewParent.requestDisallowInterceptTouchEvent(false);
}
super.onOverScrolled(scrollX, scrollY, clampedX, clampedY);
}
private static ViewParent findViewParentIfNeeds(View v) {
var parent = v.getParent();
if (parent == null) return null;
if (parent instanceof ViewPager2 || parent instanceof ScrollingView) {
return parent;
} else if (parent instanceof View) {
return findViewParentIfNeeds((View) parent);
} else {
return parent;
}
}
}

View File

@ -35,7 +35,7 @@
app:borderTopDrawable="@null"
app:borderBottomVisibility="never">
<WebView
<org.lsposed.manager.ui.widget.ScrollWebView
android:id="@+id/readme"
android:padding="16dp"
android:layout_width="match_parent"

View File

@ -52,7 +52,7 @@
app:layout_constraintBottom_toBottomOf="parent"
tools:text="@tools:sample/lorem" />
<WebView
<org.lsposed.manager.ui.widget.ScrollWebView
android:id="@+id/description"
android:layout_width="0dp"
android:layout_height="wrap_content"