Fixes to accelerometer and audio not working, another dialog to select keypad type for user

This commit is contained in:
pelya
2010-07-29 18:26:29 +03:00
parent fb5561ff45
commit efc1c424d8
5 changed files with 104 additions and 59 deletions

View File

@@ -155,6 +155,7 @@ static int ANDROIDAUD_OpenAudio (_THIS, SDL_AudioSpec *spec)
{ {
SDL_AudioSpec *audioFormat = spec; SDL_AudioSpec *audioFormat = spec;
#endif #endif
int bytesPerSample; int bytesPerSample;
JNIEnv * jniEnv = NULL; JNIEnv * jniEnv = NULL;
@@ -197,7 +198,7 @@ static int ANDROIDAUD_OpenAudio (_THIS, SDL_AudioSpec *spec)
SDL_CalculateAudioSpec(audioFormat); SDL_CalculateAudioSpec(audioFormat);
return(0); return(1);
} }
static void ANDROIDAUD_CloseAudio(_THIS) static void ANDROIDAUD_CloseAudio(_THIS)

View File

@@ -543,94 +543,93 @@ int processAndroidTrackball(int key, int action)
static int leftPressed = 0, rightPressed = 0, upPressed = 0, downPressed = 0; static int leftPressed = 0, rightPressed = 0, upPressed = 0, downPressed = 0;
SDL_keysym keysym; SDL_keysym keysym;
if( ! action && (
key == KEYCODE_DPAD_UP ||
key == KEYCODE_DPAD_DOWN ||
key == KEYCODE_DPAD_LEFT ||
key == KEYCODE_DPAD_RIGHT ) )
return 1;
if( key == KEYCODE_DPAD_UP ) if( key == KEYCODE_DPAD_UP )
{ {
downPressed = 0; if( downPressed )
SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(KEYCODE_DPAD_DOWN ,&keysym) ); {
downPressed = 0;
SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(KEYCODE_DPAD_DOWN ,&keysym) );
return 1;
}
if( !upPressed ) if( !upPressed )
{ {
if( action ) upPressed = 1;
{ SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
upPressed = 1;
SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
}
} }
else else
{ {
if( action ) SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(key ,&keysym) );
{ SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(key ,&keysym) );
SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
}
} }
return 1; return 1;
} }
if( key == KEYCODE_DPAD_DOWN ) if( key == KEYCODE_DPAD_DOWN )
{ {
upPressed = 0; if( upPressed )
SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(KEYCODE_DPAD_UP ,&keysym) ); {
upPressed = 0;
SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(KEYCODE_DPAD_UP ,&keysym) );
return 1;
}
if( !upPressed ) if( !upPressed )
{ {
if( action ) downPressed = 1;
{ SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
downPressed = 1;
SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
}
} }
else else
{ {
if( action ) SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(key ,&keysym) );
{ SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(key ,&keysym) );
SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
}
} }
return 1; return 1;
} }
if( key == KEYCODE_DPAD_LEFT ) if( key == KEYCODE_DPAD_LEFT )
{ {
rightPressed = 0; if( rightPressed )
SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(KEYCODE_DPAD_RIGHT ,&keysym) ); {
rightPressed = 0;
SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(KEYCODE_DPAD_RIGHT ,&keysym) );
return 1;
}
if( !leftPressed ) if( !leftPressed )
{ {
if( action ) leftPressed = 1;
{ SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
leftPressed = 1;
SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
}
} }
else else
{ {
if( action ) SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(key ,&keysym) );
{ SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(key ,&keysym) );
SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
}
} }
return 1; return 1;
} }
if( key == KEYCODE_DPAD_RIGHT ) if( key == KEYCODE_DPAD_RIGHT )
{ {
leftPressed = 0; if( leftPressed )
SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(KEYCODE_DPAD_LEFT ,&keysym) ); {
leftPressed = 0;
SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(KEYCODE_DPAD_LEFT ,&keysym) );
return 1;
}
if( !rightPressed ) if( !rightPressed )
{ {
if( action ) rightPressed = 1;
{ SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
rightPressed = 1;
SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
}
} }
else else
{ {
if( action ) SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(key ,&keysym) );
{ SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
SDL_SendKeyboardKey( SDL_RELEASED, TranslateKey(key ,&keysym) );
SDL_SendKeyboardKey( SDL_PRESSED, TranslateKey(key ,&keysym) );
}
} }
return 1; return 1;
} }

View File

@@ -51,11 +51,17 @@ class AccelerometerReader implements SensorEventListener {
if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER) if (event.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
{ {
nativeAccelerometer(event.values[0], event.values[1], event.values[2]); if( Globals.HorizontalOrientation )
nativeAccelerometer(event.values[1], -event.values[0], event.values[2]);
else
nativeAccelerometer(event.values[0], event.values[1], event.values[2]);
} }
else else
{ {
nativeOrientation(event.values[0], event.values[1], event.values[2]); if( Globals.HorizontalOrientation )
nativeOrientation(event.values[1], -event.values[0], event.values[2]);
else
nativeOrientation(event.values[0], event.values[1], event.values[2]);
} }
} }

View File

@@ -31,6 +31,8 @@ class Globals {
public static boolean AppNeedsArrowKeys = true; public static boolean AppNeedsArrowKeys = true;
public static boolean AppUsesJoystick = false; public static boolean AppUsesJoystick = false;
public static boolean PhoneHasTrackball = false;
} }
class LoadLibrary { class LoadLibrary {

View File

@@ -24,6 +24,7 @@ class Settings
ObjectInputStream settingsFile = new ObjectInputStream(new FileInputStream( p.getFilesDir().getAbsolutePath() + "/" + SettingsFileName )); ObjectInputStream settingsFile = new ObjectInputStream(new FileInputStream( p.getFilesDir().getAbsolutePath() + "/" + SettingsFileName ));
Globals.DownloadToSdcard = settingsFile.readBoolean(); Globals.DownloadToSdcard = settingsFile.readBoolean();
Globals.AppNeedsArrowKeys = settingsFile.readBoolean(); Globals.AppNeedsArrowKeys = settingsFile.readBoolean();
Globals.PhoneHasTrackball = settingsFile.readBoolean();
startDownloader(p); startDownloader(p);
return; return;
@@ -31,6 +32,8 @@ class Settings
} catch( SecurityException e ) { } catch( SecurityException e ) {
} catch ( IOException e ) {}; } catch ( IOException e ) {};
// This code fails for both of my phones!
/*
Configuration c = new Configuration(); Configuration c = new Configuration();
c.setToDefaults(); c.setToDefaults();
@@ -41,6 +44,14 @@ class Settings
Globals.AppNeedsArrowKeys = false; Globals.AppNeedsArrowKeys = false;
} }
System.out.println( "libSDL: Phone keypad type: " +
(
c.navigation == Configuration.NAVIGATION_TRACKBALL ? "Trackball" :
c.navigation == Configuration.NAVIGATION_DPAD ? "Dpad" :
c.navigation == Configuration.NAVIGATION_WHEEL ? "Wheel" :
c.navigation == Configuration.NAVIGATION_NONAV ? "None" :
"Unknown" ) );
*/
final CharSequence[] items = {"Phone storage", "SD card"}; final CharSequence[] items = {"Phone storage", "SD card"};
@@ -53,7 +64,7 @@ class Settings
Globals.DownloadToSdcard = (item == 1); Globals.DownloadToSdcard = (item == 1);
dialog.dismiss(); dialog.dismiss();
showAccelermoeterConfig(p); showKeyboardConfig(p);
} }
}); });
AlertDialog alert = builder.create(); AlertDialog alert = builder.create();
@@ -62,6 +73,35 @@ class Settings
}; };
static void showKeyboardConfig(final MainActivity p)
{
if( ! Globals.AppNeedsArrowKeys )
{
Save(p);
startDownloader(p);
return;
}
final CharSequence[] items = {"Arrows / joystick / dpad", "Trackball", "None, only touchscreen"};
AlertDialog.Builder builder = new AlertDialog.Builder(p);
builder.setTitle("What kind of navigation keys does your phone have?");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int item)
{
Globals.AppNeedsArrowKeys = (item == 2);
Globals.PhoneHasTrackball = (item == 1);
dialog.dismiss();
showAccelermoeterConfig(p);
}
});
AlertDialog alert = builder.create();
alert.setOwnerActivity(p);
alert.show();
}
static void showAccelermoeterConfig(final MainActivity p) static void showAccelermoeterConfig(final MainActivity p)
{ {
if( Globals.AppNeedsArrowKeys || Globals.AppUsesJoystick ) if( Globals.AppNeedsArrowKeys || Globals.AppUsesJoystick )
@@ -74,7 +114,7 @@ class Settings
final CharSequence[] items = {"Do not use accelerometer", "Use accelerometer as navigation keys"}; final CharSequence[] items = {"Do not use accelerometer", "Use accelerometer as navigation keys"};
AlertDialog.Builder builder = new AlertDialog.Builder(p); AlertDialog.Builder builder = new AlertDialog.Builder(p);
builder.setTitle("Your phone has navigation keys, you may optionally use accelerometer as another navigation keys"); builder.setTitle("You may optionally use accelerometer as another navigation keys");
builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener()
{ {
public void onClick(DialogInterface dialog, int item) public void onClick(DialogInterface dialog, int item)
@@ -97,6 +137,7 @@ class Settings
ObjectOutputStream out = new ObjectOutputStream(p.openFileOutput( SettingsFileName, p.MODE_WORLD_READABLE )); ObjectOutputStream out = new ObjectOutputStream(p.openFileOutput( SettingsFileName, p.MODE_WORLD_READABLE ));
out.writeBoolean(Globals.DownloadToSdcard); out.writeBoolean(Globals.DownloadToSdcard);
out.writeBoolean(Globals.AppNeedsArrowKeys); out.writeBoolean(Globals.AppNeedsArrowKeys);
out.writeBoolean(Globals.PhoneHasTrackball);
out.close(); out.close();
} catch( FileNotFoundException e ) { } catch( FileNotFoundException e ) {
} catch( SecurityException e ) { } catch( SecurityException e ) {
@@ -107,13 +148,9 @@ class Settings
static void Apply() static void Apply()
{ {
nativeIsSdcardUsed( Globals.DownloadToSdcard ? 1 : 0 ); nativeIsSdcardUsed( Globals.DownloadToSdcard ? 1 : 0 );
Configuration c = new Configuration();
c.setToDefaults();
if( c.navigation == Configuration.NAVIGATION_TRACKBALL ) if( Globals.PhoneHasTrackball )
{
nativeSetTrackballUsed(); nativeSetTrackballUsed();
}
if( Globals.AppUsesMouse ) if( Globals.AppUsesMouse )
nativeSetMouseUsed(); nativeSetMouseUsed();
if( Globals.AppUsesJoystick && !Globals.AppNeedsArrowKeys ) if( Globals.AppUsesJoystick && !Globals.AppNeedsArrowKeys )