public void rebuild(boolean eraseold) {
      if (!mHasReceivedLoadEntries && (mExtraInfoBridge == null || mHasReceivedBridgeCallback)) {
        // Don't rebuild the list until all the app entries are loaded.
        return;
      }
      if (DEBUG) Log.i(TAG, "Rebuilding app list...");
      ApplicationsState.AppFilter filterObj;
      Comparator<AppEntry> comparatorObj;
      boolean emulated = Environment.isExternalStorageEmulated();
      if (emulated) {
        mWhichSize = SIZE_TOTAL;
      } else {
        mWhichSize = SIZE_INTERNAL;
      }
      filterObj = FILTERS[mFilterMode];
      if (mOverrideFilter != null) {
        filterObj = mOverrideFilter;
      }
      if (!mManageApplications.mShowSystem) {
        filterObj = new CompoundFilter(filterObj, ApplicationsState.FILTER_DOWNLOADED_AND_LAUNCHER);
      }
      switch (mLastSortMode) {
        case R.id.sort_order_size:
          switch (mWhichSize) {
            case SIZE_INTERNAL:
              comparatorObj = ApplicationsState.INTERNAL_SIZE_COMPARATOR;
              break;
            case SIZE_EXTERNAL:
              comparatorObj = ApplicationsState.EXTERNAL_SIZE_COMPARATOR;
              break;
            default:
              comparatorObj = ApplicationsState.SIZE_COMPARATOR;
              break;
          }
          break;
        default:
          comparatorObj = ApplicationsState.ALPHA_COMPARATOR;
          break;
      }
      ArrayList<ApplicationsState.AppEntry> entries = mSession.rebuild(filterObj, comparatorObj);
      if (entries == null && !eraseold) {
        // Don't have new list yet, but can continue using the old one.
        return;
      }
      mBaseEntries = entries;
      if (mBaseEntries != null) {
        mEntries = applyPrefixFilter(mCurFilterPrefix, mBaseEntries);
      } else {
        mEntries = null;
      }
      notifyDataSetChanged();

      if (mSession.getAllApps().size() != 0
          && mManageApplications.mListContainer.getVisibility() != View.VISIBLE) {
        Utils.handleLoadingContainer(
            mManageApplications.mLoadingContainer, mManageApplications.mListContainer, true, true);
      }
      if (mManageApplications.mListType == LIST_TYPE_USAGE_ACCESS) {
        // No enabled or disabled filters for usage access.
        return;
      }

      mManageApplications.setHasDisabled(mState.haveDisabledApps());
    }