diff --git a/Source/Android/AndroidManifest.xml b/Source/Android/AndroidManifest.xml index a88597d29c..bbf17fb974 100644 --- a/Source/Android/AndroidManifest.xml +++ b/Source/Android/AndroidManifest.xml @@ -32,8 +32,8 @@ - - + + diff --git a/Source/Android/res/layout/emulation_view.xml b/Source/Android/res/layout/emulation_view.xml index 017e98602e..9dcdf11166 100644 --- a/Source/Android/res/layout/emulation_view.xml +++ b/Source/Android/res/layout/emulation_view.xml @@ -1,5 +1,5 @@ - @@ -11,4 +11,4 @@ android:focusable="false" android:focusableInTouchMode="false"/> - \ No newline at end of file + \ No newline at end of file diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java index 00aabfaf66..5aa1075cde 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java @@ -7,31 +7,23 @@ package org.dolphinemu.dolphinemu; import android.app.Activity; -import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.os.Environment; -import android.util.DisplayMetrics; import android.util.Log; -import android.view.InputDevice; -import android.view.KeyEvent; -import android.view.MotionEvent; -import android.view.WindowManager; import java.io.*; -import java.util.List; import org.dolphinemu.dolphinemu.gamelist.GameListActivity; -import org.dolphinemu.dolphinemu.settings.InputConfigFragment; import org.dolphinemu.dolphinemu.settings.UserPreferences; +/** + * The main activity of this emulator. + * + * @param Main activity. + */ public final class DolphinEmulator extends Activity { - private static boolean Running = false; - - private float screenWidth; - private float screenHeight; - private void CopyAsset(String asset, String output) { InputStream in = null; @@ -62,30 +54,6 @@ public final class DolphinEmulator extends Activity } } - @Override - public void onStop() - { - super.onStop(); - if (Running) - NativeLibrary.StopEmulation(); - } - - @Override - public void onPause() - { - super.onPause(); - if (Running) - NativeLibrary.PauseEmulation(); - } - - @Override - public void onResume() - { - super.onResume(); - if (Running) - NativeLibrary.UnPauseEmulation(); - } - /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) @@ -138,103 +106,4 @@ public final class DolphinEmulator extends Activity UserPreferences.LoadDolphinConfigToPrefs(this); } } - - @Override - public void onActivityResult(int requestCode, int resultCode, Intent data) - { - super.onActivityResult(requestCode, resultCode, data); - - if (resultCode == Activity.RESULT_OK) - { - DisplayMetrics displayMetrics = new DisplayMetrics(); - WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut - wm.getDefaultDisplay().getMetrics(displayMetrics); - screenWidth = displayMetrics.widthPixels; - screenHeight = displayMetrics.heightPixels; - - String FileName = data.getStringExtra("Select"); - this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - NativeLibrary.SetDimensions((int)screenWidth, (int)screenHeight); - NativeLibrary.SetFilename(FileName); - setContentView(R.layout.emulation_view); - Running = true; - } - } - - @Override - public boolean onTouchEvent(MotionEvent event) - { - float X = event.getX(); - float Y = event.getY(); - int Action = event.getActionMasked(); - - // Converts button locations 0 - 1 to OGL screen coords -1.0 - 1.0 - float ScreenX = ((X / screenWidth) * 2.0f) - 1.0f; - float ScreenY = ((Y / screenHeight) * -2.0f) + 1.0f; - - NativeLibrary.onTouchEvent(Action, ScreenX, ScreenY); - - return false; - } - - // Gets button presses - @Override - public boolean dispatchKeyEvent(KeyEvent event) - { - int action = 0; - - // Special catch for the back key - // Currently disabled because stopping and starting emulation is broken. - /* - if (event.getSource() == InputDevice.SOURCE_KEYBOARD - && event.getKeyCode() == KeyEvent.KEYCODE_BACK - && event.getAction() == KeyEvent.ACTION_UP) - { - if (Running) - NativeLibrary.StopEmulation(); - Running = false; - Intent ListIntent = new Intent(this, GameListActivity.class); - startActivityForResult(ListIntent, 1); - return true; - } - */ - - if (Running) - { - switch (event.getAction()) - { - case KeyEvent.ACTION_DOWN: - action = 0; - break; - case KeyEvent.ACTION_UP: - action = 1; - break; - default: - return false; - } - InputDevice input = event.getDevice(); - NativeLibrary.onGamePadEvent(InputConfigFragment.getInputDesc(input), event.getKeyCode(), action); - return true; - } - return false; - } - - @Override - public boolean dispatchGenericMotionEvent(MotionEvent event) - { - if (((event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) == 0) || !Running) - { - return super.dispatchGenericMotionEvent(event); - } - - InputDevice input = event.getDevice(); - List motions = input.getMotionRanges(); - - for (InputDevice.MotionRange range : motions) - { - NativeLibrary.onGamePadMoveEvent(InputConfigFragment.getInputDesc(input), range.getAxis(), event.getAxisValue(range.getAxis())); - } - - return true; - } } \ No newline at end of file diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/EmulationActivity.java b/Source/Android/src/org/dolphinemu/dolphinemu/EmulationActivity.java new file mode 100644 index 0000000000..d388d20485 --- /dev/null +++ b/Source/Android/src/org/dolphinemu/dolphinemu/EmulationActivity.java @@ -0,0 +1,160 @@ +package org.dolphinemu.dolphinemu; + +import java.util.List; + +import org.dolphinemu.dolphinemu.settings.InputConfigFragment; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.util.DisplayMetrics; +import android.view.InputDevice; +import android.view.KeyEvent; +import android.view.MotionEvent; +import android.view.Window; +import android.view.WindowManager; + +/** + * This is the activity where all of the emulation handling happens. + * This activity is responsible for displaying the SurfaceView that we render to. + */ +public final class EmulationActivity extends Activity +{ + private boolean Running; + private float screenWidth; + private float screenHeight; + + @Override + public void onCreate(Bundle savedInstanceState) + { + super.onCreate(savedInstanceState); + + // Retrieve screen dimensions. + DisplayMetrics displayMetrics = new DisplayMetrics(); + WindowManager wm = (WindowManager) getApplicationContext().getSystemService(Context.WINDOW_SERVICE); // the results will be higher than using the activity context object or the getWindowManager() shortcut + wm.getDefaultDisplay().getMetrics(displayMetrics); + this.screenHeight = displayMetrics.heightPixels; + this.screenWidth = displayMetrics.widthPixels; + + // Request window features for the emulation view. + getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + getWindow().requestFeature(Window.FEATURE_NO_TITLE); + getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); + + // Set the native rendering screen width/height. + // Also get the intent passed from the GameList when the game + // was selected. This is so the path of the game can be retrieved + // and set on the native side of the code so the emulator can actually + // load the game. + Intent gameToEmulate = getIntent(); + NativeLibrary.SetDimensions((int)screenWidth, (int)screenHeight); + NativeLibrary.SetFilename(gameToEmulate.getStringExtra("SelectedGame")); + Running = true; + + // Set the emulation window. + setContentView(R.layout.emulation_view); + + } + + @Override + public void onStop() + { + super.onStop(); + if (Running) + NativeLibrary.StopEmulation(); + } + + @Override + public void onPause() + { + super.onPause(); + if (Running) + NativeLibrary.PauseEmulation(); + } + + @Override + public void onResume() + { + super.onResume(); + if (Running) + NativeLibrary.UnPauseEmulation(); + } + + @Override + public boolean onTouchEvent(MotionEvent event) + { + float X = event.getX(); + float Y = event.getY(); + int Action = event.getActionMasked(); + + // Converts button locations 0 - 1 to OGL screen coords -1.0 - 1.0 + float ScreenX = ((X / screenWidth) * 2.0f) - 1.0f; + float ScreenY = ((Y / screenHeight) * -2.0f) + 1.0f; + + NativeLibrary.onTouchEvent(Action, ScreenX, ScreenY); + + return false; + } + + // Gets button presses + @Override + public boolean dispatchKeyEvent(KeyEvent event) + { + int action = 0; + + // Special catch for the back key + // Currently disabled because stopping and starting emulation is broken. + /* + if (event.getSource() == InputDevice.SOURCE_KEYBOARD + && event.getKeyCode() == KeyEvent.KEYCODE_BACK + && event.getAction() == KeyEvent.ACTION_UP) + { + if (Running) + NativeLibrary.StopEmulation(); + Running = false; + Intent ListIntent = new Intent(this, GameListActivity.class); + startActivityForResult(ListIntent, 1); + return true; + } + */ + + if (Running) + { + switch (event.getAction()) + { + case KeyEvent.ACTION_DOWN: + action = 0; + break; + case KeyEvent.ACTION_UP: + action = 1; + break; + default: + return false; + } + InputDevice input = event.getDevice(); + NativeLibrary.onGamePadEvent(InputConfigFragment.getInputDesc(input), event.getKeyCode(), action); + return true; + } + return false; + } + + @Override + public boolean dispatchGenericMotionEvent(MotionEvent event) + { + if (((event.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) == 0) || !Running) + { + return super.dispatchGenericMotionEvent(event); + } + + InputDevice input = event.getDevice(); + List motions = input.getMotionRanges(); + + for (InputDevice.MotionRange range : motions) + { + NativeLibrary.onGamePadMoveEvent(InputConfigFragment.getInputDesc(input), range.getAxis(), event.getAxisValue(range.getAxis())); + } + + return true; + } +} diff --git a/Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListFragment.java b/Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListFragment.java index 9dc6fcba8d..d5739d68ed 100644 --- a/Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListFragment.java +++ b/Source/Android/src/org/dolphinemu/dolphinemu/gamelist/GameListFragment.java @@ -25,6 +25,7 @@ import java.util.HashSet; import java.util.List; import java.util.Set; +import org.dolphinemu.dolphinemu.EmulationActivity; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.R; @@ -132,9 +133,9 @@ public final class GameListFragment extends Fragment { Toast.makeText(mMe, getString(R.string.file_clicked) + o, Toast.LENGTH_SHORT).show(); - Intent intent = new Intent(); - intent.putExtra("Select", o); - mMe.setResult(Activity.RESULT_OK, intent); + Intent intent = new Intent(mMe, EmulationActivity.class); + intent.putExtra("SelectedGame", o); + mMe.startActivity(intent); mMe.finish(); }