Commit a12cab99 authored by feihuaduo's avatar feihuaduo

主界面剪贴板检测

parent 4cf8824c
......@@ -158,16 +158,16 @@
android:screenOrientation="portrait"
android:theme="@style/AppTheme" />
<activity
android:name="cn.garymb.ygomobile.ui.mycard.MyCardActivity"
android:name="cn.garymb.ygomobile.mycard.MyCardActivity"
android:configChanges="orientation|keyboardHidden|navigation|screenSize"
android:launchMode="singleTop"
android:theme="@style/AppTheme.Mycard"
android:windowSoftInputMode="stateAlwaysHidden|adjustResize" />
<activity
android:name="cn.garymb.ygomobile.ui.mycard.mcchat.McchatActivity"
android:name="cn.garymb.ygomobile.mycard.mcchat.ui.activity.McChatActivity"
android:label="@string/app_name"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity android:name="cn.garymb.ygomobile.ui.mycard.mcchat.SplashActivity" />
<activity android:name="cn.garymb.ygomobile.mycard.mcchat.ui.activity.ChatSplashActivity" />
<activity android:name="cn.garymb.ygomobile.ui.activities.FileLogActivity" />
<activity android:name="cn.garymb.ygomobile.ui.activities.PermissionsActivity" />
......@@ -194,7 +194,7 @@
<!-- 为防止Service被系统回收,可以尝试通过提高服务的优先级解决,1000是最高优先级,数字越小,优先级越低 -->
<!--android:priority="1000"-->
<service
android:name="cn.garymb.ygomobile.ui.plus.ServiceDuelAssistant"
android:name="cn.garymb.ygomobile.ourygo.service.DuelAssistantService"
android:priority="1000" />
</application>
......
package cn.garymb.ygomobile.ui.mycard;
package cn.garymb.ygomobile.mycard;
import android.annotation.SuppressLint;
import android.app.Activity;
......
package cn.garymb.ygomobile.ui.mycard;
package cn.garymb.ygomobile.mycard;
import android.annotation.SuppressLint;
import android.annotation.TargetApi;
......@@ -38,7 +38,7 @@ import cn.garymb.ygomobile.lite.BuildConfig;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.cards.DeckManagerActivity;
import cn.garymb.ygomobile.ui.mycard.mcchat.SplashActivity;
import cn.garymb.ygomobile.mycard.mcchat.ui.activity.ChatSplashActivity;
public class MyCardActivity extends BaseActivity implements MyCard.MyCardListener, NavigationView.OnNavigationItemSelectedListener {
......@@ -310,7 +310,7 @@ public class MyCardActivity extends BaseActivity implements MyCard.MyCardListene
mWebViewPlus.loadUrl(mMyCard.getBBSUrl());
break;
case R.id.action_chat:
startActivity(new Intent(MyCardActivity.this, SplashActivity.class));
startActivity(new Intent(MyCardActivity.this, ChatSplashActivity.class));
break;
default:
return false;
......
package cn.garymb.ygomobile.ui.mycard;
package cn.garymb.ygomobile.mycard;
import android.content.Context;
import android.util.AttributeSet;
......
package cn.garymb.ygomobile.ui.mycard;
package cn.garymb.ygomobile.mycard;
import android.annotation.SuppressLint;
import android.content.Context;
......
package cn.garymb.ygomobile.ui.mycard.mcchat.adapter;
package cn.garymb.ygomobile.mycard.mcchat.adapter;
import android.app.Activity;
import android.content.Context;
......@@ -16,10 +16,11 @@ import androidx.recyclerview.widget.RecyclerView;
import java.util.List;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.mycard.mcchat.ChatMessage;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.UserManagement;
import cn.garymb.ygomobile.ui.mycard.mcchat.util.ImageUtil;
import cn.garymb.ygomobile.ui.mycard.mcchat.util.Util;
import cn.garymb.ygomobile.mycard.mcchat.bean.ChatMessage;
import cn.garymb.ygomobile.mycard.mcchat.management.UserManagement;
import cn.garymb.ygomobile.mycard.mcchat.util.ImageUtil;
import cn.garymb.ygomobile.utils.YGOUtil;
import cn.garymb.ygomobile.utils.YGOUtil;
public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {
......@@ -84,8 +85,8 @@ public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {
@Override
public boolean onLongClick(View p1) {
Util.fzMessage(context, cm.getMessage());
Util.show(context, "已复制到剪贴板");
YGOUtil.copyMessage(context, cm.getMessage());
YGOUtil.show( "已复制到剪贴板");
// TODO: Implement this method
return true;
}
......@@ -94,7 +95,7 @@ public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ViewHolder> {
@Override
public void onClick(View p1) {
Util.closeKeyboard((Activity) context);
YGOUtil.closeKeyboard((Activity) context);
// TODO: Implement this method
}
});
......
package cn.garymb.ygomobile.ui.mycard.mcchat;
package cn.garymb.ygomobile.mycard.mcchat.base;
import org.jivesoftware.smack.packet.Message;
......
package cn.garymb.ygomobile.ui.mycard.mcchat;
package cn.garymb.ygomobile.mycard.mcchat.bean;
import org.jivesoftware.smack.packet.Message;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.ServiceManagement;
import cn.garymb.ygomobile.mycard.mcchat.management.ServiceManagement;
public class ChatMessage {
......
package cn.garymb.ygomobile.ui.mycard.mcchat.management;
package cn.garymb.ygomobile.mycard.mcchat.management;
import android.annotation.SuppressLint;
import android.os.Handler;
......@@ -22,9 +22,9 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import cn.garymb.ygomobile.ui.mycard.mcchat.ChatListener;
import cn.garymb.ygomobile.ui.mycard.mcchat.ChatMessage;
import cn.garymb.ygomobile.ui.mycard.mcchat.util.TaxiConnectionListener;
import cn.garymb.ygomobile.mycard.mcchat.base.ChatListener;
import cn.garymb.ygomobile.mycard.mcchat.bean.ChatMessage;
import cn.garymb.ygomobile.mycard.mcchat.util.TaxiConnectionListener;
import cn.garymb.ygomobile.utils.FileLogUtil;
public class ServiceManagement {
......
package cn.garymb.ygomobile.ui.mycard.mcchat.management;
package cn.garymb.ygomobile.mycard.mcchat.management;
public class UserManagement {
private static UserManagement um = new UserManagement();
......
package cn.garymb.ygomobile.ui.mycard.mcchat;
package cn.garymb.ygomobile.mycard.mcchat.ui.activity;
import android.annotation.SuppressLint;
import android.app.Activity;
......@@ -20,12 +20,13 @@ import org.jivesoftware.smack.XMPPException;
import java.io.IOException;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.mycard.MyCardActivity;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.ServiceManagement;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.UserManagement;
import cn.garymb.ygomobile.ui.mycard.mcchat.util.Util;
import cn.garymb.ygomobile.mycard.MyCardActivity;
import cn.garymb.ygomobile.mycard.mcchat.management.ServiceManagement;
import cn.garymb.ygomobile.mycard.mcchat.management.UserManagement;
public class SplashActivity extends Activity {
import cn.garymb.ygomobile.utils.YGOUtil;
public class ChatSplashActivity extends Activity {
ServiceManagement su;
ProgressBar sp_jz;
......@@ -43,10 +44,10 @@ public class SplashActivity extends Activity {
su.setIsConnected(false);
sp_jz.setVisibility(View.GONE);
sp_tv.setText(getString(R.string.logining_failed));
Util.show(SplashActivity.this, getString(R.string.failed_reason) + msg.obj);
YGOUtil.show(YGOUtil.s(R.string.failed_reason) + msg.obj);
break;
case 1:
startActivity(new Intent(SplashActivity.this, McchatActivity.class));
startActivity(new Intent(ChatSplashActivity.this, McChatActivity.class));
finish();
break;
case 2:
......@@ -65,7 +66,7 @@ public class SplashActivity extends Activity {
case 5:
/*sp_jz.setVisibility(View.GONE);
sp_tv.setText("用户名或密码为空");*/
startActivity(new Intent(SplashActivity.this, MyCardActivity.class));
startActivity(new Intent(ChatSplashActivity.this, MyCardActivity.class));
finish();
break;
......
package cn.garymb.ygomobile.ui.mycard.mcchat;
package cn.garymb.ygomobile.mycard.mcchat.ui.activity;
import android.app.Activity;
import android.os.Bundle;
......@@ -15,12 +15,13 @@ import androidx.recyclerview.widget.RecyclerView;
import org.jivesoftware.smack.packet.Message;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.mycard.mcchat.adapter.ChatAdapter;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.ServiceManagement;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.UserManagement;
import cn.garymb.ygomobile.ui.mycard.mcchat.util.Util;
import cn.garymb.ygomobile.mycard.mcchat.base.ChatListener;
import cn.garymb.ygomobile.mycard.mcchat.adapter.ChatAdapter;
import cn.garymb.ygomobile.mycard.mcchat.management.ServiceManagement;
import cn.garymb.ygomobile.mycard.mcchat.management.UserManagement;
import cn.garymb.ygomobile.utils.YGOUtil;
public class McchatActivity extends Activity implements ChatListener {
public class McChatActivity extends Activity implements ChatListener {
private EditText main_send_message;
private ImageButton main_send;
......@@ -85,7 +86,7 @@ public class McchatActivity extends Activity implements ChatListener {
su = ServiceManagement.getDx();
cadp = new ChatAdapter(this, su.getData());
su.addListener(this);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(McchatActivity.this, LinearLayoutManager.VERTICAL, false);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(McChatActivity.this, LinearLayoutManager.VERTICAL, false);
linearLayoutManager.setStackFromEnd(true); //关键 设置此项,当软键盘弹出时,布局会自动顶上去,在结合AndroidManifest.xml设置属性
main_rec.setLayoutManager(linearLayoutManager);
main_rec.setAdapter(cadp);
......@@ -101,13 +102,13 @@ public class McchatActivity extends Activity implements ChatListener {
public void onClick(View p1) {
String message = main_send_message.getText().toString().trim();
if (message.equals("")) {
Util.show(McchatActivity.this, getString(R.string.noting_to_send));
YGOUtil.show( getString(R.string.noting_to_send));
} else {
try {
su.sendMessage(message);
main_send_message.setText("");
} catch (Exception e) {
Util.show(McchatActivity.this, getString(R.string.sending_failed));
YGOUtil.show( getString(R.string.sending_failed));
}
}
// TODO: Implement this method
......
package cn.garymb.ygomobile.ui.mycard.mcchat.util;
package cn.garymb.ygomobile.mycard.mcchat.util;
import android.content.Context;
import android.graphics.ColorFilter;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.net.Uri;
import android.util.Log;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import java.util.HashMap;
import java.util.Map;
import cn.garymb.ygomobile.lite.R;
public class ImageUtil {
......
package cn.garymb.ygomobile.ui.mycard.mcchat.util;
package cn.garymb.ygomobile.mycard.mcchat.util;
/**
* 连接监听类
......@@ -12,8 +12,8 @@ import org.jivesoftware.smack.XMPPConnection;
import java.util.Timer;
import java.util.TimerTask;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.ServiceManagement;
import cn.garymb.ygomobile.ui.mycard.mcchat.management.UserManagement;
import cn.garymb.ygomobile.mycard.mcchat.management.ServiceManagement;
import cn.garymb.ygomobile.mycard.mcchat.management.UserManagement;
public class TaxiConnectionListener implements ConnectionListener {
......
package cn.garymb.ygomobile.ui.mycard.mcchat.view;
package cn.garymb.ygomobile.mycard.mcchat.view;
import android.content.Context;
import android.graphics.Bitmap;
......
package cn.garymb.ygomobile.ourygo.base;
public interface OnDuelClipBoardListener {
void onDeckCode(String deckCode,boolean isDebounce);
void onDeckUrl(String deckUrl,boolean isDebounce);
void onCardQuery(String cardSearchMessage,boolean isDebounce);
void onDuelPassword(String password,boolean isDebounce);
boolean isEffective();
}
package cn.garymb.ygomobile.ourygo.util;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
import java.util.ArrayList;
import java.util.List;
import cn.garymb.ygomobile.App;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.ourygo.base.OnDuelClipBoardListener;
public class DuelAssistantManagement {
private static final DuelAssistantManagement ourInstance = new DuelAssistantManagement();
private String lastMessage;
private String cardSearchMessage;
public static DuelAssistantManagement getInstance() {
return ourInstance;
}
//是否启动助手
private boolean isStart;
private boolean isListener;
private ClipboardManager clipboardManager;
//其他单独监听是否能触发
private boolean isOtherListener;
private List<OnDuelClipBoardListener> onDuelClipBoardListenerList;
//卡查关键字
public static final String[] cardSearchKey = new String[]{"?", "?"};
//卡组url前缀
private final static String DECK_URL_PREFIX = Constants.SCHEME_APP+"://"+Constants.URI_HOST;
//卡组复制
public static final String[] DeckTextKey = new String[]{"#main"};
//加房关键字
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#"
};
private DuelAssistantManagement() {
isStart=false;
isOtherListener=true;
isListener=true;
onDuelClipBoardListenerList =new ArrayList<>();
clipboardManager = (ClipboardManager) App.get().getSystemService(Context.CLIPBOARD_SERVICE);
if (clipboardManager!=null)
clipboardManager.addPrimaryClipChangedListener(onPrimaryClipChangedListener);
}
public boolean isStart() {
return isStart;
}
public void setStart(boolean start) {
isStart = start;
}
public boolean isListener() {
return isListener;
}
public void setListener(boolean listener) {
isListener = listener;
}
public void addListener(OnDuelClipBoardListener onDuelClipBoardListener){
onDuelClipBoardListenerList.add(onDuelClipBoardListener);
}
public void removeListener(OnDuelClipBoardListener onDuelClipBoardListener){
onDuelClipBoardListenerList.remove(onDuelClipBoardListener);
}
public boolean isOtherListener() {
return isOtherListener;
}
public void setOtherListener(boolean otherListener) {
isOtherListener = otherListener;
}
public String getCardSearchMessage() {
return cardSearchMessage;
}
public void setCardSearchMessage(String cardSearchMessage) {
this.cardSearchMessage = cardSearchMessage;
}
ClipboardManager.OnPrimaryClipChangedListener onPrimaryClipChangedListener=new ClipboardManager.OnPrimaryClipChangedListener() {
@Override
public void onPrimaryClipChanged() {
if (!isListener)
return;
ClipData clipData = clipboardManager.getPrimaryClip();
if (clipData == null)
return;
CharSequence cs = clipData.getItemAt(0).getText();
final String clipMessage;
if (cs != null) {
clipMessage = cs.toString();
} else {
clipMessage = null;
}
//如果复制的内容为空则不执行下面的代码
if (TextUtils.isEmpty(clipMessage)) {
return;
}
checkMessage(clipMessage,null);
}
};
/**
* 检查复制内容
* @param clipMessage 复制内容
*/
public void checkMessage(String clipMessage,OnDuelClipBoardListener onDuelClipBoardListener1) {
if (TextUtils.isEmpty(clipMessage) )
return;
boolean isDebounce;
if (clipMessage.equals(lastMessage))
isDebounce=true;
else
isDebounce=false;
lastMessage=clipMessage;
//如果复制的内容是多行作为卡组去判断
if (clipMessage.contains("\n")) {
for (String s : DeckTextKey) {
//只要包含其中一个关键字就视为卡组
if (clipMessage.contains(s)) {
if (onDuelClipBoardListener1==null) {
isOtherListener=false;
for (int i = 0; i < onDuelClipBoardListenerList.size(); i++) {
OnDuelClipBoardListener onDuelClipBoardListener = onDuelClipBoardListenerList.get(i);
if (onDuelClipBoardListener.isEffective()) {
onDuelClipBoardListener.onDeckCode(clipMessage, isDebounce);
} else {
onDuelClipBoardListenerList.remove(i);
i--;
}
}
isOtherListener=true;
}else if (isOtherListener){
onDuelClipBoardListener1.onDeckCode(clipMessage, isDebounce);
}
return;
}
}
return;
}
//如果是卡组url
int deckStart = clipMessage.indexOf(DECK_URL_PREFIX);
if (deckStart != -1) {
if (onDuelClipBoardListener1==null) {
isOtherListener=false;
for (int i = 0; i < onDuelClipBoardListenerList.size(); i++) {
OnDuelClipBoardListener onDuelClipBoardListener = onDuelClipBoardListenerList.get(i);
if (onDuelClipBoardListener.isEffective()) {
onDuelClipBoardListener.onDeckUrl(clipMessage.substring(deckStart + DECK_URL_PREFIX.length()), isDebounce);
} else {
onDuelClipBoardListenerList.remove(i);
i--;
}
}
isOtherListener=true;
}else if (isOtherListener) {
onDuelClipBoardListener1.onDeckUrl(clipMessage.substring(deckStart + DECK_URL_PREFIX.length()), isDebounce);
}
return;
}
int start = -1;
int end;
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;
}
if (onDuelClipBoardListener1==null) {
isOtherListener=false;
for (int i = 0; i < onDuelClipBoardListenerList.size(); i++) {
OnDuelClipBoardListener onDuelClipBoardListener = onDuelClipBoardListenerList.get(i);
if (onDuelClipBoardListener.isEffective()) {
onDuelClipBoardListener.onDuelPassword(clipMessage.substring(start, end), isDebounce);
} else {
onDuelClipBoardListenerList.remove(i);
i--;
}
}
isOtherListener=true;
}else if (isOtherListener) {
onDuelClipBoardListener1.onDuelPassword(clipMessage.substring(start, end), isDebounce);
}
} 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;
}
if (onDuelClipBoardListener1==null) {
isOtherListener=false;
for (int i = 0; i < onDuelClipBoardListenerList.size(); i++) {
OnDuelClipBoardListener onDuelClipBoardListener = onDuelClipBoardListenerList.get(i);
if (onDuelClipBoardListener.isEffective()) {
onDuelClipBoardListener.onCardQuery(cardSearchMessage, isDebounce);
} else {
onDuelClipBoardListenerList.remove(i);
i--;
}
}
isOtherListener=true;
}else if (isOtherListener) {
onDuelClipBoardListener1.onCardQuery(cardSearchMessage, isDebounce);
}
}
}
}
}
}
......@@ -10,8 +10,10 @@ import android.os.Build;
import android.os.Bundle;
import android.os.Looper;
import android.text.TextUtils;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.annotation.Nullable;
......@@ -20,18 +22,36 @@ import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import com.feihua.dialogutils.util.DialogUtils;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.bean.ServerInfo;
import cn.garymb.ygomobile.bean.ServerList;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ourygo.base.OnDuelClipBoardListener;
import cn.garymb.ygomobile.ourygo.service.DuelAssistantService;
import cn.garymb.ygomobile.ourygo.util.DuelAssistantManagement;
import cn.garymb.ygomobile.ui.cards.CardSearchAcitivity;
import cn.garymb.ygomobile.ui.home.ServerListManager;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.DeckUtil;
import cn.garymb.ygomobile.utils.FileLogUtil;
import cn.garymb.ygomobile.utils.YGOUtil;
import static cn.garymb.ygomobile.Constants.ASSET_SERVER_LIST;
public class BaseActivity extends AppCompatActivity {
public class BaseActivity extends AppCompatActivity {
protected final static int REQUEST_PERMISSIONS = 0x1000 + 1;
private boolean mExitAnim = true;
private boolean mEnterAnim = true;
private Toast mToast;
private DialogUtils dialogUtils;
protected String[] getPermissions() {
return PERMISSIONS;
......@@ -48,6 +68,7 @@ public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
dialogUtils=DialogUtils.getdx(this);
}
protected void setupActionBar() {
......@@ -73,6 +94,8 @@ public class BaseActivity extends AppCompatActivity {
}
onActivityResult(REQUEST_PERMISSIONS,PermissionsActivity.PERMISSIONS_GRANTED,null);
}
}
public Activity getActivity() {
......
......@@ -25,12 +25,13 @@ import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.loader.CardLoader;
import cn.garymb.ygomobile.loader.ImageLoader;
import cn.garymb.ygomobile.ourygo.util.DuelAssistantManagement;
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.plus.AOnGestureListener;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.ServiceDuelAssistant;
import cn.garymb.ygomobile.ourygo.service.DuelAssistantService;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import ocgcore.DataManager;
import ocgcore.LimitManager;
......@@ -60,7 +61,7 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack
setContentView(R.layout.activity_search);
if(TextUtils.isEmpty(getIntent().getStringExtra(CardSearchAcitivity.SEARCH_MESSAGE))){
ServiceDuelAssistant.cardSearchMessage="";
DuelAssistantManagement.getInstance().setCardSearchMessage("");
}
Toolbar toolbar = $(R.id.toolbar);
setSupportActionBar(toolbar);
......@@ -105,15 +106,15 @@ class CardSearchActivityImpl extends BaseActivity implements CardLoader.CallBack
@Override
protected void onRestart() {
super.onRestart();
if (!isFirstCardSearch&&!currentCardSearchMessage.equals(ServiceDuelAssistant.cardSearchMessage)){
currentCardSearchMessage=ServiceDuelAssistant.cardSearchMessage;
if (!isFirstCardSearch&&!currentCardSearchMessage.equals(DuelAssistantManagement.getInstance().getCardSearchMessage())){
currentCardSearchMessage= DuelAssistantManagement.getInstance().getCardSearchMessage();
intentSearch();
}
}
private void intentSearch(){
// intentSearchMessage=getIntent().getStringExtra(CardSearchAcitivity.SEARCH_MESSAGE);
mCardSelector.search(ServiceDuelAssistant.cardSearchMessage);
mCardSelector.search(DuelAssistantManagement.getInstance().getCardSearchMessage());
}
protected void setListeners() {
......
......@@ -65,19 +65,18 @@ import cn.garymb.ygomobile.ui.cards.deck.DeckItem;
import cn.garymb.ygomobile.ui.cards.deck.DeckItemTouchHelper;
import cn.garymb.ygomobile.ui.cards.deck.DeckItemType;
import cn.garymb.ygomobile.ui.cards.deck.DeckLayoutManager;
import cn.garymb.ygomobile.ui.mycard.mcchat.util.ImageUtil;
import cn.garymb.ygomobile.ui.mycard.mcchat.util.Util;
import cn.garymb.ygomobile.mycard.mcchat.util.ImageUtil;
import cn.garymb.ygomobile.ui.plus.AOnGestureListener;
import cn.garymb.ygomobile.ui.plus.DefaultOnBoomListener;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.ServiceDuelAssistant;
import cn.garymb.ygomobile.ourygo.service.DuelAssistantService;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.BitmapUtil;
import cn.garymb.ygomobile.utils.DeckUtil;
import cn.garymb.ygomobile.utils.FileUtils;
import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.ShareUtil;
import cn.garymb.ygomobile.utils.YGODialogUtil;
import cn.garymb.ygomobile.utils.YGOUtil;
import ocgcore.DataManager;
import ocgcore.data.Card;
import ocgcore.data.LimitList;
......@@ -794,11 +793,11 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
@Override
public void onClick(View v) {
du.dis();
stopService(new Intent(DeckManagerActivityImpl.this, ServiceDuelAssistant.class));
Util.fzMessage(DeckManagerActivityImpl.this, et_code.getText().toString().trim());
stopService(new Intent(DeckManagerActivityImpl.this, DuelAssistantService.class));
YGOUtil.copyMessage(DeckManagerActivityImpl.this, et_code.getText().toString().trim());
showToast(getString(R.string.deck_text_copyed));
//复制完毕开启决斗助手
Util.startDuelService(DeckManagerActivityImpl.this);
YGOUtil.startDuelService(DeckManagerActivityImpl.this);
}
});
......
......@@ -61,7 +61,7 @@ import cn.garymb.ygomobile.ui.adapters.ServerListAdapter;
import cn.garymb.ygomobile.ui.adapters.SimpleListAdapter;
import cn.garymb.ygomobile.ui.cards.CardSearchAcitivity;
import cn.garymb.ygomobile.ui.cards.DeckManagerActivity;
import cn.garymb.ygomobile.ui.mycard.MyCardActivity;
import cn.garymb.ygomobile.mycard.MyCardActivity;
import cn.garymb.ygomobile.ui.plus.DefaultOnBoomListener;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.preference.SettingsActivity;
......@@ -71,8 +71,7 @@ import cn.garymb.ygomobile.utils.AlipayPayUtils;
import cn.garymb.ygomobile.utils.ComponentUtils;
import cn.garymb.ygomobile.utils.FileLogUtil;
import cn.garymb.ygomobile.utils.ScreenUtil;
import static cn.garymb.ygomobile.ui.mycard.mcchat.util.Util.startDuelService;
import cn.garymb.ygomobile.utils.YGOUtil;
public abstract class HomeActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener {
protected SwipeMenuRecyclerView mServerList;
......@@ -224,8 +223,8 @@ public abstract class HomeActivity extends BaseActivity implements NavigationVie
TrPay.getInstance(HomeActivity.this).initPaySdk("e1014da420ea4405898c01273d6731b6", "YGOMobile");
//autoupadte checking
checkPgyerUpdateSilent(getContext(), false, false, false);
//ServiceDuelAssistant
startDuelService(this);
//DuelAssistantService
YGOUtil.startDuelService(this);
//萌卡
StartMycard();
......
......@@ -14,29 +14,40 @@ import android.widget.Button;
import androidx.annotation.NonNull;
import com.feihua.dialogutils.util.DialogUtils;
import java.io.File;
import java.io.FileInputStream;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.GameUriManager;
import cn.garymb.ygomobile.YGOMobileActivity;
import cn.garymb.ygomobile.YGOStarter;
import cn.garymb.ygomobile.bean.ServerInfo;
import cn.garymb.ygomobile.bean.ServerList;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ourygo.base.OnDuelClipBoardListener;
import cn.garymb.ygomobile.ourygo.util.DuelAssistantManagement;
import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.activities.LogoActivity;
import cn.garymb.ygomobile.ui.activities.WebActivity;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.ComponentUtils;
import cn.garymb.ygomobile.utils.DeckUtil;
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 libwindbot.windbot.WindBot;
import static cn.garymb.ygomobile.Constants.ASSET_SERVER_LIST;
import static cn.garymb.ygomobile.Constants.CORE_BOT_CONF_PATH;
import static cn.garymb.ygomobile.Constants.DATABASE_NAME;
import static cn.garymb.ygomobile.Constants.NETWORK_IMAGE;
public class MainActivity extends HomeActivity {
public class MainActivity extends HomeActivity implements OnDuelClipBoardListener {
private static final String TAG = "ResCheckTask";
private GameUriManager mGameUriManager;
private ImageUpdater mImageUpdater;
......@@ -52,6 +63,11 @@ public class MainActivity extends HomeActivity {
int err = getIntent().getIntExtra(LogoActivity.EXTRA_ERROR, ResCheckTask.ERROR_NONE);
//资源复制
onCheckCompleted(err, isNew);
// if (DuelAssistantManagement.getInstance().isStart()){
// DuelAssistantManagement.getInstance().checkMessage(YGOUtil.getCopyMessage(),this);
// Log.e("BaseActivity","检测复制内容"+YGOUtil.getCopyMessage());
// }
}
@Override
......@@ -62,6 +78,10 @@ public class MainActivity extends HomeActivity {
if (!ComponentUtils.isActivityRunning(this, new ComponentName(this, YGOMobileActivity.class))) {
ComponentUtils.killActivity(this, new ComponentName(this, YGOMobileActivity.class));
}
if (DuelAssistantManagement.getInstance().isStart()){
DuelAssistantManagement.getInstance().checkMessage(YGOUtil.getCopyMessage(),this);
}
}
@Override
......@@ -211,4 +231,106 @@ public class MainActivity extends HomeActivity {
getGameUriManager().doIntent(getIntent());
}
}
@Override
public void onDeckCode(String deckCode,boolean isDebounce) {
if (isDebounce)
return;
DialogPlus dialogPlus=new DialogPlus(this);
dialogPlus.setMessage("检测到卡组,是否保存?");
dialogPlus.setLeftButtonText("保存");
dialogPlus.setRightButtonText("取消");
dialogPlus.setLeftButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DeckUtil.saveDeck(MainActivity.this,deckCode,false);
dialog.dismiss();
}
});
dialogPlus.setRightButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialogPlus.show();
}
@Override
public void onDeckUrl(String deckUrl,boolean isDebounce) {
if (isDebounce)
return;
DialogPlus dialogPlus=new DialogPlus(this);
dialogPlus.setMessage("检测到卡组,是否保存?");
dialogPlus.setLeftButtonText("保存");
dialogPlus.setRightButtonText("取消");
dialogPlus.setLeftButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
DeckUtil.saveDeck(MainActivity.this,deckUrl,true);
dialog.dismiss();
}
});
dialogPlus.setRightButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialogPlus.show();
}
@Override
public void onCardQuery(String cardNameKey,boolean isDebounce) {
}
@Override
public void onDuelPassword(String password,boolean isDebounce) {
if (isDebounce)
return;
DialogPlus dialogPlus=new DialogPlus(this);
dialogPlus.setTitle(password);
dialogPlus.setMessage("检测到决斗密码,是否加入房间?");
dialogPlus.setLeftButtonText("加入");
dialogPlus.setRightButtonText("取消");
dialogPlus.setLeftButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
File xmlFile = new File(getFilesDir(), Constants.SERVER_FILE);
VUiKit.defer().when(() -> {
ServerList assetList = ServerListManager.readList(MainActivity.this.getAssets().open(ASSET_SERVER_LIST));
ServerList fileList = xmlFile.exists() ? ServerListManager.readList(new FileInputStream(xmlFile)) : null;
if (fileList == null) {
return assetList;
}
if (fileList.getVercode() < assetList.getVercode()) {
xmlFile.delete();
return assetList;
}
return fileList;
}).done((list) -> {
if (list != null) {
ServerInfo serverInfo = list.getServerInfoList().get(0);
YGOUtil.duelIntent(MainActivity.this, serverInfo.getServerAddr(), serverInfo.getPort(), serverInfo.getPlayerName(), password);
}
});
dialog.dismiss();
}
});
dialogPlus.setRightButtonListener(new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
dialogPlus.show();
}
@Override
public boolean isEffective() {
return YGOUtil.isContextExisted(this);
}
}
package cn.garymb.ygomobile.ui.mycard.mcchat.util;
import android.app.Activity;
import android.content.ClipboardManager;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.ServiceDuelAssistant;
import cn.garymb.ygomobile.utils.PermissionUtil;
public class Util {
//提示
public static void show(Context context, String message) {
Toast.makeText(context, message, Toast.LENGTH_SHORT).show();
}
//关闭输入法
public static void closeKeyboard(Activity activity) {
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow((activity).getCurrentFocus().getWindowToken()
, InputMethodManager.HIDE_NOT_ALWAYS);
}
//复制字符串到剪贴板
public static void fzMessage(Context context, String message) {
ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
cmb.setText(message);//复制命令
}
public static void startDuelService(Context context) {
if (AppsSettings.get().isServiceDuelAssistant()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
DialogPlus dialogPlus = PermissionUtil.isNotificationPermission(context);
if (dialogPlus == null)
context.startForegroundService(new Intent(context, ServiceDuelAssistant.class));
else
dialogPlus.show();
} else {
context.startService(new Intent(context, ServiceDuelAssistant.class));
}
}
}
}
......@@ -36,9 +36,8 @@ import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.activities.LogoActivity;
import cn.garymb.ygomobile.ui.home.HomeActivity;
import cn.garymb.ygomobile.ui.home.MainActivity;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.ServiceDuelAssistant;
import cn.garymb.ygomobile.ourygo.service.DuelAssistantService;
import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.ui.preference.PreferenceFragmentPlus;
import cn.garymb.ygomobile.utils.FileUtils;
......@@ -48,7 +47,6 @@ import cn.garymb.ygomobile.utils.PermissionUtil;
import ocgcore.ConfigManager;
import ocgcore.DataManager;
import static cn.garymb.ygomobile.Constants.ACTION_RELOAD;
import static cn.garymb.ygomobile.Constants.CORE_SKIN_AVATAR_SIZE;
import static cn.garymb.ygomobile.Constants.CORE_SKIN_BG_SIZE;
import static cn.garymb.ygomobile.Constants.CORE_SKIN_CARD_COVER_SIZE;
......@@ -195,9 +193,9 @@ public class SettingFragment extends PreferenceFragmentPlus {
if (preference.getKey().equals(PREF_START_SERVICEDUELASSISTANT)) {
if (checkBoxPreference.isChecked()) {
PermissionUtil.isServicePermission(getActivity(), true);
getActivity().startService(new Intent(getActivity(), ServiceDuelAssistant.class));
getActivity().startService(new Intent(getActivity(), DuelAssistantService.class));
} else {
getActivity().stopService(new Intent(getActivity(), ServiceDuelAssistant.class));
getActivity().stopService(new Intent(getActivity(), DuelAssistantService.class));
}
}
//如果是音效开关
......
......@@ -3,7 +3,7 @@ package cn.garymb.ygomobile.ui.widget;
import android.content.Context;
import android.util.AttributeSet;
import cn.garymb.ygomobile.ui.mycard.X5WebView;
import cn.garymb.ygomobile.mycard.X5WebView;
public class WebViewPlus extends X5WebView {
......
package cn.garymb.ygomobile.utils;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
......@@ -16,9 +19,13 @@ import java.util.zip.ZipFile;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.bean.Deck;
import cn.garymb.ygomobile.bean.DeckType;
import cn.garymb.ygomobile.bean.events.DeckFile;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ourygo.service.DuelAssistantService;
import cn.garymb.ygomobile.ui.cards.DeckManagerActivity;
import cn.garymb.ygomobile.ui.cards.deck.DeckUtils;
public class DeckUtil {
......@@ -122,4 +129,28 @@ public class DeckUtil {
}
};
public static void saveDeck(Context context,String deckMessage,boolean isUrl){
if (isUrl) {
Deck deckInfo = new Deck(YGOUtil.s(R.string.rename_deck) + System.currentTimeMillis(), Uri.parse(deckMessage));
File file = deckInfo.saveTemp(AppsSettings.get().getDeckDir());
Intent startdeck = new Intent(context, DeckManagerActivity.getDeckManager());
startdeck.putExtra(Intent.EXTRA_TEXT, file.getAbsolutePath());
startdeck.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(startdeck);
} else {
//如果是卡组文本
try {
//以当前时间戳作为卡组名保存卡组
File file = DeckUtils.save(YGOUtil.s(R.string.rename_deck) + System.currentTimeMillis(), deckMessage);
Intent startdeck = new Intent(context, DeckManagerActivity.getDeckManager());
startdeck.putExtra(Intent.EXTRA_TEXT, file.getAbsolutePath());
startdeck.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(startdeck);
} catch (IOException e) {
e.printStackTrace();
Toast.makeText(context, YGOUtil.s(R.string.save_failed_bcos) + e, Toast.LENGTH_SHORT).show();
}
}
}
}
......@@ -32,7 +32,7 @@ import cn.garymb.ygomobile.bean.DeckType;
import cn.garymb.ygomobile.bean.events.DeckFile;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.adapters.TextSelectAdapter;
import cn.garymb.ygomobile.ui.mycard.mcchat.util.ImageUtil;
import cn.garymb.ygomobile.mycard.mcchat.util.ImageUtil;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.utils.recyclerview.DeckTypeTouchHelperCallback;
......
package cn.garymb.ygomobile.utils;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Application;
import android.app.Service;
import android.content.ClipData;
import android.content.ClipboardManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.view.inputmethod.InputMethodManager;
import android.widget.Toast;
import androidx.core.content.ContextCompat;
import java.util.List;
import cn.garymb.ygomobile.App;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ourygo.service.DuelAssistantService;
import cn.garymb.ygomobile.ourygo.util.DuelAssistantManagement;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import libwindbot.windbot.game.Duel;
public class YGOUtil {
......@@ -20,4 +38,101 @@ public class YGOUtil {
public static String s(int stringId){
return App.get().getResources().getString(stringId);
}
//关闭输入法
public static void closeKeyboard(Activity activity) {
InputMethodManager inputMethodManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow((activity).getCurrentFocus().getWindowToken()
, InputMethodManager.HIDE_NOT_ALWAYS);
}
//复制字符串到剪贴板
public static void copyMessage(Context context, String message) {
ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
cmb.setText(message);//复制命令
}
public static String getCopyMessage(){
ClipboardManager cm = (ClipboardManager) App.get().getSystemService(Context.CLIPBOARD_SERVICE);
ClipData clipData = cm.getPrimaryClip();
if (clipData == null)
return null;
CharSequence cs = clipData.getItemAt(0).getText();
final String clipMessage;
if (cs != null) {
clipMessage = cs.toString();
} else {
clipMessage = null;
}
return clipMessage;
}
public static void startDuelService(Context context) {
if (AppsSettings.get().isServiceDuelAssistant()) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
DialogPlus dialogPlus = PermissionUtil.isNotificationPermission(context);
if (dialogPlus == null)
context.startForegroundService(new Intent(context, DuelAssistantService.class));
else
dialogPlus.show();
} else {
context.startService(new Intent(context, DuelAssistantService.class));
}
}
DuelAssistantManagement.getInstance().setStart(true);
}
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;
}
//决斗跳转
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);
}
}
......@@ -15,7 +15,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<cn.garymb.ygomobile.ui.mycard.MyCardWebView
<cn.garymb.ygomobile.mycard.MyCardWebView
android:id="@+id/webbrowser"
android:layout_width="match_parent"
android:layout_height="match_parent">
......@@ -26,7 +26,7 @@
android:layout_width="match_parent"
android:layout_height="5px" />
</cn.garymb.ygomobile.ui.mycard.MyCardWebView>
</cn.garymb.ygomobile.mycard.MyCardWebView>
</RelativeLayout>
......
......@@ -4,7 +4,7 @@
android:layout_height="wrap_content"
android:background="#00000000">
<cn.garymb.ygomobile.ui.mycard.mcchat.view.YuanImage
<cn.garymb.ygomobile.mycard.mcchat.view.YuanImage
android:id="@+id/ic_avatar"
android:layout_width="35dp"
android:layout_height="35dp"
......
......@@ -4,7 +4,7 @@
android:layout_height="wrap_content"
android:background="#00000000">
<cn.garymb.ygomobile.ui.mycard.mcchat.view.YuanImage
<cn.garymb.ygomobile.mycard.mcchat.view.YuanImage
android:id="@+id/icm_avatar"
android:layout_width="35dp"
android:layout_height="35dp"
......
......@@ -10,7 +10,7 @@
<intent
android:action="android.intent.action.VIEW"
android:targetClass="cn.garymb.ygomobile.ui.mycard.MyCardActivity"
android:targetClass="cn.garymb.ygomobile.mycard.MyCardActivity"
android:targetPackage="cn.garymb.ygomobile" />
<categories android:name="android.shortcut.conversation" />
</shortcut>
......
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