private void disableNonexistentServices(int userId) {
    String flatIn =
        Settings.Secure.getStringForUser(
            mContext.getContentResolver(), mConfig.secureSettingName, userId);
    if (!TextUtils.isEmpty(flatIn)) {
      if (DEBUG) Slog.v(TAG, "flat before: " + flatIn);
      PackageManager pm = mContext.getPackageManager();
      List<ResolveInfo> installedServices =
          pm.queryIntentServicesAsUser(
              new Intent(mConfig.serviceInterface),
              PackageManager.GET_SERVICES | PackageManager.GET_META_DATA,
              userId);
      if (DEBUG) Slog.v(TAG, mConfig.serviceInterface + " services: " + installedServices);
      Set<ComponentName> installed = new ArraySet<ComponentName>();
      for (int i = 0, count = installedServices.size(); i < count; i++) {
        ResolveInfo resolveInfo = installedServices.get(i);
        ServiceInfo info = resolveInfo.serviceInfo;

        if (!mConfig.bindPermission.equals(info.permission)) {
          Slog.w(
              TAG,
              "Skipping "
                  + getCaption()
                  + " service "
                  + info.packageName
                  + "/"
                  + info.name
                  + ": it does not require the permission "
                  + mConfig.bindPermission);
          continue;
        }
        installed.add(new ComponentName(info.packageName, info.name));
      }

      String flatOut = "";
      if (!installed.isEmpty()) {
        String[] enabled = flatIn.split(ENABLED_SERVICES_SEPARATOR);
        ArrayList<String> remaining = new ArrayList<String>(enabled.length);
        for (int i = 0; i < enabled.length; i++) {
          ComponentName enabledComponent = ComponentName.unflattenFromString(enabled[i]);
          if (installed.contains(enabledComponent)) {
            remaining.add(enabled[i]);
          }
        }
        flatOut = TextUtils.join(ENABLED_SERVICES_SEPARATOR, remaining);
      }
      if (DEBUG) Slog.v(TAG, "flat after: " + flatOut);
      if (!flatIn.equals(flatOut)) {
        Settings.Secure.putStringForUser(
            mContext.getContentResolver(), mConfig.secureSettingName, flatOut, userId);
      }
    }
  }