Merge pull request #8803 from Ebola16/ANDROID

Android: Android INI section and make platform tab selection an INI setting
This commit is contained in:
JosJuice
2020-06-21 13:49:56 +02:00
committed by GitHub
4 changed files with 70 additions and 42 deletions

View File

@ -17,6 +17,7 @@ import java.util.TreeMap;
public class Settings public class Settings
{ {
public static final String SECTION_INI_ANDROID = "Android";
public static final String SECTION_INI_GENERAL = "General"; public static final String SECTION_INI_GENERAL = "General";
public static final String SECTION_INI_CORE = "Core"; public static final String SECTION_INI_CORE = "Core";
public static final String SECTION_INI_INTERFACE = "Interface"; public static final String SECTION_INI_INTERFACE = "Interface";
@ -49,9 +50,10 @@ public class Settings
static static
{ {
configFileSectionsMap.put(SettingsFile.FILE_NAME_DOLPHIN, configFileSectionsMap.put(SettingsFile.FILE_NAME_DOLPHIN,
Arrays.asList(SECTION_INI_GENERAL, SECTION_INI_CORE, SECTION_INI_INTERFACE, Arrays
SECTION_INI_DSP, .asList(SECTION_INI_ANDROID, SECTION_INI_GENERAL, SECTION_INI_CORE,
SECTION_BINDINGS, SECTION_ANALYTICS, SECTION_DEBUG)); SECTION_INI_INTERFACE,
SECTION_INI_DSP, SECTION_BINDINGS, SECTION_ANALYTICS, SECTION_DEBUG));
configFileSectionsMap.put(SettingsFile.FILE_NAME_GFX, configFileSectionsMap.put(SettingsFile.FILE_NAME_GFX,
Arrays.asList(SECTION_GFX_SETTINGS, SECTION_GFX_ENHANCEMENTS, SECTION_GFX_HACKS, Arrays.asList(SECTION_GFX_SETTINGS, SECTION_GFX_ENHANCEMENTS, SECTION_GFX_HACKS,
SECTION_STEREOSCOPY)); SECTION_STEREOSCOPY));
@ -189,7 +191,7 @@ public class Settings
if (modifiedSettings.contains(SettingsFile.KEY_DSP_ENGINE)) if (modifiedSettings.contains(SettingsFile.KEY_DSP_ENGINE))
{ {
switch (NativeLibrary switch (NativeLibrary
.GetConfig(SettingsFile.FILE_NAME_DOLPHIN + ".ini", Settings.SECTION_INI_DSP, .GetConfig(SettingsFile.FILE_NAME_DOLPHIN + ".ini", Settings.SECTION_INI_ANDROID,
SettingsFile.KEY_DSP_ENGINE, DSP_HLE)) SettingsFile.KEY_DSP_ENGINE, DSP_HLE))
{ {
case DSP_HLE: case DSP_HLE:

View File

@ -284,9 +284,10 @@ public final class SettingsFragmentPresenter
Setting audioStretch = null; Setting audioStretch = null;
Setting audioVolume = null; Setting audioVolume = null;
SettingSection androidSection = mSettings.getSection(Settings.SECTION_INI_ANDROID);
SettingSection coreSection = mSettings.getSection(Settings.SECTION_INI_CORE); SettingSection coreSection = mSettings.getSection(Settings.SECTION_INI_CORE);
SettingSection dspSection = mSettings.getSection(Settings.SECTION_INI_DSP); SettingSection dspSection = mSettings.getSection(Settings.SECTION_INI_DSP);
dspEmulationEngine = dspSection.getSetting(SettingsFile.KEY_DSP_ENGINE); dspEmulationEngine = androidSection.getSetting(SettingsFile.KEY_DSP_ENGINE);
audioStretch = coreSection.getSetting(SettingsFile.KEY_AUDIO_STRETCH); audioStretch = coreSection.getSetting(SettingsFile.KEY_AUDIO_STRETCH);
audioVolume = dspSection.getSetting(SettingsFile.KEY_AUDIO_VOLUME); audioVolume = dspSection.getSetting(SettingsFile.KEY_AUDIO_VOLUME);
@ -306,7 +307,7 @@ public final class SettingsFragmentPresenter
} }
// DSP Emulation Engine controls two settings. // DSP Emulation Engine controls two settings.
// DSP Emulation Engine is read by Settings.saveSettings to modify the relevant settings. // DSP Emulation Engine is read by Settings.saveSettings to modify the relevant settings.
sl.add(new SingleChoiceSetting(SettingsFile.KEY_DSP_ENGINE, Settings.SECTION_INI_DSP, sl.add(new SingleChoiceSetting(SettingsFile.KEY_DSP_ENGINE, Settings.SECTION_INI_ANDROID,
R.string.dsp_emulation_engine, 0, dspEngineEntries, dspEngineValues, 0, R.string.dsp_emulation_engine, 0, dspEngineEntries, dspEngineValues, 0,
dspEmulationEngine)); dspEmulationEngine));
sl.add(new CheckBoxSetting(SettingsFile.KEY_AUDIO_STRETCH, Settings.SECTION_INI_CORE, sl.add(new CheckBoxSetting(SettingsFile.KEY_AUDIO_STRETCH, Settings.SECTION_INI_CORE,

View File

@ -39,6 +39,8 @@ public final class SettingsFile
public static final String FILE_NAME_GCPAD = "GCPadNew"; public static final String FILE_NAME_GCPAD = "GCPadNew";
public static final String FILE_NAME_WIIMOTE = "WiimoteNew"; public static final String FILE_NAME_WIIMOTE = "WiimoteNew";
public static final String KEY_DSP_ENGINE = "DSPEngine";
public static final String KEY_LAST_PLATFORM_TAB = "LastPlatformTab";
public static final String KEY_CPU_CORE = "CPUCore"; public static final String KEY_CPU_CORE = "CPUCore";
public static final String KEY_DUAL_CORE = "CPUThread"; public static final String KEY_DUAL_CORE = "CPUThread";
@ -47,7 +49,6 @@ public final class SettingsFile
public static final String KEY_SPEED_LIMIT = "EmulationSpeed"; public static final String KEY_SPEED_LIMIT = "EmulationSpeed";
public static final String KEY_VIDEO_BACKEND = "GFXBackend"; public static final String KEY_VIDEO_BACKEND = "GFXBackend";
public static final String KEY_DSP_ENGINE = "DSPEngine";
public static final String KEY_DSP_HLE = "DSPHLE"; public static final String KEY_DSP_HLE = "DSPHLE";
public static final String KEY_DSP_ENABLE_JIT = "EnableJIT"; public static final String KEY_DSP_ENABLE_JIT = "EnableJIT";
public static final String KEY_AUDIO_STRETCH = "AudioStretch"; public static final String KEY_AUDIO_STRETCH = "AudioStretch";

View File

@ -4,6 +4,7 @@ import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.os.Bundle; import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.floatingactionbutton.FloatingActionButton;
@ -16,14 +17,17 @@ import androidx.appcompat.widget.Toolbar;
import android.view.Menu; import android.view.Menu;
import android.view.MenuInflater; import android.view.MenuInflater;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View;
import android.widget.Toast; import android.widget.Toast;
import org.dolphinemu.dolphinemu.NativeLibrary;
import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.activities.EmulationActivity; import org.dolphinemu.dolphinemu.activities.EmulationActivity;
import org.dolphinemu.dolphinemu.adapters.PlatformPagerAdapter; import org.dolphinemu.dolphinemu.adapters.PlatformPagerAdapter;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag;
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivity; import org.dolphinemu.dolphinemu.features.settings.ui.SettingsActivity;
import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile;
import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner;
import org.dolphinemu.dolphinemu.utils.DirectoryInitialization; import org.dolphinemu.dolphinemu.utils.DirectoryInitialization;
import org.dolphinemu.dolphinemu.services.GameFileCacheService; import org.dolphinemu.dolphinemu.services.GameFileCacheService;
import org.dolphinemu.dolphinemu.ui.platform.Platform; import org.dolphinemu.dolphinemu.ui.platform.Platform;
@ -55,8 +59,6 @@ public final class MainActivity extends AppCompatActivity implements MainView
setSupportActionBar(mToolbar); setSupportActionBar(mToolbar);
mTabLayout.setupWithViewPager(mViewPager);
// Set up the FAB. // Set up the FAB.
mFab.setOnClickListener(view -> mPresenter.onFabClick()); mFab.setOnClickListener(view -> mPresenter.onFabClick());
@ -68,16 +70,8 @@ public final class MainActivity extends AppCompatActivity implements MainView
if (PermissionsHandler.hasWriteAccess(this)) if (PermissionsHandler.hasWriteAccess(this))
{ {
PlatformPagerAdapter platformPagerAdapter = new PlatformPagerAdapter( new AfterDirectoryInitializationRunner()
getSupportFragmentManager(), this); .run(this, this::setPlatformTabsAndStartGameFileCacheService);
mViewPager.setAdapter(platformPagerAdapter);
mViewPager.setOffscreenPageLimit(platformPagerAdapter.getCount());
showGames();
GameFileCacheService.startLoad(this);
}
else
{
mViewPager.setVisibility(View.INVISIBLE);
} }
} }
@ -203,29 +197,22 @@ public final class MainActivity extends AppCompatActivity implements MainView
@Override @Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{ {
switch (requestCode) if (requestCode == PermissionsHandler.REQUEST_CODE_WRITE_PERMISSION)
{ {
case PermissionsHandler.REQUEST_CODE_WRITE_PERMISSION: if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
{ DirectoryInitialization.start(this);
DirectoryInitialization.start(this); new AfterDirectoryInitializationRunner()
PlatformPagerAdapter platformPagerAdapter = new PlatformPagerAdapter( .run(this, this::setPlatformTabsAndStartGameFileCacheService);
getSupportFragmentManager(), this); }
mViewPager.setAdapter(platformPagerAdapter); else
mViewPager.setOffscreenPageLimit(platformPagerAdapter.getCount()); {
mTabLayout.setupWithViewPager(mViewPager); Toast.makeText(this, R.string.write_permission_needed, Toast.LENGTH_SHORT).show();
mViewPager.setVisibility(View.VISIBLE); }
GameFileCacheService.startLoad(this); }
} else
else {
{ super.onRequestPermissionsResult(requestCode, permissions, grantResults);
Toast.makeText(this, R.string.write_permission_needed, Toast.LENGTH_SHORT)
.show();
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
break;
} }
} }
@ -260,4 +247,41 @@ public final class MainActivity extends AppCompatActivity implements MainView
return (PlatformGamesView) getSupportFragmentManager().findFragmentByTag(fragmentTag); return (PlatformGamesView) getSupportFragmentManager().findFragmentByTag(fragmentTag);
} }
// Don't call this before DirectoryInitialization completes.
private void setPlatformTabsAndStartGameFileCacheService()
{
PlatformPagerAdapter platformPagerAdapter = new PlatformPagerAdapter(
getSupportFragmentManager(), this);
mViewPager.setAdapter(platformPagerAdapter);
mViewPager.setOffscreenPageLimit(platformPagerAdapter.getCount());
mTabLayout.setupWithViewPager(mViewPager);
mTabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager)
{
@Override
public void onTabSelected(@NonNull TabLayout.Tab tab)
{
super.onTabSelected(tab);
NativeLibrary
.SetConfig(SettingsFile.FILE_NAME_DOLPHIN + ".ini", Settings.SECTION_INI_ANDROID,
SettingsFile.KEY_LAST_PLATFORM_TAB, Integer.toString(tab.getPosition()));
}
});
String platformTab = NativeLibrary
.GetConfig(SettingsFile.FILE_NAME_DOLPHIN + ".ini", Settings.SECTION_INI_ANDROID,
SettingsFile.KEY_LAST_PLATFORM_TAB, "0");
try
{
mViewPager.setCurrentItem(Integer.parseInt(platformTab));
}
catch (NumberFormatException ex)
{
mViewPager.setCurrentItem(0);
}
showGames();
GameFileCacheService.startLoad(this);
}
} }