Mercurial > repos > blastem
annotate android/src/org/libsdl/app/SDLActivity.java @ 1701:4fd34fde390c
Added adc instruction to CPU DSL
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sun, 27 Jan 2019 05:55:08 -0800 |
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 } |