103 lines
3.9 KiB
Java
103 lines
3.9 KiB
Java
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; 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/. */
|
|
|
|
package org.mozilla.gecko.tabqueue;
|
|
|
|
import org.mozilla.gecko.AppConstants;
|
|
import org.mozilla.gecko.GeckoAppShell;
|
|
import org.mozilla.gecko.GeckoSharedPrefs;
|
|
import org.mozilla.gecko.Locales;
|
|
import org.mozilla.gecko.Telemetry;
|
|
import org.mozilla.gecko.TelemetryContract;
|
|
import org.mozilla.gecko.mozglue.ContextUtils;
|
|
import org.mozilla.gecko.preferences.GeckoPreferences;
|
|
|
|
import android.content.Intent;
|
|
import android.os.Bundle;
|
|
import android.text.TextUtils;
|
|
import android.util.Log;
|
|
|
|
/**
|
|
* This class takes over external url loads (Intent.VIEW) from the BrowserApp class. It determines if
|
|
* the tab queue functionality is enabled and forwards the intent to the TabQueueService to process if it is.
|
|
*
|
|
* If the tab queue functionality is not enabled then it forwards the intent to BrowserApp to handle as normal.
|
|
*/
|
|
public class TabQueueDispatcher extends Locales.LocaleAwareActivity {
|
|
private static final String LOGTAG = "Gecko" + TabQueueDispatcher.class.getSimpleName();
|
|
public static final String SKIP_TAB_QUEUE_FLAG = "skip_tab_queue";
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
super.onCreate(savedInstanceState);
|
|
|
|
GeckoAppShell.ensureCrashHandling();
|
|
|
|
// The EXCLUDE_FROM_RECENTS flag is sticky
|
|
// (see http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.0_r1/com/android/server/am/ActivityRecord.java/#468)
|
|
// So let's remove this whilst keeping all other flags the same, otherwise BrowserApp will vanish from Recents!
|
|
Intent intent = getIntent();
|
|
int flags = intent.getFlags() & ~Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS;
|
|
intent.setFlags(flags);
|
|
|
|
ContextUtils.SafeIntent safeIntent = new ContextUtils.SafeIntent(intent);
|
|
|
|
// For the moment lets exit early and start fennec as normal if we're not in nightly with
|
|
// the tab queue build flag.
|
|
if (!AppConstants.MOZ_ANDROID_TAB_QUEUE) {
|
|
loadNormally(safeIntent.getUnsafe());
|
|
return;
|
|
}
|
|
|
|
// Skip the Tab Queue if instructed.
|
|
boolean shouldSkipTabQueue = safeIntent.getBooleanExtra(SKIP_TAB_QUEUE_FLAG, false);
|
|
if (shouldSkipTabQueue) {
|
|
loadNormally(safeIntent.getUnsafe());
|
|
return;
|
|
}
|
|
|
|
// The URL is usually hiding somewhere in the extra text. Extract it.
|
|
final String dataString = safeIntent.getDataString();
|
|
if (TextUtils.isEmpty(dataString)) {
|
|
abortDueToNoURL(dataString);
|
|
return;
|
|
}
|
|
|
|
boolean shouldShowOpenInBackgroundToast = TabQueueHelper.isTabQueueEnabled(this);
|
|
|
|
if (shouldShowOpenInBackgroundToast) {
|
|
showToast(safeIntent.getUnsafe());
|
|
} else {
|
|
loadNormally(safeIntent.getUnsafe());
|
|
}
|
|
}
|
|
|
|
private void showToast(Intent intent) {
|
|
intent.setClass(getApplicationContext(), TabQueueService.class);
|
|
startService(intent);
|
|
finish();
|
|
}
|
|
|
|
/**
|
|
* Start fennec with the supplied intent.
|
|
*/
|
|
private void loadNormally(Intent intent) {
|
|
intent.setClassName(getApplicationContext(), AppConstants.MOZ_ANDROID_BROWSER_INTENT_CLASS);
|
|
startActivity(intent);
|
|
Telemetry.sendUIEvent(TelemetryContract.Event.LOAD_URL, TelemetryContract.Method.INTENT, "");
|
|
finish();
|
|
}
|
|
|
|
/**
|
|
* Abort as we were started with no URL.
|
|
* @param dataString
|
|
*/
|
|
private void abortDueToNoURL(String dataString) {
|
|
// TODO: Lets decide what to do here in bug 1134148
|
|
Log.w(LOGTAG, "Unable to process tab queue insertion. No URL found! - passed data string: " + dataString);
|
|
finish();
|
|
}
|
|
}
|