diff --git a/jni/love/src/common/android.cpp b/jni/love/src/common/android.cpp index e1d4ccb9..f219436a 100644 --- a/jni/love/src/common/android.cpp +++ b/jni/love/src/common/android.cpp @@ -32,18 +32,22 @@ namespace android double getScreenScale() { - JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); + static double result = -1.; - jclass activity = (jclass) SDL_AndroidGetActivity(); - jmethodID getMetrics = env->GetStaticMethodID(activity, "getMetrics", "()Landroid/util/DisplayMetrics;"); - jobject metrics = env->CallStaticObjectMethod(activity, getMetrics); - jclass metricsClass = env->GetObjectClass(metrics); + if (result == -1.) { + JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv(); + jclass activity = env->FindClass("org/libsdl/app/SDLActivity"); - double result = env->GetFloatField(metrics, env->GetFieldID(metricsClass, "density", "F")); + jmethodID getMetrics = env->GetStaticMethodID(activity, "getMetrics", "()Landroid/util/DisplayMetrics;"); + jobject metrics = env->CallStaticObjectMethod(activity, getMetrics); + jclass metricsClass = env->GetObjectClass(metrics); - env->DeleteLocalRef (metricsClass); - env->DeleteLocalRef (metrics); - env->DeleteLocalRef (activity); + result = env->GetFloatField(metrics, env->GetFieldID(metricsClass, "density", "F")); + + env->DeleteLocalRef (metricsClass); + env->DeleteLocalRef (metrics); + env->DeleteLocalRef (activity); + } return result; } diff --git a/src/org/libsdl/app/SDLActivity.java b/src/org/libsdl/app/SDLActivity.java index d96c3b2c..df157e0a 100644 --- a/src/org/libsdl/app/SDLActivity.java +++ b/src/org/libsdl/app/SDLActivity.java @@ -12,6 +12,7 @@ import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; import android.widget.AbsoluteLayout; import android.os.*; +import android.util.DisplayMetrics; import android.util.Log; import android.graphics.*; import android.media.*; @@ -53,6 +54,11 @@ public class SDLActivity extends Activity { System.loadLibrary("love"); } + private static DisplayMetrics metrics = new DisplayMetrics(); + public static DisplayMetrics getMetrics() { + return metrics; + } + // Setup @Override protected void onCreate(Bundle savedInstanceState) { @@ -79,6 +85,8 @@ public class SDLActivity extends Activity { mLayout.addView(mSurface); setContentView(mLayout); + + getWindowManager().getDefaultDisplay().getMetrics(metrics); } // Events diff --git a/src/org/love2d/android/GameActivity.java b/src/org/love2d/android/GameActivity.java index ef9e9cb3..76b2d5ef 100644 --- a/src/org/love2d/android/GameActivity.java +++ b/src/org/love2d/android/GameActivity.java @@ -1,22 +1,11 @@ package org.love2d.android; import org.libsdl.app.SDLActivity; -import android.util.DisplayMetrics; import android.os.Bundle; public class GameActivity extends SDLActivity { - - private static DisplayMetrics metrics = new DisplayMetrics(); - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - - getWindowManager().getDefaultDisplay().getMetrics(metrics); } - - public static DisplayMetrics getMetrics() { - return metrics; - } - }