Commit f7558728 authored by qq247321453's avatar qq247321453

收藏

parent 4aedbb45
...@@ -673,4 +673,9 @@ public class AppsSettings { ...@@ -673,4 +673,9 @@ public class AppsSettings {
// Log.i("kk", "saveTemp:" + array); // Log.i("kk", "saveTemp:" + array);
mSharedPreferences.putString(Constants.PREF_LAST_ROOM_LIST, array.toString()); mSharedPreferences.putString(Constants.PREF_LAST_ROOM_LIST, array.toString());
} }
//获取收藏文件
public String getFavoriteTxt() {
return new File(getResourcePath(), "/favorite.txt").getAbsolutePath();
}
} }
...@@ -219,4 +219,6 @@ public interface Constants { ...@@ -219,4 +219,6 @@ public interface Constants {
boolean COPY_YDK_FILE = false; boolean COPY_YDK_FILE = false;
String TAG = "ygo-java"; String TAG = "ygo-java";
String DEF_ENCODING = "utf-8";
} }
...@@ -170,27 +170,45 @@ public class CardLoader implements ICardLoader { ...@@ -170,27 +170,45 @@ public class CardLoader implements ICardLoader {
}); });
} }
private Comparator<Card> ASCode = new Comparator<Card>() { public List<Card> sort(List<Card> cards){
@Override List<Card> tmp = new ArrayList<Card>();
public int compare(Card o1, Card o2) { List<Card> monster = new ArrayList<Card>();
int index1 = (Integer.valueOf(o1.Code).intValue()); List<Card> spell = new ArrayList<Card>();
int index2 = (Integer.valueOf(o2.Code).intValue()); List<Card> trap = new ArrayList<Card>();
return index1 - index2; int count = cards.size();
for (int i = 0; i < count; i++) {
Card card = cards.get(i);
if (card.isType(CardType.Monster)) {
monster.add(card);
} else if (card.isType(CardType.Spell)) {
spell.add(card);
} else if (card.isType(CardType.Trap)) {
trap.add(card);
} else {
tmp.add(card);
}
} }
}; Collections.sort(tmp, ASCode);
Collections.sort(monster, ASC);
Collections.sort(spell, ASCode);
Collections.sort(trap, ASCode);
tmp.addAll(monster);
tmp.addAll(spell);
tmp.addAll(trap);
return tmp;
}
private Comparator<Card> ASC = new Comparator<Card>() { private static final Comparator<Card> ASCode = (o1, o2) -> o1.Code - o2.Code;
@Override
public int compare(Card o1, Card o2) { private static final Comparator<Card> ASC = (o1, o2) -> {
if (o1.getStar() == o2.getStar()) { if (o1.getStar() == o2.getStar()) {
if (o1.Attack == o2.Attack) { if (o1.Attack == o2.Attack) {
return (int) (o2.Code - o1.Code); return (int) (o2.Code - o1.Code);
} else {
return o2.Attack - o1.Attack;
}
} else { } else {
return o2.getStar() - o1.getStar(); return o2.Attack - o1.Attack;
} }
} else {
return o2.getStar() - o1.getStar();
} }
}; };
......
...@@ -7,7 +7,6 @@ import android.os.Message; ...@@ -7,7 +7,6 @@ import android.os.Message;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.util.SparseArray; import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.Window; import android.view.Window;
...@@ -26,7 +25,6 @@ import com.bm.library.PhotoView; ...@@ -26,7 +25,6 @@ import com.bm.library.PhotoView;
import com.feihua.dialogutils.util.DialogUtils; import com.feihua.dialogutils.util.DialogUtils;
import java.io.File; import java.io.File;
import java.util.List;
import cn.garymb.ygomobile.AppsSettings; import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants; import cn.garymb.ygomobile.Constants;
...@@ -41,14 +39,12 @@ import cn.garymb.ygomobile.utils.DownloadUtil; ...@@ -41,14 +39,12 @@ import cn.garymb.ygomobile.utils.DownloadUtil;
import cn.garymb.ygomobile.utils.FileUtils; import cn.garymb.ygomobile.utils.FileUtils;
import cn.garymb.ygomobile.utils.YGOUtil; import cn.garymb.ygomobile.utils.YGOUtil;
import ocgcore.CardManager; import ocgcore.CardManager;
import ocgcore.ConfigManager;
import ocgcore.DataManager; import ocgcore.DataManager;
import ocgcore.StringManager; import ocgcore.StringManager;
import ocgcore.data.Card; import ocgcore.data.Card;
import ocgcore.enums.CardType; import ocgcore.enums.CardType;
import static cn.garymb.ygomobile.core.IrrlichtBridge.ACTION_SHARE_FILE; import static cn.garymb.ygomobile.core.IrrlichtBridge.ACTION_SHARE_FILE;
import static cn.garymb.ygomobile.ui.cards.DeckManagerActivity.Favorite;
/*** /***
* 卡片详情 * 卡片详情
...@@ -61,33 +57,31 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -61,33 +57,31 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
private static final String TAG = "CardDetail"; private static final String TAG = "CardDetail";
private static CardManager cardManager; private static CardManager cardManager;
private ImageView cardImage; private final ImageView cardImage;
private TextView name; private final TextView name;
private TextView desc; private final TextView desc;
private TextView level; private final TextView level;
private TextView type; private final TextView type;
private TextView race; private final TextView race;
private TextView cardAtk; private final TextView cardAtk;
private TextView cardDef; private final TextView cardDef;
private TextView setname; private final TextView setName;
private TextView otView; private final TextView otView;
private TextView attrView; private final TextView attrView;
private View monsterlayout; private final View monsterLayout;
private View close; private final View close;
private View faq; private final View addMain;
private View addMain; private final View addSide;
private View addSide; private final View linkArrow;
private View linkArrow; private final View layoutDetailPScale;
private View layout_detail_p_scale; private final TextView detailCardScale;
private TextView detail_cardscale; private final TextView cardCode;
private TextView cardcode; private final View lbSetCode;
private View lb_setcode; private final ImageLoader imageLoader;
private ImageLoader imageLoader; private final View mImageFav, atkdefView;
private View mImageFav, atkdefView;
private final StringManager mStringManager;
private BaseActivity mContext;
private StringManager mStringManager;
private int curPosition; private int curPosition;
private Card mCardInfo; private Card mCardInfo;
private CardListProvider mProvider; private CardListProvider mProvider;
...@@ -129,10 +123,11 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -129,10 +123,11 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
} }
} }
}; };
private CallBack mCallBack; private final BaseActivity mContext;
private OnFavoriteChangedListener mCallBack;
public CardDetail(BaseActivity context, ImageLoader imageLoader, StringManager stringManager) { public CardDetail(BaseActivity context, ImageLoader imageLoader, StringManager stringManager) {
super(LayoutInflater.from(context).inflate(R.layout.dialog_cardinfo, null)); super(context.getLayoutInflater().inflate(R.layout.dialog_cardinfo, null));
mContext = context; mContext = context;
cardImage = bind(R.id.card_image); cardImage = bind(R.id.card_image);
this.imageLoader = imageLoader; this.imageLoader = imageLoader;
...@@ -140,26 +135,26 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -140,26 +135,26 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
name = bind(R.id.text_name); name = bind(R.id.text_name);
desc = bind(R.id.text_desc); desc = bind(R.id.text_desc);
close = bind(R.id.btn_close); close = bind(R.id.btn_close);
cardcode = bind(R.id.card_code); cardCode = bind(R.id.card_code);
level = bind(R.id.card_level); level = bind(R.id.card_level);
linkArrow = bind(R.id.detail_link_arrows); linkArrow = bind(R.id.detail_link_arrows);
type = bind(R.id.card_type); type = bind(R.id.card_type);
faq = bind(R.id.btn_faq); View faq = bind(R.id.btn_faq);
cardAtk = bind(R.id.card_atk); cardAtk = bind(R.id.card_atk);
cardDef = bind(R.id.card_def); cardDef = bind(R.id.card_def);
atkdefView = bind(R.id.layout_atkdef2); atkdefView = bind(R.id.layout_atkdef2);
mImageFav = bind(R.id.image_fav); mImageFav = bind(R.id.image_fav);
monsterlayout = bind(R.id.layout_monster); monsterLayout = bind(R.id.layout_monster);
layout_detail_p_scale = bind(R.id.detail_p_scale); layoutDetailPScale = bind(R.id.detail_p_scale);
detail_cardscale = bind(R.id.detail_cardscale); detailCardScale = bind(R.id.detail_cardscale);
race = bind(R.id.card_race); race = bind(R.id.card_race);
setname = bind(R.id.card_setname); setName = bind(R.id.card_setname);
addMain = bind(R.id.btn_add_main); addMain = bind(R.id.btn_add_main);
addSide = bind(R.id.btn_add_side); addSide = bind(R.id.btn_add_side);
otView = bind(R.id.card_ot); otView = bind(R.id.card_ot);
attrView = bind(R.id.card_attribute); attrView = bind(R.id.card_attribute);
lb_setcode = bind(R.id.label_setcode); lbSetCode = bind(R.id.label_setcode);
if (cardManager == null) { if (cardManager == null) {
Log.e("CardDetail", "加载卡片信息"); Log.e("CardDetail", "加载卡片信息");
...@@ -205,35 +200,20 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -205,35 +200,20 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
bind(R.id.nextone).setOnClickListener((v) -> { bind(R.id.nextone).setOnClickListener((v) -> {
onNextCard(); onNextCard();
}); });
bind(R.id.image_fav).setOnClickListener((v) -> { mImageFav.setOnClickListener((v) -> {
doMyFavorites(getCardInfo()); doMyFavorites(getCardInfo());
}); });
} }
/**
* 收藏卡片
*/
public void doMyFavorites(Card cardInfo) { public void doMyFavorites(Card cardInfo) {
CardLoader mCardLoader = new CardLoader(context); boolean ret = CardFavorites.get().toggle(cardInfo.Code);
ConfigManager favConf = DataManager.openConfig(AppsSettings.get().getSystemConfig()); mImageFav.setSelected(ret);
Integer code = cardInfo.Code; if(mCallBack != null){
if (favConf.mLines.contains(code)) { mCallBack.onFavoriteChange(cardInfo, ret);
favConf.mLines.remove(code);
mImageFav.setBackgroundResource(R.drawable.ic_control_point);
} else {
favConf.mLines.add(0, code);
mImageFav.setBackgroundResource(R.drawable.ic_fav);
}
favConf.save("#Favorite");
favConf.read();
Favorite.clear();
if (!DeckManagerActivity.isSearchResult) {
SparseArray<Card> id = mCardLoader.readCards(ConfigManager.mLines, false);
if (id != null) {
for (int i = 0; i < id.size(); i++)
Favorite.add(id.valueAt(i));
}
if (mCallBack != null)
mCallBack.onSearchResult(Favorite, true);
} }
} }
public ImageView getCardImage() { public ImageView getCardImage() {
...@@ -261,7 +241,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -261,7 +241,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
mListener = listener; mListener = listener;
} }
public void setCallBack(CallBack callBack) { public void setCallBack(OnFavoriteChangedListener callBack) {
mCallBack = callBack; mCallBack = callBack;
} }
...@@ -287,7 +267,6 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -287,7 +267,6 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
private void setCardInfo(Card cardInfo, View view) { private void setCardInfo(Card cardInfo, View view) {
if (cardInfo == null) return; if (cardInfo == null) return;
mCardInfo = cardInfo; mCardInfo = cardInfo;
imageLoader.bindImage(cardImage, cardInfo.Code, null, true); imageLoader.bindImage(cardImage, cardInfo.Code, null, true);
dialog = DialogUtils.getdx(context); dialog = DialogUtils.getdx(context);
...@@ -298,45 +277,41 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -298,45 +277,41 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
desc.setText(cardInfo.Desc); desc.setText(cardInfo.Desc);
int t = cardInfo.Alias - cardInfo.Code; int t = cardInfo.Alias - cardInfo.Code;
if (t > 10 || t < -10) { if (t > 10 || t < -10) {
cardcode.setText(String.format("%08d", cardInfo.Code)); cardCode.setText(String.format("%08d", cardInfo.Code));
} else { } else {
cardcode.setText(String.format("%08d", cardInfo.Alias)); cardCode.setText(String.format("%08d", cardInfo.Alias));
} }
//按是否存在于收藏夹切换显示图标 //按是否存在于收藏夹切换显示图标
if (ConfigManager.mLines.contains(cardInfo.Code)) { mImageFav.setSelected(CardFavorites.get().hasCard(cardInfo.Code));
mImageFav.setBackgroundResource(R.drawable.ic_fav);
} else {
mImageFav.setBackgroundResource(R.drawable.ic_control_point);
}
type.setText(CardUtils.getAllTypeString(cardInfo, mStringManager).replace("/", "|")); type.setText(CardUtils.getAllTypeString(cardInfo, mStringManager).replace("/", "|"));
attrView.setText(mStringManager.getAttributeString(cardInfo.Attribute)); attrView.setText(mStringManager.getAttributeString(cardInfo.Attribute));
otView.setText(mStringManager.getOtString(cardInfo.Ot, "" + cardInfo.Ot)); otView.setText(mStringManager.getOtString(cardInfo.Ot, "" + cardInfo.Ot));
long[] sets = cardInfo.getSetCode(); long[] sets = cardInfo.getSetCode();
setname.setText(""); setName.setText("");
int index = 0; int index = 0;
for (long set : sets) { for (long set : sets) {
if (set > 0) { if (set > 0) {
if (index != 0) { if (index != 0) {
setname.append("\n"); setName.append("\n");
} }
setname.append("" + mStringManager.getSetName(set)); setName.append("" + mStringManager.getSetName(set));
index++; index++;
} }
} }
if (TextUtils.isEmpty(setname.getText())) { if (TextUtils.isEmpty(setName.getText())) {
setname.setVisibility(View.INVISIBLE); setName.setVisibility(View.INVISIBLE);
lb_setcode.setVisibility(View.INVISIBLE); lbSetCode.setVisibility(View.INVISIBLE);
} else { } else {
setname.setVisibility(View.VISIBLE); setName.setVisibility(View.VISIBLE);
lb_setcode.setVisibility(View.VISIBLE); lbSetCode.setVisibility(View.VISIBLE);
} }
if (cardInfo.isType(CardType.Monster)) { if (cardInfo.isType(CardType.Monster)) {
atkdefView.setVisibility(View.VISIBLE); atkdefView.setVisibility(View.VISIBLE);
monsterlayout.setVisibility(View.VISIBLE); monsterLayout.setVisibility(View.VISIBLE);
race.setVisibility(View.VISIBLE); race.setVisibility(View.VISIBLE);
String star = "★" + cardInfo.getStar(); String star = "★" + cardInfo.getStar();
/* for (int i = 0; i < cardInfo.getStar(); i++) { /* for (int i = 0; i < cardInfo.getStar(); i++) {
...@@ -349,10 +324,10 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -349,10 +324,10 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
level.setTextColor(context.getResources().getColor(R.color.star)); level.setTextColor(context.getResources().getColor(R.color.star));
} }
if (cardInfo.isType(CardType.Pendulum)) { if (cardInfo.isType(CardType.Pendulum)) {
layout_detail_p_scale.setVisibility(View.VISIBLE); layoutDetailPScale.setVisibility(View.VISIBLE);
detail_cardscale.setText(String.valueOf(cardInfo.LScale)); detailCardScale.setText(String.valueOf(cardInfo.LScale));
} else { } else {
layout_detail_p_scale.setVisibility(View.GONE); layoutDetailPScale.setVisibility(View.GONE);
} }
cardAtk.setText((cardInfo.Attack < 0 ? "?" : String.valueOf(cardInfo.Attack))); cardAtk.setText((cardInfo.Attack < 0 ? "?" : String.valueOf(cardInfo.Attack)));
//连接怪兽设置 //连接怪兽设置
...@@ -370,7 +345,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -370,7 +345,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
} else { } else {
atkdefView.setVisibility(View.GONE); atkdefView.setVisibility(View.GONE);
race.setVisibility(View.GONE); race.setVisibility(View.GONE);
monsterlayout.setVisibility(View.GONE); monsterLayout.setVisibility(View.GONE);
level.setVisibility(View.GONE); level.setVisibility(View.GONE);
linkArrow.setVisibility(View.GONE); linkArrow.setVisibility(View.GONE);
} }
...@@ -551,10 +526,8 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -551,10 +526,8 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
return (T) findViewById(id); return (T) findViewById(id);
} }
public interface CallBack { public interface OnFavoriteChangedListener {
void onSearchStart(); void onFavoriteChange(Card card, boolean favorite);
void onSearchResult(List<Card> Cards, boolean isHide);
} }
public interface OnCardClickListener { public interface OnCardClickListener {
......
package cn.garymb.ygomobile.ui.cards;
import android.text.TextUtils;
import android.util.SparseArray;
import java.util.ArrayList;
import java.util.List;
import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.loader.CardLoader;
import cn.garymb.ygomobile.utils.FileUtils;
import ocgcore.data.Card;
public class CardFavorites {
private final List<Integer> mList = new ArrayList<>();
private static final CardFavorites sCardFavorites = new CardFavorites();
public static CardFavorites get() {
return sCardFavorites;
}
private CardFavorites() {
}
public boolean toggle(Integer id) {
if (!mList.contains(id)) {
//添加
mList.add(id);
return true;
} else {
//移除
mList.remove(id);
return false;
}
}
public boolean add(Integer id) {
if (!mList.contains(id)) {
mList.add(id);
return true;
}
return false;
}
public boolean hasCard(Integer id){
return mList.contains(id);
}
public List<Integer> getCardIds() {
return mList;
}
public List<Card> getCards(CardLoader cardLoader) {
SparseArray<Card> id = cardLoader.readCards(mList, false);
List<Card> list = new ArrayList<>();
if (id != null) {
for (int i = 0; i < id.size(); i++) {
list.add(id.valueAt(i));
}
}
return cardLoader.sort(list);
}
public void remove(Integer id) {
mList.remove(id);
}
public void load() {
List<String> lines = FileUtils.readLines(AppsSettings.get().getFavoriteTxt(), Constants.DEF_ENCODING);
mList.clear();
for (String line : lines) {
String tmp = line.trim();
if (TextUtils.isDigitsOnly(tmp)) {
mList.add(Integer.parseInt(tmp));
}
}
}
public void save() {
List<String> ret = new ArrayList<>();
for (Integer id : mList) {
ret.add(String.valueOf(id));
}
FileUtils.writeLines(AppsSettings.get().getFavoriteTxt(), ret, Constants.DEF_ENCODING, "\n");
}
}
...@@ -163,6 +163,7 @@ public class CardSearchActivity extends BaseActivity implements CardLoader.CallB ...@@ -163,6 +163,7 @@ public class CardSearchActivity extends BaseActivity implements CardLoader.CallB
super.onScrollStateChanged(recyclerView, newState); super.onScrollStateChanged(recyclerView, newState);
switch (newState) { switch (newState) {
case RecyclerView.SCROLL_STATE_IDLE: case RecyclerView.SCROLL_STATE_IDLE:
case RecyclerView.SCROLL_STATE_SETTLING:
if (!isFinishing()) { if (!isFinishing()) {
Glide.with(getContext()).resumeRequests(); Glide.with(getContext()).resumeRequests();
} }
...@@ -170,11 +171,6 @@ public class CardSearchActivity extends BaseActivity implements CardLoader.CallB ...@@ -170,11 +171,6 @@ public class CardSearchActivity extends BaseActivity implements CardLoader.CallB
case RecyclerView.SCROLL_STATE_DRAGGING: case RecyclerView.SCROLL_STATE_DRAGGING:
Glide.with(getContext()).pauseRequests(); Glide.with(getContext()).pauseRequests();
break; break;
case RecyclerView.SCROLL_STATE_SETTLING:
if (!isFinishing()) {
Glide.with(getContext()).resumeRequests();
}
break;
} }
} }
}); });
...@@ -284,6 +280,11 @@ public class CardSearchActivity extends BaseActivity implements CardLoader.CallB ...@@ -284,6 +280,11 @@ public class CardSearchActivity extends BaseActivity implements CardLoader.CallB
if (cardInfo != null) { if (cardInfo != null) {
if (mCardDetail == null) { if (mCardDetail == null) {
mCardDetail = new CardDetail(this, mImageLoader, mStringManager); mCardDetail = new CardDetail(this, mImageLoader, mStringManager);
mCardDetail.setCallBack((card, favorite) -> {
if(mCardSelector.isShowFavorite()) {
mCardSelector.showFavorites(false);
}
});
mCardDetail.setOnCardClickListener(new CardDetail.DefaultOnCardClickListener() { mCardDetail.setOnCardClickListener(new CardDetail.DefaultOnCardClickListener() {
@Override @Override
public void onOpenUrl(Card cardInfo) { public void onOpenUrl(Card cardInfo) {
...@@ -302,16 +303,6 @@ public class CardSearchActivity extends BaseActivity implements CardLoader.CallB ...@@ -302,16 +303,6 @@ public class CardSearchActivity extends BaseActivity implements CardLoader.CallB
mDialog.dismiss(); mDialog.dismiss();
} }
}); });
mCardDetail.setCallBack(new CardDetail.CallBack() {
@Override
public void onSearchStart() {
}
@Override
public void onSearchResult(List<Card> Cards, boolean isHide) {
CardSearchActivity.this.onSearchResult(Cards, isHide);
}
});
} }
if (mDialog == null) { if (mDialog == null) {
mDialog = new DialogPlus(this); mDialog = new DialogPlus(this);
...@@ -347,6 +338,12 @@ public class CardSearchActivity extends BaseActivity implements CardLoader.CallB ...@@ -347,6 +338,12 @@ public class CardSearchActivity extends BaseActivity implements CardLoader.CallB
} }
} }
@Override
protected void onStop() {
super.onStop();
CardFavorites.get().save();
}
//https://www.jianshu.com/p/99649af3b191 //https://www.jianshu.com/p/99649af3b191
public void showNewbieGuide() { public void showNewbieGuide() {
HighlightOptions options = new HighlightOptions.Builder()//绘制一个高亮虚线圈 HighlightOptions options = new HighlightOptions.Builder()//绘制一个高亮虚线圈
......
...@@ -4,7 +4,6 @@ package cn.garymb.ygomobile.ui.cards; ...@@ -4,7 +4,6 @@ package cn.garymb.ygomobile.ui.cards;
import android.content.Context; import android.content.Context;
import android.graphics.Color; import android.graphics.Color;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.SparseArray;
import android.view.View; import android.view.View;
import android.view.inputmethod.EditorInfo; import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager; import android.view.inputmethod.InputMethodManager;
...@@ -16,6 +15,7 @@ import android.widget.TextView.OnEditorActionListener; ...@@ -16,6 +15,7 @@ import android.widget.TextView.OnEditorActionListener;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.List; import java.util.List;
import cn.garymb.ygomobile.AppsSettings; import cn.garymb.ygomobile.AppsSettings;
...@@ -25,7 +25,6 @@ import cn.garymb.ygomobile.loader.ICardLoader; ...@@ -25,7 +25,6 @@ import cn.garymb.ygomobile.loader.ICardLoader;
import cn.garymb.ygomobile.ui.adapters.SimpleSpinnerAdapter; import cn.garymb.ygomobile.ui.adapters.SimpleSpinnerAdapter;
import cn.garymb.ygomobile.ui.adapters.SimpleSpinnerItem; import cn.garymb.ygomobile.ui.adapters.SimpleSpinnerItem;
import cn.garymb.ygomobile.ui.plus.DialogPlus; import cn.garymb.ygomobile.ui.plus.DialogPlus;
import ocgcore.ConfigManager;
import ocgcore.DataManager; import ocgcore.DataManager;
import ocgcore.LimitManager; import ocgcore.LimitManager;
import ocgcore.StringManager; import ocgcore.StringManager;
...@@ -39,8 +38,6 @@ import ocgcore.enums.CardRace; ...@@ -39,8 +38,6 @@ import ocgcore.enums.CardRace;
import ocgcore.enums.CardType; import ocgcore.enums.CardType;
import ocgcore.enums.LimitType; import ocgcore.enums.LimitType;
import static cn.garymb.ygomobile.ui.cards.DeckManagerActivity.Favorite;
public class CardSearcher implements View.OnClickListener { public class CardSearcher implements View.OnClickListener {
final String[] BtnVals = new String[9]; final String[] BtnVals = new String[9];
...@@ -73,8 +70,10 @@ public class CardSearcher implements View.OnClickListener { ...@@ -73,8 +70,10 @@ public class CardSearcher implements View.OnClickListener {
private final View layout_monster; private final View layout_monster;
private final ICardLoader dataLoader; private final ICardLoader dataLoader;
private final Context mContext; private final Context mContext;
private final Button myFavButton;
private CallBack mCallBack; private CallBack mCallBack;
CardLoader mCardLoader; CardLoader mCardLoader;
private boolean mShowFavorite;
public interface CallBack { public interface CallBack {
void onSearchStart(); void onSearchStart();
...@@ -111,7 +110,7 @@ public class CardSearcher implements View.OnClickListener { ...@@ -111,7 +110,7 @@ public class CardSearcher implements View.OnClickListener {
atkText = findViewById(R.id.edt_atk); atkText = findViewById(R.id.edt_atk);
defText = findViewById(R.id.edt_def); defText = findViewById(R.id.edt_def);
LinkMarkerButton = findViewById(R.id.btn_linkmarker); LinkMarkerButton = findViewById(R.id.btn_linkmarker);
Button myFavButton = findViewById(R.id.btn_my_fav); myFavButton = findViewById(R.id.btn_my_fav);
searchButton = findViewById(R.id.btn_search); searchButton = findViewById(R.id.btn_search);
resetButton = findViewById(R.id.btn_reset); resetButton = findViewById(R.id.btn_reset);
layout_monster = findViewById(R.id.layout_monster); layout_monster = findViewById(R.id.layout_monster);
...@@ -136,18 +135,11 @@ public class CardSearcher implements View.OnClickListener { ...@@ -136,18 +135,11 @@ public class CardSearcher implements View.OnClickListener {
suffixWord.setOnEditorActionListener(searchListener); suffixWord.setOnEditorActionListener(searchListener);
myFavButton.setOnClickListener(v -> { myFavButton.setOnClickListener(v -> {
SparseArray<Card> id = mCardLoader.readCards(ConfigManager.mLines, false); if(isShowFavorite()){
Favorite.clear(); hideFavorites();
if (id != null) { } else {
for (int i = 0; i < id.size(); i++) showFavorites(true);
Favorite.add(id.valueAt(i));
}
if (mCallBack != null) {
mCallBack.onSearchStart();
mCallBack.onSearchResult(Favorite, false);
} }
DeckManagerActivity.isSearchResult = false;
}); });
LinkMarkerButton.setOnClickListener(v -> { LinkMarkerButton.setOnClickListener(v -> {
...@@ -282,6 +274,24 @@ public class CardSearcher implements View.OnClickListener { ...@@ -282,6 +274,24 @@ public class CardSearcher implements View.OnClickListener {
}); });
} }
public void showFavorites(boolean showList) {
mShowFavorite = true;
myFavButton.setSelected(true);
if (mCallBack != null) {
mCallBack.onSearchStart();
mCallBack.onSearchResult(CardFavorites.get().getCards(mCardLoader), !showList);
}
}
public void hideFavorites(){
mShowFavorite = true;
myFavButton.setSelected(false);
if (mCallBack != null) {
mCallBack.onSearchStart();
mCallBack.onSearchResult(Collections.emptyList(), true);
}
}
public void initItems() { public void initItems() {
initOtSpinners(otSpinner); initOtSpinners(otSpinner);
initLimitSpinners(limitSpinner); initLimitSpinners(limitSpinner);
...@@ -341,6 +351,10 @@ public class CardSearcher implements View.OnClickListener { ...@@ -341,6 +351,10 @@ public class CardSearcher implements View.OnClickListener {
spinner.setAdapter(adapter); spinner.setAdapter(adapter);
} }
public boolean isShowFavorite() {
return mShowFavorite;
}
protected String getString(int id) { protected String getString(int id) {
return mContext.getString(id); return mContext.getString(id);
} }
...@@ -528,9 +542,10 @@ public class CardSearcher implements View.OnClickListener { ...@@ -528,9 +542,10 @@ public class CardSearcher implements View.OnClickListener {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
if (v == searchButton) { if (v.getId() == R.id.btn_search) {
hideFavorites();
search(); search();
} else if (v == resetButton) { } else if (v.getId() == R.id.btn_reset) {
resetAll(); resetAll();
} }
} }
...@@ -554,7 +569,6 @@ public class CardSearcher implements View.OnClickListener { ...@@ -554,7 +569,6 @@ public class CardSearcher implements View.OnClickListener {
, getSelect(typeMonsterSpinner2)); , getSelect(typeMonsterSpinner2));
lineKey = 0; lineKey = 0;
} }
DeckManagerActivity.isSearchResult = true;
} }
private void resetAll() { private void resetAll() {
......
...@@ -80,7 +80,6 @@ import cn.garymb.ygomobile.utils.IOUtils; ...@@ -80,7 +80,6 @@ import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.ShareUtil; import cn.garymb.ygomobile.utils.ShareUtil;
import cn.garymb.ygomobile.utils.YGODialogUtil; import cn.garymb.ygomobile.utils.YGODialogUtil;
import cn.garymb.ygomobile.utils.YGOUtil; import cn.garymb.ygomobile.utils.YGOUtil;
import ocgcore.ConfigManager;
import ocgcore.DataManager; import ocgcore.DataManager;
import ocgcore.data.Card; import ocgcore.data.Card;
import ocgcore.data.LimitList; import ocgcore.data.LimitList;
...@@ -117,8 +116,6 @@ public class DeckManagerActivity extends BaseCardsActivity implements RecyclerVi ...@@ -117,8 +116,6 @@ public class DeckManagerActivity extends BaseCardsActivity implements RecyclerVi
private DialogPlus mDialog; private DialogPlus mDialog;
private DialogPlus builderShareLoading; private DialogPlus builderShareLoading;
private boolean isExit = false; private boolean isExit = false;
public static boolean isSearchResult;
public static List<Card> Favorite = new ArrayList<>();
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
...@@ -169,13 +166,18 @@ public class DeckManagerActivity extends BaseCardsActivity implements RecyclerVi ...@@ -169,13 +166,18 @@ public class DeckManagerActivity extends BaseCardsActivity implements RecyclerVi
//最后卡组 //最后卡组
_file = new File(mSettings.getLastDeckPath()); _file = new File(mSettings.getLastDeckPath());
} }
Favorite.clear();
init(_file); init(_file);
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
tv_deck.setOnClickListener(v -> YGODialogUtil.dialogDeckSelect(getActivity(), AppsSettings.get().getLastDeckPath(), this)); tv_deck.setOnClickListener(v -> YGODialogUtil.dialogDeckSelect(getActivity(), AppsSettings.get().getLastDeckPath(), this));
} }
//endregion //endregion
@Override
protected void onStop() {
super.onStop();
CardFavorites.get().save();
}
@Override @Override
protected void onDestroy() { protected void onDestroy() {
EventBus.getDefault().unregister(this); EventBus.getDefault().unregister(this);
...@@ -284,13 +286,7 @@ public class DeckManagerActivity extends BaseCardsActivity implements RecyclerVi ...@@ -284,13 +286,7 @@ public class DeckManagerActivity extends BaseCardsActivity implements RecyclerVi
//设置当前卡组 //设置当前卡组
setCurDeck(rs); setCurDeck(rs);
//设置收藏夹 //设置收藏夹
SparseArray<Card> id = mCardLoader.readCards(ConfigManager.mLines, false); mCardSelector.showFavorites(false);
if (id != null) {
for (int i = 0; i < id.size(); i++)
Favorite.add(id.valueAt(i));
}
onSearchResult(Favorite, true);
isSearchResult = false;
}); });
} }
...@@ -440,14 +436,9 @@ public class DeckManagerActivity extends BaseCardsActivity implements RecyclerVi ...@@ -440,14 +436,9 @@ public class DeckManagerActivity extends BaseCardsActivity implements RecyclerVi
addMainCard(cardInfo); addMainCard(cardInfo);
} }
}); });
mCardDetail.setCallBack(new CardDetail.CallBack() { mCardDetail.setCallBack((card, favorite) -> {
@Override if(mCardSelector.isShowFavorite()){
public void onSearchStart() { mCardSelector.showFavorites(false);
}
@Override
public void onSearchResult(List<Card> Cards, boolean isHide) {
DeckManagerActivity.this.onSearchResult(Cards, isHide);
} }
}); });
} }
......
...@@ -24,13 +24,13 @@ import cn.garymb.ygomobile.GameUriManager; ...@@ -24,13 +24,13 @@ import cn.garymb.ygomobile.GameUriManager;
import cn.garymb.ygomobile.YGOStarter; import cn.garymb.ygomobile.YGOStarter;
import cn.garymb.ygomobile.lite.R; import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.ui.activities.WebActivity; import cn.garymb.ygomobile.ui.activities.WebActivity;
import cn.garymb.ygomobile.ui.cards.CardFavorites;
import cn.garymb.ygomobile.ui.plus.DialogPlus; import cn.garymb.ygomobile.ui.plus.DialogPlus;
import cn.garymb.ygomobile.ui.plus.VUiKit; import cn.garymb.ygomobile.ui.plus.VUiKit;
import cn.garymb.ygomobile.utils.FileUtils; import cn.garymb.ygomobile.utils.FileUtils;
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.YGOUtil; import cn.garymb.ygomobile.utils.YGOUtil;
import ocgcore.ConfigManager;
import ocgcore.DataManager; import ocgcore.DataManager;
import static cn.garymb.ygomobile.Constants.ACTION_RELOAD; import static cn.garymb.ygomobile.Constants.ACTION_RELOAD;
...@@ -49,7 +49,6 @@ public class MainActivity extends HomeActivity { ...@@ -49,7 +49,6 @@ public class MainActivity extends HomeActivity {
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE,
}; };
public ConfigManager favConf = DataManager.openConfig(AppsSettings.get().getSystemConfig());
ResCheckTask mResCheckTask; ResCheckTask mResCheckTask;
private GameUriManager mGameUriManager; private GameUriManager mGameUriManager;
private ImageUpdater mImageUpdater; private ImageUpdater mImageUpdater;
...@@ -65,7 +64,7 @@ public class MainActivity extends HomeActivity { ...@@ -65,7 +64,7 @@ public class MainActivity extends HomeActivity {
//资源复制 //资源复制
checkRes(); checkRes();
//加载收藏夹 //加载收藏夹
favConf.read(); CardFavorites.get().load();
} }
@SuppressLint({"StringFormatMatches", "StringFormatInvalid"}) @SuppressLint({"StringFormatMatches", "StringFormatInvalid"})
......
...@@ -379,9 +379,8 @@ public class ResCheckTask extends AsyncTask<Void, Integer, Integer> { ...@@ -379,9 +379,8 @@ public class ResCheckTask extends AsyncTask<Void, Integer, Integer> {
} }
private void fixString(String stringfile) { private void fixString(String stringfile) {
String encoding = "utf-8"; List<String> lines = FileUtils.readLines(stringfile, Constants.DEF_ENCODING);
List<String> lines = FileUtils.readLines(stringfile, encoding); FileUtils.writeLines(stringfile, lines, Constants.DEF_ENCODING, "\n");
FileUtils.writeLines(stringfile, lines, encoding, "\n");
} }
public void checkWindbot() { public void checkWindbot() {
......
...@@ -44,6 +44,9 @@ public class FileUtils { ...@@ -44,6 +44,9 @@ public class FileUtils {
InputStreamReader in = null; InputStreamReader in = null;
FileInputStream inputStream = null; FileInputStream inputStream = null;
List<String> lines = new ArrayList<>(); List<String> lines = new ArrayList<>();
if(encoding == null){
encoding = "utf-8";
}
try { try {
inputStream = new FileInputStream(file); inputStream = new FileInputStream(file);
in = new InputStreamReader(inputStream, encoding); in = new InputStreamReader(inputStream, encoding);
...@@ -52,8 +55,8 @@ public class FileUtils { ...@@ -52,8 +55,8 @@ public class FileUtils {
while ((line = reader.readLine()) != null) { while ((line = reader.readLine()) != null) {
lines.add(line); lines.add(line);
} }
} catch (Exception e) { } catch (Throwable e) {
//ignore
} finally { } finally {
IOUtils.close(in); IOUtils.close(in);
IOUtils.close(inputStream); IOUtils.close(inputStream);
...@@ -62,6 +65,9 @@ public class FileUtils { ...@@ -62,6 +65,9 @@ public class FileUtils {
} }
public static boolean writeLines(String file, List<String> lines, String encoding, String newLine) { public static boolean writeLines(String file, List<String> lines, String encoding, String newLine) {
if(encoding == null){
encoding = "utf-8";
}
FileOutputStream outputStream = null; FileOutputStream outputStream = null;
File tmp = new File(file + ".tmp"); File tmp = new File(file + ".tmp");
boolean ok = false; boolean ok = false;
......
package ocgcore;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import cn.garymb.ygomobile.utils.IOUtils;
public class ConfigManager implements Closeable {
public static List<Integer> mLines = new ArrayList<>();
private File file;
ConfigManager(File file) {
this.file = file;
}
@Override
public void close() {
mLines.clear();
}
public void read() {
mLines.clear();
InputStreamReader in = null;
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
in = new InputStreamReader(inputStream, "utf-8");
BufferedReader reader = new BufferedReader(in);
String line = null;
while ((line = reader.readLine()) != null) {
if (line.startsWith("#"))
continue;
mLines.add(Integer.parseInt(line));
}
} catch (Exception e) {
} finally {
IOUtils.close(in);
IOUtils.close(inputStream);
}
}
//暂时弃用
public boolean isLoad() {
return mLines.size() > 0;
}
public void save(String words) {
//if (!isLoad()) {
// read();
//}
OutputStreamWriter out = null;
FileOutputStream outputStream = null;
File tmp = new File(file.getAbsolutePath() + ".tmp");
boolean ok = false;
try {
outputStream = new FileOutputStream(tmp);
out = new OutputStreamWriter(outputStream, "utf-8");
BufferedWriter writer = new BufferedWriter(out);
if (words != null || words != "") {
writer.write(words);
writer.newLine();
}
int count = mLines.size();
for (int i = 0; i < count; i++) {
writer.write((mLines.get(i)).toString());
if (i < count - 1) {
writer.newLine();
}
}
writer.flush();
ok = true;
} catch (Exception e) {
} finally {
IOUtils.close(out);
IOUtils.close(outputStream);
}
if (ok) {
if (file.exists()) {
file.delete();
}
tmp.renameTo(file);
}
}
//已弃用通过system.conf设置字体大小
public void setFontSize(int size) {
if (!isLoad()) {
read();
}
int count = mLines.size();
for (int i = 0; i < count; i++) {
String line = mLines.get(i).toString();
if (line == null) continue;
line = line.toLowerCase(Locale.US);
if (line.contains("textfont")) {
String[] values = line.split("=");
if (values.length > 1) {
String key = values[0];
String val = values[1];
String newline = key + "= ";
String[] vs = val.trim().split(" ");
newline += vs[0] + " " + size;
mLines.add(i, Integer.parseInt(newline));
mLines.remove(i + 1);
}
}
}
save("");
}
}
...@@ -40,10 +40,6 @@ public class DataManager { ...@@ -40,10 +40,6 @@ public class DataManager {
return mLimitManager; return mLimitManager;
} }
public static ConfigManager openConfig(File conf) {
return new ConfigManager(conf);
}
public CardManager getCardManager() { public CardManager getCardManager() {
return mCardManager; return mCardManager;
} }
......
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/gold" android:state_selected="true" />
<item android:color="@color/white" />
</selector>
\ No newline at end of file
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="@color/red">
<path
android:fillColor="@color/red"
android:pathData="M12,21.35l-1.45,-1.32C5.4,15.36 2,12.28 2,8.5 2,5.42 4.42,3 7.5,3c1.74,0 3.41,0.81 4.5,2.09C13.09,3.81 14.76,3 16.5,3 19.58,3 22,5.42 22,8.5c0,3.78 -3.4,6.86 -8.55,11.54L12,21.35z"/>
</vector>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="@color/red">
<path
android:fillColor="@color/red"
android:pathData="M16.5,3c-1.74,0 -3.41,0.81 -4.5,2.09C10.91,3.81 9.24,3 7.5,3 4.42,3 2,5.42 2,8.5c0,3.78 3.4,6.86 8.55,11.54L12,21.35l1.45,-1.32C18.6,15.36 22,12.28 22,8.5 22,5.42 19.58,3 16.5,3zM12.1,18.55l-0.1,0.1 -0.1,-0.1C7.14,14.24 4,11.39 4,8.5 4,6.5 5.5,5 7.5,5c1.54,0 3.04,0.99 3.57,2.36h1.87C13.46,5.99 14.96,5 16.5,5c2,0 3.5,1.5 3.5,3.5 0,2.89 -3.14,5.74 -7.9,10.05z"/>
</vector>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_baseline_favorite_24" android:state_selected="true" />
<item android:drawable="@drawable/ic_baseline_favorite_24" android:state_checked="true" />
<item android:drawable="@drawable/ic_baseline_favorite_border_24" />
</selector>
\ No newline at end of file
...@@ -145,9 +145,9 @@ ...@@ -145,9 +145,9 @@
android:layout_width="30dp" android:layout_width="30dp"
android:layout_height="30dp" android:layout_height="30dp"
android:layout_gravity="center" android:layout_gravity="center"
android:background="@drawable/ic_control_point" android:src="@drawable/selector_favorite"
android:paddingRight="5dp" android:paddingRight="5dp"
android:scaleType="center" /> android:scaleType="fitCenter" />
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
......
...@@ -46,6 +46,7 @@ ...@@ -46,6 +46,7 @@
android:layout_weight="1" android:layout_weight="1"
android:background="@color/transparent" android:background="@color/transparent"
android:text="@string/my_favorites" android:text="@string/my_favorites"
android:textColor="@color/selector_text_color_white_gold"
android:visibility="visible" /> android:visibility="visible" />
</LinearLayout> </LinearLayout>
......
...@@ -12,8 +12,10 @@ ...@@ -12,8 +12,10 @@
<color name="mediumPurple">#673AB7</color> <color name="mediumPurple">#673AB7</color>
<color name="mediumPurpleDark">#572AA7</color> <color name="mediumPurpleDark">#572AA7</color>
<color name="colorPrimaryDark">#2f41a5</color> <color name="colorPrimaryDark">#2f41a5</color>
<color name="gold">#b8be35</color> <color name="gold">#C8BE35</color>
<color name="colorAccent">#EF3934</color> <color name="gold_light">#D8DE45</color>
<color name="red">#EF3934</color>
<color name="colorAccent">@color/red</color>
<color name="colorAccentDark">#CF3934</color> <color name="colorAccentDark">#CF3934</color>
<color name="item_title">@color/gold</color> <color name="item_title">@color/gold</color>
<color name="item_bg">#65ffffff</color> <color name="item_bg">#65ffffff</color>
......
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