正在查看: St.John's v1.0.9 应用的 CustomLinkMovementMethod.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
正在查看: St.John's v1.0.9 应用的 CustomLinkMovementMethod.java JAVA 源代码文件
本页面展示 JAVA 反编译生成的源代码文件,支持语法高亮显示。 仅供安全研究与技术分析使用,严禁用于任何非法用途。请遵守相关法律法规。
package com.mcb.stjohnsemschool.utils;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.text.Layout;
import android.text.Spannable;
import android.text.method.LinkMovementMethod;
import android.text.style.ClickableSpan;
import android.text.style.URLSpan;
import android.view.MotionEvent;
import android.widget.TextView;
import android.widget.Toast;
import com.microsoft.identity.common.adal.internal.AuthenticationConstants;
import io.ably.lib.util.AgentHeaderCreator;
public class CustomLinkMovementMethod extends LinkMovementMethod {
private static CustomLinkMovementMethod instance;
public static CustomLinkMovementMethod getInstance() {
if (instance == null) {
instance = new CustomLinkMovementMethod();
}
return instance;
}
@Override
public boolean onTouchEvent(TextView textView, Spannable spannable, MotionEvent motionEvent) {
if (motionEvent.getAction() == 1) {
int x = (int) motionEvent.getX();
int y = (int) motionEvent.getY();
int totalPaddingLeft = x - textView.getTotalPaddingLeft();
int totalPaddingTop = y - textView.getTotalPaddingTop();
int scrollX = totalPaddingLeft + textView.getScrollX();
int scrollY = totalPaddingTop + textView.getScrollY();
Layout layout = textView.getLayout();
int offsetForHorizontal = layout.getOffsetForHorizontal(layout.getLineForVertical(scrollY), scrollX);
ClickableSpan[] clickableSpanArr = (ClickableSpan[]) spannable.getSpans(offsetForHorizontal, offsetForHorizontal, ClickableSpan.class);
if (clickableSpanArr.length != 0) {
ClickableSpan clickableSpan = clickableSpanArr[0];
if (clickableSpan instanceof URLSpan) {
String url = ((URLSpan) clickableSpan).getURL();
Context context = textView.getContext();
String cleanUrl = cleanUrl(url);
if (cleanUrl != null) {
if (cleanUrl.startsWith("https://drive.google.com")) {
handleGoogleDriveLink(context, cleanUrl);
} else {
openUrlInBrowser(context, cleanUrl);
}
} else {
Toast.makeText(context, "Invalid URL", 0).show();
}
return true;
}
}
}
return super.onTouchEvent(textView, spannable, motionEvent);
}
private String cleanUrl(String str) {
String trim = str.trim();
if (trim.startsWith("http://") || trim.startsWith(AuthenticationConstants.Broker.REDIRECT_SSL_PREFIX)) {
return trim;
}
if (trim.startsWith("www.")) {
return "http://" + trim;
}
return "http://" + trim;
}
private void handleGoogleDriveLink(Context context, String str) {
if (str.startsWith("https://drive.google.com/file/d/")) {
String driveIdFromUrl = getDriveIdFromUrl(str);
if (driveIdFromUrl != null) {
openGoogleDriveFileLink(context, driveIdFromUrl);
return;
} else {
openUrlInBrowser(context, str);
return;
}
}
openUrlInBrowser(context, str);
}
private String getDriveIdFromUrl(String str) {
int i;
try {
String[] split = Uri.parse(str).getPath().split(AgentHeaderCreator.AGENT_DIVIDER);
for (int i2 = 0; i2 < split.length; i2++) {
if ("d".equals(split[i2]) && (i = i2 + 1) < split.length) {
return split[i];
}
}
return null;
} catch (Exception unused) {
return null;
}
}
private void openGoogleDriveFileLink(Context context, String str) {
try {
String str2 = "https://drive.google.com/file/d/" + str + "/view";
Intent intent = new Intent("android.intent.action.VIEW");
intent.setData(Uri.parse(str2));
if (!(context instanceof Activity)) {
intent.addFlags(268435456);
context.startActivity(intent);
} else {
openUrlInBrowser(context, str2);
}
} catch (Exception unused) {
Toast.makeText(context, "Unable to open link", 0).show();
}
}
private void openUrlInBrowser(Context context, String str) {
try {
Intent intent = new Intent("android.intent.action.VIEW", Uri.parse(str));
if (!(context instanceof Activity)) {
intent.addFlags(268435456);
context.startActivity(intent);
} else {
Toast.makeText(context, "No application found to open this link", 0).show();
}
} catch (Exception unused) {
Toast.makeText(context, "No application found to open this link", 0).show();
}
}
}