diff --git a/android/build.gradle b/android/build.gradle
index 2922fee401..0fb6b53a2f 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -243,12 +243,3 @@ android {
afterEvaluate {
android.sourceSets.main.assets.getSrcDirs().each { println it }
}
-
-// F-Droid lite version can be created with : ./gradlew assembleOptimized -Pf_droid
-if (project.hasProperty("f_droid")) {
- project.android.sourceSets.main.java.srcDirs += 'libs/MogaStubs'
-} else {
- project.dependencies {
- implementation files('libs/com.bda.controller.jar')
- }
-}
diff --git a/android/libs/MogaStubs/com/bda/controller/Controller.java b/android/libs/MogaStubs/com/bda/controller/Controller.java
deleted file mode 100644
index c30cae357b..0000000000
--- a/android/libs/MogaStubs/com/bda/controller/Controller.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package com.bda.controller;
-
-import android.app.Activity;
-import android.os.Handler;
-import android.view.SurfaceView;
-
-public class Controller {
- public static final int ACTION_VERSION_MOGA = 0;
- public static final int STATE_CURRENT_PRODUCT_VERSION = 1;
-
- static Controller sInstance;
-
- private Controller() {}
-
- public static Controller getInstance(Activity activity) {
- if (sInstance == null) {
- sInstance = new Controller();
- }
- return sInstance;
- }
- public int getState(int val) {
- return 0;
- }
- public int setListener(SurfaceView view, Handler handler) {
- return 0;
- }
- public int init() {
- return 0;
- }
- public int onPause() {
- return 0;
- }
- public int onResume() {
- return 0;
- }
- public int exit() {
- return 0;
- }
-}
diff --git a/android/libs/MogaStubs/com/bda/controller/ControllerListener.java b/android/libs/MogaStubs/com/bda/controller/ControllerListener.java
deleted file mode 100644
index c1bde2b583..0000000000
--- a/android/libs/MogaStubs/com/bda/controller/ControllerListener.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package com.bda.controller;
-
-public interface ControllerListener {
- public abstract void onKeyEvent(KeyEvent event);
-
- public abstract void onMotionEvent(MotionEvent event);
-
- public abstract void onStateEvent(StateEvent state);
-}
diff --git a/android/libs/MogaStubs/com/bda/controller/IControllerService.java b/android/libs/MogaStubs/com/bda/controller/IControllerService.java
deleted file mode 100644
index 2fe7a5c3f6..0000000000
--- a/android/libs/MogaStubs/com/bda/controller/IControllerService.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.bda.controller;
-
-public class IControllerService {
-}
diff --git a/android/libs/MogaStubs/com/bda/controller/KeyEvent.java b/android/libs/MogaStubs/com/bda/controller/KeyEvent.java
deleted file mode 100644
index 2a6a108921..0000000000
--- a/android/libs/MogaStubs/com/bda/controller/KeyEvent.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.bda.controller;
-
-public class KeyEvent {
- public static final int ACTION_DOWN = 0;
- public static final int ACTION_UP = 1;
- public static final int KEYCODE_DPAD_UP = 2;
- public static final int KEYCODE_DPAD_DOWN = 3;
- public static final int KEYCODE_DPAD_LEFT = 4;
- public static final int KEYCODE_DPAD_RIGHT = 5;
-
- public int getAction() {
- return 0;
- }
- public int getState(int val) {
- return 0;
- }
- public int getKeyCode() {
- return 0;
- }
-}
diff --git a/android/libs/MogaStubs/com/bda/controller/MotionEvent.java b/android/libs/MogaStubs/com/bda/controller/MotionEvent.java
deleted file mode 100644
index 35d8816ff2..0000000000
--- a/android/libs/MogaStubs/com/bda/controller/MotionEvent.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package com.bda.controller;
-
-public class MotionEvent {
- public static final int AXIS_X = 0;
- public static final int AXIS_Y = 1;
- public static final int AXIS_Z = 2;
- public static final int AXIS_RZ = 3;
- public static final int AXIS_LTRIGGER = 4;
- public static final int AXIS_RTRIGGER = 5;
-
- public int getAxisValue(int val) {
- return 0;
- }
-}
diff --git a/android/libs/MogaStubs/com/bda/controller/StateEvent.java b/android/libs/MogaStubs/com/bda/controller/StateEvent.java
deleted file mode 100644
index 230e8b7172..0000000000
--- a/android/libs/MogaStubs/com/bda/controller/StateEvent.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.bda.controller;
-
-public class StateEvent {
- public static final int STATE_POWER_LOW = 0;
- public static final int STATE_CONNECTION = 1;
-
- public static final int ACTION_FALSE = 0;
- public static final int ACTION_TRUE = 1;
- public static final int ACTION_DISCONNECTED = 2;
- public static final int ACTION_CONNECTING = 3;
- public static final int ACTION_CONNECTED = 4;
-
- public int getAction() {
- return 0;
- }
- public int getState() {
- return 0;
- }
-}
diff --git a/android/libs/com.bda.controller.jar b/android/libs/com.bda.controller.jar
deleted file mode 100644
index f71dbece34..0000000000
Binary files a/android/libs/com.bda.controller.jar and /dev/null differ
diff --git a/android/src/org/ppsspp/ppsspp/MogaHack.java b/android/src/org/ppsspp/ppsspp/MogaHack.java
deleted file mode 100644
index 9b09d3a86e..0000000000
--- a/android/src/org/ppsspp/ppsspp/MogaHack.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/**
- * Mupen64PlusAE, an N64 emulator for the Android platform
- *
- * Copyright (C) 2013 Paul Lamb
- *
- * This file is part of Mupen64PlusAE.
- *
- * Mupen64PlusAE is free software: you can redistribute it and/or modify it under the terms of the
- * GNU General Public License as published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * Mupen64PlusAE is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
- * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with Mupen64PlusAE. If
- * not, see .
- *
- * Authors: Paul Lamb
- */
-package org.ppsspp.ppsspp;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ResolveInfo;
-import android.content.pm.ServiceInfo;
-import android.os.Build;
-import android.util.Log;
-import com.bda.controller.Controller;
-import com.bda.controller.IControllerService;
-import java.util.List;
-
-/**
- * Temporary hack for crash in MOGA library on Lollipop. This hack can be removed once MOGA fixes
- * their library. The actual issue is caused by the use of implicit service intents, which are
- * illegal in Lollipop, as seen in the logcat message below.
- *
- *
- * {@code Service Intent must be explicit: Intent { act=com.bda.controller.IControllerService } }
- *
- *
- * @see MOGA developer site
- * @see
- * Discussion on explicit intents
- */
-public class MogaHack {
- public static void init(Controller controller, Context context) {
- if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
- controller.init();
- return;
- }
- try {
- boolean mIsBound = false;
- java.lang.reflect.Field fIsBound = null;
- android.content.ServiceConnection mServiceConnection = null;
- java.lang.reflect.Field fServiceConnection = null;
-
- Class> cMogaController = controller.getClass();
- fIsBound = cMogaController.getDeclaredField("mIsBound");
- fIsBound.setAccessible(true);
- mIsBound = fIsBound.getBoolean(controller);
- fServiceConnection = cMogaController.getDeclaredField("mServiceConnection");
- fServiceConnection.setAccessible(true);
- mServiceConnection = (android.content.ServiceConnection) fServiceConnection.get(controller);
-
- if ((!mIsBound) && (mServiceConnection != null)) {
- // Convert implicit intent to explicit intent, see http://stackoverflow.com/a/26318757
- Intent intent = new Intent(IControllerService.class.getName());
- List resolveInfos = context.getPackageManager().queryIntentServices(intent, 0);
- if (resolveInfos.size() != 1) {
- // What? this doesn't do anything.
- // Log.e("MogaHack", "Somebody is trying to intercept our intent. Disabling MOGA controller for security.");
- }
- ServiceInfo serviceInfo = resolveInfos.get(0).serviceInfo;
- String packageName = serviceInfo.packageName;
- String className = serviceInfo.name;
- intent.setComponent(new ComponentName(packageName, className));
-
- // Start the service explicitly
- context.startService(intent);
- context.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE );
- try {
- fIsBound.setBoolean(controller, true);
- } catch (IllegalAccessException e) {
- Log.e("MogaHack", "MOGA Lollipop Hack IllegalAccessException (set)", e);
- } catch (IllegalArgumentException e) {
- Log.e("MogaHack", "MOGA Lollipop Hack IllegalArgumentException (set)", e);
- }
- }
- } catch (NoSuchFieldException e) {
- Log.e("MogaHack", "MOGA Lollipop Hack NoSuchFieldException (get)", e);
- } catch (IllegalAccessException e) {
- Log.e("MogaHack", "MOGA Lollipop Hack IllegalAccessException (get)", e);
- } catch (IllegalArgumentException e) {
- Log.e("MogaHack", "MOGA Lollipop Hack IllegalArgumentException (get)", e);
- } catch (Exception e) {
- Log.e("MogaHack", "MOGA", e);
- }
- }
-}
diff --git a/android/src/org/ppsspp/ppsspp/NativeActivity.java b/android/src/org/ppsspp/ppsspp/NativeActivity.java
index e85581d1f0..76f332175d 100644
--- a/android/src/org/ppsspp/ppsspp/NativeActivity.java
+++ b/android/src/org/ppsspp/ppsspp/NativeActivity.java
@@ -755,15 +755,9 @@ public abstract class NativeActivity extends Activity {
nativeRenderer = null;
}
}
- if (mGLSurfaceView != null) {
- mGLSurfaceView.onDestroy();
- mGLSurfaceView = null;
- }
+ mGLSurfaceView = null;
} else {
- if (mSurfaceView != null) {
- mSurfaceView.onDestroy();
- mSurfaceView = null;
- }
+ mSurfaceView = null;
mSurface = null;
}
diff --git a/android/src/org/ppsspp/ppsspp/NativeGLView.java b/android/src/org/ppsspp/ppsspp/NativeGLView.java
index 7bbdd31712..67b27ce541 100644
--- a/android/src/org/ppsspp/ppsspp/NativeGLView.java
+++ b/android/src/org/ppsspp/ppsspp/NativeGLView.java
@@ -18,20 +18,11 @@ import android.util.Log;
import android.view.InputDevice;
import android.view.MotionEvent;
-import com.bda.controller.Controller;
-import com.bda.controller.ControllerListener;
-import com.bda.controller.KeyEvent;
-import com.bda.controller.StateEvent;
-
-public class NativeGLView extends GLSurfaceView implements SensorEventListener, ControllerListener {
+public class NativeGLView extends GLSurfaceView implements SensorEventListener {
private final static String TAG = "NativeGLView";
private final SensorManager mSensorManager;
private final Sensor mAccelerometer;
- // Moga controller
- private final Controller mController;
- private boolean isMogaPro = false;
-
NativeActivity mActivity;
public NativeGLView(NativeActivity activity) {
@@ -40,16 +31,6 @@ public class NativeGLView extends GLSurfaceView implements SensorEventListener,
mSensorManager = (SensorManager) activity.getSystemService(Activity.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
-
- mController = Controller.getInstance(activity);
-
- try {
- MogaHack.init(mController, activity);
- Log.i(TAG, "MOGA initialized");
- mController.setListener(this, new Handler());
- } catch (Exception e) {
- // Log.d(TAG, "MOGA failed to initialize");
- }
}
private int getToolType(final MotionEvent ev, int pointer) {
@@ -149,119 +130,11 @@ public class NativeGLView extends GLSurfaceView implements SensorEventListener,
public void onPause() {
super.onPause();
mSensorManager.unregisterListener(this);
- if (mController != null) {
- mController.onPause();
- }
}
@Override
public void onResume() {
super.onResume();
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME);
- if (mController != null) {
- mController.onResume();
- // According to the docs, the Moga's state can be inconsistent here.
- // We should do a one time poll. TODO
- }
- }
-
- public void onDestroy() {
- if (mController != null) {
- mController.exit();
- }
- }
-
- // MOGA Controller - from ControllerListener
- @Override
- public void onKeyEvent(KeyEvent event) {
- // The Moga left stick doubles as a D-pad. This creates mapping conflicts so let's turn it off.
- // Unfortunately this breaks menu navigation in PPSSPP currently but meh.
- // This is different on Moga Pro though.
-
- if (!isMogaPro) {
- switch (event.getKeyCode()) {
- case KeyEvent.KEYCODE_DPAD_DOWN:
- case KeyEvent.KEYCODE_DPAD_UP:
- case KeyEvent.KEYCODE_DPAD_LEFT:
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- return;
- default:
- break;
- }
- }
-
- boolean repeat = false; // Moga has no repeats?
- switch (event.getAction()) {
- case KeyEvent.ACTION_DOWN:
- NativeApp.keyDown(NativeApp.DEVICE_ID_PAD_0, event.getKeyCode(), repeat);
- break;
- case KeyEvent.ACTION_UP:
- NativeApp.keyUp(NativeApp.DEVICE_ID_PAD_0, event.getKeyCode());
- break;
- }
- }
-
- // MOGA Controller - from ControllerListener
- @Override
- public void onMotionEvent(com.bda.controller.MotionEvent event) {
- int [] axisIds = new int[]{
- com.bda.controller.MotionEvent.AXIS_X,
- com.bda.controller.MotionEvent.AXIS_Y,
- com.bda.controller.MotionEvent.AXIS_Z,
- com.bda.controller.MotionEvent.AXIS_RZ,
- com.bda.controller.MotionEvent.AXIS_LTRIGGER,
- com.bda.controller.MotionEvent.AXIS_RTRIGGER,
- };
- float [] values = new float[]{
- event.getAxisValue(com.bda.controller.MotionEvent.AXIS_X),
- event.getAxisValue(com.bda.controller.MotionEvent.AXIS_Y),
- event.getAxisValue(com.bda.controller.MotionEvent.AXIS_Z),
- event.getAxisValue(com.bda.controller.MotionEvent.AXIS_RZ),
- event.getAxisValue(com.bda.controller.MotionEvent.AXIS_LTRIGGER),
- event.getAxisValue(com.bda.controller.MotionEvent.AXIS_RTRIGGER),
- };
- NativeApp.joystickAxis(NativeApp.DEVICE_ID_PAD_0, axisIds, values, 6);
- }
-
- // MOGA Controller - from ControllerListener
- @Override
- public void onStateEvent(StateEvent state) {
- switch (state.getState()) {
- case StateEvent.STATE_CONNECTION:
- switch (state.getAction()) {
- case StateEvent.ACTION_CONNECTED:
- Log.i(TAG, "Moga Connected");
- if (mController.getState(Controller.STATE_CURRENT_PRODUCT_VERSION) == Controller.ACTION_VERSION_MOGA) {
- NativeApp.sendMessageFromJava("moga", "Moga");
- } else {
- Log.i(TAG, "MOGA Pro detected");
- isMogaPro = true;
- NativeApp.sendMessageFromJava("moga", "MogaPro");
- }
- break;
- case StateEvent.ACTION_CONNECTING:
- Log.i(TAG, "Moga Connecting...");
- break;
- case StateEvent.ACTION_DISCONNECTED:
- Log.i(TAG, "Moga Disconnected (or simply Not connected)");
- NativeApp.sendMessageFromJava("moga", "");
- break;
- }
- break;
-
- case StateEvent.STATE_POWER_LOW:
- switch (state.getAction()) {
- case StateEvent.ACTION_TRUE:
- Log.i(TAG, "Moga Power Low");
- break;
- case StateEvent.ACTION_FALSE:
- Log.i(TAG, "Moga Power OK");
- break;
- }
- break;
-
- default:
- break;
- }
}
}
diff --git a/android/src/org/ppsspp/ppsspp/NativeSurfaceView.java b/android/src/org/ppsspp/ppsspp/NativeSurfaceView.java
index c5878f2117..d84f198a07 100644
--- a/android/src/org/ppsspp/ppsspp/NativeSurfaceView.java
+++ b/android/src/org/ppsspp/ppsspp/NativeSurfaceView.java
@@ -21,20 +21,11 @@ import android.view.SurfaceView;
import androidx.annotation.RequiresApi;
-import com.bda.controller.Controller;
-import com.bda.controller.ControllerListener;
-import com.bda.controller.KeyEvent;
-import com.bda.controller.StateEvent;
-
-public class NativeSurfaceView extends SurfaceView implements SensorEventListener, ControllerListener {
+public class NativeSurfaceView extends SurfaceView implements SensorEventListener {
private static final String TAG = "NativeSurfaceView";
private final SensorManager mSensorManager;
private final Sensor mAccelerometer;
- // Moga controller
- private final Controller mController;
- private boolean isMogaPro = false;
-
public NativeSurfaceView(NativeActivity activity) {
super(activity);
@@ -42,16 +33,6 @@ public class NativeSurfaceView extends SurfaceView implements SensorEventListene
mSensorManager = (SensorManager) activity.getSystemService(Activity.SENSOR_SERVICE);
mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
-
- mController = Controller.getInstance(activity);
-
- try {
- MogaHack.init(mController, activity);
- Log.i(TAG, "MOGA initialized");
- mController.setListener(this, new Handler());
- } catch (Exception e) {
- // Ignore.
- }
}
private int getToolType(final MotionEvent ev, int pointer) {
@@ -170,118 +151,9 @@ public class NativeSurfaceView extends SurfaceView implements SensorEventListene
public void onPause() {
mSensorManager.unregisterListener(this);
- if (mController != null) {
- mController.onPause();
- }
}
public void onResume() {
mSensorManager.registerListener(this, mAccelerometer, SensorManager.SENSOR_DELAY_GAME);
- if (mController != null) {
- mController.onResume();
- // According to the docs, the Moga's state can be inconsistent here.
- // Should we do a one time poll?
- }
- }
-
- public void onDestroy() {
- if (mController != null) {
- mController.exit();
- }
- }
-
- // MOGA Controller - from ControllerListener
- @Override
- public void onKeyEvent(KeyEvent event) {
- // The Moga left stick doubles as a D-pad. This creates mapping conflicts so let's turn it off.
- // Unfortunately this breaks menu navigation in PPSSPP currently but meh.
- // This is different on Moga Pro though.
-
- if (!isMogaPro) {
- switch (event.getKeyCode()) {
- case KeyEvent.KEYCODE_DPAD_DOWN:
- case KeyEvent.KEYCODE_DPAD_UP:
- case KeyEvent.KEYCODE_DPAD_LEFT:
- case KeyEvent.KEYCODE_DPAD_RIGHT:
- return;
- default:
- break;
- }
- }
-
- boolean repeat = false; // Moga has no repeats?
- switch (event.getAction()) {
- case KeyEvent.ACTION_DOWN:
- NativeApp.keyDown(NativeApp.DEVICE_ID_PAD_0, event.getKeyCode(), repeat);
- break;
- case KeyEvent.ACTION_UP:
- NativeApp.keyUp(NativeApp.DEVICE_ID_PAD_0, event.getKeyCode());
- break;
- }
- }
-
- // MOGA Controller - from ControllerListener
- @Override
- public void onMotionEvent(com.bda.controller.MotionEvent event) {
- int [] axisIds = new int[]{
- com.bda.controller.MotionEvent.AXIS_X,
- com.bda.controller.MotionEvent.AXIS_Y,
- com.bda.controller.MotionEvent.AXIS_Z,
- com.bda.controller.MotionEvent.AXIS_RZ,
- com.bda.controller.MotionEvent.AXIS_LTRIGGER,
- com.bda.controller.MotionEvent.AXIS_RTRIGGER,
- };
- float [] values = new float[]{
- event.getAxisValue(com.bda.controller.MotionEvent.AXIS_X),
- event.getAxisValue(com.bda.controller.MotionEvent.AXIS_Y),
- event.getAxisValue(com.bda.controller.MotionEvent.AXIS_Z),
- event.getAxisValue(com.bda.controller.MotionEvent.AXIS_RZ),
- event.getAxisValue(com.bda.controller.MotionEvent.AXIS_LTRIGGER),
- event.getAxisValue(com.bda.controller.MotionEvent.AXIS_RTRIGGER),
- };
-
- NativeApp.joystickAxis(NativeApp.DEVICE_ID_PAD_0, axisIds, values, 6);
- }
-
- // MOGA Controller - from ControllerListener
- @Override
- public void onStateEvent(StateEvent state) {
- switch (state.getState()) {
- case StateEvent.STATE_CONNECTION:
- switch (state.getAction()) {
- case StateEvent.ACTION_CONNECTED:
- Log.i(TAG, "Moga Connected");
- if (mController.getState(Controller.STATE_CURRENT_PRODUCT_VERSION) == Controller.ACTION_VERSION_MOGA) {
- NativeApp.sendMessageFromJava("moga", "Moga");
- } else {
- Log.i(TAG, "MOGA Pro detected");
- isMogaPro = true;
- NativeApp.sendMessageFromJava("moga", "MogaPro");
- }
- break;
- case StateEvent.ACTION_CONNECTING:
- Log.i(TAG, "Moga Connecting...");
- break;
- case StateEvent.ACTION_DISCONNECTED:
- Log.i(TAG, "Moga Disconnected (or simply Not connected)");
- NativeApp.sendMessageFromJava("moga", "");
- break;
- }
- break;
-
- case StateEvent.STATE_POWER_LOW:
- switch (state.getAction()) {
- case StateEvent.ACTION_TRUE:
- Log.i(TAG, "Moga Power Low");
- break;
- case StateEvent.ACTION_FALSE:
- Log.i(TAG, "Moga Power OK");
- break;
- }
- break;
-
- default:
- break;
- }
}
}