aboutsummaryrefslogtreecommitdiffstats
path: root/support
diff options
context:
space:
mode:
authorLars Bergstrom <lars@lars.com>2016-06-09 15:32:51 -0500
committerLars Bergstrom <lars@lars.com>2016-06-09 15:36:55 -0500
commit6beed305245c0a3d4ecb020ce8e41a27e32beeb5 (patch)
treec7371b717193a559d2f8ac333854a007ef9d850e /support
parent3acb9540ffdf1caa496e624de6661ec05f7d17b6 (diff)
downloadservo-6beed305245c0a3d4ecb020ce8e41a27e32beeb5.tar.gz
servo-6beed305245c0a3d4ecb020ce8e41a27e32beeb5.zip
Add very simple Android browser page load support
Diffstat (limited to 'support')
-rw-r--r--support/android/apk/AndroidManifest.xml22
-rw-r--r--support/android/apk/src/com/mozilla/servo/MainActivity.java58
2 files changed, 79 insertions, 1 deletions
diff --git a/support/android/apk/AndroidManifest.xml b/support/android/apk/AndroidManifest.xml
index 5f3a9e1ea5e..10e31d7ea83 100644
--- a/support/android/apk/AndroidManifest.xml
+++ b/support/android/apk/AndroidManifest.xml
@@ -20,6 +20,28 @@
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
+
+ <!-- Web browser intents -->
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+ <data android:scheme="http" />
+ <data android:scheme="https" />
+ <data android:scheme="data" />
+ <data android:scheme="javascript" />
+ </intent-filter>
+ <intent-filter>
+ <action android:name="android.intent.action.VIEW" />
+ <category android:name="android.intent.category.DEFAULT" />
+ <category android:name="android.intent.category.BROWSABLE" />
+ <data android:scheme="file" />
+ <data android:scheme="http" />
+ <data android:scheme="https" />
+ <data android:mimeType="text/html"/>
+ <data android:mimeType="text/plain"/>
+ <data android:mimeType="application/xhtml+xml"/>
+ </intent-filter>
</activity>
</application>
diff --git a/support/android/apk/src/com/mozilla/servo/MainActivity.java b/support/android/apk/src/com/mozilla/servo/MainActivity.java
index d99478ee3da..cb82e637dbf 100644
--- a/support/android/apk/src/com/mozilla/servo/MainActivity.java
+++ b/support/android/apk/src/com/mozilla/servo/MainActivity.java
@@ -1,8 +1,64 @@
package com.mozilla.servo;
+import android.app.NativeActivity;
+import android.content.Intent;
+import android.os.Bundle;
import android.util.Log;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.PrintStream;
+import java.lang.System;
+
public class MainActivity extends android.app.NativeActivity {
+ private static final String LOGTAG="servo_wrapper";
static {
- Log.i("servo_wrapper", "Loading the NativeActivity");
+ Log.i(LOGTAG, "Loading the NativeActivity");
+ }
+
+ private void set_url(String url) {
+ try {
+ PrintStream out = new PrintStream(new FileOutputStream("/sdcard/servo/android_params"));
+ out.println("# The first line here should be the \"servo\" argument (without quotes) and the");
+ out.println("# last should be the URL to load.");
+ out.println("# Blank lines and those beginning with a '#' are ignored.");
+ out.println("# Each line should be a separate parameter as would be parsed by the shell.");
+ out.println("# For example, \"servo -p 10 http://en.wikipedia.org/wiki/Rust\" would take 4");
+ out.println("# lines (the \"-p\" and \"10\" are separate even though they are related).");
+ out.println("servo");
+ out.println("-w");
+ String absUrl = url.replace("file:///storage/emulated/0/", "/sdcard/");
+ out.println(absUrl);
+ out.flush();
+ out.close();
+ } catch (FileNotFoundException e) {
+ }
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ final Intent intent = getIntent();
+ if (intent.getAction().equals(Intent.ACTION_VIEW)) {
+ final String url = intent.getDataString();
+ Log.d(LOGTAG, "Received url "+url);
+ set_url(url);
+ }
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop(); // Always call the superclass method first
+
+ Log.d(LOGTAG, "got onStop; finishing servo activity");
+ finish();
+
+ // Glutin and the Java wrapper libraries that we use currently do not support restoring
+ // Servo after Android has sent it to the background, as the resources were reclaimed.
+ // Until we either address that in glutin or move to a library that supports recreating
+ // the native resources after being restored, we just forcibly shut Servo down when it
+ // is sent to the background.
+ int pid = android.os.Process.myPid();
+ android.os.Process.killProcess(pid);
+ System.exit(0);
}
}