Mercurial > repos > blastem
annotate android/src/org/libsdl/app/SDLActivity.java @ 1337:d092c15246a3
Initial stab at horizontal border when VDP test register layer selection is in effect for H40. Extended horizontal borders in Titancade scene and ninja escape scene mostly correct now
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 29 Apr 2017 16:51:57 -0700 |
parents | 0e5f9d6135be |
children | 78abbabfd58d |
rev | line source |
---|---|
856
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1 package org.libsdl.app; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
2 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
3 import java.util.ArrayList; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
4 import java.util.Arrays; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
5 import java.util.Collections; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
6 import java.util.Comparator; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
7 import java.util.List; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
8 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
9 import android.app.*; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
10 import android.content.*; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
11 import android.view.*; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
12 import android.view.inputmethod.BaseInputConnection; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
13 import android.view.inputmethod.EditorInfo; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
14 import android.view.inputmethod.InputConnection; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
15 import android.view.inputmethod.InputMethodManager; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
16 import android.widget.AbsoluteLayout; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
17 import android.os.*; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
18 import android.util.Log; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
19 import android.graphics.*; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
20 import android.media.*; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
21 import android.hardware.*; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
22 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
23 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
24 /** |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
25 SDL Activity |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
26 */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
27 public class SDLActivity extends Activity { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
28 private static final String TAG = "SDL"; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
29 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
30 // Keep track of the paused state |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
31 public static boolean mIsPaused, mIsSurfaceReady, mHasFocus; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
32 public static boolean mExitCalledFromJava; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
33 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
34 // Main components |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
35 protected static SDLActivity mSingleton; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
36 protected static SDLSurface mSurface; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
37 protected static View mTextEdit; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
38 protected static ViewGroup mLayout; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
39 protected static SDLJoystickHandler mJoystickHandler; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
40 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
41 // This is what SDL runs in. It invokes SDL_main(), eventually |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
42 protected static Thread mSDLThread; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
43 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
44 // Audio |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
45 protected static AudioTrack mAudioTrack; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
46 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
47 // Load the .so |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
48 static { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
49 System.loadLibrary("SDL2"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
50 //System.loadLibrary("SDL2_image"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
51 //System.loadLibrary("SDL2_mixer"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
52 //System.loadLibrary("SDL2_net"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
53 //System.loadLibrary("SDL2_ttf"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
54 System.loadLibrary("main"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
55 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
56 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
57 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
58 public static void initialize() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
59 // The static nature of the singleton and Android quirkyness force us to initialize everything here |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
60 // Otherwise, when exiting the app and returning to it, these variables *keep* their pre exit values |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
61 mSingleton = null; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
62 mSurface = null; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
63 mTextEdit = null; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
64 mLayout = null; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
65 mJoystickHandler = null; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
66 mSDLThread = null; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
67 mAudioTrack = null; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
68 mExitCalledFromJava = false; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
69 mIsPaused = false; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
70 mIsSurfaceReady = false; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
71 mHasFocus = true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
72 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
73 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
74 // Setup |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
75 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
76 protected void onCreate(Bundle savedInstanceState) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
77 Log.v("SDL", "onCreate():" + mSingleton); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
78 super.onCreate(savedInstanceState); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
79 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
80 SDLActivity.initialize(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
81 // So we can call stuff from static callbacks |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
82 mSingleton = this; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
83 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
84 // Set up the surface |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
85 mSurface = new SDLSurface(getApplication()); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
86 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
87 if(Build.VERSION.SDK_INT >= 12) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
88 mJoystickHandler = new SDLJoystickHandler_API12(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
89 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
90 else { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
91 mJoystickHandler = new SDLJoystickHandler(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
92 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
93 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
94 mLayout = new AbsoluteLayout(this); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
95 mLayout.addView(mSurface); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
96 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
97 setContentView(mLayout); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
98 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
99 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
100 // Events |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
101 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
102 protected void onPause() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
103 Log.v("SDL", "onPause()"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
104 super.onPause(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
105 SDLActivity.handlePause(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
106 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
107 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
108 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
109 protected void onResume() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
110 Log.v("SDL", "onResume()"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
111 super.onResume(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
112 SDLActivity.handleResume(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
113 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
114 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
115 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
116 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
117 public void onWindowFocusChanged(boolean hasFocus) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
118 super.onWindowFocusChanged(hasFocus); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
119 Log.v("SDL", "onWindowFocusChanged(): " + hasFocus); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
120 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
121 SDLActivity.mHasFocus = hasFocus; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
122 if (hasFocus) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
123 SDLActivity.handleResume(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
124 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
125 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
126 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
127 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
128 public void onLowMemory() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
129 Log.v("SDL", "onLowMemory()"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
130 super.onLowMemory(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
131 SDLActivity.nativeLowMemory(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
132 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
133 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
134 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
135 protected void onDestroy() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
136 Log.v("SDL", "onDestroy()"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
137 // Send a quit message to the application |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
138 SDLActivity.mExitCalledFromJava = true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
139 SDLActivity.nativeQuit(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
140 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
141 // Now wait for the SDL thread to quit |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
142 if (SDLActivity.mSDLThread != null) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
143 try { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
144 SDLActivity.mSDLThread.join(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
145 } catch(Exception e) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
146 Log.v("SDL", "Problem stopping thread: " + e); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
147 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
148 SDLActivity.mSDLThread = null; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
149 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
150 //Log.v("SDL", "Finished waiting for SDL thread"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
151 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
152 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
153 super.onDestroy(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
154 // Reset everything in case the user re opens the app |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
155 SDLActivity.initialize(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
156 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
157 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
158 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
159 public boolean dispatchKeyEvent(KeyEvent event) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
160 int keyCode = event.getKeyCode(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
161 // Ignore certain special keys so they're handled by Android |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
162 if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
163 keyCode == KeyEvent.KEYCODE_VOLUME_UP || |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
164 keyCode == KeyEvent.KEYCODE_CAMERA || |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
165 keyCode == 168 || /* API 11: KeyEvent.KEYCODE_ZOOM_IN */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
166 keyCode == 169 /* API 11: KeyEvent.KEYCODE_ZOOM_OUT */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
167 ) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
168 return false; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
169 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
170 return super.dispatchKeyEvent(event); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
171 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
172 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
173 /** Called by onPause or surfaceDestroyed. Even if surfaceDestroyed |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
174 * is the first to be called, mIsSurfaceReady should still be set |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
175 * to 'true' during the call to onPause (in a usual scenario). |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
176 */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
177 public static void handlePause() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
178 if (!SDLActivity.mIsPaused && SDLActivity.mIsSurfaceReady) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
179 SDLActivity.mIsPaused = true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
180 SDLActivity.nativePause(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
181 mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, false); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
182 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
183 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
184 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
185 /** Called by onResume or surfaceCreated. An actual resume should be done only when the surface is ready. |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
186 * Note: Some Android variants may send multiple surfaceChanged events, so we don't need to resume |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
187 * every time we get one of those events, only if it comes after surfaceDestroyed |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
188 */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
189 public static void handleResume() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
190 if (SDLActivity.mIsPaused && SDLActivity.mIsSurfaceReady && SDLActivity.mHasFocus) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
191 SDLActivity.mIsPaused = false; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
192 SDLActivity.nativeResume(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
193 mSurface.enableSensor(Sensor.TYPE_ACCELEROMETER, true); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
194 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
195 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
196 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
197 /* The native thread has finished */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
198 public static void handleNativeExit() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
199 SDLActivity.mSDLThread = null; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
200 mSingleton.finish(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
201 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
202 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
203 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
204 // Messages from the SDLMain thread |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
205 static final int COMMAND_CHANGE_TITLE = 1; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
206 static final int COMMAND_UNUSED = 2; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
207 static final int COMMAND_TEXTEDIT_HIDE = 3; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
208 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
209 protected static final int COMMAND_USER = 0x8000; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
210 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
211 /** |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
212 * This method is called by SDL if SDL did not handle a message itself. |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
213 * This happens if a received message contains an unsupported command. |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
214 * Method can be overwritten to handle Messages in a different class. |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
215 * @param command the command of the message. |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
216 * @param param the parameter of the message. May be null. |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
217 * @return if the message was handled in overridden method. |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
218 */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
219 protected boolean onUnhandledMessage(int command, Object param) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
220 return false; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
221 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
222 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
223 /** |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
224 * A Handler class for Messages from native SDL applications. |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
225 * It uses current Activities as target (e.g. for the title). |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
226 * static to prevent implicit references to enclosing object. |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
227 */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
228 protected static class SDLCommandHandler extends Handler { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
229 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
230 public void handleMessage(Message msg) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
231 Context context = getContext(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
232 if (context == null) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
233 Log.e(TAG, "error handling message, getContext() returned null"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
234 return; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
235 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
236 switch (msg.arg1) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
237 case COMMAND_CHANGE_TITLE: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
238 if (context instanceof Activity) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
239 ((Activity) context).setTitle((String)msg.obj); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
240 } else { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
241 Log.e(TAG, "error handling message, getContext() returned no Activity"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
242 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
243 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
244 case COMMAND_TEXTEDIT_HIDE: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
245 if (mTextEdit != null) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
246 mTextEdit.setVisibility(View.GONE); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
247 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
248 InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
249 imm.hideSoftInputFromWindow(mTextEdit.getWindowToken(), 0); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
250 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
251 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
252 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
253 default: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
254 if ((context instanceof SDLActivity) && !((SDLActivity) context).onUnhandledMessage(msg.arg1, msg.obj)) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
255 Log.e(TAG, "error handling message, command is " + msg.arg1); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
256 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
257 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
258 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
259 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
260 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
261 // Handler for the messages |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
262 Handler commandHandler = new SDLCommandHandler(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
263 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
264 // Send a message from the SDLMain thread |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
265 boolean sendCommand(int command, Object data) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
266 Message msg = commandHandler.obtainMessage(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
267 msg.arg1 = command; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
268 msg.obj = data; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
269 return commandHandler.sendMessage(msg); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
270 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
271 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
272 // C functions we call |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
273 public static native void nativeInit(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
274 public static native void nativeLowMemory(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
275 public static native void nativeQuit(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
276 public static native void nativePause(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
277 public static native void nativeResume(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
278 public static native void onNativeResize(int x, int y, int format); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
279 public static native int onNativePadDown(int device_id, int keycode); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
280 public static native int onNativePadUp(int device_id, int keycode); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
281 public static native void onNativeJoy(int device_id, int axis, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
282 float value); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
283 public static native void onNativeHat(int device_id, int hat_id, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
284 int x, int y); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
285 public static native void onNativeKeyDown(int keycode); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
286 public static native void onNativeKeyUp(int keycode); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
287 public static native void onNativeKeyboardFocusLost(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
288 public static native void onNativeTouch(int touchDevId, int pointerFingerId, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
289 int action, float x, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
290 float y, float p); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
291 public static native void onNativeAccel(float x, float y, float z); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
292 public static native void onNativeSurfaceChanged(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
293 public static native void onNativeSurfaceDestroyed(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
294 public static native void nativeFlipBuffers(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
295 public static native int nativeAddJoystick(int device_id, String name, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
296 int is_accelerometer, int nbuttons, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
297 int naxes, int nhats, int nballs); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
298 public static native int nativeRemoveJoystick(int device_id); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
299 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
300 public static void flipBuffers() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
301 SDLActivity.nativeFlipBuffers(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
302 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
303 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
304 public static boolean setActivityTitle(String title) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
305 // Called from SDLMain() thread and can't directly affect the view |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
306 return mSingleton.sendCommand(COMMAND_CHANGE_TITLE, title); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
307 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
308 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
309 public static boolean sendMessage(int command, int param) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
310 return mSingleton.sendCommand(command, Integer.valueOf(param)); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
311 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
312 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
313 public static Context getContext() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
314 return mSingleton; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
315 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
316 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
317 /** |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
318 * @return result of getSystemService(name) but executed on UI thread. |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
319 */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
320 public Object getSystemServiceFromUiThread(final String name) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
321 final Object lock = new Object(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
322 final Object[] results = new Object[2]; // array for writable variables |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
323 synchronized (lock) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
324 runOnUiThread(new Runnable() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
325 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
326 public void run() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
327 synchronized (lock) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
328 results[0] = getSystemService(name); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
329 results[1] = Boolean.TRUE; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
330 lock.notify(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
331 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
332 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
333 }); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
334 if (results[1] == null) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
335 try { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
336 lock.wait(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
337 } catch (InterruptedException ex) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
338 ex.printStackTrace(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
339 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
340 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
341 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
342 return results[0]; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
343 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
344 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
345 static class ShowTextInputTask implements Runnable { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
346 /* |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
347 * This is used to regulate the pan&scan method to have some offset from |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
348 * the bottom edge of the input region and the top edge of an input |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
349 * method (soft keyboard) |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
350 */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
351 static final int HEIGHT_PADDING = 15; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
352 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
353 public int x, y, w, h; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
354 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
355 public ShowTextInputTask(int x, int y, int w, int h) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
356 this.x = x; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
357 this.y = y; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
358 this.w = w; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
359 this.h = h; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
360 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
361 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
362 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
363 public void run() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
364 AbsoluteLayout.LayoutParams params = new AbsoluteLayout.LayoutParams( |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
365 w, h + HEIGHT_PADDING, x, y); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
366 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
367 if (mTextEdit == null) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
368 mTextEdit = new DummyEdit(getContext()); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
369 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
370 mLayout.addView(mTextEdit, params); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
371 } else { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
372 mTextEdit.setLayoutParams(params); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
373 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
374 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
375 mTextEdit.setVisibility(View.VISIBLE); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
376 mTextEdit.requestFocus(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
377 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
378 InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
379 imm.showSoftInput(mTextEdit, 0); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
380 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
381 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
382 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
383 public static boolean showTextInput(int x, int y, int w, int h) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
384 // Transfer the task to the main thread as a Runnable |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
385 return mSingleton.commandHandler.post(new ShowTextInputTask(x, y, w, h)); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
386 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
387 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
388 public static Surface getNativeSurface() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
389 return SDLActivity.mSurface.getNativeSurface(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
390 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
391 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
392 // Audio |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
393 public static int audioInit(int sampleRate, boolean is16Bit, boolean isStereo, int desiredFrames) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
394 int channelConfig = isStereo ? AudioFormat.CHANNEL_CONFIGURATION_STEREO : AudioFormat.CHANNEL_CONFIGURATION_MONO; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
395 int audioFormat = is16Bit ? AudioFormat.ENCODING_PCM_16BIT : AudioFormat.ENCODING_PCM_8BIT; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
396 int frameSize = (isStereo ? 2 : 1) * (is16Bit ? 2 : 1); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
397 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
398 Log.v("SDL", "SDL audio: wanted " + (isStereo ? "stereo" : "mono") + " " + (is16Bit ? "16-bit" : "8-bit") + " " + (sampleRate / 1000f) + "kHz, " + desiredFrames + " frames buffer"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
399 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
400 // Let the user pick a larger buffer if they really want -- but ye |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
401 // gods they probably shouldn't, the minimums are horrifyingly high |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
402 // latency already |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
403 desiredFrames = Math.max(desiredFrames, (AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat) + frameSize - 1) / frameSize); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
404 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
405 if (mAudioTrack == null) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
406 mAudioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
407 channelConfig, audioFormat, desiredFrames * frameSize, AudioTrack.MODE_STREAM); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
408 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
409 // Instantiating AudioTrack can "succeed" without an exception and the track may still be invalid |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
410 // Ref: https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/media/java/android/media/AudioTrack.java |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
411 // Ref: http://developer.android.com/reference/android/media/AudioTrack.html#getState() |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
412 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
413 if (mAudioTrack.getState() != AudioTrack.STATE_INITIALIZED) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
414 Log.e("SDL", "Failed during initialization of Audio Track"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
415 mAudioTrack = null; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
416 return -1; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
417 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
418 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
419 mAudioTrack.play(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
420 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
421 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
422 Log.v("SDL", "SDL audio: got " + ((mAudioTrack.getChannelCount() >= 2) ? "stereo" : "mono") + " " + ((mAudioTrack.getAudioFormat() == AudioFormat.ENCODING_PCM_16BIT) ? "16-bit" : "8-bit") + " " + (mAudioTrack.getSampleRate() / 1000f) + "kHz, " + desiredFrames + " frames buffer"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
423 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
424 return 0; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
425 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
426 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
427 public static void audioWriteShortBuffer(short[] buffer) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
428 for (int i = 0; i < buffer.length; ) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
429 int result = mAudioTrack.write(buffer, i, buffer.length - i); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
430 if (result > 0) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
431 i += result; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
432 } else if (result == 0) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
433 try { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
434 Thread.sleep(1); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
435 } catch(InterruptedException e) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
436 // Nom nom |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
437 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
438 } else { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
439 Log.w("SDL", "SDL audio: error return from write(short)"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
440 return; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
441 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
442 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
443 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
444 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
445 public static void audioWriteByteBuffer(byte[] buffer) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
446 for (int i = 0; i < buffer.length; ) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
447 int result = mAudioTrack.write(buffer, i, buffer.length - i); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
448 if (result > 0) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
449 i += result; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
450 } else if (result == 0) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
451 try { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
452 Thread.sleep(1); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
453 } catch(InterruptedException e) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
454 // Nom nom |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
455 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
456 } else { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
457 Log.w("SDL", "SDL audio: error return from write(byte)"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
458 return; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
459 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
460 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
461 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
462 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
463 public static void audioQuit() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
464 if (mAudioTrack != null) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
465 mAudioTrack.stop(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
466 mAudioTrack = null; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
467 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
468 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
469 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
470 // Input |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
471 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
472 /** |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
473 * @return an array which may be empty but is never null. |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
474 */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
475 public static int[] inputGetInputDeviceIds(int sources) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
476 int[] ids = InputDevice.getDeviceIds(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
477 int[] filtered = new int[ids.length]; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
478 int used = 0; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
479 for (int i = 0; i < ids.length; ++i) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
480 InputDevice device = InputDevice.getDevice(ids[i]); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
481 if ((device != null) && ((device.getSources() & sources) != 0)) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
482 filtered[used++] = device.getId(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
483 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
484 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
485 return Arrays.copyOf(filtered, used); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
486 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
487 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
488 // Joystick glue code, just a series of stubs that redirect to the SDLJoystickHandler instance |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
489 public static boolean handleJoystickMotionEvent(MotionEvent event) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
490 return mJoystickHandler.handleMotionEvent(event); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
491 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
492 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
493 public static void pollInputDevices() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
494 if (SDLActivity.mSDLThread != null) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
495 mJoystickHandler.pollInputDevices(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
496 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
497 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
498 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
499 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
500 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
501 /** |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
502 Simple nativeInit() runnable |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
503 */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
504 class SDLMain implements Runnable { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
505 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
506 public void run() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
507 // Runs SDL_main() |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
508 SDLActivity.nativeInit(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
509 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
510 //Log.v("SDL", "SDL thread terminated"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
511 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
512 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
513 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
514 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
515 /** |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
516 SDLSurface. This is what we draw on, so we need to know when it's created |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
517 in order to do anything useful. |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
518 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
519 Because of this, that's where we set up the SDL thread |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
520 */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
521 class SDLSurface extends SurfaceView implements SurfaceHolder.Callback, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
522 View.OnKeyListener, View.OnTouchListener, SensorEventListener { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
523 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
524 // Sensors |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
525 protected static SensorManager mSensorManager; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
526 protected static Display mDisplay; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
527 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
528 // Keep track of the surface size to normalize touch events |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
529 protected static float mWidth, mHeight; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
530 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
531 // Startup |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
532 public SDLSurface(Context context) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
533 super(context); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
534 getHolder().addCallback(this); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
535 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
536 setFocusable(true); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
537 setFocusableInTouchMode(true); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
538 requestFocus(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
539 setOnKeyListener(this); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
540 setOnTouchListener(this); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
541 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
542 mDisplay = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
543 mSensorManager = (SensorManager)context.getSystemService(Context.SENSOR_SERVICE); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
544 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
545 if(Build.VERSION.SDK_INT >= 12) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
546 setOnGenericMotionListener(new SDLGenericMotionListener_API12()); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
547 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
548 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
549 // Some arbitrary defaults to avoid a potential division by zero |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
550 mWidth = 1.0f; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
551 mHeight = 1.0f; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
552 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
553 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
554 public Surface getNativeSurface() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
555 return getHolder().getSurface(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
556 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
557 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
558 // Called when we have a valid drawing surface |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
559 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
560 public void surfaceCreated(SurfaceHolder holder) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
561 Log.v("SDL", "surfaceCreated()"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
562 holder.setType(SurfaceHolder.SURFACE_TYPE_GPU); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
563 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
564 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
565 // Called when we lose the surface |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
566 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
567 public void surfaceDestroyed(SurfaceHolder holder) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
568 Log.v("SDL", "surfaceDestroyed()"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
569 // Call this *before* setting mIsSurfaceReady to 'false' |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
570 SDLActivity.handlePause(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
571 SDLActivity.mIsSurfaceReady = false; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
572 SDLActivity.onNativeSurfaceDestroyed(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
573 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
574 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
575 // Called when the surface is resized |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
576 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
577 public void surfaceChanged(SurfaceHolder holder, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
578 int format, int width, int height) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
579 Log.v("SDL", "surfaceChanged()"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
580 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
581 int sdlFormat = 0x15151002; // SDL_PIXELFORMAT_RGB565 by default |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
582 switch (format) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
583 case PixelFormat.A_8: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
584 Log.v("SDL", "pixel format A_8"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
585 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
586 case PixelFormat.LA_88: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
587 Log.v("SDL", "pixel format LA_88"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
588 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
589 case PixelFormat.L_8: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
590 Log.v("SDL", "pixel format L_8"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
591 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
592 case PixelFormat.RGBA_4444: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
593 Log.v("SDL", "pixel format RGBA_4444"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
594 sdlFormat = 0x15421002; // SDL_PIXELFORMAT_RGBA4444 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
595 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
596 case PixelFormat.RGBA_5551: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
597 Log.v("SDL", "pixel format RGBA_5551"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
598 sdlFormat = 0x15441002; // SDL_PIXELFORMAT_RGBA5551 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
599 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
600 case PixelFormat.RGBA_8888: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
601 Log.v("SDL", "pixel format RGBA_8888"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
602 sdlFormat = 0x16462004; // SDL_PIXELFORMAT_RGBA8888 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
603 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
604 case PixelFormat.RGBX_8888: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
605 Log.v("SDL", "pixel format RGBX_8888"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
606 sdlFormat = 0x16261804; // SDL_PIXELFORMAT_RGBX8888 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
607 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
608 case PixelFormat.RGB_332: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
609 Log.v("SDL", "pixel format RGB_332"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
610 sdlFormat = 0x14110801; // SDL_PIXELFORMAT_RGB332 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
611 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
612 case PixelFormat.RGB_565: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
613 Log.v("SDL", "pixel format RGB_565"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
614 sdlFormat = 0x15151002; // SDL_PIXELFORMAT_RGB565 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
615 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
616 case PixelFormat.RGB_888: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
617 Log.v("SDL", "pixel format RGB_888"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
618 // Not sure this is right, maybe SDL_PIXELFORMAT_RGB24 instead? |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
619 sdlFormat = 0x16161804; // SDL_PIXELFORMAT_RGB888 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
620 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
621 default: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
622 Log.v("SDL", "pixel format unknown " + format); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
623 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
624 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
625 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
626 mWidth = width; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
627 mHeight = height; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
628 SDLActivity.onNativeResize(width, height, sdlFormat); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
629 Log.v("SDL", "Window size:" + width + "x"+height); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
630 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
631 // Set mIsSurfaceReady to 'true' *before* making a call to handleResume |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
632 SDLActivity.mIsSurfaceReady = true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
633 SDLActivity.onNativeSurfaceChanged(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
634 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
635 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
636 if (SDLActivity.mSDLThread == null) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
637 // This is the entry point to the C app. |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
638 // Start up the C app thread and enable sensor input for the first time |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
639 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
640 SDLActivity.mSDLThread = new Thread(new SDLMain(), "SDLThread"); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
641 enableSensor(Sensor.TYPE_ACCELEROMETER, true); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
642 SDLActivity.mSDLThread.start(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
643 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
644 // Set up a listener thread to catch when the native thread ends |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
645 new Thread(new Runnable(){ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
646 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
647 public void run(){ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
648 try { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
649 SDLActivity.mSDLThread.join(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
650 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
651 catch(Exception e){} |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
652 finally{ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
653 // Native thread has finished |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
654 if (! SDLActivity.mExitCalledFromJava) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
655 SDLActivity.handleNativeExit(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
656 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
657 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
658 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
659 }).start(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
660 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
661 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
662 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
663 // unused |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
664 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
665 public void onDraw(Canvas canvas) {} |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
666 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
667 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
668 // Key events |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
669 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
670 public boolean onKey(View v, int keyCode, KeyEvent event) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
671 // Dispatch the different events depending on where they come from |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
672 // Some SOURCE_DPAD or SOURCE_GAMEPAD are also SOURCE_KEYBOARD |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
673 // So, we try to process them as DPAD or GAMEPAD events first, if that fails we try them as KEYBOARD |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
674 |
903
0e5f9d6135be
Make nexus player remote useable as a controller for games that only require a dpad + start + c. Use warning() instead of fprintf(stder,...) in io.c
Michael Pavone <pavone@retrodev.com>
parents:
856
diff
changeset
|
675 if ( (event.getSource() & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) { |
856
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
676 if (event.getAction() == KeyEvent.ACTION_DOWN) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
677 if (SDLActivity.onNativePadDown(event.getDeviceId(), keyCode) == 0) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
678 return true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
679 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
680 } else if (event.getAction() == KeyEvent.ACTION_UP) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
681 if (SDLActivity.onNativePadUp(event.getDeviceId(), keyCode) == 0) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
682 return true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
683 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
684 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
685 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
686 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
687 if( (event.getSource() & InputDevice.SOURCE_KEYBOARD) != 0) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
688 if (event.getAction() == KeyEvent.ACTION_DOWN) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
689 //Log.v("SDL", "key down: " + keyCode); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
690 SDLActivity.onNativeKeyDown(keyCode); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
691 return true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
692 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
693 else if (event.getAction() == KeyEvent.ACTION_UP) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
694 //Log.v("SDL", "key up: " + keyCode); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
695 SDLActivity.onNativeKeyUp(keyCode); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
696 return true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
697 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
698 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
699 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
700 return false; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
701 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
702 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
703 // Touch events |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
704 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
705 public boolean onTouch(View v, MotionEvent event) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
706 /* Ref: http://developer.android.com/training/gestures/multi.html */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
707 final int touchDevId = event.getDeviceId(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
708 final int pointerCount = event.getPointerCount(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
709 int action = event.getActionMasked(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
710 int pointerFingerId; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
711 int i = -1; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
712 float x,y,p; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
713 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
714 switch(action) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
715 case MotionEvent.ACTION_MOVE: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
716 for (i = 0; i < pointerCount; i++) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
717 pointerFingerId = event.getPointerId(i); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
718 x = event.getX(i) / mWidth; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
719 y = event.getY(i) / mHeight; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
720 p = event.getPressure(i); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
721 SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
722 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
723 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
724 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
725 case MotionEvent.ACTION_UP: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
726 case MotionEvent.ACTION_DOWN: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
727 // Primary pointer up/down, the index is always zero |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
728 i = 0; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
729 case MotionEvent.ACTION_POINTER_UP: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
730 case MotionEvent.ACTION_POINTER_DOWN: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
731 // Non primary pointer up/down |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
732 if (i == -1) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
733 i = event.getActionIndex(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
734 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
735 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
736 pointerFingerId = event.getPointerId(i); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
737 x = event.getX(i) / mWidth; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
738 y = event.getY(i) / mHeight; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
739 p = event.getPressure(i); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
740 SDLActivity.onNativeTouch(touchDevId, pointerFingerId, action, x, y, p); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
741 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
742 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
743 default: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
744 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
745 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
746 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
747 return true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
748 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
749 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
750 // Sensor events |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
751 public void enableSensor(int sensortype, boolean enabled) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
752 // TODO: This uses getDefaultSensor - what if we have >1 accels? |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
753 if (enabled) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
754 mSensorManager.registerListener(this, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
755 mSensorManager.getDefaultSensor(sensortype), |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
756 SensorManager.SENSOR_DELAY_GAME, null); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
757 } else { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
758 mSensorManager.unregisterListener(this, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
759 mSensorManager.getDefaultSensor(sensortype)); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
760 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
761 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
762 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
763 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
764 public void onAccuracyChanged(Sensor sensor, int accuracy) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
765 // TODO |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
766 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
767 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
768 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
769 public void onSensorChanged(SensorEvent event) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
770 if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
771 float x, y; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
772 switch (mDisplay.getRotation()) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
773 case Surface.ROTATION_90: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
774 x = -event.values[1]; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
775 y = event.values[0]; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
776 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
777 case Surface.ROTATION_270: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
778 x = event.values[1]; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
779 y = -event.values[0]; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
780 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
781 case Surface.ROTATION_180: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
782 x = -event.values[1]; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
783 y = -event.values[0]; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
784 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
785 default: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
786 x = event.values[0]; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
787 y = event.values[1]; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
788 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
789 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
790 SDLActivity.onNativeAccel(-x / SensorManager.GRAVITY_EARTH, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
791 y / SensorManager.GRAVITY_EARTH, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
792 event.values[2] / SensorManager.GRAVITY_EARTH - 1); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
793 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
794 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
795 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
796 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
797 /* This is a fake invisible editor view that receives the input and defines the |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
798 * pan&scan region |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
799 */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
800 class DummyEdit extends View implements View.OnKeyListener { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
801 InputConnection ic; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
802 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
803 public DummyEdit(Context context) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
804 super(context); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
805 setFocusableInTouchMode(true); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
806 setFocusable(true); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
807 setOnKeyListener(this); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
808 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
809 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
810 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
811 public boolean onCheckIsTextEditor() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
812 return true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
813 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
814 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
815 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
816 public boolean onKey(View v, int keyCode, KeyEvent event) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
817 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
818 // This handles the hardware keyboard input |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
819 if (event.isPrintingKey()) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
820 if (event.getAction() == KeyEvent.ACTION_DOWN) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
821 ic.commitText(String.valueOf((char) event.getUnicodeChar()), 1); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
822 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
823 return true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
824 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
825 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
826 if (event.getAction() == KeyEvent.ACTION_DOWN) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
827 SDLActivity.onNativeKeyDown(keyCode); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
828 return true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
829 } else if (event.getAction() == KeyEvent.ACTION_UP) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
830 SDLActivity.onNativeKeyUp(keyCode); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
831 return true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
832 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
833 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
834 return false; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
835 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
836 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
837 // |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
838 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
839 public boolean onKeyPreIme (int keyCode, KeyEvent event) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
840 // As seen on StackOverflow: http://stackoverflow.com/questions/7634346/keyboard-hide-event |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
841 // FIXME: Discussion at http://bugzilla.libsdl.org/show_bug.cgi?id=1639 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
842 // FIXME: This is not a 100% effective solution to the problem of detecting if the keyboard is showing or not |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
843 // FIXME: A more effective solution would be to change our Layout from AbsoluteLayout to Relative or Linear |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
844 // FIXME: And determine the keyboard presence doing this: http://stackoverflow.com/questions/2150078/how-to-check-visibility-of-software-keyboard-in-android |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
845 // FIXME: An even more effective way would be if Android provided this out of the box, but where would the fun be in that :) |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
846 if (event.getAction()==KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
847 if (SDLActivity.mTextEdit != null && SDLActivity.mTextEdit.getVisibility() == View.VISIBLE) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
848 SDLActivity.onNativeKeyboardFocusLost(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
849 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
850 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
851 return super.onKeyPreIme(keyCode, event); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
852 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
853 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
854 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
855 public InputConnection onCreateInputConnection(EditorInfo outAttrs) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
856 ic = new SDLInputConnection(this, true); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
857 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
858 outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
859 | 33554432 /* API 11: EditorInfo.IME_FLAG_NO_FULLSCREEN */; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
860 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
861 return ic; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
862 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
863 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
864 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
865 class SDLInputConnection extends BaseInputConnection { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
866 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
867 public SDLInputConnection(View targetView, boolean fullEditor) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
868 super(targetView, fullEditor); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
869 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
870 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
871 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
872 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
873 public boolean sendKeyEvent(KeyEvent event) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
874 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
875 /* |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
876 * This handles the keycodes from soft keyboard (and IME-translated |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
877 * input from hardkeyboard) |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
878 */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
879 int keyCode = event.getKeyCode(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
880 if (event.getAction() == KeyEvent.ACTION_DOWN) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
881 if (event.isPrintingKey()) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
882 commitText(String.valueOf((char) event.getUnicodeChar()), 1); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
883 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
884 SDLActivity.onNativeKeyDown(keyCode); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
885 return true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
886 } else if (event.getAction() == KeyEvent.ACTION_UP) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
887 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
888 SDLActivity.onNativeKeyUp(keyCode); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
889 return true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
890 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
891 return super.sendKeyEvent(event); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
892 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
893 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
894 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
895 public boolean commitText(CharSequence text, int newCursorPosition) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
896 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
897 nativeCommitText(text.toString(), newCursorPosition); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
898 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
899 return super.commitText(text, newCursorPosition); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
900 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
901 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
902 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
903 public boolean setComposingText(CharSequence text, int newCursorPosition) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
904 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
905 nativeSetComposingText(text.toString(), newCursorPosition); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
906 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
907 return super.setComposingText(text, newCursorPosition); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
908 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
909 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
910 public native void nativeCommitText(String text, int newCursorPosition); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
911 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
912 public native void nativeSetComposingText(String text, int newCursorPosition); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
913 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
914 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
915 public boolean deleteSurroundingText(int beforeLength, int afterLength) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
916 // Workaround to capture backspace key. Ref: http://stackoverflow.com/questions/14560344/android-backspace-in-webview-baseinputconnection |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
917 if (beforeLength == 1 && afterLength == 0) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
918 // backspace |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
919 return super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL)) |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
920 && super.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_DEL)); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
921 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
922 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
923 return super.deleteSurroundingText(beforeLength, afterLength); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
924 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
925 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
926 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
927 /* A null joystick handler for API level < 12 devices (the accelerometer is handled separately) */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
928 class SDLJoystickHandler { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
929 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
930 public boolean handleMotionEvent(MotionEvent event) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
931 return false; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
932 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
933 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
934 public void pollInputDevices() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
935 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
936 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
937 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
938 /* Actual joystick functionality available for API >= 12 devices */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
939 class SDLJoystickHandler_API12 extends SDLJoystickHandler { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
940 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
941 class SDLJoystick { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
942 public int device_id; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
943 public String name; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
944 public ArrayList<InputDevice.MotionRange> axes; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
945 public ArrayList<InputDevice.MotionRange> hats; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
946 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
947 class RangeComparator implements Comparator<InputDevice.MotionRange> |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
948 { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
949 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
950 public int compare(InputDevice.MotionRange arg0, InputDevice.MotionRange arg1) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
951 return arg0.getAxis() - arg1.getAxis(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
952 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
953 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
954 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
955 private ArrayList<SDLJoystick> mJoysticks; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
956 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
957 public SDLJoystickHandler_API12() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
958 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
959 mJoysticks = new ArrayList<SDLJoystick>(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
960 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
961 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
962 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
963 public void pollInputDevices() { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
964 int[] deviceIds = InputDevice.getDeviceIds(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
965 // It helps processing the device ids in reverse order |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
966 // For example, in the case of the XBox 360 wireless dongle, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
967 // so the first controller seen by SDL matches what the receiver |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
968 // considers to be the first controller |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
969 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
970 for(int i=deviceIds.length-1; i>-1; i--) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
971 SDLJoystick joystick = getJoystick(deviceIds[i]); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
972 if (joystick == null) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
973 joystick = new SDLJoystick(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
974 InputDevice joystickDevice = InputDevice.getDevice(deviceIds[i]); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
975 if( (joystickDevice.getSources() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
976 joystick.device_id = deviceIds[i]; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
977 joystick.name = joystickDevice.getName(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
978 joystick.axes = new ArrayList<InputDevice.MotionRange>(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
979 joystick.hats = new ArrayList<InputDevice.MotionRange>(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
980 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
981 List<InputDevice.MotionRange> ranges = joystickDevice.getMotionRanges(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
982 Collections.sort(ranges, new RangeComparator()); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
983 for (InputDevice.MotionRange range : ranges ) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
984 if ((range.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0 ) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
985 if (range.getAxis() == MotionEvent.AXIS_HAT_X || |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
986 range.getAxis() == MotionEvent.AXIS_HAT_Y) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
987 joystick.hats.add(range); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
988 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
989 else { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
990 joystick.axes.add(range); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
991 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
992 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
993 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
994 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
995 mJoysticks.add(joystick); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
996 SDLActivity.nativeAddJoystick(joystick.device_id, joystick.name, 0, -1, |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
997 joystick.axes.size(), joystick.hats.size()/2, 0); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
998 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
999 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1000 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1001 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1002 /* Check removed devices */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1003 ArrayList<Integer> removedDevices = new ArrayList<Integer>(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1004 for(int i=0; i < mJoysticks.size(); i++) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1005 int device_id = mJoysticks.get(i).device_id; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1006 int j; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1007 for (j=0; j < deviceIds.length; j++) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1008 if (device_id == deviceIds[j]) break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1009 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1010 if (j == deviceIds.length) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1011 removedDevices.add(device_id); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1012 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1013 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1014 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1015 for(int i=0; i < removedDevices.size(); i++) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1016 int device_id = removedDevices.get(i); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1017 SDLActivity.nativeRemoveJoystick(device_id); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1018 for (int j=0; j < mJoysticks.size(); j++) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1019 if (mJoysticks.get(j).device_id == device_id) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1020 mJoysticks.remove(j); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1021 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1022 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1023 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1024 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1025 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1026 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1027 protected SDLJoystick getJoystick(int device_id) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1028 for(int i=0; i < mJoysticks.size(); i++) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1029 if (mJoysticks.get(i).device_id == device_id) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1030 return mJoysticks.get(i); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1031 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1032 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1033 return null; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1034 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1035 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1036 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1037 public boolean handleMotionEvent(MotionEvent event) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1038 if ( (event.getSource() & InputDevice.SOURCE_JOYSTICK) != 0) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1039 int actionPointerIndex = event.getActionIndex(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1040 int action = event.getActionMasked(); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1041 switch(action) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1042 case MotionEvent.ACTION_MOVE: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1043 SDLJoystick joystick = getJoystick(event.getDeviceId()); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1044 if ( joystick != null ) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1045 for (int i = 0; i < joystick.axes.size(); i++) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1046 InputDevice.MotionRange range = joystick.axes.get(i); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1047 /* Normalize the value to -1...1 */ |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1048 float value = ( event.getAxisValue( range.getAxis(), actionPointerIndex) - range.getMin() ) / range.getRange() * 2.0f - 1.0f; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1049 SDLActivity.onNativeJoy(joystick.device_id, i, value ); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1050 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1051 for (int i = 0; i < joystick.hats.size(); i+=2) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1052 int hatX = Math.round(event.getAxisValue( joystick.hats.get(i).getAxis(), actionPointerIndex ) ); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1053 int hatY = Math.round(event.getAxisValue( joystick.hats.get(i+1).getAxis(), actionPointerIndex ) ); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1054 SDLActivity.onNativeHat(joystick.device_id, i/2, hatX, hatY ); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1055 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1056 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1057 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1058 default: |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1059 break; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1060 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1061 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1062 return true; |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1063 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1064 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1065 |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1066 class SDLGenericMotionListener_API12 implements View.OnGenericMotionListener { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1067 // Generic Motion (mouse hover, joystick...) events go here |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1068 // We only have joysticks yet |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1069 @Override |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1070 public boolean onGenericMotion(View v, MotionEvent event) { |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1071 return SDLActivity.handleJoystickMotionEvent(event); |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1072 } |
09f5a349e881
Added android project layout
Michael Pavone <pavone@retrodev.com>
parents:
diff
changeset
|
1073 } |