code: protected List<BubbleGlyph> getAndExpireBubbles (Name speaker)
      {
          int num = _bubbles.size();
  
          // first, get all the old bubbles belonging to the user
          List<BubbleGlyph> oldbubs = Lists.newArrayList();
          if (speaker != null) {
              for (int ii=0; ii < num; ii++) {
                  BubbleGlyph bub = _bubbles.get(ii);
                  if (bub.isSpeaker(speaker)) {
                      oldbubs.add(bub);
                  }
              }
          }
  
          // see if we need to expire this user's oldest bubble
          if (oldbubs.size() >= MAX_BUBBLES_PER_USER) {
              BubbleGlyph bub = oldbubs.remove(0);
              _bubbles.remove(bub);
              _target.abortAnimation(bub);
  
              // or some other old bubble
          } else if (num >= MAX_BUBBLES) {
              _target.abortAnimation(_bubbles.remove(0));
          }
  
          // return the speaker's old bubbles
          return oldbubs;
      }
docs: Expire a bubble, if necessary, and return the old bubbles for the specified speaker.