/* 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 org.mozilla.gecko; import android.app.Activity; import android.app.Application; import android.content.Intent; import android.content.ComponentName; public class GeckoActivity extends Activity { private boolean hasStarted = false; private boolean mGeckoActivityOpened = false; @Override public void onPause() { super.onPause(); // Avoid pause notifications in destroy path. if (!isFinishing() && (getApplication() instanceof GeckoApplication)) ((GeckoApplication) getApplication()).onActivityPause(this); } @Override public void onResume() { super.onResume(); // Avoid resume notifications in startup path. if (hasStarted && (getApplication() instanceof GeckoApplication)) { ((GeckoApplication) getApplication()).onActivityResume(this); mGeckoActivityOpened = false; } else { hasStarted = true; } } @Override public void startActivity(Intent intent) { checkIfGeckoActivity(intent); super.startActivity(intent); } @Override public void startActivityForResult(Intent intent, int request) { checkIfGeckoActivity(intent); super.startActivityForResult(intent, request); } private void checkIfGeckoActivity(Intent intent) { // Whenever we call our own activity, the component and it's package name is set. // If we call an activity from another package, or an open intent (leaving android to resolve) // component has a different package name or it is null. ComponentName component = intent.getComponent(); mGeckoActivityOpened = false; if (component != null && component.getPackageName() != null && component.getPackageName().equals("@ANDROID_PACKAGE_NAME@")) { mGeckoActivityOpened = true; } } public boolean isGeckoActivityOpened() { return mGeckoActivityOpened; } public boolean isApplicationInBackground() { return ((GeckoApplication) getApplication()).isApplicationInBackground(); } }