package com.starkravingfinkle.geckobrowser;
import org.mozilla.gecko.GeckoView;
import org.mozilla.gecko.GeckoView.Browser;
import org.mozilla.gecko.GeckoViewChrome;
import org.mozilla.gecko.GeckoViewContent;
import org.mozilla.gecko.PrefsHelper;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.util.Log;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.view.Menu;
public class MainActivity extends Activity {
private static final String LOGTAG = "GeckoBrowser";
GeckoView mGeckoView;
TextView mPageTitle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mGeckoView = (GeckoView) findViewById(R.id.gecko_view);
Button goButton = (Button) findViewById(R.id.go_button);
goButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
final EditText text = (EditText) findViewById(R.id.url_bar);
GeckoView.Browser browser = mGeckoView.getCurrentBrowser();
if (browser == null) {
browser = mGeckoView.addBrowser(text.getText().toString());
} else {
browser.loadUrl(text.getText().toString());
}
}
});
mGeckoView.setChromeDelegate(new MyGeckoViewChrome());
mGeckoView.setContentDelegate(new MyGeckoViewContent());
mPageTitle = (TextView) findViewById(R.id.page_title);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle item selection
switch (item.getItemId()) {
case R.id.action_exit:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
@Override
public void onBackPressed() {
Browser selected = mGeckoView.getCurrentBrowser();
if (selected != null && selected.canGoBack()) {
selected.goBack();
} else {
moveTaskToBack(true);
}
}
private class MyGeckoViewChrome extends GeckoViewChrome {
@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("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(MainActivity.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 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 extends GeckoViewContent {
@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);
}
}
}