private void updateVisibleApps() {
    final HashSet<LaunchableActivity> infoList =
        mTrie.getAllStartingWith(
            stripAccents(mSearchEditText.getText().toString().toLowerCase().trim()));
    mActivityInfos.clear();
    mActivityInfos.addAll(infoList);
    mActivityInfos.addAll(mShareableActivityInfos);
    sortApps();
    Log.d("DEBUG_SEARCH", mActivityInfos.size() + "");

    mArrayAdapter.notifyDataSetChanged();
  }
  private void removeActivitiesFromPackage(String packageName) {
    final List<LaunchableActivity> launchableActivitiesToRemove =
        mLaunchableActivityPackageNameHashMap.remove(packageName);
    if (launchableActivitiesToRemove == null) {
      return;
    }
    boolean activityListChanged = false;

    for (LaunchableActivity launchableActivityToRemove : launchableActivitiesToRemove) {
      final String className = launchableActivityToRemove.getClassName();
      Log.d("SearchActivity", "removing activity " + className);
      String activityLabel = launchableActivityToRemove.getActivityLabel();
      final List<String> subwords = getAllSubwords(stripAccents(activityLabel));
      for (String subword : subwords) {
        mTrie.remove(subword, launchableActivityToRemove);
      }
      if (mActivityInfos.remove(launchableActivityToRemove)) activityListChanged = true;
      // TODO DEBUGME if uncommented the next line causes a crash.
      // mLaunchableActivityPrefs.deletePreference(className);
    }

    if (activityListChanged) mArrayAdapter.notifyDataSetChanged();
  }
  private void updateApps(final List<LaunchableActivity> updatedActivityInfos, boolean addToTrie) {

    for (LaunchableActivity launchableActivity : updatedActivityInfos) {
      final String packageName = launchableActivity.getComponent().getPackageName();
      mLaunchableActivityPackageNameHashMap.remove(packageName);
    }

    final String thisClassCanonicalName = this.getClass().getCanonicalName();
    for (LaunchableActivity launchableActivity : updatedActivityInfos) {
      final String className = launchableActivity.getComponent().getClassName();
      // don't show this activity in the launcher
      if (className.equals(thisClassCanonicalName)) {
        continue;
      }

      if (addToTrie) {
        final String activityLabel = launchableActivity.getActivityLabel();
        final List<String> subwords = getAllSubwords(stripAccents(activityLabel));
        for (String subword : subwords) {
          mTrie.put(subword, launchableActivity);
        }
      }
      final String packageName = launchableActivity.getComponent().getPackageName();

      List<LaunchableActivity> launchableActivitiesToUpdate =
          mLaunchableActivityPackageNameHashMap.remove(packageName);
      if (launchableActivitiesToUpdate == null) {
        launchableActivitiesToUpdate = new LinkedList<>();
      }
      launchableActivitiesToUpdate.add(launchableActivity);
      mLaunchableActivityPackageNameHashMap.put(packageName, launchableActivitiesToUpdate);
    }
    Log.d("SearchActivity", "updated activities: " + updatedActivityInfos.size());
    mLaunchableActivityPrefs.setAllPreferences(updatedActivityInfos);
    updateVisibleApps();
  }