/*
 * 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;

/**
 * Used to describe app capabilities of the device installed apps reported to the server.
 *
 * <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 AssistantApiAppCapabilities extends com.google.api.client.json.GenericJson {

  /**
   * Indicates whether the provider is compatible for media fulfillment on this surface. For
   * example, Amazon Music isn't compatible with the driving mode.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean allowlistedForMediaFulfillment;

  /**
   * Currently unused. Will be used in the future when integrating with incremental app
   * capabilities.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiAppIntegrationsSettings appIntegrationsSettings;

  /**
   * This system app is disabled in settings.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean disabledSystemApp;

  /**
   * The installed app of the provider.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private AssistantApiCoreTypesProvider provider;

  /**
   * This provider has integrated its cloud backend with Google, and Google can route the user
   * queries to the provider's cloud.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean routableToProviderCloud;

  /**
   * This provider has an app that supports on-device search through the provider's own inventory.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean searchableOnDevice;

  /**
   * This provider has integrated its content with Google, and Google has enabled to serve its
   * content as a server-side solution.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean searchableOnServer;

  /**
   * This provider has an app that supports starting new media playback when there is no screen
   * (e.g. by integrating with the Bisto SDK).
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean supportsScreenlessInitiation;

  /**
   * This provider is an app which should be used for query annotations. This is useful for apps
   * which may not be already indexed by Google or are client specific.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Boolean whitelistedForAnnotation;

  /**
   * Indicates whether the provider is compatible for media fulfillment on this surface. For
   * example, Amazon Music isn't compatible with the driving mode.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getAllowlistedForMediaFulfillment() {
    return allowlistedForMediaFulfillment;
  }

  /**
   * Indicates whether the provider is compatible for media fulfillment on this surface. For
   * example, Amazon Music isn't compatible with the driving mode.
   * @param allowlistedForMediaFulfillment allowlistedForMediaFulfillment or {@code null} for none
   */
  public AssistantApiAppCapabilities setAllowlistedForMediaFulfillment(java.lang.Boolean allowlistedForMediaFulfillment) {
    this.allowlistedForMediaFulfillment = allowlistedForMediaFulfillment;
    return this;
  }

  /**
   * Currently unused. Will be used in the future when integrating with incremental app
   * capabilities.
   * @return value or {@code null} for none
   */
  public AssistantApiAppIntegrationsSettings getAppIntegrationsSettings() {
    return appIntegrationsSettings;
  }

  /**
   * Currently unused. Will be used in the future when integrating with incremental app
   * capabilities.
   * @param appIntegrationsSettings appIntegrationsSettings or {@code null} for none
   */
  public AssistantApiAppCapabilities setAppIntegrationsSettings(AssistantApiAppIntegrationsSettings appIntegrationsSettings) {
    this.appIntegrationsSettings = appIntegrationsSettings;
    return this;
  }

  /**
   * This system app is disabled in settings.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getDisabledSystemApp() {
    return disabledSystemApp;
  }

  /**
   * This system app is disabled in settings.
   * @param disabledSystemApp disabledSystemApp or {@code null} for none
   */
  public AssistantApiAppCapabilities setDisabledSystemApp(java.lang.Boolean disabledSystemApp) {
    this.disabledSystemApp = disabledSystemApp;
    return this;
  }

  /**
   * The installed app of the provider.
   * @return value or {@code null} for none
   */
  public AssistantApiCoreTypesProvider getProvider() {
    return provider;
  }

  /**
   * The installed app of the provider.
   * @param provider provider or {@code null} for none
   */
  public AssistantApiAppCapabilities setProvider(AssistantApiCoreTypesProvider provider) {
    this.provider = provider;
    return this;
  }

  /**
   * This provider has integrated its cloud backend with Google, and Google can route the user
   * queries to the provider's cloud.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getRoutableToProviderCloud() {
    return routableToProviderCloud;
  }

  /**
   * This provider has integrated its cloud backend with Google, and Google can route the user
   * queries to the provider's cloud.
   * @param routableToProviderCloud routableToProviderCloud or {@code null} for none
   */
  public AssistantApiAppCapabilities setRoutableToProviderCloud(java.lang.Boolean routableToProviderCloud) {
    this.routableToProviderCloud = routableToProviderCloud;
    return this;
  }

  /**
   * This provider has an app that supports on-device search through the provider's own inventory.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getSearchableOnDevice() {
    return searchableOnDevice;
  }

  /**
   * This provider has an app that supports on-device search through the provider's own inventory.
   * @param searchableOnDevice searchableOnDevice or {@code null} for none
   */
  public AssistantApiAppCapabilities setSearchableOnDevice(java.lang.Boolean searchableOnDevice) {
    this.searchableOnDevice = searchableOnDevice;
    return this;
  }

  /**
   * This provider has integrated its content with Google, and Google has enabled to serve its
   * content as a server-side solution.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getSearchableOnServer() {
    return searchableOnServer;
  }

  /**
   * This provider has integrated its content with Google, and Google has enabled to serve its
   * content as a server-side solution.
   * @param searchableOnServer searchableOnServer or {@code null} for none
   */
  public AssistantApiAppCapabilities setSearchableOnServer(java.lang.Boolean searchableOnServer) {
    this.searchableOnServer = searchableOnServer;
    return this;
  }

  /**
   * This provider has an app that supports starting new media playback when there is no screen
   * (e.g. by integrating with the Bisto SDK).
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getSupportsScreenlessInitiation() {
    return supportsScreenlessInitiation;
  }

  /**
   * This provider has an app that supports starting new media playback when there is no screen
   * (e.g. by integrating with the Bisto SDK).
   * @param supportsScreenlessInitiation supportsScreenlessInitiation or {@code null} for none
   */
  public AssistantApiAppCapabilities setSupportsScreenlessInitiation(java.lang.Boolean supportsScreenlessInitiation) {
    this.supportsScreenlessInitiation = supportsScreenlessInitiation;
    return this;
  }

  /**
   * This provider is an app which should be used for query annotations. This is useful for apps
   * which may not be already indexed by Google or are client specific.
   * @return value or {@code null} for none
   */
  public java.lang.Boolean getWhitelistedForAnnotation() {
    return whitelistedForAnnotation;
  }

  /**
   * This provider is an app which should be used for query annotations. This is useful for apps
   * which may not be already indexed by Google or are client specific.
   * @param whitelistedForAnnotation whitelistedForAnnotation or {@code null} for none
   */
  public AssistantApiAppCapabilities setWhitelistedForAnnotation(java.lang.Boolean whitelistedForAnnotation) {
    this.whitelistedForAnnotation = whitelistedForAnnotation;
    return this;
  }

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

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

}
