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