mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-06 12:40:24 +00:00
[Android] Start making it so the side pane is visible on all activities by converting them to fragments. Only Browse Folder and Gamepad Config remain. Fix a issue that Lioncash introduced where no games would show up in the folder browser or the game list.
This commit is contained in:
parent
fbd67325a6
commit
023922cd5b
@ -36,13 +36,13 @@
|
|||||||
android:configChanges="orientation|locale|keyboard|keyboardHidden|navigation|fontScale|uiMode" >
|
android:configChanges="orientation|locale|keyboard|keyboardHidden|navigation|fontScale|uiMode" >
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name=".PrefsActivity" >
|
android:name=".PrefsFragment" >
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name=".GameListActivity" >
|
android:name=".GameListActivity" >
|
||||||
</activity>
|
</activity>
|
||||||
<activity
|
<activity
|
||||||
android:name=".AboutActivity" >
|
android:name=".AboutFragment" >
|
||||||
</activity>
|
</activity>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
package org.dolphinemu.dolphinemu;
|
|
||||||
|
|
||||||
import android.app.ListActivity;
|
|
||||||
import android.os.Bundle;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copyright 2013 Dolphin Emulator Project
|
|
||||||
* Licensed under GPLv2
|
|
||||||
* Refer to the license.txt file included.
|
|
||||||
*/
|
|
||||||
public class AboutActivity extends ListActivity {
|
|
||||||
private FolderBrowserAdapter adapter;
|
|
||||||
private int configPosition = 0;
|
|
||||||
boolean Configuring = false;
|
|
||||||
boolean firstEvent = true;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState)
|
|
||||||
{
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
List<GameListItem> Input = new ArrayList<GameListItem>();
|
|
||||||
int a = 0;
|
|
||||||
|
|
||||||
Input.add(a++, new GameListItem(getApplicationContext(), "Build Revision", NativeLibrary.GetVersionString(), "", true));
|
|
||||||
adapter = new FolderBrowserAdapter(this, R.layout.folderbrowser, Input);
|
|
||||||
setListAdapter(adapter);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,61 @@
|
|||||||
|
package org.dolphinemu.dolphinemu;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.app.Fragment;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
import android.widget.ListView;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright 2013 Dolphin Emulator Project
|
||||||
|
* Licensed under GPLv2
|
||||||
|
* Refer to the license.txt file included.
|
||||||
|
*/
|
||||||
|
public class AboutFragment extends Fragment {
|
||||||
|
private static Activity m_activity;
|
||||||
|
|
||||||
|
private ListView mMainList;
|
||||||
|
|
||||||
|
private FolderBrowserAdapter adapter;
|
||||||
|
private int configPosition = 0;
|
||||||
|
boolean Configuring = false;
|
||||||
|
boolean firstEvent = true;
|
||||||
|
|
||||||
|
public AboutFragment() {
|
||||||
|
// Empty constructor required for fragment subclasses
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
Bundle savedInstanceState) {
|
||||||
|
View rootView = inflater.inflate(R.layout.gamelist_listview, container, false);
|
||||||
|
mMainList = (ListView) rootView.findViewById(R.id.gamelist);
|
||||||
|
|
||||||
|
List<GameListItem> Input = new ArrayList<GameListItem>();
|
||||||
|
int a = 0;
|
||||||
|
|
||||||
|
Input.add(a++, new GameListItem(m_activity, "Build Revision", NativeLibrary.GetVersionString(), "", true));
|
||||||
|
adapter = new FolderBrowserAdapter(m_activity, R.layout.folderbrowser, Input);
|
||||||
|
mMainList.setAdapter(adapter);
|
||||||
|
|
||||||
|
return mMainList;
|
||||||
|
}
|
||||||
|
@Override
|
||||||
|
public void onAttach(Activity activity) {
|
||||||
|
super.onAttach(activity);
|
||||||
|
|
||||||
|
// This makes sure that the container activity has implemented
|
||||||
|
// the callback interface. If not, it throws an exception
|
||||||
|
try {
|
||||||
|
m_activity = activity;
|
||||||
|
} catch (ClassCastException e) {
|
||||||
|
throw new ClassCastException(activity.toString()
|
||||||
|
+ " must implement OnGameListZeroListener");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -50,11 +50,11 @@ public class FolderBrowser extends ListActivity {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (validExts.contains(entryName.toLowerCase()))
|
if (validExts.contains(entryName.toLowerCase().substring(entryName.lastIndexOf('.'))))
|
||||||
{
|
{
|
||||||
fls.add(new GameListItem(getApplicationContext(), entryName,"File Size: "+entry.length(),entry.getAbsolutePath(), true));
|
fls.add(new GameListItem(getApplicationContext(), entryName,"File Size: "+entry.length(),entry.getAbsolutePath(), true));
|
||||||
}
|
}
|
||||||
else if (archiveExts.contains(entryName.toLowerCase()))
|
else if (archiveExts.contains(entryName.toLowerCase().substring(entryName.lastIndexOf('.'))))
|
||||||
{
|
{
|
||||||
fls.add(new GameListItem(getApplicationContext(), entryName,"File Size: "+entry.length(),entry.getAbsolutePath(), false));
|
fls.add(new GameListItem(getApplicationContext(), entryName,"File Size: "+entry.length(),entry.getAbsolutePath(), false));
|
||||||
}
|
}
|
||||||
|
@ -28,6 +28,7 @@ import java.util.List;
|
|||||||
public class GameListActivity extends Activity
|
public class GameListActivity extends Activity
|
||||||
implements GameListFragment.OnGameListZeroListener{
|
implements GameListFragment.OnGameListZeroListener{
|
||||||
|
|
||||||
|
private int mCurPage = 0;
|
||||||
enum keyTypes {TYPE_STRING, TYPE_BOOL};
|
enum keyTypes {TYPE_STRING, TYPE_BOOL};
|
||||||
|
|
||||||
private ActionBarDrawerToggle mDrawerToggle;
|
private ActionBarDrawerToggle mDrawerToggle;
|
||||||
@ -53,10 +54,11 @@ public class GameListActivity extends Activity
|
|||||||
mDrawerList = (ListView) findViewById(R.id.left_drawer);
|
mDrawerList = (ListView) findViewById(R.id.left_drawer);
|
||||||
|
|
||||||
List<SideMenuItem> dir = new ArrayList<SideMenuItem>();
|
List<SideMenuItem> dir = new ArrayList<SideMenuItem>();
|
||||||
dir.add(new SideMenuItem("Browse Folder", 0));
|
dir.add(new SideMenuItem("Game List", 0));
|
||||||
dir.add(new SideMenuItem("Settings", 1));
|
dir.add(new SideMenuItem("Browse Folder", 1));
|
||||||
dir.add(new SideMenuItem("Gamepad Config", 2));
|
dir.add(new SideMenuItem("Settings", 2));
|
||||||
dir.add(new SideMenuItem("About", 3));
|
dir.add(new SideMenuItem("Gamepad Config", 3));
|
||||||
|
dir.add(new SideMenuItem("About", 4));
|
||||||
|
|
||||||
mDrawerAdapter = new SideMenuAdapter(this, R.layout.sidemenu, dir);
|
mDrawerAdapter = new SideMenuAdapter(this, R.layout.sidemenu, dir);
|
||||||
mDrawerList.setAdapter(mDrawerAdapter);
|
mDrawerList.setAdapter(mDrawerAdapter);
|
||||||
@ -94,67 +96,15 @@ public class GameListActivity extends Activity
|
|||||||
FragmentManager fragmentManager = getFragmentManager();
|
FragmentManager fragmentManager = getFragmentManager();
|
||||||
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
|
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
|
||||||
}
|
}
|
||||||
|
private void SwitchPage(int toPage)
|
||||||
private AdapterView.OnItemClickListener mMenuItemClickListener = new AdapterView.OnItemClickListener()
|
|
||||||
{
|
{
|
||||||
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
|
if (mCurPage == toPage)
|
||||||
|
return;
|
||||||
|
switch (mCurPage)
|
||||||
{
|
{
|
||||||
SideMenuItem o = mDrawerAdapter.getItem(position);
|
|
||||||
mDrawerLayout.closeDrawer(mDrawerList);
|
|
||||||
|
|
||||||
switch(o.getID())
|
|
||||||
{
|
|
||||||
case 0:
|
|
||||||
Toast.makeText(mMe, "Loading up the browser", Toast.LENGTH_SHORT).show();
|
|
||||||
Intent ListIntent = new Intent(mMe, FolderBrowser.class);
|
|
||||||
startActivityForResult(ListIntent, 1);
|
|
||||||
break;
|
|
||||||
case 1:
|
|
||||||
Toast.makeText(mMe, "Loading up settings", Toast.LENGTH_SHORT).show();
|
|
||||||
Intent SettingIntent = new Intent(mMe, PrefsActivity.class);
|
|
||||||
startActivityForResult(SettingIntent, 2);
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
Toast.makeText(mMe, "Loading up gamepad config", Toast.LENGTH_SHORT).show();
|
|
||||||
Intent ConfigIntent = new Intent(mMe, InputConfigActivity.class);
|
|
||||||
startActivityForResult(ConfigIntent, 3);
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
Toast.makeText(mMe, "Loading up About", Toast.LENGTH_SHORT).show();
|
|
||||||
Intent AboutIntent = new Intent(mMe, AboutActivity.class);
|
|
||||||
startActivityForResult(AboutIntent, 3);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
};
|
|
||||||
@Override
|
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data)
|
|
||||||
{
|
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
|
||||||
|
|
||||||
switch (requestCode)
|
|
||||||
{
|
|
||||||
// Browse
|
|
||||||
case 1:
|
|
||||||
if (resultCode == Activity.RESULT_OK)
|
|
||||||
{
|
|
||||||
String FileName = data.getStringExtra("Select");
|
|
||||||
Toast.makeText(this, "Folder Selected: " + FileName, Toast.LENGTH_SHORT).show();
|
|
||||||
String Directories = NativeLibrary.GetConfig("Dolphin.ini", "General", "GCMPathes", "0");
|
|
||||||
int intDirectories = Integer.parseInt(Directories);
|
|
||||||
Directories = Integer.toString(intDirectories + 1);
|
|
||||||
NativeLibrary.SetConfig("Dolphin.ini", "General", "GCMPathes", Directories);
|
|
||||||
NativeLibrary.SetConfig("Dolphin.ini", "General", "GCMPath" + Integer.toString(intDirectories), FileName);
|
|
||||||
|
|
||||||
recreateFragment();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
// Settings
|
// Settings
|
||||||
case 2:
|
case 2:
|
||||||
|
{
|
||||||
String Keys[] = {
|
String Keys[] = {
|
||||||
"cpupref",
|
"cpupref",
|
||||||
"dualcorepref",
|
"dualcorepref",
|
||||||
@ -193,11 +143,87 @@ public class GameListActivity extends Activity
|
|||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
case 0: // Settings
|
||||||
case 3: // Gamepad settings
|
case 3: // Gamepad settings
|
||||||
/* Do Nothing */
|
/* Do Nothing */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
switch(toPage)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
{
|
||||||
|
mCurPage = 0;
|
||||||
|
Fragment fragment = new GameListFragment();
|
||||||
|
FragmentManager fragmentManager = getFragmentManager();
|
||||||
|
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
Toast.makeText(mMe, "Loading up the browser", Toast.LENGTH_SHORT).show();
|
||||||
|
Intent ListIntent = new Intent(mMe, FolderBrowser.class);
|
||||||
|
startActivityForResult(ListIntent, 1);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
{
|
||||||
|
Toast.makeText(mMe, "Loading up settings", Toast.LENGTH_SHORT).show();
|
||||||
|
mCurPage = 2;
|
||||||
|
Fragment fragment = new PrefsFragment();
|
||||||
|
FragmentManager fragmentManager = getFragmentManager();
|
||||||
|
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
Toast.makeText(mMe, "Loading up gamepad config", Toast.LENGTH_SHORT).show();
|
||||||
|
Intent ConfigIntent = new Intent(mMe, InputConfigActivity.class);
|
||||||
|
startActivityForResult(ConfigIntent, 3);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
{
|
||||||
|
Toast.makeText(mMe, "Loading up About", Toast.LENGTH_SHORT).show();
|
||||||
|
mCurPage = 4;
|
||||||
|
Fragment fragment = new AboutFragment();
|
||||||
|
FragmentManager fragmentManager = getFragmentManager();
|
||||||
|
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private AdapterView.OnItemClickListener mMenuItemClickListener = new AdapterView.OnItemClickListener()
|
||||||
|
{
|
||||||
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
|
||||||
|
{
|
||||||
|
SideMenuItem o = mDrawerAdapter.getItem(position);
|
||||||
|
mDrawerLayout.closeDrawer(mDrawerList);
|
||||||
|
SwitchPage(o.getID());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
@Override
|
||||||
|
public void onActivityResult(int requestCode, int resultCode, Intent data)
|
||||||
|
{
|
||||||
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
|
|
||||||
|
switch (requestCode)
|
||||||
|
{
|
||||||
|
// Browse
|
||||||
|
case 1:
|
||||||
|
if (resultCode == Activity.RESULT_OK)
|
||||||
|
{
|
||||||
|
String FileName = data.getStringExtra("Select");
|
||||||
|
Toast.makeText(this, "Folder Selected: " + FileName, Toast.LENGTH_SHORT).show();
|
||||||
|
String Directories = NativeLibrary.GetConfig("Dolphin.ini", "General", "GCMPathes", "0");
|
||||||
|
int intDirectories = Integer.parseInt(Directories);
|
||||||
|
Directories = Integer.toString(intDirectories + 1);
|
||||||
|
NativeLibrary.SetConfig("Dolphin.ini", "General", "GCMPathes", Directories);
|
||||||
|
NativeLibrary.SetConfig("Dolphin.ini", "General", "GCMPath" + Integer.toString(intDirectories), FileName);
|
||||||
|
|
||||||
|
recreateFragment();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* When using the ActionBarDrawerToggle, you must call it during
|
* When using the ActionBarDrawerToggle, you must call it during
|
||||||
@ -235,7 +261,7 @@ public class GameListActivity extends Activity
|
|||||||
}
|
}
|
||||||
public void onBackPressed()
|
public void onBackPressed()
|
||||||
{
|
{
|
||||||
|
SwitchPage(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -62,7 +62,7 @@ public class GameListFragment extends Fragment
|
|||||||
{
|
{
|
||||||
if(!entry.isDirectory())
|
if(!entry.isDirectory())
|
||||||
{
|
{
|
||||||
if (exts.contains(entryName.toLowerCase()))
|
if (exts.contains(entryName.toLowerCase().substring(entryName.lastIndexOf('.'))))
|
||||||
fls.add(new GameListItem(mMe.getApplicationContext(), entryName,"File Size: "+entry.length(),entry.getAbsolutePath(), true));
|
fls.add(new GameListItem(mMe.getApplicationContext(), entryName,"File Size: "+entry.length(),entry.getAbsolutePath(), true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,217 +0,0 @@
|
|||||||
package org.dolphinemu.dolphinemu;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.preference.ListPreference;
|
|
||||||
import android.preference.PreferenceActivity;
|
|
||||||
import android.preference.PreferenceCategory;
|
|
||||||
import android.preference.PreferenceFragment;
|
|
||||||
|
|
||||||
import javax.microedition.khronos.egl.*;
|
|
||||||
import javax.microedition.khronos.opengles.GL10;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Copyright 2013 Dolphin Emulator Project
|
|
||||||
* Licensed under GPLv2
|
|
||||||
* Refer to the license.txt file included.
|
|
||||||
*/
|
|
||||||
public class PrefsActivity extends PreferenceActivity {
|
|
||||||
private PrefsActivity m_activity;
|
|
||||||
|
|
||||||
private String m_GLVersion;
|
|
||||||
private String m_GLVendor;
|
|
||||||
private String m_GLRenderer;
|
|
||||||
|
|
||||||
|
|
||||||
public class VersionCheck {
|
|
||||||
EGL10 mEGL;
|
|
||||||
EGLDisplay mEGLDisplay;
|
|
||||||
EGLConfig[] mEGLConfigs;
|
|
||||||
EGLConfig mEGLConfig;
|
|
||||||
EGLContext mEGLContext;
|
|
||||||
EGLSurface mEGLSurface;
|
|
||||||
GL10 mGL;
|
|
||||||
|
|
||||||
String mThreadOwner;
|
|
||||||
|
|
||||||
public VersionCheck() {
|
|
||||||
|
|
||||||
int[] version = new int[2];
|
|
||||||
int[] attribList = new int[] {
|
|
||||||
EGL10.EGL_WIDTH, 1,
|
|
||||||
EGL10.EGL_HEIGHT, 1,
|
|
||||||
EGL10.EGL_RENDERABLE_TYPE, 4,
|
|
||||||
EGL10.EGL_NONE
|
|
||||||
};
|
|
||||||
|
|
||||||
// No error checking performed, minimum required code to elucidate logic
|
|
||||||
mEGL = (EGL10) EGLContext.getEGL();
|
|
||||||
mEGLDisplay = mEGL.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
|
|
||||||
mEGL.eglInitialize(mEGLDisplay, version);
|
|
||||||
mEGLConfig = chooseConfig(); // Choosing a config is a little more complicated
|
|
||||||
mEGLContext = mEGL.eglCreateContext(mEGLDisplay, mEGLConfig, EGL10.EGL_NO_CONTEXT, null);
|
|
||||||
mEGLSurface = mEGL.eglCreatePbufferSurface(mEGLDisplay, mEGLConfig, attribList);
|
|
||||||
mEGL.eglMakeCurrent(mEGLDisplay, mEGLSurface, mEGLSurface, mEGLContext);
|
|
||||||
mGL = (GL10) mEGLContext.getGL();
|
|
||||||
|
|
||||||
// Record thread owner of OpenGL context
|
|
||||||
mThreadOwner = Thread.currentThread().getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getVersion()
|
|
||||||
{
|
|
||||||
return mGL.glGetString(GL10.GL_VERSION);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getVendor()
|
|
||||||
{
|
|
||||||
return mGL.glGetString(GL10.GL_VENDOR);
|
|
||||||
}
|
|
||||||
public String getRenderer()
|
|
||||||
{
|
|
||||||
return mGL.glGetString(GL10.GL_RENDERER);
|
|
||||||
}
|
|
||||||
private EGLConfig chooseConfig() {
|
|
||||||
int[] attribList = new int[] {
|
|
||||||
EGL10.EGL_DEPTH_SIZE, 0,
|
|
||||||
EGL10.EGL_STENCIL_SIZE, 0,
|
|
||||||
EGL10.EGL_RED_SIZE, 8,
|
|
||||||
EGL10.EGL_GREEN_SIZE, 8,
|
|
||||||
EGL10.EGL_BLUE_SIZE, 8,
|
|
||||||
EGL10.EGL_ALPHA_SIZE, 8,
|
|
||||||
EGL10.EGL_NONE
|
|
||||||
};
|
|
||||||
|
|
||||||
// No error checking performed, minimum required code to elucidate logic
|
|
||||||
// Expand on this logic to be more selective in choosing a configuration
|
|
||||||
int[] numConfig = new int[1];
|
|
||||||
mEGL.eglChooseConfig(mEGLDisplay, attribList, null, 0, numConfig);
|
|
||||||
int configSize = numConfig[0];
|
|
||||||
mEGLConfigs = new EGLConfig[configSize];
|
|
||||||
mEGL.eglChooseConfig(mEGLDisplay, attribList, mEGLConfigs, configSize, numConfig);
|
|
||||||
|
|
||||||
return mEGLConfigs[0]; // Best match is probably the first configuration
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class PrefsFragment extends PreferenceFragment {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
// Load the preferences from an XML resource
|
|
||||||
addPreferencesFromResource(R.layout.prefs);
|
|
||||||
|
|
||||||
final ListPreference etp = new ListPreference(m_activity);
|
|
||||||
CharSequence[] _entries;
|
|
||||||
CharSequence[] _entryvalues;
|
|
||||||
|
|
||||||
if (Build.CPU_ABI.contains("x86"))
|
|
||||||
{
|
|
||||||
_entries = new CharSequence[] {
|
|
||||||
"Interpreter",
|
|
||||||
"JIT64 Recompiler",
|
|
||||||
"JITIL Recompiler",
|
|
||||||
};
|
|
||||||
_entryvalues = new CharSequence[] {"0", "1", "2"};
|
|
||||||
}
|
|
||||||
else if (Build.CPU_ABI.contains("arm"))
|
|
||||||
{
|
|
||||||
_entries = new CharSequence[] {
|
|
||||||
"Interpreter",
|
|
||||||
"JIT ARM Recompiler",
|
|
||||||
};
|
|
||||||
_entryvalues = new CharSequence[] {"0", "3"};
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
_entries = new CharSequence[] {
|
|
||||||
"Interpreter",
|
|
||||||
};
|
|
||||||
_entryvalues = new CharSequence[] {"0"};
|
|
||||||
}
|
|
||||||
|
|
||||||
etp.setEntries(_entries);
|
|
||||||
etp.setEntryValues(_entryvalues);
|
|
||||||
etp.setKey("cpupref");
|
|
||||||
etp.setTitle("CPU Core");
|
|
||||||
etp.setSummary("Emulation core to use");
|
|
||||||
|
|
||||||
PreferenceCategory mCategory = (PreferenceCategory) findPreference("cpuprefcat");
|
|
||||||
mCategory.addPreference(etp);
|
|
||||||
VersionCheck mbuffer = new VersionCheck();
|
|
||||||
m_GLVersion = mbuffer.getVersion();
|
|
||||||
m_GLVendor = mbuffer.getVendor();
|
|
||||||
m_GLRenderer = mbuffer.getRenderer();
|
|
||||||
|
|
||||||
boolean mSupportsGLES3 = false;
|
|
||||||
|
|
||||||
if (m_GLVersion.contains("OpenGL ES 3.0")) // 3.0 support
|
|
||||||
mSupportsGLES3 = true;
|
|
||||||
if (!mSupportsGLES3 && m_GLVendor.equals("Qualcomm"))
|
|
||||||
{
|
|
||||||
if (m_GLRenderer.contains("Adreno (TM) 3"))
|
|
||||||
{
|
|
||||||
int mVStart, mVEnd = 0;
|
|
||||||
float mVersion;
|
|
||||||
mVStart = m_GLVersion.indexOf("V@") + 2;
|
|
||||||
for (int a = mVStart; a < m_GLVersion.length(); ++a)
|
|
||||||
if (m_GLVersion.charAt(a) == ' ')
|
|
||||||
{
|
|
||||||
mVEnd = a;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
mVersion = Float.parseFloat(m_GLVersion.substring(mVStart, mVEnd));
|
|
||||||
|
|
||||||
if (mVersion >= 14.0f)
|
|
||||||
mSupportsGLES3 = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!mSupportsGLES3)
|
|
||||||
{
|
|
||||||
mCategory = (PreferenceCategory) findPreference("videoprefcat");
|
|
||||||
ListPreference mPref = (ListPreference) findPreference("gpupref");
|
|
||||||
mCategory.removePreference(mPref);
|
|
||||||
|
|
||||||
final ListPreference videobackend = new ListPreference(m_activity);
|
|
||||||
|
|
||||||
_entries = new CharSequence[] {
|
|
||||||
"Software Renderer",
|
|
||||||
};
|
|
||||||
_entryvalues = new CharSequence[] {"Software Renderer"};
|
|
||||||
|
|
||||||
videobackend.setKey("gpupref");
|
|
||||||
videobackend.setTitle("Video Backend");
|
|
||||||
videobackend.setSummary("Video backend to use");
|
|
||||||
|
|
||||||
videobackend.setEntries(_entries);
|
|
||||||
videobackend.setEntryValues(_entryvalues);
|
|
||||||
|
|
||||||
mCategory.addPreference(videobackend);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
m_activity = this;
|
|
||||||
|
|
||||||
getFragmentManager().beginTransaction().replace(android.R.id.content,
|
|
||||||
new PrefsFragment()).commit();
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public void onBackPressed() {
|
|
||||||
Intent intent = new Intent();
|
|
||||||
setResult(Activity.RESULT_OK, intent);
|
|
||||||
this.finish();
|
|
||||||
super.onBackPressed();
|
|
||||||
}
|
|
||||||
}
|
|
207
Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java
Normal file
207
Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
package org.dolphinemu.dolphinemu;
|
||||||
|
|
||||||
|
import android.app.Activity;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.ListPreference;
|
||||||
|
import android.preference.PreferenceCategory;
|
||||||
|
import android.preference.PreferenceFragment;
|
||||||
|
|
||||||
|
import javax.microedition.khronos.egl.*;
|
||||||
|
import javax.microedition.khronos.opengles.GL10;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copyright 2013 Dolphin Emulator Project
|
||||||
|
* Licensed under GPLv2
|
||||||
|
* Refer to the license.txt file included.
|
||||||
|
*/
|
||||||
|
public class PrefsFragment extends PreferenceFragment {
|
||||||
|
private Activity m_activity;
|
||||||
|
|
||||||
|
private String m_GLVersion;
|
||||||
|
private String m_GLVendor;
|
||||||
|
private String m_GLRenderer;
|
||||||
|
|
||||||
|
|
||||||
|
public class VersionCheck {
|
||||||
|
EGL10 mEGL;
|
||||||
|
EGLDisplay mEGLDisplay;
|
||||||
|
EGLConfig[] mEGLConfigs;
|
||||||
|
EGLConfig mEGLConfig;
|
||||||
|
EGLContext mEGLContext;
|
||||||
|
EGLSurface mEGLSurface;
|
||||||
|
GL10 mGL;
|
||||||
|
|
||||||
|
String mThreadOwner;
|
||||||
|
|
||||||
|
public VersionCheck() {
|
||||||
|
|
||||||
|
int[] version = new int[2];
|
||||||
|
int[] attribList = new int[] {
|
||||||
|
EGL10.EGL_WIDTH, 1,
|
||||||
|
EGL10.EGL_HEIGHT, 1,
|
||||||
|
EGL10.EGL_RENDERABLE_TYPE, 4,
|
||||||
|
EGL10.EGL_NONE
|
||||||
|
};
|
||||||
|
|
||||||
|
// No error checking performed, minimum required code to elucidate logic
|
||||||
|
mEGL = (EGL10) EGLContext.getEGL();
|
||||||
|
mEGLDisplay = mEGL.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
|
||||||
|
mEGL.eglInitialize(mEGLDisplay, version);
|
||||||
|
mEGLConfig = chooseConfig(); // Choosing a config is a little more complicated
|
||||||
|
mEGLContext = mEGL.eglCreateContext(mEGLDisplay, mEGLConfig, EGL10.EGL_NO_CONTEXT, null);
|
||||||
|
mEGLSurface = mEGL.eglCreatePbufferSurface(mEGLDisplay, mEGLConfig, attribList);
|
||||||
|
mEGL.eglMakeCurrent(mEGLDisplay, mEGLSurface, mEGLSurface, mEGLContext);
|
||||||
|
mGL = (GL10) mEGLContext.getGL();
|
||||||
|
|
||||||
|
// Record thread owner of OpenGL context
|
||||||
|
mThreadOwner = Thread.currentThread().getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getVersion()
|
||||||
|
{
|
||||||
|
return mGL.glGetString(GL10.GL_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getVendor()
|
||||||
|
{
|
||||||
|
return mGL.glGetString(GL10.GL_VENDOR);
|
||||||
|
}
|
||||||
|
public String getRenderer()
|
||||||
|
{
|
||||||
|
return mGL.glGetString(GL10.GL_RENDERER);
|
||||||
|
}
|
||||||
|
private EGLConfig chooseConfig() {
|
||||||
|
int[] attribList = new int[] {
|
||||||
|
EGL10.EGL_DEPTH_SIZE, 0,
|
||||||
|
EGL10.EGL_STENCIL_SIZE, 0,
|
||||||
|
EGL10.EGL_RED_SIZE, 8,
|
||||||
|
EGL10.EGL_GREEN_SIZE, 8,
|
||||||
|
EGL10.EGL_BLUE_SIZE, 8,
|
||||||
|
EGL10.EGL_ALPHA_SIZE, 8,
|
||||||
|
EGL10.EGL_NONE
|
||||||
|
};
|
||||||
|
|
||||||
|
// No error checking performed, minimum required code to elucidate logic
|
||||||
|
// Expand on this logic to be more selective in choosing a configuration
|
||||||
|
int[] numConfig = new int[1];
|
||||||
|
mEGL.eglChooseConfig(mEGLDisplay, attribList, null, 0, numConfig);
|
||||||
|
int configSize = numConfig[0];
|
||||||
|
mEGLConfigs = new EGLConfig[configSize];
|
||||||
|
mEGL.eglChooseConfig(mEGLDisplay, attribList, mEGLConfigs, configSize, numConfig);
|
||||||
|
|
||||||
|
return mEGLConfigs[0]; // Best match is probably the first configuration
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
// Load the preferences from an XML resource
|
||||||
|
addPreferencesFromResource(R.layout.prefs);
|
||||||
|
|
||||||
|
final ListPreference etp = new ListPreference(m_activity);
|
||||||
|
CharSequence[] _entries;
|
||||||
|
CharSequence[] _entryvalues;
|
||||||
|
|
||||||
|
if (Build.CPU_ABI.contains("x86"))
|
||||||
|
{
|
||||||
|
_entries = new CharSequence[] {
|
||||||
|
"Interpreter",
|
||||||
|
"JIT64 Recompiler",
|
||||||
|
"JITIL Recompiler",
|
||||||
|
};
|
||||||
|
_entryvalues = new CharSequence[] {"0", "1", "2"};
|
||||||
|
}
|
||||||
|
else if (Build.CPU_ABI.contains("arm"))
|
||||||
|
{
|
||||||
|
_entries = new CharSequence[] {
|
||||||
|
"Interpreter",
|
||||||
|
"JIT ARM Recompiler",
|
||||||
|
};
|
||||||
|
_entryvalues = new CharSequence[] {"0", "3"};
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_entries = new CharSequence[] {
|
||||||
|
"Interpreter",
|
||||||
|
};
|
||||||
|
_entryvalues = new CharSequence[] {"0"};
|
||||||
|
}
|
||||||
|
|
||||||
|
etp.setEntries(_entries);
|
||||||
|
etp.setEntryValues(_entryvalues);
|
||||||
|
etp.setKey("cpupref");
|
||||||
|
etp.setTitle("CPU Core");
|
||||||
|
etp.setSummary("Emulation core to use");
|
||||||
|
|
||||||
|
PreferenceCategory mCategory = (PreferenceCategory) findPreference("cpuprefcat");
|
||||||
|
mCategory.addPreference(etp);
|
||||||
|
VersionCheck mbuffer = new VersionCheck();
|
||||||
|
m_GLVersion = mbuffer.getVersion();
|
||||||
|
m_GLVendor = mbuffer.getVendor();
|
||||||
|
m_GLRenderer = mbuffer.getRenderer();
|
||||||
|
|
||||||
|
boolean mSupportsGLES3 = false;
|
||||||
|
|
||||||
|
if (m_GLVersion.contains("OpenGL ES 3.0")) // 3.0 support
|
||||||
|
mSupportsGLES3 = true;
|
||||||
|
if (!mSupportsGLES3 && m_GLVendor.equals("Qualcomm"))
|
||||||
|
{
|
||||||
|
if (m_GLRenderer.contains("Adreno (TM) 3"))
|
||||||
|
{
|
||||||
|
int mVStart, mVEnd = 0;
|
||||||
|
float mVersion;
|
||||||
|
mVStart = m_GLVersion.indexOf("V@") + 2;
|
||||||
|
for (int a = mVStart; a < m_GLVersion.length(); ++a)
|
||||||
|
if (m_GLVersion.charAt(a) == ' ')
|
||||||
|
{
|
||||||
|
mVEnd = a;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
mVersion = Float.parseFloat(m_GLVersion.substring(mVStart, mVEnd));
|
||||||
|
|
||||||
|
if (mVersion >= 14.0f)
|
||||||
|
mSupportsGLES3 = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mSupportsGLES3)
|
||||||
|
{
|
||||||
|
mCategory = (PreferenceCategory) findPreference("videoprefcat");
|
||||||
|
ListPreference mPref = (ListPreference) findPreference("gpupref");
|
||||||
|
mCategory.removePreference(mPref);
|
||||||
|
|
||||||
|
final ListPreference videobackend = new ListPreference(m_activity);
|
||||||
|
|
||||||
|
_entries = new CharSequence[] {
|
||||||
|
"Software Renderer",
|
||||||
|
};
|
||||||
|
_entryvalues = new CharSequence[] {"Software Renderer"};
|
||||||
|
|
||||||
|
videobackend.setKey("gpupref");
|
||||||
|
videobackend.setTitle("Video Backend");
|
||||||
|
videobackend.setSummary("Video backend to use");
|
||||||
|
|
||||||
|
videobackend.setEntries(_entries);
|
||||||
|
videobackend.setEntryValues(_entryvalues);
|
||||||
|
|
||||||
|
mCategory.addPreference(videobackend);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onAttach(Activity activity) {
|
||||||
|
super.onAttach(activity);
|
||||||
|
|
||||||
|
// This makes sure that the container activity has implemented
|
||||||
|
// the callback interface. If not, it throws an exception
|
||||||
|
try {
|
||||||
|
m_activity = activity;
|
||||||
|
} catch (ClassCastException e) {
|
||||||
|
throw new ClassCastException(activity.toString()
|
||||||
|
+ " must implement OnGameListZeroListener");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user