Bug 1258470 - Part 16: Add a geckoview_example Gradle project. r=jchen,snorp draft
authorNick Alexander <nalexander@mozilla.com>
Thu, 23 Jun 2016 11:47:20 -0700
changeset 381010 3734157d9c70d8a093b36882eff74738ee2346c1
parent 381009 696748091cd51accbcf78bd22a7cf518bf6d90bf
child 523873 75dab0c86cc4fcef6e500289fd1452f763f0327a
push id21383
push usernalexander@mozilla.com
push dateFri, 24 Jun 2016 00:16:43 +0000
reviewersjchen, snorp
bugs1258470
milestone50.0a1
Bug 1258470 - Part 16: Add a geckoview_example Gradle project. r=jchen,snorp MozReview-Commit-ID: BxlYO9bOAni
mobile/android/app/src/androidTest/AndroidManifest.xml
mobile/android/geckoview/src/main/AndroidManifest.xml
mobile/android/geckoview_example/.gitignore
mobile/android/geckoview_example/build.gradle
mobile/android/geckoview_example/proguard-rules.pro
mobile/android/geckoview_example/src/androidTest/java/org/mozilla/geckoview/GeckoViewActivityTest.java
mobile/android/geckoview_example/src/androidTest/java/org/mozilla/geckoview_example/ApplicationTest.java
mobile/android/geckoview_example/src/main/AndroidManifest.xml
mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/GeckoViewActivity.java
mobile/android/geckoview_example/src/main/res/layout/geckoview_activity.xml
mobile/android/geckoview_example/src/main/res/mipmap-hdpi/ic_launcher.png
mobile/android/geckoview_example/src/main/res/mipmap-mdpi/ic_launcher.png
mobile/android/geckoview_example/src/main/res/mipmap-xhdpi/ic_launcher.png
mobile/android/geckoview_example/src/main/res/mipmap-xxhdpi/ic_launcher.png
mobile/android/geckoview_example/src/main/res/mipmap-xxxhdpi/ic_launcher.png
mobile/android/geckoview_example/src/main/res/values/colors.xml
mobile/android/geckoview_example/src/main/res/values/strings.xml
mobile/android/geckoview_example/src/test/java/org/mozilla/geckoview_example/ExampleUnitTest.java
settings.gradle
--- a/mobile/android/app/src/androidTest/AndroidManifest.xml
+++ b/mobile/android/app/src/androidTest/AndroidManifest.xml
@@ -51,11 +51,17 @@
         <activity android:name="org.mozilla.gecko.LaunchFennecWithConfigurationActivity"
                   android:label="Robocop Fennec">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </activity>
 
+        <activity android:name="org.mozilla.geckoview.GeckoViewActivity"
+                  android:label="GeckoViewActivity">
+            <action android:name="android.intent.action.MAIN" />
+            <category android:name="android.intent.category.DEFAULT" />
+        </activity>
+
     </application>
 
 </manifest>
--- a/mobile/android/geckoview/src/main/AndroidManifest.xml
+++ b/mobile/android/geckoview/src/main/AndroidManifest.xml
@@ -1,4 +1,39 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="org.mozilla.gecko">
 
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+    <uses-permission android:name="android.permission.INTERNET"/>
+    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+    <!-- READ_EXTERNAL_STORAGE was added in API 16, and is only enforced in API
+         19+.  We declare it so that the bouncer APK and the main APK have the
+         same set of permissions. -->
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
+    <uses-permission android:name="com.android.launcher.permission.UNINSTALL_SHORTCUT"/>
+
+    <uses-permission android:name="android.permission.WAKE_LOCK"/>
+    <uses-permission android:name="android.permission.VIBRATE"/>
+
+    <uses-feature android:name="android.hardware.location" android:required="false"/>
+    <uses-feature android:name="android.hardware.location.gps" android:required="false"/>
+    <uses-feature android:name="android.hardware.touchscreen"/>
+
+    <!--#ifdef MOZ_WEBRTC-->
+    <!--<uses-permission android:name="android.permission.RECORD_AUDIO"/>-->
+    <!--<uses-feature android:name="android.hardware.audio.low_latency" android:required="false"/>-->
+    <!--<uses-feature android:name="android.hardware.camera.any" android:required="false"/>-->
+    <!--<uses-feature android:name="android.hardware.microphone" android:required="false"/>-->
+    <!--#endif-->
+
+    <uses-permission android:name="android.permission.CAMERA" />
+    <uses-feature android:name="android.hardware.camera" android:required="false"/>
+    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
+
+    <!-- App requires OpenGL ES 2.0 -->
+    <uses-feature android:glEsVersion="0x00020000" android:required="true" />
+
 </manifest>
new file mode 100644
--- /dev/null
+++ b/mobile/android/geckoview_example/.gitignore
@@ -0,0 +1,1 @@
+/build
new file mode 100644
--- /dev/null
+++ b/mobile/android/geckoview_example/build.gradle
@@ -0,0 +1,29 @@
+buildDir "${topobjdir}/gradle/build/mobile/android/geckoview_example"
+
+apply plugin: 'com.android.application'
+
+android {
+    compileSdkVersion 23
+    buildToolsVersion "23.0.1"
+
+    defaultConfig {
+        applicationId "org.mozilla.geckoview_example"
+        minSdkVersion 15
+        targetSdkVersion 23
+        versionCode 1
+        versionName "1.0"
+    }
+    buildTypes {
+        release {
+            minifyEnabled false
+            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+        }
+    }
+}
+
+dependencies {
+    compile fileTree(dir: 'libs', include: ['*.jar'])
+    testCompile 'junit:junit:4.12'
+
+    compile project(':geckoview')
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/geckoview_example/proguard-rules.pro
@@ -0,0 +1,17 @@
+# Add project specific ProGuard rules here.
+# By default, the flags in this file are appended to flags specified
+# in /Users/nalexander/.mozbuild/android-sdk-macosx/tools/proguard/proguard-android.txt
+# You can edit the include path and order by changing the proguardFiles
+# directive in build.gradle.
+#
+# For more details, see
+#   http://developer.android.com/guide/developing/tools/proguard.html
+
+# Add any project specific keep options here:
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+#   public *;
+#}
new file mode 100644
--- /dev/null
+++ b/mobile/android/geckoview_example/src/androidTest/java/org/mozilla/geckoview/GeckoViewActivityTest.java
@@ -0,0 +1,35 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.geckoview;
+
+import android.test.ActivityInstrumentationTestCase2;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.mozilla.roboexample.test.R;
+
+import static android.support.test.espresso.Espresso.onView;
+import static android.support.test.espresso.assertion.ViewAssertions.matches;
+import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
+import static android.support.test.espresso.matcher.ViewMatchers.withId;
+
+public class GeckoViewActivityTest extends ActivityInstrumentationTestCase2<GeckoViewActivity> {
+
+    public GeckoViewActivityTest() {
+        super(GeckoViewActivity.class);
+    }
+
+    @Test
+    public void testA() throws InterruptedException {
+        final GeckoViewActivity activity = getActivity();
+
+        onView(withId(R.id.gecko_view))
+                .check(matches(isDisplayed()));
+
+        Thread.sleep(5000);
+        Assert.assertEquals("x", "y");
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/geckoview_example/src/androidTest/java/org/mozilla/geckoview_example/ApplicationTest.java
@@ -0,0 +1,13 @@
+package org.mozilla.geckoview_example;
+
+import android.app.Application;
+import android.test.ApplicationTestCase;
+
+/**
+ * <a href="http://d.android.com/tools/testing/testing_android.html">Testing Fundamentals</a>
+ */
+public class ApplicationTest extends ApplicationTestCase<Application> {
+    public ApplicationTest() {
+        super(Application.class);
+    }
+}
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/mobile/android/geckoview_example/src/main/AndroidManifest.xml
@@ -0,0 +1,22 @@
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+          package="org.mozilla.geckoview_example">
+
+    <application android:allowBackup="true"
+                 android:label="@string/app_name"
+                 android:icon="@mipmap/ic_launcher"
+                 android:supportsRtl="true">
+
+        <uses-library android:name="android.test.runner" />
+
+        <activity android:name="org.mozilla.geckoview_example.GeckoViewActivity"
+                  android:label="GeckoViewActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.DEFAULT" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+
+    </application>
+
+</manifest>
new file mode 100644
--- /dev/null
+++ b/mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/GeckoViewActivity.java
@@ -0,0 +1,201 @@
+/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.geckoview_example;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.util.Log;
+import android.widget.Toast;
+
+import org.mozilla.gecko.EventDispatcher;
+import org.mozilla.gecko.GeckoAppShell;
+import org.mozilla.gecko.GeckoEvent;
+import org.mozilla.gecko.GeckoProfile;
+import org.mozilla.gecko.GeckoThread;
+import org.mozilla.gecko.GeckoView;
+import org.mozilla.gecko.PrefsHelper;
+import org.mozilla.gecko.util.GeckoEventListener;
+import org.mozilla.gecko.util.NativeEventListener;
+
+import java.io.File;
+
+public class GeckoViewActivity extends Activity {
+	private static final String LOGTAG = "GeckoViewActivity";
+
+    GeckoView mGeckoView;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.geckoview_activity);
+
+        mGeckoView = (GeckoView) findViewById(R.id.gecko_view);
+        mGeckoView.setChromeDelegate(new MyGeckoViewChrome());
+        mGeckoView.setContentDelegate(new MyGeckoViewContent());
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+
+        final GeckoProfile profile = GeckoProfile.get(getApplicationContext());
+
+        EventDispatcher.getInstance().registerGeckoThreadListener((GeckoEventListener) mGeckoView,
+                "Gecko:Ready",
+                "Accessibility:Event",
+                "Content:StateChange",
+                "Content:LoadError",
+                "Content:PageShow",
+                "DOMTitleChanged",
+                "Link:Favicon",
+                "Prompt:Show",
+                "Prompt:ShowTop");
+
+        EventDispatcher.getInstance().registerGeckoThreadListener((NativeEventListener) mGeckoView,
+                "Accessibility:Ready",
+                "GeckoView:Message");
+
+        // GeckoProfile profile = GeckoProfile.get(this, "default", getApplicationContext().getFilesDir()).forceCreate();
+        GeckoThread.init(profile, "chrome://browser/content/headless.xul", /* action */ null, /* debugging */ false);
+
+//    if (url != null) {
+//        GeckoAppShell.sendEventToGecko(GeckoEvent.createURILoadEvent(url));
+//    }
+
+        if (GeckoThread.launch()) {
+            // This is the first launch, so finish initialization and go.
+             // GeckoProfile profile = GeckoProfile.get(this, "default", getApplicationContext().getFilesDir()).forceCreate();
+        } else if (GeckoThread.isRunning()) {
+            // If Gecko is already running, that means the Activity was
+            // destroyed, so we need to re-attach Gecko to this GeckoView.
+            mGeckoView.connectToGecko();
+        }
+    }
+
+    @Override
+    protected void onStop() {
+        EventDispatcher.getInstance().unregisterGeckoThreadListener((GeckoEventListener) mGeckoView,
+                "Gecko:Ready",
+                "Accessibility:Event",
+                "Content:StateChange",
+                "Content:LoadError",
+                "Content:PageShow",
+                "DOMTitleChanged",
+                "Link:Favicon",
+                "Prompt:Show",
+                "Prompt:ShowTop");
+
+        EventDispatcher.getInstance().unregisterGeckoThreadListener((NativeEventListener) mGeckoView,
+                "Accessibility:Ready",
+                "GeckoView:Message");
+
+        super.onStop();
+    }
+
+    private class MyGeckoViewChrome implements GeckoView.ChromeDelegate {
+        @Override
+        public void onReady(GeckoView view) {
+            Log.i(LOGTAG, "Gecko is ready");
+            // Inject a script that adds some code to the content window
+            mGeckoView.importScript("resource://android/assets/script.js");
+
+            // Set up remote debugging to a port number
+            PrefsHelper.setPref("layers.dump", true);
+            PrefsHelper.setPref("devtools.debugger.remote-port", 6000);
+            PrefsHelper.setPref("devtools.debugger.unix-domain-socket", "");
+            PrefsHelper.setPref("devtools.debugger.remote-enabled", true);
+
+            // The Gecko libraries have finished loading and we can use the rendering engine.
+            // Let's add a browser (required) and load a page into it.
+            // mGeckoView.addBrowser(getResources().getString(R.string.default_url));
+        }
+
+        @Override
+        public void onAlert(GeckoView view, GeckoView.Browser browser, String message, GeckoView.PromptResult result) {
+            Log.i(LOGTAG, "Alert!");
+            result.confirm();
+            Toast.makeText(getApplicationContext(), message, Toast.LENGTH_LONG).show();
+        }
+
+        @Override
+        public void onConfirm(GeckoView view, GeckoView.Browser browser, String message, final GeckoView.PromptResult result) {
+            Log.i(LOGTAG, "Confirm!");
+	        new AlertDialog.Builder(GeckoViewActivity.this)
+	        .setTitle("javaScript dialog")
+	        .setMessage(message)
+	        .setPositiveButton(android.R.string.ok,
+	                new DialogInterface.OnClickListener() {
+	                    public void onClick(DialogInterface dialog, int which) {
+	                        result.confirm();
+	                    }
+	                })
+	        .setNegativeButton(android.R.string.cancel,
+	                new DialogInterface.OnClickListener() {
+	                    public void onClick(DialogInterface dialog, int which) {
+	                        result.cancel();
+	                    }
+	                })
+	        .create()
+	        .show();
+        }
+
+        @Override
+        public void onPrompt(GeckoView view, GeckoView.Browser browser, String message, String defaultValue, GeckoView.PromptResult result) {
+            result.cancel();
+        }
+
+        @Override
+        public void onDebugRequest(GeckoView view, GeckoView.PromptResult result) {
+            Log.i(LOGTAG, "Remote Debug!");
+            result.confirm();
+        }
+
+        @Override
+        public void onScriptMessage(GeckoView view, Bundle data, GeckoView.MessageResult result) {
+        	Log.i(LOGTAG, "Got Script Message: " + data.toString());
+            String type = data.getString("type");
+            if ("fetch".equals(type)) {
+            	Bundle ret = new Bundle();
+            	ret.putString("name", "Mozilla");
+            	ret.putString("url", "https://mozilla.org");
+            	result.success(ret);
+            }
+        }
+    }
+
+    private class MyGeckoViewContent implements GeckoView.ContentDelegate {
+        @Override
+        public void onPageStart(GeckoView view, GeckoView.Browser browser, String url) {
+
+        }
+
+        @Override
+        public void onPageStop(GeckoView view, GeckoView.Browser browser, boolean success) {
+
+        }
+
+        @Override
+        public void onPageShow(GeckoView view, GeckoView.Browser browser) {
+
+        }
+
+        @Override
+        public void onReceivedTitle(GeckoView view, GeckoView.Browser browser, String title) {
+            Log.i(LOGTAG, "Received a title");
+
+            // Use the title returned from Gecko to update the UI
+            // TODO: Only if the browser is the selected browser
+            // mPageTitle.setText(title);
+        }
+
+        @Override
+        public void onReceivedFavicon(GeckoView view, GeckoView.Browser browser, String url, int size) {
+
+        }
+    }
+}
new file mode 100644
--- /dev/null
+++ b/mobile/android/geckoview_example/src/main/res/layout/geckoview_activity.xml
@@ -0,0 +1,13 @@
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="fill_parent"
+              android:layout_height="fill_parent"
+              android:orientation="vertical">
+
+    <org.mozilla.gecko.GeckoView
+        android:id="@+id/gecko_view"
+        android:layout_width="fill_parent"
+        android:layout_height="match_parent"
+        android:scrollbars="none"
+        />
+
+</LinearLayout>
new file mode 100644
index 0000000000000000000000000000000000000000..cde69bcccec65160d92116f20ffce4fce0b5245c
GIT binary patch
literal 3418
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
new file mode 100644
index 0000000000000000000000000000000000000000..c133a0cbd379f5af6dbf1a899a0293ca5eccfad0
GIT binary patch
literal 2206
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
new file mode 100644
index 0000000000000000000000000000000000000000..bfa42f0e7b91d006d22352c9ff2f134e504e3c1d
GIT binary patch
literal 4842
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
new file mode 100644
index 0000000000000000000000000000000000000000..324e72cdd7480cb983fa1bcc7ce686e51ef87fe7
GIT binary patch
literal 7718
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
new file mode 100644
index 0000000000000000000000000000000000000000..aee44e138434630332d88b1680f33c4b24c70ab3
GIT binary patch
literal 10486
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
WUBU6>V)wri#5eM4ay2p*VgCbZ86-jg
new file mode 100644
--- /dev/null
+++ b/mobile/android/geckoview_example/src/main/res/values/colors.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="colorPrimary">#3F51B5</color>
+    <color name="colorPrimaryDark">#303F9F</color>
+    <color name="colorAccent">#FF4081</color>
+</resources>
new file mode 100644
--- /dev/null
+++ b/mobile/android/geckoview_example/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name">geckoview_example</string>
+</resources>
new file mode 100644
--- /dev/null
+++ b/mobile/android/geckoview_example/src/test/java/org/mozilla/geckoview_example/ExampleUnitTest.java
@@ -0,0 +1,15 @@
+package org.mozilla.geckoview_example;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * To work on unit tests, switch the Test Artifact in the Build Variants view.
+ */
+public class ExampleUnitTest {
+    @Test
+    public void addition_isCorrect() throws Exception {
+        assertEquals(4, 2 + 2);
+    }
+}
\ No newline at end of file
--- a/settings.gradle
+++ b/settings.gradle
@@ -25,21 +25,23 @@ if (json.substs.MOZ_BUILD_APP != 'mobile
 // is unfortunate: we'd prefer to use the *most specific* mechanism.  That is,
 // local.properties (first 'sdk.dir', then 'android.dir') and then the
 // environment variable ANDROID_HOME will override this.  That's unfortunate,
 // but it's hard to automatically arrange better.
 System.setProperty('android.home', json.substs.ANDROID_SDK_ROOT)
 
 include ':app'
 include ':geckoview'
+include ':geckoview_example'
 include ':omnijar'
 include ':thirdparty'
 
 project(':app').projectDir = new File("${json.topsrcdir}/mobile/android/app")
 project(':geckoview').projectDir = new File("${json.topsrcdir}/mobile/android/geckoview")
+project(':geckoview_example').projectDir = new File("${json.topsrcdir}/mobile/android/geckoview_example")
 project(':omnijar').projectDir = new File("${json.topsrcdir}/mobile/android/app/omnijar")
 project(':thirdparty').projectDir = new File("${json.topsrcdir}/mobile/android/thirdparty")
 
 if (json.substs.MOZ_ANDROID_PACKAGE_INSTALL_BOUNCER) {
     include ':bouncer'
     project(':bouncer').projectDir = new File("${json.topsrcdir}/mobile/android/bouncer")
 }