docs: public void initialize(Context context, Locale locale, TimePickerController timePickerController,
              Timepoint initialTime, boolean is24HourMode) {
          if (mTimeInitialized) {
              Log.e(TAG, "Time has already been initialized.");
              return;
          }
  
          mController = timePickerController;
          mIs24HourMode = mAccessibilityManager.isTouchExplorationEnabled() || is24HourMode;
  
          // Initialize the circle and AM/PM circles if applicable.
          mCircleView.initialize(context, mController);
          mCircleView.invalidate();
          if (!mIs24HourMode && mController.getVersion() == TimePickerDialog.Version.VERSION_1) {
              mAmPmCirclesView.initialize(context, locale, mController, initialTime.isAM() ? AM : PM);
              mAmPmCirclesView.invalidate();
          }
  
          // Create the selection validators
          RadialTextsView.SelectionValidator secondValidator = selection -> {
              Timepoint newTime = new Timepoint(mCurrentTime.getHour(), mCurrentTime.getMinute(), selection);
              return !mController.isOutOfRange(newTime, SECOND_INDEX);
          };
          RadialTextsView.SelectionValidator minuteValidator = selection -> {
              Timepoint newTime = new Timepoint(mCurrentTime.getHour(), selection, mCurrentTime.getSecond());
              return !mController.isOutOfRange(newTime, MINUTE_INDEX);
          };
          RadialTextsView.SelectionValidator hourValidator = selection -> {
              Timepoint newTime = new Timepoint(selection, mCurrentTime.getMinute(), mCurrentTime.getSecond());
              if(!mIs24HourMode && getIsCurrentlyAmOrPm() == PM) newTime.setPM();
              if(!mIs24HourMode && getIsCurrentlyAmOrPm() == AM) newTime.setAM();
              return !mController.isOutOfRange(newTime, HOUR_INDEX);
          };
  
          // Initialize the hours and minutes numbers.
          int[] hours = {12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11};
          int[] hours_24 = {0, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23};
          int[] minutes = {0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55};
          int[] seconds = {0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55};
          String[] hoursTexts = new String[12];
          String[] innerHoursTexts = new String[12];
          String[] minutesTexts = new String[12];
          String[] secondsTexts = new String[12];
          for (int i = 0; i < 12; i++) {
              hoursTexts[i] = is24HourMode?
                      String.format(locale, "%02d", hours_24[i]) : String.format(locale, "%d", hours[i]);
              innerHoursTexts[i] = String.format(locale, "%d", hours[i]);
              minutesTexts[i] = String.format(locale, "%02d", minutes[i]);
              secondsTexts[i] = String.format(locale, "%02d", seconds[i]);
          }
          // The version 2 layout has the hours > 12 on the inner circle rather than the outer circle
          // Inner circle and outer circle should be swapped (see #411)
          if (mController.getVersion() == TimePickerDialog.Version.VERSION_2) {
              String[] temp = hoursTexts;
              hoursTexts = innerHoursTexts;
              innerHoursTexts = temp;
          }
  
          mHourRadialTextsView.initialize(context,
                  hoursTexts, (is24HourMode ? innerHoursTexts : null), mController, hourValidator, true);
          mHourRadialTextsView.setSelection(is24HourMode ? initialTime.getHour() : hours[initialTime.getHour() % 12]);
          mHourRadialTextsView.invalidate();
          mMinuteRadialTextsView.initialize(context, minutesTexts, null, mController, minuteValidator, false);
          mMinuteRadialTextsView.setSelection(initialTime.getMinute());
          mMinuteRadialTextsView.invalidate();
          mSecondRadialTextsView.initialize(context, secondsTexts, null, mController, secondValidator, false);
          mSecondRadialTextsView.setSelection(initialTime.getSecond());
          mSecondRadialTextsView.invalidate();
  
          // Initialize the currently-selected hour and minute.
          mCurrentTime = initialTime;
          int hourDegrees = (initialTime.getHour() % 12) * HOUR_VALUE_TO_DEGREES_STEP_SIZE;
          mHourRadialSelectorView.initialize(context, mController, is24HourMode, true,
                  hourDegrees, isHourInnerCircle(initialTime.getHour()));
          int minuteDegrees = initialTime.getMinute() * MINUTE_VALUE_TO_DEGREES_STEP_SIZE;
          mMinuteRadialSelectorView.initialize(context, mController, false, false,
                  minuteDegrees, false);
          int secondDegrees = initialTime.getSecond() * SECOND_VALUE_TO_DEGREES_STEP_SIZE;
          mSecondRadialSelectorView.initialize(context, mController, false, false,
                  secondDegrees, false);
  
          mTimeInitialized = true;
      }