diff --git a/android/app/build.gradle b/android/app/build.gradle
index ce84e29..369fa4f 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -9,13 +9,13 @@ else {
apply plugin: 'kotlin-android'
android {
- compileSdkVersion 28
+ compileSdkVersion 31
defaultConfig {
if (buildAsApplication) {
applicationId "io.github.kichikuou.xsystem35"
}
minSdkVersion 19
- targetSdkVersion 28
+ targetSdkVersion 31
versionCode 6
versionName "2.2.0"
externalNativeBuild {
diff --git a/android/app/jni/CMakeLists.txt b/android/app/jni/CMakeLists.txt
index 915aed4..b10e3f2 100644
--- a/android/app/jni/CMakeLists.txt
+++ b/android/app/jni/CMakeLists.txt
@@ -9,9 +9,8 @@ project(GAME)
include(FetchContent)
FetchContent_Declare(
SDL
- URL https://libsdl.org/release/SDL2-2.0.16.tar.gz
- URL_HASH SHA1=57825428174adb2ac947e4014080c262505aa972
- PATCH_COMMAND patch -p1 -i ${CMAKE_CURRENT_LIST_DIR}/SDL.patch
+ URL https://libsdl.org/release/SDL2-2.0.18.tar.gz
+ URL_HASH SHA1=419c62567d197a52a2136865c158f894939c1adf
)
# TODO: Use SDL2_ttf 2.0.16 once released
FetchContent_Declare(
diff --git a/android/app/jni/SDL.patch b/android/app/jni/SDL.patch
deleted file mode 100644
index 2e449e1..0000000
--- a/android/app/jni/SDL.patch
+++ /dev/null
@@ -1,17 +0,0 @@
-diff --git a/CMakeLists.txt b/CMakeLists.txt
-index e7ab00feb..d86f0087a 100644
---- a/CMakeLists.txt
-+++ b/CMakeLists.txt
-@@ -2053,6 +2053,12 @@ if(SDL_SHARED)
- set_property(TARGET SDL2 APPEND_STRING PROPERTY COMPILE_FLAGS "-fobjc-arc")
- target_compile_definitions(SDL2 PRIVATE IOS_DYLIB=1)
- endif()
-+ if (ANDROID)
-+ # Link the cpufeatures library in Android NDK.
-+ # Since we don't use a SDK-bundled CMAKE, AndroidNdkModules module cannot be used.
-+ target_include_directories(SDL2 PRIVATE ${ANDROID_NDK}/sources/android/cpufeatures)
-+ target_sources(SDL2 PRIVATE ${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c)
-+ endif()
- endif()
-
- if(ANDROID)
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 4a63cec..d13334b 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -37,10 +37,14 @@
android:name="android.hardware.microphone"
android:required="false" /> -->
-
-
+
+
+
-
+
+
+
+
@@ -64,7 +68,9 @@
-->
-
+
+
diff --git a/android/app/src/main/java/io/github/kichikuou/xsystem35/GameActivity.kt b/android/app/src/main/java/io/github/kichikuou/xsystem35/GameActivity.kt
index 006dc97..1a445c7 100644
--- a/android/app/src/main/java/io/github/kichikuou/xsystem35/GameActivity.kt
+++ b/android/app/src/main/java/io/github/kichikuou/xsystem35/GameActivity.kt
@@ -42,7 +42,7 @@ class GameActivity : SDLActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- gameRoot = File(intent.getStringExtra(EXTRA_GAME_ROOT))
+ gameRoot = File(intent.getStringExtra(EXTRA_GAME_ROOT)!!)
cdda = CddaPlayer(File(gameRoot, Launcher.PLAYLIST_FILE))
}
@@ -59,11 +59,11 @@ class GameActivity : SDLActivity() {
}
override fun getLibraries(): Array {
- return arrayOf("hidapi", "SDL2", "xsystem35")
+ return arrayOf("SDL2", "xsystem35")
}
override fun getArguments(): Array {
- return arrayOf("-gamedir", intent.getStringExtra(EXTRA_GAME_ROOT))
+ return arrayOf("-gamedir", intent.getStringExtra(EXTRA_GAME_ROOT)!!)
}
override fun setTitle(title: CharSequence?) {
diff --git a/android/app/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java b/android/app/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java
index 94a2818..65c5a42 100644
--- a/android/app/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java
+++ b/android/app/src/main/java/org/libsdl/app/HIDDeviceBLESteamController.java
@@ -564,10 +564,10 @@ class HIDDeviceBLESteamController extends BluetoothGattCallback implements HIDDe
return "Steam Controller";
}
- @Override
+ @Override
public UsbDevice getDevice() {
- return null;
- }
+ return null;
+ }
@Override
public boolean open() {
diff --git a/android/app/src/main/java/org/libsdl/app/HIDDeviceManager.java b/android/app/src/main/java/org/libsdl/app/HIDDeviceManager.java
index 041dc38..5ebbb97 100644
--- a/android/app/src/main/java/org/libsdl/app/HIDDeviceManager.java
+++ b/android/app/src/main/java/org/libsdl/app/HIDDeviceManager.java
@@ -105,36 +105,6 @@ public class HIDDeviceManager {
private HIDDeviceManager(final Context context) {
mContext = context;
- // Make sure we have the HIDAPI library loaded with the native functions
- try {
- SDL.loadLibrary("hidapi");
- } 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);
@@ -149,9 +119,6 @@ public class HIDDeviceManager {
{
mNextDeviceId = mSharedPreferences.getInt("next_device_id", 0);
}
-
- initializeUSB();
- initializeBluetooth();
}
public Context getContext() {
@@ -379,7 +346,8 @@ public class HIDDeviceManager {
private void initializeBluetooth() {
Log.d(TAG, "Initializing Bluetooth");
- if (mContext.getPackageManager().checkPermission(android.Manifest.permission.BLUETOOTH, mContext.getPackageName()) != PackageManager.PERMISSION_GRANTED) {
+ if (Build.VERSION.SDK_INT <= 30 &&
+ mContext.getPackageManager().checkPermission(android.Manifest.permission.BLUETOOTH, mContext.getPackageName()) != PackageManager.PERMISSION_GRANTED) {
Log.d(TAG, "Couldn't initialize Bluetooth, missing android.permission.BLUETOOTH");
return;
}
@@ -571,6 +539,18 @@ public class HIDDeviceManager {
////////// JNI interface functions
//////////////////////////////////////////////////////////////////////////////////////////////////////
+ public boolean initialize(boolean usb, boolean bluetooth) {
+ Log.v(TAG, "initialize(" + usb + ", " + bluetooth + ")");
+
+ if (usb) {
+ initializeUSB();
+ }
+ if (bluetooth) {
+ initializeBluetooth();
+ }
+ return true;
+ }
+
public boolean openDevice(int deviceID) {
Log.v(TAG, "openDevice deviceID=" + deviceID);
HIDDevice device = getDevice(deviceID);
@@ -584,7 +564,14 @@ public class HIDDeviceManager {
if (usbDevice != null && !mUsbManager.hasPermission(usbDevice)) {
HIDDeviceOpenPending(deviceID);
try {
- mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), 0));
+ final int FLAG_MUTABLE = 0x02000000; // PendingIntent.FLAG_MUTABLE, but don't require SDK 31
+ int flags;
+ if (Build.VERSION.SDK_INT >= 31) {
+ flags = FLAG_MUTABLE;
+ } else {
+ flags = 0;
+ }
+ mUsbManager.requestPermission(usbDevice, PendingIntent.getBroadcast(mContext, 0, new Intent(HIDDeviceManager.ACTION_USB_PERMISSION), flags));
} catch (Exception e) {
Log.v(TAG, "Couldn't request permission for USB device " + usbDevice);
HIDDeviceOpenResult(deviceID, false);
diff --git a/android/app/src/main/java/org/libsdl/app/SDLActivity.java b/android/app/src/main/java/org/libsdl/app/SDLActivity.java
index 2d83b9f..02c64b1 100644
--- a/android/app/src/main/java/org/libsdl/app/SDLActivity.java
+++ b/android/app/src/main/java/org/libsdl/app/SDLActivity.java
@@ -164,7 +164,6 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
*/
protected String[] getLibraries() {
return new String[] {
- "hidapi",
"SDL2",
// "SDL2_image",
// "SDL2_mixer",
@@ -379,11 +378,14 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
}
public static int getCurrentOrientation() {
- final Context context = SDLActivity.getContext();
- final Display display = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
-
int result = SDL_ORIENTATION_UNKNOWN;
+ Activity activity = (Activity)getContext();
+ if (activity == null) {
+ return result;
+ }
+ Display display = activity.getWindowManager().getDefaultDisplay();
+
switch (display.getRotation()) {
case Surface.ROTATION_0:
result = SDL_ORIENTATION_PORTRAIT;
@@ -497,8 +499,8 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
// If we do, the normal hardware back button will no longer work and people have to use home,
// but the mouse right click will work.
//
- String trapBack = SDLActivity.nativeGetHint("SDL_ANDROID_TRAP_BACK_BUTTON");
- if ((trapBack != null) && trapBack.equals("1")) {
+ boolean trapBack = SDLActivity.nativeGetHintBoolean("SDL_ANDROID_TRAP_BACK_BUTTON", false);
+ if (trapBack) {
// Exit and let the mouse handler handle this button (if appropriate)
return;
}
@@ -801,6 +803,7 @@ public class SDLActivity extends Activity implements View.OnSystemUiVisibilityCh
public static native void onNativeSurfaceChanged();
public static native void onNativeSurfaceDestroyed();
public static native String nativeGetHint(String name);
+ public static native boolean nativeGetHintBoolean(String name, boolean default_value);
public static native void nativeSetenv(String name, String value);
public static native void onNativeOrientationChanged(int orientation);
public static native void nativeAddTouch(int touchId, String name);
diff --git a/android/app/src/main/java/org/libsdl/app/SDLAudioManager.java b/android/app/src/main/java/org/libsdl/app/SDLAudioManager.java
index 09e4428..2bfc718 100644
--- a/android/app/src/main/java/org/libsdl/app/SDLAudioManager.java
+++ b/android/app/src/main/java/org/libsdl/app/SDLAudioManager.java
@@ -47,6 +47,10 @@ public class SDLAudioManager
if (desiredChannels > 2) {
desiredChannels = 2;
}
+ }
+
+ /* AudioTrack has sample rate limitation of 48000 (fixed in 5.0.2) */
+ if (Build.VERSION.SDK_INT < 22) {
if (sampleRate < 8000) {
sampleRate = 8000;
} else if (sampleRate > 48000) {
diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar
index 13372ae..2b338a9 100644
Binary files a/android/gradle/wrapper/gradle-wrapper.jar and b/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index 4bbdcd0..ada5af4 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Mon Aug 10 12:24:31 JST 2020
+#Thu Nov 11 18:20:34 PST 2021
distributionBase=GRADLE_USER_HOME
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip
+zipStoreBase=GRADLE_USER_HOME