package com.smartdevicelink.proxy.rpc;

import android.support.annotation.NonNull;

import com.smartdevicelink.proxy.RPCStruct;

import java.util.Hashtable;

public class AudioControlCapabilities extends RPCStruct {
	public static final String KEY_MODULE_NAME = "moduleName";
	public static final String KEY_SOURCE_AVAILABLE = "sourceAvailable";
	public static final String KEY_VOLUME_AVAILABLE = "volumeAvailable";
	public static final String KEY_EQUALIZER_AVAILABLE = "equalizerAvailable";
	public static final String KEY_EQUALIZER_MAX_CHANNEL_ID = "equalizerMaxChannelId";

	/**
	 * Constructs a newly allocated AudioControlCapabilities object
	 */
	public AudioControlCapabilities() {
	}

	/**
	 * Constructs a newly allocated AudioControlCapabilities object indicated by the Hashtable parameter
	 *
	 * @param hash The Hashtable to use
	 */
	public AudioControlCapabilities(Hashtable<String, Object> hash) {
		super(hash);
	}

	/**
	 * Constructs a newly allocated AudioControlCapabilities object
	 *
	 * @param moduleName short friendly name of the light control module.
	 */
	public AudioControlCapabilities(@NonNull String moduleName) {
		this();
		setModuleName(moduleName);
	}

	/**
	 * Sets the moduleName portion of the AudioControlCapabilities class
	 *
	 * @param moduleName The short friendly name of the light control module. It should not be used to identify a module by mobile application.
	 */
	public void setModuleName(@NonNull String moduleName) {
		setValue(KEY_MODULE_NAME, moduleName);
	}

	/**
	 * Gets the moduleName portion of the AudioControlCapabilities class
	 *
	 * @return String - The short friendly name of the light control module. It should not be used to identify a module by mobile application.
	 */
	public String getModuleName() {
		return getString(KEY_MODULE_NAME);
	}

	/**
	 * Sets the sourceAvailable portion of the AudioControlCapabilities class
	 *
	 * @param sourceAvailable Availability of the control of audio source.
	 */
	public void setSourceAvailable(Boolean sourceAvailable) {
		setValue(KEY_SOURCE_AVAILABLE, sourceAvailable);
	}

	/**
	 * Gets the sourceAvailable portion of the AudioControlCapabilities class
	 *
	 * @return Boolean - Availability of the control of audio source.
	 */
	public Boolean getSourceAvailable() {
		return getBoolean(KEY_SOURCE_AVAILABLE);
	}

	/**
	 * Sets the volumeAvailable portion of the AudioControlCapabilities class
	 *
	 * @param volumeAvailable Availability of the control of audio volume.
	 */
	public void setVolumeAvailable(Boolean volumeAvailable) {
		setValue(KEY_VOLUME_AVAILABLE, volumeAvailable);
	}

	/**
	 * Gets the volumeAvailable portion of the AudioControlCapabilities class
	 *
	 * @return Boolean - Availability of the control of audio volume.
	 */
	public Boolean getVolumeAvailable() {
		return getBoolean(KEY_VOLUME_AVAILABLE);
	}

	/**
	 * Sets the equalizerAvailable portion of the AudioControlCapabilities class
	 *
	 * @param equalizerAvailable Availability of the control of Equalizer Settings.
	 */
	public void setEqualizerAvailable(Boolean equalizerAvailable) {
		setValue(KEY_EQUALIZER_AVAILABLE, equalizerAvailable);
	}

	/**
	 * Gets the equalizerAvailable portion of the AudioControlCapabilities class
	 *
	 * @return Boolean - Availability of the control of Equalizer Settings.
	 */
	public Boolean getEqualizerAvailable() {
		return getBoolean(KEY_EQUALIZER_AVAILABLE);
	}

	/**
	 * Sets the equalizerMaxChannelId portion of the AudioControlCapabilities class
	 *
	 * @param equalizerMaxChannelId Must be included if equalizerAvailable=true, and assume all IDs starting from 1 to this value are valid.
	 */
	public void setEqualizerMaxChannelId(Integer equalizerMaxChannelId) {
		setValue(KEY_EQUALIZER_MAX_CHANNEL_ID, equalizerMaxChannelId);
	}

	/**
	 * Gets the equalizerMaxChannelId portion of the AudioControlCapabilities class
	 *
	 * @return Integer - Must be included if equalizerAvailable=true, and assume all IDs starting from 1 to this value are valid.
	 */
	public Integer getEqualizerMaxChannelId() {
		return getInteger(KEY_EQUALIZER_MAX_CHANNEL_ID);
	}

}

@@ -331,32 +331,113 @@
 urceAvailable%22;%0A
+%09public static final String KEY_KEEP_CONTEXT_AVAILABLE = %22keepContextAvailable%22;%0A
 %09public static f
@@ -1879,32 +1879,592 @@
 DULE_NAME);%0A%09%7D%0A%0A
+%09/**%0A%09 * Sets the keepContextAvailable portion of the AudioControlCapabilities class%0A%09 *%0A%09 * @param keepContextAvailable Availability of the keepContext parameter.%0A%09 */%0A%09public void setKeepContextAvailable(Boolean keepContextAvailable) %7B%0A%09%09setValue(KEY_KEEP_CONTEXT_AVAILABLE, keepContextAvailable);%0A%09%7D%0A%0A%09/**%0A%09 * Gets the keepContextAvailable portion of the AudioControlCapabilities class%0A%09 *%0A%09 * @return Boolean - Availability of the keepContext parameter.%0A%09 */%0A%09public Boolean getKeepContextAvailable() %7B%0A%09%09return getBoolean(KEY_KEEP_CONTEXT_AVAILABLE);%0A%09%7D%0A%0A
 %09/**%0A%09 * Sets th

Add keepContextAvailable