Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
YGOMobile
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
fallenstardust
YGOMobile
Commits
445e34ac
Commit
445e34ac
authored
Mar 29, 2019
by
fallenstardust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix loadDeckFromFile
parent
63852a9c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
240 additions
and
174 deletions
+240
-174
mobile/src/main/java/cn/garymb/ygomobile/GameUriManager.java
mobile/src/main/java/cn/garymb/ygomobile/GameUriManager.java
+67
-17
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/DeckManagerActivityImpl.java
...cn/garymb/ygomobile/ui/cards/DeckManagerActivityImpl.java
+151
-156
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck/DeckAdapater.java
.../java/cn/garymb/ygomobile/ui/cards/deck/DeckAdapater.java
+22
-1
No files found.
mobile/src/main/java/cn/garymb/ygomobile/GameUriManager.java
View file @
445e34ac
...
...
@@ -9,8 +9,7 @@ import android.util.Log;
import
android.widget.Toast
;
import
java.io.File
;
import
java.io.FileOutputStream
;
import
java.util.List
;
import
java.io.FileInputStream
;
import
cn.garymb.ygodata.YGOGameOptions
;
import
cn.garymb.ygomobile.bean.Deck
;
...
...
@@ -68,35 +67,86 @@ public class GameUriManager {
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
)
{
if
(
"file"
.
equals
(
uri
.
getScheme
()))
{
File
file
=
new
File
(
uri
.
getPath
());
Intent
startdeck
=
new
Intent
(
getActivity
(),
DeckManagerActivity
.
getDeckManager
());
startdeck
.
putExtra
(
Intent
.
EXTRA_TEXT
,
file
.
getAbsolutePath
());
if
(
isDeckDir
(
file
))
{
//deck目录
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
);
}
else
if
(
"content"
.
equals
(
uri
.
getScheme
()))
{
}
else
if
(
"content"
.
equals
(
uri
.
getScheme
()))
{
try
{
List
<
String
>
paths
=
uri
.
getPathSegments
();
String
name
=
"tmp_"
+
System
.
currentTimeMillis
()
+
".ydk"
;
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
);
File
dir
=
Constants
.
COPY_YDK_FILE
?
new
File
(
AppsSettings
.
get
().
getDeckDir
()):
new
File
(
getActivity
().
getApplicationInfo
().
dataDir
,
"cache"
);
File
ydk
=
getDeckFile
(
dir
,
getDeckName
(
uri
));
ParcelFileDescriptor
pfd
=
getActivity
().
getContentResolver
().
openFileDescriptor
(
uri
,
"r"
);
if
(
pfd
==
null
)
{
return
;
}
else
{
FileUtils
.
copyFile
(
file
.
getAbsolutePath
(),
new
FileOutputStream
(
pfd
.
getFileDescriptor
()));
pfd
.
close
();
try
{
FileUtils
.
copyFile
(
new
FileInputStream
(
pfd
.
getFileDescriptor
()),
ydk
);
}
catch
(
Throwable
e
)
{
e
.
printStackTrace
();
}
finally
{
pfd
.
close
();
}
}
Intent
startdeck
=
new
Intent
(
getActivity
(),
DeckManagerActivity
.
getDeckManager
());
startdeck
.
putExtra
(
Intent
.
EXTRA_TEXT
,
file
.
getAbsolutePath
());
startdeck
.
putExtra
(
Intent
.
EXTRA_TEXT
,
ydk
.
getAbsolutePath
());
activity
.
startActivity
(
startdeck
);
}
catch
(
Throwable
e
)
{
throw
new
RuntimeException
(
e
);
e
.
printStackTrace
(
);
}
}
else
{
String
host
=
uri
.
getHost
();
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/DeckManagerActivityImpl.java
View file @
445e34ac
...
...
@@ -4,15 +4,11 @@ import android.content.ClipData;
import
android.content.ClipboardManager
;
import
android.content.Intent
;
import
android.graphics.Bitmap
;
import
android.graphics.Canvas
;
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.Bundle
;
import
android.support.annotation.Keep
;
import
android.support.annotation.Nullable
;
import
android.support.v4.util.LruCache
;
import
android.support.v7.widget.AppCompatSpinner
;
import
android.support.v7.widget.RecyclerView
;
import
android.support.v7.widget.RecyclerViewItemListener
;
...
...
@@ -65,6 +61,7 @@ import cn.garymb.ygomobile.ui.plus.DefaultOnBoomListener;
import
cn.garymb.ygomobile.ui.plus.DialogPlus
;
import
cn.garymb.ygomobile.ui.plus.VUiKit
;
import
cn.garymb.ygomobile.utils.BitmapUtil
;
import
cn.garymb.ygomobile.utils.FileUtils
;
import
cn.garymb.ygomobile.utils.IOUtils
;
import
cn.garymb.ygomobile.utils.ShareUtil
;
import
ocgcore.DataManager
;
...
...
@@ -75,17 +72,17 @@ import ocgcore.enums.LimitType;
import
static
cn
.
garymb
.
ygomobile
.
Constants
.
YDK_FILE_EX
;
class
DeckManagerActivityImpl
extends
BaseCardsAcitivity
implements
RecyclerViewItemListener
.
OnItemListener
,
OnItemDragListener
{
//region ui onCreate/onDestroy
private
RecyclerView
mRecyclerView
;
private
DeckAdapater
mDeckAdapater
;
private
AppsSettings
mSettings
=
AppsSettings
.
get
();
private
LimitList
mLimitList
;
private
File
mYdkFile
;
private
File
mPreLoadFile
;
private
DeckItemTouchHelper
mDeckItemTouchHelper
;
private
AppCompatSpinner
mDeckSpinner
;
private
SimpleSpinnerAdapter
mSimpleSpinnerAdapter
;
private
AppCompatSpinner
mLimitSpinner
;
private
String
mPreLoad
;
private
CardDetail
mCardDetail
;
private
DialogPlus
mDialog
;
...
...
@@ -111,7 +108,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
public
void
onItemSelected
(
AdapterView
<?>
adapterView
,
View
view
,
int
i
,
long
l
)
{
File
file
=
getSelectDeck
(
mDeckSpinner
);
if
(
file
!=
null
)
{
loadDeck
(
file
);
loadDeck
FromFile
(
file
);
}
}
...
...
@@ -119,11 +116,9 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
public
void
onNothingSelected
(
AdapterView
<?>
adapterView
)
{
}
});
String
preLoadFile
=
null
;
if
(
getIntent
().
hasExtra
(
Intent
.
EXTRA_TEXT
))
{
String
path
=
getIntent
().
getStringExtra
(
Intent
.
EXTRA_TEXT
);
if
(!
TextUtils
.
isEmpty
(
path
))
{
mPreLoad
=
path
;
}
preLoadFile
=
getIntent
().
getStringExtra
(
Intent
.
EXTRA_TEXT
);
}
initBoomMenuButton
(
$
(
R
.
id
.
bmb
));
...
...
@@ -134,52 +129,17 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
doMenu
(
R
.
id
.
action_card_list
);
});
//
DialogPlus
dlg
=
DialogPlus
.
show
(
this
,
null
,
getString
(
R
.
string
.
loading
));
final
File
_file
;
if
(!
TextUtils
.
isEmpty
(
mPreLoad
))
{
mPreLoadFile
=
new
File
(
mPreLoad
);
//打开指定卡组
if
(!
TextUtils
.
isEmpty
(
preLoadFile
)
&&
(
mPreLoadFile
=
new
File
(
preLoadFile
)).
exists
())
{
//外面卡组
_file
=
mPreLoadFile
;
mPreLoad
=
null
;
}
else
{
mPreLoadFile
=
null
;
//最后卡组
_file
=
new
File
(
mSettings
.
getResourcePath
(),
Constants
.
CORE_DECK_PATH
+
"/"
+
mSettings
.
getLastDeck
()
+
Constants
.
YDK_FILE_EX
);
}
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
();
});
init
(
_file
);
EventBus
.
getDefault
().
register
(
this
);
}
...
...
@@ -188,7 +148,9 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
EventBus
.
getDefault
().
unregister
(
this
);
super
.
onDestroy
();
}
//endregion
//region card edit
@Override
public
void
onLimitListChanged
(
LimitList
limitList
)
{
...
...
@@ -205,7 +167,6 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
if
(
Constants
.
DEBUG
)
Log
.
d
(
"kk"
,
"delete "
+
pos
);
if
(
mSettings
.
isDialogDelete
())
{
DeckItem
deckItem
=
mDeckAdapater
.
getItem
(
pos
);
if
(
deckItem
==
null
||
deckItem
.
getCardInfo
()
==
null
)
{
return
;
...
...
@@ -232,45 +193,93 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
@Override
public
void
onDragEnd
()
{
}
//endregion
private
void
loadDeck
(
File
file
)
{
loadDeck
(
file
,
false
);
//region load deck
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
));
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
)
{
return
new
DeckInfo
();
}
Log
.
i
(
"kk"
,
"load ydk "
+
file
);
if
(
mCardLoader
.
isOpen
()
&&
file
.
exists
())
{
return
mDeckAdapater
.
read
(
mCardLoader
,
file
,
m
LimitList
);
return
mDeckAdapater
.
read
(
mCardLoader
,
file
,
m
CardLoader
.
getLimitList
()
);
}
else
{
return
new
DeckInfo
();
}
}).
done
((
rs
)
->
{
isLoad
=
true
;
dlg
.
dismiss
();
setCurYdkFile
(
file
,
noSaveLast
);
mDeckAdapater
.
setDeck
(
rs
);
mDeckAdapater
.
notifyDataSetChanged
();
mCardSelector
.
initItems
();
initLimitListSpinners
(
mLimitSpinner
,
mCardLoader
.
getLimitList
());
initDecksListSpinners
(
mDeckSpinner
,
rs
.
source
);
//设置当前卡组
setCurDeck
(
rs
);
});
}
//endregion
private
void
setCurYdkFile
(
File
file
)
{
setCurYdkFile
(
file
,
false
);
}
private
void
setCurYdkFile
(
File
file
,
boolean
noSaveLast
)
{
mYdkFile
=
file
;
/**
* 设置当前卡组
* @param deckInfo
*/
private
void
setCurDeck
(
DeckInfo
deckInfo
)
{
if
(
deckInfo
==
null
){
deckInfo
=
new
DeckInfo
();
}
File
file
=
deckInfo
.
source
;
if
(
file
!=
null
&&
file
.
exists
())
{
String
name
=
IOUtils
.
tirmName
(
file
.
getName
(),
Constants
.
YDK_FILE_EX
);
setActionBarSubTitle
(
name
);
if
(!
noSaveLast
)
{
if
(
inDeckDir
(
file
))
{
//deck文件夹里面的,则保存文件
mSettings
.
setLastDeck
(
name
);
}
}
else
{
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
...
...
@@ -310,11 +319,6 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
}
}
@Override
public
void
onResetSearch
()
{
super
.
onResetSearch
();
}
@Override
public
void
onSearchResult
(
List
<
Card
>
cardInfos
)
{
super
.
onSearchResult
(
cardInfos
);
...
...
@@ -326,19 +330,14 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
if
(
isShowDrawer
())
{
return
;
}
showDeckCard
(
view
,
pos
);
}
}
@Override
public
void
onItemLongClick
(
View
view
,
int
pos
)
{
if
(
isShowDrawer
())
{
return
;
}
//拖拽中,就不显示
if
(
Constants
.
DECK_SINGLE_PRESS_DRAG
)
{
}
}
@Override
...
...
@@ -360,8 +359,8 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
}
private
boolean
isShowDrawer
()
{
return
mDrawerlayout
.
isDrawerOpen
(
Gravity
.
LEFT
)
||
mDrawerlayout
.
isDrawerOpen
(
Gravity
.
RIGHT
);
return
mDrawerlayout
.
isDrawerOpen
(
Constants
.
CARD_RESULT_GRAVITY
)
||
mDrawerlayout
.
isDrawerOpen
(
Constants
.
CARD_SEARCH_GRAVITY
);
}
private
boolean
isShowCard
()
{
...
...
@@ -455,30 +454,12 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
}
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
protected
void
onBackHome
()
{
if
(
mDeckAdapater
.
isChanged
())
{
if
(
mYdkFile
!=
null
&&
mYdkFile
.
exists
())
{
File
ydk
=
mDeckAdapater
.
getYdkFile
();
if
(
ydk
!=
null
&&
ydk
.
exists
())
{
DialogPlus
builder
=
new
DialogPlus
(
this
);
builder
.
setTitle
(
R
.
string
.
question
);
builder
.
setMessage
(
R
.
string
.
quit_deck_tip
);
...
...
@@ -505,13 +486,14 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
@Override
public
void
onBackPressed
()
{
if
(
mDrawerlayout
.
isDrawerOpen
(
Gravity
.
RIGHT
))
{
mDrawerlayout
.
closeDrawer
(
Gravity
.
RIGHT
);
}
else
if
(
mDrawerlayout
.
isDrawerOpen
(
Gravity
.
LEFT
))
{
mDrawerlayout
.
closeDrawer
(
Gravity
.
LEFT
);
if
(
mDrawerlayout
.
isDrawerOpen
(
Constants
.
CARD_RESULT_GRAVITY
))
{
mDrawerlayout
.
closeDrawer
(
Constants
.
CARD_RESULT_GRAVITY
);
}
else
if
(
mDrawerlayout
.
isDrawerOpen
(
Constants
.
CARD_SEARCH_GRAVITY
))
{
mDrawerlayout
.
closeDrawer
(
Constants
.
CARD_SEARCH_GRAVITY
);
}
else
if
(!
isExit
)
{
if
(
mDeckAdapater
.
isChanged
())
{
if
(
mYdkFile
!=
null
&&
mYdkFile
.
exists
())
{
File
ydk
=
mDeckAdapater
.
getYdkFile
();
if
(
ydk
!=
null
&&
ydk
.
exists
())
{
DialogPlus
builder
=
new
DialogPlus
(
this
);
builder
.
setTitle
(
R
.
string
.
question
);
builder
.
setMessage
(
R
.
string
.
quit_deck_tip
);
...
...
@@ -533,23 +515,27 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
private
boolean
checkLimit
(
Card
cardInfo
,
boolean
tip
)
{
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
)
{
showToast
(
getString
(
R
.
string
.
tip_card_max
,
0
),
Toast
.
LENGTH_SHORT
);
}
return
false
;
}
Integer
id
=
cardInfo
.
Alias
>
0
?
cardInfo
.
Alias
:
cardInfo
.
Code
;
Integer
count
=
mCount
.
get
(
id
);
if
(
count
!=
null
)
{
if
(
mLimitList
!=
null
&&
mL
imitList
.
check
(
cardInfo
,
LimitType
.
Limit
))
{
if
(
l
imitList
.
check
(
cardInfo
,
LimitType
.
Limit
))
{
if
(
count
>=
1
)
{
if
(
tip
)
{
showToast
(
getString
(
R
.
string
.
tip_card_max
,
1
),
Toast
.
LENGTH_SHORT
);
}
return
false
;
}
}
else
if
(
mLimitList
!=
null
&&
mL
imitList
.
check
(
cardInfo
,
LimitType
.
SemiLimit
))
{
}
else
if
(
l
imitList
.
check
(
cardInfo
,
LimitType
.
SemiLimit
))
{
if
(
count
>=
2
)
{
if
(
tip
)
{
showToast
(
getString
(
R
.
string
.
tip_card_max
,
2
),
Toast
.
LENGTH_SHORT
);
...
...
@@ -594,10 +580,15 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
shareDeck
();
break
;
case
R
.
id
.
action_save
:
if
(
mYdkFile
==
null
)
{
inputDeckName
(
null
);
}
else
{
save
();
if
(
mPreLoadFile
!=
null
&&
mPreLoadFile
==
mDeckAdapater
.
getYdkFile
()){
//需要保存到deck文件夹
inputDeckName
(
mPreLoadFile
,
true
);
}
else
{
if
(
mDeckAdapater
.
getYdkFile
()
==
null
)
{
inputDeckName
(
null
,
true
);
}
else
{
save
(
mDeckAdapater
.
getYdkFile
());
}
}
break
;
// case R.id.action_save_as:
...
...
@@ -608,32 +599,28 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
// }
// break;
case
R
.
id
.
action_rename
:
if
(
mYdkFile
==
null
)
{
inputDeckName
(
null
);
}
else
{
inputDeckName
(
mYdkFile
.
getName
());
}
inputDeckName
(
mDeckAdapater
.
getYdkFile
(),
false
);
break
;
case
R
.
id
.
action_deck_new
:
{
final
String
old
=
mYdkFile
==
null
?
null
:
mYdkFile
.
getAbsolutePath
();
setCurYdkFile
(
null
);
final
File
old
=
mDeckAdapater
.
getYdkFile
();
DialogPlus
builder
=
new
DialogPlus
(
this
);
builder
.
setTitle
(
R
.
string
.
question
);
builder
.
setMessage
(
R
.
string
.
question_keep_cur_deck
);
builder
.
setMessageGravity
(
Gravity
.
CENTER_HORIZONTAL
);
builder
.
setLeftButtonListener
((
dlg
,
rs
)
->
{
dlg
.
dismiss
();
inputDeckName
(
old
);
//复制当前卡组
inputDeckName
(
old
,
true
);
});
builder
.
setRightButtonListener
((
dlg
,
rs
)
->
{
dlg
.
dismiss
();
load
Deck
(
null
);
inputDeckName
(
old
);
setCur
Deck
(
null
);
inputDeckName
(
null
,
true
);
});
builder
.
setOnCloseLinster
((
dlg
)
->
{
dlg
.
dismiss
();
load
Deck
(
null
);
inputDeckName
(
old
);
setCur
Deck
(
null
);
inputDeckName
(
null
,
true
);
});
builder
.
show
();
}
...
...
@@ -657,12 +644,15 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
builder
.
setMessage
(
R
.
string
.
question_delete_deck
);
builder
.
setMessageGravity
(
Gravity
.
CENTER_HORIZONTAL
);
builder
.
setLeftButtonListener
((
dlg
,
rs
)
->
{
if
(
mYdkFile
!=
null
&&
mYdkFile
.
exists
())
{
mYdkFile
.
delete
();
File
ydk
=
mDeckAdapater
.
getYdkFile
();
if
(
ydk
==
null
){
return
;
}
FileUtils
.
deleteFile
(
ydk
);
dlg
.
dismiss
();
initDecksListSpinners
(
mDeckSpinner
);
loadDeck
(
null
);
File
file
=
getFirstYdk
();
initDecksListSpinners
(
mDeckSpinner
,
file
);
loadDeckFromFile
(
file
);
});
builder
.
show
();
}
...
...
@@ -683,6 +673,11 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
return
true
;
}
private
File
getFirstYdk
()
{
List
<
File
>
files
=
getYdkFiles
();
return
files
==
null
||
files
.
size
()
==
0
?
null
:
files
.
get
(
0
);
}
private
void
shareDeck
()
{
// 开启绘图缓存
mRecyclerView
.
setDrawingCacheEnabled
(
true
);
...
...
@@ -698,7 +693,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
mRecyclerView
.
destroyDrawingCache
();
// shotRecyclerView(mRecyclerView)
Deck
deck
=
mDeckAdapater
.
toDeck
(
m
YdkFile
);
Deck
deck
=
mDeckAdapater
.
toDeck
(
m
DeckAdapater
.
getYdkFile
()
);
String
deckName
=
deck
.
getName
();
int
end
=
deckName
.
lastIndexOf
(
"."
);
if
(
end
!=
-
1
)
{
...
...
@@ -751,7 +746,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
});
if
(
files
!=
null
)
{
List
<
File
>
list
=
new
ArrayList
<>(
Arrays
.
asList
(
files
));
if
(
mPreLoadFile
!=
null
)
{
if
(
mPreLoadFile
!=
null
&&
mPreLoadFile
.
exists
()
)
{
boolean
hasCur
=
false
;
for
(
File
f
:
list
)
{
if
(
TextUtils
.
equals
(
f
.
getAbsolutePath
(),
mPreLoadFile
.
getAbsolutePath
()))
{
...
...
@@ -768,10 +763,10 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
return
null
;
}
private
void
initDecksListSpinners
(
Spinner
spinner
)
{
private
void
initDecksListSpinners
(
Spinner
spinner
,
File
curYdk
)
{
List
<
File
>
files
=
getYdkFiles
();
List
<
SimpleSpinnerItem
>
items
=
new
ArrayList
<>();
String
name
=
mYdkFile
!=
null
?
mYdkFile
.
getName
()
:
null
;
String
name
=
curYdk
!=
null
?
curYdk
.
getName
()
:
null
;
int
index
=
-
1
;
if
(
files
!=
null
)
{
int
i
=
0
;
...
...
@@ -812,12 +807,11 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
// if (index >= 0) {
// spinner.setSelection(index);
// }
private
void
initLimitListSpinners
(
Spinner
spinner
)
{
private
void
initLimitListSpinners
(
Spinner
spinner
,
LimitList
cur
)
{
List
<
SimpleSpinnerItem
>
items
=
new
ArrayList
<>();
List
<
String
>
limitLists
=
mLimitManager
.
getLimitNames
();
int
index
=
-
1
;
int
count
=
mLimitManager
.
getCount
();
LimitList
cur
=
mLimitList
;
items
.
add
(
new
SimpleSpinnerItem
(
0
,
getString
(
R
.
string
.
label_limitlist
)));
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
int
j
=
i
+
1
;
...
...
@@ -849,10 +843,10 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
private
void
setLimitList
(
LimitList
limitList
)
{
if
(
limitList
==
null
)
return
;
boolean
nochanged
=
mLimitList
!=
null
&&
TextUtils
.
equals
(
mLimitList
.
getName
(),
limitList
.
getName
()
);
mLimitList
=
limitList
;
LimitList
last
=
mDeckAdapater
.
getLimitList
(
);
boolean
nochanged
=
last
!=
null
&&
TextUtils
.
equals
(
last
.
getName
(),
limitList
.
getName
())
;
if
(!
nochanged
)
{
mDeckAdapater
.
setLimitList
(
mL
imitList
);
mDeckAdapater
.
setLimitList
(
l
imitList
);
runOnUiThread
(()
->
{
mDeckAdapater
.
notifyItemRangeChanged
(
DeckItem
.
MainStart
,
DeckItem
.
MainEnd
);
mDeckAdapater
.
notifyItemRangeChanged
(
DeckItem
.
ExtraStart
,
DeckItem
.
ExtraEnd
);
...
...
@@ -865,7 +859,7 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
});
}
private
void
inputDeckName
(
String
o
ld
)
{
private
void
inputDeckName
(
File
oldYdk
,
boolean
keepO
ld
)
{
DialogPlus
builder
=
new
DialogPlus
(
this
);
// AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder
.
setTitle
(
R
.
string
.
intpu_name
);
...
...
@@ -873,12 +867,12 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
editText
.
setGravity
(
Gravity
.
TOP
|
Gravity
.
LEFT
);
editText
.
setInputType
(
InputType
.
TYPE_TEXT_FLAG_NO_SUGGESTIONS
);
editText
.
setSingleLine
();
if
(
oldYdk
!=
null
)
{
editText
.
setText
(
oldYdk
.
getName
());
}
builder
.
setContentView
(
editText
);
builder
.
setOnCloseLinster
((
dlg
)
->
{
dlg
.
dismiss
();
if
(
old
!=
null
)
{
loadDeck
(
new
File
(
old
));
}
});
builder
.
setLeftButtonListener
((
dlg
,
s
)
->
{
CharSequence
name
=
editText
.
getText
();
...
...
@@ -892,23 +886,24 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
showToast
(
R
.
string
.
file_exist
,
Toast
.
LENGTH_SHORT
);
return
;
}
if
(
mYdkFile
!=
null
&&
mYdkFile
.
exists
())
{
if
(
mYdkFile
.
renameTo
(
ydk
))
{
mYdkFile
=
ydk
;
initDecksListSpinners
(
mDeckSpinner
);
if
(!
keepOld
&&
oldYdk
!=
null
&&
oldYdk
.
exists
())
{
if
(
oldYdk
.
renameTo
(
ydk
))
{
initDecksListSpinners
(
mDeckSpinner
,
ydk
);
dlg
.
dismiss
();
loadDeck
(
ydk
);
loadDeck
FromFile
(
ydk
);
}
}
else
{
if
(
oldYdk
==
mPreLoadFile
){
mPreLoadFile
=
null
;
}
dlg
.
dismiss
();
try
{
ydk
.
createNewFile
();
}
catch
(
IOException
e
)
{
}
mYdkFile
=
ydk
;
initDecksListSpinners
(
mDeckSpinner
);
save
();
setCurYdkFile
(
mYdkFile
);
initDecksListSpinners
(
mDeckSpinner
,
ydk
);
save
(
ydk
);
loadDeckFromFile
(
ydk
);
}
}
else
{
dlg
.
dismiss
();
...
...
@@ -917,8 +912,8 @@ class DeckManagerActivityImpl extends BaseCardsAcitivity implements RecyclerView
builder
.
show
();
}
private
void
save
()
{
if
(
mDeckAdapater
.
save
(
mYdkFile
))
{
private
void
save
(
File
ydk
)
{
if
(
mDeckAdapater
.
save
(
ydk
))
{
showToast
(
R
.
string
.
save_tip_ok
,
Toast
.
LENGTH_SHORT
);
}
else
{
showToast
(
R
.
string
.
save_tip_fail
,
Toast
.
LENGTH_SHORT
);
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/deck/DeckAdapater.java
View file @
445e34ac
...
...
@@ -2,6 +2,8 @@ package cn.garymb.ygomobile.ui.cards.deck;
import
android.content.Context
;
import
android.os.SystemClock
;
import
android.support.annotation.NonNull
;
import
android.support.annotation.Nullable
;
import
android.support.v7.widget.RecyclerView
;
import
android.text.TextUtils
;
import
android.util.SparseArray
;
...
...
@@ -65,6 +67,7 @@ public class DeckAdapater extends RecyclerView.Adapter<DeckViewHolder> implement
private
ImageLoader
imageLoader
;
private
boolean
showHead
=
false
;
private
String
mDeckMd5
;
private
DeckInfo
mDeckInfo
;
public
DeckAdapater
(
Context
context
,
RecyclerView
recyclerView
,
ImageLoader
imageLoader
)
{
this
.
context
=
context
;
...
...
@@ -378,7 +381,23 @@ public class DeckAdapater extends RecyclerView.Adapter<DeckViewHolder> implement
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
)
{
mDeckInfo
=
deck
;
if
(
deck
!=
null
)
{
loadData
(
deck
);
}
...
...
@@ -386,7 +405,9 @@ public class DeckAdapater extends RecyclerView.Adapter<DeckViewHolder> implement
}
public
DeckInfo
read
(
CardLoader
cardLoader
,
File
file
,
LimitList
limitList
)
{
setLimitList
(
limitList
);
if
(
limitList
!=
null
)
{
setLimitList
(
limitList
);
}
return
DeckLoader
.
readDeck
(
cardLoader
,
file
,
limitList
);
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment