author | Phil Ringnalda <philringnalda@gmail.com> |
Sun, 23 Feb 2014 09:00:07 -0800 | |
changeset 170121 | 31113754db3bbfcde38c3af98edd71d5a5a78489 |
parent 170083 | 352a5a9b63e311d8163f6b4e845f61b4c37824d4 (current diff) |
parent 170120 | 24adaa318267fe603df5ff59f288f6d5c3f1f8f0 (diff) |
child 170122 | 5e4cee2fcbc682e19f12cee896243dd7b3bdad7f |
child 170130 | 4f7128acbae06c52609ffa93e0609f41a0227a21 |
child 170137 | 661ac7e2ec4fd4eeb1312f3ae6c64349c40dcde5 |
push id | 26277 |
push user | philringnalda@gmail.com |
push date | Sun, 23 Feb 2014 17:00:29 +0000 |
treeherder | mozilla-central@31113754db3b [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
milestone | 30.0a1 |
first release with | nightly linux32
31113754db3b
/
30.0a1
/
20140224030203
/
files
nightly linux64
31113754db3b
/
30.0a1
/
20140224030203
/
files
nightly mac
31113754db3b
/
30.0a1
/
20140224030203
/
files
nightly win32
31113754db3b
/
30.0a1
/
20140224030203
/
files
nightly win64
31113754db3b
/
30.0a1
/
20140224030203
/
files
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
releases | nightly linux32
30.0a1
/
20140224030203
/
pushlog to previous
nightly linux64
30.0a1
/
20140224030203
/
pushlog to previous
nightly mac
30.0a1
/
20140224030203
/
pushlog to previous
nightly win32
30.0a1
/
20140224030203
/
pushlog to previous
nightly win64
30.0a1
/
20140224030203
/
pushlog to previous
|
toolkit/mozapps/extensions/AddonLogging.jsm | file | annotate | diff | comparison | revisions | |
toolkit/mozapps/extensions/AddonRepository.jsm | file | annotate | diff | comparison | revisions | |
toolkit/mozapps/extensions/AddonRepository_SQLiteMigrator.jsm | file | annotate | diff | comparison | revisions | |
toolkit/mozapps/extensions/AddonUpdateChecker.jsm | file | annotate | diff | comparison | revisions | |
toolkit/mozapps/extensions/LightweightThemeImageOptimizer.jsm | file | annotate | diff | comparison | revisions | |
toolkit/mozapps/extensions/PluginProvider.jsm | file | annotate | diff | comparison | revisions | |
toolkit/mozapps/extensions/SpellCheckDictionaryBootstrap.js | file | annotate | diff | comparison | revisions | |
toolkit/mozapps/extensions/XPIProvider.jsm | file | annotate | diff | comparison | revisions | |
toolkit/mozapps/extensions/XPIProviderUtils.js | file | annotate | diff | comparison | revisions |
--- a/addon-sdk/source/lib/sdk/l10n/locale.js +++ b/addon-sdk/source/lib/sdk/l10n/locale.js @@ -70,17 +70,17 @@ exports.getPreferedLocales = function ge * @param aLocales * An array of available locales * @param aMatchLocales * An array of prefered locales, ordered by priority. Most wanted first. * Locales have to be in lowercase. * If null, uses getPreferedLocales() results * @return the best match for the currently selected locale * - * Stolen from http://mxr.mozilla.org/mozilla-central/source/toolkit/mozapps/extensions/XPIProvider.jsm + * Stolen from http://mxr.mozilla.org/mozilla-central/source/toolkit/mozapps/extensions/internal/XPIProvider.jsm */ exports.findClosestLocale = function findClosestLocale(aLocales, aMatchLocales) { aMatchLocales = aMatchLocales || exports.getPreferedLocales(); // Holds the best matching localized resource let bestmatch = null; // The number of locale parts it matched with
--- a/addon-sdk/source/python-lib/cuddlefish/preflight.py +++ b/addon-sdk/source/python-lib/cuddlefish/preflight.py @@ -11,17 +11,17 @@ def create_jid(): previous jid0- series, the string securely identified a specific public key). To get a suitable add-on ID, append '@jetpack' to this string. """ # per https://developer.mozilla.org/en/Install_Manifests#id all XPI id # values must either be in the form of a 128-bit GUID (crazy braces # and all) or in the form of an email address (crazy @ and all). # Firefox will refuse to install an add-on with an id that doesn't # match one of these forms. The actual regexp is at: - # http://mxr.mozilla.org/mozilla-central/source/toolkit/mozapps/extensions/XPIProvider.jsm#130 + # http://mxr.mozilla.org/mozilla-central/source/toolkit/mozapps/extensions/internal/XPIProvider.jsm#130 # So the JID needs an @-suffix, and the only legal punctuation is # "-._". So we start with a base64 encoding, and replace the # punctuation (+/) with letters (AB), losing a few bits of integrity. # even better: windows has a maximum path length limitation of 256 # characters: # http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx # (unless all paths are prefixed with "\\?\", I kid you not). The
--- a/browser/components/preferences/sync.xul +++ b/browser/components/preferences/sync.xul @@ -204,23 +204,26 @@ <groupbox id="fxaGroup"> <caption label="&syncBrand.fxAccount.label;"/> <deck id="fxaLoginStatus"> <!-- logged in and verified and all is good --> <hbox> <label id="fxaEmailAddress1"/> - <label class="text-link" - onclick="gSyncPane.manageFirefoxAccount();" - value="&manage.label;"/> + <vbox> + <label class="text-link" + onclick="gSyncPane.manageFirefoxAccount();" + value="&manage.label;"/> + </vbox> <spacer flex="1"/> - <vbox align="end"> - <button oncommand="gSyncPane.unlinkFirefoxAccount(true);" - label="&disconnect.label;" /> + <vbox> + <button id="fxaUnlinkButton" + oncommand="gSyncPane.unlinkFirefoxAccount(true);" + label="&disconnect.label;"/> </vbox> </hbox> <!-- logged in to an unverified account --> <hbox flex="1"> <description> &signedInUnverified.beforename.label; <span id="fxaEmailAddress2"></span>
--- a/browser/components/sessionstore/src/SessionHistory.jsm +++ b/browser/components/sessionstore/src/SessionHistory.jsm @@ -107,23 +107,24 @@ let SessionHistoryInternal = { // ensuring it isn't out of bounds if an exception was thrown above. data.index = Math.min(history.index - oldest + 1, data.entries.length); } // If either the session history isn't available yet or doesn't have any // valid entries, make sure we at least include the current page. if (data.entries.length == 0) { let uri = webNavigation.currentURI.spec; + let body = webNavigation.document.body; // We landed here because the history is inaccessible or there are no // history entries. In that case we should at least record the docShell's // current URL as a single history entry. If the URL is not about:blank // or it's a blank tab that was modified (like a custom newtab page), // record it. For about:blank we explicitly want an empty array without // an 'index' property to denote that there are no history entries. - if (uri != "about:blank" || webNavigation.document.body.hasChildNodes()) { + if (uri != "about:blank" || (body && body.hasChildNodes())) { data.entries.push({ url: uri }); data.index = 1; } } return data; },
--- a/browser/themes/osx/preferences/preferences.css +++ b/browser/themes/osx/preferences/preferences.css @@ -209,9 +209,13 @@ html|a.inline-link:-moz-focusring { list-style-image: url("chrome://mozapps/skin/profile/profileicon.png"); } #syncAddDeviceLabel { margin-top: 1em; margin-bottom: 1em; } +#fxaUnlinkButton { + margin: 0; +} + %endif
--- a/build/mobile/robocop/Actions.java +++ b/build/mobile/robocop/Actions.java @@ -1,16 +1,13 @@ /* 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; -import java.util.List; -import java.util.ArrayList; - import android.database.Cursor; public interface Actions { /** Special keys supported by sendSpecialKey() */ public enum SpecialKey { DOWN, UP, LEFT, RIGHT, ENTER, MENU, BACK }
--- a/build/mobile/robocop/FennecNativeActions.java +++ b/build/mobile/robocop/FennecNativeActions.java @@ -1,42 +1,35 @@ /* 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; -import org.mozilla.gecko.GeckoAppShell; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; + +import org.json.JSONObject; +import org.mozilla.gecko.FennecNativeDriver.LogLevel; import org.mozilla.gecko.gfx.GeckoLayerClient; import org.mozilla.gecko.gfx.GeckoLayerClient.DrawListener; import org.mozilla.gecko.mozglue.GeckoLoader; import org.mozilla.gecko.sqlite.SQLiteBridge; import org.mozilla.gecko.util.GeckoEventListener; import android.app.Activity; import android.app.Instrumentation; -import android.content.Context; import android.database.Cursor; import android.os.SystemClock; import android.text.TextUtils; -import android.util.Log; import android.view.KeyEvent; -import android.view.MotionEvent; -import android.view.View; -import android.view.ViewConfiguration; -import java.util.concurrent.BlockingQueue; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.TimeUnit; -import java.util.ArrayList; -import org.json.JSONObject; import com.jayway.android.robotium.solo.Solo; -import static org.mozilla.gecko.FennecNativeDriver.LogLevel; - public class FennecNativeActions implements Actions { private static final String LOGTAG = "FennecNativeActions"; private Solo mSolo; private Instrumentation mInstr; private Assert mAsserter; public FennecNativeActions(Activity activity, Solo robocop, Instrumentation instrumentation, Assert asserter) {
--- a/mobile/android/app/mobile.js +++ b/mobile/android/app/mobile.js @@ -813,17 +813,17 @@ pref("browser.snippets.updateInterval", // URL used to check for user's country code pref("browser.snippets.geoUrl", "https://geo.mozilla.org/country.json"); // URL used to ping metrics with stats about which snippets have been shown pref("browser.snippets.statsUrl", "https://snippets-stats.mozilla.org/mobile"); // These prefs require a restart to take effect. pref("browser.snippets.enabled", true); -pref("browser.snippets.syncPromo.enabled", false); +pref("browser.snippets.syncPromo.enabled", true); #ifdef MOZ_ANDROID_SYNTHAPKS // The URL of the APK factory from which we obtain APKs for webapps. // This currently points to the development server. pref("browser.webapps.apkFactoryUrl", "http://dapk.net/application.apk"); // How frequently to check for webapp updates, in seconds (86400 is daily). pref("browser.webapps.updateInterval", 86400);
--- a/mobile/android/base/ANRReporter.java +++ b/mobile/android/base/ANRReporter.java @@ -1,42 +1,39 @@ /* -*- 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/. */ package org.mozilla.gecko; -import org.mozilla.gecko.util.ThreadUtils; - -import org.json.JSONObject; - -import android.content.BroadcastReceiver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.os.Handler; -import android.os.Looper; -import android.util.Base64; -import android.util.Log; - import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.Reader; -import java.io.StringReader; import java.util.UUID; import java.util.regex.Pattern; +import org.json.JSONObject; +import org.mozilla.gecko.util.ThreadUtils; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.os.Handler; +import android.os.Looper; +import android.util.Log; + public final class ANRReporter extends BroadcastReceiver { private static final boolean DEBUG = false; private static final String LOGTAG = "GeckoANRReporter"; private static final String ANR_ACTION = "android.intent.action.ANR"; // Number of lines to search traces.txt to decide whether it's a Gecko ANR private static final int LINES_TO_IDENTIFY_TRACES = 10;
--- a/mobile/android/base/ActionModeCompatView.java +++ b/mobile/android/base/ActionModeCompatView.java @@ -1,38 +1,30 @@ /* 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; import org.mozilla.gecko.animation.AnimationUtils; import org.mozilla.gecko.menu.GeckoMenu; -import org.mozilla.gecko.menu.MenuPopup; -import org.mozilla.gecko.menu.MenuPanel; -import org.mozilla.gecko.menu.MenuItemActionBar; import org.mozilla.gecko.widget.GeckoPopupMenu; -import android.view.animation.Animation; -import android.view.animation.TranslateAnimation; -import android.view.animation.ScaleAnimation; +import android.content.Context; +import android.util.AttributeSet; +import android.view.LayoutInflater; import android.view.Menu; -import android.view.MenuItem; -import android.view.MenuInflater; -import android.view.ViewGroup; -import android.view.LayoutInflater; -import android.widget.LinearLayout; import android.view.View; import android.view.ViewGroup; -import android.content.Context; -import android.widget.TextView; +import android.view.animation.Animation; +import android.view.animation.ScaleAnimation; +import android.view.animation.TranslateAnimation; +import android.widget.Button; import android.widget.ImageButton; -import android.widget.Button; -import android.widget.PopupWindow; -import android.util.AttributeSet; +import android.widget.LinearLayout; class ActionModeCompatView extends LinearLayout implements GeckoMenu.ActionItemBarPresenter { private final String LOGTAG = "GeckoActionModeCompatPresenter"; private static final int SPEC = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); private Button mTitleView; private ImageButton mMenuButton;
--- a/mobile/android/base/BrowserApp.java +++ b/mobile/android/base/BrowserApp.java @@ -1,25 +1,34 @@ /* -*- 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; +import java.io.File; +import java.io.FileNotFoundException; +import java.net.URLEncoder; +import java.util.EnumSet; +import java.util.Vector; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import org.mozilla.gecko.animation.PropertyAnimator; import org.mozilla.gecko.animation.ViewHelper; import org.mozilla.gecko.db.BrowserContract.Combined; import org.mozilla.gecko.db.BrowserDB; import org.mozilla.gecko.favicons.Favicons; +import org.mozilla.gecko.favicons.LoadFaviconTask; import org.mozilla.gecko.favicons.OnFaviconLoadedListener; -import org.mozilla.gecko.favicons.LoadFaviconTask; import org.mozilla.gecko.favicons.decoders.IconDirectoryEntry; +import org.mozilla.gecko.fxa.FirefoxAccounts; import org.mozilla.gecko.fxa.activities.FxAccountGetStartedActivity; -import org.mozilla.gecko.fxa.FirefoxAccounts; import org.mozilla.gecko.gfx.BitmapUtils; import org.mozilla.gecko.gfx.GeckoLayerClient; import org.mozilla.gecko.gfx.ImmutableViewportMetrics; import org.mozilla.gecko.gfx.LayerMarginsAnimator; import org.mozilla.gecko.health.BrowserHealthRecorder; import org.mozilla.gecko.health.BrowserHealthReporter; import org.mozilla.gecko.health.HealthRecorder; import org.mozilla.gecko.health.SessionInformation; @@ -31,29 +40,24 @@ import org.mozilla.gecko.home.HomePager. import org.mozilla.gecko.home.SearchEngine; import org.mozilla.gecko.menu.GeckoMenu; import org.mozilla.gecko.preferences.GeckoPreferences; import org.mozilla.gecko.prompts.Prompt; import org.mozilla.gecko.sync.setup.SyncAccounts; import org.mozilla.gecko.toolbar.AutocompleteHandler; import org.mozilla.gecko.toolbar.BrowserToolbar; import org.mozilla.gecko.util.Clipboard; -import org.mozilla.gecko.EventDispatcher; import org.mozilla.gecko.util.GamepadUtils; import org.mozilla.gecko.util.HardwareUtils; import org.mozilla.gecko.util.MenuUtils; import org.mozilla.gecko.util.StringUtils; import org.mozilla.gecko.util.ThreadUtils; import org.mozilla.gecko.util.UiAsyncTask; +import org.mozilla.gecko.widget.ButtonToast; import org.mozilla.gecko.widget.GeckoActionProvider; -import org.mozilla.gecko.widget.ButtonToast; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; import android.app.Activity; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Configuration; @@ -81,27 +85,20 @@ import android.view.MenuItem; import android.view.MotionEvent; import android.view.SubMenu; import android.view.View; import android.view.ViewGroup; import android.view.ViewStub; import android.view.ViewTreeObserver; import android.view.Window; import android.view.animation.Interpolator; -import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.Toast; import android.widget.ViewFlipper; -import java.io.File; -import java.io.FileNotFoundException; -import java.net.URLEncoder; -import java.util.EnumSet; -import java.util.Vector; - abstract public class BrowserApp extends GeckoApp implements TabsPanel.TabsLayoutChangeListener, PropertyAnimator.PropertyAnimationListener, View.OnKeyListener, GeckoLayerClient.OnMetricsChangedListener, BrowserSearch.OnSearchListener, BrowserSearch.OnEditSuggestionListener, HomePager.OnNewTabsListener,
--- a/mobile/android/base/ContactService.java +++ b/mobile/android/base/ContactService.java @@ -1,29 +1,31 @@ /* 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; -import org.mozilla.gecko.gfx.Layer; -import org.mozilla.gecko.gfx.LayerView; -import org.mozilla.gecko.EventDispatcher; -import org.mozilla.gecko.util.GeckoEventListener; -import org.mozilla.gecko.util.ThreadUtils; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map.Entry; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import org.mozilla.gecko.util.GeckoEventListener; +import org.mozilla.gecko.util.ThreadUtils; import android.accounts.Account; import android.accounts.AccountManager; import android.app.AlertDialog; import android.content.ContentProviderOperation; -import android.content.ContentProviderOperation.Builder; import android.content.ContentProviderResult; import android.content.ContentResolver; import android.content.ContentUris; import android.content.ContentValues; import android.content.DialogInterface; import android.content.OperationApplicationException; import android.database.Cursor; import android.net.Uri; @@ -37,32 +39,22 @@ import android.provider.ContactsContract import android.provider.ContactsContract.CommonDataKinds.Im; import android.provider.ContactsContract.CommonDataKinds.Nickname; import android.provider.ContactsContract.CommonDataKinds.Note; import android.provider.ContactsContract.CommonDataKinds.Organization; import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.CommonDataKinds.StructuredName; import android.provider.ContactsContract.CommonDataKinds.StructuredPostal; import android.provider.ContactsContract.CommonDataKinds.Website; -import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.Data; import android.provider.ContactsContract.Groups; import android.provider.ContactsContract.RawContacts; import android.provider.ContactsContract.RawContacts.Entity; import android.telephony.PhoneNumberUtils; import android.util.Log; -import android.view.View; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; public class ContactService implements GeckoEventListener { private static final String LOGTAG = "GeckoContactService"; private static final boolean DEBUG = false; private final static int GROUP_ACCOUNT_NAME = 0; private final static int GROUP_ACCOUNT_TYPE = 1; private final static int GROUP_ID = 2;
--- a/mobile/android/base/DataReportingNotification.java +++ b/mobile/android/base/DataReportingNotification.java @@ -1,35 +1,29 @@ /* -*- 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; import org.mozilla.gecko.preferences.GeckoPreferences; -import org.mozilla.gecko.preferences.GeckoPreferenceFragment; -import org.mozilla.gecko.util.ThreadUtils; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.graphics.Typeface; import android.os.Build; -import android.os.Bundle; -import android.preference.PreferenceActivity; import android.support.v4.app.NotificationCompat; -import android.support.v4.app.NotificationCompat.Builder; import android.text.Spannable; import android.text.SpannableString; import android.text.style.StyleSpan; -import android.util.Log; public class DataReportingNotification { private static final String LOGTAG = "DataReportNotification"; public static final String ALERT_NAME_DATAREPORTING_NOTIFICATION = "datareporting-notification"; private static final String DEFAULT_PREFS_BRANCH = AppConstants.ANDROID_PACKAGE_NAME + "_preferences";
--- a/mobile/android/base/GeckoApp.java +++ b/mobile/android/base/GeckoApp.java @@ -1,85 +1,102 @@ /* -*- 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; +import java.io.BufferedOutputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import org.mozilla.gecko.background.announcements.AnnouncementsBroadcastService; import org.mozilla.gecko.db.BrowserDB; import org.mozilla.gecko.favicons.Favicons; import org.mozilla.gecko.gfx.BitmapUtils; import org.mozilla.gecko.gfx.Layer; import org.mozilla.gecko.gfx.LayerView; import org.mozilla.gecko.gfx.PluginLayer; -import org.mozilla.gecko.prompts.PromptService; +import org.mozilla.gecko.health.HealthRecorder; +import org.mozilla.gecko.health.SessionInformation; +import org.mozilla.gecko.health.StubbedHealthRecorder; import org.mozilla.gecko.menu.GeckoMenu; import org.mozilla.gecko.menu.GeckoMenuInflater; import org.mozilla.gecko.menu.MenuPanel; -import org.mozilla.gecko.health.HealthRecorder; -import org.mozilla.gecko.health.SessionInformation; -import org.mozilla.gecko.health.StubbedHealthRecorder; import org.mozilla.gecko.preferences.GeckoPreferences; +import org.mozilla.gecko.prompts.PromptService; import org.mozilla.gecko.updater.UpdateService; import org.mozilla.gecko.updater.UpdateServiceHelper; import org.mozilla.gecko.util.ActivityResultHandler; import org.mozilla.gecko.util.GeckoEventListener; import org.mozilla.gecko.util.HardwareUtils; import org.mozilla.gecko.util.ThreadUtils; import org.mozilla.gecko.util.UiAsyncTask; +import org.mozilla.gecko.webapp.EventListener; import org.mozilla.gecko.webapp.UninstallListener; -import org.mozilla.gecko.webapp.EventListener; import org.mozilla.gecko.widget.ButtonToast; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Configuration; import android.graphics.Bitmap; import android.graphics.BitmapFactory; +import android.graphics.RectF; import android.graphics.drawable.Drawable; -import android.graphics.RectF; import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.location.Location; import android.location.LocationListener; +import android.net.Uri; import android.net.wifi.ScanResult; -import android.net.Uri; import android.net.wifi.WifiManager; -import android.os.Environment; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.PowerManager; import android.os.StrictMode; import android.preference.PreferenceManager; import android.provider.ContactsContract; import android.provider.MediaStore.Images.Media; - import android.telephony.CellLocation; import android.telephony.NeighboringCellInfo; +import android.telephony.PhoneStateListener; import android.telephony.SignalStrength; import android.telephony.TelephonyManager; -import android.telephony.PhoneStateListener; import android.telephony.gsm.GsmCellLocation; - import android.text.TextUtils; - import android.util.AttributeSet; import android.util.Base64; import android.util.Log; import android.util.SparseBooleanArray; import android.view.Gravity; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; @@ -97,43 +114,18 @@ import android.view.WindowManager; import android.widget.AbsoluteLayout; import android.widget.FrameLayout; import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.SimpleAdapter; import android.widget.TextView; import android.widget.Toast; -import java.io.BufferedOutputStream; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.io.UnsupportedEncodingException; -import java.net.HttpURLConnection; -import java.net.URL; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - public abstract class GeckoApp - extends GeckoActivity + extends GeckoActivity implements ContextGetter, GeckoAppShell.GeckoInterface, GeckoEventListener, GeckoMenu.Callback, GeckoMenu.MenuPresenter, LocationListener, SensorEventListener, @@ -830,34 +822,29 @@ public abstract class GeckoApp mToast = new ButtonToast(toastStub.inflate()); return mToast; } void showButtonToast(final String message, final String buttonText, final String buttonIcon, final String buttonId) { BitmapUtils.getDrawable(GeckoApp.this, buttonIcon, new BitmapUtils.BitmapLoader() { + @Override public void onBitmapFound(final Drawable d) { - - ThreadUtils.postToUiThread(new Runnable() { + getButtonToast().show(false, message, buttonText, d, new ButtonToast.ToastListener() { @Override - public void run() { - getButtonToast().show(false, message, buttonText, d, new ButtonToast.ToastListener() { - @Override - public void onButtonClicked() { - GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("Toast:Click", buttonId)); - } - - @Override - public void onToastHidden(ButtonToast.ReasonHidden reason) { - if (reason == ButtonToast.ReasonHidden.TIMEOUT) { - GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("Toast:Hidden", buttonId)); - } - } - }); + public void onButtonClicked() { + GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("Toast:Click", buttonId)); + } + + @Override + public void onToastHidden(ButtonToast.ReasonHidden reason) { + if (reason == ButtonToast.ReasonHidden.TIMEOUT) { + GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("Toast:Hidden", buttonId)); + } } }); } }); } private void addFullScreenPluginView(View view) { if (mFullScreenPluginView != null) {
--- a/mobile/android/base/GeckoAppShell.java +++ b/mobile/android/base/GeckoAppShell.java @@ -1,45 +1,64 @@ /* -*- 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; +import java.io.BufferedReader; +import java.io.Closeable; +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.net.Proxy; +import java.net.URL; +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.NoSuchElementException; +import java.util.StringTokenizer; +import java.util.TreeMap; + import org.mozilla.gecko.favicons.OnFaviconLoadedListener; import org.mozilla.gecko.favicons.decoders.FaviconDecoder; import org.mozilla.gecko.gfx.BitmapUtils; import org.mozilla.gecko.gfx.GeckoLayerClient; import org.mozilla.gecko.gfx.LayerView; import org.mozilla.gecko.gfx.PanZoomController; import org.mozilla.gecko.mozglue.GeckoLoader; +import org.mozilla.gecko.mozglue.JNITarget; +import org.mozilla.gecko.mozglue.RobocopTarget; import org.mozilla.gecko.mozglue.generatorannotations.OptionalGeneratedParameter; import org.mozilla.gecko.mozglue.generatorannotations.WrapElementForJNI; -import org.mozilla.gecko.mozglue.JNITarget; -import org.mozilla.gecko.mozglue.RobocopTarget; import org.mozilla.gecko.prompts.PromptService; -import org.mozilla.gecko.util.ActivityResultHandler; import org.mozilla.gecko.util.GeckoEventListener; import org.mozilla.gecko.util.HardwareUtils; import org.mozilla.gecko.util.ProxySelector; import org.mozilla.gecko.util.ThreadUtils; import org.mozilla.gecko.webapp.Allocator; -import org.mozilla.gecko.webapp.InstallListener; - -import org.json.JSONException; -import org.json.JSONObject; import android.app.Activity; import android.app.ActivityManager; import android.app.PendingIntent; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.content.SharedPreferences; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; @@ -52,80 +71,51 @@ import android.graphics.ImageFormat; import android.graphics.Paint; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.RectF; import android.graphics.SurfaceTexture; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.hardware.Sensor; +import android.hardware.SensorEventListener; import android.hardware.SensorManager; -import android.hardware.SensorEventListener; import android.location.Criteria; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.media.MediaScannerConnection; import android.media.MediaScannerConnection.MediaScannerConnectionClient; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.net.Uri; import android.os.Build; -import android.os.Environment; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.MessageQueue; import android.os.SystemClock; import android.os.Vibrator; import android.provider.Settings; -import android.support.v4.util.LruCache; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Base64; import android.util.DisplayMetrics; import android.util.Log; import android.view.ContextThemeWrapper; import android.view.HapticFeedbackConstants; import android.view.Surface; import android.view.SurfaceView; import android.view.TextureView; import android.view.View; import android.view.inputmethod.InputMethodManager; import android.webkit.MimeTypeMap; import android.widget.AbsoluteLayout; import android.widget.Toast; -import java.io.BufferedReader; -import java.io.Closeable; -import java.io.File; -import java.io.FileOutputStream; -import java.io.FileReader; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.OutputStream; -import java.io.PrintWriter; -import java.io.StringWriter; -import java.net.MalformedURLException; -import java.net.Proxy; -import java.net.URI; -import java.net.URL; -import java.nio.ByteBuffer; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.NoSuchElementException; -import java.util.StringTokenizer; -import java.util.TreeMap; - public class GeckoAppShell { private static final String LOGTAG = "GeckoAppShell"; // static members only private GeckoAppShell() { } static private LinkedList<GeckoEvent> gPendingEvents =
--- a/mobile/android/base/Tab.java +++ b/mobile/android/base/Tab.java @@ -1,44 +1,38 @@ /* -*- 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/. */ package org.mozilla.gecko; -import org.mozilla.gecko.SiteIdentity.SecurityMode; -import org.mozilla.gecko.db.BrowserContract.Bookmarks; -import org.mozilla.gecko.db.BrowserDB; -import org.mozilla.gecko.favicons.Favicons; -import org.mozilla.gecko.favicons.LoadFaviconTask; -import org.mozilla.gecko.favicons.OnFaviconLoadedListener; -import org.mozilla.gecko.gfx.Layer; -import org.mozilla.gecko.util.ThreadUtils; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import org.json.JSONException; import org.json.JSONObject; +import org.mozilla.gecko.db.BrowserContract.Bookmarks; +import org.mozilla.gecko.db.BrowserDB; +import org.mozilla.gecko.gfx.Layer; +import org.mozilla.gecko.util.ThreadUtils; import android.content.ContentResolver; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; import android.os.Build; import android.text.TextUtils; import android.util.Log; import android.view.View; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - public class Tab { private static final String LOGTAG = "GeckoTab"; private static Pattern sColorPattern; private final int mId; private long mLastUsed; private String mUrl; private String mBaseDomain;
--- a/mobile/android/base/Tabs.java +++ b/mobile/android/base/Tabs.java @@ -1,47 +1,45 @@ /* -*- 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/. */ package org.mozilla.gecko; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.atomic.AtomicInteger; + +import org.json.JSONObject; import org.mozilla.gecko.db.BrowserDB; import org.mozilla.gecko.favicons.Favicons; import org.mozilla.gecko.fxa.FirefoxAccounts; import org.mozilla.gecko.mozglue.JNITarget; import org.mozilla.gecko.mozglue.RobocopTarget; import org.mozilla.gecko.sync.setup.SyncAccounts; import org.mozilla.gecko.util.GeckoEventListener; import org.mozilla.gecko.util.ThreadUtils; -import org.json.JSONObject; - import android.accounts.Account; import android.accounts.AccountManager; import android.accounts.OnAccountsUpdateListener; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; import android.graphics.Bitmap; import android.graphics.Color; import android.net.Uri; import android.os.Handler; -import android.text.TextUtils; import android.util.Log; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.concurrent.CopyOnWriteArrayList; -import java.util.concurrent.atomic.AtomicInteger; - public class Tabs implements GeckoEventListener { private static final String LOGTAG = "GeckoTabs"; // mOrder and mTabs are always of the same cardinality, and contain the same values. private final CopyOnWriteArrayList<Tab> mOrder = new CopyOnWriteArrayList<Tab>(); // All writes to mSelectedTab must be synchronized on the Tabs instance. // In general, it's preferred to always use selectTab()).
--- a/mobile/android/base/TabsTray.java +++ b/mobile/android/base/TabsTray.java @@ -1,41 +1,40 @@ /* -*- 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/. */ package org.mozilla.gecko; +import java.util.ArrayList; +import java.util.List; + import org.mozilla.gecko.animation.PropertyAnimator; import org.mozilla.gecko.animation.PropertyAnimator.Property; import org.mozilla.gecko.animation.ViewHelper; import org.mozilla.gecko.widget.TwoWayView; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Rect; import android.graphics.drawable.Drawable; -import android.text.TextUtils; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.VelocityTracker; import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; -import java.util.ArrayList; -import java.util.List; - public class TabsTray extends TwoWayView implements TabsPanel.PanelView { private static final String LOGTAG = "GeckoTabsTray"; private Context mContext; private TabsPanel mTabsPanel; private TabsAdapter mTabsAdapter;
--- a/mobile/android/base/db/BrowserDB.java +++ b/mobile/android/base/db/BrowserDB.java @@ -1,30 +1,29 @@ /* -*- 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/. */ package org.mozilla.gecko.db; +import java.util.List; + import org.mozilla.gecko.db.BrowserContract.Bookmarks; import org.mozilla.gecko.db.BrowserContract.ExpirePriority; import org.mozilla.gecko.favicons.decoders.LoadFaviconResult; import org.mozilla.gecko.mozglue.RobocopTarget; import android.content.ContentResolver; import android.database.ContentObserver; import android.database.Cursor; import android.database.CursorWrapper; -import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.util.SparseArray; -import java.util.List; - public class BrowserDB { private static boolean sAreContentProvidersEnabled = true; public static interface URLColumns { public static String URL = "url"; public static String TITLE = "title"; public static String FAVICON = "favicon"; public static String THUMBNAIL = "thumbnail";
--- a/mobile/android/base/db/HomeProvider.java +++ b/mobile/android/base/db/HomeProvider.java @@ -1,37 +1,31 @@ /* 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.db; -import org.mozilla.gecko.R; -import org.mozilla.gecko.db.BrowserContract.HomeItems; -import org.mozilla.gecko.db.PerProfileDatabases.DatabaseHelperFactory; -import org.mozilla.gecko.sqlite.SQLiteBridge; +import java.io.IOException; +import java.io.InputStream; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; +import org.mozilla.gecko.R; +import org.mozilla.gecko.db.BrowserContract.HomeItems; +import org.mozilla.gecko.sqlite.SQLiteBridge; import android.content.ContentValues; -import android.content.Context; import android.content.UriMatcher; import android.database.Cursor; import android.database.MatrixCursor; -import android.database.MatrixCursor.RowBuilder; import android.net.Uri; -import android.os.Build; -import android.text.TextUtils; import android.util.Log; -import java.io.InputStream; -import java.io.IOException; - public class HomeProvider extends SQLiteBridgeContentProvider { private static final String LOGTAG = "GeckoHomeProvider"; // This should be kept in sync with the db version in mobile/android/modules/HomeProvider.jsm private static int DB_VERSION = 1; private static String DB_FILENAME = "home.sqlite"; private static final String TABLE_ITEMS = "items";
--- a/mobile/android/base/db/LocalBrowserDB.java +++ b/mobile/android/base/db/LocalBrowserDB.java @@ -1,48 +1,46 @@ /* -*- 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/. */ package org.mozilla.gecko.db; +import java.io.ByteArrayOutputStream; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; + import org.mozilla.gecko.AboutPages; import org.mozilla.gecko.db.BrowserContract.Bookmarks; import org.mozilla.gecko.db.BrowserContract.Combined; import org.mozilla.gecko.db.BrowserContract.ExpirePriority; import org.mozilla.gecko.db.BrowserContract.FaviconColumns; import org.mozilla.gecko.db.BrowserContract.Favicons; import org.mozilla.gecko.db.BrowserContract.History; import org.mozilla.gecko.db.BrowserContract.SyncColumns; import org.mozilla.gecko.db.BrowserContract.Thumbnails; import org.mozilla.gecko.db.BrowserContract.URLColumns; import org.mozilla.gecko.favicons.decoders.FaviconDecoder; import org.mozilla.gecko.favicons.decoders.LoadFaviconResult; -import org.mozilla.gecko.gfx.BitmapUtils; import android.content.ContentProviderOperation; import android.content.ContentResolver; import android.content.ContentValues; import android.database.ContentObserver; import android.database.Cursor; import android.database.CursorWrapper; -import android.database.DatabaseUtils; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.provider.Browser; import android.text.TextUtils; import android.util.Log; -import java.io.ByteArrayOutputStream; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; - public class LocalBrowserDB implements BrowserDB.BrowserDBIface { // Calculate these once, at initialization. isLoggable is too expensive to // have in-line in each log call. private static final String LOGTAG = "GeckoLocalBrowserDB"; private static boolean logDebug = Log.isLoggable(LOGTAG, Log.DEBUG); protected static void debug(String message) { if (logDebug) { Log.d(LOGTAG, message);
--- a/mobile/android/base/gfx/Axis.java +++ b/mobile/android/base/gfx/Axis.java @@ -1,27 +1,25 @@ /* -*- 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/. */ package org.mozilla.gecko.gfx; +import java.util.HashMap; +import java.util.Map; + import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.PrefsHelper; import org.mozilla.gecko.util.FloatUtils; -import org.json.JSONArray; - import android.util.Log; import android.view.View; -import java.util.HashMap; -import java.util.Map; - /** * This class represents the physics for one axis of movement (i.e. either * horizontal or vertical). It tracks the different properties of movement * like displacement, velocity, viewport dimensions, etc. pertaining to * a particular axis. */ abstract class Axis { private static final String LOGTAG = "GeckoAxis";
--- a/mobile/android/base/gfx/BitmapUtils.java +++ b/mobile/android/base/gfx/BitmapUtils.java @@ -1,60 +1,78 @@ /* -*- 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/. */ package org.mozilla.gecko.gfx; +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.net.MalformedURLException; +import java.net.URL; + +import org.mozilla.gecko.R; +import org.mozilla.gecko.util.GeckoJarReader; import org.mozilla.gecko.util.ThreadUtils; -import org.mozilla.gecko.util.GeckoJarReader; import org.mozilla.gecko.util.UiAsyncTask; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.graphics.drawable.BitmapDrawable; import android.net.Uri; -import android.os.AsyncTask; +import android.text.TextUtils; import android.util.Base64; import android.util.Log; -import android.text.TextUtils; - -import org.mozilla.gecko.R; - -import java.io.IOException; -import java.io.InputStream; -import java.lang.reflect.Field; -import java.lang.NoSuchFieldException; -import java.net.MalformedURLException; -import java.net.URL; public final class BitmapUtils { private static final String LOGTAG = "GeckoBitmapUtils"; private BitmapUtils() {} public interface BitmapLoader { public void onBitmapFound(Drawable d); } + private static void runOnBitmapFoundOnUiThread(final BitmapLoader loader, final Drawable d) { + if (ThreadUtils.isOnUiThread()) { + loader.onBitmapFound(d); + return; + } + + ThreadUtils.postToUiThread(new Runnable() { + @Override + public void run() { + loader.onBitmapFound(d); + } + }); + } + + /** + * Attempts to find a drawable associated with a given string, using its URI scheme to determine + * how to load the drawable. The BitmapLoader's `onBitmapFound` method is always called, and + * will be called with `null` if no drawable is found. + * + * The BitmapLoader `onBitmapFound` method always runs on the UI thread. + */ public static void getDrawable(final Context context, final String data, final BitmapLoader loader) { if (TextUtils.isEmpty(data)) { - loader.onBitmapFound(null); + runOnBitmapFoundOnUiThread(loader, null); return; } if (data.startsWith("data")) { - BitmapDrawable d = new BitmapDrawable(context.getResources(), getBitmapFromDataURI(data)); - loader.onBitmapFound(d); + final BitmapDrawable d = new BitmapDrawable(context.getResources(), getBitmapFromDataURI(data)); + runOnBitmapFoundOnUiThread(loader, d); return; } if (data.startsWith("jar:") || data.startsWith("file://")) { (new UiAsyncTask<Void, Void, Drawable>(ThreadUtils.getBackgroundHandler()) { @Override public Drawable doInBackground(Void... params) { try { @@ -62,18 +80,18 @@ public final class BitmapUtils { return GeckoJarReader.getBitmapDrawable(context.getResources(), data); } // Don't attempt to validate the JAR signature when loading an add-on icon if (data.startsWith("jar:file")) { return GeckoJarReader.getBitmapDrawable(context.getResources(), Uri.decode(data)); } - URL url = new URL(data); - InputStream is = (InputStream) url.getContent(); + final URL url = new URL(data); + final InputStream is = (InputStream) url.getContent(); try { return Drawable.createFromStream(is, "src"); } finally { is.close(); } } catch (Exception e) { Log.w(LOGTAG, "Unable to set icon", e); } @@ -83,39 +101,39 @@ public final class BitmapUtils { @Override public void onPostExecute(Drawable drawable) { loader.onBitmapFound(drawable); } }).execute(); return; } - if(data.startsWith("-moz-icon://")) { - Uri imageUri = Uri.parse(data); - String resource = imageUri.getSchemeSpecificPart(); - resource = resource.substring(resource.lastIndexOf('/') + 1); + if (data.startsWith("-moz-icon://")) { + final Uri imageUri = Uri.parse(data); + final String ssp = imageUri.getSchemeSpecificPart(); + final String resource = ssp.substring(ssp.lastIndexOf('/') + 1); try { - Drawable d = context.getPackageManager().getApplicationIcon(resource); - loader.onBitmapFound(d); + final Drawable d = context.getPackageManager().getApplicationIcon(resource); + runOnBitmapFoundOnUiThread(loader, d); } catch(Exception ex) { } return; } - if(data.startsWith("drawable://")) { - Uri imageUri = Uri.parse(data); - int id = getResource(imageUri, R.drawable.ic_status_logo); - Drawable d = context.getResources().getDrawable(id); + if (data.startsWith("drawable://")) { + final Uri imageUri = Uri.parse(data); + final int id = getResource(imageUri, R.drawable.ic_status_logo); + final Drawable d = context.getResources().getDrawable(id); - loader.onBitmapFound(d); + runOnBitmapFoundOnUiThread(loader, d); return; } - loader.onBitmapFound(null); + runOnBitmapFoundOnUiThread(loader, null); } public static Bitmap decodeByteArray(byte[] bytes) { return decodeByteArray(bytes, null); } public static Bitmap decodeByteArray(byte[] bytes, BitmapFactory.Options options) { return decodeByteArray(bytes, 0, bytes.length, options);
--- a/mobile/android/base/health/BrowserHealthRecorder.java +++ b/mobile/android/base/health/BrowserHealthRecorder.java @@ -1,56 +1,50 @@ /* -*- 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/. */ package org.mozilla.gecko.health; -import java.util.ArrayList; - -import android.content.Context; -import android.content.ContentProviderClient; -import android.content.SharedPreferences; -import android.util.Log; - -import org.mozilla.gecko.AppConstants; -import org.mozilla.gecko.Distribution; -import org.mozilla.gecko.Distribution.DistributionDescriptor; -import org.mozilla.gecko.GeckoApp; -import org.mozilla.gecko.GeckoAppShell; -import org.mozilla.gecko.GeckoEvent; - -import org.mozilla.gecko.background.healthreport.EnvironmentBuilder; -import org.mozilla.gecko.background.healthreport.HealthReportDatabaseStorage; -import org.mozilla.gecko.background.healthreport.HealthReportStorage.Field; -import org.mozilla.gecko.background.healthreport.HealthReportStorage.MeasurementFields; -import org.mozilla.gecko.background.healthreport.HealthReportStorage.MeasurementFields.FieldSpec; -import org.mozilla.gecko.background.healthreport.ProfileInformationCache; - -import org.mozilla.gecko.EventDispatcher; -import org.mozilla.gecko.util.GeckoEventListener; -import org.mozilla.gecko.util.ThreadUtils; - -import org.json.JSONException; -import org.json.JSONObject; - import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.nio.charset.Charset; +import java.util.ArrayList; import java.util.Arrays; -import java.util.ArrayList; import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.Scanner; import java.util.Set; import java.util.concurrent.atomic.AtomicBoolean; +import org.json.JSONException; +import org.json.JSONObject; +import org.mozilla.gecko.AppConstants; +import org.mozilla.gecko.Distribution; +import org.mozilla.gecko.Distribution.DistributionDescriptor; +import org.mozilla.gecko.EventDispatcher; +import org.mozilla.gecko.GeckoApp; +import org.mozilla.gecko.GeckoAppShell; +import org.mozilla.gecko.GeckoEvent; +import org.mozilla.gecko.background.healthreport.EnvironmentBuilder; +import org.mozilla.gecko.background.healthreport.HealthReportDatabaseStorage; +import org.mozilla.gecko.background.healthreport.HealthReportStorage.Field; +import org.mozilla.gecko.background.healthreport.HealthReportStorage.MeasurementFields; +import org.mozilla.gecko.background.healthreport.ProfileInformationCache; +import org.mozilla.gecko.util.GeckoEventListener; +import org.mozilla.gecko.util.ThreadUtils; + +import android.content.ContentProviderClient; +import android.content.Context; +import android.content.SharedPreferences; +import android.util.Log; + /** * BrowserHealthRecorder is the browser's interface to the Firefox Health * Report storage system. It manages environments (a collection of attributes * that are tracked longitudinally) on the browser's behalf, exposing a simpler * interface for recording changes. * * Keep an instance of this class around. *
--- a/mobile/android/base/home/BookmarksListAdapter.java +++ b/mobile/android/base/home/BookmarksListAdapter.java @@ -1,29 +1,29 @@ /* -*- 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/. */ package org.mozilla.gecko.home; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + import org.mozilla.gecko.R; import org.mozilla.gecko.db.BrowserContract.Bookmarks; import android.content.Context; import android.content.res.Resources; import android.database.Cursor; import android.os.Parcel; import android.os.Parcelable; import android.view.View; -import java.util.Collections; -import java.util.List; -import java.util.LinkedList; - /** * Adapter to back the BookmarksListView with a list of bookmarks. */ class BookmarksListAdapter extends MultiTypeCursorAdapter { private static final int VIEW_TYPE_ITEM = 0; private static final int VIEW_TYPE_FOLDER = 1; private static final int[] VIEW_TYPES = new int[] { VIEW_TYPE_ITEM, VIEW_TYPE_FOLDER };
--- a/mobile/android/base/home/BookmarksListView.java +++ b/mobile/android/base/home/BookmarksListView.java @@ -1,32 +1,30 @@ /* -*- 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/. */ package org.mozilla.gecko.home; +import java.util.EnumSet; + import org.mozilla.gecko.R; import org.mozilla.gecko.db.BrowserContract.Bookmarks; import org.mozilla.gecko.db.BrowserDB.URLColumns; import org.mozilla.gecko.home.HomePager.OnUrlOpenListener; import android.content.Context; import android.database.Cursor; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.View; -import android.view.ViewConfiguration; import android.widget.AdapterView; import android.widget.HeaderViewListAdapter; import android.widget.ListAdapter; -import android.widget.ListView; - -import java.util.EnumSet; /** * A ListView of bookmarks. */ public class BookmarksListView extends HomeListView implements AdapterView.OnItemClickListener{ public static final String LOGTAG = "GeckoBookmarksListView";
--- a/mobile/android/base/home/BookmarksPanel.java +++ b/mobile/android/base/home/BookmarksPanel.java @@ -1,40 +1,39 @@ /* -*- 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/. */ package org.mozilla.gecko.home; +import java.util.List; + import org.mozilla.gecko.R; import org.mozilla.gecko.db.BrowserContract.Bookmarks; -import org.mozilla.gecko.db.BrowserContract.URLColumns; import org.mozilla.gecko.db.BrowserDB; import org.mozilla.gecko.home.BookmarksListAdapter.FolderInfo; import org.mozilla.gecko.home.BookmarksListAdapter.OnRefreshFolderListener; import org.mozilla.gecko.home.BookmarksListAdapter.RefreshType; import org.mozilla.gecko.home.HomePager.OnUrlOpenListener; import android.app.Activity; import android.content.Context; import android.content.res.Configuration; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.view.ViewStub; -import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import java.util.List; - /** * A page in about:home that displays a ListView of bookmarks. */ public class BookmarksPanel extends HomeFragment { public static final String LOGTAG = "GeckoBookmarksPanel"; // Cursor loader ID for list of bookmarks. private static final int LOADER_ID_BOOKMARKS_LIST = 0;
--- a/mobile/android/base/home/DynamicPanel.java +++ b/mobile/android/base/home/DynamicPanel.java @@ -1,42 +1,35 @@ /* -*- 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/. */ package org.mozilla.gecko.home; -import org.mozilla.gecko.R; -import org.mozilla.gecko.db.BrowserContract; import org.mozilla.gecko.db.BrowserContract.HomeItems; +import org.mozilla.gecko.db.DBUtils; +import org.mozilla.gecko.home.HomeConfig.PanelConfig; import org.mozilla.gecko.home.HomePager.OnUrlOpenListener; -import org.mozilla.gecko.home.HomeConfig.PanelConfig; import org.mozilla.gecko.home.PanelLayout.DatasetHandler; import org.mozilla.gecko.home.PanelLayout.DatasetRequest; -import org.mozilla.gecko.db.DBUtils; import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.content.res.Configuration; import android.database.Cursor; -import android.net.Uri; import android.os.Bundle; import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; -import android.support.v4.widget.CursorAdapter; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ListView; - -import java.util.EnumSet; /** * Fragment that displays dynamic content specified by a {@code PanelConfig}. * The {@code DynamicPanel} UI is built based on the given {@code LayoutType} * and its associated list of {@code ViewConfig}. * * {@code DynamicPanel} manages all necessary Loaders to load panel datasets * from their respective content providers. Each panel dataset has its own
--- a/mobile/android/base/home/HistoryPanel.java +++ b/mobile/android/base/home/HistoryPanel.java @@ -2,27 +2,23 @@ * 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.home; import org.mozilla.gecko.R; import org.mozilla.gecko.widget.IconTabWidget; -import android.support.v4.app.Fragment; -import android.content.Context; + import android.content.res.Configuration; -import android.content.res.Resources; import android.os.Bundle; +import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.LayoutInflater; - -import android.widget.ImageButton; public class HistoryPanel extends HomeFragment implements IconTabWidget.OnTabChangedListener { // Logging tag name private static final String LOGTAG = "GeckoHistoryPanel"; private IconTabWidget mTabWidget; private int mSelectedTab; private boolean initializeRecentPanel;
--- a/mobile/android/base/home/HomeBanner.java +++ b/mobile/android/base/home/HomeBanner.java @@ -1,29 +1,27 @@ /* -*- 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/. */ package org.mozilla.gecko.home; -import org.mozilla.gecko.animation.PropertyAnimator; -import org.mozilla.gecko.animation.PropertyAnimator.Property; -import org.mozilla.gecko.animation.PropertyAnimator.PropertyAnimationListener; -import org.mozilla.gecko.animation.ViewHelper; +import org.json.JSONException; +import org.json.JSONObject; import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.GeckoEvent; import org.mozilla.gecko.R; +import org.mozilla.gecko.animation.PropertyAnimator; +import org.mozilla.gecko.animation.PropertyAnimator.Property; +import org.mozilla.gecko.animation.ViewHelper; import org.mozilla.gecko.gfx.BitmapUtils; import org.mozilla.gecko.util.GeckoEventListener; import org.mozilla.gecko.util.ThreadUtils; -import org.json.JSONException; -import org.json.JSONObject; - import android.content.Context; import android.graphics.drawable.Drawable; import android.text.Html; import android.text.Spanned; import android.text.TextUtils; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; @@ -49,24 +47,30 @@ public class HomeBanner extends LinearLa // The user is currently swiping between HomePager pages private boolean mScrollingPages = false; // Tracks whether the user swiped the banner down, preventing us from autoshowing when the user // switches back to the default page. private boolean mUserSwipedDown = false; + private final TextView mTextView; + private final ImageView mIconView; + public HomeBanner(Context context) { this(context, null); } public HomeBanner(Context context, AttributeSet attrs) { super(context, attrs); LayoutInflater.from(context).inflate(R.layout.home_banner, this); + + mTextView = (TextView) findViewById(R.id.text); + mIconView = (ImageView) findViewById(R.id.icon); } @Override public void onAttachedToWindow() { super.onAttachedToWindow(); // Tapping on the close button will ensure that the banner is never // showed again on this session. @@ -110,57 +114,42 @@ public class HomeBanner extends LinearLa @Override public void handleMessage(String event, JSONObject message) { try { // Store the current message id to pass back to JS in the view's OnClickListener. setTag(message.getString("id")); // Display styled text from an HTML string. final Spanned text = Html.fromHtml(message.getString("text")); - final TextView textView = (TextView) findViewById(R.id.text); // Update the banner message on the UI thread. ThreadUtils.postToUiThread(new Runnable() { @Override public void run() { - textView.setText(text); + mTextView.setText(text); setVisibility(VISIBLE); animateUp(); } }); } catch (JSONException e) { Log.e(LOGTAG, "Exception handling " + event + " message", e); return; } final String iconURI = message.optString("iconURI"); - final ImageView iconView = (ImageView) findViewById(R.id.icon); - - if (TextUtils.isEmpty(iconURI)) { - // Hide the image view if we don't have an icon to show. - iconView.setVisibility(View.GONE); - return; - } BitmapUtils.getDrawable(getContext(), iconURI, new BitmapUtils.BitmapLoader() { @Override public void onBitmapFound(final Drawable d) { - // Bail if getDrawable doesn't find anything. + // Hide the image view if we don't have an icon to show. if (d == null) { - iconView.setVisibility(View.GONE); - return; + mIconView.setVisibility(View.GONE); + } else { + mIconView.setImageDrawable(d); } - - // Update the banner icon on the UI thread. - ThreadUtils.postToUiThread(new Runnable() { - @Override - public void run() { - iconView.setImageDrawable(d); - } - }); } }); } public void setEnabled(boolean enabled) { // No need to animate if not changing if (mEnabled == enabled) { return; @@ -172,18 +161,17 @@ public class HomeBanner extends LinearLa } else { animateDown(); } } private void animateUp() { // Check to make sure that message has been received and the banner has been enabled. // Necessary to avoid race conditions between show() and handleMessage() calls. - TextView textView = (TextView) findViewById(R.id.text); - if (!mEnabled || TextUtils.isEmpty(textView.getText()) || mUserSwipedDown) { + if (!mEnabled || TextUtils.isEmpty(mTextView.getText()) || mUserSwipedDown) { return; } // No need to animate if already translated. if (ViewHelper.getTranslationY(this) == 0) { return; }
--- a/mobile/android/base/home/HomeConfigInvalidator.java +++ b/mobile/android/base/home/HomeConfigInvalidator.java @@ -1,40 +1,37 @@ /* -*- 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/. */ package org.mozilla.gecko.home; -import org.mozilla.gecko.GeckoAppShell; -import org.mozilla.gecko.home.HomeConfig.PanelConfig; -import org.mozilla.gecko.home.HomeConfig.PanelType; -import org.mozilla.gecko.home.PanelManager.PanelInfo; -import org.mozilla.gecko.home.PanelManager.RequestCallback; -import org.mozilla.gecko.util.GeckoEventListener; -import org.mozilla.gecko.util.ThreadUtils; - import static org.mozilla.gecko.home.HomeConfig.createBuiltinPanelConfig; -import android.content.Context; -import android.os.Handler; -import android.text.TextUtils; -import android.util.Log; - -import org.json.JSONException; -import org.json.JSONObject; - import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Queue; import java.util.Set; import java.util.concurrent.ConcurrentLinkedQueue; +import org.json.JSONException; +import org.json.JSONObject; +import org.mozilla.gecko.GeckoAppShell; +import org.mozilla.gecko.home.HomeConfig.PanelConfig; +import org.mozilla.gecko.home.PanelManager.PanelInfo; +import org.mozilla.gecko.home.PanelManager.RequestCallback; +import org.mozilla.gecko.util.GeckoEventListener; +import org.mozilla.gecko.util.ThreadUtils; + +import android.content.Context; +import android.os.Handler; +import android.util.Log; + public class HomeConfigInvalidator implements GeckoEventListener { public static final String LOGTAG = "HomeConfigInvalidator"; private static final HomeConfigInvalidator sInstance = new HomeConfigInvalidator(); private static final int INVALIDATION_DELAY_MSEC = 500; private static final int PANEL_INFO_TIMEOUT_MSEC = 1000;
--- a/mobile/android/base/home/HomeConfigPrefsBackend.java +++ b/mobile/android/base/home/HomeConfigPrefsBackend.java @@ -1,41 +1,38 @@ /* -*- 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/. */ package org.mozilla.gecko.home; -import org.mozilla.gecko.R; +import static org.mozilla.gecko.home.HomeConfig.createBuiltinPanelConfig; + +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; +import java.util.Locale; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import org.mozilla.gecko.home.HomeConfig.HomeConfigBackend; import org.mozilla.gecko.home.HomeConfig.OnChangeListener; import org.mozilla.gecko.home.HomeConfig.PanelConfig; import org.mozilla.gecko.home.HomeConfig.PanelType; import org.mozilla.gecko.util.HardwareUtils; -import org.mozilla.gecko.util.ThreadUtils; - -import static org.mozilla.gecko.home.HomeConfig.createBuiltinPanelConfig; - -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.OnSharedPreferenceChangeListener; import android.preference.PreferenceManager; import android.text.TextUtils; import android.util.Log; -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.List; -import java.util.Locale; - class HomeConfigPrefsBackend implements HomeConfigBackend { private static final String LOGTAG = "GeckoHomeConfigBackend"; private static final String PREFS_CONFIG_KEY = "home_panels"; private static final String PREFS_LOCALE_KEY = "home_locale"; private final Context mContext; private PrefsListener mPrefsListener;
--- a/mobile/android/base/home/HomeFragment.java +++ b/mobile/android/base/home/HomeFragment.java @@ -1,33 +1,31 @@ /* -*- 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/. */ package org.mozilla.gecko.home; import org.mozilla.gecko.EditBookmarkDialog; -import org.mozilla.gecko.favicons.Favicons; import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.GeckoEvent; import org.mozilla.gecko.GeckoProfile; import org.mozilla.gecko.R; import org.mozilla.gecko.ReaderModeUtils; import org.mozilla.gecko.Tabs; import org.mozilla.gecko.db.BrowserContract.Combined; import org.mozilla.gecko.db.BrowserDB; -import org.mozilla.gecko.home.HomeContextMenuInfo; +import org.mozilla.gecko.favicons.Favicons; import org.mozilla.gecko.util.ThreadUtils; import org.mozilla.gecko.util.UiAsyncTask; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; -import android.graphics.Bitmap; import android.os.Bundle; import android.support.v4.app.Fragment; import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View;
--- a/mobile/android/base/home/HomePager.java +++ b/mobile/android/base/home/HomePager.java @@ -1,42 +1,38 @@ /* -*- 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/. */ package org.mozilla.gecko.home; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; + import org.mozilla.gecko.R; import org.mozilla.gecko.animation.PropertyAnimator; import org.mozilla.gecko.animation.ViewHelper; import org.mozilla.gecko.home.HomeAdapter.OnAddPanelListener; import org.mozilla.gecko.home.HomeConfig.PanelConfig; -import org.mozilla.gecko.home.HomeConfig.PanelType; -import org.mozilla.gecko.util.HardwareUtils; import android.content.Context; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; -import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.support.v4.view.ViewPager; -import android.view.ViewGroup.LayoutParams; import android.util.AttributeSet; import android.view.MotionEvent; +import android.view.View; import android.view.ViewGroup; -import android.view.View; - -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.List; public class HomePager extends ViewPager { private static final int LOADER_ID_CONFIG = 0; private final Context mContext; private volatile boolean mLoaded; private Decor mDecor;
--- a/mobile/android/base/home/LastTabsPanel.java +++ b/mobile/android/base/home/LastTabsPanel.java @@ -5,37 +5,33 @@ package org.mozilla.gecko.home; import org.mozilla.gecko.AboutPages; import org.mozilla.gecko.GeckoProfile; import org.mozilla.gecko.R; import org.mozilla.gecko.SessionParser; import org.mozilla.gecko.db.BrowserContract.Combined; -import org.mozilla.gecko.db.BrowserDB; import org.mozilla.gecko.home.HomePager.OnNewTabsListener; import android.app.Activity; -import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.database.MatrixCursor; import android.database.MatrixCursor.RowBuilder; import android.os.Bundle; -import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter; import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.view.ViewStub; -import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ImageView; -import android.widget.ListView; import android.widget.TextView; /** * Fragment that displays tabs from last session in a ListView. */ public class LastTabsPanel extends HomeFragment { // Logging tag name private static final String LOGTAG = "GeckoLastTabsPanel";
--- a/mobile/android/base/home/MostRecentPanel.java +++ b/mobile/android/base/home/MostRecentPanel.java @@ -1,44 +1,40 @@ /* -*- 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/. */ package org.mozilla.gecko.home; +import java.util.Date; +import java.util.EnumSet; + import org.mozilla.gecko.R; import org.mozilla.gecko.db.BrowserContract.Combined; import org.mozilla.gecko.db.BrowserDB; -import org.mozilla.gecko.db.BrowserContract.Bookmarks; import org.mozilla.gecko.db.BrowserDB.URLColumns; import org.mozilla.gecko.home.HomePager.OnUrlOpenListener; -import org.mozilla.gecko.home.TwoLinePageRow; import android.app.Activity; import android.content.ContentResolver; import android.content.Context; import android.database.Cursor; import android.os.Bundle; -import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.view.ViewStub; -import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ImageView; -import android.widget.ListView; import android.widget.TextView; -import java.util.Date; -import java.util.EnumSet; - /** * Fragment that displays recent history in a ListView. */ public class MostRecentPanel extends HomeFragment { // Logging tag name private static final String LOGTAG = "GeckoMostRecentPanel"; // Cursor loader ID for history query
--- a/mobile/android/base/home/PanelGridView.java +++ b/mobile/android/base/home/PanelGridView.java @@ -1,34 +1,31 @@ /* -*- 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/. */ package org.mozilla.gecko.home; +import java.util.EnumSet; + import org.mozilla.gecko.R; import org.mozilla.gecko.db.BrowserContract.HomeItems; import org.mozilla.gecko.home.HomeConfig.ItemHandler; import org.mozilla.gecko.home.HomeConfig.ViewConfig; import org.mozilla.gecko.home.HomePager.OnUrlOpenListener; import org.mozilla.gecko.home.PanelLayout.DatasetBacked; import org.mozilla.gecko.home.PanelLayout.PanelView; import android.content.Context; import android.database.Cursor; -import android.support.v4.widget.CursorAdapter; -import android.util.Log; import android.view.View; -import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.GridView; -import java.util.EnumSet; - public class PanelGridView extends GridView implements DatasetBacked, PanelView { private static final String LOGTAG = "GeckoPanelGridView"; private final ViewConfig mViewConfig; private final PanelViewAdapter mAdapter; protected OnUrlOpenListener mUrlOpenListener;
--- a/mobile/android/base/home/PanelItemView.java +++ b/mobile/android/base/home/PanelItemView.java @@ -4,30 +4,26 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ package org.mozilla.gecko.home; import org.mozilla.gecko.R; import org.mozilla.gecko.db.BrowserContract.HomeItems; import org.mozilla.gecko.home.HomeConfig.ItemType; -import com.squareup.picasso.Picasso; - import android.content.Context; import android.database.Cursor; import android.text.TextUtils; -import android.util.AttributeSet; -import android.view.Gravity; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -import java.lang.ref.WeakReference; +import com.squareup.picasso.Picasso; class PanelItemView extends LinearLayout { private final TextView mTitle; private final TextView mDescription; private final ImageView mImage; private final LinearLayout mTitleDescContainer; private PanelItemView(Context context, int layoutId) {
--- a/mobile/android/base/home/PanelListView.java +++ b/mobile/android/base/home/PanelListView.java @@ -1,34 +1,30 @@ /* -*- 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/. */ package org.mozilla.gecko.home; -import org.mozilla.gecko.R; +import java.util.EnumSet; + +import org.mozilla.gecko.db.BrowserContract.HomeItems; import org.mozilla.gecko.home.HomeConfig.ItemHandler; import org.mozilla.gecko.home.HomeConfig.ViewConfig; import org.mozilla.gecko.home.HomePager.OnUrlOpenListener; import org.mozilla.gecko.home.PanelLayout.DatasetBacked; import org.mozilla.gecko.home.PanelLayout.PanelView; -import org.mozilla.gecko.db.BrowserContract.HomeItems; import android.content.Context; import android.database.Cursor; -import android.support.v4.widget.CursorAdapter; import android.util.Log; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; import android.widget.AdapterView; -import java.util.EnumSet; - public class PanelListView extends HomeListView implements DatasetBacked, PanelView { private static final String LOGTAG = "GeckoPanelListView"; private final PanelViewAdapter mAdapter; private final ViewConfig mViewConfig;
--- a/mobile/android/base/home/PanelManager.java +++ b/mobile/android/base/home/PanelManager.java @@ -1,37 +1,32 @@ /* -*- 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/. */ package org.mozilla.gecko.home; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import java.util.concurrent.atomic.AtomicInteger; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.GeckoEvent; import org.mozilla.gecko.home.HomeConfig.PanelConfig; import org.mozilla.gecko.util.GeckoEventListener; import org.mozilla.gecko.util.ThreadUtils; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; - -import android.content.Context; -import android.content.SharedPreferences; -import android.preference.PreferenceManager; -import android.text.TextUtils; import android.util.Log; import android.util.SparseArray; -import java.util.ArrayList; -import java.util.List; -import java.util.Set; -import java.util.concurrent.atomic.AtomicInteger; - public class PanelManager implements GeckoEventListener { private static final String LOGTAG = "GeckoPanelManager"; public class PanelInfo { private final String mId; private final String mTitle; private final JSONObject mJSONData;
--- a/mobile/android/base/home/PanelViewAdapter.java +++ b/mobile/android/base/home/PanelViewAdapter.java @@ -1,16 +1,15 @@ /* -*- 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/. */ package org.mozilla.gecko.home; -import org.mozilla.gecko.R; import org.mozilla.gecko.home.HomeConfig.ItemType; import android.content.Context; import android.database.Cursor; import android.support.v4.widget.CursorAdapter; import android.view.View; import android.view.ViewGroup;
--- a/mobile/android/base/home/PinSiteDialog.java +++ b/mobile/android/base/home/PinSiteDialog.java @@ -3,17 +3,16 @@ * 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.home; import org.mozilla.gecko.R; import org.mozilla.gecko.db.BrowserDB.URLColumns; -import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.DialogFragment; import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; import android.support.v4.widget.CursorAdapter;
--- a/mobile/android/base/home/ReadingListPanel.java +++ b/mobile/android/base/home/ReadingListPanel.java @@ -1,22 +1,23 @@ /* -*- 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/. */ package org.mozilla.gecko.home; +import java.util.EnumSet; + import org.mozilla.gecko.R; +import org.mozilla.gecko.ReaderModeUtils; import org.mozilla.gecko.db.BrowserContract.Bookmarks; import org.mozilla.gecko.db.BrowserDB; import org.mozilla.gecko.db.BrowserDB.URLColumns; import org.mozilla.gecko.home.HomePager.OnUrlOpenListener; -import org.mozilla.gecko.home.TwoLinePageRow; -import org.mozilla.gecko.ReaderModeUtils; import android.app.Activity; import android.content.Context; import android.content.res.Configuration; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; @@ -24,21 +25,18 @@ import android.support.v4.widget.CursorA import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.ImageSpan; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewStub; import android.widget.AdapterView; -import android.widget.ListView; import android.widget.TextView; -import java.util.EnumSet; - /** * Fragment that displays reading list contents in a ListView. */ public class ReadingListPanel extends HomeFragment { // Cursor loader ID for reading list private static final int LOADER_ID_READING_LIST = 0; // Formatted string in hint text to be replaced with an icon.
--- a/mobile/android/base/home/SearchLoader.java +++ b/mobile/android/base/home/SearchLoader.java @@ -8,17 +8,16 @@ package org.mozilla.gecko.home; import org.mozilla.gecko.db.BrowserDB; import android.content.Context; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.LoaderManager; import android.support.v4.app.LoaderManager.LoaderCallbacks; import android.support.v4.content.Loader; -import android.text.TextUtils; /** * Encapsulates the implementation of the search cursor loader. */ class SearchLoader { // Key for search terms private static final String KEY_SEARCH_TERM = "search_term";
--- a/mobile/android/base/home/SimpleCursorLoader.java +++ b/mobile/android/base/home/SimpleCursorLoader.java @@ -15,24 +15,19 @@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.mozilla.gecko.home; import android.content.Context; -import android.database.ContentObserver; import android.database.Cursor; import android.support.v4.content.AsyncTaskLoader; -import java.io.FileDescriptor; -import java.io.PrintWriter; -import java.util.Arrays; - abstract class SimpleCursorLoader extends AsyncTaskLoader<Cursor> { final ForceLoadContentObserver mObserver; Cursor mCursor; public SimpleCursorLoader(Context context) { super(context); mObserver = new ForceLoadContentObserver(); }
--- a/mobile/android/base/home/TabMenuStrip.java +++ b/mobile/android/base/home/TabMenuStrip.java @@ -1,33 +1,28 @@ /* -*- 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.home; +import org.mozilla.gecko.R; + import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.drawable.Drawable; -import android.graphics.Rect; -import android.support.v4.view.ViewPager; import android.util.AttributeSet; -import android.view.accessibility.AccessibilityEvent; import android.view.LayoutInflater; import android.view.View; -import android.view.ViewParent; import android.view.ViewTreeObserver; +import android.view.accessibility.AccessibilityEvent; import android.widget.LinearLayout; import android.widget.TextView; -import android.util.Log; - -import org.mozilla.gecko.home.HomePager; -import org.mozilla.gecko.R; public class TabMenuStrip extends LinearLayout implements HomePager.Decor, View.OnFocusChangeListener { private static final String LOGTAG = "GeckoTabMenuStrip"; private HomePager.OnTitleClickListener mOnTitleClickListener; private Drawable mStrip;
--- a/mobile/android/base/home/TopSitesGridView.java +++ b/mobile/android/base/home/TopSitesGridView.java @@ -1,37 +1,36 @@ /* -*- 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/. */ package org.mozilla.gecko.home; +import java.util.EnumSet; + import org.mozilla.gecko.R; import org.mozilla.gecko.ThumbnailHelper; import org.mozilla.gecko.db.BrowserDB.TopSitesCursorWrapper; import org.mozilla.gecko.db.BrowserDB.URLColumns; import org.mozilla.gecko.home.HomePager.OnUrlOpenListener; import org.mozilla.gecko.util.StringUtils; import android.content.Context; import android.content.res.TypedArray; import android.database.Cursor; import android.graphics.Rect; import android.text.TextUtils; import android.util.AttributeSet; -import android.util.Log; import android.view.ContextMenu.ContextMenuInfo; import android.view.View; import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.GridView; -import java.util.EnumSet; - /** * A grid view of top and pinned sites. * Each cell in the grid is a TopSitesGridItemView. */ public class TopSitesGridView extends GridView { private static final String LOGTAG = "GeckoTopSitesGridView"; // Listener for editing pinned sites.
--- a/mobile/android/base/home/TopSitesPanel.java +++ b/mobile/android/base/home/TopSitesPanel.java @@ -1,28 +1,30 @@ /* -*- 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/. */ package org.mozilla.gecko.home; -import org.mozilla.gecko.favicons.Favicons; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.HashMap; +import java.util.Map; + +import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.R; import org.mozilla.gecko.Tabs; -import org.mozilla.gecko.animation.PropertyAnimator; -import org.mozilla.gecko.animation.PropertyAnimator.Property; -import org.mozilla.gecko.animation.ViewHelper; import org.mozilla.gecko.db.BrowserContract.Combined; import org.mozilla.gecko.db.BrowserContract.Thumbnails; import org.mozilla.gecko.db.BrowserDB; +import org.mozilla.gecko.db.BrowserDB.TopSitesCursorWrapper; import org.mozilla.gecko.db.BrowserDB.URLColumns; -import org.mozilla.gecko.db.BrowserDB.TopSitesCursorWrapper; +import org.mozilla.gecko.favicons.Favicons; import org.mozilla.gecko.favicons.OnFaviconLoadedListener; -import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.gfx.BitmapUtils; import org.mozilla.gecko.home.HomePager.OnUrlOpenListener; import org.mozilla.gecko.home.PinSiteDialog.OnSiteSelectedListener; import org.mozilla.gecko.home.TopSitesGridView.OnEditPinnedSiteListener; import org.mozilla.gecko.home.TopSitesGridView.TopSitesGridContextMenuInfo; import org.mozilla.gecko.util.ThreadUtils; import android.app.Activity; @@ -41,29 +43,22 @@ import android.support.v4.content.Loader import android.support.v4.widget.CursorAdapter; import android.text.TextUtils; import android.util.Log; import android.view.ContextMenu; import android.view.ContextMenu.ContextMenuInfo; import android.view.LayoutInflater; import android.view.MenuInflater; import android.view.MenuItem; -import android.view.MotionEvent; import android.view.View; -import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; -import java.util.EnumSet; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - /** * Fragment that displays frecency search results in a ListView. */ public class TopSitesPanel extends HomeFragment { // Logging tag name private static final String LOGTAG = "GeckoTopSitesPanel"; // Cursor loader ID for the top sites
--- a/mobile/android/base/home/TwoLinePageRow.java +++ b/mobile/android/base/home/TwoLinePageRow.java @@ -1,38 +1,37 @@ /* -*- 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/. */ package org.mozilla.gecko.home; -import android.util.Log; -import org.mozilla.gecko.favicons.Favicons; +import java.lang.ref.WeakReference; + import org.mozilla.gecko.R; import org.mozilla.gecko.Tab; import org.mozilla.gecko.Tabs; import org.mozilla.gecko.db.BrowserContract.Combined; import org.mozilla.gecko.db.BrowserDB.URLColumns; +import org.mozilla.gecko.favicons.Favicons; import org.mozilla.gecko.favicons.OnFaviconLoadedListener; import org.mozilla.gecko.util.ThreadUtils; import org.mozilla.gecko.widget.FaviconView; import android.content.Context; import android.database.Cursor; import android.graphics.Bitmap; import android.text.TextUtils; import android.util.AttributeSet; import android.view.Gravity; import android.view.LayoutInflater; import android.widget.LinearLayout; import android.widget.TextView; -import java.lang.ref.WeakReference; - public class TwoLinePageRow extends LinearLayout implements Tabs.OnTabsChangedListener { private static final int NO_ICON = 0; private final TextView mTitle; private final TextView mUrl;
--- a/mobile/android/base/menu/MenuItemActionView.java +++ b/mobile/android/base/menu/MenuItemActionView.java @@ -1,29 +1,28 @@ /* -*- 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/. */ package org.mozilla.gecko.menu; +import java.util.ArrayList; +import java.util.List; + import org.mozilla.gecko.R; import android.annotation.TargetApi; import android.content.Context; -import android.content.res.Resources; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; +import android.widget.ImageButton; import android.widget.LinearLayout; -import android.widget.ImageButton; - -import java.util.ArrayList; -import java.util.List; public class MenuItemActionView extends LinearLayout implements GeckoMenuItem.Layout { private static final String LOGTAG = "GeckoMenuItemActionView"; private MenuItemDefault mMenuItem; private MenuItemActionBar mMenuButton; private List<ImageButton> mActionButtons;
--- a/mobile/android/base/preferences/CustomListPreference.java +++ b/mobile/android/base/preferences/CustomListPreference.java @@ -1,26 +1,24 @@ /* 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.preferences; +import org.mozilla.gecko.R; + import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.res.Resources; import android.preference.Preference; -import android.util.Log; import android.view.View; import android.widget.TextView; -import org.mozilla.gecko.R; -import org.mozilla.gecko.util.ThreadUtils; - /** * Represents an element in a <code>CustomListCategory</code> preference menu. * This preference con display a dialog when clicked, and also supports * being set as a default item within the preference list category. */ public abstract class CustomListPreference extends Preference implements View.OnLongClickListener { protected String LOGTAG = "CustomListPreference";
--- a/mobile/android/base/preferences/GeckoPreferenceFragment.java +++ b/mobile/android/base/preferences/GeckoPreferenceFragment.java @@ -2,30 +2,27 @@ * 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.preferences; import java.lang.reflect.Field; +import org.mozilla.gecko.PrefsHelper; import org.mozilla.gecko.R; -import org.mozilla.gecko.PrefsHelper; import android.app.Activity; -import android.preference.Preference; +import android.os.Bundle; import android.preference.PreferenceActivity; -import android.preference.PreferenceCategory; import android.preference.PreferenceFragment; import android.preference.PreferenceScreen; -import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; -import android.view.MenuItem; import android.view.ViewConfiguration; /* A simple implementation of PreferenceFragment for large screen devices * This will strip category headers (so that they aren't shown to the user twice) * as well as initializing Gecko prefs when a fragment is shown. */ public class GeckoPreferenceFragment extends PreferenceFragment {
--- a/mobile/android/base/preferences/GeckoPreferences.java +++ b/mobile/android/base/preferences/GeckoPreferences.java @@ -1,35 +1,35 @@ /* -*- 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.preferences; -import org.mozilla.gecko.R; +import java.util.ArrayList; +import java.util.List; + +import org.json.JSONObject; import org.mozilla.gecko.AppConstants; import org.mozilla.gecko.DataReportingNotification; import org.mozilla.gecko.GeckoActivityStatus; import org.mozilla.gecko.GeckoApp; +import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.GeckoApplication; -import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.GeckoEvent; import org.mozilla.gecko.GeckoProfile; import org.mozilla.gecko.PrefsHelper; +import org.mozilla.gecko.R; import org.mozilla.gecko.background.announcements.AnnouncementsConstants; import org.mozilla.gecko.background.common.GlobalConstants; import org.mozilla.gecko.background.healthreport.HealthReportConstants; import org.mozilla.gecko.util.GeckoEventListener; import org.mozilla.gecko.util.ThreadUtils; -import org.json.JSONArray; -import org.json.JSONObject; - -import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.Fragment; import android.app.NotificationManager; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; @@ -53,22 +53,18 @@ import android.text.TextWatcher; import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListAdapter; import android.widget.ListView; -import android.widget.TextView; import android.widget.Toast; -import java.util.ArrayList; -import java.util.List; - public class GeckoPreferences extends PreferenceActivity implements OnPreferenceChangeListener, GeckoEventListener, GeckoActivityStatus { private static final String LOGTAG = "GeckoPreferences"; private static final String NON_PREF_PREFIX = "android.not_a_preference."; public static final String INTENT_EXTRA_RESOURCES = "resource";
--- a/mobile/android/base/preferences/PanelsPreference.java +++ b/mobile/android/base/preferences/PanelsPreference.java @@ -1,24 +1,23 @@ /* 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.preferences; +import org.mozilla.gecko.R; + import android.content.Context; import android.content.res.Resources; -import android.preference.Preference; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; -import org.mozilla.gecko.R; - public class PanelsPreference extends CustomListPreference { protected String LOGTAG = "PanelsPreference"; private static final int INDEX_SHOW_BUTTON = 1; private static final int INDEX_REMOVE_BUTTON = 2; private String LABEL_HIDE; private String LABEL_SHOW;
--- a/mobile/android/base/preferences/PanelsPreferenceCategory.java +++ b/mobile/android/base/preferences/PanelsPreferenceCategory.java @@ -1,30 +1,26 @@ /* 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.preferences; -import android.content.Context; -import android.os.Bundle; -import android.preference.Preference; -import android.preference.PreferenceCategory; -import android.text.TextUtils; -import android.util.AttributeSet; -import android.util.Log; - import java.util.ArrayList; import java.util.List; import org.mozilla.gecko.home.HomeConfig; import org.mozilla.gecko.home.HomeConfig.PanelConfig; import org.mozilla.gecko.util.ThreadUtils; import org.mozilla.gecko.util.UiAsyncTask; +import android.content.Context; +import android.text.TextUtils; +import android.util.AttributeSet; + public class PanelsPreferenceCategory extends CustomListCategory { public static final String LOGTAG = "PanelsPrefCategory"; protected HomeConfig mHomeConfig; protected List<PanelConfig> mPanelConfigs; protected UiAsyncTask<Void, Void, List<PanelConfig>> mLoadTask; protected UiAsyncTask<Void, Void, Void> mSaveTask;
--- a/mobile/android/base/preferences/SearchEnginePreference.java +++ b/mobile/android/base/preferences/SearchEnginePreference.java @@ -1,36 +1,32 @@ /* 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.preferences; +import org.json.JSONException; +import org.json.JSONObject; +import org.mozilla.gecko.R; +import org.mozilla.gecko.favicons.Favicons; +import org.mozilla.gecko.favicons.decoders.FaviconDecoder; +import org.mozilla.gecko.util.ThreadUtils; +import org.mozilla.gecko.widget.FaviconView; + import android.app.AlertDialog; import android.content.Context; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.text.SpannableString; import android.util.Log; import android.view.View; import android.widget.Toast; -import java.util.Iterator; - -import org.json.JSONException; -import org.json.JSONObject; - -import org.mozilla.gecko.favicons.decoders.FaviconDecoder; -import org.mozilla.gecko.favicons.decoders.LoadFaviconResult; -import org.mozilla.gecko.favicons.Favicons; -import org.mozilla.gecko.R; -import org.mozilla.gecko.util.ThreadUtils; -import org.mozilla.gecko.widget.FaviconView; - /** * Represents an element in the list of search engines on the preferences menu. */ public class SearchEnginePreference extends CustomListPreference { protected String LOGTAG = "SearchEnginePreference"; protected static final int INDEX_REMOVE_BUTTON = 1;
--- a/mobile/android/base/prompts/ColorPickerInput.java +++ b/mobile/android/base/prompts/ColorPickerInput.java @@ -1,27 +1,23 @@ /* -*- 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/. */ package org.mozilla.gecko.prompts; +import org.json.JSONObject; import org.mozilla.gecko.R; import org.mozilla.gecko.widget.BasicColorPicker; -import org.json.JSONObject; - import android.content.Context; import android.graphics.Color; +import android.view.LayoutInflater; import android.view.View; -import android.view.LayoutInflater; -import android.widget.Button; -import android.widget.LinearLayout; -import android.widget.LinearLayout.LayoutParams; public class ColorPickerInput extends PromptInput { public static final String INPUT_TYPE = "color"; public static final String LOGTAG = "GeckoColorPickerInput"; private boolean mShowAdvancedButton = true; private int mInitialColor;
--- a/mobile/android/base/prompts/IconGridInput.java +++ b/mobile/android/base/prompts/IconGridInput.java @@ -1,46 +1,38 @@ /* -*- 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/. */ package org.mozilla.gecko.prompts; +import java.util.ArrayList; +import java.util.List; + import org.json.JSONArray; import org.json.JSONObject; - +import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.R; -import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.gfx.BitmapUtils; -import org.mozilla.gecko.util.ThreadUtils; -import android.app.Activity; -import android.app.ActivityManager; import android.content.Context; import android.graphics.drawable.Drawable; -import android.os.Build; import android.text.TextUtils; import android.view.Display; +import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; -import android.view.LayoutInflater; import android.view.WindowManager; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.GridView; +import android.widget.ImageView; import android.widget.TextView; -import android.widget.ImageView; -import android.widget.ListView; -import android.util.Log; - -import java.util.ArrayList; -import java.util.List; public class IconGridInput extends PromptInput implements OnItemClickListener { public static final String INPUT_TYPE = "icongrid"; public static final String LOGTAG = "GeckoIconGridInput"; private ArrayAdapter<IconGridItem> mAdapter; // An adapter holding a list of items to show in the grid private static int mColumnWidth = -1; // The maximum width of columns
--- a/mobile/android/base/prompts/Prompt.java +++ b/mobile/android/base/prompts/Prompt.java @@ -1,64 +1,45 @@ /* -*- 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/. */ package org.mozilla.gecko.prompts; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.GeckoEvent; -import org.mozilla.gecko.util.ThreadUtils; -import org.mozilla.gecko.widget.DateTimePicker; -import org.mozilla.gecko.prompts.ColorPickerInput; import org.mozilla.gecko.R; -import org.mozilla.gecko.GeckoAppShell; - -import org.json.JSONArray; -import org.json.JSONObject; -import org.json.JSONException; +import org.mozilla.gecko.util.ThreadUtils; import android.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnCancelListener; import android.content.DialogInterface.OnClickListener; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; -import android.text.Html; -import android.text.InputType; import android.text.TextUtils; -import android.text.format.DateFormat; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.ViewGroup.LayoutParams; -import android.view.inputmethod.InputMethodManager; -import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; -import android.widget.CheckBox; import android.widget.CheckedTextView; -import android.widget.DatePicker; -import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ScrollView; -import android.widget.Spinner; import android.widget.TextView; -import android.widget.TimePicker; - -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.concurrent.TimeUnit; public class Prompt implements OnClickListener, OnCancelListener, OnItemClickListener { private static final String LOGTAG = "GeckoPromptService"; private String[] mButtons; private PromptInput[] mInputs; private boolean[] mSelected; private AlertDialog mDialog;
--- a/mobile/android/base/prompts/PromptInput.java +++ b/mobile/android/base/prompts/PromptInput.java @@ -1,50 +1,43 @@ /* -*- 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/. */ package org.mozilla.gecko.prompts; -import org.mozilla.gecko.util.ThreadUtils; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.GregorianCalendar; + +import org.json.JSONObject; import org.mozilla.gecko.widget.AllCapsTextView; import org.mozilla.gecko.widget.DateTimePicker; -import org.json.JSONArray; -import org.json.JSONObject; - import android.content.Context; import android.content.res.Configuration; -import android.graphics.Color; import android.os.Build; -import android.text.format.DateFormat; import android.text.Html; import android.text.InputType; import android.text.TextUtils; +import android.text.format.DateFormat; import android.util.Log; -import android.view.inputmethod.InputMethodManager; import android.view.View; import android.view.ViewGroup.LayoutParams; +import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.CheckBox; -import android.widget.CheckedTextView; import android.widget.DatePicker; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.TextView; import android.widget.TimePicker; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.concurrent.ConcurrentLinkedQueue; -import java.util.concurrent.TimeUnit; - public class PromptInput { protected final String mLabel; protected final String mType; protected final String mId; protected final String mValue; protected View mView; public static final String LOGTAG = "GeckoPromptInput";
--- a/mobile/android/base/prompts/PromptService.java +++ b/mobile/android/base/prompts/PromptService.java @@ -1,29 +1,25 @@ /* -*- 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/. */ package org.mozilla.gecko.prompts; +import org.json.JSONException; +import org.json.JSONObject; import org.mozilla.gecko.EventDispatcher; import org.mozilla.gecko.GeckoAppShell; -import org.mozilla.gecko.GeckoEvent; +import org.mozilla.gecko.util.GeckoEventListener; import org.mozilla.gecko.util.ThreadUtils; -import org.mozilla.gecko.util.GeckoEventListener; - -import org.json.JSONObject; -import org.json.JSONException; import android.content.Context; import android.util.Log; -import java.util.concurrent.ConcurrentLinkedQueue; - public class PromptService implements GeckoEventListener { private static final String LOGTAG = "GeckoPromptService"; private final Context mContext; public PromptService(Context context) { GeckoAppShell.getEventDispatcher().registerEventListener("Prompt:Show", this); GeckoAppShell.getEventDispatcher().registerEventListener("Prompt:ShowTop", this);
--- a/mobile/android/base/toolbar/BrowserToolbar.java +++ b/mobile/android/base/toolbar/BrowserToolbar.java @@ -1,73 +1,69 @@ /* -*- 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/. */ package org.mozilla.gecko.toolbar; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.EnumSet; +import java.util.List; + +import org.json.JSONObject; import org.mozilla.gecko.BrowserApp; +import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.GeckoApplication; -import org.mozilla.gecko.GeckoAppShell; import org.mozilla.gecko.GeckoProfile; import org.mozilla.gecko.LightweightTheme; import org.mozilla.gecko.R; import org.mozilla.gecko.ReaderModeUtils; -import org.mozilla.gecko.SiteIdentity.SecurityMode; import org.mozilla.gecko.Tab; import org.mozilla.gecko.Tabs; import org.mozilla.gecko.animation.PropertyAnimator; import org.mozilla.gecko.animation.PropertyAnimator.PropertyAnimationListener; import org.mozilla.gecko.animation.ViewHelper; import org.mozilla.gecko.menu.GeckoMenu; import org.mozilla.gecko.menu.MenuPopup; import org.mozilla.gecko.toolbar.ToolbarDisplayLayout.OnStopListener; import org.mozilla.gecko.toolbar.ToolbarDisplayLayout.OnTitleChangeListener; import org.mozilla.gecko.toolbar.ToolbarDisplayLayout.UpdateFlags; import org.mozilla.gecko.util.Clipboard; +import org.mozilla.gecko.util.GeckoEventListener; import org.mozilla.gecko.util.HardwareUtils; import org.mozilla.gecko.util.MenuUtils; -import org.mozilla.gecko.util.ThreadUtils; -import org.mozilla.gecko.util.GeckoEventListener; import org.mozilla.gecko.widget.GeckoImageButton; import org.mozilla.gecko.widget.GeckoImageView; import org.mozilla.gecko.widget.GeckoRelativeLayout; -import org.json.JSONObject; import android.content.Context; import android.content.res.Resources; -import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.graphics.drawable.StateListDrawable; import android.os.Build; import android.text.TextUtils; import android.util.AttributeSet; import android.util.Log; import android.view.ContextMenu; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MenuInflater; import android.view.MotionEvent; import android.view.View; -import android.view.ViewGroup.MarginLayoutParams; import android.view.animation.AccelerateInterpolator; import android.view.animation.Interpolator; import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.PopupWindow; -import java.util.Arrays; -import java.util.ArrayList; -import java.util.EnumSet; -import java.util.List; - /** * {@code BrowserToolbar} is single entry point for users of the toolbar * subsystem i.e. this should be the only import outside the 'toolbar' * package. * * {@code BrowserToolbar} serves at the single event bus for all * sub-components in the toolbar. It tracks tab events and gecko messages * and update the state of its inner components accordingly.
--- a/mobile/android/base/webapp/Allocator.java +++ b/mobile/android/base/webapp/Allocator.java @@ -1,25 +1,21 @@ /* -*- 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.webapp; +import java.util.ArrayList; + import org.mozilla.gecko.GeckoAppShell; -import org.mozilla.gecko.util.ThreadUtils; import android.content.Context; import android.content.SharedPreferences; -import android.content.SharedPreferences.Editor; - -import java.util.ArrayList; - -import android.util.Log; public class Allocator { private final String LOGTAG = "GeckoWebappAllocator"; private static final String PREFIX_ORIGIN = "webapp-origin-"; private static final String PREFIX_PACKAGE_NAME = "webapp-package-name-";
--- a/mobile/android/base/widget/ButtonToast.java +++ b/mobile/android/base/widget/ButtonToast.java @@ -11,35 +11,28 @@ * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.mozilla.gecko.widget; -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.graphics.drawable.BitmapDrawable; +import java.util.LinkedList; + +import org.mozilla.gecko.R; +import org.mozilla.gecko.animation.PropertyAnimator; + import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; -import android.text.TextUtils; -import android.view.animation.Animation; -import android.view.animation.AlphaAnimation; import android.view.View; import android.widget.Button; import android.widget.TextView; -import java.util.LinkedList; - -import org.mozilla.gecko.animation.PropertyAnimator; -import org.mozilla.gecko.R; -import org.mozilla.gecko.gfx.BitmapUtils; - public class ButtonToast { private final static String LOGTAG = "GeckoButtonToast"; private final static int TOAST_DURATION = 5000; private final View mView; private final TextView mMessageView; private final Button mButton; private final Handler mHideHandler = new Handler();
--- a/mobile/android/components/AddonUpdateService.js +++ b/mobile/android/components/AddonUpdateService.js @@ -8,17 +8,17 @@ const Cu = Components.utils; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "AddonManager", "resource://gre/modules/AddonManager.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "AddonRepository", - "resource://gre/modules/AddonRepository.jsm"); + "resource://gre/modules/addons/AddonRepository.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm"); function getPref(func, preference, defaultValue) { try { return Services.prefs[func](preference); } catch (e) {}
--- a/mobile/android/components/Snippets.js +++ b/mobile/android/components/Snippets.js @@ -335,21 +335,26 @@ function loadSyncPromoBanner() { if (exist) { return; } let stringBundle = Services.strings.createBundle("chrome://browser/locale/sync.properties"); let text = stringBundle.GetStringFromName("promoBanner.message.text"); let link = stringBundle.GetStringFromName("promoBanner.message.link"); - Home.banner.add({ + let id = Home.banner.add({ text: text + "<a href=\"#\">" + link + "</a>", icon: "drawable://sync_promo", onclick: function() { Accounts.launchSetup(); + }, + ondismiss: function() { + // Remove the sync promo message from the banner and never try to show it again. + Home.banner.remove(id); + Services.prefs.setBoolPref("browser.snippets.syncPromo.enabled", false); } }); }, (err) => { Cu.reportError("Error checking whether sync account exists: " + err); } ); }
--- a/mobile/android/modules/Home.jsm +++ b/mobile/android/modules/Home.jsm @@ -131,16 +131,20 @@ let HomeBanner = (function () { }, /** * Removes a banner message from the rotation. * * @param id The id of the message to remove. */ remove: function(id) { + if (!(id in _messages)) { + throw "Home.banner: Can't remove message that doesn't exist: id = " + id; + } + delete _messages[id]; // Remove the message from the queue. let index = _queue.indexOf(id); _queue.splice(index, 1); // If there are no more messages, remove the observers. if (Object.keys(_messages).length == 0) {
--- a/services/sync/modules/addonutils.js +++ b/services/sync/modules/addonutils.js @@ -10,17 +10,17 @@ const {interfaces: Ci, utils: Cu} = Comp Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Log.jsm"); Cu.import("resource://services-sync/util.js"); XPCOMUtils.defineLazyModuleGetter(this, "AddonManager", "resource://gre/modules/AddonManager.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "AddonRepository", - "resource://gre/modules/AddonRepository.jsm"); + "resource://gre/modules/addons/AddonRepository.jsm"); function AddonUtilsInternal() { this._log = Log.repository.getLogger("Sync.AddonUtils"); this._log.Level = Log.Level[Svc.Prefs.get("log.logger.addonutils")]; } AddonUtilsInternal.prototype = { /** * Obtain an AddonInstall object from an AddonSearchResult instance.
--- a/services/sync/modules/engines/addons.js +++ b/services/sync/modules/engines/addons.js @@ -43,17 +43,17 @@ Cu.import("resource://services-sync/util Cu.import("resource://services-sync/constants.js"); Cu.import("resource://services-common/async.js"); Cu.import("resource://gre/modules/Preferences.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "AddonManager", "resource://gre/modules/AddonManager.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "AddonRepository", - "resource://gre/modules/AddonRepository.jsm"); + "resource://gre/modules/addons/AddonRepository.jsm"); this.EXPORTED_SYMBOLS = ["AddonsEngine"]; // 7 days in milliseconds. const PRUNE_ADDON_CHANGES_THRESHOLD = 60 * 60 * 24 * 7 * 1000; /** * AddonRecord represents the state of an add-on in an application.
--- a/services/sync/tps/extensions/tps/modules/addons.jsm +++ b/services/sync/tps/extensions/tps/modules/addons.jsm @@ -3,17 +3,17 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ "use strict"; let EXPORTED_SYMBOLS = ["Addon", "STATE_ENABLED", "STATE_DISABLED"]; const {classes: Cc, interfaces: Ci, utils: Cu} = Components; Cu.import("resource://gre/modules/AddonManager.jsm"); -Cu.import("resource://gre/modules/AddonRepository.jsm"); +Cu.import("resource://gre/modules/addons/AddonRepository.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://services-common/async.js"); Cu.import("resource://services-sync/addonutils.js"); Cu.import("resource://services-sync/util.js"); Cu.import("resource://tps/logger.jsm"); const ADDONSGETURL = 'http://127.0.0.1:4567/'; const STATE_ENABLED = 1;
--- a/testing/profiles/prefs_general.js +++ b/testing/profiles/prefs_general.js @@ -154,12 +154,12 @@ user_pref("browser.download.panel.shown" // Disable first-tun tab user_pref("browser.firstrun.count", 0); // Enable webapps testing mode, which bypasses native installation. user_pref("browser.webapps.testing", true); // Disable android snippets user_pref("browser.snippets.enabled", false); - +user_pref("browser.snippets.syncPromo.enabled", false); // Do not turn HTTP cache v2 for our infra tests (some tests are failing) user_pref("browser.cache.use_new_backend_temp", false);
--- a/toolkit/modules/LightweightThemeConsumer.jsm +++ b/toolkit/modules/LightweightThemeConsumer.jsm @@ -2,17 +2,17 @@ * 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/. */ this.EXPORTED_SYMBOLS = ["LightweightThemeConsumer"]; Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "LightweightThemeImageOptimizer", - "resource://gre/modules/LightweightThemeImageOptimizer.jsm"); + "resource://gre/modules/addons/LightweightThemeImageOptimizer.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "PrivateBrowsingUtils", "resource://gre/modules/PrivateBrowsingUtils.jsm"); this.LightweightThemeConsumer = function LightweightThemeConsumer(aDocument) { this._doc = aDocument; this._win = aDocument.defaultView;
--- a/toolkit/mozapps/extensions/AddonManager.jsm +++ b/toolkit/mozapps/extensions/AddonManager.jsm @@ -59,38 +59,38 @@ const VALID_TYPES_REGEXP = /^[\w\-]+$/; Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/AsyncShutdown.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Promise", "resource://gre/modules/Promise.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "AddonRepository", - "resource://gre/modules/AddonRepository.jsm"); + "resource://gre/modules/addons/AddonRepository.jsm"); XPCOMUtils.defineLazyGetter(this, "CertUtils", function certUtilsLazyGetter() { let certUtils = {}; Components.utils.import("resource://gre/modules/CertUtils.jsm", certUtils); return certUtils; }); this.EXPORTED_SYMBOLS = [ "AddonManager", "AddonManagerPrivate" ]; const CATEGORY_PROVIDER_MODULE = "addon-provider-module"; // A list of providers to load by default const DEFAULT_PROVIDERS = [ - "resource://gre/modules/XPIProvider.jsm", + "resource://gre/modules/addons/XPIProvider.jsm", "resource://gre/modules/LightweightThemeManager.jsm" ]; ["LOG", "WARN", "ERROR"].forEach(function(aName) { this.__defineGetter__(aName, function logFuncGetter() { - Components.utils.import("resource://gre/modules/AddonLogging.jsm"); + Components.utils.import("resource://gre/modules/addons/AddonLogging.jsm"); LogManager.getLogger("addons.manager", this); return this[aName]; }); }, this); /** * Calls a callback method consuming any thrown exception. Any parameters after @@ -1067,17 +1067,17 @@ var AddonManagerInternal = { url = AddonManager.escapeAddonURI({ id: hotfixID, version: hotfixVersion, userDisabled: false, appDisabled: false }, url); pendingUpdates++; - Components.utils.import("resource://gre/modules/AddonUpdateChecker.jsm"); + Components.utils.import("resource://gre/modules/addons/AddonUpdateChecker.jsm"); AddonUpdateChecker.checkForUpdates(hotfixID, null, url, { onUpdateCheckComplete: function BUC_onUpdateCheckComplete(aUpdates) { let update = AddonUpdateChecker.getNewestCompatibleUpdate(aUpdates); if (!update) { notifyComplete(); return; }
--- a/toolkit/mozapps/extensions/DeferredSave.jsm +++ b/toolkit/mozapps/extensions/DeferredSave.jsm @@ -39,17 +39,17 @@ const DEFAULT_SAVE_DELAY_MS = 50; * @param [optional] aDelay * The delay in milliseconds between the first saveChanges() call * that marks the data as needing to be saved, and when the DeferredSave * begins writing the data to disk. Default 50 milliseconds. */ this.DeferredSave = function (aPath, aDataProvider, aDelay) { // Set up loggers for this instance of DeferredSave let leafName = OS.Path.basename(aPath); - Cu.import("resource://gre/modules/AddonLogging.jsm"); + Cu.import("resource://gre/modules/addons/AddonLogging.jsm"); LogManager.getLogger("DeferredSave/" + leafName, this); // @type {Deferred|null}, null when no data needs to be written // @resolves with the result of OS.File.writeAtomic when all writes complete // @rejects with the error from OS.File.writeAtomic if the write fails, // or with the error from aDataProvider() if that throws. this._pending = null;
--- a/toolkit/mozapps/extensions/LightweightThemeManager.jsm +++ b/toolkit/mozapps/extensions/LightweightThemeManager.jsm @@ -35,17 +35,17 @@ const OPTIONAL = ["footerURL", "textcolo const PERSIST_ENABLED = true; const PERSIST_BYPASS_CACHE = false; const PERSIST_FILES = { headerURL: "lightweighttheme-header", footerURL: "lightweighttheme-footer" }; XPCOMUtils.defineLazyModuleGetter(this, "LightweightThemeImageOptimizer", - "resource://gre/modules/LightweightThemeImageOptimizer.jsm"); + "resource://gre/modules/addons/LightweightThemeImageOptimizer.jsm"); this.__defineGetter__("_prefs", function prefsGetter() { delete this._prefs; return this._prefs = Services.prefs.getBranch("lightweightThemes."); }); this.__defineGetter__("_maxUsedThemes", function maxUsedThemesGetter() { delete this._maxUsedThemes;
--- a/toolkit/mozapps/extensions/amWebInstallListener.js +++ b/toolkit/mozapps/extensions/amWebInstallListener.js @@ -26,17 +26,17 @@ const READY_STATES = [ AddonManager.STATE_AVAILABLE, AddonManager.STATE_DOWNLOAD_FAILED, AddonManager.STATE_INSTALL_FAILED, AddonManager.STATE_CANCELLED ]; ["LOG", "WARN", "ERROR"].forEach(function(aName) { this.__defineGetter__(aName, function logFuncGetter() { - Components.utils.import("resource://gre/modules/AddonLogging.jsm"); + Components.utils.import("resource://gre/modules/addons/AddonLogging.jsm"); LogManager.getLogger("addons.weblistener", this); return this[aName]; }); }, this); function notifyObservers(aTopic, aWindow, aUri, aInstalls) { let info = {
--- a/toolkit/mozapps/extensions/content/extensions.js +++ b/toolkit/mozapps/extensions/content/extensions.js @@ -10,17 +10,17 @@ const Cu = Components.utils; const Cr = Components.results; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/PluralForm.jsm"); Cu.import("resource://gre/modules/DownloadUtils.jsm"); Cu.import("resource://gre/modules/AddonManager.jsm"); -Cu.import("resource://gre/modules/AddonRepository.jsm"); +Cu.import("resource://gre/modules/addons/AddonRepository.jsm"); const PREF_DISCOVERURL = "extensions.webservice.discoverURL"; const PREF_DISCOVER_ENABLED = "extensions.getAddons.showPane"; const PREF_XPI_ENABLED = "xpinstall.enabled"; const PREF_MAXRESULTS = "extensions.getAddons.maxResults"; const PREF_GETADDONS_CACHE_ENABLED = "extensions.getAddons.cache.enabled"; const PREF_GETADDONS_CACHE_ID_ENABLED = "extensions.%ID%.getAddons.cache.enabled";
--- a/toolkit/mozapps/extensions/content/selectAddons.js +++ b/toolkit/mozapps/extensions/content/selectAddons.js @@ -2,17 +2,17 @@ /* 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/. */ "use strict"; Components.utils.import("resource://gre/modules/AddonManager.jsm"); -Components.utils.import("resource://gre/modules/AddonRepository.jsm"); +Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm"); Components.utils.import("resource://gre/modules/Services.jsm"); const Cc = Components.classes; const Ci = Components.interfaces; var gView = null; function showView(aView) {
--- a/toolkit/mozapps/extensions/content/update.js +++ b/toolkit/mozapps/extensions/content/update.js @@ -12,17 +12,17 @@ const PREF_UPDATE_EXTENSIONS_ENABLED const PREF_XPINSTALL_ENABLED = "xpinstall.enabled"; const PREF_EM_HOTFIX_ID = "extensions.hotfix.id"; // timeout (in milliseconds) to wait for response to the metadata ping const METADATA_TIMEOUT = 30000; Components.utils.import("resource://gre/modules/Services.jsm"); Components.utils.import("resource://gre/modules/AddonManager.jsm"); -Components.utils.import("resource://gre/modules/AddonRepository.jsm"); +Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm"); var gInteruptable = true; var gPendingClose = false; var gUpdateWizard = { // When synchronizing app compatibility info this contains all installed
--- a/toolkit/mozapps/extensions/extensions.manifest +++ b/toolkit/mozapps/extensions/extensions.manifest @@ -4,10 +4,10 @@ contract @mozilla.org/extensions/blockli category update-timer nsBlocklistService @mozilla.org/extensions/blocklist;1,getService,blocklist-background-update-timer,extensions.blocklist.interval,86400 component {4399533d-08d1-458c-a87a-235f74451cfa} addonManager.js contract @mozilla.org/addons/integration;1 {4399533d-08d1-458c-a87a-235f74451cfa} category update-timer addonManager @mozilla.org/addons/integration;1,getService,addon-background-update-timer,extensions.update.interval,86400 component {7beb3ba8-6ec3-41b4-b67c-da89b8518922} amContentHandler.js contract @mozilla.org/uriloader/content-handler;1?type=application/x-xpinstall {7beb3ba8-6ec3-41b4-b67c-da89b8518922} component {0f38e086-89a3-40a5-8ffc-9b694de1d04a} amWebInstallListener.js contract @mozilla.org/addons/web-install-listener;1 {0f38e086-89a3-40a5-8ffc-9b694de1d04a} -category addon-provider-module PluginProvider resource://gre/modules/PluginProvider.jsm +category addon-provider-module PluginProvider resource://gre/modules/addons/PluginProvider.jsm #endif
rename from toolkit/mozapps/extensions/AddonLogging.jsm rename to toolkit/mozapps/extensions/internal/AddonLogging.jsm
rename from toolkit/mozapps/extensions/AddonRepository.jsm rename to toolkit/mozapps/extensions/internal/AddonRepository.jsm --- a/toolkit/mozapps/extensions/AddonRepository.jsm +++ b/toolkit/mozapps/extensions/internal/AddonRepository.jsm @@ -17,17 +17,17 @@ XPCOMUtils.defineLazyModuleGetter(this, "resource://gre/modules/FileUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "NetUtil", "resource://gre/modules/NetUtil.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "DeferredSave", "resource://gre/modules/DeferredSave.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "AddonRepository_SQLiteMigrator", - "resource://gre/modules/AddonRepository_SQLiteMigrator.jsm"); + "resource://gre/modules/addons/AddonRepository_SQLiteMigrator.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Promise", "resource://gre/modules/Promise.jsm"); this.EXPORTED_SYMBOLS = [ "AddonRepository" ]; const PREF_GETADDONS_CACHE_ENABLED = "extensions.getAddons.cache.enabled"; const PREF_GETADDONS_CACHE_TYPES = "extensions.getAddons.cache.types"; const PREF_GETADDONS_CACHE_ID_ENABLED = "extensions.%ID%.getAddons.cache.enabled" @@ -58,17 +58,17 @@ const BLANK_DB = function() { schema: DB_SCHEMA }; } const TOOLKIT_ID = "toolkit@mozilla.org"; ["LOG", "WARN", "ERROR"].forEach(function(aName) { this.__defineGetter__(aName, function logFuncGetter() { - Components.utils.import("resource://gre/modules/AddonLogging.jsm"); + Components.utils.import("resource://gre/modules/addons/AddonLogging.jsm"); LogManager.getLogger("addons.repository", this); return this[aName]; }); }, this); // A map between XML keys to AddonSearchResult keys for string values // that require no extra parsing from XML
rename from toolkit/mozapps/extensions/AddonRepository_SQLiteMigrator.jsm rename to toolkit/mozapps/extensions/internal/AddonRepository_SQLiteMigrator.jsm --- a/toolkit/mozapps/extensions/AddonRepository_SQLiteMigrator.jsm +++ b/toolkit/mozapps/extensions/internal/AddonRepository_SQLiteMigrator.jsm @@ -22,17 +22,17 @@ const PROP_SINGLE = ["id", "type", "name "contributionAmount", "averageRating", "reviewCount", "reviewURL", "totalDownloads", "weeklyDownloads", "dailyUsers", "sourceURI", "repositoryStatus", "size", "updateDate"]; ["LOG", "WARN", "ERROR"].forEach(function(aName) { this.__defineGetter__(aName, function logFuncGetter() { - Components.utils.import("resource://gre/modules/AddonLogging.jsm"); + Components.utils.import("resource://gre/modules/addons/AddonLogging.jsm"); LogManager.getLogger("addons.repository.sqlmigrator", this); return this[aName]; }); }, this); this.EXPORTED_SYMBOLS = ["AddonRepository_SQLiteMigrator"];
rename from toolkit/mozapps/extensions/AddonUpdateChecker.jsm rename to toolkit/mozapps/extensions/internal/AddonUpdateChecker.jsm --- a/toolkit/mozapps/extensions/AddonUpdateChecker.jsm +++ b/toolkit/mozapps/extensions/internal/AddonUpdateChecker.jsm @@ -27,31 +27,31 @@ const XMLURI_PARSE_ERROR = "http://ww const PREF_UPDATE_REQUIREBUILTINCERTS = "extensions.update.requireBuiltInCerts"; Components.utils.import("resource://gre/modules/Services.jsm"); Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "AddonManager", "resource://gre/modules/AddonManager.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "AddonRepository", - "resource://gre/modules/AddonRepository.jsm"); + "resource://gre/modules/addons/AddonRepository.jsm"); // Shared code for suppressing bad cert dialogs. XPCOMUtils.defineLazyGetter(this, "CertUtils", function certUtilsLazyGetter() { let certUtils = {}; Components.utils.import("resource://gre/modules/CertUtils.jsm", certUtils); return certUtils; }); var gRDF = Cc["@mozilla.org/rdf/rdf-service;1"]. getService(Ci.nsIRDFService); ["LOG", "WARN", "ERROR"].forEach(function(aName) { this.__defineGetter__(aName, function logFuncGetter() { - Components.utils.import("resource://gre/modules/AddonLogging.jsm"); + Components.utils.import("resource://gre/modules/addons/AddonLogging.jsm"); LogManager.getLogger("addons.updates", this); return this[aName]; }); }, this); /**
rename from toolkit/mozapps/extensions/LightweightThemeImageOptimizer.jsm rename to toolkit/mozapps/extensions/internal/LightweightThemeImageOptimizer.jsm
rename from toolkit/mozapps/extensions/PluginProvider.jsm rename to toolkit/mozapps/extensions/internal/PluginProvider.jsm --- a/toolkit/mozapps/extensions/PluginProvider.jsm +++ b/toolkit/mozapps/extensions/internal/PluginProvider.jsm @@ -13,17 +13,17 @@ Components.utils.import("resource://gre/ Components.utils.import("resource://gre/modules/Services.jsm"); const URI_EXTENSION_STRINGS = "chrome://mozapps/locale/extensions/extensions.properties"; const STRING_TYPE_NAME = "type.%ID%.name"; const LIST_UPDATED_TOPIC = "plugins-list-updated"; for (let name of ["LOG", "WARN", "ERROR"]) { this.__defineGetter__(name, function() { - Components.utils.import("resource://gre/modules/AddonLogging.jsm"); + Components.utils.import("resource://gre/modules/addons/AddonLogging.jsm"); LogManager.getLogger("addons.plugins", this); return this[name]; }); } function getIDHashForString(aStr) { // return the two-digit hexadecimal code for a byte
rename from toolkit/mozapps/extensions/SpellCheckDictionaryBootstrap.js rename to toolkit/mozapps/extensions/internal/SpellCheckDictionaryBootstrap.js
rename from toolkit/mozapps/extensions/XPIProvider.jsm rename to toolkit/mozapps/extensions/internal/XPIProvider.jsm --- a/toolkit/mozapps/extensions/XPIProvider.jsm +++ b/toolkit/mozapps/extensions/internal/XPIProvider.jsm @@ -11,17 +11,17 @@ const Cu = Components.utils; this.EXPORTED_SYMBOLS = []; Components.utils.import("resource://gre/modules/Services.jsm"); Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); Components.utils.import("resource://gre/modules/AddonManager.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "AddonRepository", - "resource://gre/modules/AddonRepository.jsm"); + "resource://gre/modules/addons/AddonRepository.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "ChromeManifestParser", "resource://gre/modules/ChromeManifestParser.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "LightweightThemeManager", "resource://gre/modules/LightweightThemeManager.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "FileUtils", "resource://gre/modules/FileUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "NetUtil", "resource://gre/modules/NetUtil.jsm"); @@ -190,17 +190,17 @@ var gGlobalScope = this; /** * Valid IDs fit this pattern. */ var gIDTest = /^(\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}|[a-z0-9-\._]*\@[a-z0-9-\._]+)$/i; ["LOG", "WARN", "ERROR"].forEach(function(aName) { Object.defineProperty(this, aName, { get: function logFuncGetter() { - Components.utils.import("resource://gre/modules/AddonLogging.jsm"); + Components.utils.import("resource://gre/modules/addons/AddonLogging.jsm"); LogManager.getLogger("addons.xpi", this); return this[aName]; }, configurable: true }); }, this); @@ -208,17 +208,17 @@ var gIDTest = /^(\{[0-9a-f]{8}-[0-9a-f]{ const LAZY_OBJECTS = ["XPIDatabase"]; var gLazyObjectsLoaded = false; function loadLazyObjects() { let scope = {}; scope.AddonInternal = AddonInternal; scope.XPIProvider = XPIProvider; - Services.scriptloader.loadSubScript("resource://gre/modules/XPIProviderUtils.js", + Services.scriptloader.loadSubScript("resource://gre/modules/addons/XPIProviderUtils.js", scope); for (let name of LAZY_OBJECTS) { delete gGlobalScope[name]; gGlobalScope[name] = scope[name]; } gLazyObjectsLoaded = true; return scope; @@ -4227,17 +4227,17 @@ var XPIProvider = { for (let feature of features) this.bootstrapScopes[aId][feature] = gGlobalScope[feature]; // As we don't want our caller to control the JS version used for the // bootstrap file, we run loadSubScript within the context of the // sandbox with the latest JS version set explicitly. if (aType == "dictionary") { this.bootstrapScopes[aId].__SCRIPT_URI_SPEC__ = - "resource://gre/modules/SpellCheckDictionaryBootstrap.js" + "resource://gre/modules/addons/SpellCheckDictionaryBootstrap.js" } else { this.bootstrapScopes[aId].__SCRIPT_URI_SPEC__ = uri; } Components.utils.evalInSandbox( "Components.classes['@mozilla.org/moz/jssubscript-loader;1'] \ .createInstance(Components.interfaces.mozIJSSubScriptLoader) \ .loadSubScript(__SCRIPT_URI_SPEC__);", this.bootstrapScopes[aId], "ECMAv5"); } @@ -5908,17 +5908,17 @@ AddonInstallWrapper.prototype = {}; * @param aPlatformVersion * An optional platform version to check for updates for * @throws if the aListener or aReason arguments are not valid */ function UpdateChecker(aAddon, aListener, aReason, aAppVersion, aPlatformVersion) { if (!aListener || !aReason) throw Cr.NS_ERROR_INVALID_ARG; - Components.utils.import("resource://gre/modules/AddonUpdateChecker.jsm"); + Components.utils.import("resource://gre/modules/addons/AddonUpdateChecker.jsm"); this.addon = aAddon; aAddon._updateCheck = this; XPIProvider.doing(this); this.listener = aListener; this.appVersion = aAppVersion; this.platformVersion = aPlatformVersion; this.syncCompatibility = (aReason == AddonManager.UPDATE_WHEN_NEW_APP_INSTALLED);
rename from toolkit/mozapps/extensions/XPIProviderUtils.js rename to toolkit/mozapps/extensions/internal/XPIProviderUtils.js --- a/toolkit/mozapps/extensions/XPIProviderUtils.js +++ b/toolkit/mozapps/extensions/internal/XPIProviderUtils.js @@ -9,30 +9,30 @@ const Ci = Components.interfaces; const Cr = Components.results; const Cu = Components.utils; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/AddonManager.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "AddonRepository", - "resource://gre/modules/AddonRepository.jsm"); + "resource://gre/modules/addons/AddonRepository.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "FileUtils", "resource://gre/modules/FileUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "DeferredSave", "resource://gre/modules/DeferredSave.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "Promise", "resource://gre/modules/Promise.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm"); ["LOG", "WARN", "ERROR"].forEach(function(aName) { Object.defineProperty(this, aName, { get: function logFuncGetter () { - Cu.import("resource://gre/modules/AddonLogging.jsm"); + Cu.import("resource://gre/modules/addons/AddonLogging.jsm"); LogManager.getLogger("addons.xpi-utils", this); return this[aName]; }, configurable: true }); }, this);
new file mode 100644 --- /dev/null +++ b/toolkit/mozapps/extensions/internal/moz.build @@ -0,0 +1,30 @@ +# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# 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/. + +JS_MODULES_PATH = 'modules/addons' + +EXTRA_JS_MODULES += [ + 'AddonLogging.jsm', + 'AddonRepository.jsm', + 'AddonRepository_SQLiteMigrator.jsm', + 'AddonUpdateChecker.jsm', + 'LightweightThemeImageOptimizer.jsm', + 'PluginProvider.jsm', + 'SpellCheckDictionaryBootstrap.js', +] + +EXTRA_PP_JS_MODULES += [ + 'XPIProvider.jsm', + 'XPIProviderUtils.js', +] + +# This is used in multiple places, so is defined here to avoid it getting +# out of sync. +DEFINES['MOZ_EXTENSIONS_DB_SCHEMA'] = 16 + +# Additional debugging info is exposed in debug builds +if CONFIG['MOZ_EM_DEBUG']: + DEFINES['MOZ_EM_DEBUG'] = 1
--- a/toolkit/mozapps/extensions/moz.build +++ b/toolkit/mozapps/extensions/moz.build @@ -1,14 +1,15 @@ # -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*- # vim: set filetype=python: # 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/. +DIRS += ['internal'] TEST_DIRS += ['test'] XPIDL_SOURCES += [ 'amIAddonManager.idl', 'amIInstallTrigger.idl', 'amIWebInstaller.idl', 'amIWebInstallListener.idl', ] @@ -22,38 +23,25 @@ EXTRA_COMPONENTS += [ ] EXTRA_PP_COMPONENTS += [ 'extensions.manifest', 'nsBlocklistService.js', ] EXTRA_JS_MODULES += [ - 'AddonLogging.jsm', - 'AddonRepository.jsm', - 'AddonRepository_SQLiteMigrator.jsm', - 'AddonUpdateChecker.jsm', 'ChromeManifestParser.jsm', 'DeferredSave.jsm', - 'LightweightThemeImageOptimizer.jsm', 'LightweightThemeManager.jsm', - 'PluginProvider.jsm', - 'SpellCheckDictionaryBootstrap.js', ] EXTRA_PP_JS_MODULES += [ - 'AddonManager.jsm', - 'XPIProvider.jsm', - 'XPIProviderUtils.js', + 'AddonManager.jsm' ] if CONFIG['MOZ_UPDATE_CHANNEL'] not in ('aurora', 'beta', 'release', 'esr'): DEFINES['MOZ_COMPATIBILITY_NIGHTLY'] = 1 -# This is used in multiple places, so is defined here to avoid it getting -# out of sync. -DEFINES['MOZ_EXTENSIONS_DB_SCHEMA'] = 16 - # Additional debugging info is exposed in debug builds if CONFIG['MOZ_EM_DEBUG']: DEFINES['MOZ_EM_DEBUG'] = 1 JAR_MANIFESTS += ['jar.mn']
--- a/toolkit/mozapps/extensions/test/browser/browser_addonrepository_performance.js +++ b/toolkit/mozapps/extensions/test/browser/browser_addonrepository_performance.js @@ -1,16 +1,16 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ // Tests that the metadata request includes startup time measurements let tmp = {}; -Components.utils.import("resource://gre/modules/AddonRepository.jsm", tmp); +Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm", tmp); let AddonRepository = tmp.AddonRepository; var gTelemetry = Cc["@mozilla.org/base/telemetry;1"].getService(Ci.nsITelemetry); var gManagerWindow; var gProvider; function parseParams(aQuery) { let params = {};
--- a/toolkit/mozapps/extensions/test/browser/browser_bug581076.js +++ b/toolkit/mozapps/extensions/test/browser/browser_bug581076.js @@ -59,17 +59,17 @@ function search(aRemoteSearch, aCallback function check_allresultslink(aShouldShow) { var list = gManagerWindow.document.getElementById("search-list"); var link = gManagerWindow.document.getElementById("search-allresults-link"); is(link.parentNode, list.lastChild, "Footer should be at the end of the richlistbox"); if (aShouldShow) { is_element_visible(link, "All Results link should be visible"); is(link.value, "See all " + SEARCH_EXPECTED_TOTAL + " results", "All Results link should show the correct message"); var scope = {}; - Components.utils.import("resource://gre/modules/AddonRepository.jsm", scope); + Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm", scope); is(link.href, scope.AddonRepository.getSearchURL(SEARCH_QUERY), "All Results link should have the correct href"); } else { is_element_hidden(link, "All Results link should be hidden"); } } add_test(function() { info("Searching locally");
--- a/toolkit/mozapps/extensions/test/browser/browser_metadataTimeout.js +++ b/toolkit/mozapps/extensions/test/browser/browser_metadataTimeout.js @@ -8,17 +8,17 @@ const URI_EXTENSION_UPDATE_DIALOG = "chrome://mozapps/content/extensions/update.xul"; const PREF_GETADDONS_BYIDS = "extensions.getAddons.get.url"; const PREF_MIN_PLATFORM_COMPAT = "extensions.minCompatiblePlatformVersion"; Components.utils.import("resource://gre/modules/Promise.jsm"); let repo = {}; -let ARContext = Components.utils.import("resource://gre/modules/AddonRepository.jsm", repo); +let ARContext = Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm", repo); info("ARContext: " + Object.keys(ARContext).join(", ")); // Mock out the XMLHttpRequest factory for AddonRepository so // we can reply with a timeout let pXHRStarted = Promise.defer(); let oldXHRConstructor = ARContext.XHRequest; ARContext.XHRequest = function() { this._handlers = new Map();
--- a/toolkit/mozapps/extensions/test/browser/browser_updatessl.js +++ b/toolkit/mozapps/extensions/test/browser/browser_updatessl.js @@ -1,14 +1,14 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ let tempScope = {}; -Components.utils.import("resource://gre/modules/AddonUpdateChecker.jsm", tempScope); +Components.utils.import("resource://gre/modules/addons/AddonUpdateChecker.jsm", tempScope); let AddonUpdateChecker = tempScope.AddonUpdateChecker; const updaterdf = RELATIVE_DIR + "browser_updatessl.rdf"; const redirect = RELATIVE_DIR + "redirect.sjs?"; const SUCCESS = 0; const DOWNLOAD_ERROR = AddonUpdateChecker.ERROR_DOWNLOAD_ERROR; const HTTP = "http://example.com/";
--- a/toolkit/mozapps/extensions/test/xpcshell/head_addons.js +++ b/toolkit/mozapps/extensions/test/xpcshell/head_addons.js @@ -13,17 +13,17 @@ const PREF_EM_STRICT_COMPATIBILITY = const PREF_EM_MIN_COMPAT_APP_VERSION = "extensions.minCompatibleAppVersion"; const PREF_EM_MIN_COMPAT_PLATFORM_VERSION = "extensions.minCompatiblePlatformVersion"; const PREF_GETADDONS_BYIDS = "extensions.getAddons.get.url"; const PREF_GETADDONS_BYIDS_PERFORMANCE = "extensions.getAddons.getWithPerformance.url"; // Forcibly end the test if it runs longer than 15 minutes const TIMEOUT_MS = 900000; -Components.utils.import("resource://gre/modules/AddonRepository.jsm"); +Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm"); Components.utils.import("resource://gre/modules/XPCOMUtils.jsm"); Components.utils.import("resource://gre/modules/FileUtils.jsm"); Components.utils.import("resource://gre/modules/Services.jsm"); Components.utils.import("resource://gre/modules/NetUtil.jsm"); Components.utils.import("resource://gre/modules/Promise.jsm"); Components.utils.import("resource://gre/modules/Task.jsm"); Components.utils.import("resource://gre/modules/osfile.jsm"); @@ -440,23 +440,23 @@ function shutdownManager() { // Load the add-ons list as it was after application shutdown loadAddonsList(); // Clear any crash report annotations gAppInfo.annotations = {}; // Force the XPIProvider provider to reload to better // simulate real-world usage. - let XPIscope = Components.utils.import("resource://gre/modules/XPIProvider.jsm"); + let XPIscope = Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm"); // This would be cleaner if I could get it as the rejection reason from // the AddonManagerInternal.shutdown() promise gXPISaveError = XPIscope.XPIProvider._shutdownError; do_print("gXPISaveError set to: " + gXPISaveError); AddonManagerPrivate.unregisterProvider(XPIscope.XPIProvider); - Components.utils.unload("resource://gre/modules/XPIProvider.jsm"); + Components.utils.unload("resource://gre/modules/addons/XPIProvider.jsm"); } function loadAddonsList() { function readDirectories(aSection) { var dirs = []; var keys = parser.getKeys(aSection); while (keys.hasMore()) { let descriptor = parser.getString(aSection, keys.getNext());
--- a/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository.js +++ b/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository.js @@ -1,15 +1,15 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ // Tests AddonRepository.jsm -Components.utils.import("resource://gre/modules/AddonRepository.jsm"); +Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm"); Components.utils.import("resource://testing-common/httpd.js"); var gServer = new HttpServer(); gServer.start(-1); const PREF_GETADDONS_BROWSEADDONS = "extensions.getAddons.browseAddons"; const PREF_GETADDONS_BROWSERECOMMENDED = "extensions.getAddons.recommended.browseURL"; const PREF_GETADDONS_GETRECOMMENDED = "extensions.getAddons.recommended.url";
--- a/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_cache.js +++ b/toolkit/mozapps/extensions/test/xpcshell/test_AddonRepository_cache.js @@ -1,15 +1,15 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ // Tests caching in AddonRepository.jsm -Components.utils.import("resource://gre/modules/AddonRepository.jsm"); +Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm"); Components.utils.import("resource://testing-common/httpd.js"); let gServer; const PORT = 4444; const BASE_URL = "http://localhost:" + PORT; const PREF_GETADDONS_CACHE_ENABLED = "extensions.getAddons.cache.enabled";
--- a/toolkit/mozapps/extensions/test/xpcshell/test_XPIcancel.js +++ b/toolkit/mozapps/extensions/test/xpcshell/test_XPIcancel.js @@ -1,15 +1,15 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ // Test the cancellable doing/done/cancelAll API in XPIProvider -let scope = Components.utils.import("resource://gre/modules/XPIProvider.jsm"); +let scope = Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm"); let XPIProvider = scope.XPIProvider; function run_test() { // Check that cancelling with nothing in progress doesn't blow up XPIProvider.cancelAll(); // Check that a basic object gets cancelled let getsCancelled = {
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug424262.js +++ b/toolkit/mozapps/extensions/test/xpcshell/test_bug424262.js @@ -1,13 +1,13 @@ /* 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/. */ -Components.utils.import("resource://gre/modules/AddonRepository.jsm"); +Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm"); const PREF_GETADDONS_GETRECOMMENDED = "extensions.getAddons.recommended.url"; Components.utils.import("resource://testing-common/httpd.js"); var server; var RESULTS = [ null, null,
--- a/toolkit/mozapps/extensions/test/xpcshell/test_bug554133.js +++ b/toolkit/mozapps/extensions/test/xpcshell/test_bug554133.js @@ -1,16 +1,16 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ // This verifies that if the AMO response provides total_results, // searchSucceeded is called with the correct number of total results -Components.utils.import("resource://gre/modules/AddonRepository.jsm"); +Components.utils.import("resource://gre/modules/addons/AddonRepository.jsm"); const PREF_GETADDONS_GETSEARCHRESULTS = "extensions.getAddons.search.url"; Components.utils.import("resource://testing-common/httpd.js"); var server; var TESTS = [ {
--- a/toolkit/mozapps/extensions/test/xpcshell/test_no_addons.js +++ b/toolkit/mozapps/extensions/test/xpcshell/test_no_addons.js @@ -3,17 +3,17 @@ */ // Test startup and restart when no add-ons are installed // bug 944006 Components.utils.import("resource://gre/modules/Promise.jsm"); // Load XPI Provider to get schema version ID -let XPIScope = Components.utils.import("resource://gre/modules/XPIProvider.jsm"); +let XPIScope = Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm"); const DB_SCHEMA = XPIScope.DB_SCHEMA; createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); function run_test() { // Kick off the task-based tests... run_next_test(); }
--- a/toolkit/mozapps/extensions/test/xpcshell/test_pluginchange.js +++ b/toolkit/mozapps/extensions/test/xpcshell/test_pluginchange.js @@ -1,16 +1,16 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ const LIST_UPDATED_TOPIC = "plugins-list-updated"; // We need to use the same algorithm for generating IDs for plugins -var { getIDHashForString } = Components.utils.import("resource://gre/modules/PluginProvider.jsm"); +var { getIDHashForString } = Components.utils.import("resource://gre/modules/addons/PluginProvider.jsm"); function PluginTag(name, description) { this.name = name; this.description = description; } PluginTag.prototype = { name: null,
--- a/toolkit/mozapps/extensions/test/xpcshell/test_syncGUID.js +++ b/toolkit/mozapps/extensions/test/xpcshell/test_syncGUID.js @@ -2,17 +2,17 @@ * http://creativecommons.org/publicdomain/zero/1.0/ */ Components.utils.import("resource://gre/modules/Services.jsm"); // restartManager() mucks with XPIProvider.jsm importing, so we hack around. this.__defineGetter__("XPIProvider", function () { let scope = {}; - return Components.utils.import("resource://gre/modules/XPIProvider.jsm", scope) + return Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm", scope) .XPIProvider; }); const addonId = "addon1@tests.mozilla.org"; function run_test() { Services.prefs.setBoolPref("extensions.checkUpdateSecurity", false);
--- a/toolkit/mozapps/extensions/test/xpcshell/test_updatecheck.js +++ b/toolkit/mozapps/extensions/test/xpcshell/test_updatecheck.js @@ -1,15 +1,15 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ // This verifies that AddonUpdateChecker works correctly -Components.utils.import("resource://gre/modules/AddonUpdateChecker.jsm"); +Components.utils.import("resource://gre/modules/addons/AddonUpdateChecker.jsm"); Components.utils.import("resource://testing-common/httpd.js"); var testserver; function run_test() { createAppInfo("xpcshell@tests.mozilla.org", "XPCShell", "1", "1.9.2"); // Create and configure the HTTP server.