Commit 007a37d3 authored by fallenstardust's avatar fallenstardust

实现ygopro和mobile禁卡表选择一致

mobile保存禁卡表名称时也调用App.get().saveSetting来修改ygopro的保存的禁卡表名称
相反ygopro保存的禁卡表名称也调用App.get().saveSettings来修改mobile保存的禁卡表名称
parent ba20b83a
...@@ -151,29 +151,39 @@ void DeckBuilder::Terminate() { ...@@ -151,29 +151,39 @@ void DeckBuilder::Terminate() {
mainGame->scrFilter->setVisible(false); mainGame->scrFilter->setVisible(false);
mainGame->scrPackCards->setVisible(false); mainGame->scrPackCards->setVisible(false);
mainGame->scrPackCards->setPos(0); mainGame->scrPackCards->setPos(0);
int catesel = mainGame->cbDBCategory->getSelected();
char linebuf[256]; char linebuf[256];
if (catesel >= 0) int catesel = mainGame->cbDBCategory->getSelected();
if (catesel >= 0) {
BufferIO::CopyWideString(mainGame->cbDBCategory->getItem(catesel), mainGame->gameConf.lastcategory); BufferIO::CopyWideString(mainGame->cbDBCategory->getItem(catesel), mainGame->gameConf.lastcategory);
BufferIO::EncodeUTF8(mainGame->gameConf.lastcategory, linebuf); BufferIO::EncodeUTF8(mainGame->gameConf.lastcategory, linebuf);
irr::android::setLastCategory(mainGame->appMain, linebuf); irr::android::setLastCategory(mainGame->appMain, linebuf);
ALOGD("setLastCategory", linebuf); ALOGD("setLastCategory=%s", linebuf);
}
int decksel = mainGame->cbDBDecks->getSelected(); int decksel = mainGame->cbDBDecks->getSelected();
if (decksel >= 0) if (decksel >= 0) {
BufferIO::CopyWideString(mainGame->cbDBDecks->getItem(decksel), mainGame->gameConf.lastdeck); BufferIO::CopyWideString(mainGame->cbDBDecks->getItem(decksel), mainGame->gameConf.lastdeck);
BufferIO::EncodeUTF8(mainGame->gameConf.lastdeck, linebuf); BufferIO::EncodeUTF8(mainGame->gameConf.lastdeck, linebuf);
irr::android::setLastDeck(mainGame->appMain, linebuf); irr::android::setLastDeck(mainGame->appMain, linebuf);
ALOGD("setLastDeck", linebuf); ALOGD("setLastDeck=%s", linebuf);
int Lflistsel = mainGame->cbLFlist->getSelected(); }
if (Lflistsel >= 0) setLastLimit();
BufferIO::CopyWideString(mainGame->cbLFlist->getItem(Lflistsel), mainGame->gameConf.last_limit_list_name);
BufferIO::EncodeUTF8(mainGame->gameConf.last_limit_list_name, linebuf);
irr::android::setLastLimit(mainGame->appMain, linebuf);
ALOGD("setLastLimit", linebuf);
mainGame->SaveConfig(); mainGame->SaveConfig();
if(exit_on_return) if(exit_on_return)
mainGame->OnGameClose(); mainGame->OnGameClose();
} }
void DeckBuilder::setLastLimit() {
char linebuf[256];
int lflistsel = mainGame->cbLFlist->getSelected();
if (lflistsel >= 0) {
BufferIO::CopyWideString(mainGame->cbLFlist->getItem(lflistsel), mainGame->gameConf.last_limit_list_name);
BufferIO::EncodeUTF8(mainGame->cbLFlist->getItem(lflistsel), linebuf);
irr::android::setLastLimit(mainGame->appMain, linebuf);
ALOGD("cc: game: setLastLimit=%s", linebuf);
}
}
bool DeckBuilder::OnEvent(const irr::SEvent& event) { bool DeckBuilder::OnEvent(const irr::SEvent& event) {
#ifdef _IRR_ANDROID_PLATFORM_ #ifdef _IRR_ANDROID_PLATFORM_
irr::SEvent transferEvent; irr::SEvent transferEvent;
...@@ -321,6 +331,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) { ...@@ -321,6 +331,8 @@ bool DeckBuilder::OnEvent(const irr::SEvent& event) {
mainGame->soundManager->PlaySoundEffect(SoundManager::SFX::BUTTON); mainGame->soundManager->PlaySoundEffect(SoundManager::SFX::BUTTON);
mainGame->HideElement(mainGame->wSettings); mainGame->HideElement(mainGame->wSettings);
mainGame->imgSettings->setPressed(false); mainGame->imgSettings->setPressed(false);
setLastLimit();
break; break;
} }
case BUTTON_SHOW_LOG: { case BUTTON_SHOW_LOG: {
......
...@@ -27,6 +27,7 @@ public: ...@@ -27,6 +27,7 @@ public:
void InstantSearch(); void InstantSearch();
void ClearSearch(); void ClearSearch();
void SortList(); void SortList();
static void setLastLimit();
void RefreshDeckList(bool showPack);// void RefreshDeckList(bool showPack);//
void RefreshReadonly(int catesel); void RefreshReadonly(int catesel);
......
...@@ -2102,20 +2102,13 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) { ...@@ -2102,20 +2102,13 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
int selectedIndex = -1; int selectedIndex = -1;
for (unsigned int i = 0; i < mainGame->cbLFlist->getItemCount(); i++) { for (unsigned int i = 0; i < mainGame->cbLFlist->getItemCount(); i++) {
if (!wcscmp(lastLimitName, mainGame->cbLFlist->getItem(i))) { if (!wcscmp(lastLimitName, mainGame->cbLFlist->getItem(i))) {
selectedIndex = i; mainGame->gameConf.default_lflist = i;
break; break;
} }
} }
// 重设2个禁卡表选择combobox的选中项
// 如果找到了匹配的名称,则设置选中项,否则使用默认选项
if (selectedIndex >= 0) {
mainGame->cbLFlist->setSelected(selectedIndex);
mainGame->cbHostLFlist->setSelected(selectedIndex);
} else {
// 回退到原来的逻辑
mainGame->cbLFlist->setSelected(mainGame->gameConf.use_lflist ? mainGame->gameConf.default_lflist : mainGame->cbLFlist->getItemCount() - 1); mainGame->cbLFlist->setSelected(mainGame->gameConf.use_lflist ? mainGame->gameConf.default_lflist : mainGame->cbLFlist->getItemCount() - 1);
mainGame->cbHostLFlist->setSelected(mainGame->gameConf.use_lflist ? mainGame->gameConf.default_lflist : mainGame->cbHostLFlist->getItemCount() - 1); mainGame->cbHostLFlist->setSelected(mainGame->gameConf.use_lflist ? mainGame->gameConf.default_lflist : mainGame->cbHostLFlist->getItemCount() - 1);
}
mainGame->deckBuilder.filterList = &deckManager._lfList[mainGame->cbLFlist->getSelected()]; mainGame->deckBuilder.filterList = &deckManager._lfList[mainGame->cbLFlist->getSelected()];
return true; return true;
...@@ -2149,6 +2142,8 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) { ...@@ -2149,6 +2142,8 @@ bool ClientField::OnCommonEvent(const irr::SEvent& event) {
case COMBOBOX_LFLIST: { case COMBOBOX_LFLIST: {
mainGame->gameConf.default_lflist = mainGame->cbLFlist->getSelected(); mainGame->gameConf.default_lflist = mainGame->cbLFlist->getSelected();
mainGame->cbHostLFlist->setSelected(mainGame->gameConf.default_lflist); mainGame->cbHostLFlist->setSelected(mainGame->gameConf.default_lflist);
// 保存最后使用的禁卡表名称
BufferIO::CopyWideString(mainGame->cbLFlist->getItem(mainGame->gameConf.default_lflist), mainGame->gameConf.last_limit_list_name);
mainGame->deckBuilder.filterList = &deckManager._lfList[mainGame->gameConf.default_lflist]; mainGame->deckBuilder.filterList = &deckManager._lfList[mainGame->gameConf.default_lflist];
return true; return true;
break; break;
......
This diff is collapsed.
...@@ -551,6 +551,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) { ...@@ -551,6 +551,8 @@ bool MenuHandler::OnEvent(const irr::SEvent& event) {
case BUTTON_CLOSE_SETTINGS: { case BUTTON_CLOSE_SETTINGS: {
mainGame->HideElement(mainGame->wSettings); mainGame->HideElement(mainGame->wSettings);
mainGame->ShowElement(mainGame->wMainMenu); mainGame->ShowElement(mainGame->wMainMenu);
DeckBuilder::setLastLimit();
break; break;
} }
} }
......
...@@ -410,56 +410,98 @@ float getYScale(ANDROID_APP app){ ...@@ -410,56 +410,98 @@ float getYScale(ANDROID_APP app){
return ret; return ret;
} }
//Retrive last deck name.
irr::io::path getLastDeck(ANDROID_APP app) {
return getSetting(app, "lastdeck");
}
//Retrive last limit list name. //Retrive last limit list name.
irr::io::path getLastLimit(ANDROID_APP app) { irr::io::path getLastLimit(ANDROID_APP app) {
return getSetting(app, "lastlimit"); return getSetting(app, "lastlimit");
} }
//Retrive last deck name.
irr::io::path getLastDeck(ANDROID_APP app) {
return getSetting(app, "lastdeck");
}
//Retrive last category name. //Retrive last category name.
irr::io::path getLastCategory(ANDROID_APP app) { irr::io::path getLastCategory(ANDROID_APP app) {
return getSetting(app, "lastcategory"); return getSetting(app, "lastcategory");
} }
// 定义一个函数,用于从 Android 应用中获取指定键的设置值
irr::io::path getSetting(ANDROID_APP app, const char* key) { irr::io::path getSetting(ANDROID_APP app, const char* key) {
// 初始化返回路径对象
irr::io::path ret; irr::io::path ret;
// 检查传入的应用实例是否有效
if (!app || !app->activity || !app->activity->vm) if (!app || !app->activity || !app->activity->vm)
return ret; return ret; // 如果无效则直接返回空路径
// 声明 JNI 环境指针
JNIEnv* jni = nullptr; JNIEnv* jni = nullptr;
// 将当前线程附加到 Java 虚拟机并获取 JNI 环境
app->activity->vm->AttachCurrentThread(&jni, NULL); app->activity->vm->AttachCurrentThread(&jni, NULL);
// 检查 JNI 环境是否成功获取
if (!jni) if (!jni)
return ret; return ret; // 获取失败则返回空路径
// Retrieves NativeActivity.
// 获取 NativeActivity 对象
jobject lNativeActivity = app->activity->clazz; jobject lNativeActivity = app->activity->clazz;
// 获取 NativeActivity 类的 jclass 引用
jclass ClassNativeActivity = jni->GetObjectClass(lNativeActivity); jclass ClassNativeActivity = jni->GetObjectClass(lNativeActivity);
// 查找 getApplication 方法 ID,用于获取 Application 实例
jmethodID MethodGetApp = jni->GetMethodID(ClassNativeActivity, jmethodID MethodGetApp = jni->GetMethodID(ClassNativeActivity,
"getApplication", "()Landroid/app/Application;"); "getApplication", "()Landroid/app/Application;");
// 调用 getApplication 方法获得 Application 对象
jobject application = jni->CallObjectMethod(lNativeActivity, MethodGetApp); jobject application = jni->CallObjectMethod(lNativeActivity, MethodGetApp);
// 获取 Application 类的 jclass 引用
jclass classApp = jni->GetObjectClass(application); jclass classApp = jni->GetObjectClass(application);
// 查找 getSetting 方法 ID,该方法接收字符串参数并返回字符串
jmethodID lastdeckMethod = jni->GetMethodID(classApp, "getSetting", jmethodID lastdeckMethod = jni->GetMethodID(classApp, "getSetting",
"(Ljava/lang/String;)Ljava/lang/String;"); "(Ljava/lang/String;)Ljava/lang/String;");
// 创建 Java 字符串表示键名
jstring keystring = jni->NewStringUTF(key); jstring keystring = jni->NewStringUTF(key);
// 调用 Java 层的 getSetting 方法,并获取结果字符串
jstring retString = (jstring) jni->CallObjectMethod(application, jstring retString = (jstring) jni->CallObjectMethod(application,
lastdeckMethod, keystring); lastdeckMethod, keystring);
// 删除局部引用 keystring 以避免内存泄漏
if (keystring) { if (keystring) {
jni->DeleteLocalRef(keystring); jni->DeleteLocalRef(keystring);
} }
// 删除局部引用 classApp 和 ClassNativeActivity
jni->DeleteLocalRef(classApp); jni->DeleteLocalRef(classApp);
jni->DeleteLocalRef(ClassNativeActivity); jni->DeleteLocalRef(ClassNativeActivity);
// 检查返回的字符串是否为空
if(retString == NULL){ if(retString == NULL){
return ret; return ret; // 若为空,则返回空路径
} }
// 获取 Java 字符串的内容(UTF-8 编码)
const char* chars = jni->GetStringUTFChars(retString, NULL); const char* chars = jni->GetStringUTFChars(retString, NULL);
// 将字符内容追加到返回路径对象中
ret.append(chars); ret.append(chars);
// 释放之前获取的字符串内容资源
jni->ReleaseStringUTFChars(retString, chars); jni->ReleaseStringUTFChars(retString, chars);
// 分离当前线程与 JVM 的连接
app->activity->vm->DetachCurrentThread(); app->activity->vm->DetachCurrentThread();
// 返回获取到的设置值路径
return ret; return ret;
} }
//save last limit name. //save last limit name.
void setLastLimit(ANDROID_APP app, const char* limitname) { void setLastLimit(ANDROID_APP app, const char* limitname) {
saveSetting(app, "lastlimit", limitname); saveSetting(app, "lastlimit", limitname);
......
...@@ -616,8 +616,10 @@ public class AppsSettings { ...@@ -616,8 +616,10 @@ public class AppsSettings {
* 保存最后禁卡表名 * 保存最后禁卡表名
* *
*/ */
public void setLastLimit(String limitname) { public void setLastLimit(String limitName) {
mSharedPreferences.putString(Constants.PREF_LAST_LIMIT, limitname); Log.w(TAG, "setLastLimit= "+limitName);
App.get().saveSetting("lastlimit", limitName);
mSharedPreferences.putString(Constants.PREF_LAST_LIMIT, limitName);
} }
/** /**
...@@ -626,7 +628,9 @@ public class AppsSettings { ...@@ -626,7 +628,9 @@ public class AppsSettings {
* @return 返回存储的限制条件字符串,如果未找到则返回默认限制条件 * @return 返回存储的限制条件字符串,如果未找到则返回默认限制条件
*/ */
public String getLastLimit() { public String getLastLimit() {
return mSharedPreferences.getString(Constants.PREF_LAST_LIMIT, Constants.PREF_DEF_LAST_LIMIT); String limitName = App.get().getSetting("lastlimit");
return limitName == null || TextUtils.isEmpty(limitName) ?
mSharedPreferences.getString(Constants.PREF_LAST_LIMIT, Constants.PREF_DEF_LAST_LIMIT) : limitName;
} }
...@@ -634,7 +638,6 @@ public class AppsSettings { ...@@ -634,7 +638,6 @@ public class AppsSettings {
* 获得(最后)上次打开的卡组的绝对路径 * 获得(最后)上次打开的卡组的绝对路径
* setCurDeck()方法负责设置上次打开的卡组的路径 * setCurDeck()方法负责设置上次打开的卡组的路径
* *
* @return
*/ */
public @Nullable public @Nullable
String getLastDeckPath() { String getLastDeckPath() {
...@@ -742,26 +745,18 @@ public class AppsSettings { ...@@ -742,26 +745,18 @@ public class AppsSettings {
}*/ }*/
public void saveSettings(String key, String value) { public void saveSettings(String key, String value) {
if ("lastdeck".equals(key)) { Log.e(TAG, "cc: saveSettings: "+key + ":" + value);
Log.e(TAG, value); if ("lastdeck".equals(key)) mSharedPreferences.putString(Constants.PREF_LAST_YDK, value);
mSharedPreferences.putString(Constants.PREF_LAST_YDK, value); if ("lastcategory".equals(key)) mSharedPreferences.putString(Constants.PREF_LAST_CATEGORY, value);
} else if ("lastcategory".equals(key)) { if ("lastLimit".equals(key)) setLastLimit(value);
Log.e(TAG, value);
mSharedPreferences.putString(Constants.PREF_LAST_CATEGORY, value);
} else {
mSharedPreferences.putString(Constants.PREF_START + key, value); mSharedPreferences.putString(Constants.PREF_START + key, value);
} }
}
public String getSettings(String key) { public String getSettings(String key) {
String val; Log.e(TAG, "getSettings: "+ ("lastLimit".equals(key) ? getLastLimit() : key));
if ("lastdeck".equals(key)) { if ("lastdeck".equals(key)) return getLastDeckName();
val = getLastDeckName(); if ("lastcategory".equals(key)) return getLastCategory();
return val; if ("lastLimit".equals(key)) return getLastLimit();
} else if ("lastcategory".equals(key)) {
val = getLastCategory();
return val;
}
return mSharedPreferences.getString(Constants.PREF_START + key, null); return mSharedPreferences.getString(Constants.PREF_START + key, null);
} }
......
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