@@ -24,18 +24,20 @@
public final class SettingsFragment extends Fragment implements SettingsFragmentView
{
private static final String ARGUMENT_MENU_TAG = "menu_tag";
private static final String ARGUMENT_GAME_ID = "game_id";

private SettingsFragmentPresenter mPresenter = new SettingsFragmentPresenter(this);
private SettingsActivityView mActivity;

private SettingsAdapter mAdapter;

public static Fragment newInstance(String menuTag)
public static Fragment newInstance(String menuTag, String gameId)
{
SettingsFragment fragment = new SettingsFragment();

Bundle arguments = new Bundle();
arguments.putString(ARGUMENT_MENU_TAG, menuTag);
arguments.putString(ARGUMENT_GAME_ID, gameId);

fragment.setArguments(arguments);
return fragment;
@@ -71,10 +73,11 @@ public void onCreate(Bundle savedInstanceState)

setRetainInstance(true);
String menuTag = getArguments().getString(ARGUMENT_MENU_TAG);
String gameId = getArguments().getString(ARGUMENT_GAME_ID);

mAdapter = new SettingsAdapter(this, getActivity());

mPresenter.onCreate(menuTag);
mPresenter.onCreate(menuTag, gameId);
}

@Nullable
@@ -147,7 +150,7 @@ public void loadDefaultSettings()
@Override
public void loadSubMenu(String menuKey)
{
mActivity.showSettingsFragment(menuKey, true);
mActivity.showSettingsFragment(menuKey, true, getArguments().getString(ARGUMENT_GAME_ID));
}

@Override
@@ -1,5 +1,7 @@
package org.dolphinemu.dolphinemu.ui.settings;

import android.text.TextUtils;

import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.model.settings.BooleanSetting;
@@ -25,6 +27,7 @@
private SettingsFragmentView mView;

private String mMenuTag;
private String mGameID;

private ArrayList<HashMap<String, SettingSection>> mSettings;
private ArrayList<SettingsItem> mSettingsList;
@@ -37,8 +40,10 @@ public SettingsFragmentPresenter(SettingsFragmentView view)
mView = view;
}

public void onCreate(String menuTag)
public void onCreate(String menuTag, String gameId)
{
mGameID = gameId;

if (menuTag.startsWith(SettingsFile.KEY_GCPAD_TYPE))
{
mMenuTag = SettingsFile.KEY_GCPAD_TYPE;
@@ -106,6 +111,10 @@ public void setSettings(ArrayList<HashMap<String, SettingSection>> settings)

private void loadSettingsList()
{
if (!TextUtils.isEmpty(mGameID))
{
mView.getActivity().setTitle("Game Settings: " + mGameID);
}
ArrayList<SettingsItem> sl = new ArrayList<>();

switch (mMenuTag)
@@ -151,7 +160,7 @@ private void loadSettingsList()
break;

default:
mView.showToastMessage("Unimplemented menu.");
mView.showToastMessage("Unimplemented menu");
return;
}

@@ -286,4 +286,9 @@
<item>Right Stick</item>
</string-array>

<string-array name="gameSettingsMenus">
<item>Core Settings</item>
<item>GFX Settings</item>
<item>Clear Game Settings</item>
</string-array>
</resources>
@@ -211,6 +211,7 @@
<!-- Preferences Screen -->
<string name="preferences_save_exit">Save and Exit</string>
<string name="preferences_settings">Settings</string>
<string name="preferences_game_settings">Game Settings</string>
<string name="preferences_extensions">Extension Bindings</string>

<!-- Emulation Menu -->
@@ -247,9 +248,7 @@
<string name="header_controllers">Controllers</string>

<string name="write_permission_needed">You need to allow write access to external storage for the emulator to work</string>

<string name="load_settings">Loading Settings...</string>

<string name="emulation_change_disc">Change Disc</string>

<string name="external_storage_not_mounted">The external storage needs to be available in order to use Dolphin</string>
@@ -30,6 +30,7 @@

#include "Core/Boot/Boot.h"
#include "Core/BootManager.h"
#include "Core/ConfigLoaders/GameConfigLoader.h"
#include "Core/ConfigManager.h"
#include "Core/Core.h"
#include "Core/HW/DVD/DVDInterface.h"
@@ -640,6 +641,57 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_eglBindAPI(J
eglBindAPI(api);
}

JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_InitGameIni(JNIEnv* env,
jobject obj,
jstring jGameID)
{
// Initialize an empty INI file
IniFile ini;
std::string gameid = GetJString(env, jGameID);

__android_log_print(ANDROID_LOG_DEBUG, "InitGameIni", "Initializing base game config file");
ini.Save(File::GetUserPath(D_GAMESETTINGS_IDX) + gameid + ".ini");
}

JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetUserSetting(
JNIEnv* env, jobject obj, jstring jGameID, jstring jSection, jstring jKey)
{
IniFile ini;
std::string gameid = GetJString(env, jGameID);
std::string section = GetJString(env, jSection);
std::string key = GetJString(env, jKey);

ini = SConfig::GetInstance().LoadGameIni(gameid, 0);
std::string value;

ini.GetOrCreateSection(section)->Get(key, &value, "-1");

return env->NewStringUTF(value.c_str());
}

JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_SetUserSetting(
JNIEnv* env, jobject obj, jstring jGameID, jstring jSection, jstring jKey, jstring jValue)
{
IniFile ini;
std::string gameid = GetJString(env, jGameID);
std::string section = GetJString(env, jSection);
std::string key = GetJString(env, jKey);
std::string val = GetJString(env, jValue);

ini.Load(File::GetUserPath(D_GAMESETTINGS_IDX) + gameid + ".ini");

if (val != "-1")
{
ini.GetOrCreateSection(section)->Set(key, val);
}
else
{
ini.GetOrCreateSection(section)->Delete(key);
}

ini.Save(File::GetUserPath(D_GAMESETTINGS_IDX) + gameid + ".ini");
}

JNIEXPORT jstring JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_GetConfig(
JNIEnv* env, jobject obj, jstring jFile, jstring jSection, jstring jKey, jstring jDefault)
{