Commit e33714f1 authored by feihuaduo's avatar feihuaduo

修改高清卡图下载地址

代码优化
parent 6cd0c10e
......@@ -6,11 +6,13 @@ import android.content.Context;
import android.content.Intent;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.util.Log;
import android.widget.ImageView;
import androidx.appcompat.app.AppCompatDelegate;
import com.bumptech.glide.Glide;
import com.ourygo.assistant.util.DuelAssistantManagement;
import com.tencent.bugly.Bugly;
import com.tencent.bugly.beta.Beta;
import com.yuyh.library.imgsel.ISNav;
......@@ -35,6 +37,8 @@ public class App extends GameApplication {
initBugly();
}
@Override
public NativeInitOptions getNativeInitOptions() {
NativeInitOptions options = AppsSettings.get().getNativeInitOptions();
......
......@@ -393,7 +393,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
public void onDownloadFailed(Exception e) {
//下载失败后删除下载的文件
FileUtils.deleteFile(file);
downloadCardImage(code, file);
// downloadCardImage(code, file);
Message message = new Message();
message.what = TYPE_DOWNLOAD_CARD_IMAGE_EXCEPTION;
......
package cn.garymb.ygomobile.ui.cards;
import android.os.Build;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.Gravity;
......@@ -18,6 +17,7 @@ import androidx.recyclerview.widget.FastScrollLinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.ourygo.assistant.util.DuelAssistantManagement;
import java.io.IOException;
import java.util.List;
......@@ -29,10 +29,8 @@ import cn.garymb.ygomobile.loader.ImageLoader;
import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.activities.WebActivity;
import cn.garymb.ygomobile.ui.adapters.CardListAdapter;
import cn.garymb.ygomobile.ui.home.HomeActivity;
import cn.garymb.ygomobile.ui.plus.AOnGestureListener;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import com.ourygo.assistant.service.DuelAssistantService;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import ocgcore.DataManager;
import ocgcore.LimitManager;
......@@ -43,30 +41,31 @@ import ocgcore.data.LimitList;
class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack {
protected DrawerLayout mDrawerlayout;
private RecyclerView mListView;
protected CardSearcher mCardSelector;
protected CardListAdapter mCardListAdapater;
protected CardLoader mCardLoader;
protected boolean isLoad = false;
protected StringManager mStringManager = DataManager.get().getStringManager();
protected LimitManager mLimitManager = DataManager.get().getLimitManager();
private RecyclerView mListView;
private ImageLoader mImageLoader;
private String intentSearchMessage;
private boolean isFirstCardSearch = true;
private String currentCardSearchMessage = "";
private DuelAssistantManagement duelAssistantManagement;
private CardDetail mCardDetail;
private DialogPlus mDialog;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search);
duelAssistantManagement = DuelAssistantManagement.getInstance();
if (TextUtils.isEmpty(getIntent().getStringExtra(CardSearchAcitivity.SEARCH_MESSAGE))) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
currentCardSearchMessage = HomeActivity.cardSearchMessage;
} else {
currentCardSearchMessage = DuelAssistantService.cardSearchMessage;
}
currentCardSearchMessage = duelAssistantManagement.getCardSearchMessage();
}
Toolbar toolbar = $(R.id.toolbar);
setSupportActionBar(toolbar);
......@@ -111,23 +110,17 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack
@Override
protected void onRestart() {
super.onRestart();
if (!isFirstCardSearch && !currentCardSearchMessage.equals(HomeActivity.cardSearchMessage)) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
currentCardSearchMessage = HomeActivity.cardSearchMessage;
} else {
currentCardSearchMessage = DuelAssistantService.cardSearchMessage;
}
if (!isFirstCardSearch && !currentCardSearchMessage.equals(duelAssistantManagement.getCardSearchMessage())) {
currentCardSearchMessage = duelAssistantManagement.getCardSearchMessage();
intentSearch();
}
}
private void intentSearch() {
// intentSearchMessage=getIntent().getStringExtra(CardSearchAcitivity.SEARCH_MESSAGE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
currentCardSearchMessage = HomeActivity.cardSearchMessage;
} else {
currentCardSearchMessage = DuelAssistantService.cardSearchMessage;
}
currentCardSearchMessage = duelAssistantManagement.getCardSearchMessage();
}
protected void setListeners() {
......@@ -269,9 +262,6 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack
}
private CardDetail mCardDetail;
private DialogPlus mDialog;
private boolean isShowCard() {
return mDialog != null && mDialog.isShowing();
}
......
......@@ -35,6 +35,10 @@ import com.google.android.material.navigation.NavigationView;
import com.nightonke.boommenu.BoomButtons.BoomButton;
import com.nightonke.boommenu.BoomButtons.TextOutsideCircleButton;
import com.nightonke.boommenu.BoomMenuButton;
import com.ourygo.assistant.base.listener.OnDuelAssistantListener;
import com.ourygo.assistant.service.DuelAssistantService;
import com.ourygo.assistant.util.DuelAssistantManagement;
import com.ourygo.assistant.util.Util;
import com.tencent.bugly.beta.Beta;
import com.tencent.smtt.sdk.QbSdk;
import com.tubb.smrv.SwipeMenuRecyclerView;
......@@ -81,30 +85,17 @@ import cn.garymb.ygomobile.utils.YGOUtil;
import static cn.garymb.ygomobile.Constants.ASSET_SERVER_LIST;
public abstract class HomeActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener {
//卡查关键字
public static final String[] cardSearchKey = new String[]{"?", "?"};
//加房关键字
public static final String[] passwordPrefix = {
"M,", "m,", "T,", "PR,", "pr,", "AI,", "ai,", "LF2,", "lf2,", "M#", "m#", "T#", "t#",
"PR#", "pr#", "NS#", "ns#", "S#", "s#", "AI#", "ai#", "LF2#", "lf2#", "R#", "r#"
};
//卡组复制
public static final String[] DeckTextKey = new String[]{"#main"};
/***
* 剪贴板监听复制内容
*/
private final static String DECK_URL_PREFIX = Constants.SCHEME_APP + "://" + Constants.URI_HOST;
//卡查内容
public static String cardSearchMessage = "";
public static String DeckText = "";
public abstract class HomeActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener, OnDuelAssistantListener {
private static final int ID_MAINACTIVITY = 0;
protected SwipeMenuRecyclerView mServerList;
long exitLasttime = 0;
ShimmerTextView tv;
Shimmer shimmer;
private ServerListAdapter mServerListAdapter;
private ServerListManager mServerListManager;
private ClipboardManager cm;
private DuelAssistantManagement duelAssistantManagement;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
......@@ -151,8 +142,8 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie
TrPay.getInstance(HomeActivity.this).initPaySdk("e1014da420ea4405898c01273d6731b6", "YGOMobile");
//check update
Beta.checkUpgrade(false, false);
//DuelAssistantService
YGOUtil.startDuelService(this);
//初始化决斗助手
initDuelAssistant();
//萌卡
StartMycard();
checkNotch();
......@@ -164,20 +155,60 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie
BacktoDuel();
}
@Override
protected void onStart() {
super.onStart();
if (AppsSettings.get().isServiceDuelAssistant() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
private void duelAssistantCheck() {
if (AppsSettings.get().isServiceDuelAssistant()) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
getClipboard();
duelAssistantManagement.checkClip(ID_MAINACTIVITY);
}
}, 500);
}
}
@Override
protected void onStart() {
super.onStart();
duelAssistantCheck();
}
@Override
public void onJoinRoom(String password, int id) {
if (id == ID_MAINACTIVITY) {
QuickjoinRoom(password);
}
}
@Override
public void onCardSearch(String key, int id) {
if (id == ID_MAINACTIVITY) {
Intent intent = new Intent(this, CardSearchAcitivity.class);
intent.putExtra(CardSearchAcitivity.SEARCH_MESSAGE, key);
startActivity(intent);
}
}
@Override
public void onSaveDeck(String message, boolean isUrl, int id) {
if (id == ID_MAINACTIVITY) {
saveDeck(message,isUrl);
}
}
@Override
public boolean isListenerEffective() {
return Util.isContextExisted(this);
}
private void initDuelAssistant() {
duelAssistantManagement = DuelAssistantManagement.getInstance();
duelAssistantManagement.init(getApplicationContext());
duelAssistantManagement.addDuelAssistantListener(this);
YGOUtil.startDuelService(this);
}
//检查是否有刘海
private void checkNotch() {
ScreenUtil.findNotchInformation(HomeActivity.this, new ScreenUtil.FindNotchInformation() {
......@@ -196,6 +227,7 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie
@Override
protected void onDestroy() {
super.onDestroy();
duelAssistantManagement.removeDuelAssistantListener(this);
EventBus.getDefault().unregister(this);
}
......@@ -541,86 +573,6 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie
}
}
public void getClipboard() {
cm = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clipData = cm.getPrimaryClip();
if (clipData == null)
return;
ClipData.Item cs = clipData.getItemAt(0);
final String clipMessage;
if (cs.getText() != null) {
clipMessage = cs.getText().toString();
} else {
clipMessage = null;
}
//如果复制的内容为空则不执行下面的代码
if (TextUtils.isEmpty(clipMessage)) {
return;
}
clipData = ClipData.newPlainText("", "");
cm.setPrimaryClip(clipData);
//如果复制的内容是多行作为卡组去判断
if (clipMessage.contains("\n")) {
for (String s : DeckTextKey) {
//只要包含其中一个关键字就视为卡组
if (clipMessage.contains(s)) {
saveDeck(clipMessage, false);
return;
}
}
return;
}
//如果是卡组url
int deckStart = clipMessage.indexOf(DECK_URL_PREFIX);
if (deckStart != -1) {
saveDeck(clipMessage.substring(deckStart + DECK_URL_PREFIX.length(), clipMessage.length()), true);
return;
}
int start = -1;
int end = -1;
String passwordPrefixKey = null;
for (String s : passwordPrefix) {
start = clipMessage.indexOf(s);
passwordPrefixKey = s;
if (start != -1) {
break;
}
}
if (start != -1) {
//如果密码含有空格,则以空格结尾
end = clipMessage.indexOf(" ", start);
//如果不含有空格则取片尾所有
if (end == -1) {
end = clipMessage.length();
} else {
//如果只有密码前缀而没有密码内容则不跳转
if (end - start == passwordPrefixKey.length())
return;
}
QuickjoinRoom(clipMessage, start, end);
} else {
for (String s : cardSearchKey) {
int cardSearchStart = clipMessage.indexOf(s);
if (cardSearchStart != -1) {
//卡查内容
cardSearchMessage = clipMessage.substring(cardSearchStart + s.length(), clipMessage.length());
//如果复制的文本里带?号后面没有内容则不跳转
if (TextUtils.isEmpty(cardSearchMessage)) {
return;
}
//如果卡查内容包含“=”并且复制的内容包含“.”不卡查
if (cardSearchMessage.contains("=") && clipMessage.contains(".")) {
return;
}
Intent intent = new Intent(this, CardSearchAcitivity.class);
intent.putExtra(CardSearchAcitivity.SEARCH_MESSAGE, cardSearchMessage);
startActivity(intent);
}
}
}
}
private void saveDeck(String deckMessage, boolean isUrl) {
DialogPlus dialog = new DialogPlus(this);
dialog.setTitle(R.string.question);
......@@ -657,19 +609,18 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie
});
}
private void QuickjoinRoom(String ss, int start, int end) {
final String password = ss.substring(start, ss.length());
private void QuickjoinRoom(String password) {
DialogPlus dialog = new DialogPlus(this);
dialog.setTitle(R.string.question);
dialog.setMessage(getString(R.string.quick_join) + password + "\"");
dialog.setMessageGravity(Gravity.CENTER_HORIZONTAL);
dialog.setLeftButtonText(R.string.Cancel);
dialog.setRightButtonText(R.string.join);
dialog.setRightButtonText(R.string.Cancel);
dialog.setLeftButtonText(R.string.join);
dialog.show();
dialog.setLeftButtonListener((dlg, s) -> {
dialog.setRightButtonListener((dlg, s) -> {
dialog.dismiss();
});
dialog.setRightButtonListener((dlg, s) -> {
dialog.setLeftButtonListener((dlg, s) -> {
dialog.dismiss();
ServerListAdapter mServerListAdapter = new ServerListAdapter(this);
ServerListManager mServerListManager = new ServerListManager(this, mServerListAdapter);
......
......@@ -30,7 +30,9 @@ import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.ComponentUtils;
import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.NetUtils;
import cn.garymb.ygomobile.utils.PermissionUtil;
import cn.garymb.ygomobile.utils.YGOUtil;
import com.ourygo.assistant.util.PermissionUtil;
import static cn.garymb.ygomobile.Constants.ACTION_RELOAD;
import static cn.garymb.ygomobile.Constants.NETWORK_IMAGE;
......@@ -133,14 +135,14 @@ public class MainActivity extends HomeActivity {
@Override
public void onDismiss(DialogInterface dialogInterface) {
if (AppsSettings.get().isServiceDuelAssistant() && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q)
PermissionUtil.isServicePermission(MainActivity.this, true);
YGOUtil.isServicePermission(MainActivity.this, true);
}
});
dialog.show();
}
} else {
if (AppsSettings.get().isServiceDuelAssistant() && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q)
PermissionUtil.isServicePermission(MainActivity.this, true);
YGOUtil.isServicePermission(MainActivity.this, true);
getGameUriManager().doIntent(getIntent());
}
......
package cn.garymb.ygomobile.utils;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import androidx.core.app.NotificationManagerCompat;
import cn.garymb.ygomobile.App;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
public class PermissionUtil {
//判断应用是否开启了通知权限
public static boolean isNotificationListenerEnabled(Context context) {
return NotificationManagerCompat.from(context).areNotificationsEnabled();
}
public static DialogPlus isNotificationPermission(Context context){
if(!isNotificationListenerEnabled(context)){
DialogPlus dialog = new DialogPlus(context);
dialog.setTitle(R.string.tip);
dialog.setMessage(R.string.EXPAND_STATUS_BAR);
dialog.setLeftButtonText(R.string.to_open);
dialog.setRightButtonText(R.string.Cancel);
dialog.setLeftButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// 根据isOpened结果,判断是否需要提醒用户跳转AppInfo页面,去打开App通知权限
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", App.get().getPackageName(), null);
intent.setData(uri);
context.startActivity(intent);
dialog.dismiss();
}
});
dialog.setRightButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialog.dismiss();
}
});
// dialog.show();
return dialog;
}
return null;
}
//判断是否有悬浮窗权限
public static boolean isServicePermission(Context context, boolean isIntentPermission) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(context)) {
if (isIntentPermission) {
DialogPlus dialog = new DialogPlus(context);
dialog.setTitle(R.string.tip);
dialog.setMessage(R.string.SYSTEM_ALERT_WINDOW);
dialog.setLeftButtonText(R.string.to_open);
dialog.setRightButtonText(R.string.Cancel);
dialog.setLeftButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
context.startActivity(new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:"+context.getPackageName())));
dialog.dismiss();
}
});
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
DialogPlus dialogPlus= isNotificationPermission(context);
if (dialogPlus!=null)
dialog.show();
}
});
dialog.setRightButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialog.dismiss();
}
});
dialog.show();
}
return false;
}
}
return true;
}
}
......@@ -4,19 +4,22 @@ import android.app.Activity;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.content.DialogInterface;
import android.os.Build;
import android.util.Log;
import android.view.View;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;
import androidx.core.content.ContextCompat;
import com.ourygo.assistant.util.PermissionUtil;
import com.ourygo.assistant.util.Util;
import cn.garymb.ygomobile.App;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import com.ourygo.assistant.service.DuelAssistantService;
import com.ourygo.assistant.util.Util;
public class YGOUtil {
......@@ -25,20 +28,22 @@ public class YGOUtil {
Toast.makeText(App.get(), message, Toast.LENGTH_SHORT).show();
}
public static int c(int colorId){
return ContextCompat.getColor(App.get(),colorId);
public static int c(int colorId) {
return ContextCompat.getColor(App.get(), colorId);
}
public static String s(int stringId){
public static String s(int stringId) {
return App.get().getResources().getString(stringId);
}
/**
* 根据卡密获取高清图下载地址
* @param code 卡密
* @return 高清图url
*
* @param code 卡密
* @return 高清图url
*/
public static String getCardImageDetailUrl(int code){
return "https://code.mycard.moe/fallenstardust/ygoimage/raw/master/"+code+".jpg";
public static String getCardImageDetailUrl(int code) {
return "https://cdn01.moecube.com/images/ygomobile/" + code + ".jpg";
}
......@@ -58,15 +63,86 @@ public class YGOUtil {
//复制字符串到剪贴板
public static void copyMessage(Context context, String message) {
ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
if (cmb==null)
if (cmb == null)
return;
cmb.setPrimaryClip(ClipData.newPlainText(null, message));//复制命令
}
public static void startDuelService(Context context) {
if (AppsSettings.get().isServiceDuelAssistant()) {
Util.startDuelService(context);
if (!Util.startDuelService(context)) {
getNotificationPermissionDialog(context).show();
}
}
}
//判断是否有悬浮窗权限
public static boolean isServicePermission(Context context, boolean isIntentPermission) {
if (!PermissionUtil.isServicePermission(context)) {
if (isIntentPermission) {
DialogPlus dialog = new DialogPlus(context);
dialog.setTitle(R.string.tip);
dialog.setMessage(R.string.SYSTEM_ALERT_WINDOW);
dialog.setLeftButtonText(R.string.to_open);
dialog.setRightButtonText(R.string.Cancel);
dialog.setLeftButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialog.dismiss();
context.startActivity(Util.getServicePermissionIntent(context));
}
});
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialogInterface) {
Log.e("YGOUtil","当前版本"+Build.VERSION.SDK_INT);
Log.e("YGOUtil","o的版本"+Build.VERSION_CODES.O);
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.O&&!PermissionUtil.isNotificationListenerEnabled(context)) {
getNotificationPermissionDialog(context).show();
}
}
});
dialog.setRightButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialog.dismiss();
}
});
dialog.show();
}
return false;
}
return true;
}
public static DialogPlus getNotificationPermissionDialog(Context context) {
DialogPlus dialog = new DialogPlus(context);
dialog.setTitle(R.string.tip);
dialog.setMessage(R.string.EXPAND_STATUS_BAR);
dialog.setLeftButtonText(R.string.to_open);
dialog.setRightButtonText(R.string.Cancel);
dialog.setLeftButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// 根据isOpened结果,判断是否需要提醒用户跳转AppInfo页面,去打开App通知权限
context.startActivity(Util.getNotificationPermissionInitent(context));
dialog.dismiss();
}
});
dialog.setRightButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
dialog.dismiss();
}
});
return dialog;
}
}
package com.ourygo.assistant.base.listener;
public interface OnClipChangedListener {
void onClipChanged(String clipMessge,boolean isCheck,int id);
}
package com.ourygo.assistant.base.listener;
public interface OnDuelAssistantListener {
void onJoinRoom(String password,int id);
void onCardSearch(String key,int id);
void onSaveDeck(String message,boolean isUrl,int id);
boolean isListenerEffective();
}
\ No newline at end of file
package com.ourygo.assistant.util;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.text.TextUtils;
import com.ourygo.assistant.base.listener.OnClipChangedListener;
public class ClipManagement implements ClipboardManager.OnPrimaryClipChangedListener {
public static final int ID_CLIP_LISTENER=-1;
private static final ClipManagement ourInstance = new ClipManagement();
private ClipboardManager clipboardManager;
private OnClipChangedListener onClipChangedListener;
private ClipManagement() {
}
public static ClipManagement getInstance() {
return ourInstance;
}
public void setOnClipChangedListener(OnClipChangedListener onClipChangedListener) {
this.onClipChangedListener = onClipChangedListener;
}
public void startClipboardListener(Context context) {
if (clipboardManager == null)
clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
if (clipboardManager == null)
return;
clipboardManager.addPrimaryClipChangedListener(this);
}
public void removeClipboardListener() {
if (clipboardManager == null)
return;
clipboardManager.removePrimaryClipChangedListener(this);
}
//获取剪贴板内容
public String getClipMessage() {
ClipData clipData = clipboardManager.getPrimaryClip();
if (clipData == null)
return null;
return clipData.getItemAt(0).getText().toString();
}
public void clear(){
removeClipboardListener();
onClipChangedListener=null;
}
@Override
public void onPrimaryClipChanged() {
final String clipMessage = getClipMessage();
//如果复制的内容为空则不执行下面的代码
if (TextUtils.isEmpty(clipMessage)) {
return;
}
if (onClipChangedListener!=null)
onClipChangedListener.onClipChanged(clipMessage,false,ID_CLIP_LISTENER);
}
public void onPrimaryClipChanged(boolean isCheck,int id) {
final String clipMessage = getClipMessage();
//如果复制的内容为空则不执行下面的代码
if (TextUtils.isEmpty(clipMessage)) {
return;
}
if (onClipChangedListener!=null)
onClipChangedListener.onClipChanged(clipMessage,isCheck,id);
}
}
package com.ourygo.assistant.util;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import com.ourygo.assistant.base.listener.OnClipChangedListener;
import com.ourygo.assistant.base.listener.OnDuelAssistantListener;
import java.util.ArrayList;
import java.util.List;
public class DuelAssistantManagement implements OnClipChangedListener {
private static final DuelAssistantManagement ourInstance = new DuelAssistantManagement();
private Context context;
private List<OnDuelAssistantListener> onDuelAssistantListenerList;
private ClipManagement clipManagement;
//卡查内容
private String cardSearchMessage = "";
private String lastMessage = "";
private DuelAssistantManagement() {
onDuelAssistantListenerList = new ArrayList<>();
}
public static DuelAssistantManagement getInstance() {
return ourInstance;
}
public void init(Context context) {
this.context = context;
//初始化剪贴板监听
initClipListener();
}
public void addDuelAssistantListener(OnDuelAssistantListener onDuelAssistantListener) {
if (!onDuelAssistantListenerList.contains(onDuelAssistantListener))
onDuelAssistantListenerList.add(onDuelAssistantListener);
}
public void removeDuelAssistantListener(OnDuelAssistantListener onDuelAssistantListener) {
onDuelAssistantListenerList.remove(onDuelAssistantListener);
}
public List<OnDuelAssistantListener> getOnDuelAssistantListenerList() {
return onDuelAssistantListenerList;
}
private void initClipListener() {
clipManagement = ClipManagement.getInstance();
clipManagement.startClipboardListener(context);
clipManagement.setOnClipChangedListener(this);
}
public void clear() {
context = null;
lastMessage = "";
cardSearchMessage = "";
onDuelAssistantListenerList.clear();
}
public String getCardSearchMessage() {
return cardSearchMessage;
}
public boolean deckCheck(String message, int id) {
//如果复制的内容是多行作为卡组去判断
if (message.contains("\n")) {
for (String s : Record.CARD_SEARCH_KEY) {
//只要包含其中一个关键字就视为卡组
if (message.contains(s)) {
onSaveDeck(message, false, id);
return true;
}
}
return true;
}
//如果是卡组url
int deckStart = message.indexOf(Record.DECK_URL_PREFIX);
if (deckStart != -1) {
onSaveDeck(message.substring(deckStart + Record.DECK_URL_PREFIX.length()), true, id);
return true;
}
return false;
}
public boolean roomCheck(String message, int id) {
int start = -1;
int end = -1;
String passwordPrefixKey = null;
for (String s : Record.PASSWORD_PREFIX) {
start = message.indexOf(s);
passwordPrefixKey = s;
if (start != -1) {
break;
}
}
if (start != -1) {
//如果密码含有空格,则以空格结尾
end = message.indexOf(" ", start);
//如果不含有空格则取片尾所有
if (end == -1) {
end = message.length();
} else {
//如果只有密码前缀而没有密码内容则不跳转
if (end - start == passwordPrefixKey.length())
return false;
}
//如果有悬浮窗权限再显示
if (PermissionUtil.isServicePermission(context)) {
onJoinRoom(message.substring(start, end), id);
return true;
}
}
return false;
}
public boolean cardSearchCheck(String message, int id) {
for (String s : Record.CARD_SEARCH_KEY) {
int cardSearchStart = message.indexOf(s);
if (cardSearchStart != -1) {
//卡查内容
cardSearchMessage = message.substring(cardSearchStart + s.length(), message.length());
//如果复制的文本里带?号后面没有内容则不跳转
if (TextUtils.isEmpty(cardSearchMessage)) {
return false;
}
//如果卡查内容包含“=”并且复制的内容包含“.”不卡查
if (cardSearchMessage.contains("=") && message.contains(".")) {
return false;
}
onCardSearch(cardSearchMessage, id);
return true;
}
}
return false;
}
private void onJoinRoom(String password, int id) {
int i = 0;
while (i < onDuelAssistantListenerList.size()) {
OnDuelAssistantListener onDuelAssistantListener = onDuelAssistantListenerList.get(i);
if (onDuelAssistantListener.isListenerEffective()) {
onDuelAssistantListener.onJoinRoom(password, id);
i++;
} else {
onDuelAssistantListenerList.remove(i);
}
}
}
private void onCardSearch(String key, int id) {
int i = 0;
while (i < onDuelAssistantListenerList.size()) {
OnDuelAssistantListener onDuelAssistantListener = onDuelAssistantListenerList.get(i);
if (onDuelAssistantListener.isListenerEffective()) {
onDuelAssistantListener.onCardSearch(key, id);
i++;
} else {
onDuelAssistantListenerList.remove(i);
}
}
}
public void onSaveDeck(String message, boolean isUrl, int id) {
int i = 0;
while (i < onDuelAssistantListenerList.size()) {
OnDuelAssistantListener onDuelAssistantListener = onDuelAssistantListenerList.get(i);
if (onDuelAssistantListener.isListenerEffective()) {
onDuelAssistantListener.onSaveDeck(message, isUrl, id);
i++;
} else {
onDuelAssistantListenerList.remove(i);
}
}
}
@Override
public void onClipChanged(String clipMessage, boolean isCheck, int id) {
if (isCheck)
if (clipMessage.equals(lastMessage))
return;
if (deckCheck(clipMessage, id)) {
lastMessage = clipMessage;
} else if (roomCheck(clipMessage, id)) {
lastMessage = clipMessage;
} else if (cardSearchCheck(clipMessage, id))
lastMessage = clipMessage;
}
public void checkClip(int id) {
clipManagement.onPrimaryClipChanged(true, id);
}
}
package com.ourygo.assistant.util;
import android.content.Context;
import android.os.Build;
import android.provider.Settings;
import androidx.core.app.NotificationManagerCompat;
public class PermissionUtil {
//判断应用是否开启了通知权限
public static boolean isNotificationListenerEnabled(Context context) {
return NotificationManagerCompat.from(context).areNotificationsEnabled();
}
//判断是否有悬浮窗权限
public static boolean isServicePermission(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (!Settings.canDrawOverlays(context))
return false;
}
return true;
}
}
package com.ourygo.assistant.util;
import cn.garymb.ygomobile.Constants;
public class Record {
//卡查关键字
public static final String[] CARD_SEARCH_KEY = new String[]{"?", "?"};
//加房关键字
public static final String[] PASSWORD_PREFIX = {
"M,", "m,",
"T,",
"PR,", "pr,",
"AI,", "ai,",
"LF2,", "lf2,",
"M#", "m#",
"T#", "t#",
"PR#", "pr#",
"NS#", "ns#",
"S#", "s#",
"AI#", "ai#",
"LF2#", "lf2#",
"R#", "r#"
};
//卡组复制
public static final String[] DeckTextKey = new String[]{"#main"};
//卡组url前缀
public static final String DECK_URL_PREFIX = "ygo://deck";
}
package com.ourygo.assistant.util;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Application;
import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import com.ourygo.assistant.service.DuelAssistantService;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.utils.PermissionUtil;
import java.util.List;
public class Util {
public static void startDuelService(Context context) {
public static boolean startDuelService(Context context) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
DialogPlus dialogPlus = PermissionUtil.isNotificationPermission(context);
if (dialogPlus == null)
if (PermissionUtil.isNotificationListenerEnabled(context))
context.startForegroundService(new Intent(context, DuelAssistantService.class));
else
dialogPlus.show();
return false;
} else {
context.startService(new Intent(context, DuelAssistantService.class));
}
}
return true;
}
public static Intent getNotificationPermissionInitent(Context context){
Intent intent = new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", context.getPackageName(), null);
intent.setData(uri);
return intent;
}
public static Intent getServicePermissionIntent(Context context){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
return new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION, Uri.parse("package:"+context.getPackageName()));
}
return null;
}
public static void duelIntent(Context context, String ip, int port, String name, String password) {
Intent intent1 = new Intent("ygomobile.intent.action.GAME");
intent1.putExtra("host", ip);
intent1.putExtra("port", port);
intent1.putExtra("user", name);
intent1.putExtra("room", password);
//intent1.setPackage("cn.garymb.ygomobile");
intent1.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent1);
}
public static boolean isServiceExisted(Context context, String className) {
ActivityManager activityManager = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> serviceList = activityManager
.getRunningServices(Integer.MAX_VALUE);
if (!(serviceList.size() > 0)) {
return false;
}
for (int i = 0; i < serviceList.size(); i++) {
ActivityManager.RunningServiceInfo serviceInfo = serviceList.get(i);
ComponentName serviceName = serviceInfo.service;
if (serviceName.getClassName().equals(className)) {
return true;
}
}
return false;
}
public static boolean isContextExisted(Context context) {
if (context != null) {
if (context instanceof Activity) {
if (!((Activity)context).isFinishing()) {
return true;
}
} else if (context instanceof Service) {
if (isServiceExisted(context, context.getClass().getName())) {
return true;
}
} else if (context instanceof Application) {
return true;
}
}
return false;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment