Android: Fix excessive getRotation calls

This commit is contained in:
Anish Mishra 2025-02-21 15:52:39 +05:30
parent 8ed125b429
commit ee4e809d4c
2 changed files with 18 additions and 1 deletions

View File

@ -664,6 +664,8 @@ class Godot(private val context: Context) {
* Configuration change callback
*/
fun onConfigurationChanged(newConfig: Configuration) {
renderView?.inputHandler?.onConfigurationChanged(newConfig)
val newDarkMode = newConfig.uiMode.and(Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES
if (darkMode != newDarkMode) {
darkMode = newDarkMode

View File

@ -37,6 +37,7 @@ import org.godotengine.godot.GodotLib;
import org.godotengine.godot.GodotRenderView;
import android.content.Context;
import android.content.res.Configuration;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
@ -86,6 +87,8 @@ public class GodotInputHandler implements InputManager.InputDeviceListener, Sens
private int rotaryInputAxis = ROTARY_INPUT_VERTICAL_AXIS;
private int cachedRotation = -1;
public GodotInputHandler(Context context, Godot godot) {
this.godot = godot;
mInputManager = (InputManager)context.getSystemService(Context.INPUT_SERVICE);
@ -741,10 +744,14 @@ public class GodotInputHandler implements InputManager.InputDeviceListener, Sens
return;
}
if (cachedRotation == -1) {
updateCachedRotation();
}
float rotatedValue0 = 0f;
float rotatedValue1 = 0f;
float rotatedValue2 = 0f;
switch (windowManager.getDefaultDisplay().getRotation()) {
switch (cachedRotation) {
case Surface.ROTATION_0:
rotatedValue0 = values[0];
rotatedValue1 = values[1];
@ -776,4 +783,12 @@ public class GodotInputHandler implements InputManager.InputDeviceListener, Sens
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {}
private void updateCachedRotation() {
cachedRotation = windowManager.getDefaultDisplay().getRotation();
}
public void onConfigurationChanged(Configuration newConfig) {
updateCachedRotation();
}
}