Browse Source

added code to support the upcoming love.system.openURL

fysx 11 years ago
parent
commit
cc829bdd1e

+ 15 - 0
jni/love/src/common/android.cpp

@@ -76,6 +76,21 @@ const char* getSelectedGameFile()
 	return path;
 	return path;
 }
 }
 
 
+bool openURL(const std::string &url)
+{
+	JNIEnv *env = (JNIEnv*) SDL_AndroidGetJNIEnv();
+	jclass activity = env->FindClass("org/love2d/android/GameActivity");
+
+	jmethodID openURL= env->GetStaticMethodID(activity, "openURL", "(Ljava/lang/String;)V");
+	jstring url_jstring = (jstring) env->NewStringUTF (url.c_str());
+
+	env->CallStaticVoidMethod (activity, openURL, url_jstring); 	
+
+	env->DeleteLocalRef (url_jstring);
+	env->DeleteLocalRef (activity);
+	return true;
+}
+
 } // android
 } // android
 } // love
 } // love
 
 

+ 4 - 0
jni/love/src/common/android.h

@@ -25,6 +25,8 @@
 
 
 #ifdef LOVE_ANDROID
 #ifdef LOVE_ANDROID
 
 
+#include <string>
+
 namespace love
 namespace love
 {
 {
 namespace android
 namespace android
@@ -41,6 +43,8 @@ double getScreenScale();
  **/
  **/
 const char* getSelectedGameFile();
 const char* getSelectedGameFile();
 
 
+bool openURL (const std::string &url);
+
 } // android
 } // android
 } // love
 } // love
 
 

+ 27 - 16
src/org/love2d/android/GameActivity.java

@@ -31,33 +31,44 @@ import android.widget.Toast;
 public class GameActivity extends SDLActivity {
 public class GameActivity extends SDLActivity {
     private static DisplayMetrics metrics = new DisplayMetrics();
     private static DisplayMetrics metrics = new DisplayMetrics();
     private static String gamePath = "";
     private static String gamePath = "";
-	
+    private static Context context;
+  
     @Override
     @Override
     protected void onCreate(Bundle savedInstanceState) {
     protected void onCreate(Bundle savedInstanceState) {
-    	Log.d("GameActivity", "started");
-    	
-        Uri game = this.getIntent().getData();
-        if (game != null) {
-          if (game.getScheme().equals ("file")) {
-            gamePath = game.getPath();
-          } else {
-            copyGameToCache (game);
-          }
-          Log.d("GameActivity", "Selected the file: " + getGamePath());
+      Log.d("GameActivity", "started");
+
+      context = this.getApplicationContext();
+
+      Uri game = this.getIntent().getData();
+      if (game != null) {
+        if (game.getScheme().equals ("file")) {
+          gamePath = game.getPath();
+        } else {
+          copyGameToCache (game);
         }
         }
-        
-        super.onCreate(savedInstanceState);
-        getWindowManager().getDefaultDisplay().getMetrics(metrics);
+        Log.d("GameActivity", "Selected the file: " + getGamePath());
+      }
+
+      super.onCreate(savedInstanceState);
+      getWindowManager().getDefaultDisplay().getMetrics(metrics);
     }
     }
 
 
     public static String getGamePath() {
     public static String getGamePath() {
-			Log.d ("GameActivity", "called getGamePath(), game path = " + gamePath);
+      Log.d ("GameActivity", "called getGamePath(), game path = " + gamePath);
         return gamePath;
         return gamePath;
     }
     }
 
 
-		public static DisplayMetrics getMetrics() {
+    public static DisplayMetrics getMetrics() {
         return metrics;
         return metrics;
     }
     }
+
+    public static void openURL (String url) {
+      Log.d ("GameActivity", "opening url = " + url);
+      Intent i = new Intent(Intent.ACTION_VIEW);
+      i.setData(Uri.parse(url));
+      i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+      context.startActivity(i);
+    }
   
   
     void copyGameToCache (Uri sourceuri)
     void copyGameToCache (Uri sourceuri)
     {
     {