gecko/mobile/android/base/MarketplaceApp.java.in

115 lines
4.2 KiB
Java

/* -*- 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/. */
#filter substitution
package @ANDROID_PACKAGE_NAME@;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.Log;
import android.view.MenuItem;
import org.json.JSONObject;
import org.mozilla.gecko.GeckoApp;
import org.mozilla.gecko.GeckoAppShell;
import org.mozilla.gecko.GeckoEvent;
import org.mozilla.gecko.GeckoThread;
import org.mozilla.gecko.WebAppAllocator;
/*
* This is a stub activity, meant to just install the marketplace WebApp
* and then launch it
*/
public class MarketplaceApp extends WebApp {
private static final String LOGTAG = "GeckoMarketplaceApp";
public static final String MARKETPLACE_HOST = "marketplace.mozilla.org";
public static final String MARKETPLACE_URI = "https://marketplace.mozilla.org";
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
// Check that the uri being requested is a marketplace uri
String passedUri = null;
String uri = getURIFromIntent(getIntent());
if (uri != null && uri.length() > 0) {
passedUri = uri;
}
if (passedUri != null)
handleMarketplaceLink(passedUri);
}
// Use the default profile in order to ensure this is installed in the Fennec
// webapp registry. The marketplace WEBapp will have its own profile
@Override
protected String getDefaultProfileName() {
return "default";
}
@Override
protected void onNewIntent(Intent intent) {
Log.w(LOGTAG, "zerdatime " + SystemClock.uptimeMillis() + " - onNewIntent");
if (GeckoThread.checkLaunchState(GeckoThread.LaunchState.GeckoExiting)) {
// We're exiting and shouldn't try to do anything else just incase
// we're hung for some reason we'll force the process to exit
System.exit(0);
return;
}
// if we were previously OOM killed, we can end up here when launching
// from external shortcuts, so set this as the intent for initialization
if (!mInitialized) {
setIntent(intent);
return;
}
final String action = intent.getAction();
if (Intent.ACTION_VIEW.equals(action)) {
String uri = intent.getDataString();
if (Uri.parse(uri).getHost().equals(MARKETPLACE_HOST)) {
handleMarketplaceLink(uri);
return;
}
GeckoAppShell.sendEventToGecko(GeckoEvent.createURILoadEvent(uri));
Log.i(LOGTAG,"onNewIntent: " + uri);
}
}
// All marketplace links from the system will come to the receiver first. It will determine if the
// marketplace app is installed. If the marketplace is not installed it will install it and send the link
// to the marketplace app
private void handleMarketplaceLink(final String url) {
// see if the marketplace app is registered, if its not, install it
int index = WebAppAllocator.getInstance(this).getIndexForApp(MARKETPLACE_URI);
if (index < 0) {
// If the app isn't installed, we send gecko a message to install it and then launch it with this url
JSONObject args = new JSONObject();
try {
args.put("url", url);
} catch (Exception e) {
Log.e(LOGTAG, "error building JSON arguments");
}
GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("WebApps:InstallMarketplace", args.toString()));
} else {
// otherwise just launch the webapp with this url
Intent webappIntent = GeckoAppShell.getWebAppIntent(index, url);
if (webappIntent == null) {
Log.i(LOGTAG, "bounce launch");
return;
}
Log.i(LOGTAG, "Open " + url + " in marketplace app");
startActivity(webappIntent);
}
}
};