/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*- * ***** BEGIN LICENSE BLOCK ***** * Version: MPL 1.1/GPL 2.0/LGPL 2.1 * * The contents of this file are subject to the Mozilla Public License Version * 1.1 (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * http://www.mozilla.org/MPL/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is Mozilla Android code. * * The Initial Developer of the Original Code is Mozilla Foundation. * Portions created by the Initial Developer are Copyright (C) 2011 * the Initial Developer. All Rights Reserved. * * Contributor(s): * Brad Lassey * * Alternatively, the contents of this file may be used under the terms of * either the GNU General Public License Version 2 or later (the "GPL"), or * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), * in which case the provisions of the GPL or the LGPL are applicable instead * of those above. If you wish to allow use of your version of this file only * under the terms of either the GPL or the LGPL, and not to allow others to * use your version of this file under the terms of the MPL, indicate your * decision by deleting the provisions above and replace them with the notice * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ package org.mozilla.gecko; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Resources; import android.content.res.Configuration; import android.util.Log; import android.widget.AbsoluteLayout; import java.io.File; import java.io.FilenameFilter; import java.io.PrintWriter; import java.io.StringWriter; import java.util.Date; import java.util.Locale; public class GeckoThread extends Thread { private static final String LOGTAG = "GeckoThread"; Intent mIntent; GeckoThread (Intent intent) { mIntent = intent; } public void run() { final GeckoApp app = GeckoApp.mAppContext; Intent intent = mIntent; File cacheFile = GeckoAppShell.getCacheDir(); File libxulFile = new File(cacheFile, "libxul.so"); if ((!libxulFile.exists() || new File(app.getApplication().getPackageResourcePath()).lastModified() >= libxulFile.lastModified())) { File[] libs = cacheFile.listFiles(new FilenameFilter() { public boolean accept(File dir, String name) { return name.endsWith(".so"); } }); if (libs != null) { for (int i = 0; i < libs.length; i++) { libs[i].delete(); } } } // At some point while loading the gecko libs our default locale gets set // so just save it to locale here and reset it as default after the join Locale locale = Locale.getDefault(); GeckoAppShell.loadGeckoLibs( app.getApplication().getPackageResourcePath()); Locale.setDefault(locale); Resources res = app.getBaseContext().getResources(); Configuration config = res.getConfiguration(); config.locale = locale; res.updateConfiguration(config, res.getDisplayMetrics()); Log.w(LOGTAG, "zerdatime " + new Date().getTime() + " - runGecko"); // and then fire us up try { String uri = intent.getDataString(); String title = uri; if (!app.mUserDefinedProfile && (uri == null || uri.length() == 0)) { SharedPreferences prefs = app.getSharedPreferences("GeckoApp", app.MODE_PRIVATE); uri = prefs.getString("last-uri", ""); title = prefs.getString("last-title", uri); } final String awesomeTitle = title; app.mMainHandler.post(new Runnable() { public void run() { app.mBrowserToolbar.setTitle(awesomeTitle); } }); Log.w(LOGTAG, "RunGecko - URI = " + uri); GeckoAppShell.runGecko(app.getApplication().getPackageResourcePath(), intent.getStringExtra("args"), uri); } catch (Exception e) { Log.e(LOGTAG, "top level exception", e); StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); pw.flush(); GeckoAppShell.reportJavaCrash(sw.toString()); } } }