001// Copyright (c) FIRST and other WPILib contributors.
002// Open Source Software; you can modify and/or share it under the terms of
003// the WPILib BSD license file in the root directory of this project.
004
005// THIS FILE WAS AUTO-GENERATED BY ./wpilibj/generate_hids.py. DO NOT MODIFY
006
007package edu.wpi.first.wpilibj;
008
009// import edu.wpi.first.hal.FRCNetComm.tResourceType;
010// import edu.wpi.first.hal.HAL;
011import edu.wpi.first.util.sendable.Sendable;
012import edu.wpi.first.util.sendable.SendableBuilder;
013import edu.wpi.first.wpilibj.event.BooleanEvent;
014import edu.wpi.first.wpilibj.event.EventLoop;
015
016/**
017 * Handle input from Stadia controllers connected to the Driver Station.
018 *
019 * <p>This class handles Stadia input that comes from the Driver Station. Each time a value is
020 * requested the most recent value is returned. There is a single class instance for each controller
021 * and the mapping of ports to hardware buttons depends on the code in the Driver Station.
022 *
023 * <p>Only first party controllers from Google are guaranteed to have the correct mapping, and
024 * only through the official NI DS. Sim is not guaranteed to have the same mapping, as well as any
025 * 3rd party controllers.
026 */
027public class StadiaController extends GenericHID implements Sendable {
028  /** Represents a digital button on a StadiaController. */
029  public enum Button {
030    /** A button. */
031    kA(1),
032    /** B button. */
033    kB(2),
034    /** X button. */
035    kX(3),
036    /** Y button. */
037    kY(4),
038    /** Left bumper button. */
039    kLeftBumper(5),
040    /** Right bumper button. */
041    kRightBumper(6),
042    /** Left stick button. */
043    kLeftStick(7),
044    /** Right stick button. */
045    kRightStick(8),
046    /** Ellipses button. */
047    kEllipses(9),
048    /** Hamburger button. */
049    kHamburger(10),
050    /** Stadia button. */
051    kStadia(11),
052    /** Right trigger button. */
053    kRightTrigger(12),
054    /** Left trigger button. */
055    kLeftTrigger(13),
056    /** Google button. */
057    kGoogle(14),
058    /** Frame button. */
059    kFrame(15);
060
061    /** Button value. */
062    public final int value;
063
064    Button(int value) {
065      this.value = value;
066    }
067
068    /**
069     * Get the human-friendly name of the button, matching the relevant methods. This is done by
070     * stripping the leading `k`, and appending `Button`.
071     *
072     * <p>Primarily used for automated unit tests.
073     *
074     * @return the human-friendly name of the button.
075     */
076    @Override
077    public String toString() {
078      // Remove leading `k`
079      return this.name().substring(1) + "Button";
080    }
081  }
082
083  /** Represents an axis on an StadiaController. */
084  public enum Axis {
085    /** Left X axis. */
086    kLeftX(0),
087    /** Right X axis. */
088    kRightX(3),
089    /** Left Y axis. */
090    kLeftY(1),
091    /** Right Y axis. */
092    kRightY(4);
093
094    /** Axis value. */
095    public final int value;
096
097    Axis(int value) {
098      this.value = value;
099    }
100
101    /**
102     * Get the human-friendly name of the axis, matching the relevant methods. This is done by
103     * stripping the leading `k`, and appending `Axis` if the name ends with `Trigger`.
104     *
105     * <p>Primarily used for automated unit tests.
106     *
107     * @return the human-friendly name of the axis.
108     */
109    @Override
110    public String toString() {
111      var name = this.name().substring(1); // Remove leading `k`
112      if (name.endsWith("Trigger")) {
113        return name + "Axis";
114      }
115      return name;
116    }
117  }
118
119  /**
120   * Construct an instance of a controller.
121   *
122   * @param port The port index on the Driver Station that the controller is plugged into (0-5).
123   */
124  public StadiaController(final int port) {
125    super(port);
126    // HAL.report(tResourceType.kResourceType_StadiaController, port + 1);
127  }
128
129  /**
130   * Get the X axis value of left side of the controller. Right is positive.
131   *
132   * @return The axis value.
133   */
134  public double getLeftX() {
135    return getRawAxis(Axis.kLeftX.value);
136  }
137
138  /**
139   * Get the X axis value of right side of the controller. Right is positive.
140   *
141   * @return The axis value.
142   */
143  public double getRightX() {
144    return getRawAxis(Axis.kRightX.value);
145  }
146
147  /**
148   * Get the Y axis value of left side of the controller. Back is positive.
149   *
150   * @return The axis value.
151   */
152  public double getLeftY() {
153    return getRawAxis(Axis.kLeftY.value);
154  }
155
156  /**
157   * Get the Y axis value of right side of the controller. Back is positive.
158   *
159   * @return The axis value.
160   */
161  public double getRightY() {
162    return getRawAxis(Axis.kRightY.value);
163  }
164
165  /**
166   * Read the value of the A button on the controller.
167   *
168   * @return The state of the button.
169   */
170  public boolean getAButton() {
171    return getRawButton(Button.kA.value);
172  }
173
174  /**
175   * Whether the A button was pressed since the last check.
176   *
177   * @return Whether the button was pressed since the last check.
178   */
179  public boolean getAButtonPressed() {
180    return getRawButtonPressed(Button.kA.value);
181  }
182
183  /**
184   * Whether the A button was released since the last check.
185   *
186   * @return Whether the button was released since the last check.
187   */
188  public boolean getAButtonReleased() {
189    return getRawButtonReleased(Button.kA.value);
190  }
191
192  /**
193   * Constructs an event instance around the A button's digital signal.
194   *
195   * @param loop the event loop instance to attach the event to.
196   * @return an event instance representing the A button's digital signal
197   *     attached to the given loop.
198   */
199  public BooleanEvent a(EventLoop loop) {
200    return button(Button.kA.value, loop);
201  }
202
203  /**
204   * Read the value of the B button on the controller.
205   *
206   * @return The state of the button.
207   */
208  public boolean getBButton() {
209    return getRawButton(Button.kB.value);
210  }
211
212  /**
213   * Whether the B button was pressed since the last check.
214   *
215   * @return Whether the button was pressed since the last check.
216   */
217  public boolean getBButtonPressed() {
218    return getRawButtonPressed(Button.kB.value);
219  }
220
221  /**
222   * Whether the B button was released since the last check.
223   *
224   * @return Whether the button was released since the last check.
225   */
226  public boolean getBButtonReleased() {
227    return getRawButtonReleased(Button.kB.value);
228  }
229
230  /**
231   * Constructs an event instance around the B button's digital signal.
232   *
233   * @param loop the event loop instance to attach the event to.
234   * @return an event instance representing the B button's digital signal
235   *     attached to the given loop.
236   */
237  public BooleanEvent b(EventLoop loop) {
238    return button(Button.kB.value, loop);
239  }
240
241  /**
242   * Read the value of the X button on the controller.
243   *
244   * @return The state of the button.
245   */
246  public boolean getXButton() {
247    return getRawButton(Button.kX.value);
248  }
249
250  /**
251   * Whether the X button was pressed since the last check.
252   *
253   * @return Whether the button was pressed since the last check.
254   */
255  public boolean getXButtonPressed() {
256    return getRawButtonPressed(Button.kX.value);
257  }
258
259  /**
260   * Whether the X button was released since the last check.
261   *
262   * @return Whether the button was released since the last check.
263   */
264  public boolean getXButtonReleased() {
265    return getRawButtonReleased(Button.kX.value);
266  }
267
268  /**
269   * Constructs an event instance around the X button's digital signal.
270   *
271   * @param loop the event loop instance to attach the event to.
272   * @return an event instance representing the X button's digital signal
273   *     attached to the given loop.
274   */
275  public BooleanEvent x(EventLoop loop) {
276    return button(Button.kX.value, loop);
277  }
278
279  /**
280   * Read the value of the Y button on the controller.
281   *
282   * @return The state of the button.
283   */
284  public boolean getYButton() {
285    return getRawButton(Button.kY.value);
286  }
287
288  /**
289   * Whether the Y button was pressed since the last check.
290   *
291   * @return Whether the button was pressed since the last check.
292   */
293  public boolean getYButtonPressed() {
294    return getRawButtonPressed(Button.kY.value);
295  }
296
297  /**
298   * Whether the Y button was released since the last check.
299   *
300   * @return Whether the button was released since the last check.
301   */
302  public boolean getYButtonReleased() {
303    return getRawButtonReleased(Button.kY.value);
304  }
305
306  /**
307   * Constructs an event instance around the Y button's digital signal.
308   *
309   * @param loop the event loop instance to attach the event to.
310   * @return an event instance representing the Y button's digital signal
311   *     attached to the given loop.
312   */
313  public BooleanEvent y(EventLoop loop) {
314    return button(Button.kY.value, loop);
315  }
316
317  /**
318   * Read the value of the left bumper button on the controller.
319   *
320   * @return The state of the button.
321   */
322  public boolean getLeftBumperButton() {
323    return getRawButton(Button.kLeftBumper.value);
324  }
325
326  /**
327   * Whether the left bumper button was pressed since the last check.
328   *
329   * @return Whether the button was pressed since the last check.
330   */
331  public boolean getLeftBumperButtonPressed() {
332    return getRawButtonPressed(Button.kLeftBumper.value);
333  }
334
335  /**
336   * Whether the left bumper button was released since the last check.
337   *
338   * @return Whether the button was released since the last check.
339   */
340  public boolean getLeftBumperButtonReleased() {
341    return getRawButtonReleased(Button.kLeftBumper.value);
342  }
343
344  /**
345   * Constructs an event instance around the left bumper button's digital signal.
346   *
347   * @param loop the event loop instance to attach the event to.
348   * @return an event instance representing the left bumper button's digital signal
349   *     attached to the given loop.
350   */
351  public BooleanEvent leftBumper(EventLoop loop) {
352    return button(Button.kLeftBumper.value, loop);
353  }
354
355  /**
356   * Read the value of the right bumper button on the controller.
357   *
358   * @return The state of the button.
359   */
360  public boolean getRightBumperButton() {
361    return getRawButton(Button.kRightBumper.value);
362  }
363
364  /**
365   * Whether the right bumper button was pressed since the last check.
366   *
367   * @return Whether the button was pressed since the last check.
368   */
369  public boolean getRightBumperButtonPressed() {
370    return getRawButtonPressed(Button.kRightBumper.value);
371  }
372
373  /**
374   * Whether the right bumper button was released since the last check.
375   *
376   * @return Whether the button was released since the last check.
377   */
378  public boolean getRightBumperButtonReleased() {
379    return getRawButtonReleased(Button.kRightBumper.value);
380  }
381
382  /**
383   * Constructs an event instance around the right bumper button's digital signal.
384   *
385   * @param loop the event loop instance to attach the event to.
386   * @return an event instance representing the right bumper button's digital signal
387   *     attached to the given loop.
388   */
389  public BooleanEvent rightBumper(EventLoop loop) {
390    return button(Button.kRightBumper.value, loop);
391  }
392
393  /**
394   * Read the value of the left stick button on the controller.
395   *
396   * @return The state of the button.
397   */
398  public boolean getLeftStickButton() {
399    return getRawButton(Button.kLeftStick.value);
400  }
401
402  /**
403   * Whether the left stick button was pressed since the last check.
404   *
405   * @return Whether the button was pressed since the last check.
406   */
407  public boolean getLeftStickButtonPressed() {
408    return getRawButtonPressed(Button.kLeftStick.value);
409  }
410
411  /**
412   * Whether the left stick button was released since the last check.
413   *
414   * @return Whether the button was released since the last check.
415   */
416  public boolean getLeftStickButtonReleased() {
417    return getRawButtonReleased(Button.kLeftStick.value);
418  }
419
420  /**
421   * Constructs an event instance around the left stick button's digital signal.
422   *
423   * @param loop the event loop instance to attach the event to.
424   * @return an event instance representing the left stick button's digital signal
425   *     attached to the given loop.
426   */
427  public BooleanEvent leftStick(EventLoop loop) {
428    return button(Button.kLeftStick.value, loop);
429  }
430
431  /**
432   * Read the value of the right stick button on the controller.
433   *
434   * @return The state of the button.
435   */
436  public boolean getRightStickButton() {
437    return getRawButton(Button.kRightStick.value);
438  }
439
440  /**
441   * Whether the right stick button was pressed since the last check.
442   *
443   * @return Whether the button was pressed since the last check.
444   */
445  public boolean getRightStickButtonPressed() {
446    return getRawButtonPressed(Button.kRightStick.value);
447  }
448
449  /**
450   * Whether the right stick button was released since the last check.
451   *
452   * @return Whether the button was released since the last check.
453   */
454  public boolean getRightStickButtonReleased() {
455    return getRawButtonReleased(Button.kRightStick.value);
456  }
457
458  /**
459   * Constructs an event instance around the right stick button's digital signal.
460   *
461   * @param loop the event loop instance to attach the event to.
462   * @return an event instance representing the right stick button's digital signal
463   *     attached to the given loop.
464   */
465  public BooleanEvent rightStick(EventLoop loop) {
466    return button(Button.kRightStick.value, loop);
467  }
468
469  /**
470   * Read the value of the ellipses button on the controller.
471   *
472   * @return The state of the button.
473   */
474  public boolean getEllipsesButton() {
475    return getRawButton(Button.kEllipses.value);
476  }
477
478  /**
479   * Whether the ellipses button was pressed since the last check.
480   *
481   * @return Whether the button was pressed since the last check.
482   */
483  public boolean getEllipsesButtonPressed() {
484    return getRawButtonPressed(Button.kEllipses.value);
485  }
486
487  /**
488   * Whether the ellipses button was released since the last check.
489   *
490   * @return Whether the button was released since the last check.
491   */
492  public boolean getEllipsesButtonReleased() {
493    return getRawButtonReleased(Button.kEllipses.value);
494  }
495
496  /**
497   * Constructs an event instance around the ellipses button's digital signal.
498   *
499   * @param loop the event loop instance to attach the event to.
500   * @return an event instance representing the ellipses button's digital signal
501   *     attached to the given loop.
502   */
503  public BooleanEvent ellipses(EventLoop loop) {
504    return button(Button.kEllipses.value, loop);
505  }
506
507  /**
508   * Read the value of the hamburger button on the controller.
509   *
510   * @return The state of the button.
511   */
512  public boolean getHamburgerButton() {
513    return getRawButton(Button.kHamburger.value);
514  }
515
516  /**
517   * Whether the hamburger button was pressed since the last check.
518   *
519   * @return Whether the button was pressed since the last check.
520   */
521  public boolean getHamburgerButtonPressed() {
522    return getRawButtonPressed(Button.kHamburger.value);
523  }
524
525  /**
526   * Whether the hamburger button was released since the last check.
527   *
528   * @return Whether the button was released since the last check.
529   */
530  public boolean getHamburgerButtonReleased() {
531    return getRawButtonReleased(Button.kHamburger.value);
532  }
533
534  /**
535   * Constructs an event instance around the hamburger button's digital signal.
536   *
537   * @param loop the event loop instance to attach the event to.
538   * @return an event instance representing the hamburger button's digital signal
539   *     attached to the given loop.
540   */
541  public BooleanEvent hamburger(EventLoop loop) {
542    return button(Button.kHamburger.value, loop);
543  }
544
545  /**
546   * Read the value of the stadia button on the controller.
547   *
548   * @return The state of the button.
549   */
550  public boolean getStadiaButton() {
551    return getRawButton(Button.kStadia.value);
552  }
553
554  /**
555   * Whether the stadia button was pressed since the last check.
556   *
557   * @return Whether the button was pressed since the last check.
558   */
559  public boolean getStadiaButtonPressed() {
560    return getRawButtonPressed(Button.kStadia.value);
561  }
562
563  /**
564   * Whether the stadia button was released since the last check.
565   *
566   * @return Whether the button was released since the last check.
567   */
568  public boolean getStadiaButtonReleased() {
569    return getRawButtonReleased(Button.kStadia.value);
570  }
571
572  /**
573   * Constructs an event instance around the stadia button's digital signal.
574   *
575   * @param loop the event loop instance to attach the event to.
576   * @return an event instance representing the stadia button's digital signal
577   *     attached to the given loop.
578   */
579  public BooleanEvent stadia(EventLoop loop) {
580    return button(Button.kStadia.value, loop);
581  }
582
583  /**
584   * Read the value of the right trigger button on the controller.
585   *
586   * @return The state of the button.
587   */
588  public boolean getRightTriggerButton() {
589    return getRawButton(Button.kRightTrigger.value);
590  }
591
592  /**
593   * Whether the right trigger button was pressed since the last check.
594   *
595   * @return Whether the button was pressed since the last check.
596   */
597  public boolean getRightTriggerButtonPressed() {
598    return getRawButtonPressed(Button.kRightTrigger.value);
599  }
600
601  /**
602   * Whether the right trigger button was released since the last check.
603   *
604   * @return Whether the button was released since the last check.
605   */
606  public boolean getRightTriggerButtonReleased() {
607    return getRawButtonReleased(Button.kRightTrigger.value);
608  }
609
610  /**
611   * Constructs an event instance around the right trigger button's digital signal.
612   *
613   * @param loop the event loop instance to attach the event to.
614   * @return an event instance representing the right trigger button's digital signal
615   *     attached to the given loop.
616   */
617  public BooleanEvent rightTrigger(EventLoop loop) {
618    return button(Button.kRightTrigger.value, loop);
619  }
620
621  /**
622   * Read the value of the left trigger button on the controller.
623   *
624   * @return The state of the button.
625   */
626  public boolean getLeftTriggerButton() {
627    return getRawButton(Button.kLeftTrigger.value);
628  }
629
630  /**
631   * Whether the left trigger button was pressed since the last check.
632   *
633   * @return Whether the button was pressed since the last check.
634   */
635  public boolean getLeftTriggerButtonPressed() {
636    return getRawButtonPressed(Button.kLeftTrigger.value);
637  }
638
639  /**
640   * Whether the left trigger button was released since the last check.
641   *
642   * @return Whether the button was released since the last check.
643   */
644  public boolean getLeftTriggerButtonReleased() {
645    return getRawButtonReleased(Button.kLeftTrigger.value);
646  }
647
648  /**
649   * Constructs an event instance around the left trigger button's digital signal.
650   *
651   * @param loop the event loop instance to attach the event to.
652   * @return an event instance representing the left trigger button's digital signal
653   *     attached to the given loop.
654   */
655  public BooleanEvent leftTrigger(EventLoop loop) {
656    return button(Button.kLeftTrigger.value, loop);
657  }
658
659  /**
660   * Read the value of the google button on the controller.
661   *
662   * @return The state of the button.
663   */
664  public boolean getGoogleButton() {
665    return getRawButton(Button.kGoogle.value);
666  }
667
668  /**
669   * Whether the google button was pressed since the last check.
670   *
671   * @return Whether the button was pressed since the last check.
672   */
673  public boolean getGoogleButtonPressed() {
674    return getRawButtonPressed(Button.kGoogle.value);
675  }
676
677  /**
678   * Whether the google button was released since the last check.
679   *
680   * @return Whether the button was released since the last check.
681   */
682  public boolean getGoogleButtonReleased() {
683    return getRawButtonReleased(Button.kGoogle.value);
684  }
685
686  /**
687   * Constructs an event instance around the google button's digital signal.
688   *
689   * @param loop the event loop instance to attach the event to.
690   * @return an event instance representing the google button's digital signal
691   *     attached to the given loop.
692   */
693  public BooleanEvent google(EventLoop loop) {
694    return button(Button.kGoogle.value, loop);
695  }
696
697  /**
698   * Read the value of the frame button on the controller.
699   *
700   * @return The state of the button.
701   */
702  public boolean getFrameButton() {
703    return getRawButton(Button.kFrame.value);
704  }
705
706  /**
707   * Whether the frame button was pressed since the last check.
708   *
709   * @return Whether the button was pressed since the last check.
710   */
711  public boolean getFrameButtonPressed() {
712    return getRawButtonPressed(Button.kFrame.value);
713  }
714
715  /**
716   * Whether the frame button was released since the last check.
717   *
718   * @return Whether the button was released since the last check.
719   */
720  public boolean getFrameButtonReleased() {
721    return getRawButtonReleased(Button.kFrame.value);
722  }
723
724  /**
725   * Constructs an event instance around the frame button's digital signal.
726   *
727   * @param loop the event loop instance to attach the event to.
728   * @return an event instance representing the frame button's digital signal
729   *     attached to the given loop.
730   */
731  public BooleanEvent frame(EventLoop loop) {
732    return button(Button.kFrame.value, loop);
733  }
734
735  /**
736   * Read the value of the left bumper (LB) button on the controller.
737   *
738   * @return The state of the button.
739   * @deprecated Use {@link getLeftBumperButton} instead. This function is deprecated for removal
740   *     to make function names consistent to allow the HID classes to be automatically generated.
741   */
742  @Deprecated(since = "2025", forRemoval = true)
743  public boolean getLeftBumper() {
744    return getRawButton(Button.kLeftBumper.value);
745  }
746
747  /**
748   * Read the value of the right bumper (RB) button on the controller.
749   *
750   * @return The state of the button.
751   * @deprecated Use {@link getRightBumperButton} instead. This function is deprecated for removal
752   *     to make function names consistent to allow the HID classes to be automatically generated.
753   */
754  @Deprecated(since = "2025", forRemoval = true)
755  public boolean getRightBumper() {
756    return getRawButton(Button.kRightBumper.value);
757  }
758
759  /**
760   * Whether the left bumper (LB) was pressed since the last check.
761   *
762   * @return Whether the button was pressed since the last check.
763   * @deprecated Use {@link getLeftBumperButtonPressed} instead. This function is deprecated for
764   *     removal to make function names consistent to allow the HID classes to be automatically
765   *     generated.
766   */
767  @Deprecated(since = "2025", forRemoval = true)
768  public boolean getLeftBumperPressed() {
769    return getRawButtonPressed(Button.kLeftBumper.value);
770  }
771
772  /**
773   * Whether the right bumper (RB) was pressed since the last check.
774   *
775   * @return Whether the button was pressed since the last check.
776   * @deprecated Use {@link getRightBumperButtonPressed} instead. This function is deprecated for
777   *     removal to make function names consistent to allow the HID classes to be automatically
778   *     generated.
779   */
780  @Deprecated(since = "2025", forRemoval = true)
781  public boolean getRightBumperPressed() {
782    return getRawButtonPressed(Button.kRightBumper.value);
783  }
784
785  /**
786   * Whether the left bumper (LB) was released since the last check.
787   *
788   * @return Whether the button was released since the last check.
789   * @deprecated Use {@link getLeftBumperButtonReleased} instead. This function is deprecated for
790   *     removal to make function names consistent to allow the HID classes to be automatically
791   *     generated.
792   */
793  @Deprecated(since = "2025", forRemoval = true)
794  public boolean getLeftBumperReleased() {
795    return getRawButtonReleased(Button.kLeftBumper.value);
796  }
797
798  /**
799   * Whether the right bumper (RB) was released since the last check.
800   *
801   * @return Whether the button was released since the last check.
802   * @deprecated Use {@link getRightBumperButtonReleased} instead. This function is deprecated for
803   *     removal to make function names consistent to allow the HID classes to be automatically
804   *     generated.
805   */
806  @Deprecated(since = "2025", forRemoval = true)
807  public boolean getRightBumperReleased() {
808    return getRawButtonReleased(Button.kRightBumper.value);
809  }
810
811  @Override
812  public void initSendable(SendableBuilder builder) {
813    builder.setSmartDashboardType("HID");
814    builder.publishConstString("ControllerType", "Stadia");
815    builder.addDoubleProperty("LeftX", this::getLeftX, null);
816    builder.addDoubleProperty("RightX", this::getRightX, null);
817    builder.addDoubleProperty("LeftY", this::getLeftY, null);
818    builder.addDoubleProperty("RightY", this::getRightY, null);
819    builder.addBooleanProperty("A", this::getAButton, null);
820    builder.addBooleanProperty("B", this::getBButton, null);
821    builder.addBooleanProperty("X", this::getXButton, null);
822    builder.addBooleanProperty("Y", this::getYButton, null);
823    builder.addBooleanProperty("LeftBumper", this::getLeftBumperButton, null);
824    builder.addBooleanProperty("RightBumper", this::getRightBumperButton, null);
825    builder.addBooleanProperty("LeftStick", this::getLeftStickButton, null);
826    builder.addBooleanProperty("RightStick", this::getRightStickButton, null);
827    builder.addBooleanProperty("Ellipses", this::getEllipsesButton, null);
828    builder.addBooleanProperty("Hamburger", this::getHamburgerButton, null);
829    builder.addBooleanProperty("Stadia", this::getStadiaButton, null);
830    builder.addBooleanProperty("RightTrigger", this::getRightTriggerButton, null);
831    builder.addBooleanProperty("LeftTrigger", this::getLeftTriggerButton, null);
832    builder.addBooleanProperty("Google", this::getGoogleButton, null);
833    builder.addBooleanProperty("Frame", this::getFrameButton, null);
834  }
835}