@Override
  public void onLightweightThemeReset() {
    setBackgroundColor(getContext().getResources().getColor(R.color.background_normal));

    if (mAddons != null) {
      mAddons.resetTheme();
      mLastTabs.resetTheme();
      mRemoteTabs.resetTheme();
      ((GeckoImageView) findViewById(R.id.abouthome_logo)).resetTheme();
      ((GeckoTextView) findViewById(R.id.top_sites_title)).resetTheme();
    }
  }
  @Override
  public void onLightweightThemeReset() {
    setBackgroundResource(R.drawable.abouthome_bg_repeat);

    if (mAddons != null) {
      mAddons.resetTheme();
      mLastTabs.resetTheme();
      mRemoteTabs.resetTheme();
      ((GeckoImageView) findViewById(R.id.abouthome_logo)).resetTheme();
      ((GeckoTextView) findViewById(R.id.top_sites_title)).resetTheme();
    }
  }
  @Override
  public void onLightweightThemeChanged() {
    LightweightThemeDrawable drawable = mActivity.getLightweightTheme().getColorDrawable(this);
    if (drawable == null) return;

    drawable.setAlpha(255, 0);
    setBackgroundDrawable(drawable);

    boolean isLight = mActivity.getLightweightTheme().isLightTheme();

    if (mAddons != null) {
      mAddons.setTheme(isLight);
      mLastTabs.setTheme(isLight);
      mRemoteTabs.setTheme(isLight);
      ((GeckoImageView) findViewById(R.id.abouthome_logo)).setTheme(isLight);
      ((GeckoTextView) findViewById(R.id.top_sites_title)).setTheme(isLight);
    }
  }
  @Override
  public void onQueryTabsComplete(List<TabsAccessor.RemoteTab> tabsList) {
    ArrayList<TabsAccessor.RemoteTab> tabs = new ArrayList<TabsAccessor.RemoteTab>(tabsList);
    if (tabs == null || tabs.size() == 0) {
      mRemoteTabs.hide();
      return;
    }

    mRemoteTabs.clear();

    String client = null;

    for (TabsAccessor.RemoteTab tab : tabs) {
      if (client == null) client = tab.name;
      else if (!TextUtils.equals(client, tab.name)) break;

      final TextView row =
          (TextView)
              mInflater.inflate(
                  R.layout.abouthome_remote_tab_row, mRemoteTabs.getItemsContainer(), false);
      row.setText(TextUtils.isEmpty(tab.title) ? tab.url : tab.title);
      row.setTag(tab.url);
      mRemoteTabs.addItem(row);
      row.setOnClickListener(mRemoteTabClickListener);
    }

    mRemoteTabs.setSubtitle(client);
    mRemoteTabs.show();
  }
  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() {
          public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            Cursor c = (Cursor) parent.getItemAtPosition(position);

            String spec = c.getString(c.getColumnIndex(URLColumns.URL));
            Log.i(LOGTAG, "clicked: " + spec);

            if (mUriLoadCallback != null) mUriLoadCallback.callback(spec);
          }
        });

    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() {
          public void onClick(View v) {
            if (mUriLoadCallback != null)
              mUriLoadCallback.callback("https://addons.mozilla.org/android");
          }
        });

    mRemoteTabs.setOnMoreTextClickListener(
        new View.OnClickListener() {
          public void onClick(View v) {
            mActivity.showRemoteTabs();
          }
        });

    setTopSitesConstants();
  }
 void setLastTabsVisibility(boolean visible) {
   if (visible) mLastTabs.show();
   else mLastTabs.hide();
 }
  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() {
          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() {
          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
            // We can assume that the adapter count and view count are the same in this case because
            // our grid view
            // force all items to be visible all the time
            View view = mTopSitesGrid.getChildAt(info.position);
            TopSitesViewHolder holder = (TopSitesViewHolder) view.getTag();
            if (TextUtils.isEmpty(holder.getUrl())) {
              menu.findItem(R.id.abouthome_topsites_pin).setVisible(false);
              menu.findItem(R.id.abouthome_topsites_unpin).setVisible(false);
              menu.findItem(R.id.abouthome_topsites_remove).setVisible(false);
            } else if (holder.isPinned()) {
              menu.findItem(R.id.abouthome_topsites_pin).setVisible(false);
            } else {
              menu.findItem(R.id.abouthome_topsites_unpin).setVisible(false);
            }
          }
        });

    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() {
          public void onClick(View v) {
            if (mUriLoadCallback != null)
              mUriLoadCallback.callback("https://addons.mozilla.org/android");
          }
        });

    mRemoteTabs.setOnMoreTextClickListener(
        new View.OnClickListener() {
          public void onClick(View v) {
            mActivity.showRemoteTabs();
          }
        });

    setTopSitesConstants();
  }
  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() {
          public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
            TopSitesViewHolder holder = (TopSitesViewHolder) v.getTag();
            String spec = holder.url;

            // 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() {
          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
            TopSitesCursorWrapper cursor = (TopSitesCursorWrapper) mTopSitesAdapter.getCursor();
            if (!cursor.hasPinnedSites()) {
              menu.findItem(R.id.abouthome_topsites_unpin).setVisible(false);
            } else {
              PinnedSite site = cursor.getPinnedSite(info.position);
              if (site == null) {
                // If there's nothing pinned here, hide the clear item
                menu.findItem(R.id.abouthome_topsites_unpin).setVisible(false);
              } else {
                menu.findItem(R.id.abouthome_topsites_pin).setVisible(false);
              }
            }
          }
        });

    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() {
          public void onClick(View v) {
            if (mUriLoadCallback != null)
              mUriLoadCallback.callback("https://addons.mozilla.org/android");
          }
        });

    mRemoteTabs.setOnMoreTextClickListener(
        new View.OnClickListener() {
          public void onClick(View v) {
            mActivity.showRemoteTabs();
          }
        });

    setTopSitesConstants();
  }