Commit f7558728 authored by qq247321453's avatar qq247321453

收藏

parent 4aedbb45
......@@ -673,4 +673,9 @@ public class AppsSettings {
// Log.i("kk", "saveTemp:" + array);
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 {
boolean COPY_YDK_FILE = false;
String TAG = "ygo-java";
String DEF_ENCODING = "utf-8";
}
......@@ -170,18 +170,37 @@ public class CardLoader implements ICardLoader {
});
}
private Comparator<Card> ASCode = new Comparator<Card>() {
@Override
public int compare(Card o1, Card o2) {
int index1 = (Integer.valueOf(o1.Code).intValue());
int index2 = (Integer.valueOf(o2.Code).intValue());
return index1 - index2;
public List<Card> sort(List<Card> cards){
List<Card> tmp = new ArrayList<Card>();
List<Card> monster = new ArrayList<Card>();
List<Card> spell = new ArrayList<Card>();
List<Card> trap = new ArrayList<Card>();
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>() {
@Override
public int compare(Card o1, Card o2) {
private static final Comparator<Card> ASCode = (o1, o2) -> o1.Code - o2.Code;
private static final Comparator<Card> ASC = (o1, o2) -> {
if (o1.getStar() == o2.getStar()) {
if (o1.Attack == o2.Attack) {
return (int) (o2.Code - o1.Code);
......@@ -191,7 +210,6 @@ public class CardLoader implements ICardLoader {
} else {
return o2.getStar() - o1.getStar();
}
}
};
@Override
......
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
super.onScrollStateChanged(recyclerView, newState);
switch (newState) {
case RecyclerView.SCROLL_STATE_IDLE:
case RecyclerView.SCROLL_STATE_SETTLING:
if (!isFinishing()) {
Glide.with(getContext()).resumeRequests();
}
......@@ -170,11 +171,6 @@ public class CardSearchActivity extends BaseActivity implements CardLoader.CallB
case RecyclerView.SCROLL_STATE_DRAGGING:
Glide.with(getContext()).pauseRequests();
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
if (cardInfo != null) {
if (mCardDetail == null) {
mCardDetail = new CardDetail(this, mImageLoader, mStringManager);
mCardDetail.setCallBack((card, favorite) -> {
if(mCardSelector.isShowFavorite()) {
mCardSelector.showFavorites(false);
}
});
mCardDetail.setOnCardClickListener(new CardDetail.DefaultOnCardClickListener() {
@Override
public void onOpenUrl(Card cardInfo) {
......@@ -302,16 +303,6 @@ public class CardSearchActivity extends BaseActivity implements CardLoader.CallB
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) {
mDialog = new DialogPlus(this);
......@@ -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
public void showNewbieGuide() {
HighlightOptions options = new HighlightOptions.Builder()//绘制一个高亮虚线圈
......
......@@ -4,7 +4,6 @@ package cn.garymb.ygomobile.ui.cards;
import android.content.Context;
import android.graphics.Color;
import android.text.TextUtils;
import android.util.SparseArray;
import android.view.View;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
......@@ -16,6 +15,7 @@ import android.widget.TextView.OnEditorActionListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import cn.garymb.ygomobile.AppsSettings;
......@@ -25,7 +25,6 @@ import cn.garymb.ygomobile.loader.ICardLoader;
import cn.garymb.ygomobile.ui.adapters.SimpleSpinnerAdapter;
import cn.garymb.ygomobile.ui.adapters.SimpleSpinnerItem;
import cn.garymb.ygomobile.ui.plus.DialogPlus;
import ocgcore.ConfigManager;
import ocgcore.DataManager;
import ocgcore.LimitManager;
import ocgcore.StringManager;
......@@ -39,8 +38,6 @@ import ocgcore.enums.CardRace;
import ocgcore.enums.CardType;
import ocgcore.enums.LimitType;
import static cn.garymb.ygomobile.ui.cards.DeckManagerActivity.Favorite;
public class CardSearcher implements View.OnClickListener {
final String[] BtnVals = new String[9];
......@@ -73,8 +70,10 @@ public class CardSearcher implements View.OnClickListener {
private final View layout_monster;
private final ICardLoader dataLoader;
private final Context mContext;
private final Button myFavButton;
private CallBack mCallBack;
CardLoader mCardLoader;
private boolean mShowFavorite;
public interface CallBack {
void onSearchStart();
......@@ -111,7 +110,7 @@ public class CardSearcher implements View.OnClickListener {
atkText = findViewById(R.id.edt_atk);
defText = findViewById(R.id.edt_def);
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);
resetButton = findViewById(R.id.btn_reset);
layout_monster = findViewById(R.id.layout_monster);
......@@ -136,18 +135,11 @@ public class CardSearcher implements View.OnClickListener {
suffixWord.setOnEditorActionListener(searchListener);
myFavButton.setOnClickListener(v -> {
SparseArray<Card> id = mCardLoader.readCards(ConfigManager.mLines, false);
Favorite.clear();
if (id != null) {
for (int i = 0; i < id.size(); i++)
Favorite.add(id.valueAt(i));
}
if (mCallBack != null) {
mCallBack.onSearchStart();
mCallBack.onSearchResult(Favorite, false);
if(isShowFavorite()){
hideFavorites();
} else {
showFavorites(true);
}
DeckManagerActivity.isSearchResult = false;
});
LinkMarkerButton.setOnClickListener(v -> {
......@@ -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() {
initOtSpinners(otSpinner);
initLimitSpinners(limitSpinner);
......@@ -341,6 +351,10 @@ public class CardSearcher implements View.OnClickListener {
spinner.setAdapter(adapter);
}
public boolean isShowFavorite() {
return mShowFavorite;
}
protected String getString(int id) {
return mContext.getString(id);
}
......@@ -528,9 +542,10 @@ public class CardSearcher implements View.OnClickListener {
@Override
public void onClick(View v) {
if (v == searchButton) {
if (v.getId() == R.id.btn_search) {
hideFavorites();
search();
} else if (v == resetButton) {
} else if (v.getId() == R.id.btn_reset) {
resetAll();
}
}
......@@ -554,7 +569,6 @@ public class CardSearcher implements View.OnClickListener {
, getSelect(typeMonsterSpinner2));
lineKey = 0;
}
DeckManagerActivity.isSearchResult = true;
}
private void resetAll() {
......
......@@ -80,7 +80,6 @@ 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.ConfigManager;
import ocgcore.DataManager;
import ocgcore.data.Card;
import ocgcore.data.LimitList;
......@@ -117,8 +116,6 @@ public class DeckManagerActivity extends BaseCardsActivity implements RecyclerVi
private DialogPlus mDialog;
private DialogPlus builderShareLoading;
private boolean isExit = false;
public static boolean isSearchResult;
public static List<Card> Favorite = new ArrayList<>();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
......@@ -169,13 +166,18 @@ public class DeckManagerActivity extends BaseCardsActivity implements RecyclerVi
//最后卡组
_file = new File(mSettings.getLastDeckPath());
}
Favorite.clear();
init(_file);
EventBus.getDefault().register(this);
tv_deck.setOnClickListener(v -> YGODialogUtil.dialogDeckSelect(getActivity(), AppsSettings.get().getLastDeckPath(), this));
}
//endregion
@Override
protected void onStop() {
super.onStop();
CardFavorites.get().save();
}
@Override
protected void onDestroy() {
EventBus.getDefault().unregister(this);
......@@ -284,13 +286,7 @@ public class DeckManagerActivity extends BaseCardsActivity implements RecyclerVi
//设置当前卡组
setCurDeck(rs);
//设置收藏夹
SparseArray<Card> id = mCardLoader.readCards(ConfigManager.mLines, false);
if (id != null) {
for (int i = 0; i < id.size(); i++)
Favorite.add(id.valueAt(i));
}
onSearchResult(Favorite, true);
isSearchResult = false;
mCardSelector.showFavorites(false);
});
}
......@@ -440,14 +436,9 @@ public class DeckManagerActivity extends BaseCardsActivity implements RecyclerVi
addMainCard(cardInfo);
}
});
mCardDetail.setCallBack(new CardDetail.CallBack() {
@Override
public void onSearchStart() {
}
@Override
public void onSearchResult(List<Card> Cards, boolean isHide) {
DeckManagerActivity.this.onSearchResult(Cards, isHide);
mCardDetail.setCallBack((card, favorite) -> {
if(mCardSelector.isShowFavorite()){
mCardSelector.showFavorites(false);
}
});
}
......
......@@ -24,13 +24,13 @@ import cn.garymb.ygomobile.GameUriManager;
import cn.garymb.ygomobile.YGOStarter;
import cn.garymb.ygomobile.lite.R;
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.VUiKit;
import cn.garymb.ygomobile.utils.FileUtils;
import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.NetUtils;
import cn.garymb.ygomobile.utils.YGOUtil;
import ocgcore.ConfigManager;
import ocgcore.DataManager;
import static cn.garymb.ygomobile.Constants.ACTION_RELOAD;
......@@ -49,7 +49,6 @@ public class MainActivity extends HomeActivity {
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
};
public ConfigManager favConf = DataManager.openConfig(AppsSettings.get().getSystemConfig());
ResCheckTask mResCheckTask;
private GameUriManager mGameUriManager;
private ImageUpdater mImageUpdater;
......@@ -65,7 +64,7 @@ public class MainActivity extends HomeActivity {
//资源复制
checkRes();
//加载收藏夹
favConf.read();
CardFavorites.get().load();
}
@SuppressLint({"StringFormatMatches", "StringFormatInvalid"})
......
......@@ -379,9 +379,8 @@ public class ResCheckTask extends AsyncTask<Void, Integer, Integer> {
}
private void fixString(String stringfile) {
String encoding = "utf-8";
List<String> lines = FileUtils.readLines(stringfile, encoding);
FileUtils.writeLines(stringfile, lines, encoding, "\n");
List<String> lines = FileUtils.readLines(stringfile, Constants.DEF_ENCODING);
FileUtils.writeLines(stringfile, lines, Constants.DEF_ENCODING, "\n");
}
public void checkWindbot() {
......
......@@ -44,6 +44,9 @@ public class FileUtils {
InputStreamReader in = null;
FileInputStream inputStream = null;
List<String> lines = new ArrayList<>();
if(encoding == null){
encoding = "utf-8";
}
try {
inputStream = new FileInputStream(file);
in = new InputStreamReader(inputStream, encoding);
......@@ -52,8 +55,8 @@ public class FileUtils {
while ((line = reader.readLine()) != null) {
lines.add(line);
}
} catch (Exception e) {
} catch (Throwable e) {
//ignore
} finally {
IOUtils.close(in);
IOUtils.close(inputStream);
......@@ -62,6 +65,9 @@ public class FileUtils {
}
public static boolean writeLines(String file, List<String> lines, String encoding, String newLine) {
if(encoding == null){
encoding = "utf-8";
}
FileOutputStream outputStream = null;
File tmp = new File(file + ".tmp");
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 {
return mLimitManager;
}
public static ConfigManager openConfig(File conf) {
return new ConfigManager(conf);
}
public CardManager getCardManager() {
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 @@
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_gravity="center"
android:background="@drawable/ic_control_point"
android:src="@drawable/selector_favorite"
android:paddingRight="5dp"
android:scaleType="center" />
android:scaleType="fitCenter" />
</LinearLayout>
<LinearLayout
......
......@@ -46,6 +46,7 @@
android:layout_weight="1"
android:background="@color/transparent"
android:text="@string/my_favorites"
android:textColor="@color/selector_text_color_white_gold"
android:visibility="visible" />
</LinearLayout>
......
......@@ -12,8 +12,10 @@
<color name="mediumPurple">#673AB7</color>
<color name="mediumPurpleDark">#572AA7</color>
<color name="colorPrimaryDark">#2f41a5</color>
<color name="gold">#b8be35</color>
<color name="colorAccent">#EF3934</color>
<color name="gold">#C8BE35</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="item_title">@color/gold</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