Skip to content

Commit

Permalink
Handle failure to load hidapi gracefully
Browse files Browse the repository at this point in the history
  • Loading branch information
slouken committed Oct 22, 2018
1 parent c4918db commit e6068b5
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 4 deletions.
@@ -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;
Expand All @@ -8,6 +10,7 @@
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;
Expand Down Expand Up @@ -98,17 +101,39 @@ public void onReceive(Context context, Intent intent) {
}
};

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);
Expand Down
2 changes: 1 addition & 1 deletion android-project/app/src/main/java/org/libsdl/app/SDL.java
Expand Up @@ -66,7 +66,7 @@ public static void loadLibrary(String libraryName) throws UnsatisfiedLinkError,
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);
Expand Down

0 comments on commit e6068b5

Please sign in to comment.