summaryrefslogtreecommitdiff
path: root/Source/Android
diff options
context:
space:
mode:
authorLioncash <mathew1800@gmail.com>2013-08-20 19:39:00 -0400
committerLioncash <mathew1800@gmail.com>2013-08-20 19:39:00 -0400
commit00996c8d388cf0164416df3d24775863fd272dbe (patch)
treee786341f91688a89d1c7f36332f6724ca7744fc7 /Source/Android
parenta3a4f212849f824d8b5325412ed7654373bad37c (diff)
[Android] Implement a ViewPager for the settings. Also, move classes into appropriate packages to make things cleaner.
Diffstat (limited to 'Source/Android')
-rw-r--r--Source/Android/AndroidManifest.xml52
-rw-r--r--Source/Android/res/layout/prefs_viewpager.xml6
-rw-r--r--Source/Android/res/values/dimens.xml7
-rw-r--r--Source/Android/res/values/strings.xml15
-rw-r--r--Source/Android/res/xml/cpu_prefs.xml14
-rw-r--r--Source/Android/res/xml/prefs.xml144
-rw-r--r--Source/Android/res/xml/video_prefs.xml127
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java6
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java4
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java226
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowser.java (renamed from Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java)6
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowserAdapter.java (renamed from Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserAdapter.java)6
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowserItem.java (renamed from Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserItem.java)2
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListActivity.java (renamed from Source/Android/src/org/dolphinemu/dolphinemu/GameListActivity.java)22
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListAdapter.java (renamed from Source/Android/src/org/dolphinemu/dolphinemu/GameListAdapter.java)4
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListFragment.java (renamed from Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java)5
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListItem.java (renamed from Source/Android/src/org/dolphinemu/dolphinemu/GameListItem.java)4
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/inputconfig/InputConfigAdapter.java (renamed from Source/Android/src/org/dolphinemu/dolphinemu/InputConfigAdapter.java)4
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/inputconfig/InputConfigFragment.java (renamed from Source/Android/src/org/dolphinemu/dolphinemu/InputConfigFragment.java)5
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/inputconfig/InputConfigItem.java (renamed from Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java)4
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/settings/CPUSettingsFragment.java81
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/settings/PrefsActivity.java146
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/settings/UserPreferences.java (renamed from Source/Android/src/org/dolphinemu/dolphinemu/UserPreferences.java)10
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/settings/VideoSettingsFragment.java202
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/sidemenu/SideMenuAdapter.java (renamed from Source/Android/src/org/dolphinemu/dolphinemu/SideMenuAdapter.java)4
-rw-r--r--Source/Android/src/org/dolphinemu/dolphinemu/sidemenu/SideMenuItem.java (renamed from Source/Android/src/org/dolphinemu/dolphinemu/SideMenuItem.java)2
26 files changed, 687 insertions, 421 deletions
diff --git a/Source/Android/AndroidManifest.xml b/Source/Android/AndroidManifest.xml
index a6918f867b..5744af828c 100644
--- a/Source/Android/AndroidManifest.xml
+++ b/Source/Android/AndroidManifest.xml
@@ -4,45 +4,51 @@
android:versionCode="10"
android:versionName="0.10" >
- <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="14"/>
-
- <uses-feature android:glEsVersion="0x00020000"></uses-feature>
- <uses-feature android:name="android.hardware.screen.landscape" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
-
- <application
+ <uses-sdk
+ android:minSdkVersion="14"
+ android:targetSdkVersion="14" />
+
+ <uses-feature android:glEsVersion="0x00020000" >
+ </uses-feature>
+ <uses-feature android:name="android.hardware.screen.landscape" />
+
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+
+ <application
android:icon="@drawable/launcher"
- android:label="@string/app_name">
+ android:label="@string/app_name" >
<activity
- android:name=".DolphinEmulator"
+ android:name="org.dolphinemu.dolphinemu.DolphinEmulator"
+ android:configChanges="locale|keyboard|keyboardHidden|navigation|fontScale|uiMode"
android:label="@string/app_name"
- android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:screenOrientation="landscape"
- android:configChanges="locale|keyboard|keyboardHidden|navigation|fontScale|uiMode" >
+ android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
+
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
- android:name="org.dolphinemu.dolphinemu.FolderBrowser"
- android:label="@string/app_name"
- android:configChanges="orientation|locale|keyboard|keyboardHidden|navigation|fontScale|uiMode" >
+ android:name="org.dolphinemu.dolphinemu.folderbrowser.FolderBrowser"
+ android:configChanges="orientation|locale|keyboard|keyboardHidden|navigation|fontScale|uiMode"
+ android:label="@string/app_name" >
</activity>
<activity
- android:name=".InputConfigFragment"
- android:label="@string/app_name"
- android:configChanges="orientation|locale|keyboard|keyboardHidden|navigation|fontScale|uiMode" >
+ android:name="org.dolphinemu.dolphinemu.inputconfig.InputConfigFragment"
+ android:configChanges="orientation|locale|keyboard|keyboardHidden|navigation|fontScale|uiMode"
+ android:label="@string/app_name" >
</activity>
- <activity
- android:name=".PrefsFragment" >
+ <activity android:name="org.dolphinemu.dolphinemu.settings.PrefsFragment" >
</activity>
- <activity
- android:name=".GameListActivity" >
+ <activity android:name="org.dolphinemu.dolphinemu.gamelist.GameListActivity" >
+ </activity>
+ <activity android:name="org.dolphinemu.dolphinemu.AboutFragment" >
</activity>
<activity
- android:name=".AboutFragment" >
+ android:name="org.dolphinemu.dolphinemu.settings.PrefsActivity"
+ android:label="@string/settings" >
</activity>
</application>
diff --git a/Source/Android/res/layout/prefs_viewpager.xml b/Source/Android/res/layout/prefs_viewpager.xml
new file mode 100644
index 0000000000..f07fc62c46
--- /dev/null
+++ b/Source/Android/res/layout/prefs_viewpager.xml
@@ -0,0 +1,6 @@
+<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/pager"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".PrefsActivity" />
diff --git a/Source/Android/res/values/dimens.xml b/Source/Android/res/values/dimens.xml
new file mode 100644
index 0000000000..55c1e5908c
--- /dev/null
+++ b/Source/Android/res/values/dimens.xml
@@ -0,0 +1,7 @@
+<resources>
+
+ <!-- Default screen margins, per the Android Design guidelines. -->
+ <dimen name="activity_horizontal_margin">16dp</dimen>
+ <dimen name="activity_vertical_margin">16dp</dimen>
+
+</resources>
diff --git a/Source/Android/res/values/strings.xml b/Source/Android/res/values/strings.xml
index 6ddd255995..009387ff77 100644
--- a/Source/Android/res/values/strings.xml
+++ b/Source/Android/res/values/strings.xml
@@ -3,22 +3,22 @@
<!-- Title of the app -->
<string name="app_name">Dolphin Emulator</string>
-
+
<!-- Navigation-related Strings -->
<string name="drawer_open">Open navigation drawer</string>
<string name="drawer_close">Close navigation drawer</string>
-
+
<!-- About Fragment -->
<string name="build_revision">Build Revision:</string>
<string name="supports_gles3">Supports OpenGL ES 3:</string>
-
+
<!-- Folder Browser -->
<string name="current_dir">Current Dir: </string>
<string name="parent_directory">Parent Directory</string>
<string name="folder">Folder</string>
<string name="file_size">File Size: </string>
<string name="cant_use_compressed_filetypes">Can not use compressed file types</string>
-
+
<!-- Game List Activity -->
<string name="game_list">Game List</string>
<string name="browse_folder">Browse Folder</string>
@@ -28,7 +28,7 @@
<!-- Game List Fragment -->
<string name="file_clicked">File clicked: </string>
-
+
<!-- Input Config Fragment -->
<string name="draw_onscreen_controls">Draw on-screen controls</string>
<string name="button_a">Button A</string>
@@ -51,11 +51,10 @@
<string name="c_stick_right">C Stick Right</string>
<string name="trigger_left">Trigger L</string>
<string name="trigger_right">Trigger R</string>
-
<string name="not_drawing_onscreen_controls">Not drawing on-screen controls</string>
<string name="drawing_onscreen_controls">Drawing on-screen controls</string>
<string name="press_button_to_config">Press button to configure %1$s</string>
-
+
<!-- Prefs Fragment -->
<string name="interpreter">Interpreter</string>
<string name="jit64_recompiler">JIT64 Recompiler</string>
@@ -66,7 +65,6 @@
<string name="emu_core_to_use">Emulation core to use</string>
<string name="dual_core">Dual Core</string>
<string name="on_off">On/Off</string>
-
<string name="video_settings">Video Settings</string>
<string name="software_renderer">Software Renderer</string>
<string name="opengl_es3">OpenGL ES 3</string>
@@ -121,5 +119,6 @@
<string name="no">No</string>
<string name="disabled">Disabled</string>
<string name="other">Other</string>
+
</resources>
diff --git a/Source/Android/res/xml/cpu_prefs.xml b/Source/Android/res/xml/cpu_prefs.xml
new file mode 100644
index 0000000000..adb6fff91f
--- /dev/null
+++ b/Source/Android/res/xml/cpu_prefs.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+ <!-- CPU Settings -->
+ <CheckBoxPreference
+ android:key="dualCorePref"
+ android:summary="@string/on_off"
+ android:title="@string/dual_core" />
+
+ <ListPreference
+ android:key="cpuCorePref"
+ android:summary="@string/emu_core_to_use"
+ android:title="@string/cpu_core" />
+
+</PreferenceScreen> \ No newline at end of file
diff --git a/Source/Android/res/xml/prefs.xml b/Source/Android/res/xml/prefs.xml
deleted file mode 100644
index 89c531f2d0..0000000000
--- a/Source/Android/res/xml/prefs.xml
+++ /dev/null
@@ -1,144 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
-
- <!-- CPU Settings -->
- <PreferenceScreen android:title="@string/cpu_settings">
-
- <CheckBoxPreference
- android:key="dualCorePref"
- android:summary="@string/on_off"
- android:title="@string/dual_core" />
-
- <ListPreference
- android:key="cpuCorePref"
- android:summary="@string/emu_core_to_use"
- android:title="@string/cpu_core" />
-
- </PreferenceScreen>
-
- <!-- Video Settings -->
- <PreferenceScreen android:title="@string/video_settings">
-
- <!-- Video Enhancements -->
- <PreferenceScreen android:title="@string/enhancements">
-
- <ListPreference
- android:entries="@array/internalResolutionEntries"
- android:entryValues="@array/internalResolutionValues"
- android:key="internalResolution"
- android:summary="@string/internal_resolution_descrip"
- android:title="@string/internal_resolution"/>
-
- <ListPreference
- android:entries="@array/anisotropicFilteringEntries"
- android:entryValues="@array/anisotropicFilteringValues"
- android:key="anisotropicFiltering"
- android:summary="@string/anisotropic_filtering_descrip"
- android:title="@string/anisotropic_filtering"/>
-
- <CheckBoxPreference
- android:defaultValue="true"
- android:key="scaledEFBCopy"
- android:summary="@string/scaled_efb_copy_descrip"
- android:title="@string/scaled_efb_copy"/>
-
- <CheckBoxPreference
- android:defaultValue="false"
- android:key="perPixelLighting"
- android:summary="@string/per_pixel_lighting_descrip"
- android:title="@string/per_pixel_lighting"/>
-
- <CheckBoxPreference
- android:defaultValue="false"
- android:key="forceTextureFiltering"
- android:summary="@string/force_texture_filtering_descrip"
- android:title="@string/force_texture_filtering"/>
-
- <CheckBoxPreference
- android:defaultValue="false"
- android:key="disableFog"
- android:summary="@string/disable_fog_descrip"
- android:title="@string/disable_fog"/>
-
- </PreferenceScreen>
-
- <!-- Video Hacks -->
- <PreferenceScreen android:title="@string/hacks">
- <PreferenceCategory android:title="@string/embedded_frame_buffer">
-
- <CheckBoxPreference
- android:defaultValue="false"
- android:key="skipEFBAccess"
- android:summary="@string/skip_efb_access_descrip"
- android:title="@string/skip_efb_access"/>
-
- <CheckBoxPreference
- android:defaultValue="true"
- android:key="ignoreFormatChanges"
- android:summary="@string/ignore_format_changes_descrip"
- android:title="@string/ignore_format_changes"/>
-
- <ListPreference
- android:defaultValue="Texture"
- android:entries="@array/efbCopyMethodEntries"
- android:entryValues="@array/efbCopyMethodValues"
- android:key="efbCopyMethod"
- android:summary="@string/efb_copy_method_descrip"
- android:title="@string/efb_copy_method"/>
-
- </PreferenceCategory>
-
- <!-- Texture Cache -->
- <PreferenceCategory android:title="@string/texture_cache">
- <ListPreference
- android:defaultValue="Low"
- android:entries="@array/textureCacheAccuracyEntries"
- android:entryValues="@array/textureCacheAccuracyValues"
- android:key="textureCacheAccuracy"
- android:summary="@string/texture_cache_accuracy_descrip"
- android:title="@string/texture_cache_accuracy"/>
- </PreferenceCategory>
-
- <!-- External Frame Buffer -->
- <PreferenceCategory android:title="@string/external_frame_buffer">
- <ListPreference
- android:defaultValue="Disabled"
- android:entries="@array/externalFrameBufferEntries"
- android:entryValues="@array/externalFrameBufferValues"
- android:key="externalFrameBuffer"
- android:summary="@string/external_frame_buffer_descrip"
- android:title="@string/external_frame_buffer"/>
- </PreferenceCategory>
-
-
- <!-- Other Hacks -->
- <PreferenceCategory android:title="@string/other">
-
- <CheckBoxPreference
- android:defaultValue="false"
- android:key="cacheDisplayLists"
- android:summary="@string/cache_display_lists_descrip"
- android:title="@string/cache_display_lists"/>
-
- <CheckBoxPreference
- android:defaultValue="false"
- android:key="disableDestinationAlpha"
- android:summary="@string/disable_destination_alpha_descrip"
- android:title="@string/disable_destination_alpha"/>
-
- <CheckBoxPreference
- android:defaultValue="true"
- android:key="fastDepthCalculation"
- android:summary="@string/fast_depth_calculation_descrip"
- android:title="@string/fast_depth_calculation"/>
-
- </PreferenceCategory>
- </PreferenceScreen>
-
- <ListPreference
- android:key="gpuPref"
- android:summary="@string/video_backend_to_use"
- android:title="@string/video_backend" />
-
- </PreferenceScreen>
-</PreferenceScreen> \ No newline at end of file
diff --git a/Source/Android/res/xml/video_prefs.xml b/Source/Android/res/xml/video_prefs.xml
new file mode 100644
index 0000000000..2abd8deabf
--- /dev/null
+++ b/Source/Android/res/xml/video_prefs.xml
@@ -0,0 +1,127 @@
+<?xml version="1.0" encoding="utf-8"?>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <!-- Video Settings -->
+
+
+ <!-- Video Enhancements -->
+ <PreferenceScreen android:title="@string/enhancements">
+
+ <ListPreference
+ android:entries="@array/internalResolutionEntries"
+ android:entryValues="@array/internalResolutionValues"
+ android:key="internalResolution"
+ android:summary="@string/internal_resolution_descrip"
+ android:title="@string/internal_resolution"/>
+
+ <ListPreference
+ android:entries="@array/anisotropicFilteringEntries"
+ android:entryValues="@array/anisotropicFilteringValues"
+ android:key="anisotropicFiltering"
+ android:summary="@string/anisotropic_filtering_descrip"
+ android:title="@string/anisotropic_filtering"/>
+
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:key="scaledEFBCopy"
+ android:summary="@string/scaled_efb_copy_descrip"
+ android:title="@string/scaled_efb_copy"/>
+
+ <CheckBoxPreference
+ android:defaultValue="false"
+ android:key="perPixelLighting"
+ android:summary="@string/per_pixel_lighting_descrip"
+ android:title="@string/per_pixel_lighting"/>
+
+ <CheckBoxPreference
+ android:defaultValue="false"
+ android:key="forceTextureFiltering"
+ android:summary="@string/force_texture_filtering_descrip"
+ android:title="@string/force_texture_filtering"/>
+
+ <CheckBoxPreference
+ android:defaultValue="false"
+ android:key="disableFog"
+ android:summary="@string/disable_fog_descrip"
+ android:title="@string/disable_fog"/>
+
+ </PreferenceScreen>
+
+ <!-- Video Hacks -->
+ <PreferenceScreen android:title="@string/hacks">
+ <PreferenceCategory android:title="@string/embedded_frame_buffer">
+
+ <CheckBoxPreference
+ android:defaultValue="false"
+ android:key="skipEFBAccess"
+ android:summary="@string/skip_efb_access_descrip"
+ android:title="@string/skip_efb_access"/>
+
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:key="ignoreFormatChanges"
+ android:summary="@string/ignore_format_changes_descrip"
+ android:title="@string/ignore_format_changes"/>
+
+ <ListPreference
+ android:defaultValue="Texture"
+ android:entries="@array/efbCopyMethodEntries"
+ android:entryValues="@array/efbCopyMethodValues"
+ android:key="efbCopyMethod"
+ android:summary="@string/efb_copy_method_descrip"
+ android:title="@string/efb_copy_method"/>
+
+ </PreferenceCategory>
+
+ <!-- Texture Cache -->
+ <PreferenceCategory android:title="@string/texture_cache">
+ <ListPreference
+ android:defaultValue="Low"
+ android:entries="@array/textureCacheAccuracyEntries"
+ android:entryValues="@array/textureCacheAccuracyValues"
+ android:key="textureCacheAccuracy"
+ android:summary="@string/texture_cache_accuracy_descrip"
+ android:title="@string/texture_cache_accuracy"/>
+ </PreferenceCategory>
+
+ <!-- External Frame Buffer -->
+ <PreferenceCategory android:title="@string/external_frame_buffer">
+ <ListPreference
+ android:defaultValue="Disabled"
+ android:entries="@array/externalFrameBufferEntries"
+ android:entryValues="@array/externalFrameBufferValues"
+ android:key="externalFrameBuffer"
+ android:summary="@string/external_frame_buffer_descrip"
+ android:title="@string/external_frame_buffer"/>
+ </PreferenceCategory>
+
+
+ <!-- Other Hacks -->
+ <PreferenceCategory android:title="@string/other">
+
+ <CheckBoxPreference
+ android:defaultValue="false"
+ android:key="cacheDisplayLists"
+ android:summary="@string/cache_display_lists_descrip"
+ android:title="@string/cache_display_lists"/>
+
+ <CheckBoxPreference
+ android:defaultValue="false"
+ android:key="disableDestinationAlpha"
+ android:summary="@string/disable_destination_alpha_descrip"
+ android:title="@string/disable_destination_alpha"/>
+
+ <CheckBoxPreference
+ android:defaultValue="true"
+ android:key="fastDepthCalculation"
+ android:summary="@string/fast_depth_calculation_descrip"
+ android:title="@string/fast_depth_calculation"/>
+
+ </PreferenceCategory>
+ </PreferenceScreen>
+
+ <ListPreference
+ android:key="gpuPref"
+ android:summary="@string/video_backend_to_use"
+ android:title="@string/video_backend" />
+</PreferenceScreen> \ No newline at end of file
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java
index 07e36fa459..40e78fc4bf 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/AboutFragment.java
@@ -11,6 +11,10 @@ import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
+import org.dolphinemu.dolphinemu.folderbrowser.FolderBrowserAdapter;
+import org.dolphinemu.dolphinemu.folderbrowser.FolderBrowserItem;
+import org.dolphinemu.dolphinemu.settings.VideoSettingsFragment;
+
/**
* Copyright 2013 Dolphin Emulator Project
* Licensed under GPLv2
@@ -42,7 +46,7 @@ public final class AboutFragment extends Fragment
List<FolderBrowserItem> Input = new ArrayList<FolderBrowserItem>();
Input.add(new FolderBrowserItem(getString(R.string.build_revision), NativeLibrary.GetVersionString(), "", true));
- Input.add(new FolderBrowserItem(getString(R.string.supports_gles3), PrefsFragment.SupportsGLES3() ? yes : no, "", true));
+ Input.add(new FolderBrowserItem(getString(R.string.supports_gles3), VideoSettingsFragment.SupportsGLES3() ? yes : no, "", true));
adapter = new FolderBrowserAdapter(m_activity, R.layout.about_layout, Input);
mMainList.setAdapter(adapter);
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java
index f1abc215d1..3dca1f5fbe 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java
@@ -15,6 +15,10 @@ import android.view.WindowManager;
import java.io.*;
import java.util.List;
+import org.dolphinemu.dolphinemu.gamelist.GameListActivity;
+import org.dolphinemu.dolphinemu.inputconfig.InputConfigFragment;
+import org.dolphinemu.dolphinemu.settings.UserPreferences;
+
public final class DolphinEmulator<MainActivity> extends Activity
{
static private NativeGLSurfaceView GLview = null;
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java
deleted file mode 100644
index f6196c7236..0000000000
--- a/Source/Android/src/org/dolphinemu/dolphinemu/PrefsFragment.java
+++ /dev/null
@@ -1,226 +0,0 @@
-package org.dolphinemu.dolphinemu;
-
-import android.app.Activity;
-import android.os.Build;
-import android.os.Bundle;
-import android.preference.ListPreference;
-import android.preference.PreferenceFragment;
-import javax.microedition.khronos.egl.*;
-import javax.microedition.khronos.opengles.GL10;
-
-//
-// TODO: It would be nice to situate the preferences in a ViewPager.
-// In such a way that the video settings are divided into sections like
-// [General | Enhancements | Hacks]
-//
-// However I do not know how to correctly get ViewPagers to work with PreferenceFragments
-// (at the time of writing), so if anyone else can implement this (AND document it nicely)
-// that would be awesome
-//
-// - Lioncash
-//
-
-/**
- * Copyright 2013 Dolphin Emulator Project
- * Licensed under GPLv2
- * Refer to the license.txt file included.
- */
-public final class PrefsFragment extends PreferenceFragment
-{
- private Activity m_activity;
-
- static 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
- };
- int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
- int[] ctx_attribs = new int[] {
- EGL_CONTEXT_CLIENT_VERSION, 2,
- 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, ctx_attribs);
- 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
- }
- }
-
- static public boolean SupportsGLES3()
- {
- VersionCheck mbuffer = new VersionCheck();
- String m_GLVersion = mbuffer.getVersion();
- String m_GLVendor = mbuffer.getVendor();
- String m_GLRenderer = mbuffer.getRenderer();
-
- boolean mSupportsGLES3 = false;
-
- // Check for OpenGL ES 3 support (General case).
- if (m_GLVersion != null && (m_GLVersion.contains("OpenGL ES 3.0") || m_GLVersion.equals("OpenGL ES 3.0")))
- mSupportsGLES3 = true;
-
- // Checking for OpenGL ES 3 support for certain Qualcomm devices.
- if (!mSupportsGLES3 && m_GLVendor != null && m_GLVendor.equals("Qualcomm"))
- {
- if (m_GLRenderer.contains("Adreno (TM) 3"))
- {
- int mVStart = m_GLVersion.indexOf("V@") + 2;
- int mVEnd = 0;
- float mVersion;
-
- 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;
- }
- }
- return mSupportsGLES3;
- }
-
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
-
- // Load the preferences from an XML resource
- addPreferencesFromResource(R.xml.prefs);
-
- final ListPreference cpuCores = (ListPreference) findPreference("cpuCorePref");
-
- //
- // Set valid emulation cores depending on the CPU architecture
- // that the Android device is running on.
- //
- if (Build.CPU_ABI.contains("x86"))
- {
- cpuCores.setEntries(R.array.emuCoreEntriesX86);
- cpuCores.setEntryValues(R.array.emuCoreValuesX86);
- }
- else if (Build.CPU_ABI.contains("arm"))
- {
- cpuCores.setEntries(R.array.emuCoreEntriesARM);
- cpuCores.setEntryValues(R.array.emuCoreValuesARM);
- }
- else
- {
- cpuCores.setEntries(R.array.emuCoreEntriesOther);
- cpuCores.setEntryValues(R.array.emuCoreValuesOther);
- }
-
- //
- // Setting valid video backends.
- //
- final ListPreference videoBackends = (ListPreference) findPreference("gpuPref");
- final boolean deviceSupportsGLES3 = SupportsGLES3();
-
- if (deviceSupportsGLES3)
- {
- videoBackends.setEntries(R.array.videoBackendEntriesGLES3);
- videoBackends.setEntryValues(R.array.videoBackendValuesGLES3);
- }
- else
- {
- videoBackends.setEntries(R.array.videoBackendEntriesNoGLES3);
- videoBackends.setEntryValues(R.array.videoBackendValuesNoGLES3);
- }
- }
-
- @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");
- }
- }
-
- @Override
- public void onDestroy()
- {
- super.onDestroy();
-
- // When the fragment is done being used, save the settings to the Dolphin ini file.
- UserPreferences.SaveConfigToDolphinIni(m_activity);
- }
-}
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java b/Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowser.java
index bd41c75093..3dc0b4fbb4 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowser.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowser.java
@@ -1,4 +1,4 @@
-package org.dolphinemu.dolphinemu;
+package org.dolphinemu.dolphinemu.folderbrowser;
import android.app.Activity;
import android.app.Fragment;
@@ -14,6 +14,10 @@ import android.widget.Toast;
import java.io.File;
import java.util.*;
+import org.dolphinemu.dolphinemu.NativeLibrary;
+import org.dolphinemu.dolphinemu.R;
+import org.dolphinemu.dolphinemu.gamelist.GameListActivity;
+
public final class FolderBrowser extends Fragment
{
private Activity m_activity;
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserAdapter.java b/Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowserAdapter.java
index f7596600b7..3d8ce2d4b3 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserAdapter.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowserAdapter.java
@@ -1,4 +1,6 @@
-package org.dolphinemu.dolphinemu;
+package org.dolphinemu.dolphinemu.folderbrowser;
+
+import java.util.List;
import android.content.Context;
import android.view.LayoutInflater;
@@ -8,7 +10,7 @@ import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;
-import java.util.List;
+import org.dolphinemu.dolphinemu.R;
public final class FolderBrowserAdapter extends ArrayAdapter<FolderBrowserItem>
{
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserItem.java b/Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowserItem.java
index 5fd9bd5ad1..1184b4889c 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/FolderBrowserItem.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/folderbrowser/FolderBrowserItem.java
@@ -1,4 +1,4 @@
-package org.dolphinemu.dolphinemu;
+package org.dolphinemu.dolphinemu.folderbrowser;
import java.io.File;
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/GameListActivity.java b/Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListActivity.java
index 08736b7360..8e460527ff 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/GameListActivity.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListActivity.java
@@ -1,8 +1,9 @@
-package org.dolphinemu.dolphinemu;
+package org.dolphinemu.dolphinemu.gamelist;
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
+import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
@@ -13,6 +14,17 @@ import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;
+import org.dolphinemu.dolphinemu.AboutFragment;
+import org.dolphinemu.dolphinemu.NativeLibrary;
+import org.dolphinemu.dolphinemu.R;
+import org.dolphinemu.dolphinemu.folderbrowser.FolderBrowser;
+import org.dolphinemu.dolphinemu.inputconfig.InputConfigAdapter;
+import org.dolphinemu.dolphinemu.inputconfig.InputConfigFragment;
+import org.dolphinemu.dolphinemu.inputconfig.InputConfigItem;
+import org.dolphinemu.dolphinemu.settings.PrefsActivity;
+import org.dolphinemu.dolphinemu.sidemenu.SideMenuAdapter;
+import org.dolphinemu.dolphinemu.sidemenu.SideMenuItem;
+
/**
* Copyright 2013 Dolphin Emulator Project
* Licensed under GPLv2
@@ -144,11 +156,9 @@ public final class GameListActivity extends Activity
break;
case 2:
- {
- mCurFragmentNum = 2;
- mCurFragment = new PrefsFragment();
- FragmentManager fragmentManager = getFragmentManager();
- fragmentManager.beginTransaction().replace(R.id.content_frame, mCurFragment).commit();
+ {
+ Intent intent = new Intent(this, PrefsActivity.class);
+ startActivity(intent);
}
break;
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/GameListAdapter.java b/Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListAdapter.java
index d683741c79..1944733723 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/GameListAdapter.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListAdapter.java
@@ -1,4 +1,4 @@
-package org.dolphinemu.dolphinemu;
+package org.dolphinemu.dolphinemu.gamelist;
import android.content.Context;
import android.view.LayoutInflater;
@@ -10,6 +10,8 @@ import android.widget.TextView;
import java.util.List;
+import org.dolphinemu.dolphinemu.R;
+
public final class GameListAdapter extends ArrayAdapter<GameListItem>
{
private final Context c;
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListFragment.java
index 8464eaea9c..945fb64acb 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/GameListFragment.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListFragment.java
@@ -1,4 +1,4 @@
-package org.dolphinemu.dolphinemu;
+package org.dolphinemu.dolphinemu.gamelist;
import android.app.Activity;
import android.app.Fragment;
@@ -19,6 +19,9 @@ import java.util.HashSet;
import java.util.List;
import java.util.Set;
+import org.dolphinemu.dolphinemu.NativeLibrary;
+import org.dolphinemu.dolphinemu.R;
+
/**
* Copyright 2013 Dolphin Emulator Project
* Licensed under GPLv2
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/GameListItem.java b/Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListItem.java
index 10f44f69e4..9634eb5fa1 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/GameListItem.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListItem.java
@@ -1,4 +1,4 @@
-package org.dolphinemu.dolphinemu;
+package org.dolphinemu.dolphinemu.gamelist;
import android.content.Context;
import android.graphics.Bitmap;
@@ -8,6 +8,8 @@ import java.io.File;
import java.io.IOException;
import java.io.InputStream;
+import org.dolphinemu.dolphinemu.NativeLibrary;
+
public final class GameListItem implements Comparable<GameListItem>
{
private String name;
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigAdapter.java b/Source/Android/src/org/dolphinemu/dolphinemu/inputconfig/InputConfigAdapter.java
index 12541b8b37..a02c97c343 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigAdapter.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/inputconfig/InputConfigAdapter.java
@@ -1,4 +1,4 @@
-package org.dolphinemu.dolphinemu;
+package org.dolphinemu.dolphinemu.inputconfig;
import android.content.Context;
import android.view.LayoutInflater;
@@ -9,6 +9,8 @@ import android.widget.TextView;
import java.util.List;
+import org.dolphinemu.dolphinemu.R;
+
/**
* Copyright 2013 Dolphin Emulator Project
* Licensed under GPLv2
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/inputconfig/InputConfigFragment.java
index 530f8b1d3b..00794f3ea0 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigFragment.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/inputconfig/InputConfigFragment.java
@@ -1,4 +1,4 @@
-package org.dolphinemu.dolphinemu;
+package org.dolphinemu.dolphinemu.inputconfig;
import android.app.Activity;
import android.app.Fragment;
@@ -13,6 +13,9 @@ import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
+import org.dolphinemu.dolphinemu.R;
+import org.dolphinemu.dolphinemu.gamelist.GameListActivity;
+
/**
* Copyright 2013 Dolphin Emulator Project
* Licensed under GPLv2
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java b/Source/Android/src/org/dolphinemu/dolphinemu/inputconfig/InputConfigItem.java
index 70e68261ec..71b557dcc3 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/InputConfigItem.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/inputconfig/InputConfigItem.java
@@ -4,7 +4,9 @@
* Refer to the license.txt file included.
*/
-package org.dolphinemu.dolphinemu;
+package org.dolphinemu.dolphinemu.inputconfig;
+
+import org.dolphinemu.dolphinemu.NativeLibrary;
/**
* Represents a controller input item (button, stick, etc).
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/CPUSettingsFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/CPUSettingsFragment.java
new file mode 100644
index 0000000000..a50b094338
--- /dev/null
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/CPUSettingsFragment.java
@@ -0,0 +1,81 @@
+/**
+ * Copyright 2013 Dolphin Emulator Project
+ * Licensed under GPLv2
+ * Refer to the license.txt file included.
+ */
+
+package org.dolphinemu.dolphinemu.settings;
+
+import org.dolphinemu.dolphinemu.R;
+
+import android.app.Activity;
+import android.os.Build;
+import android.os.Bundle;
+import android.preference.ListPreference;
+import android.preference.PreferenceFragment;
+
+/**
+ * Responsible for the loading of the CPU preferences.
+ */
+public final class CPUSettingsFragment extends PreferenceFragment
+{
+ private Activity m_activity;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+
+ // Load the preferences from an XML resource
+ addPreferencesFromResource(R.xml.cpu_prefs);
+
+ final ListPreference cpuCores = (ListPreference) findPreference("cpuCorePref");
+
+ //
+ // Set valid emulation cores depending on the CPU architecture
+ // that the Android device is running on.
+ //
+ if (Build.CPU_ABI.contains("x86"))
+ {
+ cpuCores.setEntries(R.array.emuCoreEntriesX86);
+ cpuCores.setEntryValues(R.array.emuCoreValuesX86);
+ }
+ else if (Build.CPU_ABI.contains("arm"))
+ {
+ cpuCores.setEntries(R.array.emuCoreEntriesARM);
+ cpuCores.setEntryValues(R.array.emuCoreValuesARM);
+ }
+ else
+ {
+ cpuCores.setEntries(R.array.emuCoreEntriesOther);
+ cpuCores.setEntryValues(R.array.emuCoreValuesOther);
+ }
+ }
+
+ @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");
+ }
+ }
+
+ @Override
+ public void onDestroy()
+ {
+ super.onDestroy();
+
+ // When this fragment is destroyed, force the settings to be saved to the ini file.
+ UserPreferences.SaveConfigToDolphinIni(m_activity);
+ }
+}
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/PrefsActivity.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/PrefsActivity.java
new file mode 100644
index 0000000000..8186ffc05e
--- /dev/null
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/PrefsActivity.java
@@ -0,0 +1,146 @@
+/**
+ * Copyright 2013 Dolphin Emulator Project
+ * Licensed under GPLv2
+ * Refer to the license.txt file included.
+ */
+
+package org.dolphinemu.dolphinemu.settings;
+
+import org.dolphinemu.dolphinemu.R;
+
+import android.app.ActionBar;
+import android.app.ActionBar.Tab;
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.FragmentTransaction;
+import android.os.Bundle;
+import android.support.v13.app.FragmentPagerAdapter;
+import android.support.v4.view.ViewPager;
+
+/**
+ * Main activity that manages all of the preference fragments used to display
+ * the settings to the user.
+ */
+public final class PrefsActivity extends Activity implements ActionBar.TabListener
+{
+ /**
+ * The {@link android.support.v4.view.PagerAdapter} that will provide org.dolphinemu.dolphinemu.settings for each of the
+ * sections. We use a {@link android.support.v4.app.FragmentPagerAdapter} derivative, which will
+ * keep every loaded fragment in memory. If this becomes too memory intensive, it may be best to
+ * switch to a {@link android.support.v4.app.FragmentStatePagerAdapter}.
+ */
+ SectionsPagerAdapter mSectionsPagerAdapter;
+
+ /**
+ * The {@link ViewPager} that will host the section contents.
+ */
+ ViewPager mViewPager;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.prefs_viewpager);
+
+ // Set up the action bar.
+ final ActionBar actionBar = getActionBar();
+ actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
+
+ // Create the adapter that will return a fragment for each of the three
+ // primary sections of the app.
+ mSectionsPagerAdapter = new SectionsPagerAdapter(getFragmentManager());
+
+ // Set up the ViewPager with the sections adapter.
+ mViewPager = (ViewPager) findViewById(R.id.pager);
+ mViewPager.setAdapter(mSectionsPagerAdapter);
+
+ // When swiping between different sections, select the corresponding
+ // tab. We can also use ActionBar.Tab#select() to do this if we have
+ // a reference to the Tab.
+ mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener()
+ {
+ @Override
+ public void onPageSelected(int position)
+ {
+ actionBar.setSelectedNavigationItem(position);
+ }
+ } );
+
+ // Create a tab with text corresponding to the page title defined by
+ // the adapter. Also specify this Activity object, which implements
+ // the TabListener interface, as the callback (listener) for when
+ // this tab is selected.
+ actionBar.addTab(actionBar.newTab().setText(R.string.cpu_settings).setTabListener(this));
+ actionBar.addTab(actionBar.newTab().setText(R.string.video_settings).setTabListener(this));
+
+ }
+
+ public void onTabReselected(Tab arg0, FragmentTransaction arg1)
+ {
+ // Do nothing.
+ }
+
+ public void onTabSelected(Tab tab, FragmentTransaction ft)
+ {
+ // When the given tab is selected, switch to the corresponding page in the ViewPager.
+ mViewPager.setCurrentItem(tab.getPosition());
+ }
+
+ public void onTabUnselected(Tab tab, FragmentTransaction ft)
+ {
+ // Do nothing.
+ }
+
+ /**
+ * A {@link FragmentPagerAdapter} that returns a fragment corresponding to one of the
+ * sections/tabs/pages.
+ */
+ public class SectionsPagerAdapter extends FragmentPagerAdapter
+ {
+
+ public SectionsPagerAdapter(FragmentManager fm)
+ {
+ super(fm);
+ }
+
+ @Override
+ public Fragment getItem(int position)
+ {
+ switch(position)
+ {
+ case 0:
+ return new CPUSettingsFragment();
+
+ case 1:
+ return new VideoSettingsFragment();
+
+ default: // Should never happen.
+ return null;
+ }
+ }
+
+ @Override
+ public int getCount()
+ {
+ // Show total pages.
+ return 2;
+ }
+
+ @Override
+ public CharSequence getPageTitle(int position)
+ {
+ switch(position)
+ {
+ case 0:
+ return getString(R.string.cpu_settings).toUpperCase();
+
+ case 1:
+ return getString(R.string.video_settings).toUpperCase();
+
+ default: // Should never happen.
+ return null;
+ }
+ }
+ }
+}
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/UserPreferences.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/UserPreferences.java
index 80e8b9dfdc..0bf8535492 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/UserPreferences.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/UserPreferences.java
@@ -1,4 +1,12 @@
-package org.dolphinemu.dolphinemu;
+/**
+ * Copyright 2013 Dolphin Emulator Project
+ * Licensed under GPLv2
+ * Refer to the license.txt file included.
+ */
+
+package org.dolphinemu.dolphinemu.settings;
+
+import org.dolphinemu.dolphinemu.NativeLibrary;
import android.content.Context;
import android.content.SharedPreferences;
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/settings/VideoSettingsFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/settings/VideoSettingsFragment.java
new file mode 100644
index 0000000000..fcb04134ad
--- /dev/null
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/settings/VideoSettingsFragment.java
@@ -0,0 +1,202 @@
+/**
+ * Copyright 2013 Dolphin Emulator Project
+ * Licensed under GPLv2
+ * Refer to the license.txt file included.
+ */
+
+package org.dolphinemu.dolphinemu.settings;
+
+import javax.microedition.khronos.egl.EGL10;
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.egl.EGLContext;
+import javax.microedition.khronos.egl.EGLDisplay;
+import javax.microedition.khronos.egl.EGLSurface;
+import javax.microedition.khronos.opengles.GL10;
+
+import org.dolphinemu.dolphinemu.R;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.preference.ListPreference;
+import android.preference.PreferenceFragment;
+
+/**
+ * Responsible for handling the loading of the video preferences.
+ */
+public final class VideoSettingsFragment extends PreferenceFragment
+{
+ private Activity m_activity;
+
+ static 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
+ };
+ int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
+ int[] ctx_attribs = new int[] {
+ EGL_CONTEXT_CLIENT_VERSION, 2,
+ 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, ctx_attribs);
+ 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
+ }
+ }
+
+ static public boolean SupportsGLES3()
+ {
+ VersionCheck mbuffer = new VersionCheck();
+ String m_GLVersion = mbuffer.getVersion();
+ String m_GLVendor = mbuffer.getVendor();
+ String m_GLRenderer = mbuffer.getRenderer();
+
+ boolean mSupportsGLES3 = false;
+
+ // Check for OpenGL ES 3 support (General case).
+ if (m_GLVersion != null && (m_GLVersion.contains("OpenGL ES 3.0") || m_GLVersion.equals("OpenGL ES 3.0")))
+ mSupportsGLES3 = true;
+
+ // Checking for OpenGL ES 3 support for certain Qualcomm devices.
+ if (!mSupportsGLES3 && m_GLVendor != null && m_GLVendor.equals("Qualcomm"))
+ {
+ if (m_GLRenderer.contains("Adreno (TM) 3"))
+ {
+ int mVStart = m_GLVersion.indexOf("V@") + 2;
+ int mVEnd = 0;
+ float mVersion;
+
+ 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;
+ }
+ }
+ return mSupportsGLES3;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+
+ // Load the preferences from an XML resource
+ addPreferencesFromResource(R.xml.video_prefs);
+
+ //
+ // Setting valid video backends.
+ //
+ final ListPreference videoBackends = (ListPreference) findPreference("gpuPref");
+ final boolean deviceSupportsGLES3 = SupportsGLES3();
+
+ if (deviceSupportsGLES3)
+ {
+ videoBackends.setEntries(R.array.videoBackendEntriesGLES3);
+ videoBackends.setEntryValues(R.array.videoBackendValuesGLES3);
+ }
+ else
+ {
+ videoBackends.setEntries(R.array.videoBackendEntriesNoGLES3);
+ videoBackends.setEntryValues(R.array.videoBackendValuesNoGLES3);
+ }
+ }
+
+ @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");
+ }
+ }
+
+ @Override
+ public void onDestroy()
+ {
+ super.onDestroy();
+
+ // When the fragment is done being used, save the settings to the Dolphin ini file.
+ UserPreferences.SaveConfigToDolphinIni(m_activity);
+ }
+}
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/SideMenuAdapter.java b/Source/Android/src/org/dolphinemu/dolphinemu/sidemenu/SideMenuAdapter.java
index 11c071b026..4d4816e355 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/SideMenuAdapter.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/sidemenu/SideMenuAdapter.java
@@ -1,4 +1,4 @@
-package org.dolphinemu.dolphinemu;
+package org.dolphinemu.dolphinemu.sidemenu;
import android.content.Context;
import android.view.LayoutInflater;
@@ -9,6 +9,8 @@ import android.widget.TextView;
import java.util.List;
+import org.dolphinemu.dolphinemu.R;
+
public final class SideMenuAdapter extends ArrayAdapter<SideMenuItem>
{
private final Context c;
diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/SideMenuItem.java b/Source/Android/src/org/dolphinemu/dolphinemu/sidemenu/SideMenuItem.java
index 51ebc93c19..2b780dcbb2 100644
--- a/Source/Android/src/org/dolphinemu/dolphinemu/SideMenuItem.java
+++ b/Source/Android/src/org/dolphinemu/dolphinemu/sidemenu/SideMenuItem.java
@@ -4,7 +4,7 @@
* Refer to the license.txt file included.
*/
-package org.dolphinemu.dolphinemu;
+package org.dolphinemu.dolphinemu.sidemenu;
/**