docs: protected void end() {
          --mNumInstances;
          if (mNumInstances == 0) {
              if (mListeners != null && mListeners.size() > 0) {
                  ArrayList<TransitionListener> tmpListeners =
                          (ArrayList<TransitionListener>) mListeners.clone();
                  int numListeners = tmpListeners.size();
                  for (int i = 0; i < numListeners; ++i) {
                      tmpListeners.get(i).onTransitionEnd(this);
                  }
              }
              for (int i = 0; i < mStartValues.itemIdValues.size(); ++i) {
                  View view = mStartValues.itemIdValues.valueAt(i);
                  if (view != null) {
                      ViewUtils.setHasTransientState(view, false);
                  }
              }
              for (int i = 0; i < mEndValues.itemIdValues.size(); ++i) {
                  View view = mEndValues.itemIdValues.valueAt(i);
                  if (view != null) {
                      ViewUtils.setHasTransientState(view, false);
                  }
              }
              mEnded = true;
          }
      }