/*
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
/*
 * This code was generated by https://github.com/googleapis/google-api-java-client-services/
 * Modify at your own risk.
 */

package com.google.api.services.contentwarehouse.v1.model;

/**
 * These are the set of features that are supported by the device. It's a part of the
 * SoftwareCapabilities of the device. Next ID: 67
 *
 * <p> This is the Java data model class that specifies how to parse/serialize into the JSON that is
 * transmitted over HTTP when working with the Document AI Warehouse API. For a detailed explanation
 * see:
 * <a href="https://developers.google.com/api-client-library/java/google-http-java-client/json">https://developers.google.com/api-client-library/java/google-http-java-client/json</a>
 * </p>
 *
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public final class AssistantApiSupportedFeatures extends com.google.api.client.json.GenericJson {

  /**
   * Whether the client supports the alternative message notification sources on AAE, in which case
   * notification-related operations can access it.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean aaeNotificationSourceSupported;

  /**
   * In what way is assistant continued presence supported. (go/opa-acp-prd)
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiAssistantContinuedPresenceSupport acpSupport;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiActionV2SupportedFeatures actionV2SupportedFeatures;

  /**
   * Whether the client supports AlarmTimerManager API (go/alarm-timer-manager-api).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean alarmTimerManagerApiSupported;

  /**
   * The client information for app control support. More details in: go/acaia.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiAppControlSupport appControlSupport;

  /**
   * Whether the client supports the assistant explore section. This field will be active only when
   * the Explore section is available to the user. This means that the user is (a) signed-in, (b) a
   * IOPA / AGSA user, and (c) in a locale where explore is available.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean assistantExploreSupported;

  /**
   * Whether Assistant for Kids (a.k.a. Designed for Family) features are supported.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean assistantForKidsSupported;

  /**
   * Whether communications flows for the client can bypass the DI/DC check. The client will enforce
   * some other equivalent permission as necessary concerning access to device contacts and apps.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean bypassDiDcCheckForComms;

  /**
   * Whether or not Assistant should enforce the dismissal of communication notifications associated
   * with messages.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean bypassMsgNotificationDismissal;

  /**
   * Whether the client supports 1m providers (go/1m-partner-expansion).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean client1mProvidersSupported;

  /**
   * Whether the client can batch client op results before sending them to the server.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean clientOpResultBatchingSupported;

  /**
   * Whether the client supports confirmation flow before announcement of multiple messages. If set
   * to true the user will be prompted once and confirmation will be taken before all the messages
   * are announced.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean confirmationBeforeReadingMultipleMessagesSupported;

  /**
   * Whether the client supports cross-device broadcast (i.e. on Torus).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean crossDeviceBroadcastSupported;

  /**
   * The version of cross device broadcast (ie; broadcast on torus) which the client supports.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String crossDeviceBroadcastVersion;

  /**
   * Whether the client supports csat visual overlay. (go/sd-od-csat)
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean csatVisualOverlaySupported;

  /**
   * The features set which duo client on the device supports. This should be serialized from proto
   * {@code duo_client_api.DuoClientApiFeatures}.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String duoClientApiFeatures;

  /**
   * Whether the client supports Duo group calling.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean duoGroupCallingSupported;

  /**
   * Information about what support this device has for fitness.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiFitnessFeatureSupport fitnessFeatureSupport;

  /**
   * Fluid Actions features supported by the client. If this field is not set in the incoming
   * request, it could mean that the client does not support Fluid Actions. Alternatively, it could
   * mean that the client supports Fluid Actions, but syncs state with server using the old
   * protocol, namely ConversationStateParams. When b/140733618 is resolved, Surface Adaptation
   * Layer will add this field for old clients that support Fluid Actions framework.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiFluidActionsSupport fluidActionsSupport;

  /**
   * Whether the surface client op performer supports Funtime alarms and timers. go/funtime-
   * engdesign
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean funtimeSupported;

  /**
   * Whether account linking via Google Deep Integrations (GDI) is supported. go/opa-gdi-design
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean gdiSupported;

  /**
   * Whether the client supports the Gearhead message notification source, in which case
   * notification-related operations can access it.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean gearheadNotificationSourceSupported;

  /**
   * Whether the client has a physical radio installed.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean hasPhysicalRadio;

  /**
   * Whether the client supports confirmation messages in Immersive Canvas actions. Deprecated: use
   * the filed in immersive_canvas_support.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean immersiveCanvasConfirmationMessageSupported;

  /**
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiImmersiveCanvasSupport immersiveCanvasSupport;

  /**
   * Whether the client supports account linking in-dialog (askForSignIn). This is used before this
   * feature is moved to conversation protocol. To support this, the client needs to: - Integrate
   * with Google Deep Integrations. - Have logic to send the result of account linking back to AS.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean inDialogAccountLinkingSupported;

  /**
   * Whether paired-phone contact upload is needed for communications queries to work (e.g. on AAE).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isPairedPhoneContactUploadNeededForComms;

  /**
   * Whether a Bluetooth-paired phone is a core component of communications flows on the client.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean isPairedPhoneNeededForComms;

  /**
   * Whether the client supports confirmation flow when a permission is missing. If set to true, the
   * user will be prompted and on confirmation the original flow will continue.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean justInTimeSupported;

  /**
   * Which way of launching the keyboard the client supports.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String launchKeyboardSupported;

  /**
   * Whether the client has Google Lens (Assistant Eyes).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean lensSupported;

  /**
   * Whether the surface supports LiveCards. In cases where the user intent flow cannot be completed
   * within the Assistant, LiveCards are used to take the user to an external app or website. These
   * cards will be pushed to the Google Home app via the PushMessage ClientOp.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean liveCardsSupported;

  /**
   * Whether the client supports the Lottie animation library for the broadcast feature.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String lottieAnimationSupport;

  /**
   * Whether the client supports Assistant dialogs within Maps. This field will be set only when the
   * Maps on the surface supports Assistant dialogs embedded within Maps. go/gsa-gmm.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean mapsDialogsSupported;

  /**
   * Whether the device supports masquerade mode (go/masquerade).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean masqueradeModeSupported;

  /**
   * Information about how client handles media controls (play, pause, skip ...)
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiMediaControlSupport mediaControlSupport;

  /**
   * The ability of the client to detect media sessions on the device.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String mediaSessionDetection;

  /**
   * Whether the client supports joining a Google Meet meeting.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean meetSupported;

  /**
   * Whether the client can render no input response or just ignore it. No input response is
   * returned when client has a no speech input interaction, eg. user tapped mic but didn't say
   * anything.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean noInputResponseSupported;

  /**
   * When the entry source is search, whether the client supports rendering a similar response as
   * OPA one does. Entry source is defined at
   * http://cs/symbol:assistant.api.params.DeviceProperties.EntrySource
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean opaOnSearchSupported;

  /**
   * Whether or not the client supports enabling parental controls. When a device to supports
   * parental controls, it has the software necessary to store the relevant information required for
   * parental controls to work. This information includes a boolean "enabled bit" as well as the
   * obfuscated gaia ID of the kid account selected for use with parental controls. Devices
   * supportings kids mode send this information to S3 via S3ClientInfo in every request. See go
   * /aff-kidsproduct for details.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean parentalControlsSupported;

  /**
   * Whether the client supports persistent display. The new feature allows Assistant devices with
   * screen to display a continuously updating permanent display, such as ambient weather, without
   * the need for a user to ask the Assistant. Design doc: go/assistant-persistent-display.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean persistentDisplaySupported;

  /**
   * Whether the client supports the privacy-aware lockscreen protocol (go/assistant-lockscreen-
   * spec).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean privacyAwareLockscreenSupported;

  /**
   * Whether the client supports tts tapering for the read messages flow. If set to true the tapered
   * tts variant would be used during the read messages flow.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean readMessagesTtsTaperingSupported;

  /**
   * Whether the client supports message summarization.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean readNotificationSummarizationSupported;

  /**
   * Whether the client has remote casting enabled. For ex: we want to disable this for clients like
   * Auto.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean remoteCloudCastingEnabled;

  /**
   * Whether the Assistant Server should generate feedback suggestion chips.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean serverGeneratedFeedbackChipsEnabled;

  /**
   * Whether the client supports SmartHome lock screen logic (i.e. on Tangor).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean shLockScreenSupported;

  /**
   * Which kind of sign in the client supports.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiSignInMethod signInMethod;

  /**
   * Whether the client can monitor sleep. This allows us to show sleep CUJ related information:
   * go/TwilightDesign Use for development only, see the same field in
   * DeviceCapabilities.SoftwareCapabilities.SelinaCapabilities.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean sleepSensingSupported;

  /**
   * Whether the client supports smart space cross-device timers. (go/ss-x-device-timer)
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean smartspaceCrossDeviceTimerSupported;

  /**
   * Whether or not the client supports gesture detection via soli chips. The reason to prepend the
   * name with soli is to distinguish it from computer vision based methods, e.g. Newman devices.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean soliGestureDetectionSupported;

  /**
   * Suggestion chips features, supported by the client.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiSuggestionsSupport suggestionsSupport;

  /**
   * Whether the client supports the sunrise screen brightening feature before the alarm fires. This
   * is used to indicate whether sunrise alarms can be set on the device.
   * http://cs/symbol:assistant.api.core_types.governed.RingtoneTaskMetadata.GentleWakeInfo
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiSunriseFeaturesSupport sunriseFeaturesSupport;

  /**
   * Whether the client supports faster optimization for tap_to_read feature.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean tapToReadOptimizationSupported;

  /**
   * Whether the device supports the 3p GUI framework, which allows third parties to enter the
   * conversation with the user, showing their logo next to their chat bubbles, etc. go/3p-phone
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean thirdPartyGuiSupported;

  /**
   * Transactions features, supported by the client. Transactions feature may includes how
   * Transactions team want to populate additional information from the device to the server.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiTransactionFeaturesSupport transactionFeaturesSupport;

  /**
   * The version of transactions which the client supports.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String transactionsVersion;

  /**
   * If set, it indicates that the client can open a separate HTML browser/webviewer (full viewer)
   * to display certain visual results. These visual results usually require more memory to render
   * (e.g. high resolution photos). Compared to the regular viewer that display all other Assistant
   * result, the full viewer does not have memory limit. The field is copied from the device model.
   * See
   * http://google3/assistant/devices_platform/proto/device_model_capabilities.proto?l=225=312576471
   * Also see go/webassistant-full-card-viewer.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean usesSeparateFullViewer;

  /**
   * Whether the client supports viewing of reminder hub page or not. Default is supported. Set to
   * true to disable returning reminder hub page url in reminder responses.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean viewReminderHubPageNotSupported;

  /**
   * Whether the client supports the programmatic warm welcome tutorial. Design doc: go/opal-pww-
   * design.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean warmWelcomeTutorialSupported;

  /**
   * Whether the supports opening a URL in a web browser. For example, we want to disable this for
   * clients like Chirp.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean webBrowserSupported;

  /**
   * Whether or not the client supports WhatsNext in the protocol.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean whatsNextSupported;

  /**
   * Whether the client supports joining a Zoom meeting.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean zoomSupported;

  /**
   * Whether the client supports the alternative message notification sources on AAE, in which case
   * notification-related operations can access it.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getAaeNotificationSourceSupported() {
    return aaeNotificationSourceSupported;
  }

  /**
   * Whether the client supports the alternative message notification sources on AAE, in which case
   * notification-related operations can access it.
   * @param aaeNotificationSourceSupported aaeNotificationSourceSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setAaeNotificationSourceSupported(java.lang.Boolean aaeNotificationSourceSupported) {
    this.aaeNotificationSourceSupported = aaeNotificationSourceSupported;
    return this;
  }

  /**
   * In what way is assistant continued presence supported. (go/opa-acp-prd)
   * @return value or {@code null} for none
   */
  public AssistantApiAssistantContinuedPresenceSupport getAcpSupport() {
    return acpSupport;
  }

  /**
   * In what way is assistant continued presence supported. (go/opa-acp-prd)
   * @param acpSupport acpSupport or {@code null} for none
   */
  public AssistantApiSupportedFeatures setAcpSupport(AssistantApiAssistantContinuedPresenceSupport acpSupport) {
    this.acpSupport = acpSupport;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public AssistantApiActionV2SupportedFeatures getActionV2SupportedFeatures() {
    return actionV2SupportedFeatures;
  }

  /**
   * @param actionV2SupportedFeatures actionV2SupportedFeatures or {@code null} for none
   */
  public AssistantApiSupportedFeatures setActionV2SupportedFeatures(AssistantApiActionV2SupportedFeatures actionV2SupportedFeatures) {
    this.actionV2SupportedFeatures = actionV2SupportedFeatures;
    return this;
  }

  /**
   * Whether the client supports AlarmTimerManager API (go/alarm-timer-manager-api).
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getAlarmTimerManagerApiSupported() {
    return alarmTimerManagerApiSupported;
  }

  /**
   * Whether the client supports AlarmTimerManager API (go/alarm-timer-manager-api).
   * @param alarmTimerManagerApiSupported alarmTimerManagerApiSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setAlarmTimerManagerApiSupported(java.lang.Boolean alarmTimerManagerApiSupported) {
    this.alarmTimerManagerApiSupported = alarmTimerManagerApiSupported;
    return this;
  }

  /**
   * The client information for app control support. More details in: go/acaia.
   * @return value or {@code null} for none
   */
  public AssistantApiAppControlSupport getAppControlSupport() {
    return appControlSupport;
  }

  /**
   * The client information for app control support. More details in: go/acaia.
   * @param appControlSupport appControlSupport or {@code null} for none
   */
  public AssistantApiSupportedFeatures setAppControlSupport(AssistantApiAppControlSupport appControlSupport) {
    this.appControlSupport = appControlSupport;
    return this;
  }

  /**
   * Whether the client supports the assistant explore section. This field will be active only when
   * the Explore section is available to the user. This means that the user is (a) signed-in, (b) a
   * IOPA / AGSA user, and (c) in a locale where explore is available.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getAssistantExploreSupported() {
    return assistantExploreSupported;
  }

  /**
   * Whether the client supports the assistant explore section. This field will be active only when
   * the Explore section is available to the user. This means that the user is (a) signed-in, (b) a
   * IOPA / AGSA user, and (c) in a locale where explore is available.
   * @param assistantExploreSupported assistantExploreSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setAssistantExploreSupported(java.lang.Boolean assistantExploreSupported) {
    this.assistantExploreSupported = assistantExploreSupported;
    return this;
  }

  /**
   * Whether Assistant for Kids (a.k.a. Designed for Family) features are supported.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getAssistantForKidsSupported() {
    return assistantForKidsSupported;
  }

  /**
   * Whether Assistant for Kids (a.k.a. Designed for Family) features are supported.
   * @param assistantForKidsSupported assistantForKidsSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setAssistantForKidsSupported(java.lang.Boolean assistantForKidsSupported) {
    this.assistantForKidsSupported = assistantForKidsSupported;
    return this;
  }

  /**
   * Whether communications flows for the client can bypass the DI/DC check. The client will enforce
   * some other equivalent permission as necessary concerning access to device contacts and apps.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getBypassDiDcCheckForComms() {
    return bypassDiDcCheckForComms;
  }

  /**
   * Whether communications flows for the client can bypass the DI/DC check. The client will enforce
   * some other equivalent permission as necessary concerning access to device contacts and apps.
   * @param bypassDiDcCheckForComms bypassDiDcCheckForComms or {@code null} for none
   */
  public AssistantApiSupportedFeatures setBypassDiDcCheckForComms(java.lang.Boolean bypassDiDcCheckForComms) {
    this.bypassDiDcCheckForComms = bypassDiDcCheckForComms;
    return this;
  }

  /**
   * Whether or not Assistant should enforce the dismissal of communication notifications associated
   * with messages.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getBypassMsgNotificationDismissal() {
    return bypassMsgNotificationDismissal;
  }

  /**
   * Whether or not Assistant should enforce the dismissal of communication notifications associated
   * with messages.
   * @param bypassMsgNotificationDismissal bypassMsgNotificationDismissal or {@code null} for none
   */
  public AssistantApiSupportedFeatures setBypassMsgNotificationDismissal(java.lang.Boolean bypassMsgNotificationDismissal) {
    this.bypassMsgNotificationDismissal = bypassMsgNotificationDismissal;
    return this;
  }

  /**
   * Whether the client supports 1m providers (go/1m-partner-expansion).
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getClient1mProvidersSupported() {
    return client1mProvidersSupported;
  }

  /**
   * Whether the client supports 1m providers (go/1m-partner-expansion).
   * @param client1mProvidersSupported client1mProvidersSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setClient1mProvidersSupported(java.lang.Boolean client1mProvidersSupported) {
    this.client1mProvidersSupported = client1mProvidersSupported;
    return this;
  }

  /**
   * Whether the client can batch client op results before sending them to the server.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getClientOpResultBatchingSupported() {
    return clientOpResultBatchingSupported;
  }

  /**
   * Whether the client can batch client op results before sending them to the server.
   * @param clientOpResultBatchingSupported clientOpResultBatchingSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setClientOpResultBatchingSupported(java.lang.Boolean clientOpResultBatchingSupported) {
    this.clientOpResultBatchingSupported = clientOpResultBatchingSupported;
    return this;
  }

  /**
   * Whether the client supports confirmation flow before announcement of multiple messages. If set
   * to true the user will be prompted once and confirmation will be taken before all the messages
   * are announced.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getConfirmationBeforeReadingMultipleMessagesSupported() {
    return confirmationBeforeReadingMultipleMessagesSupported;
  }

  /**
   * Whether the client supports confirmation flow before announcement of multiple messages. If set
   * to true the user will be prompted once and confirmation will be taken before all the messages
   * are announced.
   * @param confirmationBeforeReadingMultipleMessagesSupported confirmationBeforeReadingMultipleMessagesSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setConfirmationBeforeReadingMultipleMessagesSupported(java.lang.Boolean confirmationBeforeReadingMultipleMessagesSupported) {
    this.confirmationBeforeReadingMultipleMessagesSupported = confirmationBeforeReadingMultipleMessagesSupported;
    return this;
  }

  /**
   * Whether the client supports cross-device broadcast (i.e. on Torus).
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getCrossDeviceBroadcastSupported() {
    return crossDeviceBroadcastSupported;
  }

  /**
   * Whether the client supports cross-device broadcast (i.e. on Torus).
   * @param crossDeviceBroadcastSupported crossDeviceBroadcastSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setCrossDeviceBroadcastSupported(java.lang.Boolean crossDeviceBroadcastSupported) {
    this.crossDeviceBroadcastSupported = crossDeviceBroadcastSupported;
    return this;
  }

  /**
   * The version of cross device broadcast (ie; broadcast on torus) which the client supports.
   * @return value or {@code null} for none
   */
  public java.lang.String getCrossDeviceBroadcastVersion() {
    return crossDeviceBroadcastVersion;
  }

  /**
   * The version of cross device broadcast (ie; broadcast on torus) which the client supports.
   * @param crossDeviceBroadcastVersion crossDeviceBroadcastVersion or {@code null} for none
   */
  public AssistantApiSupportedFeatures setCrossDeviceBroadcastVersion(java.lang.String crossDeviceBroadcastVersion) {
    this.crossDeviceBroadcastVersion = crossDeviceBroadcastVersion;
    return this;
  }

  /**
   * Whether the client supports csat visual overlay. (go/sd-od-csat)
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getCsatVisualOverlaySupported() {
    return csatVisualOverlaySupported;
  }

  /**
   * Whether the client supports csat visual overlay. (go/sd-od-csat)
   * @param csatVisualOverlaySupported csatVisualOverlaySupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setCsatVisualOverlaySupported(java.lang.Boolean csatVisualOverlaySupported) {
    this.csatVisualOverlaySupported = csatVisualOverlaySupported;
    return this;
  }

  /**
   * The features set which duo client on the device supports. This should be serialized from proto
   * {@code duo_client_api.DuoClientApiFeatures}.
   * @see #decodeDuoClientApiFeatures()
   * @return value or {@code null} for none
   */
  public java.lang.String getDuoClientApiFeatures() {
    return duoClientApiFeatures;
  }

  /**
   * The features set which duo client on the device supports. This should be serialized from proto
   * {@code duo_client_api.DuoClientApiFeatures}.
   * @see #getDuoClientApiFeatures()
   * @return Base64 decoded value or {@code null} for none
   *
   * @since 1.14
   */
  public byte[] decodeDuoClientApiFeatures() {
    return com.google.api.client.util.Base64.decodeBase64(duoClientApiFeatures);
  }

  /**
   * The features set which duo client on the device supports. This should be serialized from proto
   * {@code duo_client_api.DuoClientApiFeatures}.
   * @see #encodeDuoClientApiFeatures()
   * @param duoClientApiFeatures duoClientApiFeatures or {@code null} for none
   */
  public AssistantApiSupportedFeatures setDuoClientApiFeatures(java.lang.String duoClientApiFeatures) {
    this.duoClientApiFeatures = duoClientApiFeatures;
    return this;
  }

  /**
   * The features set which duo client on the device supports. This should be serialized from proto
   * {@code duo_client_api.DuoClientApiFeatures}.
   * @see #setDuoClientApiFeatures()
   *
   * <p>
   * The value is encoded Base64 or {@code null} for none.
   * </p>
   *
   * @since 1.14
   */
  public AssistantApiSupportedFeatures encodeDuoClientApiFeatures(byte[] duoClientApiFeatures) {
    this.duoClientApiFeatures = com.google.api.client.util.Base64.encodeBase64URLSafeString(duoClientApiFeatures);
    return this;
  }

  /**
   * Whether the client supports Duo group calling.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getDuoGroupCallingSupported() {
    return duoGroupCallingSupported;
  }

  /**
   * Whether the client supports Duo group calling.
   * @param duoGroupCallingSupported duoGroupCallingSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setDuoGroupCallingSupported(java.lang.Boolean duoGroupCallingSupported) {
    this.duoGroupCallingSupported = duoGroupCallingSupported;
    return this;
  }

  /**
   * Information about what support this device has for fitness.
   * @return value or {@code null} for none
   */
  public AssistantApiFitnessFeatureSupport getFitnessFeatureSupport() {
    return fitnessFeatureSupport;
  }

  /**
   * Information about what support this device has for fitness.
   * @param fitnessFeatureSupport fitnessFeatureSupport or {@code null} for none
   */
  public AssistantApiSupportedFeatures setFitnessFeatureSupport(AssistantApiFitnessFeatureSupport fitnessFeatureSupport) {
    this.fitnessFeatureSupport = fitnessFeatureSupport;
    return this;
  }

  /**
   * Fluid Actions features supported by the client. If this field is not set in the incoming
   * request, it could mean that the client does not support Fluid Actions. Alternatively, it could
   * mean that the client supports Fluid Actions, but syncs state with server using the old
   * protocol, namely ConversationStateParams. When b/140733618 is resolved, Surface Adaptation
   * Layer will add this field for old clients that support Fluid Actions framework.
   * @return value or {@code null} for none
   */
  public AssistantApiFluidActionsSupport getFluidActionsSupport() {
    return fluidActionsSupport;
  }

  /**
   * Fluid Actions features supported by the client. If this field is not set in the incoming
   * request, it could mean that the client does not support Fluid Actions. Alternatively, it could
   * mean that the client supports Fluid Actions, but syncs state with server using the old
   * protocol, namely ConversationStateParams. When b/140733618 is resolved, Surface Adaptation
   * Layer will add this field for old clients that support Fluid Actions framework.
   * @param fluidActionsSupport fluidActionsSupport or {@code null} for none
   */
  public AssistantApiSupportedFeatures setFluidActionsSupport(AssistantApiFluidActionsSupport fluidActionsSupport) {
    this.fluidActionsSupport = fluidActionsSupport;
    return this;
  }

  /**
   * Whether the surface client op performer supports Funtime alarms and timers. go/funtime-
   * engdesign
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getFuntimeSupported() {
    return funtimeSupported;
  }

  /**
   * Whether the surface client op performer supports Funtime alarms and timers. go/funtime-
   * engdesign
   * @param funtimeSupported funtimeSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setFuntimeSupported(java.lang.Boolean funtimeSupported) {
    this.funtimeSupported = funtimeSupported;
    return this;
  }

  /**
   * Whether account linking via Google Deep Integrations (GDI) is supported. go/opa-gdi-design
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getGdiSupported() {
    return gdiSupported;
  }

  /**
   * Whether account linking via Google Deep Integrations (GDI) is supported. go/opa-gdi-design
   * @param gdiSupported gdiSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setGdiSupported(java.lang.Boolean gdiSupported) {
    this.gdiSupported = gdiSupported;
    return this;
  }

  /**
   * Whether the client supports the Gearhead message notification source, in which case
   * notification-related operations can access it.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getGearheadNotificationSourceSupported() {
    return gearheadNotificationSourceSupported;
  }

  /**
   * Whether the client supports the Gearhead message notification source, in which case
   * notification-related operations can access it.
   * @param gearheadNotificationSourceSupported gearheadNotificationSourceSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setGearheadNotificationSourceSupported(java.lang.Boolean gearheadNotificationSourceSupported) {
    this.gearheadNotificationSourceSupported = gearheadNotificationSourceSupported;
    return this;
  }

  /**
   * Whether the client has a physical radio installed.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getHasPhysicalRadio() {
    return hasPhysicalRadio;
  }

  /**
   * Whether the client has a physical radio installed.
   * @param hasPhysicalRadio hasPhysicalRadio or {@code null} for none
   */
  public AssistantApiSupportedFeatures setHasPhysicalRadio(java.lang.Boolean hasPhysicalRadio) {
    this.hasPhysicalRadio = hasPhysicalRadio;
    return this;
  }

  /**
   * Whether the client supports confirmation messages in Immersive Canvas actions. Deprecated: use
   * the filed in immersive_canvas_support.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getImmersiveCanvasConfirmationMessageSupported() {
    return immersiveCanvasConfirmationMessageSupported;
  }

  /**
   * Whether the client supports confirmation messages in Immersive Canvas actions. Deprecated: use
   * the filed in immersive_canvas_support.
   * @param immersiveCanvasConfirmationMessageSupported immersiveCanvasConfirmationMessageSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setImmersiveCanvasConfirmationMessageSupported(java.lang.Boolean immersiveCanvasConfirmationMessageSupported) {
    this.immersiveCanvasConfirmationMessageSupported = immersiveCanvasConfirmationMessageSupported;
    return this;
  }

  /**
   * @return value or {@code null} for none
   */
  public AssistantApiImmersiveCanvasSupport getImmersiveCanvasSupport() {
    return immersiveCanvasSupport;
  }

  /**
   * @param immersiveCanvasSupport immersiveCanvasSupport or {@code null} for none
   */
  public AssistantApiSupportedFeatures setImmersiveCanvasSupport(AssistantApiImmersiveCanvasSupport immersiveCanvasSupport) {
    this.immersiveCanvasSupport = immersiveCanvasSupport;
    return this;
  }

  /**
   * Whether the client supports account linking in-dialog (askForSignIn). This is used before this
   * feature is moved to conversation protocol. To support this, the client needs to: - Integrate
   * with Google Deep Integrations. - Have logic to send the result of account linking back to AS.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getInDialogAccountLinkingSupported() {
    return inDialogAccountLinkingSupported;
  }

  /**
   * Whether the client supports account linking in-dialog (askForSignIn). This is used before this
   * feature is moved to conversation protocol. To support this, the client needs to: - Integrate
   * with Google Deep Integrations. - Have logic to send the result of account linking back to AS.
   * @param inDialogAccountLinkingSupported inDialogAccountLinkingSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setInDialogAccountLinkingSupported(java.lang.Boolean inDialogAccountLinkingSupported) {
    this.inDialogAccountLinkingSupported = inDialogAccountLinkingSupported;
    return this;
  }

  /**
   * Whether paired-phone contact upload is needed for communications queries to work (e.g. on AAE).
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsPairedPhoneContactUploadNeededForComms() {
    return isPairedPhoneContactUploadNeededForComms;
  }

  /**
   * Whether paired-phone contact upload is needed for communications queries to work (e.g. on AAE).
   * @param isPairedPhoneContactUploadNeededForComms isPairedPhoneContactUploadNeededForComms or {@code null} for none
   */
  public AssistantApiSupportedFeatures setIsPairedPhoneContactUploadNeededForComms(java.lang.Boolean isPairedPhoneContactUploadNeededForComms) {
    this.isPairedPhoneContactUploadNeededForComms = isPairedPhoneContactUploadNeededForComms;
    return this;
  }

  /**
   * Whether a Bluetooth-paired phone is a core component of communications flows on the client.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getIsPairedPhoneNeededForComms() {
    return isPairedPhoneNeededForComms;
  }

  /**
   * Whether a Bluetooth-paired phone is a core component of communications flows on the client.
   * @param isPairedPhoneNeededForComms isPairedPhoneNeededForComms or {@code null} for none
   */
  public AssistantApiSupportedFeatures setIsPairedPhoneNeededForComms(java.lang.Boolean isPairedPhoneNeededForComms) {
    this.isPairedPhoneNeededForComms = isPairedPhoneNeededForComms;
    return this;
  }

  /**
   * Whether the client supports confirmation flow when a permission is missing. If set to true, the
   * user will be prompted and on confirmation the original flow will continue.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getJustInTimeSupported() {
    return justInTimeSupported;
  }

  /**
   * Whether the client supports confirmation flow when a permission is missing. If set to true, the
   * user will be prompted and on confirmation the original flow will continue.
   * @param justInTimeSupported justInTimeSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setJustInTimeSupported(java.lang.Boolean justInTimeSupported) {
    this.justInTimeSupported = justInTimeSupported;
    return this;
  }

  /**
   * Which way of launching the keyboard the client supports.
   * @return value or {@code null} for none
   */
  public java.lang.String getLaunchKeyboardSupported() {
    return launchKeyboardSupported;
  }

  /**
   * Which way of launching the keyboard the client supports.
   * @param launchKeyboardSupported launchKeyboardSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setLaunchKeyboardSupported(java.lang.String launchKeyboardSupported) {
    this.launchKeyboardSupported = launchKeyboardSupported;
    return this;
  }

  /**
   * Whether the client has Google Lens (Assistant Eyes).
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getLensSupported() {
    return lensSupported;
  }

  /**
   * Whether the client has Google Lens (Assistant Eyes).
   * @param lensSupported lensSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setLensSupported(java.lang.Boolean lensSupported) {
    this.lensSupported = lensSupported;
    return this;
  }

  /**
   * Whether the surface supports LiveCards. In cases where the user intent flow cannot be completed
   * within the Assistant, LiveCards are used to take the user to an external app or website. These
   * cards will be pushed to the Google Home app via the PushMessage ClientOp.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getLiveCardsSupported() {
    return liveCardsSupported;
  }

  /**
   * Whether the surface supports LiveCards. In cases where the user intent flow cannot be completed
   * within the Assistant, LiveCards are used to take the user to an external app or website. These
   * cards will be pushed to the Google Home app via the PushMessage ClientOp.
   * @param liveCardsSupported liveCardsSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setLiveCardsSupported(java.lang.Boolean liveCardsSupported) {
    this.liveCardsSupported = liveCardsSupported;
    return this;
  }

  /**
   * Whether the client supports the Lottie animation library for the broadcast feature.
   * @return value or {@code null} for none
   */
  public java.lang.String getLottieAnimationSupport() {
    return lottieAnimationSupport;
  }

  /**
   * Whether the client supports the Lottie animation library for the broadcast feature.
   * @param lottieAnimationSupport lottieAnimationSupport or {@code null} for none
   */
  public AssistantApiSupportedFeatures setLottieAnimationSupport(java.lang.String lottieAnimationSupport) {
    this.lottieAnimationSupport = lottieAnimationSupport;
    return this;
  }

  /**
   * Whether the client supports Assistant dialogs within Maps. This field will be set only when the
   * Maps on the surface supports Assistant dialogs embedded within Maps. go/gsa-gmm.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getMapsDialogsSupported() {
    return mapsDialogsSupported;
  }

  /**
   * Whether the client supports Assistant dialogs within Maps. This field will be set only when the
   * Maps on the surface supports Assistant dialogs embedded within Maps. go/gsa-gmm.
   * @param mapsDialogsSupported mapsDialogsSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setMapsDialogsSupported(java.lang.Boolean mapsDialogsSupported) {
    this.mapsDialogsSupported = mapsDialogsSupported;
    return this;
  }

  /**
   * Whether the device supports masquerade mode (go/masquerade).
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getMasqueradeModeSupported() {
    return masqueradeModeSupported;
  }

  /**
   * Whether the device supports masquerade mode (go/masquerade).
   * @param masqueradeModeSupported masqueradeModeSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setMasqueradeModeSupported(java.lang.Boolean masqueradeModeSupported) {
    this.masqueradeModeSupported = masqueradeModeSupported;
    return this;
  }

  /**
   * Information about how client handles media controls (play, pause, skip ...)
   * @return value or {@code null} for none
   */
  public AssistantApiMediaControlSupport getMediaControlSupport() {
    return mediaControlSupport;
  }

  /**
   * Information about how client handles media controls (play, pause, skip ...)
   * @param mediaControlSupport mediaControlSupport or {@code null} for none
   */
  public AssistantApiSupportedFeatures setMediaControlSupport(AssistantApiMediaControlSupport mediaControlSupport) {
    this.mediaControlSupport = mediaControlSupport;
    return this;
  }

  /**
   * The ability of the client to detect media sessions on the device.
   * @return value or {@code null} for none
   */
  public java.lang.String getMediaSessionDetection() {
    return mediaSessionDetection;
  }

  /**
   * The ability of the client to detect media sessions on the device.
   * @param mediaSessionDetection mediaSessionDetection or {@code null} for none
   */
  public AssistantApiSupportedFeatures setMediaSessionDetection(java.lang.String mediaSessionDetection) {
    this.mediaSessionDetection = mediaSessionDetection;
    return this;
  }

  /**
   * Whether the client supports joining a Google Meet meeting.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getMeetSupported() {
    return meetSupported;
  }

  /**
   * Whether the client supports joining a Google Meet meeting.
   * @param meetSupported meetSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setMeetSupported(java.lang.Boolean meetSupported) {
    this.meetSupported = meetSupported;
    return this;
  }

  /**
   * Whether the client can render no input response or just ignore it. No input response is
   * returned when client has a no speech input interaction, eg. user tapped mic but didn't say
   * anything.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getNoInputResponseSupported() {
    return noInputResponseSupported;
  }

  /**
   * Whether the client can render no input response or just ignore it. No input response is
   * returned when client has a no speech input interaction, eg. user tapped mic but didn't say
   * anything.
   * @param noInputResponseSupported noInputResponseSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setNoInputResponseSupported(java.lang.Boolean noInputResponseSupported) {
    this.noInputResponseSupported = noInputResponseSupported;
    return this;
  }

  /**
   * When the entry source is search, whether the client supports rendering a similar response as
   * OPA one does. Entry source is defined at
   * http://cs/symbol:assistant.api.params.DeviceProperties.EntrySource
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getOpaOnSearchSupported() {
    return opaOnSearchSupported;
  }

  /**
   * When the entry source is search, whether the client supports rendering a similar response as
   * OPA one does. Entry source is defined at
   * http://cs/symbol:assistant.api.params.DeviceProperties.EntrySource
   * @param opaOnSearchSupported opaOnSearchSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setOpaOnSearchSupported(java.lang.Boolean opaOnSearchSupported) {
    this.opaOnSearchSupported = opaOnSearchSupported;
    return this;
  }

  /**
   * Whether or not the client supports enabling parental controls. When a device to supports
   * parental controls, it has the software necessary to store the relevant information required for
   * parental controls to work. This information includes a boolean "enabled bit" as well as the
   * obfuscated gaia ID of the kid account selected for use with parental controls. Devices
   * supportings kids mode send this information to S3 via S3ClientInfo in every request. See go
   * /aff-kidsproduct for details.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getParentalControlsSupported() {
    return parentalControlsSupported;
  }

  /**
   * Whether or not the client supports enabling parental controls. When a device to supports
   * parental controls, it has the software necessary to store the relevant information required for
   * parental controls to work. This information includes a boolean "enabled bit" as well as the
   * obfuscated gaia ID of the kid account selected for use with parental controls. Devices
   * supportings kids mode send this information to S3 via S3ClientInfo in every request. See go
   * /aff-kidsproduct for details.
   * @param parentalControlsSupported parentalControlsSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setParentalControlsSupported(java.lang.Boolean parentalControlsSupported) {
    this.parentalControlsSupported = parentalControlsSupported;
    return this;
  }

  /**
   * Whether the client supports persistent display. The new feature allows Assistant devices with
   * screen to display a continuously updating permanent display, such as ambient weather, without
   * the need for a user to ask the Assistant. Design doc: go/assistant-persistent-display.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getPersistentDisplaySupported() {
    return persistentDisplaySupported;
  }

  /**
   * Whether the client supports persistent display. The new feature allows Assistant devices with
   * screen to display a continuously updating permanent display, such as ambient weather, without
   * the need for a user to ask the Assistant. Design doc: go/assistant-persistent-display.
   * @param persistentDisplaySupported persistentDisplaySupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setPersistentDisplaySupported(java.lang.Boolean persistentDisplaySupported) {
    this.persistentDisplaySupported = persistentDisplaySupported;
    return this;
  }

  /**
   * Whether the client supports the privacy-aware lockscreen protocol (go/assistant-lockscreen-
   * spec).
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getPrivacyAwareLockscreenSupported() {
    return privacyAwareLockscreenSupported;
  }

  /**
   * Whether the client supports the privacy-aware lockscreen protocol (go/assistant-lockscreen-
   * spec).
   * @param privacyAwareLockscreenSupported privacyAwareLockscreenSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setPrivacyAwareLockscreenSupported(java.lang.Boolean privacyAwareLockscreenSupported) {
    this.privacyAwareLockscreenSupported = privacyAwareLockscreenSupported;
    return this;
  }

  /**
   * Whether the client supports tts tapering for the read messages flow. If set to true the tapered
   * tts variant would be used during the read messages flow.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getReadMessagesTtsTaperingSupported() {
    return readMessagesTtsTaperingSupported;
  }

  /**
   * Whether the client supports tts tapering for the read messages flow. If set to true the tapered
   * tts variant would be used during the read messages flow.
   * @param readMessagesTtsTaperingSupported readMessagesTtsTaperingSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setReadMessagesTtsTaperingSupported(java.lang.Boolean readMessagesTtsTaperingSupported) {
    this.readMessagesTtsTaperingSupported = readMessagesTtsTaperingSupported;
    return this;
  }

  /**
   * Whether the client supports message summarization.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getReadNotificationSummarizationSupported() {
    return readNotificationSummarizationSupported;
  }

  /**
   * Whether the client supports message summarization.
   * @param readNotificationSummarizationSupported readNotificationSummarizationSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setReadNotificationSummarizationSupported(java.lang.Boolean readNotificationSummarizationSupported) {
    this.readNotificationSummarizationSupported = readNotificationSummarizationSupported;
    return this;
  }

  /**
   * Whether the client has remote casting enabled. For ex: we want to disable this for clients like
   * Auto.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getRemoteCloudCastingEnabled() {
    return remoteCloudCastingEnabled;
  }

  /**
   * Whether the client has remote casting enabled. For ex: we want to disable this for clients like
   * Auto.
   * @param remoteCloudCastingEnabled remoteCloudCastingEnabled or {@code null} for none
   */
  public AssistantApiSupportedFeatures setRemoteCloudCastingEnabled(java.lang.Boolean remoteCloudCastingEnabled) {
    this.remoteCloudCastingEnabled = remoteCloudCastingEnabled;
    return this;
  }

  /**
   * Whether the Assistant Server should generate feedback suggestion chips.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getServerGeneratedFeedbackChipsEnabled() {
    return serverGeneratedFeedbackChipsEnabled;
  }

  /**
   * Whether the Assistant Server should generate feedback suggestion chips.
   * @param serverGeneratedFeedbackChipsEnabled serverGeneratedFeedbackChipsEnabled or {@code null} for none
   */
  public AssistantApiSupportedFeatures setServerGeneratedFeedbackChipsEnabled(java.lang.Boolean serverGeneratedFeedbackChipsEnabled) {
    this.serverGeneratedFeedbackChipsEnabled = serverGeneratedFeedbackChipsEnabled;
    return this;
  }

  /**
   * Whether the client supports SmartHome lock screen logic (i.e. on Tangor).
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getShLockScreenSupported() {
    return shLockScreenSupported;
  }

  /**
   * Whether the client supports SmartHome lock screen logic (i.e. on Tangor).
   * @param shLockScreenSupported shLockScreenSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setShLockScreenSupported(java.lang.Boolean shLockScreenSupported) {
    this.shLockScreenSupported = shLockScreenSupported;
    return this;
  }

  /**
   * Which kind of sign in the client supports.
   * @return value or {@code null} for none
   */
  public AssistantApiSignInMethod getSignInMethod() {
    return signInMethod;
  }

  /**
   * Which kind of sign in the client supports.
   * @param signInMethod signInMethod or {@code null} for none
   */
  public AssistantApiSupportedFeatures setSignInMethod(AssistantApiSignInMethod signInMethod) {
    this.signInMethod = signInMethod;
    return this;
  }

  /**
   * Whether the client can monitor sleep. This allows us to show sleep CUJ related information:
   * go/TwilightDesign Use for development only, see the same field in
   * DeviceCapabilities.SoftwareCapabilities.SelinaCapabilities.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getSleepSensingSupported() {
    return sleepSensingSupported;
  }

  /**
   * Whether the client can monitor sleep. This allows us to show sleep CUJ related information:
   * go/TwilightDesign Use for development only, see the same field in
   * DeviceCapabilities.SoftwareCapabilities.SelinaCapabilities.
   * @param sleepSensingSupported sleepSensingSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setSleepSensingSupported(java.lang.Boolean sleepSensingSupported) {
    this.sleepSensingSupported = sleepSensingSupported;
    return this;
  }

  /**
   * Whether the client supports smart space cross-device timers. (go/ss-x-device-timer)
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getSmartspaceCrossDeviceTimerSupported() {
    return smartspaceCrossDeviceTimerSupported;
  }

  /**
   * Whether the client supports smart space cross-device timers. (go/ss-x-device-timer)
   * @param smartspaceCrossDeviceTimerSupported smartspaceCrossDeviceTimerSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setSmartspaceCrossDeviceTimerSupported(java.lang.Boolean smartspaceCrossDeviceTimerSupported) {
    this.smartspaceCrossDeviceTimerSupported = smartspaceCrossDeviceTimerSupported;
    return this;
  }

  /**
   * Whether or not the client supports gesture detection via soli chips. The reason to prepend the
   * name with soli is to distinguish it from computer vision based methods, e.g. Newman devices.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getSoliGestureDetectionSupported() {
    return soliGestureDetectionSupported;
  }

  /**
   * Whether or not the client supports gesture detection via soli chips. The reason to prepend the
   * name with soli is to distinguish it from computer vision based methods, e.g. Newman devices.
   * @param soliGestureDetectionSupported soliGestureDetectionSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setSoliGestureDetectionSupported(java.lang.Boolean soliGestureDetectionSupported) {
    this.soliGestureDetectionSupported = soliGestureDetectionSupported;
    return this;
  }

  /**
   * Suggestion chips features, supported by the client.
   * @return value or {@code null} for none
   */
  public AssistantApiSuggestionsSupport getSuggestionsSupport() {
    return suggestionsSupport;
  }

  /**
   * Suggestion chips features, supported by the client.
   * @param suggestionsSupport suggestionsSupport or {@code null} for none
   */
  public AssistantApiSupportedFeatures setSuggestionsSupport(AssistantApiSuggestionsSupport suggestionsSupport) {
    this.suggestionsSupport = suggestionsSupport;
    return this;
  }

  /**
   * Whether the client supports the sunrise screen brightening feature before the alarm fires. This
   * is used to indicate whether sunrise alarms can be set on the device.
   * http://cs/symbol:assistant.api.core_types.governed.RingtoneTaskMetadata.GentleWakeInfo
   * @return value or {@code null} for none
   */
  public AssistantApiSunriseFeaturesSupport getSunriseFeaturesSupport() {
    return sunriseFeaturesSupport;
  }

  /**
   * Whether the client supports the sunrise screen brightening feature before the alarm fires. This
   * is used to indicate whether sunrise alarms can be set on the device.
   * http://cs/symbol:assistant.api.core_types.governed.RingtoneTaskMetadata.GentleWakeInfo
   * @param sunriseFeaturesSupport sunriseFeaturesSupport or {@code null} for none
   */
  public AssistantApiSupportedFeatures setSunriseFeaturesSupport(AssistantApiSunriseFeaturesSupport sunriseFeaturesSupport) {
    this.sunriseFeaturesSupport = sunriseFeaturesSupport;
    return this;
  }

  /**
   * Whether the client supports faster optimization for tap_to_read feature.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getTapToReadOptimizationSupported() {
    return tapToReadOptimizationSupported;
  }

  /**
   * Whether the client supports faster optimization for tap_to_read feature.
   * @param tapToReadOptimizationSupported tapToReadOptimizationSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setTapToReadOptimizationSupported(java.lang.Boolean tapToReadOptimizationSupported) {
    this.tapToReadOptimizationSupported = tapToReadOptimizationSupported;
    return this;
  }

  /**
   * Whether the device supports the 3p GUI framework, which allows third parties to enter the
   * conversation with the user, showing their logo next to their chat bubbles, etc. go/3p-phone
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getThirdPartyGuiSupported() {
    return thirdPartyGuiSupported;
  }

  /**
   * Whether the device supports the 3p GUI framework, which allows third parties to enter the
   * conversation with the user, showing their logo next to their chat bubbles, etc. go/3p-phone
   * @param thirdPartyGuiSupported thirdPartyGuiSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setThirdPartyGuiSupported(java.lang.Boolean thirdPartyGuiSupported) {
    this.thirdPartyGuiSupported = thirdPartyGuiSupported;
    return this;
  }

  /**
   * Transactions features, supported by the client. Transactions feature may includes how
   * Transactions team want to populate additional information from the device to the server.
   * @return value or {@code null} for none
   */
  public AssistantApiTransactionFeaturesSupport getTransactionFeaturesSupport() {
    return transactionFeaturesSupport;
  }

  /**
   * Transactions features, supported by the client. Transactions feature may includes how
   * Transactions team want to populate additional information from the device to the server.
   * @param transactionFeaturesSupport transactionFeaturesSupport or {@code null} for none
   */
  public AssistantApiSupportedFeatures setTransactionFeaturesSupport(AssistantApiTransactionFeaturesSupport transactionFeaturesSupport) {
    this.transactionFeaturesSupport = transactionFeaturesSupport;
    return this;
  }

  /**
   * The version of transactions which the client supports.
   * @return value or {@code null} for none
   */
  public java.lang.String getTransactionsVersion() {
    return transactionsVersion;
  }

  /**
   * The version of transactions which the client supports.
   * @param transactionsVersion transactionsVersion or {@code null} for none
   */
  public AssistantApiSupportedFeatures setTransactionsVersion(java.lang.String transactionsVersion) {
    this.transactionsVersion = transactionsVersion;
    return this;
  }

  /**
   * If set, it indicates that the client can open a separate HTML browser/webviewer (full viewer)
   * to display certain visual results. These visual results usually require more memory to render
   * (e.g. high resolution photos). Compared to the regular viewer that display all other Assistant
   * result, the full viewer does not have memory limit. The field is copied from the device model.
   * See
   * http://google3/assistant/devices_platform/proto/device_model_capabilities.proto?l=225=312576471
   * Also see go/webassistant-full-card-viewer.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getUsesSeparateFullViewer() {
    return usesSeparateFullViewer;
  }

  /**
   * If set, it indicates that the client can open a separate HTML browser/webviewer (full viewer)
   * to display certain visual results. These visual results usually require more memory to render
   * (e.g. high resolution photos). Compared to the regular viewer that display all other Assistant
   * result, the full viewer does not have memory limit. The field is copied from the device model.
   * See
   * http://google3/assistant/devices_platform/proto/device_model_capabilities.proto?l=225=312576471
   * Also see go/webassistant-full-card-viewer.
   * @param usesSeparateFullViewer usesSeparateFullViewer or {@code null} for none
   */
  public AssistantApiSupportedFeatures setUsesSeparateFullViewer(java.lang.Boolean usesSeparateFullViewer) {
    this.usesSeparateFullViewer = usesSeparateFullViewer;
    return this;
  }

  /**
   * Whether the client supports viewing of reminder hub page or not. Default is supported. Set to
   * true to disable returning reminder hub page url in reminder responses.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getViewReminderHubPageNotSupported() {
    return viewReminderHubPageNotSupported;
  }

  /**
   * Whether the client supports viewing of reminder hub page or not. Default is supported. Set to
   * true to disable returning reminder hub page url in reminder responses.
   * @param viewReminderHubPageNotSupported viewReminderHubPageNotSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setViewReminderHubPageNotSupported(java.lang.Boolean viewReminderHubPageNotSupported) {
    this.viewReminderHubPageNotSupported = viewReminderHubPageNotSupported;
    return this;
  }

  /**
   * Whether the client supports the programmatic warm welcome tutorial. Design doc: go/opal-pww-
   * design.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getWarmWelcomeTutorialSupported() {
    return warmWelcomeTutorialSupported;
  }

  /**
   * Whether the client supports the programmatic warm welcome tutorial. Design doc: go/opal-pww-
   * design.
   * @param warmWelcomeTutorialSupported warmWelcomeTutorialSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setWarmWelcomeTutorialSupported(java.lang.Boolean warmWelcomeTutorialSupported) {
    this.warmWelcomeTutorialSupported = warmWelcomeTutorialSupported;
    return this;
  }

  /**
   * Whether the supports opening a URL in a web browser. For example, we want to disable this for
   * clients like Chirp.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getWebBrowserSupported() {
    return webBrowserSupported;
  }

  /**
   * Whether the supports opening a URL in a web browser. For example, we want to disable this for
   * clients like Chirp.
   * @param webBrowserSupported webBrowserSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setWebBrowserSupported(java.lang.Boolean webBrowserSupported) {
    this.webBrowserSupported = webBrowserSupported;
    return this;
  }

  /**
   * Whether or not the client supports WhatsNext in the protocol.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getWhatsNextSupported() {
    return whatsNextSupported;
  }

  /**
   * Whether or not the client supports WhatsNext in the protocol.
   * @param whatsNextSupported whatsNextSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setWhatsNextSupported(java.lang.Boolean whatsNextSupported) {
    this.whatsNextSupported = whatsNextSupported;
    return this;
  }

  /**
   * Whether the client supports joining a Zoom meeting.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getZoomSupported() {
    return zoomSupported;
  }

  /**
   * Whether the client supports joining a Zoom meeting.
   * @param zoomSupported zoomSupported or {@code null} for none
   */
  public AssistantApiSupportedFeatures setZoomSupported(java.lang.Boolean zoomSupported) {
    this.zoomSupported = zoomSupported;
    return this;
  }

  @Override
  public AssistantApiSupportedFeatures set(String fieldName, Object value) {
    return (AssistantApiSupportedFeatures) super.set(fieldName, value);
  }

  @Override
  public AssistantApiSupportedFeatures clone() {
    return (AssistantApiSupportedFeatures) super.clone();
  }

}
