Bug 845612 - Add @Override annotations for implemented interfaces. r=kats
authorBrian Nicholson <bnicholson@mozilla.com>
Tue, 26 Feb 2013 21:48:00 -0800
changeset 123120 7164bd42720f6f1f7ba9164df0de5386920abed6
parent 123119 ed22faa72a821ccac550b6e821eec34b24611022
child 123121 e3738346f3075b556fb4ba4ec48c8700bfa5ad52
push id24372
push useremorley@mozilla.com
push dateWed, 27 Feb 2013 13:22:59 +0000
treeherdermozilla-central@0a91da5f5eab [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerskats
bugs845612
milestone22.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 845612 - Add @Override annotations for implemented interfaces. r=kats
mobile/android/base/AboutHomeContent.java
mobile/android/base/AboutHomePromoBox.java
mobile/android/base/ActivityHandlerHelper.java
mobile/android/base/AndroidImportPreference.java
mobile/android/base/AnimatedHeightLayout.java
mobile/android/base/AwesomeBar.java
mobile/android/base/AwesomeBarTabs.java
mobile/android/base/AwesomebarResultHandler.java
mobile/android/base/BrowserApp.java
mobile/android/base/BrowserToolbar.java
mobile/android/base/CameraImageResultHandler.java
mobile/android/base/CameraVideoResultHandler.java
mobile/android/base/CheckableLinearLayout.java
mobile/android/base/CrashReporter.java.in
mobile/android/base/Distribution.java
mobile/android/base/DoorHanger.java
mobile/android/base/DoorHangerPopup.java
mobile/android/base/Favicons.java
mobile/android/base/FilePickerResultHandlerSync.java
mobile/android/base/FindInPageBar.java
mobile/android/base/FontSizePreference.java
mobile/android/base/FormAssistPopup.java
mobile/android/base/GeckoAccessibility.java
mobile/android/base/GeckoActivity.java.in
mobile/android/base/GeckoApp.java
mobile/android/base/GeckoAppShell.java
mobile/android/base/GeckoEditable.java
mobile/android/base/GeckoInputConnection.java
mobile/android/base/GeckoPreferences.java
mobile/android/base/GeckoSmsManager.java
mobile/android/base/GeckoThread.java
mobile/android/base/GlobalHistory.java
mobile/android/base/JavaAddonManager.java
mobile/android/base/LauncherShortcuts.java.in
mobile/android/base/LightweightTheme.java
mobile/android/base/MultiChoicePreference.java
mobile/android/base/PrefsHelper.java
mobile/android/base/ProfileMigrator.java
mobile/android/base/PromptService.java
mobile/android/base/ShapedButton.java
mobile/android/base/Tab.java
mobile/android/base/Tabs.java
mobile/android/base/TabsPanel.java
mobile/android/base/TabsTray.java
mobile/android/base/TextSelection.java
mobile/android/base/TextSelectionHandle.java
mobile/android/base/UiAsyncTask.java
mobile/android/base/WebApp.java.in
mobile/android/base/WebAppAllocator.java
mobile/android/base/awesomebar/AllPagesTab.java
mobile/android/base/awesomebar/BookmarksTab.java
mobile/android/base/awesomebar/HistoryTab.java
mobile/android/base/db/BrowserProvider.java.in
mobile/android/base/db/LocalBrowserDB.java
mobile/android/base/db/TabsProvider.java.in
mobile/android/base/gfx/GLController.java
mobile/android/base/gfx/GeckoLayerClient.java
mobile/android/base/gfx/JavaPanZoomController.java
mobile/android/base/gfx/LayerRenderer.java
mobile/android/base/gfx/LayerView.java
mobile/android/base/gfx/PluginLayer.java
mobile/android/base/gfx/SubdocumentScrollHelper.java
mobile/android/base/gfx/TouchEventHandler.java
mobile/android/base/tests/BaseTest.java.in
mobile/android/base/tests/testBookmark.java.in
mobile/android/base/tests/testBookmarklets.java.in
mobile/android/base/tests/testBookmarksTab.java.in
mobile/android/base/tests/testBrowserProvider.java.in
mobile/android/base/tests/testHistory.java.in
mobile/android/base/tests/testHistoryTab.java.in
mobile/android/base/tests/testNewTab.java.in
mobile/android/base/tests/testSearchSuggestions.java.in
mobile/android/base/tests/testShareLink.java.in
mobile/android/base/tests/testThumbnails.java.in
mobile/android/base/widget/DateTimePicker.java
--- a/mobile/android/base/AboutHomeContent.java
+++ b/mobile/android/base/AboutHomeContent.java
@@ -166,32 +166,34 @@ public class AboutHomeContent extends Sc
     }
 
     private void inflate() {
         mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         mInflater.inflate(R.layout.abouthome_content, this);
 
         mTopSitesGrid = (TopSitesGridView)findViewById(R.id.top_sites_grid);
         mTopSitesGrid.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+            @Override
             public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                 TopSitesViewHolder holder = (TopSitesViewHolder) v.getTag();
                 String spec = holder.getUrl();
 
                 // If we don't have a url, this must be an empty row. Show the edit dialog box
                 if (TextUtils.isEmpty(spec)) {
                     editSite(spec, position);
                     return;
                 }
 
                 if (mUriLoadCallback != null)
                     mUriLoadCallback.callback(spec);
             }
         });
 
         mTopSitesGrid.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
+            @Override
             public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
                 AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)menuInfo;
                 mTopSitesGrid.setSelectedPosition(info.position);
 
                 MenuInflater inflater = mActivity.getMenuInflater();
                 inflater.inflate(R.menu.abouthome_topsites_contextmenu, menu);
 
                 // If nothing is pinned at all, hide both clear items
@@ -212,23 +214,25 @@ public class AboutHomeContent extends Sc
         });
 
         mPromoBox = (AboutHomePromoBox) findViewById(R.id.promo_box);
         mAddons = (AboutHomeSection) findViewById(R.id.recommended_addons);
         mLastTabs = (AboutHomeSection) findViewById(R.id.last_tabs);
         mRemoteTabs = (AboutHomeSection) findViewById(R.id.remote_tabs);
 
         mAddons.setOnMoreTextClickListener(new View.OnClickListener() {
+            @Override
             public void onClick(View v) {
                 if (mUriLoadCallback != null)
                     mUriLoadCallback.callback("https://addons.mozilla.org/android");
             }
         });
 
         mRemoteTabs.setOnMoreTextClickListener(new View.OnClickListener() {
+            @Override
             public void onClick(View v) {
                 mActivity.showRemoteTabs();
             }
         });
 
         setTopSitesConstants();
     }
 
@@ -276,16 +280,17 @@ public class AboutHomeContent extends Sc
         setTopSitesVisibility(hasTopSites);
         mPromoBox.showRandomPromo();
     }
 
     private void updateLayoutForSync() {
         final GeckoApp.StartupMode startupMode = mActivity.getStartupMode();
 
         post(new Runnable() {
+            @Override
             public void run() {
                 // The listener might run before the UI is initially updated.
                 // In this case, we should simply wait for the initial setup
                 // to happen.
                 if (mTopSitesAdapter != null)
                     updateLayout();
             }
         });
@@ -297,16 +302,17 @@ public class AboutHomeContent extends Sc
         if (mTopSitesAdapter != null) {
             old = mTopSitesAdapter.getCursor();
         }
         // Swap in the new cursor.
         final Cursor oldCursor = old;
         final Cursor newCursor = BrowserDB.getTopSites(resolver, mNumberOfTopSites);
 
         post(new Runnable() {
+            @Override
             public void run() {
                 if (mTopSitesAdapter == null) {
                     mTopSitesAdapter = new TopSitesCursorAdapter(mActivity,
                                                                  R.layout.abouthome_topsite_item,
                                                                  newCursor,
                                                                  new String[] { URLColumns.TITLE },
                                                                  new int[] { R.id.title });
 
@@ -432,16 +438,17 @@ public class AboutHomeContent extends Sc
             public void onPostExecute(Cursor c) {
                 updateTopSitesThumbnails(getThumbnailsFromCursor(c));
             }
         }).execute();
     }
 
     void update(final EnumSet<UpdateFlags> flags) {
         GeckoAppShell.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 if (flags.contains(UpdateFlags.TOP_SITES))
                     loadTopSites();
 
                 if (flags.contains(UpdateFlags.PREVIOUS_TABS))
                     readLastTabs();
 
                 if (flags.contains(UpdateFlags.RECOMMENDED_ADDONS))
@@ -570,16 +577,17 @@ public class AboutHomeContent extends Sc
                 addonsArray = new JSONObject(jsonString).getJSONArray("addons");
             } catch (JSONException e) {
                 Log.i(LOGTAG, "error reading json file", e);
             }
         }
 
         final JSONArray array = addonsArray;
         post(new Runnable() {
+            @Override
             public void run() {
                 try {
                     if (array == null || array.length() == 0) {
                         mAddons.hide();
                         return;
                     }
 
                     for (int i = 0; i < array.length(); i++) {
@@ -598,25 +606,27 @@ public class AboutHomeContent extends Sc
                         drawable.setBounds(sIconBounds);
                         row.setCompoundDrawables(drawable, null, null, null);
 
                         String iconUrl = jsonobj.getString("iconURL");
                         String pageUrl = getPageUrlFromIconUrl(iconUrl);
 
                         final String homepageUrl = jsonobj.getString("homepageURL");
                         row.setOnClickListener(new View.OnClickListener() {
+                            @Override
                             public void onClick(View v) {
                                 if (mUriLoadCallback != null)
                                     mUriLoadCallback.callback(homepageUrl);
                             }
                         });
 
                         Favicons favicons = Favicons.getInstance();
                         favicons.loadFavicon(pageUrl, iconUrl, true,
                                     new Favicons.OnFaviconLoadedListener() {
+                            @Override
                             public void onFaviconLoaded(String url, Bitmap favicon) {
                                 if (favicon != null) {
                                     Drawable drawable = new BitmapDrawable(favicon);
                                     drawable.setBounds(sIconBounds);
                                     row.setCompoundDrawables(drawable, null, null, null);
                                 }
                             }
                         });
@@ -649,25 +659,27 @@ public class AboutHomeContent extends Sc
                     return;
                 }
 
                 ContentResolver resolver = mActivity.getContentResolver();
                 final Bitmap favicon = BrowserDB.getFaviconForUrl(resolver, url);
                 lastTabUrlsList.add(url);
 
                 AboutHomeContent.this.post(new Runnable() {
+                    @Override
                     public void run() {
                         View container = mInflater.inflate(R.layout.abouthome_last_tabs_row, mLastTabs.getItemsContainer(), false);
                         ((TextView) container.findViewById(R.id.last_tab_title)).setText(tab.getSelectedTitle());
                         ((TextView) container.findViewById(R.id.last_tab_url)).setText(tab.getSelectedUrl());
                         if (favicon != null) {
                             ((ImageView) container.findViewById(R.id.last_tab_favicon)).setImageBitmap(favicon);
                         }
 
                         container.setOnClickListener(new View.OnClickListener() {
+                            @Override
                             public void onClick(View v) {
                                 int flags = Tabs.LOADURL_NEW_TAB;
                                 if (Tabs.getInstance().getSelectedTab().isPrivate())
                                     flags |= Tabs.LOADURL_PRIVATE;
                                 Tabs.getInstance().loadUrl(url, flags);
                             }
                         });
 
@@ -675,20 +687,22 @@ public class AboutHomeContent extends Sc
                     }
                 });
             }
         }.parse(jsonString);
 
         final int numLastTabs = lastTabUrlsList.size();
         if (numLastTabs >= 1) {
             post(new Runnable() {
+                @Override
                 public void run() {
                     if (numLastTabs > 1) {
                         mLastTabs.showMoreText();
                         mLastTabs.setOnMoreTextClickListener(new View.OnClickListener() {
+                            @Override
                             public void onClick(View v) {
                                 int flags = Tabs.LOADURL_NEW_TAB;
                                 if (Tabs.getInstance().getSelectedTab().isPrivate())
                                     flags |= Tabs.LOADURL_PRIVATE;
                                 for (String url : lastTabUrlsList) {
                                     Tabs.getInstance().loadUrl(url, flags);
                                 }
                             }
@@ -700,16 +714,17 @@ public class AboutHomeContent extends Sc
                 }
             });
         }
     }
 
     private void loadRemoteTabs() {
         if (!SyncAccounts.syncAccountsExist(mActivity)) {
             post(new Runnable() {
+                @Override
                 public void run() {
                     mRemoteTabs.hide();
                 }
             });
             return;
         }
 
         TabsAccessor.getTabs(getContext(), NUMBER_OF_REMOTE_TABS, this);
@@ -1038,16 +1053,17 @@ public class AboutHomeContent extends Sc
         Intent intent = new Intent(mContext, AwesomeBar.class);
         intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
         intent.putExtra(AwesomeBar.TARGET_KEY, AwesomeBar.Target.PICK_SITE.toString());
         if (url != null && !TextUtils.isEmpty(url)) {
             intent.putExtra(AwesomeBar.CURRENT_URL_KEY, url);
         }
 
         int requestCode = GeckoAppShell.sActivityHelper.makeRequestCode(new ActivityResultHandler() {
+            @Override
             public void onActivityResult(int resultCode, Intent data) {
                 if (resultCode == Activity.RESULT_CANCELED || data == null)
                     return;
 
                 final View v = mTopSitesGrid.getChildAt(position);
                 final TopSitesViewHolder holder = (TopSitesViewHolder) v.getTag();
 
                 final String title = data.getStringExtra(AwesomeBar.TITLE_KEY);
--- a/mobile/android/base/AboutHomePromoBox.java
+++ b/mobile/android/base/AboutHomePromoBox.java
@@ -61,16 +61,17 @@ public class AboutHomePromoBox extends T
     }
 
     private class SyncType extends Type {
         private OnAccountsUpdateListener mAccountListener;
         public SyncType(int aText, int aBoldText, int aImage) {
             super(aText, aBoldText, aImage);
             // The listener will run on the background thread (see 2nd argument)
             mAccountListener = new OnAccountsUpdateListener() {
+                @Override
                 public void onAccountsUpdated(Account[] accounts) {
                     showRandomPromo();
                 }
             };
             AccountManager.get(mContext).addOnAccountsUpdatedListener(mAccountListener, GeckoAppShell.getHandler(), false);
         }
         @Override
         public boolean canShow() {
@@ -120,16 +121,17 @@ public class AboutHomePromoBox extends T
             @Override
             public void onClick(View v) {
                 Tabs.getInstance().loadUrl("https://marketplace.firefox.com/", Tabs.LOADURL_NEW_TAB);
 
                 // this isn't as good as being notified whenever this url is added to the database,
                 // if the user visits the marketplace through some other means, we'll have to wait
                 // until we are refreshed or restarted to get the correct value
                 v.postDelayed(new Runnable() {
+                    @Override
                     public void run() {
                         showRandomPromo();
                     }
                 }, 5000);
             }
         });
     }
 
@@ -144,16 +146,17 @@ public class AboutHomePromoBox extends T
     }
 
     /**
      * Shows the specified promo box. If a promo box is already active, it will be overidden with a
      * promo box of the specified type.
      */
     public void showRandomPromo() {
         getAvailableTypes(new GetTypesCallback() {
+            @Override
             public void onGotTypes(ArrayList<Type> types) {
                 if (types.size() == 0) {
                     hide();
                     return;
                 }
 
                 // Try to maintain a promo type for the lifetime of the application
                 if (AboutHomePromoBox.sTypeIndex == -1 || AboutHomePromoBox.sTypeIndex >= types.size()) {
--- a/mobile/android/base/ActivityHandlerHelper.java
+++ b/mobile/android/base/ActivityHandlerHelper.java
@@ -235,13 +235,14 @@ class ActivityHandlerHelper {
         private final String mTitle;
         private final PromptService.PromptListItem[] mItems;
 
         public FilePickerPromptRunnable(String aTitle, PromptService.PromptListItem[] aItems) {
             mTitle = aTitle;
             mItems = aItems;
         }
 
+        @Override
         public void run() {
             GeckoApp.mAppContext.getPromptService().show(mTitle, "", mItems, false);
         }
     }
 }
--- a/mobile/android/base/AndroidImportPreference.java
+++ b/mobile/android/base/AndroidImportPreference.java
@@ -69,28 +69,31 @@ class AndroidImportPreference extends Mu
 
         final ProgressDialog dialog =
             ProgressDialog.show(mContext,
                                 dialogTitle,
                                 mContext.getString(R.string.bookmarkhistory_import_wait),
                                 true);
 
         final Runnable stopCallback = new Runnable() {
+            @Override
             public void run() {
                 GeckoApp.mAppContext.runOnUiThread(new Runnable() {
+                    @Override
                     public void run() {
                         dialog.dismiss();
                     }
                 });
             }
         };
 
         GeckoBackgroundThread.getHandler().post(
             // Constructing AndroidImport may need finding the profile,
             // which hits disk, so it needs to go into a Runnable too.
             new Runnable() {
+                @Override
                 public void run() {
                     new AndroidImport(mContext, stopCallback, doBookmarks, doHistory).run();
                 }
             }
         );
     }
 }
--- a/mobile/android/base/AnimatedHeightLayout.java
+++ b/mobile/android/base/AnimatedHeightLayout.java
@@ -29,20 +29,24 @@ public class AnimatedHeightLayout extend
             mAnimating = true;
             setMeasuredDimension(getMeasuredWidth(), oldHeight);
 
             // Animate the difference of suggestion row height
             Animation anim = new HeightChangeAnimation(this, oldHeight, newHeight);
             anim.setDuration(ANIMATION_DURATION);
             anim.setInterpolator(new DecelerateInterpolator());
             anim.setAnimationListener(new Animation.AnimationListener() {
+                @Override
                 public void onAnimationStart(Animation animation) {}
+                @Override
                 public void onAnimationRepeat(Animation animation) {}
+                @Override
                 public void onAnimationEnd(Animation animation) {
                     post(new Runnable() {
+                        @Override
                         public void run() {
                             finishAnimation();
                         }
                     });
                 }
             });
             startAnimation(anim);
         }
--- a/mobile/android/base/AwesomeBar.java
+++ b/mobile/android/base/AwesomeBar.java
@@ -83,38 +83,43 @@ public class AwesomeBar extends GeckoAct
         mGoButton = (ImageButton) findViewById(R.id.awesomebar_button);
         mText = (CustomEditText) findViewById(R.id.awesomebar_text);
 
         TabWidget tabWidget = (TabWidget) findViewById(android.R.id.tabs);
         tabWidget.setDividerDrawable(null);
 
         mAwesomeTabs = (AwesomeBarTabs) findViewById(R.id.awesomebar_tabs);
         mAwesomeTabs.setOnUrlOpenListener(new AwesomeBarTabs.OnUrlOpenListener() {
+            @Override
             public void onUrlOpen(String url, String title) {
                 openUrlAndFinish(url, title, false);
             }
 
+            @Override
             public void onSearch(String engine, String text) {
                 openSearchAndFinish(text, engine);
             }
 
+            @Override
             public void onEditSuggestion(final String text) {
                 GeckoApp.mAppContext.mMainHandler.post(new Runnable() {
+                    @Override
                     public void run() {
                         mText.setText(text);
                         mText.setSelection(mText.getText().length());
                         mText.requestFocus();
                         InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                         imm.showSoftInput(mText, InputMethodManager.SHOW_IMPLICIT);
                     }
                 });
             }
         });
 
         mGoButton.setOnClickListener(new Button.OnClickListener() {
+            @Override
             public void onClick(View v) {
                 openUserEnteredAndFinish(mText.getText().toString());
             }
         });
 
         Intent intent = getIntent();
         String currentUrl = intent.getStringExtra(CURRENT_URL_KEY);
         if (currentUrl != null) {
@@ -134,16 +139,17 @@ public class AwesomeBar extends GeckoAct
                     mTabs.setPrivateMode(true);
 
                 mText.setPrivateMode(true);
             }
         }
         mAwesomeTabs.setTarget(mTarget);
 
         mText.setOnKeyPreImeListener(new CustomEditText.OnKeyPreImeListener() {
+            @Override
             public boolean onKeyPreIme(View v, int keyCode, KeyEvent event) {
                 // We only want to process one event per tap
                 if (event.getAction() != KeyEvent.ACTION_DOWN)
                     return false;
 
                 if (keyCode == KeyEvent.KEYCODE_ENTER) {
                     // If the AwesomeBar has a composition string, don't submit the text yet.
                     // ENTER is needed to commit the composition string.
@@ -170,57 +176,62 @@ public class AwesomeBar extends GeckoAct
                     return true;
                 }
 
                 return false;
             }
         });
 
         mText.addTextChangedListener(new TextWatcher() {
+            @Override
             public void afterTextChanged(Editable s) {
                 String text = s.toString();
                 mAwesomeTabs.filter(text);
 
                 // If the AwesomeBar has a composition string, don't call updateGoButton().
                 // That method resets IME and composition state will be broken.
                 if (!hasCompositionString(s)) {
                     updateGoButton(text);
                 }
 
                 if (Build.VERSION.SDK_INT >= 11) {
                     getActionBar().hide();
                 }
             }
 
+            @Override
             public void beforeTextChanged(CharSequence s, int start, int count,
                                           int after) {
                 // do nothing
             }
 
+            @Override
             public void onTextChanged(CharSequence s, int start, int before,
                                       int count) {
                 // do nothing
             }
         });
 
         mText.setOnKeyListener(new View.OnKeyListener() {
+            @Override
             public boolean onKey(View v, int keyCode, KeyEvent event) {
                 if (keyCode == KeyEvent.KEYCODE_ENTER) {
                     if (event.getAction() != KeyEvent.ACTION_DOWN)
                         return true;
 
                     openUserEnteredAndFinish(mText.getText().toString());
                     return true;
                 } else {
                     return false;
                 }
             }
         });
 
         mText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
+            @Override
             public void onFocusChange(View v, boolean hasFocus) {
                 if (v == null || hasFocus) {
                     return;
                 }
 
                 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                 try {
                     imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
@@ -560,16 +571,17 @@ public class AwesomeBar extends GeckoAct
                 final EditText nameText = ((EditText) editView.findViewById(R.id.edit_bookmark_name));
                 final EditText locationText = ((EditText) editView.findViewById(R.id.edit_bookmark_location));
                 final EditText keywordText = ((EditText) editView.findViewById(R.id.edit_bookmark_keyword));
                 nameText.setText(title);
                 locationText.setText(url);
                 keywordText.setText(keyword);
 
                 editPrompt.setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {
+                    @Override
                     public void onClick(DialogInterface dialog, int whichButton) {
                         (new UiAsyncTask<Void, Void, Void>(GeckoAppShell.getHandler()) {
                             @Override
                             public Void doInBackground(Void... params) {
                                 String newUrl = locationText.getText().toString().trim();
                                 BrowserDB.updateBookmark(getContentResolver(), id, newUrl, nameText.getText().toString(),
                                                          keywordText.getText().toString());
                                 return null;
@@ -579,31 +591,35 @@ public class AwesomeBar extends GeckoAct
                             public void onPostExecute(Void result) {
                                 Toast.makeText(AwesomeBar.this, R.string.bookmark_updated, Toast.LENGTH_SHORT).show();
                             }
                         }).execute();
                     }
                 });
 
                 editPrompt.setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() {
-                      public void onClick(DialogInterface dialog, int whichButton) {
+                    @Override
+                    public void onClick(DialogInterface dialog, int whichButton) {
                           // do nothing
                       }
                 });
 
                 final AlertDialog dialog = editPrompt.create();
 
                 // disable OK button if the URL is empty
                 locationText.addTextChangedListener(new TextWatcher() {
                     private boolean mEnabled = true;
 
+                    @Override
                     public void afterTextChanged(Editable s) {}
 
+                    @Override
                     public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
 
+                    @Override
                     public void onTextChanged(CharSequence s, int start, int before, int count) {
                         boolean enabled = (s.toString().trim().length() > 0);
                         if (mEnabled != enabled) {
                             dialog.getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(enabled);
                             mEnabled = enabled;
                         }
                     }
                 });
--- a/mobile/android/base/AwesomeBarTabs.java
+++ b/mobile/android/base/AwesomeBarTabs.java
@@ -125,16 +125,17 @@ public class AwesomeBarTabs extends TabH
 
         mInflated = true;
 
         // This should be called before adding any tabs
         // to the TabHost.
         setup();
 
         mListTouchListener = new View.OnTouchListener() {
+            @Override
             public boolean onTouch(View view, MotionEvent event) {
                 if (event.getActionMasked() == MotionEvent.ACTION_DOWN)
                     hideSoftInput(view);
                 return false;
             }
         };
 
         mTabs = new AwesomeBarTab[] {
@@ -259,16 +260,17 @@ public class AwesomeBarTabs extends TabH
         GeckoTextView indicatorView = (GeckoTextView) mInflater.inflate(R.layout.awesomebar_tab_indicator, null);
         indicatorView.setText(titleId);
 
         getTabWidget().addView(indicatorView);
 
         // this MUST be done after tw.addView to overwrite the listener added by tabWidget
         // which delegates to TabHost (which we don't have)
         indicatorView.setOnClickListener(new View.OnClickListener() {
+            @Override
             public void onClick(View v) {
                 mViewPager.setCurrentItem(contentId, true);
             }
         });
 
         return indicatorView;
     }
 
--- a/mobile/android/base/AwesomebarResultHandler.java
+++ b/mobile/android/base/AwesomebarResultHandler.java
@@ -6,16 +6,17 @@ package org.mozilla.gecko;
 
 import org.mozilla.gecko.util.ActivityResultHandler;
 
 import android.content.Intent;
 
 class AwesomebarResultHandler implements ActivityResultHandler {
     private static final String LOGTAG = "GeckoAwesomebarResultHandler";
 
+    @Override
     public void onActivityResult(int resultCode, Intent data) {
         if (data != null) {
             String url = data.getStringExtra(AwesomeBar.URL_KEY);
             AwesomeBar.Target target = AwesomeBar.Target.valueOf(data.getStringExtra(AwesomeBar.TARGET_KEY));
             String searchEngine = data.getStringExtra(AwesomeBar.SEARCH_KEY);
             if (url != null && url.length() > 0) {
                 int flags = Tabs.LOADURL_NONE;
                 if (target == AwesomeBar.Target.NEW_TAB) {
--- a/mobile/android/base/BrowserApp.java
+++ b/mobile/android/base/BrowserApp.java
@@ -70,16 +70,17 @@ abstract public class BrowserApp extends
         public int parent;
     }
 
     private Vector<MenuItemInfo> mAddonMenuItemsCache;
 
     private PropertyAnimator mMainLayoutAnimator;
 
     private static final Interpolator sTabsInterpolator = new Interpolator() {
+        @Override
         public float getInterpolation(float t) {
             t -= 1.0f;
             return t * t * t * t * t + 1.0f;
         }
     };
 
     private FindInPageBar mFindInPageBar;
 
@@ -105,16 +106,17 @@ abstract public class BrowserApp extends
                     SiteIdentityPopup.getInstance().dismiss();
 
                     final TabsPanel.Panel panel = tab.isPrivate()
                                                 ? TabsPanel.Panel.PRIVATE_TABS
                                                 : TabsPanel.Panel.NORMAL_TABS;
                     // Delay calling showTabs so that it does not modify the mTabsChangedListeners
                     // array while we are still iterating through the array.
                     mMainHandler.post(new Runnable() {
+                        @Override
                         public void run() {
                             if (areTabsShown() && mTabsPanel.getCurrentPanel() != panel)
                                 showTabs(panel);
                         }
                     });
                 }
                 break;
             case LOAD_ERROR:
@@ -149,35 +151,38 @@ abstract public class BrowserApp extends
 
     void handleReaderAdded(boolean success, final String title, final String url) {
         if (!success) {
             showToast(R.string.reading_list_failed, Toast.LENGTH_SHORT);
             return;
         }
 
         GeckoAppShell.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 BrowserDB.addReadingListItem(getContentResolver(), title, url);
                 showToast(R.string.reading_list_added, Toast.LENGTH_SHORT);
             }
         });
     }
 
     void handleReaderRemoved(final String url) {
         GeckoAppShell.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 BrowserDB.removeReadingListItemWithURL(getContentResolver(), url);
                 showToast(R.string.reading_list_removed, Toast.LENGTH_SHORT);
             }
         });
     }
 
     @Override
     void onStatePurged() {
         mMainHandler.post(new Runnable() {
+            @Override
             public void run() {
                 if (mAboutHomeContent != null)
                     mAboutHomeContent.setLastTabsVisibility(false);
             }
         });
 
         super.onStatePurged();
     }
@@ -271,16 +276,17 @@ abstract public class BrowserApp extends
                 Tabs.getInstance().loadUrl(uri, flags);
             }
         }
     }
 
     @Override
     void toggleChrome(final boolean aShow) {
         mMainHandler.post(new Runnable() {
+            @Override
             public void run() {
                 if (aShow) {
                     mBrowserToolbar.show();
                 } else {
                     mBrowserToolbar.hide();
                     if (hasTabsSideBar()) {
                         hideTabs();
                     }
@@ -289,16 +295,17 @@ abstract public class BrowserApp extends
         });
 
         super.toggleChrome(aShow);
     }
 
     @Override
     void focusChrome() {
         mMainHandler.post(new Runnable() {
+            @Override
             public void run() {
                 mBrowserToolbar.show();
                 mBrowserToolbar.requestFocusFromTouch();
             }
         });
     }
 
     @Override
@@ -416,31 +423,34 @@ abstract public class BrowserApp extends
                 try {
                     info.checkable = message.getBoolean("checkable");
                 } catch (Exception ex) { }
                 try { // parent is optional
                     info.parent = message.getInt("parent") + ADDON_MENU_OFFSET;
                 } catch (Exception ex) { }
                 final MenuItemInfo menuItemInfo = info;
                 mMainHandler.post(new Runnable() {
+                    @Override
                     public void run() {
                         addAddonMenuItem(menuItemInfo);
                     }
                 });
             } else if (event.equals("Menu:Remove")) {
                 final int id = message.getInt("id") + ADDON_MENU_OFFSET;
                 mMainHandler.post(new Runnable() {
+                    @Override
                     public void run() {
                         removeAddonMenuItem(id);
                     }
                 });
             } else if (event.equals("Menu:Update")) {
                 final int id = message.getInt("id") + ADDON_MENU_OFFSET;
                 final JSONObject options = message.getJSONObject("options");
                 mMainHandler.post(new Runnable() {
+                    @Override
                     public void run() {
                         updateAddonMenuItem(id, options);
                     }
                 });
             } else if (event.equals("CharEncoding:Data")) {
                 final JSONArray charsets = message.getJSONArray("charsets");
                 int selected = message.getInt("selected");
 
@@ -448,41 +458,45 @@ abstract public class BrowserApp extends
                 final String[] titleArray = new String[len];
                 for (int i = 0; i < len; i++) {
                     JSONObject charset = charsets.getJSONObject(i);
                     titleArray[i] = charset.getString("title");
                 }
 
                 final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
                 dialogBuilder.setSingleChoiceItems(titleArray, selected, new AlertDialog.OnClickListener() {
+                    @Override
                     public void onClick(DialogInterface dialog, int which) {
                         try {
                             JSONObject charset = charsets.getJSONObject(which);
                             GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("CharEncoding:Set", charset.getString("code")));
                             dialog.dismiss();
                         } catch (JSONException e) {
                             Log.e(LOGTAG, "error parsing json", e);
                         }
                     }
                 });
                 dialogBuilder.setNegativeButton(R.string.button_cancel, new AlertDialog.OnClickListener() {
+                    @Override
                     public void onClick(DialogInterface dialog, int which) {
                         dialog.dismiss();
                     }
                 });
                 mMainHandler.post(new Runnable() {
+                    @Override
                     public void run() {
                         dialogBuilder.show();
                     }
                 });
             } else if (event.equals("CharEncoding:State")) {
                 final boolean visible = message.getString("visible").equals("true");
                 GeckoPreferences.setCharEncodingState(visible);
                 final Menu menu = mMenu;
                 mMainHandler.post(new Runnable() {
+                    @Override
                     public void run() {
                         if (menu != null)
                             menu.findItem(R.id.char_encoding).setVisible(visible);
                     }
                 });
             } else if (event.equals("Feedback:OpenPlayStore")) {
                 Intent intent = new Intent(Intent.ACTION_VIEW);
                 intent.setData(Uri.parse("market://details?id=" + getPackageName()));
@@ -492,16 +506,17 @@ abstract public class BrowserApp extends
             } else if (event.equals("Feedback:LastUrl")) {
                 getLastUrl();
             } else if (event.equals("Gecko:Ready")) {
                 // Handle this message in GeckoApp, but also enable the Settings
                 // menuitem, which is specific to BrowserApp.
                 super.handleMessage(event, message);
                 final Menu menu = mMenu;
                 mMainHandler.post(new Runnable() {
+                    @Override
                     public void run() {
                         if (menu != null)
                             menu.findItem(R.id.settings).setEnabled(true);
                     }
                 });
             } else if (event.equals("Telemetry:Gather")) {
                 Telemetry.HistogramAdd("PLACES_PAGES_COUNT", BrowserDB.getCount(getContentResolver(), "history"));
                 Telemetry.HistogramAdd("PLACES_BOOKMARKS_COUNT", BrowserDB.getCount(getContentResolver(), "bookmarks"));
@@ -658,16 +673,17 @@ abstract public class BrowserApp extends
 
     /* Favicon methods */
     private void loadFavicon(final Tab tab) {
         maybeCancelFaviconLoad(tab);
 
         long id = Favicons.getInstance().loadFavicon(tab.getURL(), tab.getFaviconURL(), !tab.isPrivate(),
                         new Favicons.OnFaviconLoadedListener() {
 
+            @Override
             public void onFaviconLoaded(String pageUrl, Bitmap favicon) {
                 // Leave favicon UI untouched if we failed to load the image
                 // for some reason.
                 if (favicon == null)
                     return;
 
                 // The tab might be pointing to another URL by the time the
                 // favicon is finally loaded, in which case we simply ignore it.
@@ -730,29 +746,32 @@ abstract public class BrowserApp extends
     }
 
     private class AboutHomeRunnable implements Runnable {
         boolean mShow;
         AboutHomeRunnable(boolean show) {
             mShow = show;
         }
 
+        @Override
         public void run() {
             if (mShow) {
                 if (mAboutHomeContent == null) {
                     mAboutHomeContent = (AboutHomeContent) findViewById(R.id.abouthome_content);
                     mAboutHomeContent.init();
                     mAboutHomeContent.update(AboutHomeContent.UpdateFlags.ALL);
                     mAboutHomeContent.setUriLoadCallback(new AboutHomeContent.UriLoadCallback() {
+                        @Override
                         public void callback(String url) {
                             mBrowserToolbar.setProgressVisibility(true);
                             Tabs.getInstance().loadUrl(url);
                         }
                     });
                     mAboutHomeContent.setLoadCompleteCallback(new AboutHomeContent.VoidCallback() {
+                        @Override
                         public void callback() {
                             mAboutHomeStartupTimer.stop();
                         }
                     });
                 } else {
                     mAboutHomeContent.update(EnumSet.of(AboutHomeContent.UpdateFlags.TOP_SITES,
                                                         AboutHomeContent.UpdateFlags.REMOTE_TABS));
                 }
@@ -847,16 +866,17 @@ abstract public class BrowserApp extends
 
         if (info.icon != null) {
             if (info.icon.startsWith("data")) {
                 BitmapDrawable drawable = new BitmapDrawable(BitmapUtils.getBitmapFromDataURI(info.icon));
                 item.setIcon(drawable);
             }
             else if (info.icon.startsWith("jar:") || info.icon.startsWith("file://")) {
                 GeckoAppShell.getHandler().post(new Runnable() {
+                    @Override
                     public void run() {
                         try {
                             URL url = new URL(info.icon);
                             InputStream is = (InputStream) url.getContent();
                             try {
                                 Drawable drawable = Drawable.createFromStream(is, "src");
                                 item.setIcon(drawable);
                             } finally {
@@ -986,25 +1006,26 @@ abstract public class BrowserApp extends
     @Override
     public void closeOptionsMenu() {
         if (!mBrowserToolbar.closeOptionsMenu())
             super.closeOptionsMenu();
     }
 
     @Override
     public void setFullScreen(final boolean fullscreen) {
-      super.setFullScreen(fullscreen);
-      mMainHandler.post(new Runnable() {
-          public void run() {
-              if (fullscreen)
-                  mBrowserToolbar.hide();
-              else
-                  mBrowserToolbar.show();
-          }
-      });
+        super.setFullScreen(fullscreen);
+        mMainHandler.post(new Runnable() {
+            @Override
+            public void run() {
+                if (fullscreen)
+                    mBrowserToolbar.hide();
+                else
+                    mBrowserToolbar.show();
+            }
+        });
     }
 
     @Override
     public boolean onPrepareOptionsMenu(Menu aMenu) {
         if (aMenu == null)
             return false;
 
         if (!GeckoThread.checkLaunchState(GeckoThread.LaunchState.GeckoRunning))
--- a/mobile/android/base/BrowserToolbar.java
+++ b/mobile/android/base/BrowserToolbar.java
@@ -122,16 +122,17 @@ public class BrowserToolbar implements V
 
     public void from(LinearLayout layout) {
         if (mLayout != null) {
             // make sure we retain the visibility property on rotation
             layout.setVisibility(mLayout.getVisibility());
         }
         mLayout = layout;
         mLayout.setOnClickListener(new View.OnClickListener() {
+            @Override
             public void onClick(View v) {
             }
         });
 
         mShowSiteSecurity = false;
         mShowReader = false;
 
         mAddressBarBg = (BrowserToolbarBackground) mLayout.findViewById(R.id.address_bar_bg);
@@ -148,22 +149,24 @@ public class BrowserToolbar implements V
 
         mTitle = (GeckoTextView) mLayout.findViewById(R.id.awesome_bar_title);
         mTitlePadding = mTitle.getPaddingRight();
         if (Build.VERSION.SDK_INT >= 16)
             mTitle.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
 
         mAwesomeBar = mLayout.findViewById(R.id.awesome_bar);
         mAwesomeBar.setOnClickListener(new Button.OnClickListener() {
+            @Override
             public void onClick(View v) {
                 mActivity.autoHideTabs();
                 onAwesomeBarSearch();
             }
         });
         mAwesomeBar.setOnCreateContextMenuListener(new View.OnCreateContextMenuListener() {
+            @Override
             public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
                 MenuInflater inflater = mActivity.getMenuInflater();
                 inflater.inflate(R.menu.titlebar_contextmenu, menu);
 
                 String clipboard = GeckoAppShell.getClipboardText();
                 if (clipboard == null || TextUtils.isEmpty(clipboard)) {
                     menu.findItem(R.id.pasteandgo).setVisible(false);
                     menu.findItem(R.id.paste).setVisible(false);
@@ -183,16 +186,17 @@ public class BrowserToolbar implements V
                     menu.findItem(R.id.share).setVisible(false);
                     menu.findItem(R.id.add_to_launcher).setVisible(false);
                 }
             }
         });
 
         mTabs = (TabsButton) mLayout.findViewById(R.id.tabs);
         mTabs.setOnClickListener(new Button.OnClickListener() {
+            @Override
             public void onClick(View v) {
                 toggleTabs();
             }
         });
         mTabs.setImageLevel(0);
 
         mTabsCount = (GeckoTextSwitcher) mLayout.findViewById(R.id.tabs_count);
         mTabsCount.removeAllViews();
@@ -208,40 +212,45 @@ public class BrowserToolbar implements V
             mTabsCount.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_YES);
             mTabsCount.setAccessibilityDelegate(new View.AccessibilityDelegate() {
                     public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfo info) {}
                 });
         }
 
         mBack = (ImageButton) mLayout.findViewById(R.id.back);
         mBack.setOnClickListener(new Button.OnClickListener() {
+            @Override
             public void onClick(View view) {
                 Tabs.getInstance().getSelectedTab().doBack();
             }
         });
         mBack.setOnLongClickListener(new Button.OnLongClickListener() {
+            @Override
             public boolean onLongClick(View view) {
                 return Tabs.getInstance().getSelectedTab().showBackHistory();
             }
         });
 
         mForward = (ImageButton) mLayout.findViewById(R.id.forward);
         mForward.setEnabled(false); // initialize the forward button to not be enabled
         mForward.setOnClickListener(new Button.OnClickListener() {
+            @Override
             public void onClick(View view) {
                 Tabs.getInstance().getSelectedTab().doForward();
             }
         });
         mForward.setOnLongClickListener(new Button.OnLongClickListener() {
+            @Override
             public boolean onLongClick(View view) {
                 return Tabs.getInstance().getSelectedTab().showForwardHistory();
             }
         });
 
         Button.OnClickListener faviconListener = new Button.OnClickListener() {
+            @Override
             public void onClick(View view) {
                 if (mSiteSecurity.getVisibility() != View.VISIBLE)
                     return;
 
                 SiteIdentityPopup.getInstance().show(mSiteSecurity);
             }
         };
 
@@ -254,26 +263,28 @@ public class BrowserToolbar implements V
         mSiteSecurity = (ImageButton) mLayout.findViewById(R.id.site_security);
         mSiteSecurity.setOnClickListener(faviconListener);
         mSiteSecurityVisible = (mSiteSecurity.getVisibility() == View.VISIBLE);
 
         mProgressSpinner = (AnimationDrawable) mActivity.getResources().getDrawable(R.drawable.progress_spinner);
         
         mStop = (ImageButton) mLayout.findViewById(R.id.stop);
         mStop.setOnClickListener(new Button.OnClickListener() {
+            @Override
             public void onClick(View v) {
                 Tab tab = Tabs.getInstance().getSelectedTab();
                 if (tab != null)
                     tab.doStop();
                 setProgressVisibility(false);
             }
         });
 
         mReader = (ImageButton) mLayout.findViewById(R.id.reader);
         mReader.setOnClickListener(new Button.OnClickListener() {
+            @Override
             public void onClick(View view) {
                 Tab tab = Tabs.getInstance().getSelectedTab();
                 if (tab != null)
                     tab.readerMode();
             }
         });
 
         mShadow = (ImageView) mLayout.findViewById(R.id.shadow);
@@ -312,16 +323,17 @@ public class BrowserToolbar implements V
 
         mMenu = (GeckoImageButton) mLayout.findViewById(R.id.menu);
         mActionItemBar = (LinearLayout) mLayout.findViewById(R.id.menu_items);
         mHasSoftMenuButton = !mActivity.hasPermanentMenuKey();
 
         if (mHasSoftMenuButton) {
             mMenu.setVisibility(View.VISIBLE);
             mMenu.setOnClickListener(new Button.OnClickListener() {
+                @Override
                 public void onClick(View view) {
                     mActivity.openOptionsMenu();
                 }
             });
 
             // Set a touch delegate to Tabs button, so the touch events on its tail
             // are passed to the menu button.
             mLayout.post(new Runnable() {
@@ -348,16 +360,17 @@ public class BrowserToolbar implements V
                 mActivity.onCreatePanelMenu(Window.FEATURE_OPTIONS_PANEL, null);
                 panel = mActivity.getMenuPanel();
 
                 if (mHasSoftMenuButton) {
                     mMenuPopup = new MenuPopup(mActivity);
                     mMenuPopup.setPanelView(panel);
 
                     mMenuPopup.setOnDismissListener(new PopupWindow.OnDismissListener() {
+                        @Override
                         public void onDismiss() {
                             mActivity.onOptionsMenuClosed(null);
                         }
                     });
                 }
             }
         }
 
@@ -370,16 +383,17 @@ public class BrowserToolbar implements V
 
     public void refreshBackground() {
         mAddressBarBg.requestLayout();
 
         if (mAwesomeBarRightEdge != null)
             mAwesomeBarRightEdge.requestLayout();
     }
 
+    @Override
     public void onTabChanged(Tab tab, Tabs.TabEvents msg, Object data) {
         switch(msg) {
             case TITLE:
                 if (Tabs.getInstance().isSelectedTab(tab)) {
                     setTitle(tab.getDisplayTitle());
                 }
                 break;
             case START:
@@ -625,16 +639,17 @@ public class BrowserToolbar implements V
                                        PropertyAnimator.Property.ALPHA,
                                        1);
 
                 buttonsAnimator.start();
             }
         });
 
         mHandler.postDelayed(new Runnable() {
+            @Override
             public void run() {
                 contentAnimator.start();
             }
         }, 500);
     }
 
     private void onAwesomeBarSearch() {
         // This animation doesn't make much sense in a sidebar UI
@@ -743,23 +758,25 @@ public class BrowserToolbar implements V
         }
 
         mTabsCount.setText(String.valueOf(count));
         mTabs.setContentDescription((count > 1) ?
                                     mActivity.getString(R.string.num_tabs, count) :
                                     mActivity.getString(R.string.one_tab));
         mCount = count;
         mHandler.postDelayed(new Runnable() {
+            @Override
             public void run() {
                 GeckoTextView view = (GeckoTextView) mTabsCount.getCurrentView();
                 view.setSelected(true);
             }
         }, mDuration);
 
         mHandler.postDelayed(new Runnable() {
+            @Override
             public void run() {
                 GeckoTextView view = (GeckoTextView) mTabsCount.getCurrentView();
                 view.setSelected(false);
             }
         }, 2 * mDuration);
     }
 
     public void updateTabCount(int count) {
--- a/mobile/android/base/CameraImageResultHandler.java
+++ b/mobile/android/base/CameraImageResultHandler.java
@@ -19,16 +19,17 @@ class CameraImageResultHandler implement
     private static final String LOGTAG = "GeckoCameraImageResultHandler";
 
     private final SynchronousQueue<String> mFilePickerResult;
 
     CameraImageResultHandler(SynchronousQueue<String> resultQueue) {
         mFilePickerResult = resultQueue;
     }
 
+    @Override
     public void onActivityResult(int resultCode, Intent data) {
         try {
             if (resultCode != Activity.RESULT_OK) {
                 mFilePickerResult.put("");
                 return;
             }
 
             File file = new File(Environment.getExternalStorageDirectory(), sImageName);
--- a/mobile/android/base/CameraVideoResultHandler.java
+++ b/mobile/android/base/CameraVideoResultHandler.java
@@ -18,16 +18,17 @@ class CameraVideoResultHandler implement
     private static final String LOGTAG = "GeckoCameraVideoResultHandler";
 
     private final SynchronousQueue<String> mFilePickerResult;
 
     CameraVideoResultHandler(SynchronousQueue<String> resultQueue) {
         mFilePickerResult = resultQueue;
     }
 
+    @Override
     public void onActivityResult(int resultCode, Intent data) {
         try {
             if (data == null || resultCode != Activity.RESULT_OK) {
                 mFilePickerResult.put("");
                 return;
             }
 
             Cursor cursor = GeckoApp.mAppContext.managedQuery(data.getData(),
--- a/mobile/android/base/CheckableLinearLayout.java
+++ b/mobile/android/base/CheckableLinearLayout.java
@@ -10,25 +10,28 @@ import android.widget.LinearLayout;
 public class CheckableLinearLayout extends LinearLayout implements Checkable {
 
     private CheckBox mCheckBox;
 
     public CheckableLinearLayout(Context context, AttributeSet attrs) {
         super(context, attrs);
     }
 
+    @Override
     public boolean isChecked() {
         return mCheckBox != null ? mCheckBox.isChecked() : false;
     }
 
+    @Override
     public void setChecked(boolean isChecked) {
         if (mCheckBox != null)
             mCheckBox.setChecked(isChecked);
     }
 
+    @Override
     public void toggle() {
         if (mCheckBox != null)
             mCheckBox.toggle();
     }
 
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
--- a/mobile/android/base/CrashReporter.java.in
+++ b/mobile/android/base/CrashReporter.java.in
@@ -79,16 +79,17 @@ public class CrashReporter extends Activ
             return false;
         }
         return true;
     }
 
     private void doFinish() {
         if (mHandler != null) {
             mHandler.post(new Runnable() {
+                @Override
                 public void run() {
                     finish();
                 }
             });
         }
     }
 
     @Override
@@ -142,16 +143,17 @@ public class CrashReporter extends Activ
         final CheckBox sendReportCheckbox = (CheckBox) findViewById(R.id.send_report);
         if (!sendReportCheckbox.isChecked()) {
             doFinish();
             return;
         }
 
         mProgressDialog.show();
         new Thread(new Runnable() {
+            @Override
             public void run() {
                 sendReport(mPendingMinidumpFile, mExtrasStringMap, mPendingExtrasFile);
             }
         }, "CrashReporter Thread").start();
     }
 
     public void onCloseClick(View v) {  // bound via crash_reporter.xml
         backgroundSendReport();
--- a/mobile/android/base/Distribution.java
+++ b/mobile/android/base/Distribution.java
@@ -42,16 +42,17 @@ public final class Distribution {
     /**
      * Initializes distribution if it hasn't already been initalized.
      *
      * @param packagePath specifies where to look for the distribution directory.
      */
     public static void init(final Context context, final String packagePath) {
         // Read/write preferences and files on the background thread.
         GeckoBackgroundThread.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 // Bail if we've already initialized the distribution.
                 SharedPreferences settings = context.getSharedPreferences(GeckoApp.PREFS_NAME, Activity.MODE_PRIVATE);
                 String keyName = context.getPackageName() + ".distribution_state";
                 int state = settings.getInt(keyName, STATE_UNKNOWN);
                 if (state == STATE_NONE) {
                     return;
                 }
--- a/mobile/android/base/DoorHanger.java
+++ b/mobile/android/base/DoorHanger.java
@@ -101,16 +101,17 @@ public class DoorHanger extends LinearLa
 
         Button mButton = new Button(mActivity);
         mButton.setText(aText);
         mButton.setTag(Integer.toString(aCallback));
         mButton.setOnClickListener(this);
         mChoicesLayout.addView(mButton, mLayoutParams);
     }
 
+    @Override
     public void onClick(View v) {
         JSONObject response = new JSONObject();
         try {
             response.put("callback", v.getTag().toString());
 
             // If the checkbox is being used, pass its value
             if (mCheckBox != null)
                 response.put("checked", mCheckBox.isChecked());
--- a/mobile/android/base/DoorHangerPopup.java
+++ b/mobile/android/base/DoorHangerPopup.java
@@ -58,51 +58,55 @@ public class DoorHangerPopup extends Pop
         unregisterEventListener("Doorhanger:Remove");
         Tabs.unregisterOnTabsChangedListener(this);
     }
 
     void setAnchor(View aAnchor) {
         mAnchor = aAnchor;
     }
 
+    @Override
     public void handleMessage(String event, JSONObject geckoObject) {
         try {
             if (event.equals("Doorhanger:Add")) {
                 final int tabId = geckoObject.getInt("tabID");
                 final String value = geckoObject.getString("value");
                 final String message = geckoObject.getString("message");
                 final JSONArray buttons = geckoObject.getJSONArray("buttons");
                 final JSONObject options = geckoObject.getJSONObject("options");
 
                 mActivity.runOnUiThread(new Runnable() {
+                    @Override
                     public void run() {
                         addDoorHanger(tabId, value, message, buttons, options);
                     }
                 });
             } else if (event.equals("Doorhanger:Remove")) {
                 final int tabId = geckoObject.getInt("tabID");
                 final String value = geckoObject.getString("value");
 
                 mActivity.runOnUiThread(new Runnable() {
+                    @Override
                     public void run() {
                         DoorHanger doorHanger = getDoorHanger(tabId, value);
                         if (doorHanger == null)
                             return;
 
                         removeDoorHanger(doorHanger);
                         updatePopup();
                     }
                 });
             }
         } catch (Exception e) {
             Log.e(LOGTAG, "Exception handling message \"" + event + "\":", e);
         }
     }
 
     // This callback is automatically executed on the UI thread.
+    @Override
     public void onTabChanged(final Tab tab, final Tabs.TabEvents msg, final Object data) {
         switch(msg) {
             case CLOSED:
                 // Remove any doorhangers for a tab when it's closed (make
                 // a temporary set to avoid a ConcurrentModificationException)
                 HashSet<DoorHanger> doorHangersToRemove = new HashSet<DoorHanger>();
                 for (DoorHanger dh : mDoorHangers) {
                     if (dh.getTabId() == tab.getId())
--- a/mobile/android/base/Favicons.java
+++ b/mobile/android/base/Favicons.java
@@ -80,16 +80,17 @@ public class Favicons {
 
     private void dispatchResult(final String pageUrl, final Bitmap image,
             final OnFaviconLoadedListener listener) {
         if (pageUrl != null && image != null)
             putFaviconInMemCache(pageUrl, image);
 
         // We want to always run the listener on UI thread
         GeckoAppShell.getMainHandler().post(new Runnable() {
+            @Override
             public void run() {
                 if (listener != null)
                     listener.onFaviconLoaded(pageUrl, image);
             }
         });
     }
 
     public String getFaviconUrlForPageUrl(String pageUrl) {
--- a/mobile/android/base/FilePickerResultHandlerSync.java
+++ b/mobile/android/base/FilePickerResultHandlerSync.java
@@ -11,16 +11,17 @@ import java.util.concurrent.SynchronousQ
 
 class FilePickerResultHandlerSync extends FilePickerResultHandler {
     private static final String LOGTAG = "GeckoFilePickerResultHandlerSync";
 
     FilePickerResultHandlerSync(SynchronousQueue<String> resultQueue) {
         super(resultQueue);
     }
 
+    @Override
     public void onActivityResult(int resultCode, Intent data) {
         try {
             mFilePickerResult.put(handleActivityResult(resultCode, data));
         } catch (InterruptedException e) {
             Log.i(LOGTAG, "error returning file picker result", e);
         }
     }
 }
--- a/mobile/android/base/FindInPageBar.java
+++ b/mobile/android/base/FindInPageBar.java
@@ -37,16 +37,17 @@ public class FindInPageBar extends Relat
 
         // Capture clicks on the rest of the view to prevent them from
         // leaking into other views positioned below.
         content.setOnClickListener(this);
 
         mFindText = (CustomEditText) content.findViewById(R.id.find_text);
         mFindText.addTextChangedListener(this);
         mFindText.setOnKeyPreImeListener(new CustomEditText.OnKeyPreImeListener() {
+            @Override
             public boolean onKeyPreIme(View v, int keyCode, KeyEvent event) {
                 if (keyCode == KeyEvent.KEYCODE_BACK) {
                     hide();
                     return true;
                 }
                 return false;
             }
         });
@@ -62,17 +63,18 @@ public class FindInPageBar extends Relat
         mFindText.requestFocus();
 
         // Show the virtual keyboard.
         if (mFindText.hasWindowFocus()) {
             getInputMethodManager(mFindText).showSoftInput(mFindText, 0);
         } else {
             // showSoftInput won't work until after the window is focused.
             mFindText.setOnWindowFocusChangeListener(new CustomEditText.OnWindowFocusChangeListener() {
-               public void onWindowFocusChanged(boolean hasFocus) {
+                @Override
+                public void onWindowFocusChanged(boolean hasFocus) {
                    if (!hasFocus)
                        return;
                    mFindText.setOnWindowFocusChangeListener(null);
                    getInputMethodManager(mFindText).showSoftInput(mFindText, 0);
                }
             });
         }
     }
@@ -85,30 +87,34 @@ public class FindInPageBar extends Relat
 
     private InputMethodManager getInputMethodManager(View view) {
         Context context = view.getContext();
         return (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
      }
 
     // TextWatcher implementation
 
+    @Override
     public void afterTextChanged(Editable s) {
         GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("FindInPage:Find", s.toString()));
     }
 
+    @Override
     public void beforeTextChanged(CharSequence s, int start, int count, int after) {
         // ignore
     }
 
+    @Override
     public void onTextChanged(CharSequence s, int start, int before, int count) {
         // ignore
     }
 
     // View.OnClickListener implementation
 
+    @Override
     public void onClick(View v) {
         switch (v.getId()) {
             case R.id.find_prev:
                 GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("FindInPage:Prev", mFindText.getText().toString()));
                 getInputMethodManager(mFindText).hideSoftInputFromWindow(mFindText.getWindowToken(), 0);
                 break;
             case R.id.find_next:
                 GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("FindInPage:Next", mFindText.getText().toString()));
--- a/mobile/android/base/FontSizePreference.java
+++ b/mobile/android/base/FontSizePreference.java
@@ -75,27 +75,29 @@ class FontSizePreference extends DialogP
         // Background cannot be set in XML (see bug 783597 - TODO: Change this to XML when bug is fixed).
         mScrollingContainer.setBackgroundColor(Color.WHITE);
         mPreviewFontView = (TextView) dialogView.findViewById(R.id.preview);
 
         mDecreaseFontButton = (Button) dialogView.findViewById(R.id.decrease_preview_font_button);
         mIncreaseFontButton = (Button) dialogView.findViewById(R.id.increase_preview_font_button);
         setButtonState(mPreviewFontIndex);
         mDecreaseFontButton.setOnClickListener(new View.OnClickListener() {
+            @Override
             public void onClick(View v) {
                 mPreviewFontIndex = Math.max(mPreviewFontIndex - 1, 0);
                 updatePreviewFontSize(mFontTwipValues[mPreviewFontIndex]);
                 mIncreaseFontButton.setEnabled(true);
                 // If we reached the minimum index, disable the button.
                 if (mPreviewFontIndex == 0) {
                     mDecreaseFontButton.setEnabled(false);
                 }
             }
         });
         mIncreaseFontButton.setOnClickListener(new View.OnClickListener() {
+            @Override
             public void onClick(View v) {
                 mPreviewFontIndex = Math.min(mPreviewFontIndex + 1, mFontTwipValues.length - 1);
                 updatePreviewFontSize(mFontTwipValues[mPreviewFontIndex]);
 
                 mDecreaseFontButton.setEnabled(true);
                 // If we reached the maximum index, disable the button.
                 if (mPreviewFontIndex == mFontTwipValues.length - 1) {
                     mIncreaseFontButton.setEnabled(false);
--- a/mobile/android/base/FormAssistPopup.java
+++ b/mobile/android/base/FormAssistPopup.java
@@ -77,16 +77,17 @@ public class FormAssistPopup extends Rel
     }
 
     void destroy() {
         unregisterEventListener("FormAssist:AutoComplete");
         unregisterEventListener("FormAssist:ValidationMessage");
         unregisterEventListener("FormAssist:Hide");
     }
 
+    @Override
     public void handleMessage(String event, JSONObject message) {
         try {
             if (event.equals("FormAssist:AutoComplete")) {
                 handleAutoCompleteMessage(message);
             } else if (event.equals("FormAssist:ValidationMessage")) {
                 handleValidationMessage(message);
             } else if (event.equals("FormAssist:Hide")) {
                 handleHideMessage(message);
@@ -96,47 +97,51 @@ public class FormAssistPopup extends Rel
         }
     }
 
     private void handleAutoCompleteMessage(JSONObject message) throws JSONException  {
         final JSONArray suggestions = message.getJSONArray("suggestions");
         final JSONArray rect = message.getJSONArray("rect");
         final double zoom = message.getDouble("zoom");
         GeckoApp.mAppContext.mMainHandler.post(new Runnable() {
+            @Override
             public void run() {
                 showAutoCompleteSuggestions(suggestions, rect, zoom);
             }
         });
     }
 
     private void handleValidationMessage(JSONObject message) throws JSONException {
         final String validationMessage = message.getString("validationMessage");
         final JSONArray rect = message.getJSONArray("rect");
         final double zoom = message.getDouble("zoom");
         GeckoApp.mAppContext.mMainHandler.post(new Runnable() {
+            @Override
             public void run() {
                 showValidationMessage(validationMessage, rect, zoom);
             }
         });
     }
     
     private void handleHideMessage(JSONObject message) {
         GeckoApp.mAppContext.mMainHandler.post(new Runnable() {
+            @Override
             public void run() {
                 hide();
             }
         });
     }
 
     private void showAutoCompleteSuggestions(JSONArray suggestions, JSONArray rect, double zoom) {
         if (mAutoCompleteList == null) {
             LayoutInflater inflater = LayoutInflater.from(mContext);
             mAutoCompleteList = (ListView) inflater.inflate(R.layout.autocomplete_list, null);
 
             mAutoCompleteList.setOnItemClickListener(new OnItemClickListener() {
+                @Override
                 public void onItemClick(AdapterView<?> parentView, View view, int position, long id) {
                     // Use the value stored with the autocomplete view, not the label text,
                     // since they can be different.
                     TextView textView = (TextView) view;
                     String value = (String) textView.getTag();
                     broadcastGeckoEvent("FormAssist:AutoComplete", value);
                     hide();
                 }
--- a/mobile/android/base/GeckoAccessibility.java
+++ b/mobile/android/base/GeckoAccessibility.java
@@ -38,16 +38,17 @@ public class GeckoAccessibility {
                     "com.google.android.marvin.talkback.TalkBackService", // Google Talkback screen reader
                     "com.mot.readout.ScreenReader", // Motorola screen reader
                     "info.spielproject.spiel.SpielService", // Spiel screen reader
                     "es.codefactory.android.app.ma.MAAccessibilityService" // Codefactory Mobile Accessibility screen reader
                 }));
 
     public static void updateAccessibilitySettings () {
         GeckoAppShell.getHandler().post(new Runnable() {
+                @Override
                 public void run() {
                     JSONObject ret = new JSONObject();
                     sEnabled = false;
                     AccessibilityManager accessibilityManager =
                         (AccessibilityManager) GeckoApp.mAppContext.getSystemService(Context.ACCESSIBILITY_SERVICE);
                     if (accessibilityManager.isEnabled()) {
                         ActivityManager activityManager =
                             (ActivityManager) GeckoApp.mAppContext.getSystemService(Context.ACTIVITY_SERVICE);
@@ -124,16 +125,17 @@ public class GeckoAccessibility {
             Log.e(LOGTAG, "No accessibility event type provided");
             return;
         }
 
         if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN) {
             // Before Jelly Bean we send events directly from here while spoofing the source by setting
             // the package and class name manually.
             GeckoAppShell.getHandler().post(new Runnable() {
+                    @Override
                     public void run() {
                         sendDirectAccessibilityEvent(eventType, message);
                 }
             });
         } else {
             // In Jelly Bean we populate an AccessibilityNodeInfo with the minimal amount of data to have
             // it work with TalkBack.
             final LayerView view = GeckoApp.mAppContext.getLayerView();
@@ -155,16 +157,17 @@ public class GeckoAccessibility {
                 Rect screenBounds = new Rect(relativeBounds);
                 screenBounds.offset(locationOnScreen[0], locationOnScreen[1]);
                 sVirtualCursorNode.setBoundsInScreen(screenBounds);
             }
 
             // Store the JSON message and use it to populate the event later in the code path.
             sEventMessage = message;
             GeckoApp.mAppContext.mMainHandler.post(new Runnable() {
+                    @Override
                     public void run() {
                         // If this is an accessibility focus, a lot of internal voodoo happens so we perform an
                         // accessibility focus action on the view, and it in turn sends the right events.
                         switch (eventType) {
                         case AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED:
                             view.performAccessibilityAction(AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
                             break;
                         case AccessibilityEvent.TYPE_ANNOUNCEMENT:
--- a/mobile/android/base/GeckoActivity.java.in
+++ b/mobile/android/base/GeckoActivity.java.in
@@ -73,16 +73,17 @@ public class GeckoActivity extends Activ
         mGeckoActivityOpened = false;
         if (component != null &&
             component.getPackageName() != null &&
             component.getPackageName().equals("@ANDROID_PACKAGE_NAME@")) {
             mGeckoActivityOpened = true;
         }
     }
 
+    @Override
     public boolean isGeckoActivityOpened() {
         return mGeckoActivityOpened;
     }
 
     public boolean isApplicationInBackground() {
         return ((GeckoApplication) getApplication()).isApplicationInBackground();
     }
 
--- a/mobile/android/base/GeckoApp.java
+++ b/mobile/android/base/GeckoApp.java
@@ -192,16 +192,17 @@ abstract public class GeckoApp
     abstract public int getLayout();
     abstract public boolean hasTabsSideBar();
     abstract protected String getDefaultProfileName();
 
     void toggleChrome(final boolean aShow) { }
 
     void focusChrome() { }
 
+    @Override
     public void onTabChanged(Tab tab, Tabs.TabEvents msg, Object data) {
         // When a tab is closed, it is always unselected first.
         // When a tab is unselected, another tab is always selected first.
         switch(msg) {
             case UNSELECTED:
                 hidePlugins(tab);
                 break;
 
@@ -733,16 +734,17 @@ abstract public class GeckoApp
             hasMenu = false;
 
         if (Build.VERSION.SDK_INT >= 14)
             hasMenu = ViewConfiguration.get(GeckoApp.mAppContext).hasPermanentMenuKey();
 
         return hasMenu;
     }
 
+    @Override
     public void handleMessage(String event, JSONObject message) {
         try {
             if (event.equals("Toast:Show")) {
                 final String msg = message.getString("message");
                 final String duration = message.getString("duration");
                 handleShowToast(msg, duration);
             } else if (event.equals("log")) {
                 // generic log listener
@@ -790,19 +792,21 @@ abstract public class GeckoApp
                     layerView.setZoomConstraints(tab.getZoomConstraints());
                 }
             } else if (event.equals("Session:StatePurged")) {
                 onStatePurged();
             } else if (event.equals("Bookmark:Insert")) {
                 final String url = message.getString("url");
                 final String title = message.getString("title");
                 mMainHandler.post(new Runnable() {
+                    @Override
                     public void run() {
                         Toast.makeText(GeckoApp.mAppContext, R.string.bookmark_added, Toast.LENGTH_SHORT).show();
                         GeckoAppShell.getHandler().post(new Runnable() {
+                            @Override
                             public void run() {
                                 BrowserDB.addBookmark(GeckoApp.mAppContext.getContentResolver(), title, url);
                             }
                         });
                     }
                 });
             } else if (event.equals("Accessibility:Event")) {
                 GeckoAccessibility.sendAccessibilityEvent(message);
@@ -854,16 +858,17 @@ abstract public class GeckoApp
                     mPrivateBrowsingSession = message.getString("session");
                 }
             }
         } catch (Exception e) {
             Log.e(LOGTAG, "Exception handling message \"" + event + "\":", e);
         }
     }
 
+    @Override
     public String getResponse() {
         String res = mCurrentResponse;
         mCurrentResponse = "";
         return res;
     }
 
     void onStatePurged() { }
 
@@ -903,20 +908,22 @@ abstract public class GeckoApp
             // setSingleChoiceItems and changing the choiceMode below when we create the dialog
             builder.setSingleChoiceItems(new SimpleAdapter(
                 GeckoApp.this,
                 itemList,
                 R.layout.site_setting_item,
                 new String[] { "setting", "value" },
                 new int[] { R.id.setting, R.id.value }
                 ), -1, new DialogInterface.OnClickListener() {
+                    @Override
                     public void onClick(DialogInterface dialog, int id) { }
                 });
 
             builder.setPositiveButton(R.string.site_settings_clear, new DialogInterface.OnClickListener() {
+                @Override
                 public void onClick(DialogInterface dialog, int id) {
                     ListView listView = ((AlertDialog) dialog).getListView();
                     SparseBooleanArray checkedItemPositions = listView.getCheckedItemPositions();
 
                     // An array of the indices of the permissions we want to clear
                     JSONArray permissionsToClear = new JSONArray();
                     for (int i = 0; i < checkedItemPositions.size(); i++)
                         if (checkedItemPositions.get(i))
@@ -924,22 +931,24 @@ abstract public class GeckoApp
 
                     GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent(
                         "Permissions:Clear", permissionsToClear.toString()));
                 }
             });
         }
 
         builder.setNegativeButton(R.string.site_settings_cancel, new DialogInterface.OnClickListener(){
+            @Override
             public void onClick(DialogInterface dialog, int id) {
                 dialog.cancel();
             }
         });
 
         mMainHandler.post(new Runnable() {
+            @Override
             public void run() {
                 Dialog dialog = builder.create();
                 dialog.show();
 
                 ListView listView = ((AlertDialog) dialog).getListView();
                 if (listView != null) {
                     listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
                     int listSize = listView.getAdapter().getCount();
@@ -947,24 +956,26 @@ abstract public class GeckoApp
                         listView.setItemChecked(i, true);
                 }
             }
         });
     }
 
     public void showToast(final int resId, final int duration) {
         mMainHandler.post(new Runnable() {
+            @Override
             public void run() {
                 Toast.makeText(mAppContext, resId, duration).show();
             }
         });
     }
 
     void handleShowToast(final String message, final String duration) {
         mMainHandler.post(new Runnable() {
+            @Override
             public void run() {
                 Toast toast;
                 if (duration.equals("long"))
                     toast = Toast.makeText(mAppContext, message, Toast.LENGTH_LONG);
                 else
                     toast = Toast.makeText(mAppContext, message, Toast.LENGTH_SHORT);
                 toast.show();
             }
@@ -996,16 +1007,17 @@ abstract public class GeckoApp
         FrameLayout decor = (FrameLayout)getWindow().getDecorView();
         decor.addView(mFullScreenPluginContainer, layoutParams);
 
         mFullScreenPluginView = view;
     }
 
     void addPluginView(final View view, final Rect rect, final boolean isFullScreen) {
         mMainHandler.post(new Runnable() { 
+            @Override
             public void run() {
                 Tabs tabs = Tabs.getInstance();
                 Tab tab = tabs.getSelectedTab();
 
                 if (isFullScreen) {
                     addFullScreenPluginView(view);
                     return;
                 }
@@ -1035,32 +1047,34 @@ abstract public class GeckoApp
             return;
         }
 
         mFullScreenPluginContainer.removeView(mFullScreenPluginView);
 
         // We need do do this on the next iteration in order to avoid
         // a deadlock, see comment below in FullScreenHolder
         mMainHandler.post(new Runnable() {
+            @Override
             public void run() {
                 mLayerView.show();
             }
         });
 
         FrameLayout decor = (FrameLayout)getWindow().getDecorView();
         decor.removeView(mFullScreenPluginContainer);
 
         mFullScreenPluginView = null;
 
         GeckoScreenOrientationListener.getInstance().unlockScreenOrientation();
         setFullScreen(false);
     }
 
     void removePluginView(final View view, final boolean isFullScreen) {
         mMainHandler.post(new Runnable() { 
+            @Override
             public void run() {
                 Tabs tabs = Tabs.getInstance();
                 Tab tab = tabs.getSelectedTab();
 
                 if (isFullScreen) {
                     removeFullScreenPluginView(view);
                     return;
                 }
@@ -1274,16 +1288,17 @@ abstract public class GeckoApp
             }
         }
 
         requestRender();
     }
 
     public void setFullScreen(final boolean fullscreen) {
         mMainHandler.post(new Runnable() { 
+            @Override
             public void run() {
                 // Hide/show the system notification bar
                 Window window = getWindow();
                 window.setFlags(fullscreen ?
                                 WindowManager.LayoutParams.FLAG_FULLSCREEN : 0,
                                 WindowManager.LayoutParams.FLAG_FULLSCREEN);
 
                 if (Build.VERSION.SDK_INT >= 11)
@@ -1399,16 +1414,17 @@ abstract public class GeckoApp
             if (!wasInBackground && !mIsRestoringActivity) {
                 Telemetry.HistogramAdd("FENNEC_WAS_KILLED", 1);
             }
 
             mPrivateBrowsingSession = savedInstanceState.getString(SAVED_STATE_PRIVATE_SESSION);
         }
 
         GeckoBackgroundThread.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 SharedPreferences prefs =
                     GeckoApp.mAppContext.getSharedPreferences(PREFS_NAME, 0);
 
                 boolean wasOOM = prefs.getBoolean(PREFS_OOM_EXCEPTION, false);
                 boolean wasStopped = prefs.getBoolean(PREFS_WAS_STOPPED, true);
                 if (wasOOM || !wasStopped) {
                     Telemetry.HistogramAdd("FENNEC_WAS_KILLED", 1);
@@ -1596,16 +1612,17 @@ abstract public class GeckoApp
             sGeckoThread = new GeckoThread(intent, passedUri);
         }
         if (!ACTION_DEBUG.equals(action) &&
             GeckoThread.checkAndSetLaunchState(GeckoThread.LaunchState.Launching, GeckoThread.LaunchState.Launched)) {
             sGeckoThread.start();
         } else if (ACTION_DEBUG.equals(action) &&
             GeckoThread.checkAndSetLaunchState(GeckoThread.LaunchState.Launching, GeckoThread.LaunchState.WaitForDebugger)) {
             mMainHandler.postDelayed(new Runnable() {
+                @Override
                 public void run() {
                     GeckoThread.setLaunchState(GeckoThread.LaunchState.Launching);
                     sGeckoThread.start();
                 }
             }, 1000 * 5 /* 5 seconds */);
         }
 
         //register for events
@@ -1662,16 +1679,17 @@ abstract public class GeckoApp
         });
 
         final GeckoApp self = this;
 
         // End of the startup of our Java App
         mJavaUiStartupTimer.stop();
 
         GeckoAppShell.getHandler().postDelayed(new Runnable() {
+            @Override
             public void run() {
                 // Sync settings need Gecko to be loaded, so
                 // no hurry in starting this.
                 checkMigrateSync();
 
                 // Record our launch time for the announcements service
                 // to use in assessing inactivity.
                 final Context context = GeckoApp.mAppContext;
@@ -1905,16 +1923,17 @@ abstract public class GeckoApp
         }
 
         GeckoScreenOrientationListener.getInstance().start();
 
         // User may have enabled/disabled accessibility.
         GeckoAccessibility.updateAccessibilitySettings();
 
         GeckoBackgroundThread.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 SharedPreferences prefs =
                     GeckoApp.mAppContext.getSharedPreferences(GeckoApp.PREFS_NAME, 0);
                 SharedPreferences.Editor editor = prefs.edit();
                 editor.putBoolean(GeckoApp.PREFS_WAS_STOPPED, false);
                 editor.commit();
             }
          });
@@ -1950,16 +1969,17 @@ abstract public class GeckoApp
 
     @Override
     public void onPause()
     {
         // In some way it's sad that Android will trigger StrictMode warnings
         // here as the whole point is to save to disk while the activity is not
         // interacting with the user.
         GeckoBackgroundThread.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 SharedPreferences prefs =
                     GeckoApp.mAppContext.getSharedPreferences(GeckoApp.PREFS_NAME, 0);
                 SharedPreferences.Editor editor = prefs.edit();
                 editor.putBoolean(GeckoApp.PREFS_WAS_STOPPED, true);
                 editor.commit();
 
                 BrowserDB.expireHistory(getContentResolver(),
@@ -1971,16 +1991,17 @@ abstract public class GeckoApp
 
         super.onPause();
     }
 
     @Override
     public void onRestart()
     {
         GeckoBackgroundThread.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 SharedPreferences prefs =
                     GeckoApp.mAppContext.getSharedPreferences(GeckoApp.PREFS_NAME, 0);
                 SharedPreferences.Editor editor = prefs.edit();
                 editor.putBoolean(GeckoApp.PREFS_WAS_STOPPED, false);
                 editor.commit();
             }
         });
@@ -2164,16 +2185,17 @@ abstract public class GeckoApp
 
     private void checkMigrateProfile() {
         final File profileDir = getProfile().getDir();
 
         if (profileDir != null) {
             final GeckoApp app = GeckoApp.mAppContext;
 
             GeckoAppShell.getHandler().post(new Runnable() {
+                @Override
                 public void run() {
                     ProfileMigrator profileMigrator = new ProfileMigrator(app);
 
                     // Do a migration run on the first start after an upgrade.
                     if (!GeckoApp.sIsUsingCustomProfile &&
                         !profileMigrator.hasMigrationRun()) {
                         // Show the "Setting up Fennec" screen if this takes
                         // a while.
@@ -2181,29 +2203,33 @@ abstract public class GeckoApp
                         // Create a "final" holder for the setup screen so that we can
                         // create it in startCallback and still find a reference to it
                         // in stopCallback. (We must create it on the UI thread to fix
                         // bug 788216). Note that synchronization is not a problem here
                         // since it is only ever touched on the UI thread.
                         final SetupScreen[] setupScreenHolder = new SetupScreen[1];
 
                         final Runnable startCallback = new Runnable() {
+                            @Override
                             public void run() {
                                 GeckoApp.mAppContext.runOnUiThread(new Runnable() {
+                                    @Override
                                     public void run() {
                                         setupScreenHolder[0] = new SetupScreen(app);
                                         setupScreenHolder[0].show();
                                     }
                                 });
                             }
                         };
 
                         final Runnable stopCallback = new Runnable() {
+                            @Override
                             public void run() {
                                 GeckoApp.mAppContext.runOnUiThread(new Runnable() {
+                                    @Override
                                     public void run() {
                                         SetupScreen screen = setupScreenHolder[0];
                                         // screen will never be null if this code runs, but
                                         // stranger things have happened...
                                         if (screen != null) {
                                             screen.dismiss();
                                         }
                                     }
@@ -2349,37 +2375,43 @@ abstract public class GeckoApp
 
     public LayerView getLayerView() {
         return mLayerView;
     }
 
     public AbsoluteLayout getPluginContainer() { return mPluginContainer; }
 
     // Accelerometer.
+    @Override
     public void onAccuracyChanged(Sensor sensor, int accuracy) {
     }
 
+    @Override
     public void onSensorChanged(SensorEvent event) {
         GeckoAppShell.sendEventToGecko(GeckoEvent.createSensorEvent(event));
     }
 
     // Geolocation.
+    @Override
     public void onLocationChanged(Location location) {
         // No logging here: user-identifying information.
         GeckoAppShell.sendEventToGecko(GeckoEvent.createLocationEvent(location));
     }
 
+    @Override
     public void onProviderDisabled(String provider)
     {
     }
 
+    @Override
     public void onProviderEnabled(String provider)
     {
     }
 
+    @Override
     public void onStatusChanged(String provider, int status, Bundle extras)
     {
     }
 
     // Called when a Gecko Hal WakeLock is changed
     public void notifyWakeLockChanged(String topic, String state) {
         PowerManager.WakeLock wl = mWakeLocks.get(topic);
         if (state.equals("locked-foreground") && wl == null) {
@@ -2485,16 +2517,17 @@ abstract public class GeckoApp
              * its surface to be destroyed, which causes a pause composition
              * event to be sent to Gecko. We synchronously wait for that to be
              * processed. Simultaneously, however, Flash is waiting on a mutex so
              * the post() below is an attempt to avoid a deadlock.
              */
             super.addView(view, index);
 
             mMainHandler.post(new Runnable() { 
+                @Override
                 public void run() {
                     mLayerView.hide();
                 }
             });
         }
 
         /**
          * The methods below are simply copied from what Android WebKit does.
--- a/mobile/android/base/GeckoAppShell.java
+++ b/mobile/android/base/GeckoAppShell.java
@@ -173,16 +173,17 @@ public class GeckoAppShell
     public static native void callObserver(String observerKey, String topic, String data);
     public static native void removeObserver(String observerKey);
     public static native void onChangeNetworkLinkStatus(String status);
     public static native Message getNextMessageFromQueue(MessageQueue queue);
     public static native void onSurfaceTextureFrameAvailable(Object surfaceTexture, int id);
 
     public static void registerGlobalExceptionHandler() {
         Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
+            @Override
             public void uncaughtException(Thread thread, Throwable e) {
                 Log.e(LOGTAG, ">>> REPORTING UNCAUGHT EXCEPTION FROM THREAD "
                               + thread.getId() + " (\"" + thread.getName() + "\")", e);
 
                 // If the uncaught exception was rethrown, walk the exception `cause` chain to find
                 // the original exception so Socorro can correctly collate related crash reports.
                 Throwable cause;
                 while ((cause = e.getCause()) != null) {
@@ -245,20 +246,22 @@ public class GeckoAppShell
 
         private GeckoMediaScannerClient(Context context, String file, String mimeType) {
             mFile = file;
             mMimeType = mimeType;
             mScanner = new MediaScannerConnection(context, this);
             mScanner.connect();
         }
 
+        @Override
         public void onMediaScannerConnected() {
             mScanner.scanFile(mFile, mMimeType);
         }
 
+        @Override
         public void onScanCompleted(String path, Uri uri) {
             if(path.equals(mFile)) {
                 mScanner.disconnect();
                 mScanner = null;
             }
         }
     }
 
@@ -293,16 +296,17 @@ public class GeckoAppShell
             combinedArgs += " -url " + url;
         if (type != null)
             combinedArgs += " " + type;
 
         DisplayMetrics metrics = GeckoApp.mAppContext.getResources().getDisplayMetrics();
         combinedArgs += " -width " + metrics.widthPixels + " -height " + metrics.heightPixels;
 
         GeckoApp.mAppContext.runOnUiThread(new Runnable() {
+                @Override
                 public void run() {
                     geckoLoaded();
                 }
             });
 
         // and go
         GeckoLoader.nativeRun(combinedArgs);
     }
@@ -412,16 +416,17 @@ public class GeckoAppShell
         synchronized (sSyncEvent) {
             sWaitingForSyncAck = false;
             sSyncEvent.notifyAll();
         }
     }
 
     public static void enableLocation(final boolean enable) {
         getMainHandler().post(new Runnable() { 
+                @Override
                 public void run() {
                     LocationManager lm = (LocationManager)
                         GeckoApp.mAppContext.getSystemService(Context.LOCATION_SERVICE);
 
                     if (enable) {
                         Criteria criteria = new Criteria();
                         criteria.setSpeedRequired(false);
                         criteria.setBearingRequired(false);
@@ -621,16 +626,17 @@ public class GeckoAppShell
     static void createShortcut(String aTitle, String aURI, String aUniqueURI, String aIconData, String aType) {
         createShortcut(aTitle, aURI, aUniqueURI, BitmapUtils.getBitmapFromDataURI(aIconData), aType);
     }
 
     public static void createShortcut(final String aTitle, final String aURI, final String aUniqueURI,
                                       final Bitmap aIcon, final String aType)
     {
         getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 // the intent to be launched by the shortcut
                 Intent shortcutIntent;
                 if (aType.equalsIgnoreCase(SHORTCUT_TYPE_WEBAPP)) {
                     shortcutIntent = getWebAppIntent(aURI, aUniqueURI, aTitle, aIcon);
                 } else {
                     shortcutIntent = new Intent();
                     shortcutIntent.setAction(GeckoApp.ACTION_BOOKMARK);
@@ -657,16 +663,17 @@ public class GeckoAppShell
     }
 
     public static void removeShortcut(final String aTitle, final String aURI, final String aType) {
         removeShortcut(aTitle, aURI, null, aType);
     }
 
     public static void removeShortcut(final String aTitle, final String aURI, final String aUniqueURI, final String aType) {
         getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 // the intent to be launched by the shortcut
                 Intent shortcutIntent;
                 if (aType.equalsIgnoreCase(SHORTCUT_TYPE_WEBAPP)) {
                     int index = WebAppAllocator.getInstance(GeckoApp.mAppContext).getIndexForApp(aUniqueURI);
                     shortcutIntent = getWebAppIntent(aURI, aUniqueURI, "", null);
                     if (shortcutIntent == null)
                         return;
@@ -691,16 +698,17 @@ public class GeckoAppShell
         });
     }
 
     public static void uninstallWebApp(final String uniqueURI) {
         // On uninstall, we need to do a couple of things:
         //   1. nuke the running app process.
         //   2. nuke the profile that was assigned to that webapp
         getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 int index = WebAppAllocator.getInstance(GeckoApp.mAppContext).releaseIndexForApp(uniqueURI);
 
                 // if -1, nothing to do; we didn't think it was installed anyway
                 if (index == -1)
                     return;
 
                 // kill the app if it's running
@@ -1127,16 +1135,17 @@ public class GeckoAppShell
     private static String EMPTY_STRING = new String();
 
     // On some devices, access to the clipboard service needs to happen
     // on a thread with a looper, so dispatch this to our looper thread
     // Note: the main looper won't work because it may be blocked on the
     // gecko thread, which is most likely this thread
     static String getClipboardText() {
         getHandler().post(new Runnable() { 
+            @Override
             @SuppressWarnings("deprecation")
             public void run() {
                 Context context = GeckoApp.mAppContext;
                 String text = null;
                 if (android.os.Build.VERSION.SDK_INT >= 11) {
                     android.content.ClipboardManager cm = (android.content.ClipboardManager)
                         context.getSystemService(Context.CLIPBOARD_SERVICE);
                     if (cm.hasPrimaryClip()) {
@@ -1160,16 +1169,17 @@ public class GeckoAppShell
             String ret = sClipboardQueue.take();
             return (EMPTY_STRING.equals(ret) ? null : ret);
         } catch (InterruptedException ie) {}
         return null;
     }
 
     static void setClipboardText(final String text) {
         getHandler().post(new Runnable() { 
+            @Override
             @SuppressWarnings("deprecation")
             public void run() {
                 Context context = GeckoApp.mAppContext;
                 if (android.os.Build.VERSION.SDK_INT >= 11) {
                     android.content.ClipboardManager cm = (android.content.ClipboardManager)
                         context.getSystemService(Context.CLIPBOARD_SERVICE);
                     cm.setPrimaryClip(ClipData.newPlainText("Text", text));
                 } else {
@@ -1362,24 +1372,26 @@ public class GeckoAppShell
     public static void showInputMethodPicker() {
         InputMethodManager imm = (InputMethodManager)
             GeckoApp.mAppContext.getSystemService(Context.INPUT_METHOD_SERVICE);
         imm.showInputMethodPicker();
     }
 
     public static void setKeepScreenOn(final boolean on) {
         GeckoApp.mAppContext.runOnUiThread(new Runnable() {
+            @Override
             public void run() {
                 // TODO
             }
         });
     }
 
     public static void notifyDefaultPrevented(final boolean defaultPrevented) {
         getMainHandler().post(new Runnable() {
+            @Override
             public void run() {
                 LayerView view = GeckoApp.mAppContext.getLayerView();
                 PanZoomController controller = (view == null ? null : view.getPanZoomController());
                 if (controller != null) {
                     controller.notifyDefaultActionPrevented(defaultPrevented);
                 }
             }
         });
@@ -1466,30 +1478,32 @@ public class GeckoAppShell
             appearance.recycle();
         }
 
         return result;
     }
 
     public static void killAnyZombies() {
         GeckoProcessesVisitor visitor = new GeckoProcessesVisitor() {
+            @Override
             public boolean callback(int pid) {
                 if (pid != android.os.Process.myPid())
                     android.os.Process.killProcess(pid);
                 return true;
             }
         };
             
         EnumerateGeckoProcesses(visitor);
     }
 
     public static boolean checkForGeckoProcs() {
 
         class GeckoPidCallback implements GeckoProcessesVisitor {
             public boolean otherPidExist = false;
+            @Override
             public boolean callback(int pid) {
                 if (pid != android.os.Process.myPid()) {
                     otherPidExist = true;
                     return false;
                 }
                 return true;
             }            
         }
@@ -1792,16 +1806,17 @@ public class GeckoAppShell
             } catch(RuntimeException e) {
                 Log.w(LOGTAG, "Error setPreviewDisplay:", e);
             }
 
             sCamera.setParameters(params);
             sCameraBuffer = new byte[(bufferSize * 12) / 8];
             sCamera.addCallbackBuffer(sCameraBuffer);
             sCamera.setPreviewCallbackWithBuffer(new android.hardware.Camera.PreviewCallback() {
+                @Override
                 public void onPreviewFrame(byte[] data, android.hardware.Camera camera) {
                     cameraCallbackBridge(data);
                     if (sCamera != null)
                         sCamera.addCallbackBuffer(sCameraBuffer);
                 }
             });
             sCamera.startPreview();
             params = sCamera.getParameters();
@@ -1883,24 +1898,26 @@ public class GeckoAppShell
     }
 
     static void checkUriVisited(String uri) {   // invoked from native JNI code
         GlobalHistory.getInstance().checkUriVisited(uri);
     }
 
     static void markUriVisited(final String uri) {    // invoked from native JNI code
         getHandler().post(new Runnable() { 
+            @Override
             public void run() {
                 GlobalHistory.getInstance().add(uri);
             }
         });
     }
 
     static void setUriTitle(final String uri, final String title) {    // invoked from native JNI code
         getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 GlobalHistory.getInstance().update(uri, title);
             }
         });
     }
 
     static void hideProgressDialog() {
         // unused stub
@@ -2133,16 +2150,17 @@ public class GeckoAppShell
 
     static class AsyncResultHandler extends FilePickerResultHandler {
         private long mId;
         AsyncResultHandler(long id) {
             super(null);
             mId = id;
         }
 
+        @Override
         public void onActivityResult(int resultCode, Intent data) {
             GeckoAppShell.notifyFilePickerResult(handleActivityResult(resultCode, data), mId);
         }
         
     }
 
     static native void notifyFilePickerResult(String filePath, long id);
 
@@ -2160,16 +2178,17 @@ public class GeckoAppShell
     public static String getGfxInfoData() {
         String data = sGfxInfoThread.getData();
         sGfxInfoThread = null;
         return data;
     }
 
     public static void registerSurfaceTextureFrameListener(Object surfaceTexture, final int id) {
         ((SurfaceTexture)surfaceTexture).setOnFrameAvailableListener(new SurfaceTexture.OnFrameAvailableListener() {
+            @Override
             public void onFrameAvailable(SurfaceTexture surfaceTexture) {
                 GeckoAppShell.onSurfaceTextureFrameAvailable(surfaceTexture, id);
             }
         });
     }
 
     public static void unregisterSurfaceTextureFrameListener(Object surfaceTexture) {
         ((SurfaceTexture)surfaceTexture).setOnFrameAvailableListener(null);
--- a/mobile/android/base/GeckoEditable.java
+++ b/mobile/android/base/GeckoEditable.java
@@ -313,16 +313,17 @@ final class GeckoEditable
 
     private void geckoUpdateGecko(final boolean force) {
         /* We do not increment the seqno here, but only check it, because geckoUpdateGecko is a
            request for update. If we incremented the seqno here, geckoUpdateGecko would have
            prevented other updates from occurring */
         final int seqnoWhenPosted = mGeckoUpdateSeqno;
 
         geckoPostToIc(new Runnable() {
+            @Override
             public void run() {
                 mActionQueue.syncWithGecko();
                 if (seqnoWhenPosted == mGeckoUpdateSeqno) {
                     icUpdateGecko(force);
                 }
             }
         });
     }
@@ -615,16 +616,17 @@ final class GeckoEditable
             final int selStart = Math.min(action.mStart < 0 ? curStart : action.mStart, len);
             final int selEnd = Math.min(action.mEnd < 0 ? curEnd : action.mEnd, len);
 
             if (selStart < action.mStart || selEnd < action.mEnd) {
                 Log.w(LOGTAG, "IME sync error: selection out of bounds");
             }
             Selection.setSelection(mText, selStart, selEnd);
             geckoPostToIc(new Runnable() {
+                @Override
                 public void run() {
                     mActionQueue.syncWithGecko();
                     final int start = Selection.getSelectionStart(mText);
                     final int end = Selection.getSelectionEnd(mText);
                     if (selStart == start && selEnd == end) {
                         // There has not been another new selection in the mean time that
                         // made this notification out-of-date
                         mListener.onSelectionChange(start, end);
@@ -668,16 +670,17 @@ final class GeckoEditable
             } finally {
                 // Ensure action is always removed from queue
                 // even if stale action results in exception in geckoActionReply
                 mActionQueue.poll();
             }
             return;
         }
         geckoPostToIc(new Runnable() {
+            @Override
             public void run() {
                 if (type == NOTIFY_IME_FOCUSCHANGE) {
                     if (state == IME_FOCUS_STATE_BLUR) {
                         mFocused = false;
                     } else {
                         mFocused = true;
                         // Unmask events on the Gecko side
                         mActionQueue.offer(new Action(Action.TYPE_ACKNOWLEDGE_FOCUS));
@@ -698,16 +701,17 @@ final class GeckoEditable
         // Because we want to be able to bind GeckoEditable to the newest LayerView instance,
         // this can be called from the Java IC thread in addition to the Gecko thread.
         if (DEBUG) {
             Log.d(LOGTAG, "notifyIMEEnabled(" +
                           getConstantName(GeckoEditableListener.class, "IME_STATE_", state) +
                           ", \"" + typeHint + "\", \"" + modeHint + "\", \"" + actionHint + "\")");
         }
         geckoPostToIc(new Runnable() {
+            @Override
             public void run() {
                 // Make sure there are no other things going on
                 mActionQueue.syncWithGecko();
                 // Set InputConnectionHandler in notifyIMEEnabled because
                 // GeckoInputConnection.notifyIMEEnabled calls restartInput() which will invoke
                 // InputConnectionHandler.onCreateInputConnection
                 LayerView v = GeckoApp.mAppContext.getLayerView();
                 if (v != null) {
@@ -736,16 +740,17 @@ final class GeckoEditable
            because the IC thread should be blocked on the event action */
         if (!mActionQueue.isEmpty() &&
             mActionQueue.peek().mType == Action.TYPE_EVENT) {
             Selection.setSelection(mText, start, end);
             return;
         }
 
         geckoPostToIc(new Runnable() {
+            @Override
             public void run() {
                 mActionQueue.syncWithGecko();
                 /* check to see there has not been another action that potentially changed the
                    selection. If so, we can skip this update because we know there is another
                    update right after this one that will replace the effect of this update */
                 if (mGeckoUpdateSeqno == seqnoWhenPosted) {
                     /* In this case, Gecko's selection has changed and it's notifying us to change
                        Java's selection. In the normal case, whenever Java's selection changes,
@@ -835,16 +840,17 @@ final class GeckoEditable
                 }
             } else {
                 geckoReplaceText(start, oldEnd, mChangedText);
             }
         } else {
             geckoReplaceText(start, oldEnd, mChangedText);
         }
         geckoPostToIc(new Runnable() {
+            @Override
             public void run() {
                 mListener.onTextChange(text, start, oldEnd, newEnd);
             }
         });
     }
 
     // InvocationHandler interface
 
--- a/mobile/android/base/GeckoInputConnection.java
+++ b/mobile/android/base/GeckoInputConnection.java
@@ -390,16 +390,17 @@ class GeckoInputConnection
         mBatchTextChanged = false;
         mUpdateRequest = null;
 
         mCurrentInputMethod = "";
 
         // Do not reset mIMEState here; see comments in notifyIMEEnabled
     }
 
+    @Override
     public void onTextChange(String text, int start, int oldEnd, int newEnd) {
 
         if (mUpdateRequest == null) {
             return;
         }
 
         if (mBatchEditCount > 0) {
             // Delay notification until after the batch edit
@@ -427,16 +428,17 @@ class GeckoInputConnection
                 Selection.getSelectionEnd(editable);
         mUpdateExtract.startOffset = 0;
         mUpdateExtract.text = editable;
 
         imm.updateExtractedText(v, mUpdateRequest.token,
                                 mUpdateExtract);
     }
 
+    @Override
     public void onSelectionChange(int start, int end) {
 
         if (mBatchEditCount > 0) {
             // Delay notification until after the batch edit
             mBatchSelectionChanged = true;
             return;
         }
         notifySelectionChange(start, end);
@@ -518,16 +520,17 @@ class GeckoInputConnection
                                  : getBackgroundHandler();
         if (mEditableClient.setInputConnectionHandler(newHandler)) {
             return newHandler;
         }
         // Setting new IC handler failed; return old IC handler
         return mEditableClient.getInputConnectionHandler();
     }
 
+    @Override
     public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
         if (mIMEState == IME_STATE_DISABLED) {
             return null;
         }
 
         outAttrs.inputType = InputType.TYPE_CLASS_TEXT;
         outAttrs.imeOptions = EditorInfo.IME_ACTION_NONE;
         outAttrs.actionLabel = null;
@@ -648,20 +651,22 @@ class GeckoInputConnection
                     mThreadUtils.endWaitForUiThread();
                 }
             });
             mThreadUtils.waitForUiThread(icHandler);
         }
         return false; // seems to always return false
     }
 
+    @Override
     public boolean onKeyPreIme(int keyCode, KeyEvent event) {
         return false;
     }
 
+    @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
         return processKeyDown(keyCode, event);
     }
 
     private boolean processKeyDown(int keyCode, KeyEvent event) {
         if (keyCode > KeyEvent.getMaxKeyCode())
             return false;
 
@@ -701,16 +706,17 @@ class GeckoInputConnection
         Handler icHandler = mEditableClient.getInputConnectionHandler();
         Editable uiEditable = mThreadUtils.getEditableForUiThread(uiHandler, icHandler);
         if (!keyListener.onKeyDown(view, uiEditable, keyCode, event)) {
             mEditableClient.sendEvent(GeckoEvent.createKeyEvent(event));
         }
         return true;
     }
 
+    @Override
     public boolean onKeyUp(int keyCode, KeyEvent event) {
         return processKeyUp(keyCode, event);
     }
 
     private boolean processKeyUp(int keyCode, KeyEvent event) {
         if (keyCode > KeyEvent.getMaxKeyCode())
             return false;
 
@@ -742,45 +748,49 @@ class GeckoInputConnection
         Handler icHandler = mEditableClient.getInputConnectionHandler();
         Editable uiEditable = mThreadUtils.getEditableForUiThread(uiHandler, icHandler);
         if (!keyListener.onKeyUp(view, uiEditable, keyCode, event)) {
             mEditableClient.sendEvent(GeckoEvent.createKeyEvent(event));
         }
         return true;
     }
 
+    @Override
     public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) {
         while ((repeatCount--) != 0) {
             if (!processKeyDown(keyCode, event) ||
                 !processKeyUp(keyCode, event)) {
                 return false;
             }
         }
         return true;
     }
 
+    @Override
     public boolean onKeyLongPress(int keyCode, KeyEvent event) {
         View v = getView();
         switch (keyCode) {
             case KeyEvent.KEYCODE_MENU:
                 InputMethodManager imm = getInputMethodManager();
                 imm.toggleSoftInputFromWindow(v.getWindowToken(),
                                               InputMethodManager.SHOW_FORCED, 0);
                 return true;
             default:
                 break;
         }
         return false;
     }
 
+    @Override
     public boolean isIMEEnabled() {
         // make sure this picks up PASSWORD and PLUGIN states as well
         return mIMEState != IME_STATE_DISABLED;
     }
 
+    @Override
     public void notifyIME(final int type, final int state) {
         switch (type) {
 
             case NOTIFY_IME_CANCELCOMPOSITION:
                 // Set composition to empty and end composition
                 setComposingText("", 0);
                 // Fall through
 
@@ -798,16 +808,17 @@ class GeckoInputConnection
             default:
                 if (DEBUG) {
                     throw new IllegalArgumentException("Unexpected NOTIFY_IME=" + type);
                 }
                 break;
         }
     }
 
+    @Override
     public void notifyIMEEnabled(final int state, final String typeHint,
                                  final String modeHint, final String actionHint) {
         // For some input type we will use a widget to display the ui, for those we must not
         // display the ime. We can display a widget for date and time types and, if the sdk version
         // is greater than 11, for datetime/month/week as well.
         if (typeHint != null &&
             (typeHint.equals("date") ||
              typeHint.equals("time") ||
@@ -838,16 +849,17 @@ class GeckoInputConnection
             // When using Find In Page, we can still receive notifyIMEEnabled calls due to the
             // selection changing when highlighting. However in this case we don't want to reset/
             // show/hide the keyboard because the find box has the focus and is taking input from
             // the keyboard.
             return;
         }
         restartInput();
         GeckoApp.mAppContext.mMainHandler.postDelayed(new Runnable() {
+            @Override
             public void run() {
                 if (mIMEState == IME_STATE_DISABLED) {
                     hideSoftInput();
                 } else {
                     showSoftInput();
                 }
             }
         }, 200); // Delay 200ms to prevent repeated IME showing/hiding
@@ -875,16 +887,17 @@ final class DebugGeckoInputConnection
         DebugGeckoInputConnection dgic =
                 new DebugGeckoInputConnection(targetView, editable);
         dgic.mProxy = (InputConnection)Proxy.newProxyInstance(
                 GeckoInputConnection.class.getClassLoader(),
                 PROXY_INTERFACES, dgic);
         return (GeckoEditableListener)dgic.mProxy;
     }
 
+    @Override
     public Object invoke(Object proxy, Method method, Object[] args)
             throws Throwable {
 
         StringBuilder log = new StringBuilder(mCallLevel);
         log.append("> ").append(method.getName()).append("(");
         for (Object arg : args) {
             // translate argument values to constant names
             if ("notifyIME".equals(method.getName()) && arg == args[0]) {
--- a/mobile/android/base/GeckoPreferences.java
+++ b/mobile/android/base/GeckoPreferences.java
@@ -98,23 +98,25 @@ public class GeckoPreferences
     public void onResume() {
         super.onResume();
 
         if (getApplication() instanceof GeckoApplication) {
             ((GeckoApplication) getApplication()).onActivityResume(this);
         }
     }
 
+    @Override
     public void handleMessage(String event, JSONObject message) {
         try {
             if (event.equals("Sanitize:Finished")) {
                 boolean success = message.getBoolean("success");
                 final int stringRes = success ? R.string.private_data_success : R.string.private_data_fail;
                 final Context context = this;
                 GeckoAppShell.getMainHandler().post(new Runnable () {
+                    @Override
                     public void run() {
                         Toast.makeText(context, stringRes, Toast.LENGTH_SHORT).show();
                     }
                 });
             }
         } catch (Exception e) {
             Log.e(LOGTAG, "Exception handling message \"" + event + "\":", e);
         }
@@ -270,49 +272,55 @@ public class GeckoPreferences
         AlertDialog dialog = null;
 
         PasswordTextWatcher(EditText aInput1, EditText aInput2, AlertDialog aDialog) {
             input1 = aInput1;
             input2 = aInput2;
             dialog = aDialog;
         }
 
+        @Override
         public void afterTextChanged(Editable s) {
             if (dialog == null)
                 return;
 
             String text1 = input1.getText().toString();
             String text2 = input2.getText().toString();
             boolean disabled = TextUtils.isEmpty(text1) || TextUtils.isEmpty(text2) || !text1.equals(text2);
             dialog.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(!disabled);
         }
 
+        @Override
         public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
+        @Override
         public void onTextChanged(CharSequence s, int start, int before, int count) { }
     }
 
     private class EmptyTextWatcher implements TextWatcher {
         EditText input = null;
         AlertDialog dialog = null;
 
         EmptyTextWatcher(EditText aInput, AlertDialog aDialog) {
             input = aInput;
             dialog = aDialog;
         }
 
+        @Override
         public void afterTextChanged(Editable s) {
             if (dialog == null)
                 return;
 
             String text = input.getText().toString();
             boolean disabled = TextUtils.isEmpty(text);
             dialog.getButton(DialogInterface.BUTTON_POSITIVE).setEnabled(!disabled);
         }
 
+        @Override
         public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
+        @Override
         public void onTextChanged(CharSequence s, int start, int before, int count) { }
     }
 
     @Override
     protected Dialog onCreateDialog(int id) {
         AlertDialog.Builder builder = new AlertDialog.Builder(this);
         LinearLayout linearLayout = new LinearLayout(this);
         linearLayout.setOrientation(LinearLayout.VERTICAL);
@@ -322,38 +330,41 @@ public class GeckoPreferences
                 final EditText input1 = getTextBox(R.string.masterpassword_password);
                 final EditText input2 = getTextBox(R.string.masterpassword_confirm);
                 linearLayout.addView(input1);
                 linearLayout.addView(input2);
 
                 builder.setTitle(R.string.masterpassword_create_title)
                        .setView((View)linearLayout)
                        .setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {  
+                            @Override
                             public void onClick(DialogInterface dialog, int which) {
                                 JSONObject jsonPref = new JSONObject();
                                 try {
                                     jsonPref.put("name", PREFS_MP_ENABLED);
                                     jsonPref.put("type", "string");
                                     jsonPref.put("value", input1.getText().toString());
                     
                                     GeckoEvent event = GeckoEvent.createBroadcastEvent("Preferences:Set", jsonPref.toString());
                                     GeckoAppShell.sendEventToGecko(event);
                                 } catch(Exception ex) {
                                     Log.e(LOGTAG, "Error setting master password", ex);
                                 }
                                 return;
                             }
                         })
                         .setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() {  
+                            @Override
                             public void onClick(DialogInterface dialog, int which) {
                                 return;
                             }
                         });
                         dialog = builder.create();
                         dialog.setOnShowListener(new DialogInterface.OnShowListener() {
+                            @Override
                             public void onShow(DialogInterface dialog) {
                                 input1.setText("");
                                 input2.setText("");
                                 input1.requestFocus();
                             }
                         });
 
                         PasswordTextWatcher watcher = new PasswordTextWatcher(input1, input2, dialog);
@@ -363,32 +374,36 @@ public class GeckoPreferences
                 break;
             case DIALOG_REMOVE_MASTER_PASSWORD:
                 final EditText input = getTextBox(R.string.masterpassword_password);
                 linearLayout.addView(input);
 
                 builder.setTitle(R.string.masterpassword_remove_title)
                        .setView((View)linearLayout)
                        .setPositiveButton(R.string.button_ok, new DialogInterface.OnClickListener() {  
+                            @Override
                             public void onClick(DialogInterface dialog, int which) {
                                 PrefsHelper.setPref(PREFS_MP_ENABLED, input.getText().toString());
                             }
                         })
                         .setNegativeButton(R.string.button_cancel, new DialogInterface.OnClickListener() {  
+                            @Override
                             public void onClick(DialogInterface dialog, int which) {
                                 return;
                             }
                         });
                         dialog = builder.create();
                         dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
+                            @Override
                             public void onDismiss(DialogInterface dialog) {
                                 input.setText("");
                             }
                         });
                         dialog.setOnShowListener(new DialogInterface.OnShowListener() {
+                            @Override
                             public void onShow(DialogInterface dialog) {
                                 input.setText("");
                             }
                         });
                         input.addTextChangedListener(new EmptyTextWatcher(input, dialog));
                 break;
             default:
                 return null;
@@ -404,68 +419,74 @@ public class GeckoPreferences
             private Preference getField(String prefName) {
                 return (mPreferenceScreen == null ? null : mPreferenceScreen.findPreference(prefName));
             }
 
             @Override public void prefValue(String prefName, final boolean value) {
                 final Preference pref = getField(prefName);
                 if (pref instanceof CheckBoxPreference) {
                     GeckoAppShell.getMainHandler().post(new Runnable() {
+                        @Override
                         public void run() {
                             if (((CheckBoxPreference)pref).isChecked() != value)
                                 ((CheckBoxPreference)pref).setChecked(value);
                         }
                     });
                 }
             }
 
             @Override public void prefValue(String prefName, final String value) {
                 final Preference pref = getField(prefName);
                 if (pref instanceof EditTextPreference) {
                     GeckoAppShell.getMainHandler().post(new Runnable() {
+                        @Override
                         public void run() {
                             ((EditTextPreference)pref).setText(value);
                         }
                     });
                 } else if (pref instanceof ListPreference) {
                     GeckoAppShell.getMainHandler().post(new Runnable() {
+                        @Override
                         public void run() {
                             ((ListPreference)pref).setValue(value);
                             // Set the summary string to the current entry
                             CharSequence selectedEntry = ((ListPreference)pref).getEntry();
                             ((ListPreference)pref).setSummary(selectedEntry);
                         }
                     });
                 } else if (pref instanceof FontSizePreference) {
                     final FontSizePreference fontSizePref = (FontSizePreference) pref;
                     fontSizePref.setSavedFontSize(value);
                     final String fontSizeName = fontSizePref.getSavedFontSizeName();
                     GeckoAppShell.getMainHandler().post(new Runnable() {
+                        @Override
                         public void run() {
                             fontSizePref.setSummary(fontSizeName); // Ex: "Small".
                         }
                     });
                 }
             }
 
             @Override public void finish() {
                 // enable all preferences once we have them from gecko
                 GeckoAppShell.getMainHandler().post(new Runnable() {
+                    @Override
                     public void run() {
                         mPreferenceScreen.setEnabled(true);
                     }
                 });
             }
         });
     }
 
     private void registerEventListener(String event) {
         GeckoAppShell.getEventDispatcher().registerEventListener(event, this);
     }
 
     private void unregisterEventListener(String event) {
         GeckoAppShell.getEventDispatcher().unregisterEventListener(event, this);
     }
 
+    @Override
     public boolean isGeckoActivityOpened() {
         return false;
     }
 }
--- a/mobile/android/base/GeckoSmsManager.java
+++ b/mobile/android/base/GeckoSmsManager.java
@@ -347,16 +347,17 @@ public class GeckoSmsManager
   private final static int kMessageClassClass3  = 4;
 
   private final static String[] kRequiredMessageRows = new String[] { "_id", "address", "body", "date", "type", "status" };
 
   public GeckoSmsManager() {
     SmsIOThread.getInstance().start();
   }
 
+  @Override
   public void start() {
     IntentFilter smsFilter = new IntentFilter();
     smsFilter.addAction(GeckoSmsManager.ACTION_SMS_RECEIVED);
     smsFilter.addAction(GeckoSmsManager.ACTION_SMS_SENT);
     smsFilter.addAction(GeckoSmsManager.ACTION_SMS_DELIVERED);
 
     GeckoApp.mAppContext.registerReceiver(this, smsFilter);
   }
@@ -480,16 +481,17 @@ public class GeckoSmsManager
           !envelope.arePartsRemaining(Envelope.SubParts.DELIVERED_PART)) {
         postman.destroyEnvelope(envelopeId);
       }
 
       return;
     }
   }
 
+  @Override
   public void send(String aNumber, String aMessage, int aRequestId) {
     int envelopeId = Postman.kUnknownEnvelopeId;
 
     try {
       SmsManager sm = SmsManager.getDefault();
 
       Intent sentIntent = new Intent(ACTION_SMS_SENT);
       Intent deliveredIntent = new Intent(ACTION_SMS_DELIVERED);
@@ -595,16 +597,17 @@ public class GeckoSmsManager
       Log.e("GeckoSmsManager", "The id we received is higher than the higher allowed value.");
       return -1;
     } catch (Exception e) {
       Log.e("GeckoSmsManager", "Something went wrong when trying to write a sent message", e);
       return -1;
     }
   }
 
+  @Override
   public void getMessage(int aMessageId, int aRequestId) {
     class GetMessageRunnable implements Runnable {
       private int mMessageId;
       private int mRequestId;
 
       GetMessageRunnable(int aMessageId, int aRequestId) {
         mMessageId = aMessageId;
         mRequestId = aRequestId;
@@ -679,16 +682,17 @@ public class GeckoSmsManager
     }
 
     if (!SmsIOThread.getInstance().execute(new GetMessageRunnable(aMessageId, aRequestId))) {
       Log.e("GeckoSmsManager", "Failed to add GetMessageRunnable to the SmsIOThread");
       notifyGetSmsFailed(kUnknownError, aRequestId);
     }
   }
 
+  @Override
   public void deleteMessage(int aMessageId, int aRequestId) {
     class DeleteMessageRunnable implements Runnable {
       private int mMessageId;
       private int mRequestId;
 
       DeleteMessageRunnable(int aMessageId, int aRequestId) {
         mMessageId = aMessageId;
         mRequestId = aRequestId;
@@ -718,16 +722,17 @@ public class GeckoSmsManager
     }
 
     if (!SmsIOThread.getInstance().execute(new DeleteMessageRunnable(aMessageId, aRequestId))) {
       Log.e("GeckoSmsManager", "Failed to add GetMessageRunnable to the SmsIOThread");
       notifySmsDeleteFailed(kUnknownError, aRequestId);
     }
   }
 
+  @Override
   public void createMessageList(long aStartDate, long aEndDate, String[] aNumbers, int aNumbersCount, int aDeliveryState, boolean aReverse, int aRequestId) {
     class CreateMessageListRunnable implements Runnable {
       private long     mStartDate;
       private long     mEndDate;
       private String[] mNumbers;
       private int      mNumbersCount;
       private int      mDeliveryState;
       private boolean  mReverse;
@@ -840,16 +845,17 @@ public class GeckoSmsManager
     }
 
     if (!SmsIOThread.getInstance().execute(new CreateMessageListRunnable(aStartDate, aEndDate, aNumbers, aNumbersCount, aDeliveryState, aReverse, aRequestId))) {
       Log.e("GeckoSmsManager", "Failed to add CreateMessageListRunnable to the SmsIOThread");
       notifyReadingMessageListFailed(kUnknownError, aRequestId);
     }
   }
 
+  @Override
   public void getNextMessageInList(int aListId, int aRequestId) {
     class GetNextMessageInListRunnable implements Runnable {
       private int mListId;
       private int mRequestId;
 
       GetNextMessageInListRunnable(int aListId, int aRequestId) {
         mListId = aListId;
         mRequestId = aRequestId;
@@ -899,24 +905,27 @@ public class GeckoSmsManager
     }
 
     if (!SmsIOThread.getInstance().execute(new GetNextMessageInListRunnable(aListId, aRequestId))) {
       Log.e("GeckoSmsManager", "Failed to add GetNextMessageInListRunnable to the SmsIOThread");
       notifyReadingMessageListFailed(kUnknownError, aRequestId);
     }
   }
 
+  @Override
   public void clearMessageList(int aListId) {
     MessagesListManager.getInstance().remove(aListId);
   }
 
+  @Override
   public void stop() {
     GeckoApp.mAppContext.unregisterReceiver(this);
   }
 
+  @Override
   public void shutdown() {
     SmsIOThread.getInstance().interrupt();
     MessagesListManager.getInstance().clear();
   }
 
   private int getGeckoDeliveryStatus(int aDeliveryStatus) {
     if (aDeliveryStatus == kInternalDeliveryStatusNone) {
       return kDeliveryStatusNotApplicable;
--- a/mobile/android/base/GeckoThread.java
+++ b/mobile/android/base/GeckoThread.java
@@ -109,16 +109,17 @@ public class GeckoThread extends Thread 
         String type = getTypeFromAction(mIntent.getAction());
         mIntent = null;
 
         // and then fire us up
         Log.i(LOGTAG, "RunGecko - args = " + args);
         GeckoAppShell.runGecko(path, args, mUri, type);
     }
 
+    @Override
     public void handleMessage(String event, JSONObject message) {
         if ("Gecko:Ready".equals(event)) {
             GeckoAppShell.getEventDispatcher().unregisterEventListener(event, this);
             setLaunchState(LaunchState.GeckoRunning);
             GeckoAppShell.sendPendingEventsToGecko();
         }
     }
 
--- a/mobile/android/base/GlobalHistory.java
+++ b/mobile/android/base/GlobalHistory.java
@@ -39,16 +39,17 @@ class GlobalHistory {
     private final Runnable mNotifierRunnable;           // off-thread runnable used to check URIs
     private boolean mProcessing; // = false             // whether or not the runnable is queued/working
 
     private GlobalHistory() {
         mHandler = GeckoAppShell.getHandler();
         mPendingUris = new LinkedList<String>();
         mVisitedCache = new SoftReference<Set<String>>(null);
         mNotifierRunnable = new Runnable() {
+            @Override
             public void run() {
                 Set<String> visitedSet = mVisitedCache.get();
                 if (visitedSet == null) {
                     // the cache was wiped away, repopulate it
                     Log.w(LOGTAG, "Rebuilding visited link set...");
                     visitedSet = new HashSet<String>();
                     Cursor c = BrowserDB.getAllVisitedHistory(GeckoApp.mAppContext.getContentResolver());
                     if (c.moveToFirst()) {
@@ -127,16 +128,17 @@ class GlobalHistory {
         if (!canAddURI(uri))
             return;
 
         BrowserDB.updateHistoryTitle(GeckoApp.mAppContext.getContentResolver(), uri, title);
     }
 
     public void checkUriVisited(final String uri) {
         mHandler.post(new Runnable() {
+            @Override
             public void run() {
                 // this runs on the same handler thread as the processing loop,
                 // so no synchronization needed
                 mPendingUris.add(uri);
                 if (mProcessing) {
                     // there's already a runnable queued up or working away, so
                     // no need to post another
                     return;
--- a/mobile/android/base/JavaAddonManager.java
+++ b/mobile/android/base/JavaAddonManager.java
@@ -76,16 +76,17 @@ class JavaAddonManager implements GeckoE
             // we've already done this registration. don't do it again
             return;
         }
         mApplicationContext = applicationContext;
         mDispatcher.registerEventListener("Dex:Load", this);
         mDispatcher.registerEventListener("Dex:Unload", this);
     }
 
+    @Override
     public void handleMessage(String event, JSONObject message) {
         try {
             if (event.equals("Dex:Load")) {
                 String zipFile = message.getString("zipfile");
                 String implClass = message.getString("impl");
                 Log.d(LOGTAG, "Attempting to load classes.dex file from " + zipFile + " and instantiate " + implClass);
                 try {
                     File tmpDir = mApplicationContext.getDir("dex", 0);
@@ -168,29 +169,31 @@ class JavaAddonManager implements GeckoE
                     }
                 } catch (JSONException e) {
                     Log.d(LOGTAG, "Error during JSON->bundle conversion", e);
                 }
             }
             return b;
         }
 
+        @Override
         public void handleMessage(String event, JSONObject json) {
             try {
                 if (mBundle != null) {
                     Log.w(LOGTAG, "Event [" + event + "] handler is re-entrant; response messages may be lost");
                 }
                 mBundle = jsonToBundle(json);
                 Message msg = new Message();
                 msg.setData(mBundle);
                 mDelegate.handleMessage(msg);
             } catch (Exception e) {
                 Log.e(LOGTAG, "Caught exception thrown from wrapped addon message handler", e);
             }
         }
 
+        @Override
         public String getResponse() {
             String response = mBundle.getString("response");
             mBundle = null;
             return response;
         }
     }
 }
--- a/mobile/android/base/LauncherShortcuts.java.in
+++ b/mobile/android/base/LauncherShortcuts.java.in
@@ -177,24 +177,26 @@ public class LauncherShortcuts extends A
                 builder.setTitle(R.string.launcher_shortcuts_title);
                 builder.setAdapter(new SimpleAdapter(
                     LauncherShortcuts.this,
                     mWebappsList,
                     R.layout.launch_app_listitem,
                     new String[] { "favicon", "title" },
                     new int[] { R.id.favicon, R.id.title }
                 ), new DialogInterface.OnClickListener() {
+                    @Override
                     public void onClick(DialogInterface dialog, int id) {
                         dialog.dismiss();
                         onListItemClick(id);
                         finish();
                     }
                 });
                 
                 builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
+                    @Override
                     public void onCancel(DialogInterface dialog) {
                         dialog.dismiss();
                         finish();
                     }
                 });
                 
                 builder.create().show();
             } else {
--- a/mobile/android/base/LightweightTheme.java
+++ b/mobile/android/base/LightweightTheme.java
@@ -85,25 +85,27 @@ public class LightweightTheme implements
                     headerURL = headerURL.substring(0, mark);
                 try {
                     // Get the image and convert it to a bitmap.
                     URL url = new URL(headerURL);
                     InputStream stream = url.openStream();
                     final Bitmap bitmap = BitmapFactory.decodeStream(stream);
                     stream.close();
                     mHandler.post(new Runnable() {
+                        @Override
                         public void run() {
                             setLightweightTheme(bitmap);
                         }
                     });
                 } catch(MalformedURLException e) {
                 } catch(IOException e) {
                 }
             } else if (event.equals("LightweightTheme:Disable")) {
                 mHandler.post(new Runnable() {
+                    @Override
                     public void run() {
                         resetLightweightTheme();
                     }
                 });
             }
         } catch (Exception e) {
             Log.e(LOGTAG, "Exception handling message \"" + event + "\":", e);
         }
--- a/mobile/android/base/MultiChoicePreference.java
+++ b/mobile/android/base/MultiChoicePreference.java
@@ -144,16 +144,17 @@ class MultiChoicePreference extends Dial
         }
 
         if (mEntries.length != mEntryKeys.length || mEntryKeys.length != mInitialValues.length) {
             throw new IllegalStateException(
                     "MultiChoicePreference entries, entryKeys, and initialValues arrays must be the same length");
         }
 
         builder.setMultiChoiceItems(mEntries, mValues, new DialogInterface.OnMultiChoiceClickListener() {
+            @Override
             public void onClick(DialogInterface dialog, int which, boolean val) {
                 // mValues is automatically updated when checkboxes are clicked
 
                 // enable positive button only if at least one item is checked
                 boolean enabled = false;
                 for (int i = 0; i < mValues.length; i++) {
                     if (mValues[i]) {
                         enabled = true;
@@ -179,16 +180,17 @@ class MultiChoicePreference extends Dial
             // user cancelled; reset checkbox values to their previous state
             mValues = mPrevValues.clone();
             return;
         } else {
             mPrevValues = mValues.clone();
         }
 
         GeckoAppShell.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 for (int i = 0; i < mEntryKeys.length; i++) {
                     String key = mEntryKeys[i].toString();
                     persistBoolean(key, mValues[i]);
                 }
             }
         });
     }
@@ -227,16 +229,17 @@ class MultiChoicePreference extends Dial
         final int entryCount = mEntryKeys.length;
         if (entryCount != mEntries.length || entryCount != mInitialValues.length) {
             throw new IllegalStateException(
                     "MultiChoicePreference entryKeys and initialValues arrays must be the same length");
         }
 
         mValues = new boolean[entryCount];
         GeckoAppShell.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 for (int i = 0; i < entryCount; i++) {
                     String key = mEntryKeys[i].toString();
                     boolean initialValue = mInitialValues[i].equals("true");
                     mValues[i] = getPersistedBoolean(key, initialValue);
                 }
                 mPrevValues = mValues.clone();
             }
--- a/mobile/android/base/PrefsHelper.java
+++ b/mobile/android/base/PrefsHelper.java
@@ -145,24 +145,28 @@ public final class PrefsHelper {
     public interface PrefHandler {
         void prefValue(String pref, boolean value);
         void prefValue(String pref, int value);
         void prefValue(String pref, String value);
         void finish();
     }
 
     public static abstract class PrefHandlerBase implements PrefHandler {
+        @Override
         public void prefValue(String pref, boolean value) {
             Log.w(LOGTAG, "Unhandled boolean value for pref [" + pref + "]");
         }
 
+        @Override
         public void prefValue(String pref, int value) {
             Log.w(LOGTAG, "Unhandled int value for pref [" + pref + "]");
         }
 
+        @Override
         public void prefValue(String pref, String value) {
             Log.w(LOGTAG, "Unhandled String value for pref [" + pref + "]");
         }
 
+        @Override
         public void finish() {
         }
     }
 }
--- a/mobile/android/base/ProfileMigrator.java
+++ b/mobile/android/base/ProfileMigrator.java
@@ -605,16 +605,17 @@ public class ProfileMigrator {
             final String syncKey = mSyncSettingsMap.get("Mozilla Services Encryption Passphrase");
             final String syncPass = mSyncSettingsMap.get("Mozilla Services Password");
             final String serverURL = mSyncSettingsMap.get("services.sync.serverURL");
             final String clusterURL = mSyncSettingsMap.get("services.sync.clusterURL");
             final String clientName = mSyncSettingsMap.get("services.sync.client.name");
             final String clientGuid = mSyncSettingsMap.get("services.sync.client.GUID");
 
             GeckoAppShell.getHandler().post(new Runnable() {
+                @Override
                 public void run() {
                     if (userName == null || syncKey == null || syncPass == null) {
                         // This isn't going to work. Give up.
                         Log.e(LOGTAG, "Profile has incomplete Sync config. Not migrating.");
                         setMigratedSync();
                         return;
                     }
 
@@ -632,30 +633,32 @@ public class ProfileMigrator {
                     }
                     setMigratedSync();
                 }
             });
         }
 
         protected void registerAndRequest() {
             GeckoAppShell.getHandler().post(new Runnable() {
+                @Override
                 public void run() {
                     requestValues();
                 }
             });
         }
 
         @Override
         public void run() {
             // Run only if no Sync accounts exist.
             new SyncAccounts.AccountsExistTask() {
                 @Override
                 protected void onPostExecute(Boolean result) {
                     if (result.booleanValue()) {
                         GeckoAppShell.getHandler().post(new Runnable() {
+                            @Override
                             public void run() {
                                 Log.i(LOGTAG, "Sync account already configured, skipping.");
                                 setMigratedSync();
                             }
                         });
                     } else {
                         // No account configured, fire up.
                         registerAndRequest();
@@ -926,16 +929,17 @@ public class ProfileMigrator {
             // We're at the end if we got less results than requested.
             if (queryResultEntries < mMaxEntries) {
                 setMigratedHistory();
             }
 
             // GlobalHistory access communicates with Gecko
             // and must run on its thread.
             GeckoAppShell.getHandler().post(new Runnable() {
+                    @Override
                     public void run() {
                         for (String url : placesHistory) {
                             GlobalHistory.getInstance().addToGeckoOnly(url);
                         }
                     }
              });
         }
 
--- a/mobile/android/base/PromptService.java
+++ b/mobile/android/base/PromptService.java
@@ -179,16 +179,17 @@ public class PromptService implements On
                 input.setText(mValue);
 
                 if (!TextUtils.isEmpty(mHint)) {
                     input.setHint(mHint);
                 }
 
                 if (mAutofocus) {
                     input.setOnFocusChangeListener(new View.OnFocusChangeListener() {
+                        @Override
                         public void onFocusChange(View v, boolean hasFocus) {
                             if (hasFocus) {
                                 ((InputMethodManager) GeckoApp.mAppContext.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(v, 0);
                             }
                         }
                     });
                     input.requestFocus();
                 }
@@ -259,26 +260,29 @@ public class PromptService implements On
                     return formatDateString("yyyy-MM",calendar);
                 }
             }
             return "";
         }
     }
 
     // GeckoEventListener implementation
+    @Override
     public void handleMessage(String event, final JSONObject message) {
         // The dialog must be created on the UI thread.
         GeckoAppShell.getMainHandler().post(new Runnable() {
+            @Override
             public void run() {
                 processMessage(message);
             }
         });
     }
 
     // GeckoEventResponder implementation
+    @Override
     public String getResponse() {
         // we only handle one kind of message in handleMessage, and this is the
         // response we provide for that message
         String promptServiceResult = "";
         try {
             promptServiceResult = waitForReturn();
         } catch (InterruptedException e) { }
         return promptServiceResult;
@@ -379,16 +383,17 @@ public class PromptService implements On
             }
         }
 
         mDialog = builder.create();
         mDialog.setOnCancelListener(PromptService.this);
         mDialog.show();
     }
 
+    @Override
     public void onClick(DialogInterface aDialog, int aWhich) {
         GeckoApp.assertOnUiThread();
         JSONObject ret = new JSONObject();
         try {
             int button = -1;
             ListView list = mDialog.getListView();
             if (list != null || mSelected != null) {
                 button = aWhich;
@@ -420,21 +425,23 @@ public class PromptService implements On
 
         if (mDialog != null) {
             mDialog.dismiss();
         }
 
         finishDialog(ret.toString());
     }
 
+    @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
         GeckoApp.assertOnUiThread();
         mSelected[position] = !mSelected[position];
     }
 
+    @Override
     public void onCancel(DialogInterface aDialog) {
         GeckoApp.assertOnUiThread();
         JSONObject ret = new JSONObject();
         try {
             ret.put("button", -1);
         } catch(Exception ex) { }
         finishDialog(ret.toString());
     }
--- a/mobile/android/base/ShapedButton.java
+++ b/mobile/android/base/ShapedButton.java
@@ -16,17 +16,19 @@ public abstract class ShapedButton exten
                                               LightweightTheme.OnChangeListener { 
     protected GeckoActivity mActivity;
     protected Path mPath;
     protected CurveTowards mSide;
     protected CanvasDelegate mCanvasDelegate;
 
     protected enum CurveTowards { NONE, LEFT, RIGHT };
 
+    @Override
     abstract public void onLightweightThemeChanged();
+    @Override
     abstract public void onLightweightThemeReset();
 
     public ShapedButton(Context context, AttributeSet attrs) {
         super(context, attrs);
         mActivity = (GeckoActivity) context;
 
         TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.BrowserToolbarCurve);
         int curveTowards = a.getInt(R.styleable.BrowserToolbarCurve_curveTowards, 0x02);
--- a/mobile/android/base/Tab.java
+++ b/mobile/android/base/Tab.java
@@ -159,16 +159,17 @@ public class Tab {
             mThumbnailBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
         }
 
         return mThumbnailBitmap;
     }
 
     public void updateThumbnail(final Bitmap b) {
         GeckoAppShell.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 if (b != null) {
                     try {
                         mThumbnail = new BitmapDrawable(b);
                         if (mState == Tab.STATE_SUCCESS)
                             saveThumbnailToDB();
                     } catch (OutOfMemoryError oom) {
                         Log.w(LOGTAG, "Unable to create/scale bitmap.", oom);
@@ -316,16 +317,17 @@ public class Tab {
 
     public void setReaderEnabled(boolean readerEnabled) {
         mReaderEnabled = readerEnabled;
         Tabs.getInstance().notifyListeners(this, Tabs.TabEvents.MENU_UPDATED);
     }
 
     void updateBookmark() {
         GeckoAppShell.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 final String url = getURL();
                 if (url == null)
                     return;
 
                 if (url.equals(getURL())) {
                     mBookmark = BrowserDB.isBookmark(getContentResolver(), url);
                     mReadingListItem = BrowserDB.isReadingListItem(getContentResolver(), url);
@@ -333,28 +335,30 @@ public class Tab {
 
                 Tabs.getInstance().notifyListeners(Tab.this, Tabs.TabEvents.MENU_UPDATED);
             }
         });
     }
 
     public void addBookmark() {
         GeckoAppShell.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 String url = getURL();
                 if (url == null)
                     return;
 
                 BrowserDB.addBookmark(getContentResolver(), mTitle, url);
             }
         });
     }
 
     public void removeBookmark() {
         GeckoAppShell.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 String url = getURL();
                 if (url == null)
                     return;
 
                 BrowserDB.removeBookmarksWithURL(getContentResolver(), url);
             }
         });
@@ -541,16 +545,17 @@ public class Tab {
     }
 
     void handleDocumentStop(boolean success) {
         setState(success ? STATE_SUCCESS : STATE_ERROR);
 
         final String oldURL = getURL();
         final Tab tab = this;
         GeckoAppShell.getHandler().postDelayed(new Runnable() {
+            @Override
             public void run() {
                 // tab.getURL() may return null
                 if (!TextUtils.equals(oldURL, getURL()))
                     return;
 
                 ThumbnailHelper.getInstance().getAndProcessThumbnailFor(tab);
             }
         }, 500);
--- a/mobile/android/base/Tabs.java
+++ b/mobile/android/base/Tabs.java
@@ -82,16 +82,17 @@ public class Tabs implements GeckoEventL
     }
 
     public void attachToActivity(GeckoApp activity) {
         mActivity = activity;
         mAccountManager = AccountManager.get(mActivity);
 
         // The listener will run on the background thread (see 2nd argument)
         mAccountManager.addOnAccountsUpdatedListener(mAccountListener = new OnAccountsUpdateListener() {
+            @Override
             public void onAccountsUpdated(Account[] accounts) {
                 persistAllTabs();
             }
         }, GeckoAppShell.getHandler(), false);
         if (mContentObserver != null) {
             BrowserDB.registerBookmarkObserver(getContentResolver(), mContentObserver);
         }
     }
@@ -156,16 +157,17 @@ public class Tabs implements GeckoEventL
         final Tab tab = mTabs.get(id);
         // This avoids a NPE below, but callers need to be careful to
         // handle this case
         if (tab == null || oldTab == tab)
             return null;
 
         mSelectedTab = tab;
         mActivity.runOnUiThread(new Runnable() { 
+            @Override
             public void run() {
                 if (isSelectedTab(tab)) {
                     notifyListeners(tab, TabEvents.SELECTED);
 
                     if (oldTab != null)
                         notifyListeners(oldTab, TabEvents.UNSELECTED);
                 }
             }
@@ -276,16 +278,17 @@ public class Tabs implements GeckoEventL
     }
 
     public static Tabs getInstance() {
        return Tabs.TabsInstanceHolder.INSTANCE;
     }
 
     // GeckoEventListener implementation
 
+    @Override
     public void handleMessage(String event, JSONObject message) {
         try {
             if (event.equals("Session:RestoreEnd")) {
                 notifyListeners(null, TabEvents.RESTORED);
                 return;
             }
 
             // All other events handled below should contain a tabID property
@@ -377,16 +380,17 @@ public class Tabs implements GeckoEventL
     }
 
     public void refreshThumbnails() {
         final ThumbnailHelper helper = ThumbnailHelper.getInstance();
         Iterator<Tab> iterator = mTabs.values().iterator();
         while (iterator.hasNext()) {
             final Tab tab = iterator.next();
             GeckoAppShell.getHandler().post(new Runnable() {
+                @Override
                 public void run() {
                     helper.getAndProcessThumbnailFor(tab);
                 }
             });
         }
     }
 
     public interface OnTabsChangedListener {
@@ -432,16 +436,17 @@ public class Tabs implements GeckoEventL
     }
 
     public void notifyListeners(Tab tab, TabEvents msg) {
         notifyListeners(tab, msg, "");
     }
 
     public void notifyListeners(final Tab tab, final TabEvents msg, final Object data) {
         mActivity.runOnUiThread(new Runnable() {
+            @Override
             public void run() {
                 onTabChanged(tab, msg, data);
 
                 if (mTabsChangedListeners == null)
                     return;
 
                 Iterator<OnTabsChangedListener> items = mTabsChangedListeners.iterator();
                 while (items.hasNext()) {
@@ -476,16 +481,17 @@ public class Tabs implements GeckoEventL
             mScore = 0;
         }
     }
 
     // This method persists the current ordered list of tabs in our tabs content provider.
     public void persistAllTabs() {
         final Iterable<Tab> tabs = getTabsInOrder();
         GeckoAppShell.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 boolean syncIsSetup = SyncAccounts.syncAccountsExist(mActivity);
                 if (syncIsSetup)
                     TabsAccessor.persistLocalTabs(getContentResolver(), tabs);
             }
         });
     }
 
--- a/mobile/android/base/TabsPanel.java
+++ b/mobile/android/base/TabsPanel.java
@@ -95,16 +95,17 @@ public class TabsPanel extends LinearLay
 
         mPanelRemote = (RemoteTabs) findViewById(R.id.synced_tabs);
         mPanelRemote.setTabsPanel(this);
 
         mFooter = (RelativeLayout) findViewById(R.id.tabs_panel_footer);
 
         mAddTab = (ImageButton) findViewById(R.id.add_tab);
         mAddTab.setOnClickListener(new Button.OnClickListener() {
+            @Override
             public void onClick(View v) {
                 TabsPanel.this.addTab();
             }
         });
 
         mTabWidget = (IconTabWidget) findViewById(R.id.tab_widget);
         mTabWidget.addTab(R.drawable.tabs_normal);
         mTabWidget.addTab(R.drawable.tabs_private);
--- a/mobile/android/base/TabsTray.java
+++ b/mobile/android/base/TabsTray.java
@@ -140,24 +140,26 @@ public class TabsTray extends TwoWayView
         private Button.OnClickListener mOnCloseClickListener;
 
         public TabsAdapter(Context context, boolean isPrivate) {
             mContext = context;
             mInflater = LayoutInflater.from(mContext);
             mIsPrivate = isPrivate;
 
             mOnCloseClickListener = new Button.OnClickListener() {
+                @Override
                 public void onClick(View v) {
                     TabRow tab = (TabRow) v.getTag();
                     final int pos = (isVertical() ? tab.info.getWidth() : tab.info.getHeight());
                     animateClose(tab.info, pos);
                 }
             };
         }
 
+        @Override
         public void onTabChanged(Tab tab, Tabs.TabEvents msg, Object data) {
             switch (msg) {
                 case ADDED:
                     // Refresh the list to make sure the new tab is added in the right position.
                     refreshTabsData();
                     break;
 
                 case CLOSED:
@@ -206,24 +208,27 @@ public class TabsTray extends TwoWayView
                 TabsTray.this.setSelection(selected);
         }
 
         public void clear() {
             mTabs = null;
             notifyDataSetChanged(); // Be sure to call this whenever mTabs changes.
         }
 
+        @Override
         public int getCount() {
             return (mTabs == null ? 0 : mTabs.size());
         }
 
+        @Override
         public Tab getItem(int position) {
             return mTabs.get(position);
         }
 
+        @Override
         public long getItemId(int position) {
             return position;
         }
 
         private int getPositionForTab(Tab tab) {
             if (mTabs == null || tab == null)
                 return -1;
 
@@ -251,16 +256,17 @@ public class TabsTray extends TwoWayView
                 row.thumbnail.setImageResource(R.drawable.abouthome_thumbnail);
             else
                 row.thumbnail.setImageResource(R.drawable.tab_thumbnail_default);
 
             row.title.setText(tab.getDisplayTitle());
             row.close.setTag(row);
         }
 
+        @Override
         public View getView(int position, View convertView, ViewGroup parent) {
             TabRow row;
 
             if (convertView == null) {
                 convertView = mInflater.inflate(R.layout.tabs_row, null);
                 row = new TabRow(convertView);
                 row.close.setOnClickListener(mOnCloseClickListener);
                 convertView.setTag(row);
@@ -287,17 +293,19 @@ public class TabsTray extends TwoWayView
             animator.attach(view, Property.TRANSLATION_X, pos);
         else
             animator.attach(view, Property.TRANSLATION_Y, pos);
 
         mCloseAnimationCount++;
         mPendingClosedTabs.add(view);
 
         animator.setPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() {
+            @Override
             public void onPropertyAnimationStart() { }
+            @Override
             public void onPropertyAnimationEnd() {
                 mCloseAnimationCount--;
                 if (mCloseAnimationCount > 0)
                     return;
 
                 for (View pendingView : mPendingClosedTabs) {
                     animateFinishClose(pendingView);
                 }
@@ -321,17 +329,19 @@ public class TabsTray extends TwoWayView
         else
             animator.attach(view, Property.WIDTH, 1);
 
         TabRow tab = (TabRow)view.getTag();
         final int tabId = tab.id;
         final int originalSize = (isVertical ? view.getHeight() : view.getWidth());
 
         animator.setPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() {
+            @Override
             public void onPropertyAnimationStart() { }
+            @Override
             public void onPropertyAnimationEnd() {
                 // Reset view presentation as it will be recycled in the
                 // list view by the adapter.
                 AnimatorProxy proxy = AnimatorProxy.create(view);
                 proxy.setAlpha(1);
 
                 if (isVertical) {
                     proxy.setHeight(originalSize);
@@ -356,17 +366,19 @@ public class TabsTray extends TwoWayView
 
         if (isVertical())
             animator.attach(view, Property.TRANSLATION_X, 0);
         else
             animator.attach(view, Property.TRANSLATION_Y, 0);
 
 
         animator.setPropertyAnimationListener(new PropertyAnimator.PropertyAnimationListener() {
+            @Override
             public void onPropertyAnimationStart() { }
+            @Override
             public void onPropertyAnimationEnd() {
                 TabRow tab = (TabRow) view.getTag();
                 tab.close.setVisibility(View.VISIBLE);
             }
         });
 
         animator.start();
     }
--- a/mobile/android/base/TextSelection.java
+++ b/mobile/android/base/TextSelection.java
@@ -64,18 +64,20 @@ class TextSelection extends Layer implem
             return mStartHandle;
         } else if (name.equals("MIDDLE")) {
             return mMiddleHandle;
         } else {
             return mEndHandle;
         }
     }
 
+    @Override
     public void handleMessage(final String event, final JSONObject message) {
         mActivity.runOnUiThread(new Runnable() {
+            @Override
             public void run() {
                 try {
                     if (event.equals("TextSelection:ShowHandles")) {
                         final JSONArray handles = message.getJSONArray("handles");
                         for (int i=0; i < handles.length(); i++) {
                             String handle = handles.getString(i);
                             getHandle(handle).setVisibility(View.VISIBLE);
                         }
@@ -128,16 +130,17 @@ class TextSelection extends Layer implem
                 && FloatUtils.fuzzyEquals(mViewZoom, context.zoomFactor)) {
             return;
         }
         mViewLeft = context.viewport.left;
         mViewTop = context.viewport.top;
         mViewZoom = context.zoomFactor;
 
         mActivity.runOnUiThread(new Runnable() {
+            @Override
             public void run() {
                 mStartHandle.repositionWithViewport(context.viewport.left, context.viewport.top, context.zoomFactor);
                 mMiddleHandle.repositionWithViewport(context.viewport.left, context.viewport.top, context.zoomFactor);
                 mEndHandle.repositionWithViewport(context.viewport.left, context.viewport.top, context.zoomFactor);
             }
         });
     }
 
--- a/mobile/android/base/TextSelectionHandle.java
+++ b/mobile/android/base/TextSelectionHandle.java
@@ -63,16 +63,17 @@ class TextSelectionHandle extends ImageV
         mIsRTL = false;
         mGeckoPoint = new PointF(0.0f, 0.0f);
 
         mWidth = getResources().getDimensionPixelSize(R.dimen.text_selection_handle_width);
         mHeight = getResources().getDimensionPixelSize(R.dimen.text_selection_handle_height);
         mShadow = getResources().getDimensionPixelSize(R.dimen.text_selection_handle_shadow);
     }
 
+    @Override
     public boolean onTouch(View v, MotionEvent event) {
         switch (event.getActionMasked()) {
             case MotionEvent.ACTION_DOWN: {
                 mTouchStartX = event.getX();
                 mTouchStartY = event.getY();
 
                 int[] rect = new int[2];
                 mActivity.getLayerView().getLocationOnScreen(rect);
--- a/mobile/android/base/UiAsyncTask.java
+++ b/mobile/android/base/UiAsyncTask.java
@@ -38,32 +38,35 @@ public abstract class UiAsyncTask<Params
 
     private final class BackgroundTaskRunnable implements Runnable {
         private Params[] mParams;
 
         public BackgroundTaskRunnable(Params... params) {
             mParams = params;
         }
 
+        @Override
         public void run() {
             final Result result = doInBackground(mParams);
 
             getUiHandler().post(new Runnable() {
+                @Override
                 public void run() {
                     if (mCancelled)
                         onCancelled();
                     else
                         onPostExecute(result);
                 }
             });
         }
     }
 
     public final void execute(final Params... params) {
         getUiHandler().post(new Runnable() {
+            @Override
             public void run() {
                 onPreExecute();
                 mBackgroundThreadHandler.post(new BackgroundTaskRunnable(params));
             }
         });
     }
 
     @SuppressWarnings({"UnusedParameters"})
--- a/mobile/android/base/WebApp.java.in
+++ b/mobile/android/base/WebApp.java.in
@@ -231,20 +231,23 @@ public class WebApp extends GeckoApp {
                         Log.e(LOGTAG, "Unable to parse url: ", ex);
                     }
                 }
                 break;
             case LOADED:
                 if (mSplashscreen.getVisibility() == View.VISIBLE) {
                     Animation fadeout = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);
                     fadeout.setAnimationListener(new Animation.AnimationListener() {
+                        @Override
                         public void onAnimationEnd(Animation animation) {
                           mSplashscreen.setVisibility(View.GONE);
                         }
+                        @Override
                         public void onAnimationRepeat(Animation animation) { }
+                        @Override
                         public void onAnimationStart(Animation animation) { }
                     });
                     mSplashscreen.startAnimation(fadeout);
                 }
                 break;
             case START:
                 if (mSplashscreen.getVisibility() == View.VISIBLE) {
                     View area = findViewById(R.id.splashscreen_progress);
--- a/mobile/android/base/WebAppAllocator.java
+++ b/mobile/android/base/WebAppAllocator.java
@@ -66,16 +66,17 @@ public class WebAppAllocator {
         if (index != -1)
             return index;
 
         for (int i = 0; i < MAX_WEB_APPS; ++i) {
             if (!mPrefs.contains(appKey(i))) {
                 // found unused index i
                 final int foundIndex = i;
                 GeckoBackgroundThread.getHandler().post(new Runnable() {
+                    @Override
                     public void run() {
                         int color = 0;
                         try {
                             color = BitmapUtils.getDominantColor(aIcon);
                         } catch (Exception e) {
                             e.printStackTrace();
                         }
 
@@ -113,16 +114,17 @@ public class WebAppAllocator {
             return -1;
 
         releaseIndex(index);
         return index;
     }
 
     public synchronized void releaseIndex(final int index) {
         GeckoBackgroundThread.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 mPrefs.edit()
                     .remove(appKey(index))
                     .remove(iconKey(index))
                     .commit();
             }
         });
     }
--- a/mobile/android/base/awesomebar/AllPagesTab.java
+++ b/mobile/android/base/awesomebar/AllPagesTab.java
@@ -123,16 +123,17 @@ public class AllPagesTab extends Awesome
         if (mView == null) {
             mView = (LinearLayout) (LayoutInflater.from(mContext).inflate(R.layout.awesomebar_allpages_list, null));
             mView.setTag(TAG);
 
             ListView list = getListView();
             list.setTag(TAG);
             ((Activity)mContext).registerForContextMenu(list);
             list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+                @Override
                 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                      handleItemClick(parent, view, position, id);
                 }
             });
 
             AwesomeBarCursorAdapter adapter = getCursorAdapter();
             list.setAdapter(adapter);
             list.setOnTouchListener(mListListener);
@@ -171,16 +172,17 @@ public class AllPagesTab extends Awesome
         }
     }
 
     /**
      * Query for suggestions, but don't show them yet.
      */
     private void primeSuggestions() {
         GeckoAppShell.getHandler().post(new Runnable() {
+            @Override
             public void run() {
                 mSuggestClient.query(mSearchTerm);
             }
         });
     }
 
     private void filterSuggestions(String searchTerm) {
         // cancel previous query
@@ -205,16 +207,17 @@ public class AllPagesTab extends Awesome
     }
 
     protected AwesomeBarCursorAdapter getCursorAdapter() {
         if (mCursorAdapter == null) {
             // Load the list using a custom adapter so we can create the bitmaps
             mCursorAdapter = new AwesomeBarCursorAdapter(mContext);
 
             mCursorAdapter.setFilterQueryProvider(new FilterQueryProvider() {
+                @Override
                 public Cursor runQuery(CharSequence constraint) {
                     long start = SystemClock.uptimeMillis();
 
                     Cursor c = BrowserDB.filter(getContentResolver(), constraint, MAX_RESULTS);
                     c.getCount();
 
                     postLoadFavicons();
 
@@ -240,26 +243,28 @@ public class AllPagesTab extends Awesome
 
     private class AwesomeBarCursorItem implements AwesomeBarItem {
         private Cursor mCursor;
 
         public AwesomeBarCursorItem(Cursor cursor) {
             mCursor = cursor;
         }
 
+        @Override
         public void onClick() {
             AwesomeBarTabs.OnUrlOpenListener listener = getUrlListener();
             if (listener == null)
                 return;
 
             String url = mCursor.getString(mCursor.getColumnIndexOrThrow(URLColumns.URL));
             String title = mCursor.getString(mCursor.getColumnIndexOrThrow(URLColumns.TITLE));
             listener.onUrlOpen(url, title);
         }
 
+        @Override
         public ContextMenuSubject getSubject() {
             // Use the history id in order to allow removing history entries
             int id = mCursor.getInt(mCursor.getColumnIndexOrThrow(Combined.HISTORY_ID));
 
             String keyword = null;
             int keywordCol = mCursor.getColumnIndex(URLColumns.KEYWORD);
             if (keywordCol != -1)
                 keyword = mCursor.getString(keywordCol);
@@ -284,22 +289,24 @@ public class AllPagesTab extends Awesome
 
     private class AwesomeBarSearchEngineItem implements AwesomeBarItem {
         private String mSearchEngine;
 
         public AwesomeBarSearchEngineItem(String searchEngine) {
             mSearchEngine = searchEngine;
         }
 
+        @Override
         public void onClick() {
             AwesomeBarTabs.OnUrlOpenListener listener = getUrlListener();
             if (listener != null)
                 listener.onSearch(mSearchEngine, mSearchTerm);
         }
 
+        @Override
         public ContextMenuSubject getSubject() {
             // Do not show context menu for search engine items
             return null;
         }
     }
 
     private class AwesomeBarCursorAdapter extends SimpleCursorAdapter {
         private static final int ROW_SEARCH = 0;
@@ -453,16 +460,17 @@ public class AllPagesTab extends Awesome
             }
 
             return convertView;
         }
 
         private void bindSearchEngineView(final SearchEngine engine, final SearchEntryViewHolder viewHolder) {
             // when a suggestion is clicked, do a search
             OnClickListener clickListener = new OnClickListener() {
+                @Override
                 public void onClick(View v) {
                     AwesomeBarTabs.OnUrlOpenListener listener = getUrlListener();
                     if (listener != null) {
                         String suggestion = ((TextView) v.findViewById(R.id.suggestion_text)).getText().toString();
 
                         // If we're not clicking the user-entered view (the
                         // first suggestion item) and the search matches a URL
                         // pattern, go to that URL. Otherwise, do a search for
@@ -473,16 +481,17 @@ public class AllPagesTab extends Awesome
                             listener.onSearch(engine.name, suggestion);
                         }
                     }
                 }
             };
 
             // when a suggestion is long-clicked, copy the suggestion into the URL EditText
             OnLongClickListener longClickListener = new OnLongClickListener() {
+                @Override
                 public boolean onLongClick(View v) {
                     AwesomeBarTabs.OnUrlOpenListener listener = getUrlListener();
                     if (listener != null) {
                         String suggestion = ((TextView) v.findViewById(R.id.suggestion_text)).getText().toString();
                         listener.onEditSuggestion(suggestion);
                         return true;
                     }
                     return false;
@@ -620,16 +629,17 @@ public class AllPagesTab extends Awesome
         promptText.setText(getResources().getString(R.string.suggestions_prompt, mSearchEngines.get(0).name));
         Tab tab = Tabs.getInstance().getSelectedTab();
         if (tab != null)
             promptText.setPrivateMode(tab.isPrivate());
 
         final View yesButton = mSuggestionsOptInPrompt.findViewById(R.id.suggestions_prompt_yes);
         final View noButton = mSuggestionsOptInPrompt.findViewById(R.id.suggestions_prompt_no);
         OnClickListener listener = new OnClickListener() {
+            @Override
             public void onClick(View v) {
                 // Prevent the buttons from being clicked multiple times (bug 816902)
                 yesButton.setOnClickListener(null);
                 noButton.setOnClickListener(null);
 
                 setSuggestionsEnabled(v == yesButton);
             }
         };
@@ -662,29 +672,33 @@ public class AllPagesTab extends Awesome
         mSuggestionsOptInPrompt.setAnimation(anim1);
 
         TranslateAnimation anim2 = new TranslateAnimation(0, 0, 0, -1 * mSuggestionsOptInPrompt.getHeight());
         anim2.setDuration(ANIMATION_DURATION);
         anim2.setFillAfter(true);
         anim2.setStartOffset(anim1.getDuration());
         final LinearLayout view = (LinearLayout)getView();
         anim2.setAnimationListener(new Animation.AnimationListener() {
+            @Override
             public void onAnimationStart(Animation a) {
                 // Increase the height of the view so a gap isn't shown during animation
                 view.getLayoutParams().height = view.getHeight() +
                         mSuggestionsOptInPrompt.getHeight();
                 view.requestLayout();
             }
+            @Override
             public void onAnimationRepeat(Animation a) {}
+            @Override
             public void onAnimationEnd(Animation a) {
                 // Removing the view immediately results in a NPE in
                 // dispatchDraw(), possibly because this callback executes
                 // before drawing is finished. Posting this as a Runnable fixes
                 // the issue.
                 view.post(new Runnable() {
+                    @Override
                     public void run() {
                         view.removeView(mSuggestionsOptInPrompt);
                         getListView().clearAnimation();
                         mSuggestionsOptInPrompt = null;
 
                         if (enabled) {
                             // Reset the view height
                             view.getLayoutParams().height = LayoutParams.FILL_PARENT;
@@ -698,19 +712,21 @@ public class AllPagesTab extends Awesome
                 });
             }
         });
 
         mSuggestionsOptInPrompt.startAnimation(anim1);
         getListView().startAnimation(anim2);
     }
 
+    @Override
     public void handleMessage(String event, final JSONObject message) {
         if (event.equals("SearchEngines:Data")) {
             GeckoAppShell.getMainHandler().post(new Runnable() {
+                @Override
                 public void run() {
                     setSearchEngines(message);
                 }
             });
         }
     }
 
     public void handleItemClick(AdapterView<?> parent, View view, int position, long id) {
--- a/mobile/android/base/awesomebar/BookmarksTab.java
+++ b/mobile/android/base/awesomebar/BookmarksTab.java
@@ -62,16 +62,17 @@ public class BookmarksTab extends Awesom
             mView.setTag(TAG);
             mView.setOnTouchListener(mListListener);
 
             // We need to add the header before we set the adapter, hence make it null
             ListView list = (ListView)mView;
             list.setAdapter(null);
             list.setAdapter(getCursorAdapter());
             list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+                @Override
                 public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                     handleItemClick(parent, view, position, id);
                 }
             });
 
             if (mShowReadingList) {
                 String title = getResources().getString(R.string.bookmarks_folder_reading_list);
                 getCursorAdapter().moveToChildFolder(Bookmarks.FIXED_READING_LIST_ID, title);
@@ -363,16 +364,17 @@ public class BookmarksTab extends Awesom
         protected Cursor doInBackground(Void... arg0) {
             return BrowserDB.getBookmarksInFolder(getContentResolver(), mFolderId);
         }
 
         @Override
         protected void onPostExecute(final Cursor cursor) {
             // Hack: force this to the main thread, even though it should already be on it
             GeckoApp.mAppContext.mMainHandler.post(new Runnable() {
+                @Override
                 public void run() {
                     // this will update the cursorAdapter to use the new one if it already exists
                     // We need to add the header before we set the adapter, hence make it null
                     ListView list = (ListView)mView;
                     list.setAdapter(null);
                     list.setAdapter(getCursorAdapter(cursor));
                 }
             });
--- a/mobile/android/base/awesomebar/HistoryTab.java
+++ b/mobile/android/base/awesomebar/HistoryTab.java
@@ -68,27 +68,29 @@ public class HistoryTab extends AwesomeB
     public ListView getView() {
         if (mView == null) {
             mView = LayoutInflater.from(mContext).inflate(R.layout.awesomebar_expandable_list, null);
             ((Activity)mContext).registerForContextMenu(mView);
             mView.setTag(TAG);
 
             ExpandableListView list = (ExpandableListView)mView;
             list.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
+                @Override
                 public boolean onChildClick(ExpandableListView parent, View view,
                                              int groupPosition, int childPosition, long id) {
                     return handleItemClick(groupPosition, childPosition);
                 }
             });
 
             // This is to disallow collapsing the expandable groups in the
             // history expandable list view to mimic simpler sections. We should
             // Remove this if we decide to allow expanding/collapsing groups.
             list.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
-                 public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
+                @Override
+                public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                     return true;
                 }
             });
 
             mView.setOnTouchListener(mListListener);
 
             // We need to add the header before we set the adapter, hence make it null
             list.setAdapter(getCursorAdapter());
@@ -362,16 +364,17 @@ public class HistoryTab extends AwesomeB
                 };
                 BrowserDB.registerHistoryObserver(getContentResolver(), mContentObserver);
             }
 
             final ExpandableListView historyList = (ExpandableListView)getView();
 
             // Hack: force this to the main thread, even though it should already be on it
             GeckoApp.mAppContext.mMainHandler.post(new Runnable() {
+                @Override
                 public void run() {
                     historyList.setAdapter(mCursorAdapter);
                     expandAllGroups(historyList);
                 }
             });
 
             mQueryTask = null;
         }
--- a/mobile/android/base/db/BrowserProvider.java.in
+++ b/mobile/android/base/db/BrowserProvider.java.in
@@ -323,16 +323,17 @@ public class BrowserProvider extends Con
 
     private HashMap<String, DatabaseHelper> mDatabasePerProfile;
 
     private interface BookmarkMigrator {
         public void updateForNewTable(ContentValues bookmark);
     }
 
     private class BookmarkMigrator3to4 implements BookmarkMigrator {
+        @Override
         public void updateForNewTable(ContentValues bookmark) {
             Integer isFolder = bookmark.getAsInteger("folder");
             if (isFolder == null || isFolder != 1) {
                 bookmark.put(Bookmarks.TYPE, Bookmarks.TYPE_BOOKMARK);
             } else {
                 bookmark.put(Bookmarks.TYPE, Bookmarks.TYPE_FOLDER);
             }
 
@@ -1024,16 +1025,17 @@ public class BrowserProvider extends Con
 
                     // return early if there is no icon for this bookmark
                     if (!bookmark.has("icon")) {
                         continue;
                     }
 
                     // create icons in a separate thread to avoid blocking about:home on startup
                     GeckoBackgroundThread.getHandler().post(new Runnable() {
+                        @Override
                         public void run() {
                             try {
                                 String iconData = bookmark.getString("icon");
                                 Bitmap icon = BitmapUtils.getBitmapFromDataURI(iconData);
                                 if (icon != null) {
                                     createFavicon(db, url, icon);
                                 }
                             } catch (JSONException e) {
@@ -1066,16 +1068,17 @@ public class BrowserProvider extends Con
 
                     Field urlField = stringsClass.getField(name.replace("_title_", "_url_"));
                     int urlId = urlField.getInt(null);
                     final String url = mContext.getString(urlId);
                     createBookmark(db, title, url, pos);
 
                     // create icons in a separate thread to avoid blocking about:home on startup
                     GeckoBackgroundThread.getHandler().post(new Runnable() {
+                        @Override
                         public void run() {
                             Bitmap icon = getDefaultFaviconFromPath(name);
                             if (icon == null) {
                                 icon = getDefaultFaviconFromDrawable(name);
                             }
                             if (icon != null) {
                                 createFavicon(db, url, icon);
                             }
--- a/mobile/android/base/db/LocalBrowserDB.java
+++ b/mobile/android/base/db/LocalBrowserDB.java
@@ -92,16 +92,17 @@ public class LocalBrowserDB implements B
             appendQueryParameter(BrowserContract.PARAM_SHOW_DELETED, "1").build();
 
         mUpdateHistoryUriWithProfile = mHistoryUriWithProfile.buildUpon().
             appendQueryParameter(BrowserContract.PARAM_INCREMENT_VISITS, "true").
             appendQueryParameter(BrowserContract.PARAM_INSERT_IF_NEEDED, "true").build();
     }
 
     // Invalidate cached data
+    @Override
     public void invalidateCachedState() {
         mDesktopBookmarksExist = null;
         mReadingListItemsExist = null;
     }
 
     private Uri historyUriWithLimit(int limit) {
         return mHistoryUriWithProfile.buildUpon().appendQueryParameter(BrowserContract.PARAM_LIMIT,
                                                                        String.valueOf(limit)).build();
@@ -177,16 +178,17 @@ public class LocalBrowserDB implements B
                             projection,
                             selection,
                             selectionArgs,
                             sortOrder);
 
         return new LocalDBCursor(c);
     }
 
+    @Override
     public int getCount(ContentResolver cr, String database) {
         Cursor cursor = null;
         int count = 0;
         String[] columns = null;
         String constraint = null;
         try {
             Uri uri = null;
             if ("history".equals(database)) {
@@ -212,29 +214,31 @@ public class LocalBrowserDB implements B
         } finally {
             if (cursor != null)
                 cursor.close();
         }
         debug("Got count " + count + " for " + database);
         return count;
     }
 
+    @Override
     public Cursor filter(ContentResolver cr, CharSequence constraint, int limit) {
         return filterAllSites(cr,
                               new String[] { Combined._ID,
                                              Combined.URL,
                                              Combined.TITLE,
                                              Combined.DISPLAY,
                                              Combined.BOOKMARK_ID,
                                              Combined.HISTORY_ID },
                               constraint,
                               limit,
                               null);
     }
 
+    @Override
     public Cursor getTopSites(ContentResolver cr, int limit) {
         // Filter out sites that are pinned
         String selection = DBUtils.concatenateWhere("", Combined.URL + " NOT IN (SELECT " +
                                              Bookmarks.URL + " FROM bookmarks WHERE bookmarks." +
                                              Bookmarks.PARENT + " == ?)");
         String[] selectionArgs = DBUtils.appendSelectionArgs(new String[0], new String[] { String.valueOf(Bookmarks.FIXED_PINNED_LIST_ID) });
         return filterAllSites(cr,
                               new String[] { Combined._ID,
@@ -242,41 +246,44 @@ public class LocalBrowserDB implements B
                                              Combined.TITLE },
                               "",
                               limit,
                               BrowserDB.ABOUT_PAGES_URL_FILTER,
                               selection,
                               selectionArgs);
     }
 
+    @Override
     public void updateVisitedHistory(ContentResolver cr, String uri) {
         ContentValues values = new ContentValues();
 
         values.put(History.URL, uri);
         values.put(History.DATE_LAST_VISITED, System.currentTimeMillis());
         values.put(History.IS_DELETED, 0);
 
         // This will insert a new history entry if one for this URL
         // doesn't already exist
         cr.update(mUpdateHistoryUriWithProfile,
                   values,
                   History.URL + " = ?",
                   new String[] { uri });
     }
 
+    @Override
     public void updateHistoryTitle(ContentResolver cr, String uri, String title) {
         ContentValues values = new ContentValues();
         values.put(History.TITLE, title);
 
         cr.update(mHistoryUriWithProfile,
                   values,
                   History.URL + " = ?",
                   new String[] { uri });
     }
 
+    @Override
     public void updateHistoryEntry(ContentResolver cr, String uri, String title,
                                    long date, int visits) {
         int oldVisits = 0;
         Cursor cursor = null;
         try {
             cursor = cr.query(mHistoryUriWithProfile,
                               new String[] { History.VISITS },
                               History.URL + " = ?",
@@ -299,26 +306,28 @@ public class LocalBrowserDB implements B
         }
 
         cr.update(mHistoryUriWithProfile,
                   values,
                   History.URL + " = ?",
                   new String[] { uri });
     }
 
+    @Override
     public Cursor getAllVisitedHistory(ContentResolver cr) {
         Cursor c = cr.query(mHistoryUriWithProfile,
                             new String[] { History.URL },
                             History.VISITS + " > 0",
                             null,
                             null);
 
         return new LocalDBCursor(c);
     }
 
+    @Override
     public Cursor getRecentHistory(ContentResolver cr, int limit) {
         Cursor c = cr.query(combinedUriWithLimit(limit),
                             new String[] { Combined._ID,
                                            Combined.BOOKMARK_ID,
                                            Combined.HISTORY_ID,
                                            Combined.URL,
                                            Combined.TITLE,
                                            Combined.FAVICON,
@@ -327,38 +336,43 @@ public class LocalBrowserDB implements B
                                            Combined.VISITS },
                             History.DATE_LAST_VISITED + " > 0",
                             null,
                             History.DATE_LAST_VISITED + " DESC");
 
         return new LocalDBCursor(c);
     }
 
+    @Override
     public void expireHistory(ContentResolver cr, ExpirePriority priority) {
         Uri url = mHistoryExpireUriWithProfile;
         url = url.buildUpon().appendQueryParameter(BrowserContract.PARAM_EXPIRE_PRIORITY, priority.toString()).build();
         cr.delete(url, null, null);
     }
 
+    @Override
     public void removeHistoryEntry(ContentResolver cr, int id) {
         cr.delete(mHistoryUriWithProfile,
                   History._ID + " = ?",
                   new String[] { String.valueOf(id) });
     }
 
+    @Override
     public void removeHistoryEntry(ContentResolver cr, String url) {
         int deleted = cr.delete(mHistoryUriWithProfile,
                   History.URL + " = ?",
                   new String[] { url });
     }
 
+    @Override
     public void clearHistory(ContentResolver cr) {
         cr.delete(mHistoryUriWithProfile, null, null);
     }
 
+    @Override
     public Cursor getBookmarksInFolder(ContentResolver cr, long folderId) {
         Cursor c = null;
         boolean addDesktopFolder = false;
         boolean addReadingListFolder = false;
 
         // We always want to show mobile bookmarks in the root view.
         if (folderId == Bookmarks.FIXED_ROOT_ID) {
             folderId = getFolderIdFromGuid(cr, Bookmarks.MOBILE_FOLDER_GUID);
@@ -452,16 +466,17 @@ public class LocalBrowserDB implements B
             c.close();
         }
 
         // Cache result for future queries
         mReadingListItemsExist = (count > 0);
         return mReadingListItemsExist;
     }
 
+    @Override
     public boolean isBookmark(ContentResolver cr, String uri) {
         // This method is about normal bookmarks, not the Reading List
         int count = 0;
         try {
             Cursor c = cr.query(bookmarksUriWithLimit(1),
                                 new String[] { Bookmarks._ID },
                                 Bookmarks.URL + " = ? AND " +
                                 Bookmarks.PARENT + " != ? AND " +
@@ -474,16 +489,17 @@ public class LocalBrowserDB implements B
             c.close();
         } catch (NullPointerException e) {
             Log.e(LOGTAG, "NullPointerException in isBookmark");
         }
 
         return (count > 0);
     }
 
+    @Override
     public boolean isReadingListItem(ContentResolver cr, String uri) {
         int count = 0;
         try {
             Cursor c = cr.query(mBookmarksUriWithProfile,
                                 new String[] { Bookmarks._ID },
                                 Bookmarks.URL + " = ? AND " +
                                 Bookmarks.PARENT + " == ?",
                                 new String[] { uri,
@@ -494,16 +510,17 @@ public class LocalBrowserDB implements B
             c.close();
         } catch (NullPointerException e) {
             Log.e(LOGTAG, "NullPointerException in isReadingListItem");
         }
 
         return (count > 0);
     }
 
+    @Override
     public String getUrlForKeyword(ContentResolver cr, String keyword) {
         Cursor cursor = cr.query(mBookmarksUriWithProfile,
                                  new String[] { Bookmarks.URL },
                                  Bookmarks.KEYWORD + " = ?",
                                  new String[] { keyword },
                                  null);
 
         if (!cursor.moveToFirst()) {
@@ -596,83 +613,92 @@ public class LocalBrowserDB implements B
 
         ContentValues bumped = new ContentValues();
         bumped.put(Bookmarks.DATE_MODIFIED, now);
 
         updated = cr.update(mBookmarksUriWithProfile, bumped, where, args);
         debug("Updated " + updated + " rows to new modified time.");
     }
 
+    @Override
     public void addBookmark(ContentResolver cr, String title, String uri) {
         long folderId = getFolderIdFromGuid(cr, Bookmarks.MOBILE_FOLDER_GUID);
         addBookmarkItem(cr, title, uri, folderId);
     }
 
+    @Override
     public void removeBookmark(ContentResolver cr, int id) {
         Uri contentUri = mBookmarksUriWithProfile;
 
         // Do this now so that the item still exists!
         final String idString = String.valueOf(id);
         bumpParents(cr, Bookmarks._ID, idString);
 
         final String[] idArgs = new String[] { idString };
         final String idEquals = Bookmarks._ID + " = ?";
         cr.delete(contentUri, idEquals, idArgs);
     }
 
+    @Override
     public void removeBookmarksWithURL(ContentResolver cr, String uri) {
         Uri contentUri = mBookmarksUriWithProfile;
 
         // Do this now so that the items still exist!
         bumpParents(cr, Bookmarks.URL, uri);
 
         // Toggling bookmark on an URL should not affect the items in the reading list
         final String[] urlArgs = new String[] { uri, String.valueOf(Bookmarks.FIXED_READING_LIST_ID) };
         final String urlEquals = Bookmarks.URL + " = ? AND " + Bookmarks.PARENT + " != ?";
 
         cr.delete(contentUri, urlEquals, urlArgs);
     }
 
+    @Override
     public void addReadingListItem(ContentResolver cr, String title, String uri) {
         addBookmarkItem(cr, title, uri, Bookmarks.FIXED_READING_LIST_ID);
     }
 
+    @Override
     public void removeReadingListItemWithURL(ContentResolver cr, String uri) {
         Uri contentUri = mBookmarksUriWithProfile;
 
         // Do this now so that the items still exist!
         bumpParents(cr, Bookmarks.URL, uri);
 
         final String[] urlArgs = new String[] { uri, String.valueOf(Bookmarks.FIXED_READING_LIST_ID) };
         final String urlEquals = Bookmarks.URL + " = ? AND " + Bookmarks.PARENT + " == ?";
 
         cr.delete(contentUri, urlEquals, urlArgs);
     }
 
+    @Override
     public void registerBookmarkObserver(ContentResolver cr, ContentObserver observer) {
         cr.registerContentObserver(mBookmarksUriWithProfile, false, observer);
     }
 
+    @Override
     public void registerHistoryObserver(ContentResolver cr, ContentObserver observer) {
         cr.registerContentObserver(mHistoryUriWithProfile, false, observer);
     }
 
+    @Override
     public void updateBookmark(ContentResolver cr, int id, String uri, String title, String keyword) {
         ContentValues values = new ContentValues();
         values.put(Browser.BookmarkColumns.TITLE, title);
         values.put(Bookmarks.URL, uri);
         values.put(Bookmarks.KEYWORD, keyword);
         values.put(Bookmarks.DATE_MODIFIED, System.currentTimeMillis());
 
         cr.update(mBookmarksUriWithProfile,
                   values,
                   Bookmarks._ID + " = ?",
                   new String[] { String.valueOf(id) });
     }
 
+    @Override
     public Bitmap getFaviconForUrl(ContentResolver cr, String uri) {
         Cursor c = cr.query(mCombinedUriWithProfile,
                             new String[] { Combined.FAVICON },
                             Combined.URL + " = ?",
                             new String[] { uri },
                             null);
 
         if (!c.moveToFirst()) {
@@ -686,16 +712,17 @@ public class LocalBrowserDB implements B
         c.close();
 
         if (b == null)
             return null;
 
         return BitmapFactory.decodeByteArray(b, 0, b.length);
     }
 
+    @Override
     public String getFaviconUrlForHistoryUrl(ContentResolver cr, String uri) {
         Cursor c = cr.query(mHistoryUriWithProfile,
                             new String[] { History.FAVICON_URL },
                             Combined.URL + " = ?",
                             new String[] { uri },
                             null);
 
         if (!c.moveToFirst()) {
@@ -704,16 +731,17 @@ public class LocalBrowserDB implements B
         }
 
         String faviconUrl = c.getString(c.getColumnIndexOrThrow(History.FAVICON_URL));
         c.close();
 
         return faviconUrl;
     }
 
+    @Override
     public Cursor getFaviconsForUrls(ContentResolver cr, List<String> urls) {
         StringBuffer selection = new StringBuffer();
         String[] selectionArgs = new String[urls.size()];
 
         for (int i = 0; i < urls.size(); i++) {
           final String url = urls.get(i);
 
           if (i > 0)
@@ -725,16 +753,17 @@ public class LocalBrowserDB implements B
 
         return cr.query(mCombinedUriWithProfile,
                         new String[] { Combined.URL, Combined.FAVICON },
                         selection.toString(),
                         selectionArgs,
                         null);
     }
 
+    @Override
     public void updateFaviconForUrl(ContentResolver cr, String pageUri,
             Bitmap favicon, String faviconUri) {
         ByteArrayOutputStream stream = new ByteArrayOutputStream();
         favicon.compress(Bitmap.CompressFormat.PNG, 100, stream);
 
         ContentValues values = new ContentValues();
         values.put(Favicons.URL, faviconUri);
         values.put(Favicons.DATA, stream.toByteArray());
@@ -748,16 +777,17 @@ public class LocalBrowserDB implements B
                                 values,
                                 Favicons.URL + " = ?",
                                 new String[] { faviconUri });
 
         if (updated == 0)
             cr.insert(mFaviconsUriWithProfile, values);
     }
 
+    @Override
     public void updateThumbnailForUrl(ContentResolver cr, String uri,
             BitmapDrawable thumbnail) {
         Bitmap bitmap = thumbnail.getBitmap();
 
         ByteArrayOutputStream stream = new ByteArrayOutputStream();
         bitmap.compress(Bitmap.CompressFormat.PNG, 0, stream);
 
         ContentValues values = new ContentValues();
@@ -768,16 +798,17 @@ public class LocalBrowserDB implements B
                                 values,
                                 Thumbnails.URL + " = ?",
                                 new String[] { uri });
 
         if (updated == 0)
             cr.insert(mThumbnailsUriWithProfile, values);
     }
 
+    @Override
     public byte[] getThumbnailForUrl(ContentResolver cr, String uri) {
         Cursor c = cr.query(mThumbnailsUriWithProfile,
                             new String[] { Thumbnails.DATA },
                             Thumbnails.URL + " = ?",
                             new String[] { uri },
                             null);
 
         if (!c.moveToFirst()) {
@@ -788,16 +819,17 @@ public class LocalBrowserDB implements B
         int thumbnailIndex = c.getColumnIndexOrThrow(Thumbnails.DATA);
 
         byte[] b = c.getBlob(thumbnailIndex);
         c.close();
 
         return b;
     }
 
+    @Override
     public Cursor getThumbnailsForUrls(ContentResolver cr, List<String> urls) {
         StringBuffer selection = new StringBuffer();
         String[] selectionArgs = new String[urls.size()];
 
         for (int i = 0; i < urls.size(); i++) {
           final String url = urls.get(i);
 
           if (i > 0)
@@ -809,16 +841,17 @@ public class LocalBrowserDB implements B
 
         return cr.query(mThumbnailsUriWithProfile,
                         new String[] { Thumbnails.URL, Thumbnails.DATA },
                         selection.toString(),
                         selectionArgs,
                         null);
     }
 
+    @Override
     public void removeThumbnails(ContentResolver cr) {
         cr.delete(mThumbnailsUriWithProfile, null, null);
     }
 
     // Utility function for updating existing history using batch operations
     public void updateHistoryInBatch(ContentResolver cr,
                                      Collection<ContentProviderOperation> operations,
                                      String url, String title,
@@ -1103,16 +1136,17 @@ public class LocalBrowserDB implements B
 
         @Override
         public int getColumnIndexOrThrow(String columnName) {
             return super.getColumnIndexOrThrow(translateColumnName(columnName));
         }
     }
 
 
+    @Override
     public void pinSite(ContentResolver cr, String url, String title, int position) {
         ContentValues values = new ContentValues();
         final long now = System.currentTimeMillis();
         values.put(Bookmarks.TITLE, title);
         values.put(Bookmarks.URL, url);
         values.put(Bookmarks.PARENT, Bookmarks.FIXED_PINNED_LIST_ID);
         values.put(Bookmarks.DATE_MODIFIED, now);
         values.put(Bookmarks.POSITION, position);
@@ -1135,44 +1169,48 @@ public class LocalBrowserDB implements B
                                                String.valueOf(Bookmarks.FIXED_PINNED_LIST_ID) });
 
         // Otherwise just insert a new item
         if (updated == 0) {
             cr.insert(mBookmarksUriWithProfile, values);
         }
     }
 
+    @Override
     public Cursor getPinnedSites(ContentResolver cr, int limit) {
         return cr.query(bookmarksUriWithLimit(limit),
                         new String[] { Bookmarks._ID,
                                        Bookmarks.URL,
                                        Bookmarks.TITLE,
                                        Bookmarks.POSITION },
                         Bookmarks.PARENT + " == ?",
                         new String[] { String.valueOf(Bookmarks.FIXED_PINNED_LIST_ID) },
                         Bookmarks.POSITION + " ASC");
     }
 
+    @Override
     public void unpinSite(ContentResolver cr, int position) {
         cr.delete(mBookmarksUriWithProfile,
                   Bookmarks.PARENT + " == ? AND " + Bookmarks.POSITION + " = ?",
                   new String[] {
                       String.valueOf(Bookmarks.FIXED_PINNED_LIST_ID),
                       Integer.toString(position)
                   });
     }
 
+    @Override
     public void unpinAllSites(ContentResolver cr) {
         cr.delete(mBookmarksUriWithProfile,
                   Bookmarks.PARENT + " == ?",
                   new String[] {
                       String.valueOf(Bookmarks.FIXED_PINNED_LIST_ID)
                   });
     }
 
+    @Override
     public boolean isVisited(ContentResolver cr, String uri) {
         int count = 0;
         try {
             Cursor c = cr.query(historyUriWithLimit(1),
                                 new String[] { History._ID },
                                 History.URL + " = ?",
                                 new String[] { uri },
                                 History.URL);
--- a/mobile/android/base/db/TabsProvider.java.in
+++ b/mobile/android/base/db/TabsProvider.java.in
@@ -289,16 +289,17 @@ public class TabsProvider extends Conten
         return getDatabaseHelperForProfile(profile).getWritableDatabase();
     }
 
     @Override
     public boolean onCreate() {
         debug("Creating TabsProvider");
 
         GeckoBackgroundThread.post(new Runnable() {
+            @Override
             public void run() {
                 // Kick this off early. It is synchronized so that other callers will wait
                 try {
                     GeckoProfile.get(getContext()).getDir();
                 } catch (Exception ex) {
                     Log.e(LOGTAG, "Error getting profile dir", ex);
                 }
             }
--- a/mobile/android/base/gfx/GLController.java
+++ b/mobile/android/base/gfx/GLController.java
@@ -86,16 +86,17 @@ public class GLController {
             throw new GLControllerException("eglGetDisplay() failed");
         }
 
         mEGLConfig = chooseConfig();
 
         // updating the state in the view/controller/client should be
         // done on the main UI thread, not the GL renderer thread
         mView.post(new Runnable() {
+            @Override
             public void run() {
                 mView.setViewportSize(mWidth, mHeight);
             }
         });
     }
 
     private EGLConfig chooseConfig() {
         int[] numConfigs = new int[1];
--- a/mobile/android/base/gfx/GeckoLayerClient.java
+++ b/mobile/android/base/gfx/GeckoLayerClient.java
@@ -232,16 +232,17 @@ public class GeckoLayerClient implements
             return;
 
         mViewportMetrics = mViewportMetrics.setPageRect(rect, cssRect);
 
         // Page size is owned by the layer client, so no need to notify it of
         // this change.
 
         post(new Runnable() {
+            @Override
             public void run() {
                 mPanZoomController.pageRectUpdated();
                 mView.requestRender();
             }
         });
     }
 
     private void adjustViewport(DisplayPortMetrics displayPort) {
@@ -261,16 +262,17 @@ public class GeckoLayerClient implements
 
         GeckoAppShell.sendEventToGecko(GeckoEvent.createViewportEvent(clampedMetrics, displayPort));
     }
 
     /** Aborts any pan/zoom animation that is currently in progress. */
     private void abortPanZoomAnimation() {
         if (mPanZoomController != null) {
             post(new Runnable() {
+                @Override
                 public void run() {
                     mPanZoomController.abortAnimation();
                 }
             });
         }
     }
 
     /**
@@ -304,16 +306,17 @@ public class GeckoLayerClient implements
                 // and our zoom level (which may have diverged).
                 float scaleFactor = oldMetrics.zoomFactor / messageMetrics.zoomFactor;
                 metrics = oldMetrics.setPageRect(RectUtils.scale(messageMetrics.getPageRect(), scaleFactor), messageMetrics.getCssPageRect());
                 break;
             }
 
             final ImmutableViewportMetrics newMetrics = metrics;
             post(new Runnable() {
+                @Override
                 public void run() {
                     mGeckoViewport = newMetrics;
                 }
             });
             setViewportMetrics(newMetrics, type == ViewportMessageType.UPDATE);
             mDisplayPort = DisplayPortCalculator.calculate(getViewportMetrics(), null);
         }
         return mDisplayPort;
@@ -451,16 +454,17 @@ public class GeckoLayerClient implements
                 .setZoomFactor(zoom)
                 .setPageRect(new RectF(pageLeft, pageTop, pageRight, pageBottom),
                              new RectF(cssPageLeft, cssPageTop, cssPageRight, cssPageBottom));
             // Since we have switched to displaying a different document, we need to update any
             // viewport-related state we have lying around. This includes mGeckoViewport and
             // mViewportMetrics. Usually this information is updated via handleViewportMessage
             // while we remain on the same document.
             post(new Runnable() {
+                @Override
                 public void run() {
                     mGeckoViewport = newMetrics;
                 }
             });
             setViewportMetrics(newMetrics);
 
             Tab tab = Tabs.getInstance().getSelectedTab();
             mView.setBackgroundColor(tab.getBackgroundColor());
@@ -574,156 +578,172 @@ public class GeckoLayerClient implements
         /* Let Gecko know if the screensize has changed */
         sendResizeEventIfNecessary(false);
         if (getRedrawHint()) {
             adjustViewport(null);
         }
     }
 
     /** Implementation of LayerView.Listener */
+    @Override
     public void renderRequested() {
         try {
             GeckoAppShell.scheduleComposite();
         } catch (UnsupportedOperationException uoe) {
             // In some very rare cases this gets called before libxul is loaded,
             // so catch and ignore the exception that will throw. See bug 837821
             Log.d(LOGTAG, "Dropping renderRequested call before libxul load.");
         }
     }
 
     /** Implementation of LayerView.Listener */
+    @Override
     public void compositionPauseRequested() {
         // We need to coordinate with Gecko when pausing composition, to ensure
         // that Gecko never executes a draw event while the compositor is paused.
         // This is sent synchronously to make sure that we don't attempt to use
         // any outstanding Surfaces after we call this (such as from a
         // surfaceDestroyed notification), and to make sure that any in-flight
         // Gecko draw events have been processed.  When this returns, composition is
         // definitely paused -- it'll synchronize with the Gecko event loop, which
         // in turn will synchronize with the compositor thread.
         if (mCompositorCreated) {
             GeckoAppShell.sendEventToGeckoSync(GeckoEvent.createCompositorPauseEvent());
         }
     }
 
     /** Implementation of LayerView.Listener */
+    @Override
     public void compositionResumeRequested(int width, int height) {
         // Asking Gecko to resume the compositor takes too long (see
         // https://bugzilla.mozilla.org/show_bug.cgi?id=735230#c23), so we
         // resume the compositor directly. We still need to inform Gecko about
         // the compositor resuming, so that Gecko knows that it can now draw.
         if (mCompositorCreated) {
             GeckoAppShell.scheduleResumeComposition(width, height);
             GeckoAppShell.sendEventToGecko(GeckoEvent.createCompositorResumeEvent());
         }
     }
 
     /** Implementation of LayerView.Listener */
+    @Override
     public void sizeChanged(int width, int height) {
         // We need to make sure a draw happens synchronously at this point,
         // but resizing the surface before the SurfaceView has resized will
         // cause a visible jump.
         compositionResumeRequested(mWindowSize.width, mWindowSize.height);
     }
 
     /** Implementation of LayerView.Listener */
+    @Override
     public void surfaceChanged(int width, int height) {
         setViewportSize(width, height);
 
         // We need to make this call even when the compositor isn't currently
         // paused (e.g. during an orientation change), to make the compositor
         // aware of the changed surface.
         compositionResumeRequested(width, height);
     }
 
     /** Implementation of LayerView.Listener */
+    @Override
     public void compositorCreated() {
         mCompositorCreated = true;
     }
 
     /** Implementation of PanZoomTarget */
+    @Override
     public ImmutableViewportMetrics getViewportMetrics() {
         return mViewportMetrics;
     }
 
     /** Implementation of PanZoomTarget */
+    @Override
     public ZoomConstraints getZoomConstraints() {
         return mZoomConstraints;
     }
 
     /** Implementation of PanZoomTarget */
+    @Override
     public boolean isFullScreen() {
         return mView.isFullScreen();
     }
 
     /** Implementation of PanZoomTarget */
+    @Override
     public void setAnimationTarget(ImmutableViewportMetrics metrics) {
         if (mGeckoIsReady) {
             // We know what the final viewport of the animation is going to be, so
             // immediately request a draw of that area by setting the display port
             // accordingly. This way we should have the content pre-rendered by the
             // time the animation is done.
             DisplayPortMetrics displayPort = DisplayPortCalculator.calculate(metrics, null);
             adjustViewport(displayPort);
         }
     }
 
     /** Implementation of PanZoomTarget
      * You must hold the monitor while calling this.
      */
+    @Override
     public void setViewportMetrics(ImmutableViewportMetrics metrics) {
         setViewportMetrics(metrics, true);
     }
 
     private void setViewportMetrics(ImmutableViewportMetrics metrics, boolean notifyGecko) {
         mViewportMetrics = metrics;
         mView.requestRender();
         if (notifyGecko && mGeckoIsReady) {
             geometryChanged();
         }
         setShadowVisibility();
     }
 
     private void setShadowVisibility() {
         GeckoApp.mAppContext.mMainHandler.post(new Runnable() {
+            @Override
             public void run() {
                 if (BrowserApp.mBrowserToolbar == null) {
                     return;
                 }
                 ImmutableViewportMetrics m = mViewportMetrics;
                 BrowserApp.mBrowserToolbar.setShadowVisibility(m.viewportRectTop >= m.pageRectTop);
             }
         });
     }
 
     /** Implementation of PanZoomTarget */
+    @Override
     public void forceRedraw() {
         mForceRedraw = true;
         if (mGeckoIsReady) {
             geometryChanged();
         }
     }
 
     /** Implementation of PanZoomTarget */
+    @Override
     public boolean post(Runnable action) {
         return mView.post(action);
     }
 
     /** Implementation of PanZoomTarget */
+    @Override
     public Object getLock() {
         return this;
     }
 
     /** Implementation of PanZoomTarget
      * Converts a point from layer view coordinates to layer coordinates. In other words, given a
      * point measured in pixels from the top left corner of the layer view, returns the point in
      * pixels measured from the last scroll position we sent to Gecko, in CSS pixels. Assuming the
      * events being sent to Gecko are processed in FIFO order, this calculation should always be
      * correct.
      */
+    @Override
     public PointF convertViewPointToLayerPoint(PointF viewPoint) {
         if (!mGeckoIsReady) {
             return null;
         }
 
         ImmutableViewportMetrics viewportMetrics = mViewportMetrics;
         PointF origin = viewportMetrics.getOrigin();
         float zoom = viewportMetrics.zoomFactor;
--- a/mobile/android/base/gfx/JavaPanZoomController.java
+++ b/mobile/android/base/gfx/JavaPanZoomController.java
@@ -117,16 +117,17 @@ class JavaPanZoomController
         mEventDispatcher = eventDispatcher;
         registerEventListener(MESSAGE_ZOOM_RECT);
         registerEventListener(MESSAGE_ZOOM_PAGE);
         registerEventListener(MESSAGE_TOUCH_LISTENER);
 
         Axis.initPrefs();
     }
 
+    @Override
     public void destroy() {
         unregisterEventListener(MESSAGE_ZOOM_RECT);
         unregisterEventListener(MESSAGE_ZOOM_PAGE);
         unregisterEventListener(MESSAGE_TOUCH_LISTENER);
         mSubscroller.destroy();
         mTouchEventHandler.destroy();
     }
 
@@ -159,25 +160,27 @@ class JavaPanZoomController
     // for debugging bug 713011; it can be taken out once that is resolved.
     private void checkMainThread() {
         if (mMainThread != Thread.currentThread()) {
             // log with full stack trace
             Log.e(LOGTAG, "Uh-oh, we're running on the wrong thread!", new Exception());
         }
     }
 
+    @Override
     public void handleMessage(String event, JSONObject message) {
         try {
             if (MESSAGE_ZOOM_RECT.equals(event)) {
                 float x = (float)message.getDouble("x");
                 float y = (float)message.getDouble("y");
                 final RectF zoomRect = new RectF(x, y,
                                      x + (float)message.getDouble("w"),
                                      y + (float)message.getDouble("h"));
                 mTarget.post(new Runnable() {
+                    @Override
                     public void run() {
                         animatedZoomTo(zoomRect);
                     }
                 });
             } else if (MESSAGE_ZOOM_PAGE.equals(event)) {
                 ImmutableViewportMetrics metrics = getMetrics();
                 RectF cssPageRect = metrics.getCssPageRect();
 
@@ -186,73 +189,79 @@ class JavaPanZoomController
                 // attempt to keep zoom keep focused on the center of the viewport
                 float newHeight = viewableRect.height() * cssPageRect.width() / viewableRect.width();
                 float dh = viewableRect.height() - newHeight; // increase in the height
                 final RectF r = new RectF(0.0f,
                                     y + dh/2,
                                     cssPageRect.width(),
                                     y + dh/2 + newHeight);
                 mTarget.post(new Runnable() {
+                    @Override
                     public void run() {
                         animatedZoomTo(r);
                     }
                 });
             } else if (MESSAGE_TOUCH_LISTENER.equals(event)) {
                 int tabId = message.getInt("tabID");
                 final Tab tab = Tabs.getInstance().getTab(tabId);
                 tab.setHasTouchListeners(true);
                 mTarget.post(new Runnable() {
+                    @Override
                     public void run() {
                         if (Tabs.getInstance().isSelectedTab(tab))
                             mTouchEventHandler.setWaitForTouchListeners(true);
                     }
                 });
             }
         } catch (Exception e) {
             Log.e(LOGTAG, "Exception handling message \"" + event + "\":", e);
         }
     }
 
     /** This function MUST be called on the UI thread */
+    @Override
     public boolean onMotionEvent(MotionEvent event) {
         if (Build.VERSION.SDK_INT <= 11) {
             return false;
         }
 
         switch (event.getSource() & InputDevice.SOURCE_CLASS_MASK) {
         case InputDevice.SOURCE_CLASS_POINTER:
             switch (event.getAction() & MotionEvent.ACTION_MASK) {
             case MotionEvent.ACTION_SCROLL: return handlePointerScroll(event);
             }
             break;
         }
         return false;
     }
 
     /** This function MUST be called on the UI thread */
+    @Override
     public boolean onTouchEvent(MotionEvent event) {
         return mTouchEventHandler.handleEvent(event);
     }
 
     boolean handleEvent(MotionEvent event) {
         switch (event.getAction() & MotionEvent.ACTION_MASK) {
         case MotionEvent.ACTION_DOWN:   return handleTouchStart(event);
         case MotionEvent.ACTION_MOVE:   return handleTouchMove(event);
         case MotionEvent.ACTION_UP:     return handleTouchEnd(event);
         case MotionEvent.ACTION_CANCEL: return handleTouchCancel(event);
         }
         return false;
     }
 
     /** This function MUST be called on the UI thread */
+    @Override
     public void notifyDefaultActionPrevented(boolean prevented) {
         mTouchEventHandler.handleEventListenerAction(!prevented);
     }
 
     /** This function must be called from the UI thread. */
+    @Override
     public void abortAnimation() {
         checkMainThread();
         // this happens when gecko changes the viewport on us or if the device is rotated.
         // if that's the case, abort any animation in progress and re-zoom so that the page
         // snaps to edges. for other cases (where the user's finger(s) are down) don't do
         // anything special.
         switch (mState) {
         case FLING:
@@ -295,16 +304,17 @@ class JavaPanZoomController
             // if we enter here, we just finished a block of events whose default actions
             // were prevented by touch listeners. Now there are no touch points left, so
             // we need to reset our state and re-bounce because we might be in overscroll
             bounce();
         }
     }
 
     /** This must be called on the UI thread. */
+    @Override
     public void pageRectUpdated() {
         if (mState == PanZoomState.NOTHING) {
             synchronized (mTarget.getLock()) {
                 ImmutableViewportMetrics validated = getValidViewportMetrics();
                 if (!getMetrics().fuzzyEquals(validated)) {
                     // page size changed such that we are now in overscroll. snap to the
                     // the nearest valid viewport
                     mTarget.setViewportMetrics(validated);
@@ -612,16 +622,17 @@ class JavaPanZoomController
     }
 
     private float getVelocity() {
         float xvel = mX.getRealVelocity();
         float yvel = mY.getRealVelocity();
         return FloatMath.sqrt(xvel * xvel + yvel * yvel);
     }
 
+    @Override
     public PointF getVelocityVector() {
         return new PointF(mX.getRealVelocity(), mY.getRealVelocity());
     }
 
     private boolean stopped() {
         return getVelocity() < STOPPED_THRESHOLD;
     }
 
@@ -642,16 +653,17 @@ class JavaPanZoomController
             }
         }
     }
 
     private abstract class AnimationRunnable implements Runnable {
         private boolean mAnimationTerminated;
 
         /* This should always run on the UI thread */
+        @Override
         public final void run() {
             /*
              * Since the animation timer queues this runnable on the UI thread, it
              * is possible that even when the animation timer is cancelled, there
              * are multiple instances of this queued, so we need to have another
              * mechanism to abort. This is done by using the mAnimationTerminated flag.
              */
             if (mAnimationTerminated) {
@@ -991,16 +1003,17 @@ class JavaPanZoomController
      * scale operation. You must hold the monitor while calling this.
      */
     private void scaleWithFocus(float zoomFactor, PointF focus) {
         ImmutableViewportMetrics viewportMetrics = getMetrics();
         viewportMetrics = viewportMetrics.scaleTo(zoomFactor, focus);
         mTarget.setViewportMetrics(viewportMetrics);
     }
 
+    @Override
     public boolean getRedrawHint() {
         switch (mState) {
             case PINCHING:
             case ANIMATED_ZOOM:
             case BOUNCE:
                 // don't redraw during these because the zoom is (or might be, in the case
                 // of BOUNCE) be changing rapidly and gecko will have to redraw the entire
                 // display port area. we trigger a force-redraw upon exiting these states.
@@ -1107,22 +1120,25 @@ class JavaPanZoomController
         // clamped down to prevent overscroll, over-zoom, and other bad conditions.
         finalMetrics = getValidViewportMetrics(finalMetrics);
 
         bounce(finalMetrics, PanZoomState.ANIMATED_ZOOM);
         return true;
     }
 
     /** This function must be called from the UI thread. */
+    @Override
     public void abortPanning() {
         checkMainThread();
         bounce();
     }
 
+    @Override
     public void setOverScrollMode(int overscrollMode) {
         mX.setOverScrollMode(overscrollMode);
         mY.setOverScrollMode(overscrollMode);
     }
 
+    @Override
     public int getOverScrollMode() {
         return mX.getOverScrollMode();
     }
 }
--- a/mobile/android/base/gfx/LayerRenderer.java
+++ b/mobile/android/base/gfx/LayerRenderer.java
@@ -380,16 +380,17 @@ public class LayerRenderer implements Ta
             }
             mView.postDelayed(this, 1000L / 60L); // request another frame at 60fps
         }
 
         boolean timeToFade() {
             return !mStarted;
         }
 
+        @Override
         public void run() {
             long timeDelta = mRunAt - SystemClock.elapsedRealtime();
             if (timeDelta > 0) {
                 // the run-at time was pushed back, so reschedule
                 mView.postDelayed(this, timeDelta);
             } else {
                 // reached the run-at time, execute
                 mStarted = false;
@@ -625,16 +626,17 @@ public class LayerRenderer implements Ta
                 }
             }
 
             // Remove background color once we've painted. GeckoLayerClient is
             // responsible for setting this flag before current document is
             // composited.
             if (mView.getPaintState() == LayerView.PAINT_BEFORE_FIRST) {
                 mView.post(new Runnable() {
+                    @Override
                     public void run() {
                         mView.getChildAt(0).setBackgroundColor(Color.TRANSPARENT);
                     }
                 });
                 mView.setPaintState(LayerView.PAINT_AFTER_FIRST);
             }
         }
     }
--- a/mobile/android/base/gfx/LayerView.java
+++ b/mobile/android/base/gfx/LayerView.java
@@ -127,16 +127,17 @@ public class LayerView extends FrameLayo
             mRenderer.destroy();
         }
     }
 
     public void setTouchIntercepter(final OnInterceptTouchListener touchIntercepter) {
         // this gets run on the gecko thread, but for thread safety we want the assignment
         // on the UI thread.
         post(new Runnable() {
+            @Override
             public void run() {
                 mTouchIntercepter = touchIntercepter;
             }
         });
     }
 
     @Override
     public boolean onTouchEvent(MotionEvent event) {
@@ -423,24 +424,27 @@ public class LayerView extends FrameLayo
         void renderRequested();
         void compositionPauseRequested();
         void compositionResumeRequested(int width, int height);
         void sizeChanged(int width, int height);
         void surfaceChanged(int width, int height);
     }
 
     private class SurfaceListener implements SurfaceHolder.Callback {
+        @Override
         public void surfaceChanged(SurfaceHolder holder, int format, int width,
                                                 int height) {
             onSizeChanged(width, height);
         }
 
+        @Override
         public void surfaceCreated(SurfaceHolder holder) {
         }
 
+        @Override
         public void surfaceDestroyed(SurfaceHolder holder) {
             onDestroyed();
         }
     }
 
     /* A subclass of SurfaceView to listen to layout changes, as
      * View.OnLayoutChangeListener requires API level 11.
      */
--- a/mobile/android/base/gfx/PluginLayer.java
+++ b/mobile/android/base/gfx/PluginLayer.java
@@ -56,26 +56,28 @@ public class PluginLayer extends TileLay
         } else {
             hideView();
         }
     }
 
     private void hideView() {
         if (mViewVisible) {
             GeckoApp.mAppContext.mMainHandler.post(new Runnable() {
+                @Override
                 public void run() {
                     mView.setVisibility(View.GONE);
                     mViewVisible = false;
                 }
             });
         }
     }
 
     public void showView() {
         GeckoApp.mAppContext.mMainHandler.post(new Runnable() {
+            @Override
             public void run() {
                 if (mContainer.indexOfChild(mView) < 0) {
                     mContainer.addView(mView, mLayoutParams);
                 } else {
                     mContainer.updateViewLayout(mView, mLayoutParams);
                     mView.setVisibility(View.VISIBLE);
                 }
                 mViewVisible = true;
--- a/mobile/android/base/gfx/SubdocumentScrollHelper.java
+++ b/mobile/android/base/gfx/SubdocumentScrollHelper.java
@@ -113,19 +113,21 @@ class SubdocumentScrollHelper implements
     }
 
     boolean lastScrollSucceeded() {
         return mScrollSucceeded;
     }
 
     // GeckoEventListener implementation
 
+    @Override
     public void handleMessage(final String event, final JSONObject message) {
         // this comes in on the gecko thread; hand off the handling to the UI thread
         mUiHandler.post(new Runnable() {
+            @Override
             public void run() {
                 Log.i(LOGTAG, "Got message: " + event);
                 try {
                     if (MESSAGE_PANNING_OVERRIDE.equals(event)) {
                         mOverridePanning = true;
                         mOverrideScrollAck = true;
                         mOverrideScrollPending = false;
                         mScrollSucceeded = true;
--- a/mobile/android/base/gfx/TouchEventHandler.java
+++ b/mobile/android/base/gfx/TouchEventHandler.java
@@ -294,28 +294,30 @@ final class TouchEventHandler implements
             // pop the event we peeked above, as it is still part of the block and
             // we want to keep processing
             mEventQueue.remove();
         }
     }
 
     private class ListenerTimeoutProcessor implements Runnable {
         /* This MUST be run on the UI thread */
+        @Override
         public void run() {
             if (mProcessingBalance < 0) {
                 // gecko already responded with default-prevented notification, and so
                 // the block of events this ListenerTimeoutProcessor corresponds to have
                 // already been removed from the queue.
             } else {
                 processEventBlock(true);
             }
             mProcessingBalance++;
         }
     }
 
     // Tabs.OnTabsChangedListener implementation
 
+    @Override
     public void onTabChanged(Tab tab, Tabs.TabEvents msg, Object data) {
         if ((Tabs.getInstance().isSelectedTab(tab) && msg == Tabs.TabEvents.STOP) || msg == Tabs.TabEvents.SELECTED) {
             mWaitForTouchListeners = tab.getHasTouchListeners();
         }
     }
 }
--- a/mobile/android/base/tests/BaseTest.java.in
+++ b/mobile/android/base/tests/BaseTest.java.in
@@ -238,16 +238,17 @@ abstract class BaseTest extends Activity
 
     class VerifyUrlTest implements BooleanTest {
         private Element mUrlbar;
         private String mUrl;
         public VerifyUrlTest(Element urlbar, String url) {
             mUrlbar = urlbar;
             mUrl = url;
         }
+        @Override
         public boolean test() {
             String urlbarText = mUrlbar.getText();
             if (urlbarText.equals(mUrl)) {
                 return true;
             }
             return false;
         }
     }
@@ -372,16 +373,17 @@ abstract class BaseTest extends Activity
 
     class VerifyTitle implements BooleanTest {
         private Element mAwesomebar;
         private String mTitle;
         public VerifyTitle(Element awesomebar, String title) {
             mAwesomebar = awesomebar;
             mTitle = title;
         }
+        @Override
         public boolean test() {
             String pageTitle = mAwesomebar.getText();
             if (pageTitle.equals(mTitle)) {
                 return true;
             }
             return false;
         }
     }
@@ -518,16 +520,17 @@ abstract class BaseTest extends Activity
         Activity activity = getActivity();
         tabs = mDriver.findElement(activity, "tabs");
         addTab = mDriver.findElement(activity, "add_tab");
         final int addTabId = addTab.getId();
         mAsserter.ok(tabs.click(), "checking that tabs clicked", "tabs element clicked");
 
         // wait for addTab to appear (this is usually immediate)
         boolean success = waitForTest(new BooleanTest() {
+            @Override
             public boolean test() {
                 View addTabView = getActivity().findViewById(addTabId);
                 if (addTabView == null) {
                     return false;
                 }
                 return true;
             }
         }, MAX_WAIT_MS);
--- a/mobile/android/base/tests/testBookmark.java.in
+++ b/mobile/android/base/tests/testBookmark.java.in
@@ -108,16 +108,17 @@ public class testBookmark extends PixelT
         paintExpecter.blockUntilClear(PAINT_CLEAR_DELAY);
 
         // Clean up the bookmark we created
         deleteBookmark();
     }
 
     private boolean waitForBookmarked(final boolean isBookmarked) {
         waitForTest(new BooleanTest() {
+            @Override
             public boolean test() {
                 try {
                    return isBookmarked == (Boolean)mIsBookmarked.invoke(null, getActivity().getContentResolver(), BOOKMARK_URL);
                 } catch(java.lang.IllegalAccessException ex) {
                     mAsserter.is(true, false, "Can not call addBookmark");
                 } catch(java.lang.reflect.InvocationTargetException ex) {
                     mAsserter.is(true, false, "Error calling addBookmark");
                 }
--- a/mobile/android/base/tests/testBookmarklets.java.in
+++ b/mobile/android/base/tests/testBookmarklets.java.in
@@ -26,16 +26,17 @@ public class testBookmarklets extends Pi
 
         // load a standard page so bookmarklets work
         loadAndPaint(url);
 
         // verify that user-entered bookmarklets do *not* work
         enterUrl(js);
         mActions.sendSpecialKey(Actions.SpecialKey.ENTER);
         alerted = waitForTest(new BooleanTest() {
+            @Override
             public boolean test() {
                 return mSolo.searchButton("OK", true) || mSolo.searchText("12.34", true);
             }
         }, 3000);
         mAsserter.is(alerted, false, "Alert was not shown for user-entered bookmarklet");
 
         // add the bookmarklet to the database. there's currently no way to
         // add this using the UI, so we go through the content provider.
@@ -60,16 +61,17 @@ public class testBookmarklets extends Pi
         } else {
             mAsserter.is(true, true, "Did not find the title '" + title + "' of the bookmark in the list");
         }
         if (!found) {
             mAsserter.is(found, true, "Found the bookmark: " + js + " and clicked on it");
         }
 
         alerted = waitForTest(new BooleanTest() {
+            @Override
             public boolean test() {
                 return mSolo.searchButton("OK", true) && mSolo.searchText("12.34", true);
             }
         }, 3000);
         mAsserter.is(alerted, true, "Alert was shown for clicked bookmarklet");
 
         // remove the bookmarklet
         deleteBookmark(js);
--- a/mobile/android/base/tests/testBookmarksTab.java.in
+++ b/mobile/android/base/tests/testBookmarksTab.java.in
@@ -97,16 +97,17 @@ public class testBookmarksTab extends Ba
     private void testContextMenu(String url) {
         list = getBookmarksList();
         mSolo.waitForText(url);
 
         // wait for the bookmarks list to be populated
         View child;
         mFirstChild = null;
         boolean success = waitForTest(new BooleanTest() {
+            @Override
             public boolean test() {
                 mFirstChild = list.getChildAt(1);
                 if (mFirstChild == null) {
                     return false;
                 }
                 if (mFirstChild instanceof android.view.ViewGroup) {
                     ViewGroup group = (ViewGroup)mFirstChild;
                     if (group.getChildCount() < 1) {
--- a/mobile/android/base/tests/testBrowserProvider.java.in
+++ b/mobile/android/base/tests/testBrowserProvider.java.in
@@ -372,16 +372,17 @@ public class testBrowserProvider extends
 
             setTestName(test.getClass().getSimpleName());
             ensureEmptyDatabase();
             test.run();
         }
     }
 
     abstract class Test implements Runnable {
+        @Override
         public void run() {
             try {
                 test();
             } catch (Exception e) {
                 mAsserter.is(true, false, "Test " + this.getClass().getName() +
                         " threw exception: " + e);
             }
         }
--- a/mobile/android/base/tests/testHistory.java.in
+++ b/mobile/android/base/tests/testHistory.java.in
@@ -35,16 +35,17 @@ public class testHistory extends PixelTe
 
         final ListView hList = openHistoryList();
         mAsserter.ok(hList != null, "checking history exists", "history exists");
 
         // Click on the history item and wait for the page to load
         // wait for the history list to be populated
         mFirstChild = null;
         boolean success = waitForTest(new BooleanTest() {
+            @Override
             public boolean test() {
                 mFirstChild = hList.getChildAt(1);
                 if (mFirstChild == null) {
                     return false;
                 }
                 if (mFirstChild instanceof android.view.ViewGroup) {
                     ViewGroup group = (ViewGroup)mFirstChild;
                     if (group.getChildCount() < 1) {
--- a/mobile/android/base/tests/testHistoryTab.java.in
+++ b/mobile/android/base/tests/testHistoryTab.java.in
@@ -161,16 +161,17 @@ public class testHistoryTab extends Pixe
 
     private void testContextMenu(String url) {
         listview = getHistoryList();
         mSolo.waitForText(url);
 
         // wait for the history list to be populated
         mFirstChild = null;
         boolean success = waitForTest(new BooleanTest() {
+            @Override
             public boolean test() {
                 mFirstChild = listview.getChildAt(1);
                 if (mFirstChild == null) {
                     return false;
                 }
                 if (mFirstChild instanceof android.view.ViewGroup) {
                     ViewGroup group = (ViewGroup)mFirstChild;
                     if (group.getChildCount() < 1) {
@@ -218,16 +219,17 @@ public class testHistoryTab extends Pixe
 
         View child = listview.getChildAt(0);
         mSolo.clickOnView(child);
         // nothing should happen
 
         Actions.EventExpecter contentEventExpecter = mActions.expectGeckoEvent("DOMContentLoaded");
         mFirstChild = null;
         boolean success = waitForTest(new BooleanTest() {
+            @Override
             public boolean test() {
                 mFirstChild = listview.getChildAt(1);
                 if (mFirstChild == null) {
                     return false;
                 }
                 return true;
             }
         }, MAX_WAIT_MS);
--- a/mobile/android/base/tests/testNewTab.java.in
+++ b/mobile/android/base/tests/testNewTab.java.in
@@ -61,16 +61,17 @@ public class testNewTab extends BaseTest
         // open tabs panel
         boolean clicked = tabs.click();
         if (!clicked) {
             mAsserter.ok(clicked != false, "checking that tabs clicked", "tabs element clicked");
         }
 
         // wait for closeTab to appear (this is usually immediate)
         boolean success = waitForTest(new BooleanTest() {
+            @Override
             public boolean test() {
                 View closeTabView = getActivity().findViewById(closeTabId);
                 if (closeTabView == null) {
                     return false;
                 }
                 return true;
             }
         }, MAX_WAIT_MS);
@@ -83,16 +84,17 @@ public class testNewTab extends BaseTest
         tabCountInt = Integer.parseInt(tabCountText);
         while (tabCountInt > 1) {
             clicked = closeTab.click();
             if (!clicked) {
                 mAsserter.ok(clicked != false, "checking that close_tab clicked", "close_tab element clicked");
             }
 
             success = waitForTest(new BooleanTest() {
+                @Override
                 public boolean test() {
                     String newTabCountText = tabCount.getText();
                     int newTabCount = Integer.parseInt(newTabCountText);
                     if (newTabCount < tabCountInt) {
                         tabCountInt = newTabCount;
                         return true;
                     }
                     return false;
--- a/mobile/android/base/tests/testSearchSuggestions.java.in
+++ b/mobile/android/base/tests/testSearchSuggestions.java.in
@@ -50,16 +50,17 @@ public class testSearchSuggestions exten
         enginesEventExpecter.blockForEvent();
         connectSuggestClient(awesomeBarActivity);
 
         for (int i = 0; i < TEST_QUERY.length(); i++) {
             mActions.sendKeys(TEST_QUERY.substring(i, i+1));
 
             final String query = TEST_QUERY.substring(0, i+1);
             boolean success = waitForTest(new BooleanTest() {
+                @Override
                 public boolean test() {
                     // get the first suggestion row
                     ViewGroup suggestionGroup = (ViewGroup) awesomeBarActivity.findViewById(suggestionLayoutId);
                     if (suggestionGroup == null)
                         return false;
 
                     ArrayList<String> expected = suggestMap.get(query);
                     for (int i = 0; i < expected.size(); i++) {
@@ -112,16 +113,17 @@ public class testSearchSuggestions exten
             final Class awesomeBarTabsClass = classLoader.loadClass("org.mozilla.gecko.AwesomeBarTabs");
             final Method getAllPagesTabMethod = awesomeBarTabsClass.getMethod("getAllPagesTab");
             final View awesomeBarTabs = (View) awesomeBarActivity.findViewById(awesomeBarTabsId);
             final Class allPagesTabClass = classLoader.loadClass("org.mozilla.gecko.AllPagesTab");
             final Field suggestClientField = allPagesTabClass.getDeclaredField("mSuggestClient");
             final Object allPagesTab = getAllPagesTabMethod.invoke(awesomeBarTabs);
             suggestClientField.setAccessible(true);
             waitForTest(new BooleanTest() {
+                @Override
                 public boolean test() {
                     // wait for mSuggestClient to be set before we replace it
                     try {
                         return suggestClientField.get(allPagesTab) != null;
                     } catch (IllegalAccessException e) {
                         return false;
                     }
                 }
--- a/mobile/android/base/tests/testShareLink.java.in
+++ b/mobile/android/base/tests/testShareLink.java.in
@@ -159,16 +159,17 @@ public class testShareLink extends BaseT
         return false;
     }
 
     private ListView getDisplayedShareList() {
         final ArrayList<ListView> views = mSolo.getCurrentListViews();
 
         list = null;
         boolean success = waitForTest(new BooleanTest() {
+            @Override
             public boolean test() {
                for (ListView view : views) {
                    list = view;
                        return true;
                }
                return false;
             }
         }, MAX_WAIT_MS);
--- a/mobile/android/base/tests/testThumbnails.java.in
+++ b/mobile/android/base/tests/testThumbnails.java.in
@@ -96,16 +96,17 @@ public class testThumbnails extends Base
         private String mTitle;
         private int mColor;
 
         public ThumbnailTest(String title, int color) {
             mTitle = title;
             mColor = color;
         }
 
+        @Override
         public boolean test() {
             return getTopSiteThumbnailColor(mTitle) == mColor;
         }
     }
 
     private int getTopSiteThumbnailColor(String title) {
         ViewGroup topSites = (ViewGroup) getActivity().findViewById(mTopSitesId);
         if (topSites != null) {
--- a/mobile/android/base/widget/DateTimePicker.java
+++ b/mobile/android/base/widget/DateTimePicker.java
@@ -90,16 +90,17 @@ public class DateTimePicker extends Fram
     private Calendar mMinDate;
     private Calendar mMaxDate;
     private Calendar mCurrentDate;
     private PickersState mState;
 
     public static enum PickersState { DATE, MONTH, WEEK, TIME, DATETIME };
 
     public class OnValueChangeListener implements NumberPicker.OnValueChangeListener {
+        @Override
         public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
             updateInputState();
             mTempDate.setTimeInMillis(mCurrentDate.getTimeInMillis());
             boolean newBehavior = (Build.VERSION.SDK_INT > 10);
             if (newBehavior) {
                 if (DEBUG) Log.d(LOGTAG, "Sdk version > 10, using new behavior");
                 //The native date picker widget on these sdks increment
                 //the next field when one field reach the maximum
@@ -197,16 +198,17 @@ public class DateTimePicker extends Fram
 
     private static final NumberPicker.Formatter TWO_DIGIT_FORMATTER = new NumberPicker.Formatter() {
         final StringBuilder mBuilder = new StringBuilder();
 
         final java.util.Formatter mFmt = new java.util.Formatter(mBuilder, java.util.Locale.US);
 
         final Object[] mArgs = new Object[1];
 
+        @Override
         public String format(int value) {
             mArgs[0] = value;
             mBuilder.delete(0, mBuilder.length());
             mFmt.format("%02d", mArgs);
             return mFmt.toString();
         }
     };
 
@@ -270,16 +272,17 @@ public class DateTimePicker extends Fram
             LayoutParams layoutParams = new LayoutParams(250,280);
             mCalendar.setLayoutParams(layoutParams);
             mCalendar.setFocusable(true);
             mCalendar.setFocusableInTouchMode(true);
             mCalendar.setMaxDate(mMaxDate.getTimeInMillis());
             mCalendar.setMinDate(mMinDate.getTimeInMillis());
 
             mCalendar.setOnDateChangeListener(new CalendarView.OnDateChangeListener() {
+                @Override
                 public void onSelectedDayChange(
                     CalendarView view, int year, int month, int monthDay) {
                     mTempDate.set(year, month, monthDay);
                     setDate(mTempDate);
                     notifyDateChanged();
                 }
             });