Browse Source

should fix the crash on startup

fysx 12 years ago
parent
commit
5e3579f680

+ 13 - 9
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;
 }

+ 8 - 0
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

+ 0 - 11
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;
-    }
-
 }