From 6beed305245c0a3d4ecb020ce8e41a27e32beeb5 Mon Sep 17 00:00:00 2001 From: Lars Bergstrom Date: Thu, 9 Jun 2016 15:32:51 -0500 Subject: [PATCH] Add very simple Android browser page load support --- resources/android_params | 1 + support/android/apk/AndroidManifest.xml | 22 +++++++ .../src/com/mozilla/servo/MainActivity.java | 58 ++++++++++++++++++- 3 files changed, 80 insertions(+), 1 deletion(-) diff --git a/resources/android_params b/resources/android_params index 17775237c00..81026559f37 100644 --- a/resources/android_params +++ b/resources/android_params @@ -6,4 +6,5 @@ # lines (the "-p" and "10" are separate even though they are related). servo +-w http://en.wikipedia.org/wiki/Rust 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 @@ + + + + + + + + + + + + + + + + + + + + + + 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); } }