diff options
author | Sam Lantinga <slouken@libsdl.org> | 2018-10-22 14:55:45 -0700 |
---|---|---|
committer | Sam Lantinga <slouken@libsdl.org> | 2018-10-22 14:55:45 -0700 |
commit | 4b0616944027a07ff98aa6f8d9e524ef2ac5d7f4 (patch) | |
tree | dc331760e214fed9a0dfb07fa9ff173b324f1562 /android-project/app | |
parent | ddee9a366a4d357c2bbbac37d9cb34b3966e9063 (diff) |
Handle failure to load hidapi gracefully
Diffstat (limited to 'android-project/app')
-rw-r--r-- | android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java | 31 | ||||
-rw-r--r-- | android-project/app/src/main/java/org/libsdl/app/SDL.java | 2 |
2 files changed, 29 insertions, 4 deletions
diff --git a/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java b/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java index 761ecca0d3..db9400f6d6 100644 --- a/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java +++ b/android-project/app/src/main/java/org/libsdl/app/HIDDeviceManager.java @@ -1,5 +1,7 @@ package org.libsdl.app; +import android.app.Activity; +import android.app.AlertDialog; import android.app.PendingIntent; import android.bluetooth.BluetoothAdapter; import android.bluetooth.BluetoothDevice; @@ -8,6 +10,7 @@ import android.bluetooth.BluetoothProfile; import android.util.Log; import android.content.BroadcastReceiver; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.SharedPreferences; @@ -98,17 +101,39 @@ public class HIDDeviceManager { } }; - private HIDDeviceManager(Context context) { + private HIDDeviceManager(final Context context) { mContext = context; // Make sure we have the HIDAPI library loaded with the native functions try { SDL.loadLibrary("hidapi"); - } catch (Exception e) { + } catch (Throwable e) { Log.w(TAG, "Couldn't load hidapi: " + e.toString()); + + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setCancelable(false); + builder.setTitle("SDL HIDAPI Error"); + builder.setMessage("Please report the following error to the SDL maintainers: " + e.getMessage()); + builder.setNegativeButton("Quit", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + try { + // If our context is an activity, exit rather than crashing when we can't + // call our native functions. + Activity activity = (Activity)context; + + activity.finish(); + } + catch (ClassCastException cce) { + // Context wasn't an activity, there's nothing we can do. Give up and return. + } + } + }); + builder.show(); + return; } - + HIDDeviceRegisterCallback(); mSharedPreferences = mContext.getSharedPreferences("hidapi", Context.MODE_PRIVATE); diff --git a/android-project/app/src/main/java/org/libsdl/app/SDL.java b/android-project/app/src/main/java/org/libsdl/app/SDL.java index 58597c6555..fb7f7319a8 100644 --- a/android-project/app/src/main/java/org/libsdl/app/SDL.java +++ b/android-project/app/src/main/java/org/libsdl/app/SDL.java @@ -66,7 +66,7 @@ public class SDL { Method loadMethod = relinkInstanceClass.getDeclaredMethod("loadLibrary", contextClass, stringClass, stringClass, relinkListenerClass); loadMethod.invoke(relinkInstance, mContext, libraryName, null, null); } - catch (final Exception e) { + catch (final Throwable e) { // Fall back try { System.loadLibrary(libraryName); |