Skip to content

Commit

Permalink
Auto merge of #11691 - larsbergstrom:android_load, r=mbrubeck
Browse files Browse the repository at this point in the history
Add very simple Android browser page load support

I've long had this set of private patches that enables actually demoing Servo on Android without having the device connected, but they're a bit hackish due to some current limitations in our windowing toolkit library. I'm considering committing them, though, as it makes the resulting APK *actually* somewhat usable.

Thoughts / r? @mbrubeck

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="35" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/11691)
<!-- Reviewable:end -->
  • Loading branch information
bors-servo committed Jun 10, 2016
2 parents 2cfef13 + 6beed30 commit 2b32ec4
Show file tree
Hide file tree
Showing 3 changed files with 80 additions and 1 deletion.
1 change: 1 addition & 0 deletions resources/android_params
Expand Up @@ -6,4 +6,5 @@
# lines (the "-p" and "10" are separate even though they are related).

servo
-w
http://en.wikipedia.org/wiki/Rust
22 changes: 22 additions & 0 deletions support/android/apk/AndroidManifest.xml
Expand Up @@ -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>

Expand Down
58 changes: 57 additions & 1 deletion 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);
}
}

0 comments on commit 2b32ec4

Please sign in to comment.