Skip to content

Commit

Permalink
Update Android SDK required to API level 16
Browse files Browse the repository at this point in the history
Sylvain

Some API 16 methods are used (InputDevice: getDescriptor(), getVibrator()), so we need to compile at least with SDK API 16. Hence default.properties and project.properties have been modified to use android-16.

There are also some modification to SDLActivity.java not to use getVibrator() if we run under API 16. And not to check to presence of hasVibrator() if we are under API 11.
-some hard-coded constant can be expandend.
- rename a local variable (hasVibrator to hasVibratorService)
  • Loading branch information
slouken committed Aug 31, 2017
1 parent b54bcb3 commit 6c38c90
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 38 deletions.
2 changes: 1 addition & 1 deletion android-project/default.properties
Expand Up @@ -8,4 +8,4 @@
# project structure.

# Project target.
target=android-12
target=android-16
2 changes: 1 addition & 1 deletion android-project/project.properties
Expand Up @@ -11,4 +11,4 @@
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

# Project target.
target=android-12
target=android-16
76 changes: 42 additions & 34 deletions android-project/src/org/libsdl/app/SDLActivity.java
Expand Up @@ -355,8 +355,8 @@ public boolean dispatchKeyEvent(KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN ||
keyCode == KeyEvent.KEYCODE_VOLUME_UP ||
keyCode == KeyEvent.KEYCODE_CAMERA ||
keyCode == 168 || /* API 11: KeyEvent.KEYCODE_ZOOM_IN */
keyCode == 169 /* API 11: KeyEvent.KEYCODE_ZOOM_OUT */
keyCode == KeyEvent.KEYCODE_ZOOM_IN || /* API 11 */
keyCode == KeyEvent.KEYCODE_ZOOM_OUT /* API 11 */
) {
return false;
}
Expand Down Expand Up @@ -1166,7 +1166,7 @@ public void onClick(View v) {
mapping.put(KeyEvent.KEYCODE_ENTER, button);
}
if ((buttonFlags[i] & 0x00000002) != 0) {
mapping.put(111, button); /* API 11: KeyEvent.KEYCODE_ESCAPE */
mapping.put(KeyEvent.KEYCODE_ESCAPE, button); /* API 11 */
}
}
button.setText(buttonTexts[i]);
Expand Down Expand Up @@ -1688,7 +1688,7 @@ public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

outAttrs.inputType = InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI
| 33554432 /* API 11: EditorInfo.IME_FLAG_NO_FULLSCREEN */;
| EditorInfo.IME_FLAG_NO_FULLSCREEN /* API 11 */;

return ic;
}
Expand Down Expand Up @@ -1994,47 +1994,55 @@ public void run(int device_id, int length) {
}

public void pollHapticDevices() {

final int deviceId_VIBRATOR_SERVICE = 999999;
boolean hasVibrator = false;
boolean hasVibratorService = false;

int[] deviceIds = InputDevice.getDeviceIds();
// It helps processing the device ids in reverse order
// For example, in the case of the XBox 360 wireless dongle,
// so the first controller seen by SDL matches what the receiver
// considers to be the first controller

for(int i=deviceIds.length-1; i>-1; i--) {
SDLHaptic haptic = getHaptic(deviceIds[i]);
if (haptic == null) {
InputDevice device = InputDevice.getDevice(deviceIds[i]);
Vibrator vib = device.getVibrator();
if (vib.hasVibrator()) {
haptic = new SDLHaptic();
haptic.device_id = deviceIds[i];
haptic.name = device.getName();
haptic.vib = vib;
mHaptics.add(haptic);
SDLActivity.nativeAddHaptic(haptic.device_id, haptic.name);
if (Build.VERSION.SDK_INT >= 16)
{
for (int i = deviceIds.length-1; i > -1; i--) {
SDLHaptic haptic = getHaptic(deviceIds[i]);
if (haptic == null) {
InputDevice device = InputDevice.getDevice(deviceIds[i]);
Vibrator vib = device.getVibrator();
if (vib.hasVibrator()) {
haptic = new SDLHaptic();
haptic.device_id = deviceIds[i];
haptic.name = device.getName();
haptic.vib = vib;
mHaptics.add(haptic);
SDLActivity.nativeAddHaptic(haptic.device_id, haptic.name);
}
}
}
}

/* Check VIBRATOR_SERVICE */
{
Vibrator vib = (Vibrator) SDLActivity.mSingleton.getContext().getSystemService(Context.VIBRATOR_SERVICE);
if (vib != null && vib.hasVibrator()) {
hasVibrator = true;
SDLHaptic haptic = getHaptic(deviceId_VIBRATOR_SERVICE);
if (haptic == null) {
haptic = new SDLHaptic();
haptic.device_id = deviceId_VIBRATOR_SERVICE;
haptic.name = "VIBRATOR_SERVICE";
haptic.vib = vib;
mHaptics.add(haptic);
SDLActivity.nativeAddHaptic(haptic.device_id, haptic.name);
}
}
Vibrator vib = (Vibrator) SDLActivity.mSingleton.getContext().getSystemService(Context.VIBRATOR_SERVICE);
if (vib != null) {
if (Build.VERSION.SDK_INT >= 11) {
hasVibratorService = vib.hasVibrator();
} else {
hasVibratorService = true;
}

if (hasVibratorService) {
SDLHaptic haptic = getHaptic(deviceId_VIBRATOR_SERVICE);
if (haptic == null) {
haptic = new SDLHaptic();
haptic.device_id = deviceId_VIBRATOR_SERVICE;
haptic.name = "VIBRATOR_SERVICE";
haptic.vib = vib;
mHaptics.add(haptic);
SDLActivity.nativeAddHaptic(haptic.device_id, haptic.name);
}
}
}

/* Check removed devices */
Expand All @@ -2046,8 +2054,8 @@ public void pollHapticDevices() {
if (device_id == deviceIds[j]) break;
}

if (device_id == deviceId_VIBRATOR_SERVICE && hasVibrator) {
// don't remove the vibrator if it is still present
if (device_id == deviceId_VIBRATOR_SERVICE && hasVibratorService) {
// don't remove the vibrator if it is still present
} else if (j == deviceIds.length) {
removedDevices.add(device_id);
}
Expand Down
4 changes: 2 additions & 2 deletions docs/README-android.md
Expand Up @@ -10,14 +10,14 @@ The rest of this README covers the old style build process.
Requirements
================================================================================

Android SDK (version 12 or later)
Android SDK (version 16 or later)
https://developer.android.com/sdk/index.html

Android NDK r7 or later
https://developer.android.com/tools/sdk/ndk/index.html

Minimum API level supported by SDL: 10 (Android 2.3.3)
Joystick support is available for API level >=12 devices.
Joystick support is available for API level >= 12 devices.

================================================================================
How the port works
Expand Down

0 comments on commit 6c38c90

Please sign in to comment.