Merge pull request #50108 from madmiraal/android-use-lambdas-3.x

[3.x] Replace single method anonymous classes with lambdas in Godot Java code
This commit is contained in:
Rémi Verschelde 2021-07-06 18:10:45 +02:00 committed by GitHub
commit 009aa63a57
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 120 additions and 244 deletions

View file

@ -366,46 +366,35 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
edittext.setView(mView); edittext.setView(mView);
io.setEdit(edittext); io.setEdit(edittext);
mView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { mView.getViewTreeObserver().addOnGlobalLayoutListener(() -> {
@Override Point fullSize = new Point();
public void onGlobalLayout() { activity.getWindowManager().getDefaultDisplay().getSize(fullSize);
Point fullSize = new Point(); Rect gameSize = new Rect();
activity.getWindowManager().getDefaultDisplay().getSize(fullSize); mView.getWindowVisibleDisplayFrame(gameSize);
Rect gameSize = new Rect(); final int keyboardHeight = fullSize.y - gameSize.bottom;
mView.getWindowVisibleDisplayFrame(gameSize); GodotLib.setVirtualKeyboardHeight(keyboardHeight);
final int keyboardHeight = fullSize.y - gameSize.bottom;
GodotLib.setVirtualKeyboardHeight(keyboardHeight);
}
}); });
final String[] current_command_line = command_line; final String[] current_command_line = command_line;
mView.queueEvent(new Runnable() { mView.queueEvent(() -> {
@Override GodotLib.setup(current_command_line);
public void run() {
GodotLib.setup(current_command_line);
// Must occur after GodotLib.setup has completed. // Must occur after GodotLib.setup has completed.
for (GodotPlugin plugin : pluginRegistry.getAllPlugins()) { for (GodotPlugin plugin : pluginRegistry.getAllPlugins()) {
plugin.onRegisterPluginWithGodotNative(); plugin.onRegisterPluginWithGodotNative();
}
setKeepScreenOn("True".equals(GodotLib.getGlobal("display/window/energy_saving/keep_screen_on")));
// The Godot Android plugins are setup on completion of GodotLib.setup
mainThreadHandler.post(new Runnable() {
@Override
public void run() {
// Include the non-null views returned in the Godot view hierarchy.
for (int i = 0; i < singleton_count; i++) {
View view = singletons[i].onMainCreateView(activity);
if (view != null) {
containerLayout.addView(view);
}
}
}
});
} }
setKeepScreenOn("True".equals(GodotLib.getGlobal("display/window/energy_saving/keep_screen_on")));
// The Godot Android plugins are setup on completion of GodotLib.setup
mainThreadHandler.post(() -> {
// Include the non-null views returned in the Godot view hierarchy.
for (int i = 0; i < singleton_count; i++) {
View view = singletons[i].onMainCreateView(activity);
if (view != null) {
containerLayout.addView(view);
}
}
});
}); });
// Include the returned non-null views in the Godot view hierarchy. // Include the returned non-null views in the Godot view hierarchy.
@ -418,14 +407,11 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
} }
public void setKeepScreenOn(final boolean p_enabled) { public void setKeepScreenOn(final boolean p_enabled) {
runOnUiThread(new Runnable() { runOnUiThread(() -> {
@Override if (p_enabled) {
public void run() { getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
if (p_enabled) { } else {
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
} else {
getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
} }
}); });
} }
@ -472,21 +458,14 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
public void alert(final String message, final String title) { public void alert(final String message, final String title) {
final Activity activity = getActivity(); final Activity activity = getActivity();
runOnUiThread(new Runnable() { runOnUiThread(() -> {
@Override AlertDialog.Builder builder = new AlertDialog.Builder(activity);
public void run() { builder.setMessage(message).setTitle(title);
AlertDialog.Builder builder = new AlertDialog.Builder(activity); builder.setPositiveButton(
builder.setMessage(message).setTitle(title); "OK",
builder.setPositiveButton( (dialog, id) -> dialog.cancel());
"OK", AlertDialog dialog = builder.create();
new DialogInterface.OnClickListener() { dialog.show();
public void onClick(DialogInterface dialog, int id) {
dialog.cancel();
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
}); });
} }
@ -866,19 +845,16 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
public void UiChangeListener() { public void UiChangeListener() {
final View decorView = getActivity().getWindow().getDecorView(); final View decorView = getActivity().getWindow().getDecorView();
decorView.setOnSystemUiVisibilityChangeListener(new View.OnSystemUiVisibilityChangeListener() { decorView.setOnSystemUiVisibilityChangeListener(visibility -> {
@Override if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) {
public void onSystemUiVisibilityChange(int visibility) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if ((visibility & View.SYSTEM_UI_FLAG_FULLSCREEN) == 0) { decorView.setSystemUiVisibility(
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { View.SYSTEM_UI_FLAG_LAYOUT_STABLE |
decorView.setSystemUiVisibility( View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |
View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION |
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_FULLSCREEN |
View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
View.SYSTEM_UI_FLAG_FULLSCREEN |
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
}
} }
} }
}); });
@ -909,21 +885,18 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
final int typeOfSensor = event.sensor.getType(); final int typeOfSensor = event.sensor.getType();
if (mView != null) { if (mView != null) {
mView.queueEvent(new Runnable() { mView.queueEvent(() -> {
@Override if (typeOfSensor == Sensor.TYPE_ACCELEROMETER) {
public void run() { GodotLib.accelerometer(-x, y, -z);
if (typeOfSensor == Sensor.TYPE_ACCELEROMETER) { }
GodotLib.accelerometer(-x, y, -z); if (typeOfSensor == Sensor.TYPE_GRAVITY) {
} GodotLib.gravity(-x, y, -z);
if (typeOfSensor == Sensor.TYPE_GRAVITY) { }
GodotLib.gravity(-x, y, -z); if (typeOfSensor == Sensor.TYPE_MAGNETIC_FIELD) {
} GodotLib.magnetometer(-x, y, -z);
if (typeOfSensor == Sensor.TYPE_MAGNETIC_FIELD) { }
GodotLib.magnetometer(-x, y, -z); if (typeOfSensor == Sensor.TYPE_GYROSCOPE) {
} GodotLib.gyroscope(x, -y, z);
if (typeOfSensor == Sensor.TYPE_GYROSCOPE) {
GodotLib.gyroscope(x, -y, z);
}
} }
}); });
} }
@ -965,12 +938,7 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
} }
if (shouldQuit && mView != null) { if (shouldQuit && mView != null) {
mView.queueEvent(new Runnable() { mView.queueEvent(GodotLib::back);
@Override
public void run() {
GodotLib.back();
}
});
} }
} }
@ -1047,16 +1015,14 @@ public class Godot extends Fragment implements SensorEventListener, IDownloaderC
; ;
if (cnt == 0) if (cnt == 0)
return false; return false;
mView.queueEvent(new Runnable() { // This method will be called on the rendering thread:
// This method will be called on the rendering thread: mView.queueEvent(() -> {
public void run() { for (int i = 0, n = cc.length; i < n; i++) {
for (int i = 0, n = cc.length; i < n; i++) { int keyCode;
int keyCode; if ((keyCode = cc[i]) != 0) {
if ((keyCode = cc[i]) != 0) { // Simulate key down and up...
// Simulate key down and up... GodotLib.key(0, 0, keyCode, true);
GodotLib.key(0, 0, keyCode, true); GodotLib.key(0, 0, keyCode, false);
GodotLib.key(0, 0, keyCode, false);
}
} }
} }
}); });

View file

@ -184,13 +184,10 @@ public class GodotView extends GLSurfaceView {
public void onResume() { public void onResume() {
super.onResume(); super.onResume();
queueEvent(new Runnable() { queueEvent(() -> {
@Override // Resume the renderer
public void run() { godotRenderer.onActivityResumed();
// Resume the renderer GodotLib.focusin();
godotRenderer.onActivityResumed();
GodotLib.focusin();
}
}); });
} }
@ -198,13 +195,10 @@ public class GodotView extends GLSurfaceView {
public void onPause() { public void onPause() {
super.onPause(); super.onPause();
queueEvent(new Runnable() { queueEvent(() -> {
@Override GodotLib.focusout();
public void run() { // Pause the renderer
GodotLib.focusout(); godotRenderer.onActivityPaused();
// Pause the renderer
godotRenderer.onActivityPaused();
}
}); });
} }
} }

View file

@ -75,12 +75,7 @@ public class GodotGestureHandler extends GestureDetector.SimpleOnGestureListener
final int x = Math.round(event.getX()); final int x = Math.round(event.getX());
final int y = Math.round(event.getY()); final int y = Math.round(event.getY());
final int buttonMask = event.getButtonState(); final int buttonMask = event.getButtonState();
queueEvent(new Runnable() { queueEvent(() -> GodotLib.doubleTap(buttonMask, x, y));
@Override
public void run() {
GodotLib.doubleTap(buttonMask, x, y);
}
});
return true; return true;
} }
@ -89,12 +84,7 @@ public class GodotGestureHandler extends GestureDetector.SimpleOnGestureListener
//Log.i("GodotGesture", "onScroll"); //Log.i("GodotGesture", "onScroll");
final int x = Math.round(distanceX); final int x = Math.round(distanceX);
final int y = Math.round(distanceY); final int y = Math.round(distanceY);
queueEvent(new Runnable() { queueEvent(() -> GodotLib.scroll(x, y));
@Override
public void run() {
GodotLib.scroll(x, y);
}
});
return true; return true;
} }

View file

@ -97,22 +97,12 @@ public class GodotInputHandler implements InputDeviceListener {
final int button = getGodotButton(keyCode); final int button = getGodotButton(keyCode);
final int godotJoyId = mJoystickIds.get(deviceId); final int godotJoyId = mJoystickIds.get(deviceId);
queueEvent(new Runnable() { queueEvent(() -> GodotLib.joybutton(godotJoyId, button, false));
@Override
public void run() {
GodotLib.joybutton(godotJoyId, button, false);
}
});
} }
} else { } else {
final int scanCode = event.getScanCode(); final int scanCode = event.getScanCode();
final int chr = event.getUnicodeChar(0); final int chr = event.getUnicodeChar(0);
queueEvent(new Runnable() { queueEvent(() -> GodotLib.key(keyCode, scanCode, chr, false));
@Override
public void run() {
GodotLib.key(keyCode, scanCode, chr, false);
}
});
}; };
return true; return true;
@ -143,22 +133,12 @@ public class GodotInputHandler implements InputDeviceListener {
final int button = getGodotButton(keyCode); final int button = getGodotButton(keyCode);
final int godotJoyId = mJoystickIds.get(deviceId); final int godotJoyId = mJoystickIds.get(deviceId);
queueEvent(new Runnable() { queueEvent(() -> GodotLib.joybutton(godotJoyId, button, true));
@Override
public void run() {
GodotLib.joybutton(godotJoyId, button, true);
}
});
} }
} else { } else {
final int scanCode = event.getScanCode(); final int scanCode = event.getScanCode();
final int chr = event.getUnicodeChar(0); final int chr = event.getUnicodeChar(0);
queueEvent(new Runnable() { queueEvent(() -> GodotLib.key(keyCode, scanCode, chr, true));
@Override
public void run() {
GodotLib.key(keyCode, scanCode, chr, true);
}
});
} }
return true; return true;
@ -190,19 +170,16 @@ public class GodotInputHandler implements InputDeviceListener {
final int action = event.getActionMasked(); final int action = event.getActionMasked();
final int pointer_idx = event.getPointerId(event.getActionIndex()); final int pointer_idx = event.getPointerId(event.getActionIndex());
godotView.queueEvent(new Runnable() { godotView.queueEvent(() -> {
@Override switch (action) {
public void run() { case MotionEvent.ACTION_DOWN:
switch (action) { case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_DOWN: case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP: case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_POINTER_DOWN: {
case MotionEvent.ACTION_POINTER_UP: GodotLib.touch(event.getSource(), action, pointer_idx, evcount, arr);
case MotionEvent.ACTION_POINTER_DOWN: { } break;
GodotLib.touch(event.getSource(), action, pointer_idx, evcount, arr);
} break;
}
} }
}); });
} }
@ -228,13 +205,7 @@ public class GodotInputHandler implements InputDeviceListener {
// save value to prevent repeats // save value to prevent repeats
joystick.axesValues.put(axis, value); joystick.axesValues.put(axis, value);
final int godotAxisIdx = i; final int godotAxisIdx = i;
queueEvent(new Runnable() { queueEvent(() -> GodotLib.joyaxis(godotJoyId, godotAxisIdx, value));
@Override
public void run() {
GodotLib.joyaxis(godotJoyId, godotAxisIdx, value);
//Log.i(tag, "GodotLib.joyaxis("+godotJoyId+", "+godotAxisIdx+", "+value+");");
}
});
} }
} }
@ -244,13 +215,7 @@ public class GodotInputHandler implements InputDeviceListener {
if (joystick.hatX != hatX || joystick.hatY != hatY) { if (joystick.hatX != hatX || joystick.hatY != hatY) {
joystick.hatX = hatX; joystick.hatX = hatX;
joystick.hatY = hatY; joystick.hatY = hatY;
queueEvent(new Runnable() { queueEvent(() -> GodotLib.joyhat(godotJoyId, hatX, hatY));
@Override
public void run() {
GodotLib.joyhat(godotJoyId, hatX, hatY);
//Log.i(tag, "GodotLib.joyhat("+godotJoyId+", "+hatX+", "+hatY+");");
}
});
} }
} }
return true; return true;
@ -259,12 +224,7 @@ public class GodotInputHandler implements InputDeviceListener {
final float x = event.getX(); final float x = event.getX();
final float y = event.getY(); final float y = event.getY();
final int type = event.getAction(); final int type = event.getAction();
queueEvent(new Runnable() { queueEvent(() -> GodotLib.hover(type, x, y));
@Override
public void run() {
GodotLib.hover(type, x, y);
}
});
return true; return true;
} else if ((event.isFromSource(InputDevice.SOURCE_MOUSE))) { } else if ((event.isFromSource(InputDevice.SOURCE_MOUSE))) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@ -355,12 +315,7 @@ public class GodotInputHandler implements InputDeviceListener {
} }
mJoysticksDevices.put(deviceId, joystick); mJoysticksDevices.put(deviceId, joystick);
queueEvent(new Runnable() { queueEvent(() -> GodotLib.joyconnectionchanged(id, true, joystick.name));
@Override
public void run() {
GodotLib.joyconnectionchanged(id, true, joystick.name);
}
});
} }
@Override @Override
@ -373,12 +328,7 @@ public class GodotInputHandler implements InputDeviceListener {
mJoystickIds.delete(deviceId); mJoystickIds.delete(deviceId);
mJoysticksDevices.delete(deviceId); mJoysticksDevices.delete(deviceId);
queueEvent(new Runnable() { queueEvent(() -> GodotLib.joyconnectionchanged(godotJoyId, false, ""));
@Override
public void run() {
GodotLib.joyconnectionchanged(godotJoyId, false, "");
}
});
} }
@Override @Override
@ -467,12 +417,7 @@ public class GodotInputHandler implements InputDeviceListener {
final float x = event.getX(); final float x = event.getX();
final float y = event.getY(); final float y = event.getY();
final int type = event.getAction(); final int type = event.getAction();
queueEvent(new Runnable() { queueEvent(() -> GodotLib.hover(type, x, y));
@Override
public void run() {
GodotLib.hover(type, x, y);
}
});
return true; return true;
} }
case MotionEvent.ACTION_BUTTON_PRESS: case MotionEvent.ACTION_BUTTON_PRESS:
@ -482,12 +427,7 @@ public class GodotInputHandler implements InputDeviceListener {
final float y = event.getY(); final float y = event.getY();
final int buttonsMask = event.getButtonState(); final int buttonsMask = event.getButtonState();
final int action = event.getAction(); final int action = event.getAction();
queueEvent(new Runnable() { queueEvent(() -> GodotLib.touch(event.getSource(), action, 0, 1, new float[] { 0, x, y }, buttonsMask));
@Override
public void run() {
GodotLib.touch(event.getSource(), action, 0, 1, new float[] { 0, x, y }, buttonsMask);
}
});
return true; return true;
} }
case MotionEvent.ACTION_SCROLL: { case MotionEvent.ACTION_SCROLL: {
@ -497,12 +437,7 @@ public class GodotInputHandler implements InputDeviceListener {
final int action = event.getAction(); final int action = event.getAction();
final float verticalFactor = event.getAxisValue(MotionEvent.AXIS_VSCROLL); final float verticalFactor = event.getAxisValue(MotionEvent.AXIS_VSCROLL);
final float horizontalFactor = event.getAxisValue(MotionEvent.AXIS_HSCROLL); final float horizontalFactor = event.getAxisValue(MotionEvent.AXIS_HSCROLL);
queueEvent(new Runnable() { queueEvent(() -> GodotLib.touch(event.getSource(), action, 0, 1, new float[] { 0, x, y }, buttonsMask, verticalFactor, horizontalFactor));
@Override
public void run() {
GodotLib.touch(event.getSource(), action, 0, 1, new float[] { 0, x, y }, buttonsMask, verticalFactor, horizontalFactor);
}
});
} }
} }
return false; return false;

View file

@ -94,17 +94,14 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene
public void beforeTextChanged(final CharSequence pCharSequence, final int start, final int count, final int after) { public void beforeTextChanged(final CharSequence pCharSequence, final int start, final int count, final int after) {
//Log.d(TAG, "beforeTextChanged(" + pCharSequence + ")start: " + start + ",count: " + count + ",after: " + after); //Log.d(TAG, "beforeTextChanged(" + pCharSequence + ")start: " + start + ",count: " + count + ",after: " + after);
mView.queueEvent(new Runnable() { mView.queueEvent(() -> {
@Override for (int i = 0; i < count; ++i) {
public void run() { GodotLib.key(KeyEvent.KEYCODE_DEL, KeyEvent.KEYCODE_DEL, 0, true);
for (int i = 0; i < count; ++i) { GodotLib.key(KeyEvent.KEYCODE_DEL, KeyEvent.KEYCODE_DEL, 0, false);
GodotLib.key(KeyEvent.KEYCODE_DEL, KeyEvent.KEYCODE_DEL, 0, true);
GodotLib.key(KeyEvent.KEYCODE_DEL, KeyEvent.KEYCODE_DEL, 0, false);
if (mHasSelection) { if (mHasSelection) {
mHasSelection = false; mHasSelection = false;
break; break;
}
} }
} }
}); });
@ -118,18 +115,15 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene
for (int i = start; i < start + count; ++i) { for (int i = start; i < start + count; ++i) {
newChars[i - start] = pCharSequence.charAt(i); newChars[i - start] = pCharSequence.charAt(i);
} }
mView.queueEvent(new Runnable() { mView.queueEvent(() -> {
@Override for (int i = 0; i < count; ++i) {
public void run() { int key = newChars[i];
for (int i = 0; i < count; ++i) { if ((key == '\n') && !mEdit.isMultiline()) {
int key = newChars[i]; // Return keys are handled through action events
if ((key == '\n') && !mEdit.isMultiline()) { continue;
// Return keys are handled through action events
continue;
}
GodotLib.key(0, 0, key, true);
GodotLib.key(0, 0, key, false);
} }
GodotLib.key(0, 0, key, true);
GodotLib.key(0, 0, key, false);
} }
}); });
} }
@ -139,14 +133,11 @@ public class GodotTextInputWrapper implements TextWatcher, OnEditorActionListene
if (this.mEdit == pTextView && this.isFullScreenEdit()) { if (this.mEdit == pTextView && this.isFullScreenEdit()) {
final String characters = pKeyEvent.getCharacters(); final String characters = pKeyEvent.getCharacters();
mView.queueEvent(new Runnable() { mView.queueEvent(() -> {
@Override for (int i = 0; i < characters.length(); i++) {
public void run() { final int ch = characters.codePointAt(i);
for (int i = 0; i < characters.length(); i++) { GodotLib.key(0, 0, ch, true);
final int ch = characters.codePointAt(i); GodotLib.key(0, 0, ch, false);
GodotLib.key(0, 0, ch, true);
GodotLib.key(0, 0, ch, false);
}
} }
}); });
} }