正在查看: St.John's v1.0.9 应用的 FolioWebView.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: St.John's v1.0.9 应用的 FolioWebView.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package com.folioreader.ui.view;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.ActionMode;
import android.view.ContextThemeWrapper;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.ConsoleMessage;
import android.webkit.JavascriptInterface;
import android.webkit.ValueCallback;
import android.webkit.WebView;
import android.widget.ImageView;
import android.widget.PopupWindow;
import android.widget.TextView;
import android.widget.Toast;
import androidx.core.app.NotificationCompat;
import androidx.core.content.ContextCompat;
import androidx.core.view.GestureDetectorCompat;
import com.folioreader.Config;
import com.folioreader.Constants;
import com.folioreader.R;
import com.folioreader.model.DisplayUnit;
import com.folioreader.model.HighLight;
import com.folioreader.model.HighlightImpl;
import com.folioreader.model.sqlite.HighLightTable;
import com.folioreader.ui.activity.FolioActivity;
import com.folioreader.ui.activity.FolioActivityCallback;
import com.folioreader.ui.fragment.DictionaryFragment;
import com.folioreader.ui.fragment.FolioPageFragment;
import com.folioreader.util.AppUtil;
import com.folioreader.util.HighlightUtil;
import com.folioreader.util.UiUtil;
import dalvik.system.PathClassLoader;
import java.lang.ref.WeakReference;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import kotlin.Metadata;
import kotlin.TypeCastException;
import kotlin.jvm.JvmStatic;
import kotlin.jvm.internal.DefaultConstructorMarker;
import kotlin.jvm.internal.Intrinsics;
import kotlin.text.StringsKt;
import org.json.JSONObject;
import org.readium.r2.shared.Link;
import org.springframework.util.ReflectionUtils;
@Metadata(bv = {1, 0, 3}, d1 = {"\u0000À\u0001\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\b\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0010\u0007\n\u0000\n\u0002\u0010\u000b\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0005\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0002\n\u0002\b\u0007\n\u0002\u0010\u000e\n\u0002\b\u000f\n\u0002\u0018\u0002\n\u0002\b\u001f\n\u0002\u0018\u0002\n\u0002\b\u000b\u0018\u0000 {2\u00020\u0001:\u000b{|}~\u007f\u0080\u0001\u0081\u0001\u0082\u0001B\u000f\b\u0016\u0012\u0006\u0010\u0002\u001a\u00020\u0003¢\u0006\u0002\u0010\u0004B\u0017\b\u0016\u0012\u0006\u0010\u0002\u001a\u00020\u0003\u0012\u0006\u0010\u0005\u001a\u00020\u0006¢\u0006\u0002\u0010\u0007B\u001f\b\u0016\u0012\u0006\u0010\u0002\u001a\u00020\u0003\u0012\u0006\u0010\u0005\u001a\u00020\u0006\u0012\u0006\u0010\b\u001a\u00020\t¢\u0006\u0002\u0010\nJ\b\u0010?\u001a\u00020@H\u0002J\u0010\u0010A\u001a\u00020\u00132\u0006\u0010B\u001a\u00020\u0017H\u0002J\u0010\u0010C\u001a\u00020@2\u0006\u0010D\u001a\u00020/H\u0002J\u0010\u0010E\u001a\u00020\u00132\u0006\u0010B\u001a\u00020\u0017H\u0002J\u0012\u0010F\u001a\u00020@2\b\u0010G\u001a\u0004\u0018\u00010HH\u0007J\b\u0010I\u001a\u00020@H\u0016J\b\u0010J\u001a\u00020\u0013H\u0007J\u0010\u0010K\u001a\u00020\t2\u0006\u0010L\u001a\u00020HH\u0007J\b\u0010M\u001a\u00020HH\u0007J\u000e\u0010N\u001a\u00020\t2\u0006\u0010O\u001a\u00020\tJ\u000e\u0010P\u001a\u00020\t2\u0006\u0010O\u001a\u00020\tJ\u0010\u0010Q\u001a\u00020\t2\u0006\u0010L\u001a\u00020HH\u0007J\u0010\u0010R\u001a\u00020H2\u0006\u0010L\u001a\u00020HH\u0007J\b\u0010S\u001a\u00020@H\u0002J\u0006\u0010T\u001a\u00020@J\b\u0010U\u001a\u00020\u0013H\u0007J\u0018\u0010V\u001a\u00020@2\u0006\u0010W\u001a\u00020X2\u0006\u0010Y\u001a\u00020\u0013H\u0002J0\u0010Z\u001a\u00020@2\u0006\u0010[\u001a\u00020\u00132\u0006\u0010\\\u001a\u00020\t2\u0006\u0010]\u001a\u00020\t2\u0006\u0010^\u001a\u00020\t2\u0006\u0010_\u001a\u00020\tH\u0014J(\u0010`\u001a\u00020@2\u0006\u0010\\\u001a\u00020\t2\u0006\u0010]\u001a\u00020\t2\u0006\u0010a\u001a\u00020\t2\u0006\u0010b\u001a\u00020\tH\u0014J\u001a\u0010c\u001a\u00020@2\u0006\u0010G\u001a\u00020\t2\b\u0010d\u001a\u0004\u0018\u00010HH\u0007J\u0012\u0010e\u001a\u00020\u00132\b\u0010B\u001a\u0004\u0018\u00010\u0017H\u0016J\u0018\u0010f\u001a\u00020@2\u0006\u0010g\u001a\u00020\t2\u0006\u0010h\u001a\u00020\tH\u0016J\u000e\u0010i\u001a\u00020@2\u0006\u0010\u0018\u001a\u00020\u0019J\u000e\u0010j\u001a\u00020@2\u0006\u0010\u001d\u001a\u00020\tJ\u000e\u0010k\u001a\u00020@2\u0006\u0010,\u001a\u00020-J\u000e\u0010l\u001a\u00020@2\u0006\u0010m\u001a\u00020%J\u000e\u0010n\u001a\u00020@2\u0006\u0010m\u001a\u00020'J(\u0010o\u001a\u00020@2\u0006\u0010p\u001a\u00020\t2\u0006\u0010q\u001a\u00020\t2\u0006\u0010r\u001a\u00020\t2\u0006\u0010s\u001a\u00020\tH\u0007J\u0012\u0010t\u001a\u00020@2\b\u0010d\u001a\u0004\u0018\u00010HH\u0002J\b\u0010u\u001a\u00020@H\u0002J\u0010\u0010v\u001a\u00020\f2\u0006\u0010w\u001a\u00020xH\u0016J\u0018\u0010v\u001a\u00020\f2\u0006\u0010w\u001a\u00020x2\u0006\u0010y\u001a\u00020\tH\u0017J\b\u0010z\u001a\u00020@H\u0007R\u0010\u0010\u000b\u001a\u0004\u0018\u00010\fX\u0082\u000e¢\u0006\u0002\n\u0000R\u0011\u0010\r\u001a\u00020\t8F¢\u0006\u0006\u001a\u0004\b\u000e\u0010\u000fR\u000e\u0010\u0010\u001a\u00020\u0011X\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u0012\u001a\u00020\u0013X\u0082\u000e¢\u0006\u0002\n\u0000R\u0010\u0010\u0014\u001a\u0004\u0018\u00010\u0015X\u0082\u000e¢\u0006\u0002\n\u0000R\u0010\u0010\u0016\u001a\u0004\u0018\u00010\u0017X\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u0018\u001a\u00020\u0019X\u0082.¢\u0006\u0002\n\u0000R\u000e\u0010\u001a\u001a\u00020\u001bX\u0082.¢\u0006\u0002\n\u0000R\u000e\u0010\u001c\u001a\u00020\tX\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u001d\u001a\u00020\tX\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010\u001e\u001a\u00020\tX\u0082\u000e¢\u0006\u0002\n\u0000R\u0010\u0010\u001f\u001a\u0004\u0018\u00010 X\u0082\u000e¢\u0006\u0002\n\u0000R\u0010\u0010!\u001a\u0004\u0018\u00010\"X\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010#\u001a\u00020\tX\u0082\u000e¢\u0006\u0002\n\u0000R\u0010\u0010$\u001a\u0004\u0018\u00010%X\u0082\u000e¢\u0006\u0002\n\u0000R\u0010\u0010&\u001a\u0004\u0018\u00010'X\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010(\u001a\u00020\tX\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010)\u001a\u00020\tX\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010*\u001a\u00020\tX\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010+\u001a\u00020\u0011X\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u0010,\u001a\u00020-X\u0082.¢\u0006\u0002\n\u0000R\u000e\u0010.\u001a\u00020/X\u0082\u0004¢\u0006\u0002\n\u0000R\u000e\u00100\u001a\u000201X\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u00102\u001a\u00020/X\u0082\u000e¢\u0006\u0002\n\u0000R\u0014\u00103\u001a\b\u0018\u000104R\u00020\u0000X\u0082\u000e¢\u0006\u0002\n\u0000R\u0014\u00105\u001a\b\u0018\u000106R\u00020\u0000X\u0082\u000e¢\u0006\u0002\n\u0000R\u000e\u00107\u001a\u000208X\u0082.¢\u0006\u0002\n\u0000R\u000e\u00109\u001a\u00020:X\u0082.¢\u0006\u0002\n\u0000R\u0011\u0010;\u001a\u00020\t8F¢\u0006\u0006\u001a\u0004\b<\u0010\u000fR\u000e\u0010=\u001a\u00020>X\u0082.¢\u0006\u0002\n\u0000¨\u0006\u0083\u0001"}, d2 = {"Lcom/folioreader/ui/view/FolioWebView;", "Landroid/webkit/WebView;", "context", "Landroid/content/Context;", "(Landroid/content/Context;)V", "attrs", "Landroid/util/AttributeSet;", "(Landroid/content/Context;Landroid/util/AttributeSet;)V", "defStyleAttr", "", "(Landroid/content/Context;Landroid/util/AttributeSet;I)V", "actionMode", "Landroid/view/ActionMode;", "contentHeightVal", "getContentHeightVal", "()I", "density", "", "destroyed", "", "displayMetrics", "Landroid/util/DisplayMetrics;", "eventActionDown", "Landroid/view/MotionEvent;", "folioActivityCallback", "Lcom/folioreader/ui/activity/FolioActivityCallback;", "gestureDetector", "Landroidx/core/view/GestureDetectorCompat;", "handleHeight", "horizontalPageCount", "isScrollingCheckDuration", "isScrollingRunnable", "Ljava/lang/Runnable;", "lastScrollType", "Lcom/folioreader/ui/view/FolioWebView$LastScrollType;", "lastTouchAction", "mScrollListener", "Lcom/folioreader/ui/view/FolioWebView$ScrollListener;", "mSeekBarListener", "Lcom/folioreader/ui/view/FolioWebView$SeekBarListener;", "oldScrollX", "oldScrollY", "pageWidthCssDp", "pageWidthCssPixels", "parentFragment", "Lcom/folioreader/ui/fragment/FolioPageFragment;", "popupRect", "Landroid/graphics/Rect;", "popupWindow", "Landroid/widget/PopupWindow;", "selectionRect", "textSelectionCb", "Lcom/folioreader/ui/view/FolioWebView$TextSelectionCb;", "textSelectionCb2", "Lcom/folioreader/ui/view/FolioWebView$TextSelectionCb2;", "uiHandler", "Landroid/os/Handler;", "viewTextSelection", "Landroid/view/View;", "webViewHeight", "getWebViewHeight", "webViewPager", "Lcom/folioreader/ui/view/WebViewPager;", "applyThemeColorToHandles", "", "computeHorizontalScroll", NotificationCompat.CATEGORY_EVENT, "computeTextSelectionRect", "currentSelectionRect", "computeVerticalScroll", "deleteThisHighlight", Constants.CHAPTER_ID, "", "destroy", "dismissPopupWindow", "getBottomDistraction", "unitString", "getDirection", "getScrollXDpForPage", "page", "getScrollXPixelsForPage", "getTopDistraction", "getViewportRect", "init", "initViewTextSelection", "isPopupShowing", "onHighlightColorItemsClicked", "style", "Lcom/folioreader/model/HighlightImpl$HighlightStyle;", "isAlreadyCreated", "onLayout", "changed", "l", "t", "r", "b", "onScrollChanged", "oldl", "oldt", "onTextSelectionItemClicked", "selectedText", "onTouchEvent", "scrollTo", "x", "y", "setFolioActivityCallback", "setHorizontalPageCount", "setParentFragment", "setScrollListener", "listener", "setSeekBarListener", "setSelectionRect", "left", "top", "right", "bottom", "showDictDialog", "showTextSelectionPopup", "startActionMode", "callback", "Landroid/view/ActionMode$Callback;", Constants.TYPE, "toggleSystemUI", "Companion", "HorizontalGestureListener", "LastScrollType", "ScrollListener", "SeekBarListener", "TextSelectionCb", "TextSelectionCb2", "VerticalGestureListener", "folioreader_release"}, k = 1, mv = {1, 1, 13})
public final class FolioWebView extends WebView {
public static final Companion INSTANCE = new Companion(null);
private static final int IS_SCROLLING_CHECK_MAX_DURATION = 10000;
private static final int IS_SCROLLING_CHECK_TIMER = 100;
private static final String LOG_TAG;
private HashMap _$_findViewCache;
private ActionMode actionMode;
private float density;
private boolean destroyed;
private DisplayMetrics displayMetrics;
private MotionEvent eventActionDown;
private FolioActivityCallback folioActivityCallback;
private GestureDetectorCompat gestureDetector;
private int handleHeight;
private int horizontalPageCount;
private int isScrollingCheckDuration;
private Runnable isScrollingRunnable;
private LastScrollType lastScrollType;
private int lastTouchAction;
private ScrollListener mScrollListener;
private SeekBarListener mSeekBarListener;
private int oldScrollX;
private int oldScrollY;
private int pageWidthCssDp;
private float pageWidthCssPixels;
private FolioPageFragment parentFragment;
private final Rect popupRect;
private PopupWindow popupWindow;
private Rect selectionRect;
private TextSelectionCb textSelectionCb;
private TextSelectionCb2 textSelectionCb2;
private Handler uiHandler;
private View viewTextSelection;
private WebViewPager webViewPager;
@Metadata(bv = {1, 0, 3}, d1 = {"\u0000\f\n\u0002\u0018\u0002\n\u0002\u0010\u0010\n\u0002\b\u0004\b\u0082\u0001\u0018\u00002\b\u0012\u0004\u0012\u00020\u00000\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002j\u0002\b\u0003j\u0002\b\u0004¨\u0006\u0005"}, d2 = {"Lcom/folioreader/ui/view/FolioWebView$LastScrollType;", "", "(Ljava/lang/String;I)V", "USER", "PROGRAMMATIC", "folioreader_release"}, k = 1, mv = {1, 1, 13})
private enum LastScrollType {
USER,
PROGRAMMATIC
}
@Metadata(bv = {1, 0, 3}, d1 = {"\u0000\u0016\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0010\u0002\n\u0000\n\u0002\u0010\b\n\u0000\bf\u0018\u00002\u00020\u0001J\u0010\u0010\u0002\u001a\u00020\u00032\u0006\u0010\u0004\u001a\u00020\u0005H&¨\u0006\u0006"}, d2 = {"Lcom/folioreader/ui/view/FolioWebView$ScrollListener;", "", "onScrollChange", "", "percent", "", "folioreader_release"}, k = 1, mv = {1, 1, 13})
public interface ScrollListener {
void onScrollChange(int percent);
}
@Metadata(bv = {1, 0, 3}, d1 = {"\u0000\u0010\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0000\n\u0002\u0010\u0002\n\u0000\bf\u0018\u00002\u00020\u0001J\b\u0010\u0002\u001a\u00020\u0003H&¨\u0006\u0004"}, d2 = {"Lcom/folioreader/ui/view/FolioWebView$SeekBarListener;", "", "fadeInSeekBarIfInvisible", "", "folioreader_release"}, k = 1, mv = {1, 1, 13})
public interface SeekBarListener {
void fadeInSeekBarIfInvisible();
}
@JvmStatic
public static final boolean onWebViewConsoleMessage(ConsoleMessage consoleMessage, String str, String str2) {
return INSTANCE.onWebViewConsoleMessage(consoleMessage, str, str2);
}
public void _$_clearFindViewByIdCache() {
HashMap hashMap = this._$_findViewCache;
if (hashMap != null) {
hashMap.clear();
}
}
public View _$_findCachedViewById(int i) {
if (this._$_findViewCache == null) {
this._$_findViewCache = new HashMap();
}
View view = (View) this._$_findViewCache.get(Integer.valueOf(i));
if (view != null) {
return view;
}
View findViewById = findViewById(i);
this._$_findViewCache.put(Integer.valueOf(i), findViewById);
return findViewById;
}
public static final FolioActivityCallback access$getFolioActivityCallback$p(FolioWebView folioWebView) {
FolioActivityCallback folioActivityCallback = folioWebView.folioActivityCallback;
if (folioActivityCallback == null) {
Intrinsics.throwUninitializedPropertyAccessException("folioActivityCallback");
}
return folioActivityCallback;
}
public static final FolioPageFragment access$getParentFragment$p(FolioWebView folioWebView) {
FolioPageFragment folioPageFragment = folioWebView.parentFragment;
if (folioPageFragment == null) {
Intrinsics.throwUninitializedPropertyAccessException("parentFragment");
}
return folioPageFragment;
}
public static final Handler access$getUiHandler$p(FolioWebView folioWebView) {
Handler handler = folioWebView.uiHandler;
if (handler == null) {
Intrinsics.throwUninitializedPropertyAccessException("uiHandler");
}
return handler;
}
public static final View access$getViewTextSelection$p(FolioWebView folioWebView) {
View view = folioWebView.viewTextSelection;
if (view == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
return view;
}
public static final WebViewPager access$getWebViewPager$p(FolioWebView folioWebView) {
WebViewPager webViewPager = folioWebView.webViewPager;
if (webViewPager == null) {
Intrinsics.throwUninitializedPropertyAccessException("webViewPager");
}
return webViewPager;
}
@Metadata(bv = {1, 0, 3}, d1 = {"\u0000*\n\u0002\u0018\u0002\n\u0002\u0010\u0000\n\u0002\b\u0002\n\u0002\u0010\b\n\u0002\b\u0002\n\u0002\u0010\u000e\n\u0002\b\u0003\n\u0002\u0010\u000b\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\b\u0086\u0003\u0018\u00002\u00020\u0001B\u0007\b\u0002¢\u0006\u0002\u0010\u0002J \u0010\n\u001a\u00020\u000b2\u0006\u0010\f\u001a\u00020\r2\u0006\u0010\u0006\u001a\u00020\u00072\u0006\u0010\u000e\u001a\u00020\u0007H\u0007R\u000e\u0010\u0003\u001a\u00020\u0004X\u0082T¢\u0006\u0002\n\u0000R\u000e\u0010\u0005\u001a\u00020\u0004X\u0082T¢\u0006\u0002\n\u0000R\u0011\u0010\u0006\u001a\u00020\u0007¢\u0006\b\n\u0000\u001a\u0004\b\b\u0010\t¨\u0006\u000f"}, d2 = {"Lcom/folioreader/ui/view/FolioWebView$Companion;", "", "()V", "IS_SCROLLING_CHECK_MAX_DURATION", "", "IS_SCROLLING_CHECK_TIMER", "LOG_TAG", "", "getLOG_TAG", "()Ljava/lang/String;", "onWebViewConsoleMessage", "", "cm", "Landroid/webkit/ConsoleMessage;", NotificationCompat.CATEGORY_MESSAGE, "folioreader_release"}, k = 1, mv = {1, 1, 13})
public static final class Companion {
@Metadata(bv = {1, 0, 3}, k = 3, mv = {1, 1, 13})
public final class WhenMappings {
public static final int[] $EnumSwitchMapping$0;
static {
int[] iArr = new int[ConsoleMessage.MessageLevel.values().length];
$EnumSwitchMapping$0 = iArr;
iArr[ConsoleMessage.MessageLevel.LOG.ordinal()] = 1;
iArr[ConsoleMessage.MessageLevel.DEBUG.ordinal()] = 2;
iArr[ConsoleMessage.MessageLevel.TIP.ordinal()] = 3;
iArr[ConsoleMessage.MessageLevel.WARNING.ordinal()] = 4;
iArr[ConsoleMessage.MessageLevel.ERROR.ordinal()] = 5;
}
}
private Companion() {
}
public Companion(DefaultConstructorMarker defaultConstructorMarker) {
this();
}
public final String getLOG_TAG() {
return FolioWebView.LOG_TAG;
}
@JvmStatic
public final boolean onWebViewConsoleMessage(ConsoleMessage cm, String LOG_TAG, String msg) {
Intrinsics.checkParameterIsNotNull(cm, "cm");
Intrinsics.checkParameterIsNotNull(LOG_TAG, "LOG_TAG");
Intrinsics.checkParameterIsNotNull(msg, NotificationCompat.CATEGORY_MESSAGE);
ConsoleMessage.MessageLevel messageLevel = cm.messageLevel();
if (messageLevel == null) {
return false;
}
int i = WhenMappings.$EnumSwitchMapping$0[messageLevel.ordinal()];
if (i == 1) {
Log.v(LOG_TAG, msg);
return true;
}
if (i == 2 || i == 3) {
Log.d(LOG_TAG, msg);
return true;
}
if (i == 4) {
Log.w(LOG_TAG, msg);
return true;
}
if (i != 5) {
return false;
}
Log.e(LOG_TAG, msg);
return true;
}
}
static {
Intrinsics.checkExpressionValueIsNotNull("FolioWebView", "FolioWebView::class.java.simpleName");
LOG_TAG = "FolioWebView";
}
public final int getContentHeightVal() {
return (int) Math.floor(getContentHeight() * getScale());
}
public final int getWebViewHeight() {
return getMeasuredHeight();
}
@JavascriptInterface
public final String getDirection() {
FolioActivityCallback folioActivityCallback = this.folioActivityCallback;
if (folioActivityCallback == null) {
Intrinsics.throwUninitializedPropertyAccessException("folioActivityCallback");
}
return folioActivityCallback.getDirection().toString();
}
@JavascriptInterface
public final int getTopDistraction(String unitString) {
Intrinsics.checkParameterIsNotNull(unitString, "unitString");
DisplayUnit valueOf = DisplayUnit.valueOf(unitString);
FolioActivityCallback folioActivityCallback = this.folioActivityCallback;
if (folioActivityCallback == null) {
Intrinsics.throwUninitializedPropertyAccessException("folioActivityCallback");
}
return folioActivityCallback.getTopDistraction(valueOf);
}
@JavascriptInterface
public final int getBottomDistraction(String unitString) {
Intrinsics.checkParameterIsNotNull(unitString, "unitString");
DisplayUnit valueOf = DisplayUnit.valueOf(unitString);
FolioActivityCallback folioActivityCallback = this.folioActivityCallback;
if (folioActivityCallback == null) {
Intrinsics.throwUninitializedPropertyAccessException("folioActivityCallback");
}
return folioActivityCallback.getBottomDistraction(valueOf);
}
@JavascriptInterface
public final String getViewportRect(String unitString) {
Intrinsics.checkParameterIsNotNull(unitString, "unitString");
DisplayUnit valueOf = DisplayUnit.valueOf(unitString);
FolioActivityCallback folioActivityCallback = this.folioActivityCallback;
if (folioActivityCallback == null) {
Intrinsics.throwUninitializedPropertyAccessException("folioActivityCallback");
}
String rectToDOMRectJson = UiUtil.rectToDOMRectJson(folioActivityCallback.getViewportRect(valueOf));
Intrinsics.checkExpressionValueIsNotNull(rectToDOMRectJson, "UiUtil.rectToDOMRectJson(rect)");
return rectToDOMRectJson;
}
@JavascriptInterface
public final void toggleSystemUI() {
Handler handler = this.uiHandler;
if (handler == null) {
Intrinsics.throwUninitializedPropertyAccessException("uiHandler");
}
handler.post(new Runnable() {
@Override
public final void run() {
FolioWebView.access$getFolioActivityCallback$p(FolioWebView.this).toggleSystemUI();
}
});
}
@JavascriptInterface
public final boolean isPopupShowing() {
return this.popupWindow.isShowing();
}
@Metadata(bv = {1, 0, 3}, d1 = {"\u0000\"\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u000b\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0004\n\u0002\u0010\u0007\n\u0002\b\u0005\b\u0082\u0004\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002J\u0012\u0010\u0003\u001a\u00020\u00042\b\u0010\u0005\u001a\u0004\u0018\u00010\u0006H\u0016J,\u0010\u0007\u001a\u00020\u00042\b\u0010\b\u001a\u0004\u0018\u00010\u00062\b\u0010\t\u001a\u0004\u0018\u00010\u00062\u0006\u0010\n\u001a\u00020\u000b2\u0006\u0010\f\u001a\u00020\u000bH\u0016J,\u0010\r\u001a\u00020\u00042\b\u0010\b\u001a\u0004\u0018\u00010\u00062\b\u0010\t\u001a\u0004\u0018\u00010\u00062\u0006\u0010\u000e\u001a\u00020\u000b2\u0006\u0010\u000f\u001a\u00020\u000bH\u0016¨\u0006\u0010"}, d2 = {"Lcom/folioreader/ui/view/FolioWebView$HorizontalGestureListener;", "Landroid/view/GestureDetector$SimpleOnGestureListener;", "(Lcom/folioreader/ui/view/FolioWebView;)V", "onDown", "", NotificationCompat.CATEGORY_EVENT, "Landroid/view/MotionEvent;", "onFling", "e1", "e2", "velocityX", "", "velocityY", "onScroll", "distanceX", "distanceY", "folioreader_release"}, k = 1, mv = {1, 1, 13})
private final class HorizontalGestureListener extends GestureDetector.SimpleOnGestureListener {
public HorizontalGestureListener() {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
FolioWebView.this.lastScrollType = LastScrollType.USER;
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if (!FolioWebView.access$getWebViewPager$p(FolioWebView.this).getIsScrolling()) {
FolioWebView.access$getUiHandler$p(FolioWebView.this).postDelayed(new Runnable() {
@Override
public final void run() {
FolioWebView folioWebView = FolioWebView.this;
FolioWebView folioWebView2 = FolioWebView.this;
WebViewPager access$getWebViewPager$p = FolioWebView.access$getWebViewPager$p(FolioWebView.this);
if (access$getWebViewPager$p == null) {
Intrinsics.throwNpe();
}
folioWebView.scrollTo(folioWebView2.getScrollXPixelsForPage(access$getWebViewPager$p.getCurrentItem()), 0);
}
}, 100L);
}
FolioWebView.this.lastScrollType = LastScrollType.USER;
return true;
}
@Override
public boolean onDown(MotionEvent event) {
FolioWebView.this.eventActionDown = MotionEvent.obtain(event);
FolioWebView.super.onTouchEvent(event);
return true;
}
}
@JavascriptInterface
public final boolean dismissPopupWindow() {
String str = LOG_TAG;
StringBuilder sb = new StringBuilder("-> dismissPopupWindow -> ");
FolioPageFragment folioPageFragment = this.parentFragment;
if (folioPageFragment == null) {
Intrinsics.throwUninitializedPropertyAccessException("parentFragment");
}
Link spineItem = folioPageFragment.getSpineItem();
sb.append(spineItem != null ? spineItem.getHref() : null);
Log.d(str, sb.toString());
boolean isShowing = this.popupWindow.isShowing();
Looper mainLooper = Looper.getMainLooper();
Intrinsics.checkExpressionValueIsNotNull(mainLooper, "Looper.getMainLooper()");
if (Intrinsics.areEqual(mainLooper.getThread(), Thread.currentThread())) {
this.popupWindow.dismiss();
} else {
Handler handler = this.uiHandler;
if (handler == null) {
Intrinsics.throwUninitializedPropertyAccessException("uiHandler");
}
handler.post(new Runnable() {
@Override
public final void run() {
PopupWindow popupWindow;
popupWindow = FolioWebView.this.popupWindow;
popupWindow.dismiss();
}
});
}
this.selectionRect = new Rect();
Handler handler2 = this.uiHandler;
if (handler2 == null) {
Intrinsics.throwUninitializedPropertyAccessException("uiHandler");
}
handler2.removeCallbacks(this.isScrollingRunnable);
this.isScrollingCheckDuration = 0;
return isShowing;
}
@Override
public void destroy() {
super.destroy();
Log.d(LOG_TAG, "-> destroy");
dismissPopupWindow();
this.destroyed = true;
}
@Metadata(bv = {1, 0, 3}, d1 = {"\u0000\"\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u000b\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u0007\n\u0002\b\u0005\b\u0082\u0004\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002J,\u0010\u0003\u001a\u00020\u00042\b\u0010\u0005\u001a\u0004\u0018\u00010\u00062\b\u0010\u0007\u001a\u0004\u0018\u00010\u00062\u0006\u0010\b\u001a\u00020\t2\u0006\u0010\n\u001a\u00020\tH\u0016J,\u0010\u000b\u001a\u00020\u00042\b\u0010\u0005\u001a\u0004\u0018\u00010\u00062\b\u0010\u0007\u001a\u0004\u0018\u00010\u00062\u0006\u0010\f\u001a\u00020\t2\u0006\u0010\r\u001a\u00020\tH\u0016¨\u0006\u000e"}, d2 = {"Lcom/folioreader/ui/view/FolioWebView$VerticalGestureListener;", "Landroid/view/GestureDetector$SimpleOnGestureListener;", "(Lcom/folioreader/ui/view/FolioWebView;)V", "onFling", "", "e1", "Landroid/view/MotionEvent;", "e2", "velocityX", "", "velocityY", "onScroll", "distanceX", "distanceY", "folioreader_release"}, k = 1, mv = {1, 1, 13})
private final class VerticalGestureListener extends GestureDetector.SimpleOnGestureListener {
public VerticalGestureListener() {
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
FolioWebView.this.lastScrollType = LastScrollType.USER;
return false;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
FolioWebView.this.lastScrollType = LastScrollType.USER;
return false;
}
}
public FolioWebView(Context context) {
super(context);
Intrinsics.checkParameterIsNotNull(context, "context");
this.selectionRect = new Rect();
this.popupRect = new Rect();
this.popupWindow = new PopupWindow();
}
public FolioWebView(Context context, AttributeSet attributeSet) {
super(context, attributeSet);
Intrinsics.checkParameterIsNotNull(context, "context");
Intrinsics.checkParameterIsNotNull(attributeSet, "attrs");
this.selectionRect = new Rect();
this.popupRect = new Rect();
this.popupWindow = new PopupWindow();
}
public FolioWebView(Context context, AttributeSet attributeSet, int i) {
super(context, attributeSet, i);
Intrinsics.checkParameterIsNotNull(context, "context");
Intrinsics.checkParameterIsNotNull(attributeSet, "attrs");
this.selectionRect = new Rect();
this.popupRect = new Rect();
this.popupWindow = new PopupWindow();
}
private final void init() {
GestureDetectorCompat gestureDetectorCompat;
Log.v(LOG_TAG, "-> init");
this.uiHandler = new Handler();
Resources resources = getResources();
Intrinsics.checkExpressionValueIsNotNull(resources, "resources");
DisplayMetrics displayMetrics = resources.getDisplayMetrics();
this.displayMetrics = displayMetrics;
if (displayMetrics == null) {
Intrinsics.throwNpe();
}
this.density = displayMetrics.density;
FolioActivityCallback folioActivityCallback = this.folioActivityCallback;
if (folioActivityCallback == null) {
Intrinsics.throwUninitializedPropertyAccessException("folioActivityCallback");
}
if (folioActivityCallback.getDirection() == Config.Direction.HORIZONTAL) {
gestureDetectorCompat = new GestureDetectorCompat(getContext(), new HorizontalGestureListener());
} else {
gestureDetectorCompat = new GestureDetectorCompat(getContext(), new VerticalGestureListener());
}
this.gestureDetector = gestureDetectorCompat;
initViewTextSelection();
}
public final void initViewTextSelection() {
ContextThemeWrapper contextThemeWrapper;
Log.v(LOG_TAG, "-> initViewTextSelection");
Drawable drawable = ContextCompat.getDrawable(getContext(), R.drawable.abc_text_select_handle_middle_mtrl_dark);
this.handleHeight = drawable != null ? drawable.getIntrinsicHeight() : (int) (24 * this.density);
Config savedConfig = AppUtil.INSTANCE.getSavedConfig(getContext());
if (savedConfig == null) {
Intrinsics.throwNpe();
}
if (savedConfig.isNightMode()) {
contextThemeWrapper = new ContextThemeWrapper(getContext(), R.style.FolioNightTheme);
} else {
contextThemeWrapper = new ContextThemeWrapper(getContext(), R.style.FolioDayTheme);
}
View inflate = LayoutInflater.from(contextThemeWrapper).inflate(R.layout.text_selection, (ViewGroup) null);
Intrinsics.checkExpressionValueIsNotNull(inflate, "LayoutInflater.from(ctw)…out.text_selection, null)");
this.viewTextSelection = inflate;
if (inflate == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
inflate.measure(0, 0);
View view = this.viewTextSelection;
if (view == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
((ImageView) view.findViewById(R.id.yellowHighlight)).setOnClickListener(new View.OnClickListener() {
@Override
public final void onClick(View view2) {
Log.v(FolioWebView.INSTANCE.getLOG_TAG(), "-> onClick -> yellowHighlight");
FolioWebView.this.onHighlightColorItemsClicked(HighlightImpl.HighlightStyle.Yellow, false);
}
});
View view2 = this.viewTextSelection;
if (view2 == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
((ImageView) view2.findViewById(R.id.greenHighlight)).setOnClickListener(new View.OnClickListener() {
@Override
public final void onClick(View view3) {
Log.v(FolioWebView.INSTANCE.getLOG_TAG(), "-> onClick -> greenHighlight");
FolioWebView.this.onHighlightColorItemsClicked(HighlightImpl.HighlightStyle.Green, false);
}
});
View view3 = this.viewTextSelection;
if (view3 == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
((ImageView) view3.findViewById(R.id.blueHighlight)).setOnClickListener(new View.OnClickListener() {
@Override
public final void onClick(View view4) {
Log.v(FolioWebView.INSTANCE.getLOG_TAG(), "-> onClick -> blueHighlight");
FolioWebView.this.onHighlightColorItemsClicked(HighlightImpl.HighlightStyle.Blue, false);
}
});
View view4 = this.viewTextSelection;
if (view4 == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
((ImageView) view4.findViewById(R.id.pinkHighlight)).setOnClickListener(new View.OnClickListener() {
@Override
public final void onClick(View view5) {
Log.v(FolioWebView.INSTANCE.getLOG_TAG(), "-> onClick -> pinkHighlight");
FolioWebView.this.onHighlightColorItemsClicked(HighlightImpl.HighlightStyle.Pink, false);
}
});
View view5 = this.viewTextSelection;
if (view5 == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
((ImageView) view5.findViewById(R.id.underlineHighlight)).setOnClickListener(new View.OnClickListener() {
@Override
public final void onClick(View view6) {
Log.v(FolioWebView.INSTANCE.getLOG_TAG(), "-> onClick -> underlineHighlight");
FolioWebView.this.onHighlightColorItemsClicked(HighlightImpl.HighlightStyle.Underline, false);
}
});
View view6 = this.viewTextSelection;
if (view6 == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
((ImageView) view6.findViewById(R.id.deleteHighlight)).setOnClickListener(new View.OnClickListener() {
@Override
public final void onClick(View view7) {
Log.v(FolioWebView.INSTANCE.getLOG_TAG(), "-> onClick -> deleteHighlight");
FolioWebView.this.dismissPopupWindow();
FolioWebView.this.loadUrl("javascript:clearSelection()");
FolioWebView.this.loadUrl("javascript:deleteThisHighlight()");
}
});
View view7 = this.viewTextSelection;
if (view7 == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
((TextView) view7.findViewById(R.id.copySelection)).setOnClickListener(new View.OnClickListener() {
@Override
public final void onClick(View view8) {
FolioWebView.this.dismissPopupWindow();
FolioWebView folioWebView = FolioWebView.this;
StringBuilder sb = new StringBuilder("javascript:onTextSelectionItemClicked(");
Intrinsics.checkExpressionValueIsNotNull(view8, "it");
sb.append(view8.getId());
sb.append(')');
folioWebView.loadUrl(sb.toString());
}
});
View view8 = this.viewTextSelection;
if (view8 == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
((TextView) view8.findViewById(R.id.shareSelection)).setOnClickListener(new View.OnClickListener() {
@Override
public final void onClick(View view9) {
FolioWebView.this.dismissPopupWindow();
FolioWebView folioWebView = FolioWebView.this;
StringBuilder sb = new StringBuilder("javascript:onTextSelectionItemClicked(");
Intrinsics.checkExpressionValueIsNotNull(view9, "it");
sb.append(view9.getId());
sb.append(')');
folioWebView.loadUrl(sb.toString());
}
});
View view9 = this.viewTextSelection;
if (view9 == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
((TextView) view9.findViewById(R.id.defineSelection)).setOnClickListener(new View.OnClickListener() {
@Override
public final void onClick(View view10) {
FolioWebView.this.dismissPopupWindow();
FolioWebView folioWebView = FolioWebView.this;
StringBuilder sb = new StringBuilder("javascript:onTextSelectionItemClicked(");
Intrinsics.checkExpressionValueIsNotNull(view10, "it");
sb.append(view10.getId());
sb.append(')');
folioWebView.loadUrl(sb.toString());
}
});
}
@JavascriptInterface
public final void onTextSelectionItemClicked(int id, final String selectedText) {
Handler handler = this.uiHandler;
if (handler == null) {
Intrinsics.throwUninitializedPropertyAccessException("uiHandler");
}
handler.post(new Runnable() {
@Override
public final void run() {
FolioWebView.this.loadUrl("javascript:clearSelection()");
}
});
if (id == R.id.copySelection) {
Log.v(LOG_TAG, "-> onTextSelectionItemClicked -> copySelection -> " + selectedText);
UiUtil.copyToClipboard(getContext(), selectedText);
Toast.makeText(getContext(), getContext().getString(R.string.copied), 0).show();
return;
}
if (id == R.id.shareSelection) {
Log.v(LOG_TAG, "-> onTextSelectionItemClicked -> shareSelection -> " + selectedText);
UiUtil.share(getContext(), selectedText);
return;
}
if (id == R.id.defineSelection) {
Log.v(LOG_TAG, "-> onTextSelectionItemClicked -> defineSelection -> " + selectedText);
Handler handler2 = this.uiHandler;
if (handler2 == null) {
Intrinsics.throwUninitializedPropertyAccessException("uiHandler");
}
handler2.post(new Runnable() {
@Override
public final void run() {
FolioWebView.this.showDictDialog(selectedText);
}
});
return;
}
Log.w(LOG_TAG, "-> onTextSelectionItemClicked -> unknown id = " + id);
}
public final void showDictDialog(String selectedText) {
String str;
DictionaryFragment dictionaryFragment = new DictionaryFragment();
Bundle bundle = new Bundle();
if (selectedText == null) {
str = null;
} else {
if (selectedText == null) {
throw new TypeCastException("null cannot be cast to non-null type kotlin.CharSequence");
}
str = StringsKt.trim(selectedText).toString();
}
bundle.putString(Constants.SELECTED_WORD, str);
dictionaryFragment.setArguments(bundle);
FolioPageFragment folioPageFragment = this.parentFragment;
if (folioPageFragment == null) {
Intrinsics.throwUninitializedPropertyAccessException("parentFragment");
}
dictionaryFragment.show(folioPageFragment.getFragmentManager(), DictionaryFragment.class.getName());
}
public final void onHighlightColorItemsClicked(HighlightImpl.HighlightStyle style, boolean isAlreadyCreated) {
FolioPageFragment folioPageFragment = this.parentFragment;
if (folioPageFragment == null) {
Intrinsics.throwUninitializedPropertyAccessException("parentFragment");
}
folioPageFragment.highlight(style, isAlreadyCreated);
dismissPopupWindow();
}
@JavascriptInterface
public final void deleteThisHighlight(String id) {
Log.d(LOG_TAG, "-> deleteThisHighlight");
String str = id;
if (str == null || str.length() == 0) {
return;
}
HighlightImpl highlightForRangy = HighLightTable.getHighlightForRangy(id);
if (HighLightTable.deleteHighlight(id)) {
FolioPageFragment folioPageFragment = this.parentFragment;
if (folioPageFragment == null) {
Intrinsics.throwUninitializedPropertyAccessException("parentFragment");
}
final String generateRangyString = HighlightUtil.generateRangyString(folioPageFragment.getPageName());
Handler handler = this.uiHandler;
if (handler == null) {
Intrinsics.throwUninitializedPropertyAccessException("uiHandler");
}
handler.post(new Runnable() {
@Override
public final void run() {
FolioPageFragment access$getParentFragment$p = FolioWebView.access$getParentFragment$p(FolioWebView.this);
String str2 = generateRangyString;
Intrinsics.checkExpressionValueIsNotNull(str2, "rangy");
access$getParentFragment$p.loadRangy(str2);
}
});
if (highlightForRangy != null) {
HighlightUtil.sendHighlightBroadcastEvent(getContext(), highlightForRangy, HighLight.HighLightAction.DELETE);
}
}
}
public final void setParentFragment(FolioPageFragment parentFragment) {
Intrinsics.checkParameterIsNotNull(parentFragment, "parentFragment");
this.parentFragment = parentFragment;
}
public final void setFolioActivityCallback(FolioActivityCallback folioActivityCallback) {
Intrinsics.checkParameterIsNotNull(folioActivityCallback, "folioActivityCallback");
this.folioActivityCallback = folioActivityCallback;
init();
}
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
int ceil = (int) Math.ceil(getMeasuredWidth() / this.density);
this.pageWidthCssDp = ceil;
this.pageWidthCssPixels = ceil * this.density;
}
public final void setScrollListener(ScrollListener listener) {
Intrinsics.checkParameterIsNotNull(listener, "listener");
this.mScrollListener = listener;
}
public final void setSeekBarListener(SeekBarListener listener) {
Intrinsics.checkParameterIsNotNull(listener, "listener");
this.mSeekBarListener = listener;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event == null) {
return false;
}
this.lastTouchAction = event.getAction();
FolioActivityCallback folioActivityCallback = this.folioActivityCallback;
if (folioActivityCallback == null) {
Intrinsics.throwUninitializedPropertyAccessException("folioActivityCallback");
}
if (folioActivityCallback.getDirection() == Config.Direction.HORIZONTAL) {
return computeHorizontalScroll(event);
}
return computeVerticalScroll(event);
}
private final boolean computeVerticalScroll(MotionEvent event) {
GestureDetectorCompat gestureDetectorCompat = this.gestureDetector;
if (gestureDetectorCompat == null) {
Intrinsics.throwUninitializedPropertyAccessException("gestureDetector");
}
gestureDetectorCompat.onTouchEvent(event);
return super.onTouchEvent(event);
}
private final boolean computeHorizontalScroll(MotionEvent event) {
if (this.webViewPager == null) {
return super.onTouchEvent(event);
}
WebViewPager webViewPager = this.webViewPager;
if (webViewPager == null) {
Intrinsics.throwUninitializedPropertyAccessException("webViewPager");
}
webViewPager.dispatchTouchEvent(event);
GestureDetectorCompat gestureDetectorCompat = this.gestureDetector;
if (gestureDetectorCompat == null) {
Intrinsics.throwUninitializedPropertyAccessException("gestureDetector");
}
if (gestureDetectorCompat.onTouchEvent(event)) {
return true;
}
return super.onTouchEvent(event);
}
public final int getScrollXDpForPage(int page) {
return page * this.pageWidthCssDp;
}
public final int getScrollXPixelsForPage(int page) {
return (int) Math.ceil(page * this.pageWidthCssPixels);
}
public final void setHorizontalPageCount(int horizontalPageCount) {
this.horizontalPageCount = horizontalPageCount;
Handler handler = this.uiHandler;
if (handler == null) {
Intrinsics.throwUninitializedPropertyAccessException("uiHandler");
}
handler.post(new Runnable() {
@Override
public final void run() {
int i;
FolioWebView folioWebView = FolioWebView.this;
Object parent = folioWebView.getParent();
if (parent != null) {
View findViewById = ((View) parent).findViewById(R.id.webViewPager);
Intrinsics.checkExpressionValueIsNotNull(findViewById, "(parent as View).findViewById(R.id.webViewPager)");
folioWebView.webViewPager = (WebViewPager) findViewById;
WebViewPager access$getWebViewPager$p = FolioWebView.access$getWebViewPager$p(FolioWebView.this);
i = FolioWebView.this.horizontalPageCount;
access$getWebViewPager$p.setHorizontalPageCount(i);
return;
}
throw new TypeCastException("null cannot be cast to non-null type android.view.View");
}
});
}
@Override
public void scrollTo(int x, int y) {
super.scrollTo(x, y);
this.lastScrollType = LastScrollType.PROGRAMMATIC;
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
ScrollListener scrollListener = this.mScrollListener;
if (scrollListener != null) {
if (scrollListener == null) {
Intrinsics.throwNpe();
}
scrollListener.onScrollChange(t);
}
super.onScrollChanged(l, t, oldl, oldt);
if (this.lastScrollType == LastScrollType.USER) {
FolioPageFragment folioPageFragment = this.parentFragment;
if (folioPageFragment == null) {
Intrinsics.throwUninitializedPropertyAccessException("parentFragment");
}
folioPageFragment.setSearchLocatorVisible(null);
}
this.lastScrollType = null;
}
@Metadata(bv = {1, 0, 3}, d1 = {"\u0000.\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u000b\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0002\n\u0002\b\u0002\b\u0082\u0004\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002J\u0018\u0010\u0003\u001a\u00020\u00042\u0006\u0010\u0005\u001a\u00020\u00062\u0006\u0010\u0007\u001a\u00020\bH\u0016J\u0018\u0010\t\u001a\u00020\u00042\u0006\u0010\u0005\u001a\u00020\u00062\u0006\u0010\n\u001a\u00020\u000bH\u0016J\u0010\u0010\f\u001a\u00020\r2\u0006\u0010\u0005\u001a\u00020\u0006H\u0016J\u0018\u0010\u000e\u001a\u00020\u00042\u0006\u0010\u0005\u001a\u00020\u00062\u0006\u0010\n\u001a\u00020\u000bH\u0016¨\u0006\u000f"}, d2 = {"Lcom/folioreader/ui/view/FolioWebView$TextSelectionCb;", "Landroid/view/ActionMode$Callback;", "(Lcom/folioreader/ui/view/FolioWebView;)V", "onActionItemClicked", "", "mode", "Landroid/view/ActionMode;", "item", "Landroid/view/MenuItem;", "onCreateActionMode", "menu", "Landroid/view/Menu;", "onDestroyActionMode", "", "onPrepareActionMode", "folioreader_release"}, k = 1, mv = {1, 1, 13})
private final class TextSelectionCb implements ActionMode.Callback {
public TextSelectionCb() {
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
Intrinsics.checkParameterIsNotNull(mode, "mode");
Intrinsics.checkParameterIsNotNull(menu, "menu");
Log.d(FolioWebView.INSTANCE.getLOG_TAG(), "-> onCreateActionMode");
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
Intrinsics.checkParameterIsNotNull(mode, "mode");
Intrinsics.checkParameterIsNotNull(menu, "menu");
Log.d(FolioWebView.INSTANCE.getLOG_TAG(), "-> onPrepareActionMode");
FolioWebView.this.evaluateJavascript("javascript:getSelectionRect()", new ValueCallback<String>() {
@Override
public final void onReceiveValue(String str) {
JSONObject jSONObject = new JSONObject(str);
FolioWebView.this.setSelectionRect(jSONObject.getInt("left"), jSONObject.getInt("top"), jSONObject.getInt("right"), jSONObject.getInt("bottom"));
}
});
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
Intrinsics.checkParameterIsNotNull(mode, "mode");
Intrinsics.checkParameterIsNotNull(item, "item");
Log.d(FolioWebView.INSTANCE.getLOG_TAG(), "-> onActionItemClicked");
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
Intrinsics.checkParameterIsNotNull(mode, "mode");
Log.d(FolioWebView.INSTANCE.getLOG_TAG(), "-> onDestroyActionMode");
FolioWebView.this.dismissPopupWindow();
}
}
@Metadata(bv = {1, 0, 3}, d1 = {"\u0000<\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\u000b\n\u0000\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0010\u0002\n\u0002\b\u0002\n\u0002\u0018\u0002\n\u0000\n\u0002\u0018\u0002\n\u0002\b\u0002\b\u0083\u0004\u0018\u00002\u00020\u0001B\u0005¢\u0006\u0002\u0010\u0002J\u0018\u0010\u0003\u001a\u00020\u00042\u0006\u0010\u0005\u001a\u00020\u00062\u0006\u0010\u0007\u001a\u00020\bH\u0016J\u0018\u0010\t\u001a\u00020\u00042\u0006\u0010\u0005\u001a\u00020\u00062\u0006\u0010\n\u001a\u00020\u000bH\u0016J\u0010\u0010\f\u001a\u00020\r2\u0006\u0010\u0005\u001a\u00020\u0006H\u0016J \u0010\u000e\u001a\u00020\r2\u0006\u0010\u0005\u001a\u00020\u00062\u0006\u0010\u000f\u001a\u00020\u00102\u0006\u0010\u0011\u001a\u00020\u0012H\u0016J\u0018\u0010\u0013\u001a\u00020\u00042\u0006\u0010\u0005\u001a\u00020\u00062\u0006\u0010\n\u001a\u00020\u000bH\u0016¨\u0006\u0014"}, d2 = {"Lcom/folioreader/ui/view/FolioWebView$TextSelectionCb2;", "Landroid/view/ActionMode$Callback2;", "(Lcom/folioreader/ui/view/FolioWebView;)V", "onActionItemClicked", "", "mode", "Landroid/view/ActionMode;", "item", "Landroid/view/MenuItem;", "onCreateActionMode", "menu", "Landroid/view/Menu;", "onDestroyActionMode", "", "onGetContentRect", "view", "Landroid/view/View;", "outRect", "Landroid/graphics/Rect;", "onPrepareActionMode", "folioreader_release"}, k = 1, mv = {1, 1, 13})
private final class TextSelectionCb2 extends ActionMode.Callback2 {
public TextSelectionCb2() {
}
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
Intrinsics.checkParameterIsNotNull(mode, "mode");
Intrinsics.checkParameterIsNotNull(menu, "menu");
Log.d(FolioWebView.INSTANCE.getLOG_TAG(), "-> onCreateActionMode");
menu.clear();
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
Intrinsics.checkParameterIsNotNull(mode, "mode");
Intrinsics.checkParameterIsNotNull(menu, "menu");
Log.d(FolioWebView.INSTANCE.getLOG_TAG(), "-> onPrepareActionMode");
return false;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
Intrinsics.checkParameterIsNotNull(mode, "mode");
Intrinsics.checkParameterIsNotNull(item, "item");
Log.d(FolioWebView.INSTANCE.getLOG_TAG(), "-> onActionItemClicked");
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
Intrinsics.checkParameterIsNotNull(mode, "mode");
Log.d(FolioWebView.INSTANCE.getLOG_TAG(), "-> onDestroyActionMode");
FolioWebView.this.dismissPopupWindow();
}
@Override
public void onGetContentRect(ActionMode mode, View view, Rect outRect) {
Intrinsics.checkParameterIsNotNull(mode, "mode");
Intrinsics.checkParameterIsNotNull(view, "view");
Intrinsics.checkParameterIsNotNull(outRect, "outRect");
Log.d(FolioWebView.INSTANCE.getLOG_TAG(), "-> onGetContentRect");
FolioWebView.this.evaluateJavascript("javascript:getSelectionRect()", new ValueCallback<String>() {
@Override
public final void onReceiveValue(String str) {
JSONObject jSONObject = new JSONObject(str);
FolioWebView.this.setSelectionRect(jSONObject.getInt("left"), jSONObject.getInt("top"), jSONObject.getInt("right"), jSONObject.getInt("bottom"));
}
});
}
}
@Override
public ActionMode startActionMode(ActionMode.Callback callback) {
Intrinsics.checkParameterIsNotNull(callback, "callback");
Log.d(LOG_TAG, "-> startActionMode");
TextSelectionCb textSelectionCb = new TextSelectionCb();
this.textSelectionCb = textSelectionCb;
ActionMode startActionMode = super.startActionMode(textSelectionCb);
this.actionMode = startActionMode;
if (startActionMode != null) {
startActionMode.finish();
}
ActionMode actionMode = this.actionMode;
if (actionMode != null) {
return actionMode;
}
throw new TypeCastException("null cannot be cast to non-null type android.view.ActionMode");
}
@Override
public ActionMode startActionMode(ActionMode.Callback callback, int type) {
Intrinsics.checkParameterIsNotNull(callback, "callback");
Log.d(LOG_TAG, "-> startActionMode");
TextSelectionCb2 textSelectionCb2 = new TextSelectionCb2();
this.textSelectionCb2 = textSelectionCb2;
ActionMode startActionMode = super.startActionMode(textSelectionCb2, type);
this.actionMode = startActionMode;
if (startActionMode != null) {
startActionMode.finish();
}
ActionMode actionMode = this.actionMode;
if (actionMode != null) {
return actionMode;
}
throw new TypeCastException("null cannot be cast to non-null type android.view.ActionMode");
}
private final void applyThemeColorToHandles() {
Log.v(LOG_TAG, "-> applyThemeColorToHandles");
if (Build.VERSION.SDK_INT < 23) {
FolioActivityCallback folioActivityCallback = this.folioActivityCallback;
if (folioActivityCallback == null) {
Intrinsics.throwUninitializedPropertyAccessException("folioActivityCallback");
}
WeakReference<FolioActivity> activity = folioActivityCallback.getActivity();
Intrinsics.checkExpressionValueIsNotNull(activity, "folioActivityCallback.activity");
Field findField = ReflectionUtils.findField(FolioActivity.class, "mWindowManager");
Intrinsics.checkExpressionValueIsNotNull(findField, "mWindowManagerField");
findField.setAccessible(true);
Object obj = findField.get(activity.get());
Field findField2 = ReflectionUtils.findField(Class.forName("android.view.WindowManagerImpl"), "mGlobal");
Intrinsics.checkExpressionValueIsNotNull(findField2, "mGlobalField");
findField2.setAccessible(true);
Object obj2 = findField2.get(obj);
Field findField3 = ReflectionUtils.findField(Class.forName("android.view.WindowManagerGlobal"), "mViews");
Intrinsics.checkExpressionValueIsNotNull(findField3, "mViewsField");
findField3.setAccessible(true);
Object obj3 = findField3.get(obj2);
if (obj3 == null) {
throw new TypeCastException("null cannot be cast to non-null type kotlin.collections.ArrayList<android.view.View> /* = java.util.ArrayList<android.view.View> */");
}
ArrayList arrayList = (ArrayList) obj3;
Config savedConfig = AppUtil.INSTANCE.getSavedConfig(getContext());
if (savedConfig == null) {
Intrinsics.throwNpe();
}
Iterator it = arrayList.iterator();
while (it.hasNext()) {
View view = (View) it.next();
Class<?> cls = Class.forName("com.android.org.chromium.content.browser.input.HandleView");
if (cls.isInstance(view)) {
Field findField4 = ReflectionUtils.findField(cls, "mDrawable");
Intrinsics.checkExpressionValueIsNotNull(findField4, "mDrawableField");
findField4.setAccessible(true);
Object obj4 = findField4.get(view);
if (obj4 == null) {
throw new TypeCastException("null cannot be cast to non-null type android.graphics.drawable.BitmapDrawable");
}
UiUtil.setColorIntToDrawable(savedConfig.getThemeColor(), (BitmapDrawable) obj4);
}
}
return;
}
FolioActivityCallback folioActivityCallback2 = this.folioActivityCallback;
if (folioActivityCallback2 == null) {
Intrinsics.throwUninitializedPropertyAccessException("folioActivityCallback");
}
WeakReference<FolioActivity> activity2 = folioActivityCallback2.getActivity();
Intrinsics.checkExpressionValueIsNotNull(activity2, "folioActivityCallback.activity");
Field findField5 = ReflectionUtils.findField(FolioActivity.class, "mWindowManager");
Intrinsics.checkExpressionValueIsNotNull(findField5, "mWindowManagerField");
findField5.setAccessible(true);
Object obj5 = findField5.get(activity2.get());
Field findField6 = ReflectionUtils.findField(Class.forName("android.view.WindowManagerImpl"), "mGlobal");
Intrinsics.checkExpressionValueIsNotNull(findField6, "mGlobalField");
findField6.setAccessible(true);
Object obj6 = findField6.get(obj5);
Field findField7 = ReflectionUtils.findField(Class.forName("android.view.WindowManagerGlobal"), "mViews");
Intrinsics.checkExpressionValueIsNotNull(findField7, "mViewsField");
findField7.setAccessible(true);
Object obj7 = findField7.get(obj6);
if (obj7 == null) {
throw new TypeCastException("null cannot be cast to non-null type kotlin.collections.ArrayList<android.view.View> /* = java.util.ArrayList<android.view.View> */");
}
ArrayList arrayList2 = (ArrayList) obj7;
Config savedConfig2 = AppUtil.INSTANCE.getSavedConfig(getContext());
if (savedConfig2 == null) {
Intrinsics.throwNpe();
}
Iterator it2 = arrayList2.iterator();
while (it2.hasNext()) {
View view2 = (View) it2.next();
Class<?> cls2 = Class.forName("android.widget.PopupWindow$PopupDecorView");
if (cls2.isInstance(view2)) {
Field findField8 = ReflectionUtils.findField(cls2, "mChildren");
Intrinsics.checkExpressionValueIsNotNull(findField8, "mChildrenField");
findField8.setAccessible(true);
Object obj8 = findField8.get(view2);
if (obj8 == null) {
throw new TypeCastException("null cannot be cast to non-null type kotlin.Array<android.view.View>");
}
View[] viewArr = (View[]) obj8;
FolioActivity folioActivity = activity2.get();
Field findField9 = ReflectionUtils.findField(Class.forName("org.chromium.android_webview.PopupTouchHandleDrawable", true, new PathClassLoader("/system/app/Chrome/Chrome.apk", folioActivity != null ? folioActivity.getClassLoader() : null)), "mDrawable");
Intrinsics.checkExpressionValueIsNotNull(findField9, "mDrawableField");
findField9.setAccessible(true);
Object obj9 = findField9.get(viewArr[0]);
if (obj9 == null) {
throw new TypeCastException("null cannot be cast to non-null type android.graphics.drawable.Drawable");
}
UiUtil.setColorIntToDrawable(savedConfig2.getThemeColor(), (Drawable) obj9);
}
}
}
@JavascriptInterface
public final void setSelectionRect(int left, int top, int right, int bottom) {
Rect rect = new Rect();
rect.left = (int) (left * this.density);
rect.top = (int) (top * this.density);
rect.right = (int) (right * this.density);
rect.bottom = (int) (bottom * this.density);
Log.d(LOG_TAG, "-> setSelectionRect -> " + rect);
computeTextSelectionRect(rect);
Handler handler = this.uiHandler;
if (handler == null) {
Intrinsics.throwUninitializedPropertyAccessException("uiHandler");
}
handler.post(new Runnable() {
@Override
public final void run() {
FolioWebView.this.showTextSelectionPopup();
}
});
}
private final void computeTextSelectionRect(Rect currentSelectionRect) {
int measuredHeight;
String str = LOG_TAG;
Log.v(str, "-> computeTextSelectionRect");
FolioActivityCallback folioActivityCallback = this.folioActivityCallback;
if (folioActivityCallback == null) {
Intrinsics.throwUninitializedPropertyAccessException("folioActivityCallback");
}
Rect viewportRect = folioActivityCallback.getViewportRect(DisplayUnit.PX);
Log.d(str, "-> viewportRect -> " + viewportRect);
if (!Rect.intersects(viewportRect, currentSelectionRect)) {
Log.i(str, "-> currentSelectionRect doesn't intersects viewportRect");
Handler handler = this.uiHandler;
if (handler == null) {
Intrinsics.throwUninitializedPropertyAccessException("uiHandler");
}
handler.post(new Runnable() {
@Override
public final void run() {
PopupWindow popupWindow;
Runnable runnable;
popupWindow = FolioWebView.this.popupWindow;
popupWindow.dismiss();
Handler access$getUiHandler$p = FolioWebView.access$getUiHandler$p(FolioWebView.this);
runnable = FolioWebView.this.isScrollingRunnable;
access$getUiHandler$p.removeCallbacks(runnable);
}
});
return;
}
Log.i(str, "-> currentSelectionRect intersects viewportRect");
if (Intrinsics.areEqual(this.selectionRect, currentSelectionRect)) {
Log.i(str, "-> setSelectionRect -> currentSelectionRect is equal to previous selectionRect so no need to computeTextSelectionRect and show popupWindow again");
return;
}
Log.i(str, "-> setSelectionRect -> currentSelectionRect is not equal to previous selectionRect so computeTextSelectionRect and show popupWindow");
this.selectionRect = currentSelectionRect;
Rect rect = new Rect(viewportRect);
rect.bottom = this.selectionRect.top - ((int) (8 * this.density));
Rect rect2 = new Rect(viewportRect);
rect2.top = this.selectionRect.bottom + this.handleHeight;
this.popupRect.left = viewportRect.left;
this.popupRect.top = rect2.top;
Rect rect3 = this.popupRect;
int i = rect3.left;
View view = this.viewTextSelection;
if (view == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
rect3.right = i + view.getMeasuredWidth();
Rect rect4 = this.popupRect;
int i2 = rect4.top;
View view2 = this.viewTextSelection;
if (view2 == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
rect4.bottom = i2 + view2.getMeasuredHeight();
if (rect2.contains(this.popupRect)) {
Log.i(str, "-> show below");
measuredHeight = rect2.top;
} else {
this.popupRect.top = rect.top;
Rect rect5 = this.popupRect;
int i3 = rect5.top;
View view3 = this.viewTextSelection;
if (view3 == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
rect5.bottom = i3 + view3.getMeasuredHeight();
if (rect.contains(this.popupRect)) {
Log.i(str, "-> show above");
measuredHeight = rect.bottom - this.popupRect.height();
} else {
Log.i(str, "-> show in middle");
View view4 = this.viewTextSelection;
if (view4 == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
measuredHeight = this.selectionRect.top - ((view4.getMeasuredHeight() - this.selectionRect.height()) / 2);
}
}
View view5 = this.viewTextSelection;
if (view5 == null) {
Intrinsics.throwUninitializedPropertyAccessException("viewTextSelection");
}
this.popupRect.offsetTo(this.selectionRect.left - ((view5.getMeasuredWidth() - this.selectionRect.width()) / 2), measuredHeight);
if (this.popupRect.left < viewportRect.left) {
this.popupRect.right += 0 - this.popupRect.left;
this.popupRect.left = 0;
}
if (this.popupRect.right > viewportRect.right) {
int i4 = this.popupRect.right - viewportRect.right;
this.popupRect.left -= i4;
this.popupRect.right -= i4;
}
}
public final void showTextSelectionPopup() {
String str = LOG_TAG;
Log.v(str, "-> showTextSelectionPopup");
Log.d(str, "-> showTextSelectionPopup -> To be laid out popupRect -> " + this.popupRect);
this.popupWindow.dismiss();
this.oldScrollX = getScrollX();
this.oldScrollY = getScrollY();
this.isScrollingRunnable = new Runnable() {
@Override
public final void run() {
throw new UnsupportedOperationException("Method not decompiled: com.folioreader.ui.view.FolioWebView$showTextSelectionPopup$1.run():void");
}
};
Handler handler = this.uiHandler;
if (handler == null) {
Intrinsics.throwUninitializedPropertyAccessException("uiHandler");
}
handler.removeCallbacks(this.isScrollingRunnable);
this.isScrollingCheckDuration = 0;
if (this.destroyed) {
return;
}
Handler handler2 = this.uiHandler;
if (handler2 == null) {
Intrinsics.throwUninitializedPropertyAccessException("uiHandler");
}
handler2.postDelayed(this.isScrollingRunnable, 100);
}
}