Commit e33714f1 authored by feihuaduo's avatar feihuaduo

修改高清卡图下载地址

代码优化
parent 6cd0c10e
...@@ -6,11 +6,13 @@ import android.content.Context; ...@@ -6,11 +6,13 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.pm.ApplicationInfo; import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.util.Log;
import android.widget.ImageView; import android.widget.ImageView;
import androidx.appcompat.app.AppCompatDelegate; import androidx.appcompat.app.AppCompatDelegate;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.ourygo.assistant.util.DuelAssistantManagement;
import com.tencent.bugly.Bugly; import com.tencent.bugly.Bugly;
import com.tencent.bugly.beta.Beta; import com.tencent.bugly.beta.Beta;
import com.yuyh.library.imgsel.ISNav; import com.yuyh.library.imgsel.ISNav;
...@@ -35,6 +37,8 @@ public class App extends GameApplication { ...@@ -35,6 +37,8 @@ public class App extends GameApplication {
initBugly(); initBugly();
} }
@Override @Override
public NativeInitOptions getNativeInitOptions() { public NativeInitOptions getNativeInitOptions() {
NativeInitOptions options = AppsSettings.get().getNativeInitOptions(); NativeInitOptions options = AppsSettings.get().getNativeInitOptions();
......
...@@ -393,7 +393,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -393,7 +393,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
public void onDownloadFailed(Exception e) { public void onDownloadFailed(Exception e) {
//下载失败后删除下载的文件 //下载失败后删除下载的文件
FileUtils.deleteFile(file); FileUtils.deleteFile(file);
downloadCardImage(code, file); // downloadCardImage(code, file);
Message message = new Message(); Message message = new Message();
message.what = TYPE_DOWNLOAD_CARD_IMAGE_EXCEPTION; message.what = TYPE_DOWNLOAD_CARD_IMAGE_EXCEPTION;
......
package cn.garymb.ygomobile.ui.cards; package cn.garymb.ygomobile.ui.cards;
import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.text.TextUtils; import android.text.TextUtils;
import android.view.Gravity; import android.view.Gravity;
...@@ -18,6 +17,7 @@ import androidx.recyclerview.widget.FastScrollLinearLayoutManager; ...@@ -18,6 +17,7 @@ import androidx.recyclerview.widget.FastScrollLinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide; import com.bumptech.glide.Glide;
import com.ourygo.assistant.util.DuelAssistantManagement;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
...@@ -29,10 +29,8 @@ import cn.garymb.ygomobile.loader.ImageLoader; ...@@ -29,10 +29,8 @@ import cn.garymb.ygomobile.loader.ImageLoader;
import cn.garymb.ygomobile.ui.activities.BaseActivity; import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.activities.WebActivity; import cn.garymb.ygomobile.ui.activities.WebActivity;
import cn.garymb.ygomobile.ui.adapters.CardListAdapter; 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.AOnGestureListener;
import cn.garymb.ygomobile.ui.plus.DialogPlus; import cn.garymb.ygomobile.ui.plus.DialogPlus;
import com.ourygo.assistant.service.DuelAssistantService;
import cn.garymb.ygomobile.ui.plus.VUiKit; import cn.garymb.ygomobile.ui.plus.VUiKit;
import ocgcore.DataManager; import ocgcore.DataManager;
import ocgcore.LimitManager; import ocgcore.LimitManager;
...@@ -43,30 +41,31 @@ import ocgcore.data.LimitList; ...@@ -43,30 +41,31 @@ import ocgcore.data.LimitList;
class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack { class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack {
protected DrawerLayout mDrawerlayout; protected DrawerLayout mDrawerlayout;
private RecyclerView mListView;
protected CardSearcher mCardSelector; protected CardSearcher mCardSelector;
protected CardListAdapter mCardListAdapater; protected CardListAdapter mCardListAdapater;
protected CardLoader mCardLoader; protected CardLoader mCardLoader;
protected boolean isLoad = false; protected boolean isLoad = false;
protected StringManager mStringManager = DataManager.get().getStringManager(); protected StringManager mStringManager = DataManager.get().getStringManager();
protected LimitManager mLimitManager = DataManager.get().getLimitManager(); protected LimitManager mLimitManager = DataManager.get().getLimitManager();
private RecyclerView mListView;
private ImageLoader mImageLoader; private ImageLoader mImageLoader;
private String intentSearchMessage; private String intentSearchMessage;
private boolean isFirstCardSearch = true; private boolean isFirstCardSearch = true;
private String currentCardSearchMessage = ""; private String currentCardSearchMessage = "";
private DuelAssistantManagement duelAssistantManagement;
private CardDetail mCardDetail;
private DialogPlus mDialog;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
setContentView(R.layout.activity_search); setContentView(R.layout.activity_search);
duelAssistantManagement = DuelAssistantManagement.getInstance();
if (TextUtils.isEmpty(getIntent().getStringExtra(CardSearchAcitivity.SEARCH_MESSAGE))) { if (TextUtils.isEmpty(getIntent().getStringExtra(CardSearchAcitivity.SEARCH_MESSAGE))) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
currentCardSearchMessage = HomeActivity.cardSearchMessage; currentCardSearchMessage = duelAssistantManagement.getCardSearchMessage();
} else {
currentCardSearchMessage = DuelAssistantService.cardSearchMessage;
}
} }
Toolbar toolbar = $(R.id.toolbar); Toolbar toolbar = $(R.id.toolbar);
setSupportActionBar(toolbar); setSupportActionBar(toolbar);
...@@ -111,23 +110,17 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack ...@@ -111,23 +110,17 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack
@Override @Override
protected void onRestart() { protected void onRestart() {
super.onRestart(); super.onRestart();
if (!isFirstCardSearch && !currentCardSearchMessage.equals(HomeActivity.cardSearchMessage)) { if (!isFirstCardSearch && !currentCardSearchMessage.equals(duelAssistantManagement.getCardSearchMessage())) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
currentCardSearchMessage = HomeActivity.cardSearchMessage; currentCardSearchMessage = duelAssistantManagement.getCardSearchMessage();
} else {
currentCardSearchMessage = DuelAssistantService.cardSearchMessage;
}
intentSearch(); intentSearch();
} }
} }
private void intentSearch() { private void intentSearch() {
// intentSearchMessage=getIntent().getStringExtra(CardSearchAcitivity.SEARCH_MESSAGE); // intentSearchMessage=getIntent().getStringExtra(CardSearchAcitivity.SEARCH_MESSAGE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { currentCardSearchMessage = duelAssistantManagement.getCardSearchMessage();
currentCardSearchMessage = HomeActivity.cardSearchMessage;
} else {
currentCardSearchMessage = DuelAssistantService.cardSearchMessage;
}
} }
protected void setListeners() { protected void setListeners() {
...@@ -269,9 +262,6 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack ...@@ -269,9 +262,6 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack
} }
private CardDetail mCardDetail;
private DialogPlus mDialog;
private boolean isShowCard() { private boolean isShowCard() {
return mDialog != null && mDialog.isShowing(); return mDialog != null && mDialog.isShowing();
} }
......
...@@ -35,6 +35,10 @@ import com.google.android.material.navigation.NavigationView; ...@@ -35,6 +35,10 @@ import com.google.android.material.navigation.NavigationView;
import com.nightonke.boommenu.BoomButtons.BoomButton; import com.nightonke.boommenu.BoomButtons.BoomButton;
import com.nightonke.boommenu.BoomButtons.TextOutsideCircleButton; import com.nightonke.boommenu.BoomButtons.TextOutsideCircleButton;
import com.nightonke.boommenu.BoomMenuButton; 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.bugly.beta.Beta;
import com.tencent.smtt.sdk.QbSdk; import com.tencent.smtt.sdk.QbSdk;
import com.tubb.smrv.SwipeMenuRecyclerView; import com.tubb.smrv.SwipeMenuRecyclerView;
...@@ -81,30 +85,17 @@ import cn.garymb.ygomobile.utils.YGOUtil; ...@@ -81,30 +85,17 @@ import cn.garymb.ygomobile.utils.YGOUtil;
import static cn.garymb.ygomobile.Constants.ASSET_SERVER_LIST; import static cn.garymb.ygomobile.Constants.ASSET_SERVER_LIST;
public abstract class HomeActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener { public abstract class HomeActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener, OnDuelAssistantListener {
//卡查关键字
public static final String[] cardSearchKey = new String[]{"?", "?"}; private static final int ID_MAINACTIVITY = 0;
//加房关键字
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 = "";
protected SwipeMenuRecyclerView mServerList; protected SwipeMenuRecyclerView mServerList;
long exitLasttime = 0; long exitLasttime = 0;
ShimmerTextView tv; ShimmerTextView tv;
Shimmer shimmer; Shimmer shimmer;
private ServerListAdapter mServerListAdapter; private ServerListAdapter mServerListAdapter;
private ServerListManager mServerListManager; private ServerListManager mServerListManager;
private ClipboardManager cm; private DuelAssistantManagement duelAssistantManagement;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
...@@ -151,8 +142,8 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie ...@@ -151,8 +142,8 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie
TrPay.getInstance(HomeActivity.this).initPaySdk("e1014da420ea4405898c01273d6731b6", "YGOMobile"); TrPay.getInstance(HomeActivity.this).initPaySdk("e1014da420ea4405898c01273d6731b6", "YGOMobile");
//check update //check update
Beta.checkUpgrade(false, false); Beta.checkUpgrade(false, false);
//DuelAssistantService //初始化决斗助手
YGOUtil.startDuelService(this); initDuelAssistant();
//萌卡 //萌卡
StartMycard(); StartMycard();
checkNotch(); checkNotch();
...@@ -164,20 +155,60 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie ...@@ -164,20 +155,60 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie
BacktoDuel(); BacktoDuel();
} }
@Override private void duelAssistantCheck() {
protected void onStart() { if (AppsSettings.get().isServiceDuelAssistant()) {
super.onStart();
if (AppsSettings.get().isServiceDuelAssistant() && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
Handler handler = new Handler(); Handler handler = new Handler();
handler.postDelayed(new Runnable() { handler.postDelayed(new Runnable() {
@Override @Override
public void run() { public void run() {
getClipboard(); duelAssistantManagement.checkClip(ID_MAINACTIVITY);
} }
}, 500); }, 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() { private void checkNotch() {
ScreenUtil.findNotchInformation(HomeActivity.this, new ScreenUtil.FindNotchInformation() { ScreenUtil.findNotchInformation(HomeActivity.this, new ScreenUtil.FindNotchInformation() {
...@@ -196,6 +227,7 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie ...@@ -196,6 +227,7 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie
@Override @Override
protected void onDestroy() { protected void onDestroy() {
super.onDestroy(); super.onDestroy();
duelAssistantManagement.removeDuelAssistantListener(this);
EventBus.getDefault().unregister(this); EventBus.getDefault().unregister(this);
} }
...@@ -541,86 +573,6 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie ...@@ -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) { private void saveDeck(String deckMessage, boolean isUrl) {
DialogPlus dialog = new DialogPlus(this); DialogPlus dialog = new DialogPlus(this);
dialog.setTitle(R.string.question); dialog.setTitle(R.string.question);
...@@ -657,19 +609,18 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie ...@@ -657,19 +609,18 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie
}); });
} }
private void QuickjoinRoom(String ss, int start, int end) { private void QuickjoinRoom(String password) {
final String password = ss.substring(start, ss.length());
DialogPlus dialog = new DialogPlus(this); DialogPlus dialog = new DialogPlus(this);
dialog.setTitle(R.string.question); dialog.setTitle(R.string.question);
dialog.setMessage(getString(R.string.quick_join) + password + "\""); dialog.setMessage(getString(R.string.quick_join) + password + "\"");
dialog.setMessageGravity(Gravity.CENTER_HORIZONTAL); dialog.setMessageGravity(Gravity.CENTER_HORIZONTAL);
dialog.setLeftButtonText(R.string.Cancel); dialog.setRightButtonText(R.string.Cancel);
dialog.setRightButtonText(R.string.join); dialog.setLeftButtonText(R.string.join);
dialog.show(); dialog.show();
dialog.setLeftButtonListener((dlg, s) -> { dialog.setRightButtonListener((dlg, s) -> {
dialog.dismiss(); dialog.dismiss();
}); });
dialog.setRightButtonListener((dlg, s) -> { dialog.setLeftButtonListener((dlg, s) -> {
dialog.dismiss(); dialog.dismiss();
ServerListAdapter mServerListAdapter = new ServerListAdapter(this); ServerListAdapter mServerListAdapter = new ServerListAdapter(this);
ServerListManager mServerListManager = new ServerListManager(this, mServerListAdapter); ServerListManager mServerListManager = new ServerListManager(this, mServerListAdapter);
......
...@@ -30,7 +30,9 @@ import cn.garymb.ygomobile.ui.plus.VUiKit; ...@@ -30,7 +30,9 @@ import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.ComponentUtils; import cn.garymb.ygomobile.utils.ComponentUtils;
import cn.garymb.ygomobile.utils.IOUtils; import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.NetUtils; 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.ACTION_RELOAD;
import static cn.garymb.ygomobile.Constants.NETWORK_IMAGE; import static cn.garymb.ygomobile.Constants.NETWORK_IMAGE;
...@@ -133,14 +135,14 @@ public class MainActivity extends HomeActivity { ...@@ -133,14 +135,14 @@ public class MainActivity extends HomeActivity {
@Override @Override
public void onDismiss(DialogInterface dialogInterface) { public void onDismiss(DialogInterface dialogInterface) {
if (AppsSettings.get().isServiceDuelAssistant() && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) if (AppsSettings.get().isServiceDuelAssistant() && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q)
PermissionUtil.isServicePermission(MainActivity.this, true); YGOUtil.isServicePermission(MainActivity.this, true);
} }
}); });
dialog.show(); dialog.show();
} }
} else { } else {
if (AppsSettings.get().isServiceDuelAssistant() && Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) 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()); 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; ...@@ -4,19 +4,22 @@ import android.app.Activity;
import android.content.ClipData; import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.DialogInterface;
import android.os.Build; import android.os.Build;
import android.util.Log;
import android.view.View; import android.view.View;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
import android.widget.Toast; import android.widget.Toast;
import androidx.core.content.ContextCompat; 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.App;
import cn.garymb.ygomobile.AppsSettings; import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.plus.DialogPlus; import cn.garymb.ygomobile.ui.plus.DialogPlus;
import com.ourygo.assistant.service.DuelAssistantService;
import com.ourygo.assistant.util.Util;
public class YGOUtil { public class YGOUtil {
...@@ -25,20 +28,22 @@ public class YGOUtil { ...@@ -25,20 +28,22 @@ public class YGOUtil {
Toast.makeText(App.get(), message, Toast.LENGTH_SHORT).show(); Toast.makeText(App.get(), message, Toast.LENGTH_SHORT).show();
} }
public static int c(int colorId){ public static int c(int colorId) {
return ContextCompat.getColor(App.get(),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); return App.get().getResources().getString(stringId);
} }
/** /**
* 根据卡密获取高清图下载地址 * 根据卡密获取高清图下载地址
*
* @param code 卡密 * @param code 卡密
* @return 高清图url * @return 高清图url
*/ */
public static String getCardImageDetailUrl(int code){ public static String getCardImageDetailUrl(int code) {
return "https://code.mycard.moe/fallenstardust/ygoimage/raw/master/"+code+".jpg"; return "https://cdn01.moecube.com/images/ygomobile/" + code + ".jpg";
} }
...@@ -58,15 +63,86 @@ public class YGOUtil { ...@@ -58,15 +63,86 @@ public class YGOUtil {
//复制字符串到剪贴板 //复制字符串到剪贴板
public static void copyMessage(Context context, String message) { public static void copyMessage(Context context, String message) {
ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
if (cmb==null) if (cmb == null)
return; return;
cmb.setPrimaryClip(ClipData.newPlainText(null, message));//复制命令 cmb.setPrimaryClip(ClipData.newPlainText(null, message));//复制命令
} }
public static void startDuelService(Context context) { public static void startDuelService(Context context) {
if (AppsSettings.get().isServiceDuelAssistant()) { 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; 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.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.provider.Settings;
import com.ourygo.assistant.service.DuelAssistantService; import com.ourygo.assistant.service.DuelAssistantService;
import cn.garymb.ygomobile.ui.plus.DialogPlus; import java.util.List;
import cn.garymb.ygomobile.utils.PermissionUtil;
public class Util { 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.Q) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
DialogPlus dialogPlus = PermissionUtil.isNotificationPermission(context); if (PermissionUtil.isNotificationListenerEnabled(context))
if (dialogPlus == null)
context.startForegroundService(new Intent(context, DuelAssistantService.class)); context.startForegroundService(new Intent(context, DuelAssistantService.class));
else else
dialogPlus.show(); return false;
} else { } else {
context.startService(new Intent(context, DuelAssistantService.class)); 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