Commit 445e34ac authored by fallenstardust's avatar fallenstardust

fix loadDeckFromFile

parent 63852a9c
...@@ -9,8 +9,7 @@ import android.util.Log; ...@@ -9,8 +9,7 @@ import android.util.Log;
import android.widget.Toast; import android.widget.Toast;
import java.io.File; import java.io.File;
import java.io.FileOutputStream; import java.io.FileInputStream;
import java.util.List;
import cn.garymb.ygodata.YGOGameOptions; import cn.garymb.ygodata.YGOGameOptions;
import cn.garymb.ygomobile.bean.Deck; import cn.garymb.ygomobile.bean.Deck;
...@@ -68,35 +67,86 @@ public class GameUriManager { ...@@ -68,35 +67,86 @@ public class GameUriManager {
return activity; return activity;
} }
private String getDeckName(Uri uri) {
String path = uri.getPath();
Log.i("kk", "path="+path);
if(path != null) {
int index = path.lastIndexOf("/");
if (index > 0) {
String name = path.substring(index + 1);
index = name.lastIndexOf(".");
if (index > 0) {
//1.ydk
name = name.substring(0, index);
}
return name;
}
}
return "tmp_" + System.currentTimeMillis();
}
private File getDeckFile(File dir, String name) {
File file = new File(dir, name + ".ydk");
if (file.exists()) {
for (int i = 2; i < 10; i++) {
file = new File(dir, name + "(" + i + ").ydk");
if (!file.exists()) {
return file;
}
}
return new File(dir, "tmp_" + System.currentTimeMillis() + ".ydk");
} else {
if (!dir.exists()) {
dir.mkdirs();
}
}
return file;
}
private boolean isDeckDir(File file) {
if (!Constants.COPY_YDK_FILE) {
return true;
}
String deck = new File(AppsSettings.get().getDeckDir()).getAbsolutePath();
return TextUtils.equals(deck, file.getParentFile().getAbsolutePath());
}
private void doUri(Uri uri) { private void doUri(Uri uri) {
if ("file".equals(uri.getScheme())) { if ("file".equals(uri.getScheme())) {
File file = new File(uri.getPath()); File file = new File(uri.getPath());
Intent startdeck = new Intent(getActivity(), DeckManagerActivity.getDeckManager()); Intent startdeck = new Intent(getActivity(), DeckManagerActivity.getDeckManager());
if (isDeckDir(file)) {
//deck目录
startdeck.putExtra(Intent.EXTRA_TEXT, file.getAbsolutePath()); startdeck.putExtra(Intent.EXTRA_TEXT, file.getAbsolutePath());
} else {
//非deck目录
File ydk = getDeckFile(new File(AppsSettings.get().getDeckDir()), getDeckName(uri));
FileUtils.copyFile(file, ydk);
startdeck.putExtra(Intent.EXTRA_TEXT, ydk.getAbsolutePath());
}
activity.startActivity(startdeck); activity.startActivity(startdeck);
} else if("content".equals(uri.getScheme())) { } else if ("content".equals(uri.getScheme())) {
try { try {
List<String> paths = uri.getPathSegments(); File dir = Constants.COPY_YDK_FILE?new File(AppsSettings.get().getDeckDir()):new File(getActivity().getApplicationInfo().dataDir, "cache");
String name = "tmp_" + System.currentTimeMillis() + ".ydk"; File ydk = getDeckFile(dir, getDeckName(uri));
if (paths.size() > 0) {
String tmp = paths.get(paths.size() - 1);
if (tmp.endsWith(".ydk")) {
name = tmp;
}
}
File file = new File(AppsSettings.get().getDeckDir(), name);
ParcelFileDescriptor pfd = getActivity().getContentResolver().openFileDescriptor(uri, "r"); ParcelFileDescriptor pfd = getActivity().getContentResolver().openFileDescriptor(uri, "r");
if (pfd == null) { if (pfd == null) {
return; return;
} else { } else {
FileUtils.copyFile(file.getAbsolutePath(), new FileOutputStream(pfd.getFileDescriptor())); try {
FileUtils.copyFile(new FileInputStream(pfd.getFileDescriptor()), ydk);
} catch (Throwable e) {
e.printStackTrace();
} finally {
pfd.close(); pfd.close();
} }
}
Intent startdeck = new Intent(getActivity(), DeckManagerActivity.getDeckManager()); Intent startdeck = new Intent(getActivity(), DeckManagerActivity.getDeckManager());
startdeck.putExtra(Intent.EXTRA_TEXT, file.getAbsolutePath()); startdeck.putExtra(Intent.EXTRA_TEXT, ydk.getAbsolutePath());
activity.startActivity(startdeck); activity.startActivity(startdeck);
} catch (Throwable e) { } catch (Throwable e) {
throw new RuntimeException(e); e.printStackTrace();
} }
} else { } else {
String host = uri.getHost(); String host = uri.getHost();
......
...@@ -4,15 +4,11 @@ import android.content.ClipData; ...@@ -4,15 +4,11 @@ import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Intent; import android.content.Intent;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.Keep;
import android.support.annotation.Nullable; import android.support.annotation.Nullable;
import android.support.v4.util.LruCache;
import android.support.v7.widget.AppCompatSpinner; import android.support.v7.widget.AppCompatSpinner;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerViewItemListener; import android.support.v7.widget.RecyclerViewItemListener;
...@@ -65,6 +61,7 @@ import cn.garymb.ygomobile.ui.plus.DefaultOnBoomListener; ...@@ -65,6 +61,7 @@ import cn.garymb.ygomobile.ui.plus.DefaultOnBoomListener;
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.BitmapUtil; import cn.garymb.ygomobile.utils.BitmapUtil;
import cn.garymb.ygomobile.utils.FileUtils;
import cn.garymb.ygomobile.utils.IOUtils; import cn.garymb.ygomobile.utils.IOUtils;
import cn.garymb.ygomobile.utils.ShareUtil; import cn.garymb.ygomobile.utils.ShareUtil;
import ocgcore.DataManager; import ocgcore.DataManager;
...@@ -75,17 +72,17 @@ import ocgcore.enums.LimitType; ...@@ -75,17 +72,17 @@ import ocgcore.enums.LimitType;
import static cn.garymb.ygomobile.Constants.YDK_FILE_EX; import static cn.garymb.ygomobile.Constants.YDK_FILE_EX;
class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerViewItemListener.OnItemListener, OnItemDragListener { class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerViewItemListener.OnItemListener, OnItemDragListener {
//region ui onCreate/onDestroy
private RecyclerView mRecyclerView; private RecyclerView mRecyclerView;
private DeckAdapater mDeckAdapater; private DeckAdapater mDeckAdapater;
private AppsSettings mSettings = AppsSettings.get(); private AppsSettings mSettings = AppsSettings.get();
private LimitList mLimitList;
private File mYdkFile;
private File mPreLoadFile; private File mPreLoadFile;
private DeckItemTouchHelper mDeckItemTouchHelper; private DeckItemTouchHelper mDeckItemTouchHelper;
private AppCompatSpinner mDeckSpinner; private AppCompatSpinner mDeckSpinner;
private SimpleSpinnerAdapter mSimpleSpinnerAdapter; private SimpleSpinnerAdapter mSimpleSpinnerAdapter;
private AppCompatSpinner mLimitSpinner; private AppCompatSpinner mLimitSpinner;
private String mPreLoad;
private CardDetail mCardDetail; private CardDetail mCardDetail;
private DialogPlus mDialog; private DialogPlus mDialog;
...@@ -111,7 +108,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -111,7 +108,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
File file = getSelectDeck(mDeckSpinner); File file = getSelectDeck(mDeckSpinner);
if (file != null) { if (file != null) {
loadDeck(file); loadDeckFromFile(file);
} }
} }
...@@ -119,11 +116,9 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -119,11 +116,9 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
public void onNothingSelected(AdapterView<?> adapterView) { public void onNothingSelected(AdapterView<?> adapterView) {
} }
}); });
String preLoadFile = null;
if (getIntent().hasExtra(Intent.EXTRA_TEXT)) { if (getIntent().hasExtra(Intent.EXTRA_TEXT)) {
String path = getIntent().getStringExtra(Intent.EXTRA_TEXT); preLoadFile = getIntent().getStringExtra(Intent.EXTRA_TEXT);
if (!TextUtils.isEmpty(path)) {
mPreLoad = path;
}
} }
initBoomMenuButton($(R.id.bmb)); initBoomMenuButton($(R.id.bmb));
...@@ -134,52 +129,17 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -134,52 +129,17 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
doMenu(R.id.action_card_list); doMenu(R.id.action_card_list);
}); });
// //
DialogPlus dlg = DialogPlus.show(this, null, getString(R.string.loading));
final File _file; final File _file;
if (!TextUtils.isEmpty(mPreLoad)) { //打开指定卡组
mPreLoadFile = new File(mPreLoad); if (!TextUtils.isEmpty(preLoadFile) && (mPreLoadFile = new File(preLoadFile)).exists()) {
//外面卡组
_file = mPreLoadFile; _file = mPreLoadFile;
mPreLoad = null;
} else { } else {
mPreLoadFile = null;
//最后卡组
_file = new File(mSettings.getResourcePath(), Constants.CORE_DECK_PATH + "/" + mSettings.getLastDeck() + Constants.YDK_FILE_EX); _file = new File(mSettings.getResourcePath(), Constants.CORE_DECK_PATH + "/" + mSettings.getLastDeck() + Constants.YDK_FILE_EX);
} }
init(_file);
VUiKit.defer().when(() -> {
DataManager.get().load(false);
if (mLimitManager.getCount() > 0) {
mCardLoader.setLimitList(mLimitManager.getTopLimit());
}
File file = _file;
if (!file.exists()) {
//当默认卡组不存在的时候
List<File> files = getYdkFiles();
if (files != null && files.size() > 0) {
file = files.get(0);
}
}
//EXTRA_DECK
if (file == null) {
return new DeckInfo();
}
Log.i("kk", "load ydk " + file);
mYdkFile = file;
if (mCardLoader.isOpen() && mYdkFile.exists()) {
return mDeckAdapater.read(mCardLoader, mYdkFile, mLimitList);
} else {
return new DeckInfo();
}
}).done((rs) -> {
isLoad = true;
dlg.dismiss();
mCardSelector.initItems();
mLimitList = mCardLoader.getLimitList();
isLoad = true;
setCurYdkFile(rs.source, false);
initLimitListSpinners(mLimitSpinner);
initDecksListSpinners(mDeckSpinner);
mDeckAdapater.setDeck(rs);
mDeckAdapater.notifyDataSetChanged();
});
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
} }
...@@ -188,7 +148,9 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -188,7 +148,9 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
EventBus.getDefault().unregister(this); EventBus.getDefault().unregister(this);
super.onDestroy(); super.onDestroy();
} }
//endregion
//region card edit
@Override @Override
public void onLimitListChanged(LimitList limitList) { public void onLimitListChanged(LimitList limitList) {
...@@ -205,7 +167,6 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -205,7 +167,6 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
if (Constants.DEBUG) if (Constants.DEBUG)
Log.d("kk", "delete " + pos); Log.d("kk", "delete " + pos);
if (mSettings.isDialogDelete()) { if (mSettings.isDialogDelete()) {
DeckItem deckItem = mDeckAdapater.getItem(pos); DeckItem deckItem = mDeckAdapater.getItem(pos);
if (deckItem == null || deckItem.getCardInfo() == null) { if (deckItem == null || deckItem.getCardInfo() == null) {
return; return;
...@@ -232,45 +193,93 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -232,45 +193,93 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
@Override @Override
public void onDragEnd() { public void onDragEnd() {
} }
//endregion
private void loadDeck(File file) { //region load deck
loadDeck(file, false); private void loadDeckFromFile(File file) {
if (!mCardLoader.isOpen() || file == null || !file.exists()) {
setCurDeck(new DeckInfo());
return;
} }
DialogPlus dlg = DialogPlus.show(this, null, getString(R.string.loading));
VUiKit.defer().when(() -> {
if (mCardLoader.isOpen() && file.exists()) {
return mDeckAdapater.read(mCardLoader, file, mCardLoader.getLimitList());
} else {
return new DeckInfo();
}
}).done((rs) -> {
dlg.dismiss();
setCurDeck(rs);
});
}
//endregion
private void loadDeck(File file, boolean noSaveLast) { //region init
private void init(File ydk){
DialogPlus dlg = DialogPlus.show(this, null, getString(R.string.loading)); DialogPlus dlg = DialogPlus.show(this, null, getString(R.string.loading));
VUiKit.defer().when(() -> { VUiKit.defer().when(() -> {
DataManager.get().load(false);
//默认第一个卡表
if (mLimitManager.getCount() > 0) {
mCardLoader.setLimitList(mLimitManager.getTopLimit());
}
File file = ydk;
if (!file.exists()) {
//当默认卡组不存在的时候
List<File> files = getYdkFiles();
if (files != null && files.size() > 0) {
file = files.get(0);
}
}
//EXTRA_DECK
if (file == null) { if (file == null) {
return new DeckInfo(); return new DeckInfo();
} }
Log.i("kk", "load ydk " + file);
if (mCardLoader.isOpen() && file.exists()) { if (mCardLoader.isOpen() && file.exists()) {
return mDeckAdapater.read(mCardLoader, file, mLimitList); return mDeckAdapater.read(mCardLoader, file, mCardLoader.getLimitList());
} else { } else {
return new DeckInfo(); return new DeckInfo();
} }
}).done((rs) -> { }).done((rs) -> {
isLoad = true;
dlg.dismiss(); dlg.dismiss();
setCurYdkFile(file, noSaveLast); mCardSelector.initItems();
mDeckAdapater.setDeck(rs); initLimitListSpinners(mLimitSpinner, mCardLoader.getLimitList());
mDeckAdapater.notifyDataSetChanged(); initDecksListSpinners(mDeckSpinner, rs.source);
//设置当前卡组
setCurDeck(rs);
}); });
} }
//endregion
private void setCurYdkFile(File file) { /**
setCurYdkFile(file, false); * 设置当前卡组
* @param deckInfo
*/
private void setCurDeck(DeckInfo deckInfo) {
if(deckInfo == null){
deckInfo = new DeckInfo();
} }
File file = deckInfo.source;
private void setCurYdkFile(File file, boolean noSaveLast) {
mYdkFile = file;
if (file != null && file.exists()) { if (file != null && file.exists()) {
String name = IOUtils.tirmName(file.getName(), Constants.YDK_FILE_EX); String name = IOUtils.tirmName(file.getName(), Constants.YDK_FILE_EX);
setActionBarSubTitle(name); setActionBarSubTitle(name);
if (!noSaveLast) { if (inDeckDir(file)) {
//deck文件夹里面的,则保存文件
mSettings.setLastDeck(name); mSettings.setLastDeck(name);
} }
} else { } else {
setActionBarSubTitle(getString(R.string.noname)); setActionBarSubTitle(getString(R.string.noname));
} }
mDeckAdapater.setDeck(deckInfo);
mDeckAdapater.notifyDataSetChanged();
}
private boolean inDeckDir(File file) {
String deck = new File(AppsSettings.get().getDeckDir()).getAbsolutePath();
return TextUtils.equals(deck, file.getParentFile().getAbsolutePath());
} }
@Override @Override
...@@ -310,11 +319,6 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -310,11 +319,6 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
} }
} }
@Override
public void onResetSearch() {
super.onResetSearch();
}
@Override @Override
public void onSearchResult(List<Card> cardInfos) { public void onSearchResult(List<Card> cardInfos) {
super.onSearchResult(cardInfos); super.onSearchResult(cardInfos);
...@@ -326,9 +330,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -326,9 +330,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
if (isShowDrawer()) { if (isShowDrawer()) {
return; return;
} }
showDeckCard(view, pos); showDeckCard(view, pos);
} }
@Override @Override
...@@ -336,9 +338,6 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -336,9 +338,6 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
if (isShowDrawer()) { if (isShowDrawer()) {
return; return;
} }
//拖拽中,就不显示
if (Constants.DECK_SINGLE_PRESS_DRAG) {
}
} }
@Override @Override
...@@ -360,8 +359,8 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -360,8 +359,8 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
} }
private boolean isShowDrawer() { private boolean isShowDrawer() {
return mDrawerlayout.isDrawerOpen(Gravity.LEFT) return mDrawerlayout.isDrawerOpen(Constants.CARD_RESULT_GRAVITY)
|| mDrawerlayout.isDrawerOpen(Gravity.RIGHT); || mDrawerlayout.isDrawerOpen(Constants.CARD_SEARCH_GRAVITY);
} }
private boolean isShowCard() { private boolean isShowCard() {
...@@ -455,30 +454,12 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -455,30 +454,12 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
} }
private boolean isExit = false; private boolean isExit = false;
//
// @Override
// public void finish() {
// if (!isExit) {
// if (mYdkFile != null && mYdkFile.exists()) {
// DialogPlus builder = new DialogPlus(this);
// builder.setTitle(R.string.question);
// builder.setMessage(R.string.quit_deck_tip);
// builder.setLeftButtonListener((dlg, s) -> {
// dlg.dismiss();
// isExit = true;
// finish();
// });
// builder.show();
// return;
// }
// }
// super.finish();
// }
@Override @Override
protected void onBackHome() { protected void onBackHome() {
if (mDeckAdapater.isChanged()) { if (mDeckAdapater.isChanged()) {
if (mYdkFile != null && mYdkFile.exists()) { File ydk = mDeckAdapater.getYdkFile();
if (ydk != null && ydk.exists()) {
DialogPlus builder = new DialogPlus(this); DialogPlus builder = new DialogPlus(this);
builder.setTitle(R.string.question); builder.setTitle(R.string.question);
builder.setMessage(R.string.quit_deck_tip); builder.setMessage(R.string.quit_deck_tip);
...@@ -505,13 +486,14 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -505,13 +486,14 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
@Override @Override
public void onBackPressed() { public void onBackPressed() {
if (mDrawerlayout.isDrawerOpen(Gravity.RIGHT)) { if (mDrawerlayout.isDrawerOpen(Constants.CARD_RESULT_GRAVITY)) {
mDrawerlayout.closeDrawer(Gravity.RIGHT); mDrawerlayout.closeDrawer(Constants.CARD_RESULT_GRAVITY);
} else if (mDrawerlayout.isDrawerOpen(Gravity.LEFT)) { } else if (mDrawerlayout.isDrawerOpen(Constants.CARD_SEARCH_GRAVITY)) {
mDrawerlayout.closeDrawer(Gravity.LEFT); mDrawerlayout.closeDrawer(Constants.CARD_SEARCH_GRAVITY);
} else if (!isExit) { } else if (!isExit) {
if (mDeckAdapater.isChanged()) { if (mDeckAdapater.isChanged()) {
if (mYdkFile != null && mYdkFile.exists()) { File ydk = mDeckAdapater.getYdkFile();
if (ydk != null && ydk.exists()) {
DialogPlus builder = new DialogPlus(this); DialogPlus builder = new DialogPlus(this);
builder.setTitle(R.string.question); builder.setTitle(R.string.question);
builder.setMessage(R.string.quit_deck_tip); builder.setMessage(R.string.quit_deck_tip);
...@@ -533,23 +515,27 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -533,23 +515,27 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
private boolean checkLimit(Card cardInfo, boolean tip) { private boolean checkLimit(Card cardInfo, boolean tip) {
SparseArray<Integer> mCount = mDeckAdapater.getCardCount(); SparseArray<Integer> mCount = mDeckAdapater.getCardCount();
if (mLimitList != null && mLimitList.check(cardInfo, LimitType.Forbidden)) { LimitList limitList = mDeckAdapater.getLimitList();
Integer id = cardInfo.Alias > 0 ? cardInfo.Alias : cardInfo.Code;
Integer count = mCount.get(id);
if (limitList == null) {
return count != null && count <= 3;
}
if (limitList.check(cardInfo, LimitType.Forbidden)) {
if (tip) { if (tip) {
showToast(getString(R.string.tip_card_max, 0), Toast.LENGTH_SHORT); showToast(getString(R.string.tip_card_max, 0), Toast.LENGTH_SHORT);
} }
return false; return false;
} }
Integer id = cardInfo.Alias > 0 ? cardInfo.Alias : cardInfo.Code;
Integer count = mCount.get(id);
if (count != null) { if (count != null) {
if (mLimitList != null && mLimitList.check(cardInfo, LimitType.Limit)) { if (limitList.check(cardInfo, LimitType.Limit)) {
if (count >= 1) { if (count >= 1) {
if (tip) { if (tip) {
showToast(getString(R.string.tip_card_max, 1), Toast.LENGTH_SHORT); showToast(getString(R.string.tip_card_max, 1), Toast.LENGTH_SHORT);
} }
return false; return false;
} }
} else if (mLimitList != null && mLimitList.check(cardInfo, LimitType.SemiLimit)) { } else if (limitList.check(cardInfo, LimitType.SemiLimit)) {
if (count >= 2) { if (count >= 2) {
if (tip) { if (tip) {
showToast(getString(R.string.tip_card_max, 2), Toast.LENGTH_SHORT); showToast(getString(R.string.tip_card_max, 2), Toast.LENGTH_SHORT);
...@@ -594,10 +580,15 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -594,10 +580,15 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
shareDeck(); shareDeck();
break; break;
case R.id.action_save: case R.id.action_save:
if (mYdkFile == null) { if(mPreLoadFile != null && mPreLoadFile == mDeckAdapater.getYdkFile()){
inputDeckName(null); //需要保存到deck文件夹
inputDeckName(mPreLoadFile, true);
}else {
if (mDeckAdapater.getYdkFile() == null) {
inputDeckName(null, true);
} else { } else {
save(); save(mDeckAdapater.getYdkFile());
}
} }
break; break;
// case R.id.action_save_as: // case R.id.action_save_as:
...@@ -608,32 +599,28 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -608,32 +599,28 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
// } // }
// break; // break;
case R.id.action_rename: case R.id.action_rename:
if (mYdkFile == null) { inputDeckName(mDeckAdapater.getYdkFile(), false);
inputDeckName(null);
} else {
inputDeckName(mYdkFile.getName());
}
break; break;
case R.id.action_deck_new: { case R.id.action_deck_new: {
final String old = mYdkFile == null ? null : mYdkFile.getAbsolutePath(); final File old = mDeckAdapater.getYdkFile();
setCurYdkFile(null);
DialogPlus builder = new DialogPlus(this); DialogPlus builder = new DialogPlus(this);
builder.setTitle(R.string.question); builder.setTitle(R.string.question);
builder.setMessage(R.string.question_keep_cur_deck); builder.setMessage(R.string.question_keep_cur_deck);
builder.setMessageGravity(Gravity.CENTER_HORIZONTAL); builder.setMessageGravity(Gravity.CENTER_HORIZONTAL);
builder.setLeftButtonListener((dlg, rs) -> { builder.setLeftButtonListener((dlg, rs) -> {
dlg.dismiss(); dlg.dismiss();
inputDeckName(old); //复制当前卡组
inputDeckName(old, true);
}); });
builder.setRightButtonListener((dlg, rs) -> { builder.setRightButtonListener((dlg, rs) -> {
dlg.dismiss(); dlg.dismiss();
loadDeck(null); setCurDeck(null);
inputDeckName(old); inputDeckName(null, true);
}); });
builder.setOnCloseLinster((dlg) -> { builder.setOnCloseLinster((dlg) -> {
dlg.dismiss(); dlg.dismiss();
loadDeck(null); setCurDeck(null);
inputDeckName(old); inputDeckName(null, true);
}); });
builder.show(); builder.show();
} }
...@@ -657,12 +644,15 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -657,12 +644,15 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
builder.setMessage(R.string.question_delete_deck); builder.setMessage(R.string.question_delete_deck);
builder.setMessageGravity(Gravity.CENTER_HORIZONTAL); builder.setMessageGravity(Gravity.CENTER_HORIZONTAL);
builder.setLeftButtonListener((dlg, rs) -> { builder.setLeftButtonListener((dlg, rs) -> {
if (mYdkFile != null && mYdkFile.exists()) { File ydk = mDeckAdapater.getYdkFile();
mYdkFile.delete(); if(ydk == null){
return;
} }
FileUtils.deleteFile(ydk);
dlg.dismiss(); dlg.dismiss();
initDecksListSpinners(mDeckSpinner); File file = getFirstYdk();
loadDeck(null); initDecksListSpinners(mDeckSpinner, file);
loadDeckFromFile(file);
}); });
builder.show(); builder.show();
} }
...@@ -683,6 +673,11 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -683,6 +673,11 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
return true; return true;
} }
private File getFirstYdk() {
List<File> files = getYdkFiles();
return files == null || files.size() == 0 ? null : files.get(0);
}
private void shareDeck() { private void shareDeck() {
// 开启绘图缓存 // 开启绘图缓存
mRecyclerView.setDrawingCacheEnabled(true); mRecyclerView.setDrawingCacheEnabled(true);
...@@ -698,7 +693,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -698,7 +693,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
mRecyclerView.destroyDrawingCache(); mRecyclerView.destroyDrawingCache();
// shotRecyclerView(mRecyclerView) // shotRecyclerView(mRecyclerView)
Deck deck = mDeckAdapater.toDeck(mYdkFile); Deck deck = mDeckAdapater.toDeck(mDeckAdapater.getYdkFile());
String deckName = deck.getName(); String deckName = deck.getName();
int end = deckName.lastIndexOf("."); int end = deckName.lastIndexOf(".");
if (end != -1) { if (end != -1) {
...@@ -751,7 +746,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -751,7 +746,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
}); });
if (files != null) { if (files != null) {
List<File> list = new ArrayList<>(Arrays.asList(files)); List<File> list = new ArrayList<>(Arrays.asList(files));
if (mPreLoadFile != null) { if (mPreLoadFile != null && mPreLoadFile.exists()) {
boolean hasCur = false; boolean hasCur = false;
for (File f : list) { for (File f : list) {
if (TextUtils.equals(f.getAbsolutePath(), mPreLoadFile.getAbsolutePath())) { if (TextUtils.equals(f.getAbsolutePath(), mPreLoadFile.getAbsolutePath())) {
...@@ -768,10 +763,10 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -768,10 +763,10 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
return null; return null;
} }
private void initDecksListSpinners(Spinner spinner) { private void initDecksListSpinners(Spinner spinner, File curYdk) {
List<File> files = getYdkFiles(); List<File> files = getYdkFiles();
List<SimpleSpinnerItem> items = new ArrayList<>(); List<SimpleSpinnerItem> items = new ArrayList<>();
String name = mYdkFile != null ? mYdkFile.getName() : null; String name = curYdk != null ? curYdk.getName() : null;
int index = -1; int index = -1;
if (files != null) { if (files != null) {
int i = 0; int i = 0;
...@@ -812,12 +807,11 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -812,12 +807,11 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
// if (index >= 0) { // if (index >= 0) {
// spinner.setSelection(index); // spinner.setSelection(index);
// } // }
private void initLimitListSpinners(Spinner spinner) { private void initLimitListSpinners(Spinner spinner, LimitList cur) {
List<SimpleSpinnerItem> items = new ArrayList<>(); List<SimpleSpinnerItem> items = new ArrayList<>();
List<String> limitLists = mLimitManager.getLimitNames(); List<String> limitLists = mLimitManager.getLimitNames();
int index = -1; int index = -1;
int count = mLimitManager.getCount(); int count = mLimitManager.getCount();
LimitList cur = mLimitList;
items.add(new SimpleSpinnerItem(0, getString(R.string.label_limitlist))); items.add(new SimpleSpinnerItem(0, getString(R.string.label_limitlist)));
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
int j = i + 1; int j = i + 1;
...@@ -849,10 +843,10 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -849,10 +843,10 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
private void setLimitList(LimitList limitList) { private void setLimitList(LimitList limitList) {
if (limitList == null) return; if (limitList == null) return;
boolean nochanged = mLimitList != null && TextUtils.equals(mLimitList.getName(), limitList.getName()); LimitList last = mDeckAdapater.getLimitList();
mLimitList = limitList; boolean nochanged = last != null && TextUtils.equals(last.getName(), limitList.getName());
if (!nochanged) { if (!nochanged) {
mDeckAdapater.setLimitList(mLimitList); mDeckAdapater.setLimitList(limitList);
runOnUiThread(() -> { runOnUiThread(() -> {
mDeckAdapater.notifyItemRangeChanged(DeckItem.MainStart, DeckItem.MainEnd); mDeckAdapater.notifyItemRangeChanged(DeckItem.MainStart, DeckItem.MainEnd);
mDeckAdapater.notifyItemRangeChanged(DeckItem.ExtraStart, DeckItem.ExtraEnd); mDeckAdapater.notifyItemRangeChanged(DeckItem.ExtraStart, DeckItem.ExtraEnd);
...@@ -865,7 +859,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -865,7 +859,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
}); });
} }
private void inputDeckName(String old) { private void inputDeckName(File oldYdk, boolean keepOld) {
DialogPlus builder = new DialogPlus(this); DialogPlus builder = new DialogPlus(this);
// AlertDialog.Builder builder = new AlertDialog.Builder(this); // AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(R.string.intpu_name); builder.setTitle(R.string.intpu_name);
...@@ -873,12 +867,12 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -873,12 +867,12 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
editText.setGravity(Gravity.TOP | Gravity.LEFT); editText.setGravity(Gravity.TOP | Gravity.LEFT);
editText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS); editText.setInputType(InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
editText.setSingleLine(); editText.setSingleLine();
if(oldYdk != null) {
editText.setText(oldYdk.getName());
}
builder.setContentView(editText); builder.setContentView(editText);
builder.setOnCloseLinster((dlg) -> { builder.setOnCloseLinster((dlg) -> {
dlg.dismiss(); dlg.dismiss();
if (old != null) {
loadDeck(new File(old));
}
}); });
builder.setLeftButtonListener((dlg, s) -> { builder.setLeftButtonListener((dlg, s) -> {
CharSequence name = editText.getText(); CharSequence name = editText.getText();
...@@ -892,23 +886,24 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -892,23 +886,24 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
showToast(R.string.file_exist, Toast.LENGTH_SHORT); showToast(R.string.file_exist, Toast.LENGTH_SHORT);
return; return;
} }
if ( mYdkFile != null && mYdkFile.exists()) { if (!keepOld && oldYdk != null && oldYdk.exists()) {
if (mYdkFile.renameTo(ydk)) { if (oldYdk.renameTo(ydk)) {
mYdkFile = ydk; initDecksListSpinners(mDeckSpinner, ydk);
initDecksListSpinners(mDeckSpinner);
dlg.dismiss(); dlg.dismiss();
loadDeck(ydk); loadDeckFromFile(ydk);
} }
} else { } else {
if(oldYdk == mPreLoadFile){
mPreLoadFile = null;
}
dlg.dismiss(); dlg.dismiss();
try { try {
ydk.createNewFile(); ydk.createNewFile();
} catch (IOException e) { } catch (IOException e) {
} }
mYdkFile = ydk; initDecksListSpinners(mDeckSpinner, ydk);
initDecksListSpinners(mDeckSpinner); save(ydk);
save(); loadDeckFromFile(ydk);
setCurYdkFile(mYdkFile);
} }
} else { } else {
dlg.dismiss(); dlg.dismiss();
...@@ -917,8 +912,8 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView ...@@ -917,8 +912,8 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
builder.show(); builder.show();
} }
private void save() { private void save(File ydk) {
if (mDeckAdapater.save(mYdkFile)) { if (mDeckAdapater.save(ydk)) {
showToast(R.string.save_tip_ok, Toast.LENGTH_SHORT); showToast(R.string.save_tip_ok, Toast.LENGTH_SHORT);
} else { } else {
showToast(R.string.save_tip_fail, Toast.LENGTH_SHORT); showToast(R.string.save_tip_fail, Toast.LENGTH_SHORT);
......
...@@ -2,6 +2,8 @@ package cn.garymb.ygomobile.ui.cards.deck; ...@@ -2,6 +2,8 @@ package cn.garymb.ygomobile.ui.cards.deck;
import android.content.Context; import android.content.Context;
import android.os.SystemClock; import android.os.SystemClock;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView; import android.support.v7.widget.RecyclerView;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.SparseArray; import android.util.SparseArray;
...@@ -65,6 +67,7 @@ public class DeckAdapater extends RecyclerView.Adapter<DeckViewHolder> implement ...@@ -65,6 +67,7 @@ public class DeckAdapater extends RecyclerView.Adapter<DeckViewHolder> implement
private ImageLoader imageLoader; private ImageLoader imageLoader;
private boolean showHead = false; private boolean showHead = false;
private String mDeckMd5; private String mDeckMd5;
private DeckInfo mDeckInfo;
public DeckAdapater(Context context, RecyclerView recyclerView, ImageLoader imageLoader) { public DeckAdapater(Context context, RecyclerView recyclerView, ImageLoader imageLoader) {
this.context = context; this.context = context;
...@@ -378,7 +381,23 @@ public class DeckAdapater extends RecyclerView.Adapter<DeckViewHolder> implement ...@@ -378,7 +381,23 @@ public class DeckAdapater extends RecyclerView.Adapter<DeckViewHolder> implement
return mSideCount; return mSideCount;
} }
public DeckInfo getDeckInfo() {
return mDeckInfo;
}
public LimitList getLimitList() {
return mLimitList;
}
public File getYdkFile(){
if(mDeckInfo != null){
return mDeckInfo.source;
}
return null;
}
public void setDeck(DeckInfo deck) { public void setDeck(DeckInfo deck) {
mDeckInfo = deck;
if (deck != null) { if (deck != null) {
loadData(deck); loadData(deck);
} }
...@@ -386,7 +405,9 @@ public class DeckAdapater extends RecyclerView.Adapter<DeckViewHolder> implement ...@@ -386,7 +405,9 @@ public class DeckAdapater extends RecyclerView.Adapter<DeckViewHolder> implement
} }
public DeckInfo read(CardLoader cardLoader, File file, LimitList limitList) { public DeckInfo read(CardLoader cardLoader, File file, LimitList limitList) {
if(limitList != null) {
setLimitList(limitList); setLimitList(limitList);
}
return DeckLoader.readDeck(cardLoader, file, limitList); return DeckLoader.readDeck(cardLoader, file, limitList);
} }
......
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