@Override
 public void onAllSizesComputed() {
   if (mLastSortMode == SORT_ORDER_SIZE) {
     rebuild(false);
   }
   mTab.updateStorageUsage();
 }
 @Override
 protected void publishResults(CharSequence constraint, FilterResults results) {
   mCurFilterPrefix = constraint;
   mEntries = (ArrayList<ApplicationsState.AppEntry>) results.values;
   notifyDataSetChanged();
   mTab.updateStorageUsage();
 }
  public void updateCurrentTab(int position) {
    TabInfo tab = mTabs.get(position);
    mCurTab = tab;

    // Put things in the correct paused/resumed state.
    if (mActivityResumed) {
      mCurTab.build(mInflater, mContentContainer, mRootView);
      mCurTab.resume(mSortOrder);
    } else {
      mCurTab.pause();
    }
    for (int i = 0; i < mTabs.size(); i++) {
      TabInfo t = mTabs.get(i);
      if (t != mCurTab) {
        t.pause();
      }
    }

    mCurTab.updateStorageUsage();
    updateOptionsMenu();
    final Activity host = getActivity();
    if (host != null) {
      host.invalidateOptionsMenu();
    }
  }
 @Override
 public void onRebuildComplete(ArrayList<AppEntry> apps) {
   if (mTab.mLoadingContainer.getVisibility() == View.VISIBLE) {
     mTab.mLoadingContainer.startAnimation(
         AnimationUtils.loadAnimation(mContext, android.R.anim.fade_out));
     mTab.mListContainer.startAnimation(
         AnimationUtils.loadAnimation(mContext, android.R.anim.fade_in));
   }
   mTab.mListContainer.setVisibility(View.VISIBLE);
   mTab.mLoadingContainer.setVisibility(View.GONE);
   mWaitingForData = false;
   mBaseEntries = apps;
   mEntries = applyPrefixFilter(mCurFilterPrefix, mBaseEntries);
   notifyDataSetChanged();
   mTab.updateStorageUsage();
 }
 @Override
 public void onPackageSizeChanged(String packageName) {
   for (int i = 0; i < mActive.size(); i++) {
     AppViewHolder holder = (AppViewHolder) mActive.get(i).getTag();
     if (holder.entry.info.packageName.equals(packageName)) {
       synchronized (holder.entry) {
         holder.updateSizeText(mTab.mInvalidSizeStr, mWhichSize);
       }
       if (holder.entry.info.packageName.equals(mTab.mOwner.mCurrentPkgName)
           && mLastSortMode == SORT_ORDER_SIZE) {
         // We got the size information for the last app the
         // user viewed, and are sorting by size...  they may
         // have cleared data, so we immediately want to resort
         // the list with the new size to reflect it to the user.
         rebuild(false);
       }
       mTab.updateStorageUsage();
       return;
     }
   }
 }
    public void rebuild(boolean eraseold) {
      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;
      }
      switch (mFilterMode) {
        case FILTER_APPS_THIRD_PARTY:
          filterObj = ApplicationsState.THIRD_PARTY_FILTER;
          break;
        case FILTER_APPS_SDCARD:
          filterObj = ApplicationsState.ON_SD_CARD_FILTER;
          if (!emulated) {
            mWhichSize = SIZE_EXTERNAL;
          }
          break;
        default:
          filterObj = null;
          break;
      }
      switch (mLastSortMode) {
        case 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();
      mTab.updateStorageUsage();

      if (entries == null) {
        mWaitingForData = true;
        mTab.mListContainer.setVisibility(View.INVISIBLE);
        mTab.mLoadingContainer.setVisibility(View.VISIBLE);
      } else {
        mTab.mListContainer.setVisibility(View.VISIBLE);
        mTab.mLoadingContainer.setVisibility(View.GONE);
      }
    }