Commit c5670f5e authored by fallenstardust's avatar fallenstardust

卡片详情点击卡包名称搜索显示该卡包的卡片列表

parent f5e11e53
...@@ -34,6 +34,8 @@ import cn.garymb.ygomobile.lite.R; ...@@ -34,6 +34,8 @@ import cn.garymb.ygomobile.lite.R;
import cn.garymb.ygomobile.loader.ImageLoader; import cn.garymb.ygomobile.loader.ImageLoader;
import cn.garymb.ygomobile.ui.activities.BaseActivity; import cn.garymb.ygomobile.ui.activities.BaseActivity;
import cn.garymb.ygomobile.ui.adapters.BaseAdapterPlus; import cn.garymb.ygomobile.ui.adapters.BaseAdapterPlus;
import cn.garymb.ygomobile.ui.widget.Shimmer;
import cn.garymb.ygomobile.ui.widget.ShimmerTextView;
import cn.garymb.ygomobile.utils.CardUtils; import cn.garymb.ygomobile.utils.CardUtils;
import cn.garymb.ygomobile.utils.DownloadUtil; import cn.garymb.ygomobile.utils.DownloadUtil;
import cn.garymb.ygomobile.utils.FileUtils; import cn.garymb.ygomobile.utils.FileUtils;
...@@ -66,7 +68,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -66,7 +68,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
private final TextView cardAtk; private final TextView cardAtk;
private final TextView cardDef; private final TextView cardDef;
private final LinearLayout ll_pack; private final LinearLayout ll_pack;
private final TextView packName; private final ShimmerTextView packName;
private final TextView setName; private final TextView setName;
private final TextView otView; private final TextView otView;
private final TextView attrView; private final TextView attrView;
...@@ -98,6 +100,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -98,6 +100,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
private Button btn_redownload; private Button btn_redownload;
private Button btn_share; private Button btn_share;
private boolean isDownloadCardImage = true; private boolean isDownloadCardImage = true;
private Shimmer shimmer;
@SuppressLint("HandlerLeak") @SuppressLint("HandlerLeak")
Handler handler = new Handler() { Handler handler = new Handler() {
...@@ -140,6 +143,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -140,6 +143,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
mStringManager = stringManager; mStringManager = stringManager;
ll_pack = findViewById(R.id.ll_pack); ll_pack = findViewById(R.id.ll_pack);
packName = findViewById(R.id.pack_name); packName = findViewById(R.id.pack_name);
toggleAnimation(packName);
name = findViewById(R.id.text_name); name = findViewById(R.id.text_name);
desc = findViewById(R.id.text_desc); desc = findViewById(R.id.text_desc);
close = findViewById(R.id.btn_close); close = findViewById(R.id.btn_close);
...@@ -206,6 +210,25 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -206,6 +210,25 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
mImageFav.setOnClickListener((v) -> { mImageFav.setOnClickListener((v) -> {
doMyFavorites(getCardInfo()); doMyFavorites(getCardInfo());
}); });
ll_pack.setOnClickListener((v) -> {
if (mListener != null) {
Card cardInfo = getCardInfo();
if (cardInfo == null) {
return;
}
mListener.onShowPackList(cardInfo);
}
});
}
public void toggleAnimation(ShimmerTextView target) {
if (shimmer != null && shimmer.isAnimating()) {
shimmer.cancel();
} else {
shimmer = new Shimmer();
shimmer.start(target);
}
} }
/** /**
...@@ -559,6 +582,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -559,6 +582,7 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
void onAddMainCard(Card cardInfo); void onAddMainCard(Card cardInfo);
void onAddSideCard(Card cardInfo); void onAddSideCard(Card cardInfo);
void onImageUpdate(Card cardInfo); void onImageUpdate(Card cardInfo);
void onShowPackList(Card cardInfo);
void onClose(); void onClose();
} }
...@@ -580,6 +604,11 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder { ...@@ -580,6 +604,11 @@ public class CardDetail extends BaseAdapterPlus.BaseViewHolder {
} }
@Override
public void onShowPackList(Card cardInfo) {
}
@Override @Override
public void onAddSideCard(Card cardInfo) { public void onAddSideCard(Card cardInfo) {
......
...@@ -43,9 +43,12 @@ import cn.garymb.ygomobile.ui.home.HomeActivity; ...@@ -43,9 +43,12 @@ import cn.garymb.ygomobile.ui.home.HomeActivity;
import cn.garymb.ygomobile.ui.plus.AOnGestureListener; import cn.garymb.ygomobile.ui.plus.AOnGestureListener;
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.ui.widget.Shimmer;
import cn.garymb.ygomobile.ui.widget.ShimmerTextView;
import cn.garymb.ygomobile.utils.YGOUtil; import cn.garymb.ygomobile.utils.YGOUtil;
import cn.garymb.ygomobile.utils.glide.GlideCompat; import cn.garymb.ygomobile.utils.glide.GlideCompat;
import ocgcore.DataManager; import ocgcore.DataManager;
import ocgcore.PackManager;
import ocgcore.data.Card; import ocgcore.data.Card;
import ocgcore.data.LimitList; import ocgcore.data.LimitList;
...@@ -56,7 +59,8 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB ...@@ -56,7 +59,8 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
private HomeActivity activity; private HomeActivity activity;
protected CardLoader mCardLoader; protected CardLoader mCardLoader;
protected DrawerLayout mDrawerlayout; protected DrawerLayout mDrawerlayout;
protected CardSearcher mCardSelector; protected CardSearcher mCardSearcher;
protected PackManager mPackManager;
protected CardListAdapter mCardListAdapter; protected CardListAdapter mCardListAdapter;
protected boolean isLoad = false; protected boolean isLoad = false;
private RecyclerView mListView; private RecyclerView mListView;
...@@ -92,10 +96,11 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB ...@@ -92,10 +96,11 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
mListView.setAdapter(mCardListAdapter); mListView.setAdapter(mCardListAdapter);
Button btn_search = layoutView.findViewById(R.id.btn_search); Button btn_search = layoutView.findViewById(R.id.btn_search);
btn_search.setOnClickListener((v) -> showSearch(true)); btn_search.setOnClickListener((v) -> showSearch(true));
mPackManager = DataManager.get().getPackManager();
mCardLoader = new CardLoader(getContext()); mCardLoader = new CardLoader(getContext());
mCardLoader.setCallBack(this); mCardLoader.setCallBack(this);
mCardSelector = new CardSearcher(layoutView.findViewById(R.id.nav_view_list), mCardLoader); mCardSearcher = new CardSearcher(layoutView.findViewById(R.id.nav_view_list), mCardLoader);
mCardSelector.setCallBack(this); mCardSearcher.setCallBack(this);
setListeners(); setListeners();
DialogPlus dlg = DialogPlus.show(getContext(), null, getString(R.string.loading)); DialogPlus dlg = DialogPlus.show(getContext(), null, getString(R.string.loading));
VUiKit.defer().when(() -> { VUiKit.defer().when(() -> {
...@@ -110,7 +115,7 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB ...@@ -110,7 +115,7 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
dlg.dismiss(); dlg.dismiss();
isLoad = true; isLoad = true;
mCardLoader.loadData(); mCardLoader.loadData();
mCardSelector.initItems(); mCardSearcher.initItems();
//数据库初始化完毕后搜索被传入的关键字 //数据库初始化完毕后搜索被传入的关键字
intentSearch(intentSearchMessage); intentSearch(intentSearchMessage);
isInitCdbOk = true; isInitCdbOk = true;
...@@ -147,7 +152,7 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB ...@@ -147,7 +152,7 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
//卡查关键字为空不卡查 //卡查关键字为空不卡查
if (TextUtils.isEmpty(currentCardSearchMessage)) if (TextUtils.isEmpty(currentCardSearchMessage))
return; return;
mCardSelector.search(currentCardSearchMessage); mCardSearcher.search(currentCardSearchMessage);
} }
protected void setListeners() { protected void setListeners() {
...@@ -284,8 +289,8 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB ...@@ -284,8 +289,8 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
if (mCardDetail == null) { if (mCardDetail == null) {
mCardDetail = new CardDetail((BaseActivity) getActivity(), activity.getImageLoader(), activity.getStringManager()); mCardDetail = new CardDetail((BaseActivity) getActivity(), activity.getImageLoader(), activity.getStringManager());
mCardDetail.setCallBack((card, favorite) -> { mCardDetail.setCallBack((card, favorite) -> {
if (mCardSelector.isShowFavorite()) { if (mCardSearcher.isShowFavorite()) {
mCardSelector.showFavorites(false); mCardSearcher.showFavorites(false);
} }
}); });
mCardDetail.setOnCardClickListener(new CardDetail.OnCardSearcherCardClickListener() { mCardDetail.setOnCardClickListener(new CardDetail.OnCardSearcherCardClickListener() {
...@@ -294,6 +299,11 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB ...@@ -294,6 +299,11 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
WebActivity.openFAQ(getContext(), cardInfo); WebActivity.openFAQ(getContext(), cardInfo);
} }
@Override
public void onShowPackList(Card cardInfo) {
showPackList(cardInfo);
}
@Override @Override
public void onImageUpdate(Card cardInfo) { public void onImageUpdate(Card cardInfo) {
mCardListAdapter.notifyItemChanged(cardInfo); mCardListAdapter.notifyItemChanged(cardInfo);
...@@ -331,6 +341,19 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB ...@@ -331,6 +341,19 @@ public class CardSearchFragment extends BaseFragemnt implements CardLoader.CallB
} }
} }
private void showPackList(Card cardInfo) {
Integer idToUse = cardInfo.Alias != 0 ? cardInfo.Alias : cardInfo.Code;
List<Card> packList = mPackManager.getCards(mCardLoader, idToUse);
if (packList != null) {
onSearchResult(packList, false);
} else {
Log.w("cc", "No pack found for the given ID/Alias: " + idToUse);
}
}
protected void showSearch(boolean autoclose) { protected void showSearch(boolean autoclose) {
if (autoclose && mDrawerlayout.isDrawerOpen(Constants.CARD_SEARCH_GRAVITY)) { if (autoclose && mDrawerlayout.isDrawerOpen(Constants.CARD_SEARCH_GRAVITY)) {
mDrawerlayout.closeDrawer(Constants.CARD_SEARCH_GRAVITY); mDrawerlayout.closeDrawer(Constants.CARD_SEARCH_GRAVITY);
......
...@@ -167,7 +167,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte ...@@ -167,7 +167,7 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
mListView.setAdapter(mCardListAdapter); mListView.setAdapter(mCardListAdapter);
setListeners(); setListeners();
mPackManager = new PackManager(); mPackManager = DataManager.get().getPackManager();
mCardLoader = new CardLoader(getContext()); mCardLoader = new CardLoader(getContext());
mCardLoader.setCallBack(this); mCardLoader.setCallBack(this);
mCardSearcher = new CardSearcher(layoutView.findViewById(R.id.nav_view_list), mCardLoader); mCardSearcher = new CardSearcher(layoutView.findViewById(R.id.nav_view_list), mCardLoader);
...@@ -557,6 +557,11 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte ...@@ -557,6 +557,11 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte
mCardListAdapter.notifyItemChanged(cardInfo); mCardListAdapter.notifyItemChanged(cardInfo);
} }
@Override
public void onShowPackList(Card cardInfo) {
showPackList(cardInfo);
}
@Override @Override
public void onClose() { public void onClose() {
mDialog.dismiss(); mDialog.dismiss();
...@@ -605,6 +610,26 @@ public class DeckManagerFragment extends BaseFragemnt implements RecyclerViewIte ...@@ -605,6 +610,26 @@ 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 {
Log.w("seesee", "No pack found for the given ID/Alias: " + idToUse);
}
}
private boolean addSideCard(Card cardInfo) { private boolean addSideCard(Card cardInfo) {
if (checkLimit(cardInfo)) { if (checkLimit(cardInfo)) {
boolean rs = mDeckAdapater.AddCard(cardInfo, DeckItemType.SideCard); boolean rs = mDeckAdapater.AddCard(cardInfo, DeckItemType.SideCard);
......
package ocgcore; package ocgcore;
import android.os.Build;
import android.util.Log; import android.util.Log;
import android.util.SparseArray;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.Closeable; import java.io.Closeable;
...@@ -16,7 +18,9 @@ import java.util.Map; ...@@ -16,7 +18,9 @@ import java.util.Map;
import cn.garymb.ygomobile.AppsSettings; import cn.garymb.ygomobile.AppsSettings;
import cn.garymb.ygomobile.Constants; import cn.garymb.ygomobile.Constants;
import cn.garymb.ygomobile.loader.CardLoader;
import cn.garymb.ygomobile.ui.plus.VUiKit; import cn.garymb.ygomobile.ui.plus.VUiKit;
import ocgcore.data.Card;
public class PackManager implements Closeable { public class PackManager implements Closeable {
private static final String TAG = PackManager.class.getSimpleName(); private static final String TAG = PackManager.class.getSimpleName();
...@@ -132,6 +136,54 @@ public class PackManager implements Closeable { ...@@ -132,6 +136,54 @@ public class PackManager implements Closeable {
} }
return null; // 如果没有找到匹配项,则返回null return null; // 如果没有找到匹配项,则返回null
} }
/**
* 根据给定的ID查找其所属的packName下的所有ID。
*
* @param id 给定的ID。
* @return 包含给定ID所属的packName下的所有ID的列表。
*/
public List<Integer> getAllIdsById(Integer id) {
String packName = findPackNameById(id);
if (packName == null) {
Log.w("seesee", "No pack found for ID: " + id);
return new ArrayList<>();
}
return findIdsByPackName(packName);
}
/**
* 从cardLoader查询收藏的卡片
*
* @param cardLoader
* @return 排序后的列表
*/
public List<Card> getCards(CardLoader cardLoader, Integer code) {
List<Integer> mList = getAllIdsById(code);
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 list;
}
/**
* 从cardLoader查询收藏的卡片
*
* @param cardLoader
* @return 排序后的列表
*/
public List<Card> getCards(CardLoader cardLoader, String packName) {
List<Integer> mList = findIdsByPackName(packName);
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 list;
}
/** /**
* 将packList的内容转换为字符串表示。 * 将packList的内容转换为字符串表示。
...@@ -142,7 +194,9 @@ public class PackManager implements Closeable { ...@@ -142,7 +194,9 @@ public class PackManager implements Closeable {
for (int i = 0; i < packList.size(); i++) { for (int i = 0; i < packList.size(); i++) {
Map.Entry<String, List<Integer>> entry = packList.get(i); Map.Entry<String, List<Integer>> entry = packList.get(i);
sb.append("Entry ").append(i + 1).append(": ").append(entry.getKey()).append(" -> ["); sb.append("Entry ").append(i + 1).append(": ").append(entry.getKey()).append(" -> [");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
sb.append(String.join(", ", entry.getValue().stream().map(String::valueOf).toArray(String[]::new))); sb.append(String.join(", ", entry.getValue().stream().map(String::valueOf).toArray(String[]::new)));
}
sb.append("]\n"); sb.append("]\n");
} }
return sb.toString(); return sb.toString();
......
...@@ -188,15 +188,27 @@ ...@@ -188,15 +188,27 @@
android:textAppearance="@style/TextAppearance.AppCompat.Caption" android:textAppearance="@style/TextAppearance.AppCompat.Caption"
android:textColor="@color/item_title" /> android:textColor="@color/item_title" />
<TextView <LinearLayout
android:id="@+id/pack_name"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal">
<cn.garymb.ygomobile.ui.widget.ShimmerTextView
android:id="@+id/pack_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_gravity="center"
android:gravity="center_vertical" android:gravity="center_vertical"
android:textAppearance="@style/TextAppearance.AppCompat.Caption" android:textAppearance="@style/TextAppearance.AppCompat.Caption"
android:textColor="@color/holo_blue_bright" android:textColor="@color/holo_blue_bright"
tools:text="2024-12-21 25PP" /> tools:text="2024-12-21 25PP" />
<ImageView
android:layout_width="15dp"
android:layout_height="15dp"
android:src="@drawable/ic_search"/>
</LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout <LinearLayout
......
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