/* -*- 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.app.*; import android.content.*; import android.util.*; import android.os.*; import java.io.*; import org.mozilla.gecko.GeckoAppShell; public class Restarter extends Activity { @Override public void onCreate(Bundle savedInstanceState) { Log.i("Restarter", "trying to restart @MOZ_APP_NAME@"); try { int countdown = 40; while (GeckoAppShell.checkForGeckoProcs() && --countdown > 0) { // Wait for the old process to die before we continue try { Thread.currentThread().sleep(100); } catch (InterruptedException ie) {} } if (countdown <= 0) { // if the countdown expired, something is hung GeckoAppShell.killAnyZombies(); countdown = 10; // wait for the kill to take effect while (GeckoAppShell.checkForGeckoProcs() && --countdown > 0) { try { Thread.currentThread().sleep(100); } catch (InterruptedException ie) {} } } } catch (Exception e) { Log.i("Restarter", e.toString()); } try { String action = "android.intent.action.MAIN"; Intent intent = new Intent(action); intent.setClassName("@ANDROID_PACKAGE_NAME@", "@ANDROID_PACKAGE_NAME@.App"); Bundle b = getIntent().getExtras(); if (b != null) intent.putExtras(b); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); Log.i("GeckoAppJava", intent.toString()); startActivity(intent); } catch (Exception e) { Log.i("Restarter", e.toString()); } // Give the new process time to start before we die GeckoAppShell.waitForAnotherGeckoProc(); System.exit(0); } };