docs: @Nullable
      public Animator onAppear(@NonNull ViewGroup sceneRoot,
                               @Nullable TransitionValues startValues, int startVisibility,
                               @Nullable TransitionValues endValues, int endVisibility) {
          if ((mMode & MODE_IN) != MODE_IN || endValues == null) {
              return null;
          }
          if (startValues == null) {
              VisibilityInfo parentVisibilityInfo = null;
              View endParent = (View) endValues.view.getParent();
              TransitionValues startParentValues = getMatchedTransitionValues(endParent,
                      false);
              TransitionValues endParentValues = getTransitionValues(endParent, false);
              parentVisibilityInfo =
                      getVisibilityChangeInfo(startParentValues, endParentValues);
              if (parentVisibilityInfo.visibilityChange) {
                  return null;
              }
          }
          final boolean isForcedVisibility = mForcedStartVisibility != -1 ||
                  mForcedEndVisibility != -1;
          if (isForcedVisibility) {
              // Make sure that we reverse the effect of onDisappear's setTransitionAlpha(0)
              Object savedAlpha = endValues.view.getTag(R.id.transitionAlpha);
              if (savedAlpha instanceof Float) {
                  endValues.view.setAlpha((Float) savedAlpha);
                  endValues.view.setTag(R.id.transitionAlpha, null);
              }
          }
          return onAppear(sceneRoot, endValues.view, startValues, endValues);
      }