summaryrefslogtreecommitdiff
path: root/android-project/app
diff options
context:
space:
mode:
authorSam Lantinga <slouken@libsdl.org>2018-10-22 14:55:45 -0700
committerSam Lantinga <slouken@libsdl.org>2018-10-22 14:55:45 -0700
commit4b0616944027a07ff98aa6f8d9e524ef2ac5d7f4 (patch)
treedc331760e214fed9a0dfb07fa9ff173b324f1562 /android-project/app
parentddee9a366a4d357c2bbbac37d9cb34b3966e9063 (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.java31
-rw-r--r--android-project/app/src/main/java/org/libsdl/app/SDL.java2
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);