Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Y
YGOMobile-Cn-Ko-En
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-Cn-Ko-En
Commits
b3cfcbd0
Commit
b3cfcbd0
authored
Jan 17, 2025
by
fallenstardust
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修正嵌套括号显示不正确
根据高亮文字设置查询关键字
parent
2cce17bd
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
97 additions
and
50 deletions
+97
-50
mobile/src/main/java/cn/garymb/ygomobile/loader/CardSearchInfo.java
.../main/java/cn/garymb/ygomobile/loader/CardSearchInfo.java
+1
-1
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/CardDetail.java
...rc/main/java/cn/garymb/ygomobile/ui/cards/CardDetail.java
+84
-27
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/CardSearcher.java
.../main/java/cn/garymb/ygomobile/ui/cards/CardSearcher.java
+10
-14
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/DeckManagerFragment.java
...ava/cn/garymb/ygomobile/ui/cards/DeckManagerFragment.java
+0
-6
mobile/src/main/java/ocgcore/PackManager.java
mobile/src/main/java/ocgcore/PackManager.java
+2
-2
No files found.
mobile/src/main/java/cn/garymb/ygomobile/loader/CardSearchInfo.java
View file @
b3cfcbd0
...
...
@@ -23,7 +23,7 @@ public class CardSearchInfo implements ICardFilter{
private
int
limitType
;
private
String
limitName
;
p
rivate
CardSearchInfo
()
{
p
ublic
CardSearchInfo
()
{
}
public
int
getLimitType
()
{
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/CardDetail.java
View file @
b3cfcbd0
...
...
@@ -31,6 +31,7 @@ import com.bm.library.PhotoView;
import
com.feihua.dialogutils.util.DialogUtils
;
import
java.io.File
;
import
java.util.Stack
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
...
...
@@ -38,6 +39,8 @@ import cn.garymb.ygomobile.AppsSettings;
import
cn.garymb.ygomobile.Constants
;
import
cn.garymb.ygomobile.core.IrrlichtBridge
;
import
cn.garymb.ygomobile.lite.R
;
import
cn.garymb.ygomobile.loader.CardKeyWord
;
import
cn.garymb.ygomobile.loader.CardSearchInfo
;
import
cn.garymb.ygomobile.loader.ImageLoader
;
import
cn.garymb.ygomobile.ui.activities.BaseActivity
;
import
cn.garymb.ygomobile.ui.adapters.BaseAdapterPlus
;
...
...
@@ -300,36 +303,88 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
}
public
void
setHighlightTextWithClickableSpans
(
String
text
)
{
// 将卡片效果文本转换成SpannableString对象才能进行高亮操作
SpannableString
spannableString
=
new
SpannableString
(
text
);
// 使用正则表达式查找「」和""之间的所有文本
String
patternString
=
"(「(.*?)」|\"(.*?)\")"
;
Pattern
pattern
=
Pattern
.
compile
(
patternString
);
Matcher
matcher
=
pattern
.
matcher
(
text
);
// 遍历所有匹配项并设置颜色和点击监听
while
(
matcher
.
find
())
{
int
startIndex
=
matcher
.
start
()
+
1
;
int
endIndex
=
matcher
.
end
()
-
1
;
// 设置颜色
spannableString
.
setSpan
(
new
ForegroundColorSpan
(
Color
.
GREEN
),
startIndex
,
endIndex
,
SpannableString
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
// 设置点击监听
spannableString
.
setSpan
(
new
ClickableSpan
()
{
@Override
public
void
onClick
(
View
widget
)
{
// 获取被点击的文本内容
String
clickedText
=
((
TextView
)
widget
).
getText
().
subSequence
(
startIndex
,
endIndex
).
toString
();
//TODO 点击搜索该关键词
}
@Override
public
void
updateDrawState
(
android
.
text
.
TextPaint
ds
)
{
//添加下划线
ds
.
setUnderlineText
(
true
);
}
},
startIndex
,
endIndex
,
SpannableString
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
// 解析器状态
QuoteType
currentQuoteType
=
QuoteType
.
NONE
;
Stack
<
Integer
>
stack
=
new
Stack
<>();
int
start
=
-
1
;
for
(
int
i
=
0
;
i
<
text
.
length
();
i
++)
{
char
c
=
text
.
charAt
(
i
);
switch
(
currentQuoteType
)
{
case
NONE:
if
(
c
==
'「'
)
{
currentQuoteType
=
QuoteType
.
ANGLE_QUOTE
;
start
=
i
+
1
;
stack
.
push
(
i
);
}
else
if
(
c
==
'"'
)
{
currentQuoteType
=
QuoteType
.
DOUBLE_QUOTE
;
start
=
i
+
1
;
stack
.
push
(
i
);
}
break
;
case
ANGLE_QUOTE:
if
(
c
==
'「'
)
{
stack
.
push
(
i
);
}
else
if
(
c
==
'」'
&&
!
stack
.
isEmpty
())
{
stack
.
pop
();
if
(
stack
.
isEmpty
())
{
applySpan
(
spannableString
,
start
,
i
,
YGOUtil
.
c
(
R
.
color
.
holo_blue_bright
));
currentQuoteType
=
QuoteType
.
NONE
;
}
}
break
;
case
DOUBLE_QUOTE:
if
(
c
==
'"'
&&
!
stack
.
isEmpty
())
{
stack
.
pop
();
if
(
stack
.
isEmpty
())
{
applySpan
(
spannableString
,
start
,
i
,
YGOUtil
.
c
(
R
.
color
.
holo_blue_bright
));
currentQuoteType
=
QuoteType
.
NONE
;
}
else
{
stack
.
push
(
i
);
// 对于嵌套的情况,只增加/减少栈中的元素而不应用样式
}
}
break
;
}
}
// 处理未关闭的引号对
if
(!
stack
.
isEmpty
())
{
// Handle unclosed quotes error, e.g., log a warning or throw an exception
}
// 将效果文本textview设置上处理过的文本
desc
.
setText
(
spannableString
);
desc
.
setMovementMethod
(
android
.
text
.
method
.
LinkMovementMethod
.
getInstance
());
// 确保点击事件生效
desc
.
setMovementMethod
(
android
.
text
.
method
.
LinkMovementMethod
.
getInstance
());
}
private
void
applySpan
(
SpannableString
spannableString
,
int
start
,
int
end
,
int
color
)
{
// 设置颜色
spannableString
.
setSpan
(
new
ForegroundColorSpan
(
color
),
start
,
end
,
SpannableString
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
// 设置点击监听
spannableString
.
setSpan
(
new
ClickableSpan
()
{
@Override
public
void
onClick
(
View
widget
)
{
// 获取被点击的文本内容
String
clickedText
=
((
TextView
)
widget
).
getText
().
subSequence
(
start
,
end
).
toString
();
handleItemClick
(
clickedText
);
}
@Override
public
void
updateDrawState
(
android
.
text
.
TextPaint
ds
)
{
// 可以在这里自定义点击状态下的样式,如去掉下划线
ds
.
setUnderlineText
(
true
);
}
},
start
,
end
,
SpannableString
.
SPAN_EXCLUSIVE_EXCLUSIVE
);
}
// 处理点击事件的方法
private
void
handleItemClick
(
String
clickedText
)
{
CardSearchInfo
searchInfo
=
new
CardSearchInfo
.
Builder
().
keyword
(
clickedText
).
build
();
}
private
void
setCardInfo
(
Card
cardInfo
,
View
view
)
{
...
...
@@ -666,4 +721,6 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
}
}
// 定义引号类型
enum
QuoteType
{
NONE
,
DOUBLE_QUOTE
,
ANGLE_QUOTE
}
}
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/CardSearcher.java
View file @
b3cfcbd0
...
...
@@ -23,7 +23,6 @@ import java.util.List;
import
cn.garymb.ygomobile.AppsSettings
;
import
cn.garymb.ygomobile.lite.R
;
import
cn.garymb.ygomobile.loader.CardLoader
;
import
cn.garymb.ygomobile.loader.CardSearchInfo
;
import
cn.garymb.ygomobile.loader.ICardSearcher
;
import
cn.garymb.ygomobile.ui.adapters.SimpleSpinnerAdapter
;
...
...
@@ -32,7 +31,6 @@ import cn.garymb.ygomobile.ui.plus.DialogPlus;
import
cn.garymb.ygomobile.ui.plus.VUiKit
;
import
ocgcore.DataManager
;
import
ocgcore.LimitManager
;
import
ocgcore.PackManager
;
import
ocgcore.StringManager
;
import
ocgcore.data.Card
;
import
ocgcore.data.CardSet
;
...
...
@@ -70,10 +68,9 @@ public class CardSearcher implements View.OnClickListener {
private
final
Button
resetButton
;
private
final
View
view
;
private
final
View
layout_monster
;
private
final
ICardSearcher
dataLoad
er
;
private
final
ICardSearcher
mICardSearch
er
;
private
final
Context
mContext
;
private
final
Button
myFavButton
;
private
final
ICardSearcher
mCardLoader
;
protected
StringManager
mStringManager
;
protected
LimitManager
mLimitManager
;
protected
AppsSettings
mSettings
;
...
...
@@ -81,10 +78,10 @@ public class CardSearcher implements View.OnClickListener {
private
CallBack
mCallBack
;
private
boolean
mShowFavorite
;
public
CardSearcher
(
View
view
,
ICardSearcher
dataLoad
er
)
{
public
CardSearcher
(
View
view
,
ICardSearcher
iCardSearch
er
)
{
this
.
view
=
view
;
this
.
mContext
=
view
.
getContext
();
this
.
dataLoader
=
dataLoad
er
;
this
.
mICardSearcher
=
iCardSearch
er
;
this
.
mSettings
=
AppsSettings
.
get
();
mStringManager
=
DataManager
.
get
().
getStringManager
();
mLimitManager
=
DataManager
.
get
().
getLimitManager
();
...
...
@@ -115,7 +112,6 @@ public class CardSearcher implements View.OnClickListener {
LinkMarkerButton
.
setOnClickListener
(
this
);
searchButton
.
setOnClickListener
(
this
);
resetButton
.
setOnClickListener
(
this
);
mCardLoader
=
dataLoader
;
//输入即时搜索
OnEditorActionListener
searchListener
=
(
v
,
actionId
,
event
)
->
{
...
...
@@ -289,7 +285,7 @@ public class CardSearcher implements View.OnClickListener {
}
if
(
mCallBack
!=
null
)
{
VUiKit
.
post
(()
->
{
mCallBack
.
onSearchResult
(
CardFavorites
.
get
().
getCards
(
m
CardLoad
er
),
!
showList
);
mCallBack
.
onSearchResult
(
CardFavorites
.
get
().
getCards
(
m
ICardSearch
er
),
!
showList
);
});
}
}
...
...
@@ -390,8 +386,8 @@ public class CardSearcher implements View.OnClickListener {
int
index
=
-
1
;
int
count
=
mLimitManager
.
getCount
();
LimitList
cur
=
null
;
if
(
dataLoad
er
!=
null
)
{
cur
=
dataLoad
er
.
getLimitList
();
if
(
mICardSearch
er
!=
null
)
{
cur
=
mICardSearch
er
.
getLimitList
();
}
items
.
add
(
new
SimpleSpinnerItem
(
0
,
getString
(
R
.
string
.
label_limitlist
)));
for
(
int
i
=
0
;
i
<
count
;
i
++)
{
...
...
@@ -566,7 +562,7 @@ public class CardSearcher implements View.OnClickListener {
}
private
void
search
()
{
if
(
dataLoad
er
!=
null
)
{
if
(
mICardSearch
er
!=
null
)
{
CardSearchInfo
searchInfo
=
new
CardSearchInfo
.
Builder
()
.
keyword
(
text
(
keyWord
))
.
attribute
(
getIntSelect
(
attributeSpinner
))
...
...
@@ -590,14 +586,14 @@ public class CardSearcher implements View.OnClickListener {
.
linkKey
(
lineKey
)
.
build
();
Log
.
i
(
TAG
,
searchInfo
.
toString
());
dataLoad
er
.
search
(
searchInfo
);
mICardSearch
er
.
search
(
searchInfo
);
lineKey
=
0
;
}
}
private
void
resetAll
()
{
if
(
dataLoad
er
!=
null
)
{
dataLoad
er
.
onReset
();
if
(
mICardSearch
er
!=
null
)
{
mICardSearch
er
.
onReset
();
}
keyWord
.
setText
(
null
);
reset
(
otSpinner
);
...
...
mobile/src/main/java/cn/garymb/ygomobile/ui/cards/DeckManagerFragment.java
View file @
b3cfcbd0
...
...
@@ -612,17 +612,11 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
private
void
showPackList
(
Card
cardInfo
)
{
Integer
idToUse
=
cardInfo
.
Alias
!=
0
?
cardInfo
.
Alias
:
cardInfo
.
Code
;
Log
.
d
(
"seesee"
,
"Looking for pack with ID/Alias: "
+
idToUse
);
// 确保再次检查 PackManager 是否已经加载完成
if
(
mPackManager
==
null
)
{
Log
.
w
(
"seesee"
,
"PackManager not loaded when showing pack list."
);
return
;
}
List
<
Card
>
packList
=
mPackManager
.
getCards
(
mCardLoader
,
idToUse
);
Log
.
d
(
"seesee"
,
"Retrieved pack list: "
+
(
packList
==
null
?
"null"
:
packList
.
toString
()));
if
(
packList
!=
null
)
{
onSearchResult
(
packList
,
false
);
}
else
{
...
...
mobile/src/main/java/ocgcore/PackManager.java
View file @
b3cfcbd0
...
...
@@ -72,8 +72,8 @@ public class PackManager implements Closeable {
}
return
packList
;
}).
done
((
list
)
->
{
Log
.
i
(
TAG
,
"Loaded "
+
list
.
size
()
+
" files."
);
Log
.
i
(
TAG
,
toString
());
// 在异步任务完成后打印packList
Log
.
i
(
TAG
,
"
pack:
Loaded "
+
list
.
size
()
+
" files."
);
//
Log.i(TAG, toString()); // 在异步任务完成后打印packList
}).
fail
((
error
)
->
{
Log
.
e
(
TAG
,
"Error loading files: "
+
error
.
getMessage
());
});
...
...
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