# TvInputService.HardwareSession

Added in[API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)

# HardwareSession

*** ** * ** ***

Kotlin\|[Java](https://developer.android.com/reference/android/media/tv/TvInputService.HardwareSession "View this page in Java")  

```
abstract class HardwareSession : TvInputService.Session
```

|---|---|----------------------------------------------------------------------------------------------------------------------------------------------------|
| [kotlin.Any](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-any/index.html)                                                                        |||
| ↳ | [android.media.tv.TvInputService.Session](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session)                     ||
|   | ↳ | [android.media.tv.TvInputService.HardwareSession](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.HardwareSession#) |

Base class for a TV input session which represents an external device connected to a hardware TV input.

This class is for an input which provides channels for the external set-top box to the application. Once a TV input returns an implementation of this class on[onCreateSession(java.lang.String)](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService#onCreateSession(kotlin.String)), the framework will create a separate session for a hardware TV Input (e.g. HDMI 1) and forward the application's surface to the session so that the user can see the screen of the hardware TV Input when she tunes to a channel from this TV input. The implementation of this class is expected to change the channel of the external set-top box via a proprietary protocol when android.media.tv.TvInputService.HardwareSession#onTune is requested by the application.

Note that this class is not for inputs for internal hardware like built-in tuner and HDMI 1.

## Summary

|                                                                                                                                          Public constructors                                                                                                                                          ||
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| [HardwareSession](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.HardwareSession#HardwareSession(android.content.Context))`(`context:` `[Context](https://developer.android.com/reference/kotlin/android/content/Context.html#)!`)` Creates a new HardwareSession. |

|                                                                                                                                                                                                                                                                                           Public methods                                                                                                                                                                                                                                                                                            ||
|-------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| abstract[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)! | [getHardwareInputId](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.HardwareSession#getHardwareInputId())`()` Returns the hardware TV input ID the external device is connected to.                                                                                                                                                                                                                                                                                      |
| open[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)          | [onHardwareVideoAvailable](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.HardwareSession#onHardwareVideoAvailable())`()` Called when the underlying hardware TV input session calls[TvInputService.Session.notifyVideoAvailable()](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyVideoAvailable()).                                                                                                                      |
| open[Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)          | [onHardwareVideoUnavailable](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.HardwareSession#onHardwareVideoUnavailable(kotlin.Int))`(`reason:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` Called when the underlying hardware TV input session calls[TvInputService.Session.notifyVideoUnavailable(int)](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyVideoUnavailable(kotlin.Int)). |
| [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)        | [onSetSurface](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.HardwareSession#onSetSurface(android.view.Surface))`(`surface:` `[Surface](https://developer.android.com/reference/kotlin/android/view/Surface.html#)?`)` This method will not be called in[HardwareSession](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.HardwareSession#).                                                                                             |

| Inherited functions ||
|---|---|
| From class[Session](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session) |------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [layoutSurface](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#layoutSurface(kotlin.Int,%20kotlin.Int,%20kotlin.Int,%20kotlin.Int))`(`left:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `top:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `right:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `bottom:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` <br /> Assigns a size and position to the surface passed in[onSetSurface](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onSetSurface(android.view.Surface)). The position is relative to the overlay view that sits on top of this surface. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyAdBufferConsumed](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyAdBufferConsumed(android.media.tv.AdBuffer))`(`buffer:` `[AdBuffer](https://developer.android.com/reference/kotlin/android/media/tv/AdBuffer)`)` <br /> Notifies the advertisement buffer is consumed. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyAdResponse](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyAdResponse(android.media.tv.AdResponse))`(`response:` `[AdResponse](https://developer.android.com/reference/kotlin/android/media/tv/AdResponse)`)` <br /> Notifies response for advertisement. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyAitInfoUpdated](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyAitInfoUpdated(android.media.tv.AitInfo))`(`aitInfo:` `[AitInfo](https://developer.android.com/reference/kotlin/android/media/tv/AitInfo)`)` <br /> Informs the app that the AIT (Application Information Table) is updated. This method should also be called when[onSetInteractiveAppNotificationEnabled(boolean)](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onSetInteractiveAppNotificationEnabled(kotlin.Boolean))is called to send the first AIT info. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyAudioPresentationChanged](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyAudioPresentationChanged(kotlin.collections.MutableList))`(`audioPresentations:` `[MutableList](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/index.html)<[AudioPresentation](https://developer.android.com/reference/kotlin/android/media/AudioPresentation.html#)!>`)` <br /> Sends an updated list of all audio presentations available from a Next Generation Audio service. This is used by the framework to maintain the audio presentation information for a given track of[TvTrackInfo.TYPE_AUDIO](https://developer.android.com/reference/kotlin/android/media/tv/TvTrackInfo#TYPE_AUDIO:kotlin.Int), which in turn is used by[TvView.getAudioPresentations](https://developer.android.com/reference/kotlin/android/media/tv/TvView#getAudioPresentations())for the application to retrieve metadata for the current audio track. The TV input service must call this method as soon as the audio track presentation information becomes available or is updated. Note that in a case where a part of the information for the current track is updated, it is not necessary to create a new[TvTrackInfo](https://developer.android.com/reference/kotlin/android/media/tv/TvTrackInfo)object with a different track ID. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyAudioPresentationSelected](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyAudioPresentationSelected(kotlin.Int,%20kotlin.Int))`(`presentationId:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `programId:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` <br /> Sends the presentation and program IDs of the selected audio presentation. This is used to inform the application that a specific audio presentation is selected. The TV input service must call this method as soon as an audio presentation is selected either by default or in response to a call to[onSelectTrack](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onSelectTrack(kotlin.Int,%20kotlin.String)). The selected audio presentation ID for a currently selected audio track is maintained in the framework until the next call to this method even after the entire audio presentation list for the track is updated (but is reset when the session is tuned to a new channel), so care must be taken not to result in an obsolete track audio presentation ID. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyAvailableSpeeds](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyAvailableSpeeds(kotlin.FloatArray))`(`speeds:` `[FloatArray](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-float-array/index.html)`)` <br /> Informs the app available speeds for time-shifting. This should be called when time-shifting is enabled. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyBroadcastInfoResponse](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyBroadcastInfoResponse(android.media.tv.BroadcastInfoResponse))`(`response:` `[BroadcastInfoResponse](https://developer.android.com/reference/kotlin/android/media/tv/BroadcastInfoResponse)`)` <br /> Notifies response for broadcast info. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyChannelRetuned](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyChannelRetuned(android.net.Uri))`(`channelUri:` `[Uri](https://developer.android.com/reference/kotlin/android/net/Uri.html#)!`)` <br /> Informs the application that the current channel is re-tuned for some reason and the session now displays the content from a new channel. This is used to handle special cases such as when the current channel becomes unavailable, it is necessary to send the user to a certain channel or the user changes channel in some other way (e.g. by using a dedicated remote). <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyContentAllowed](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyContentAllowed())`()` <br /> Informs the application that the user is allowed to watch the current program content. Each TV input service is required to query the system whether the user is allowed to watch the current program before showing it to the user if the parental controls is enabled (i.e.[TvInputManager.isParentalControlsEnabled()](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#isParentalControlsEnabled())returns`true`). Whether the TV input service should block the content or not is determined by invoking[TvInputManager.isRatingBlocked(TvContentRating)](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#isRatingBlocked(android.media.tv.TvContentRating))with the content rating for the current program. Then the[TvInputManager](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager)makes a judgment based on the user blocked ratings stored in the secure settings and returns the result. If the rating in question turns out to be allowed by the user, the TV input service must call this method to notify the application that is permitted to show the content. Each TV input service also needs to continuously listen to any changes made to the parental controls settings by registering a broadcast receiver to receive[TvInputManager.ACTION_BLOCKED_RATINGS_CHANGED](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#ACTION_BLOCKED_RATINGS_CHANGED:kotlin.String)and[TvInputManager.ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED:kotlin.String)and immediately reevaluate the current program with the new parental controls settings. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyContentBlocked](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyContentBlocked(android.media.tv.TvContentRating))`(`rating:` `[TvContentRating](https://developer.android.com/reference/kotlin/android/media/tv/TvContentRating)`)` <br /> Informs the application that the current program content is blocked by parent controls. Each TV input service is required to query the system whether the user is allowed to watch the current program before showing it to the user if the parental controls is enabled (i.e.[TvInputManager.isParentalControlsEnabled()](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#isParentalControlsEnabled())returns`true`). Whether the TV input service should block the content or not is determined by invoking[TvInputManager.isRatingBlocked(TvContentRating)](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#isRatingBlocked(android.media.tv.TvContentRating))with the content rating for the current program or[TvContentRating.UNRATED](https://developer.android.com/reference/kotlin/android/media/tv/TvContentRating#UNRATED:android.media.tv.TvContentRating)in case the rating information is missing. Then the[TvInputManager](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager)makes a judgment based on the user blocked ratings stored in the secure settings and returns the result. If the rating in question turns out to be blocked, the TV input service must immediately block the content and call this method with the content rating of the current program to prompt the PIN verification screen. Each TV input service also needs to continuously listen to any changes made to the parental controls settings by registering a broadcast receiver to receive[TvInputManager.ACTION_BLOCKED_RATINGS_CHANGED](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#ACTION_BLOCKED_RATINGS_CHANGED:kotlin.String)and[TvInputManager.ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#ACTION_PARENTAL_CONTROLS_ENABLED_CHANGED:kotlin.String)and immediately reevaluate the current program with the new parental controls settings. <br />                                                                                                                                          | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyCueingMessageAvailability](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyCueingMessageAvailability(kotlin.Boolean))`(`available:` `[Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`)` <br /> Informs the application that cueing message is available or unavailable. The cueing message is used for digital program insertion, based on the standard ANSI/SCTE 35 2019r1. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifySignalStrength](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifySignalStrength(kotlin.Int))`(`strength:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` <br /> Notifies signal strength. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyTimeShiftMode](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyTimeShiftMode(kotlin.Int))`(`mode:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` <br /> Informs the app that the time shift mode is set or updated. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyTimeShiftStatusChanged](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyTimeShiftStatusChanged(kotlin.Int))`(`status:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` <br /> Informs the application that the time shift status is changed. Prior to calling this method, the application assumes the status[TvInputManager.TIME_SHIFT_STATUS_UNKNOWN](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#TIME_SHIFT_STATUS_UNKNOWN:kotlin.Int). Right after the session is created, it is important to invoke the method with the status[TvInputManager.TIME_SHIFT_STATUS_AVAILABLE](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#TIME_SHIFT_STATUS_AVAILABLE:kotlin.Int)if the implementation does support time shifting, or[TvInputManager.TIME_SHIFT_STATUS_UNSUPPORTED](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#TIME_SHIFT_STATUS_UNSUPPORTED:kotlin.Int)otherwise. Failure to notifying the current status change immediately might result in an undesirable behavior in the application such as hiding the play controls. If the status[TvInputManager.TIME_SHIFT_STATUS_AVAILABLE](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#TIME_SHIFT_STATUS_AVAILABLE:kotlin.Int)is reported, the application assumes it can pause/resume playback, seek to a specified time position and set playback rate and audio mode. The implementation should override[onTimeShiftPause](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftPause()),[onTimeShiftResume](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftResume()),[onTimeShiftSeekTo](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftSeekTo(kotlin.Long)),[onTimeShiftGetStartPosition](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftGetStartPosition()),[onTimeShiftGetCurrentPosition](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftGetCurrentPosition())and[onTimeShiftSetPlaybackParams](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftSetPlaybackParams(android.media.PlaybackParams)). <br /> | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyTrackSelected](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyTrackSelected(kotlin.Int,%20kotlin.String))`(`type:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `trackId:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)!`)` <br /> Sends the type and ID of a selected track. This is used to inform the application that a specific track is selected. The TV input service must call this method as soon as a track is selected either by default or in response to a call to[onSelectTrack](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onSelectTrack(kotlin.Int,%20kotlin.String)). The selected track ID for a given type is maintained in the framework until the next call to this method even after the entire track list is updated (but is reset when the session is tuned to a new channel), so care must be taken not to result in an obsolete track ID. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyTracksChanged](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyTracksChanged(kotlin.collections.MutableList))`(`tracks:` `[MutableList](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/-mutable-list/index.html)<[TvTrackInfo](https://developer.android.com/reference/kotlin/android/media/tv/TvTrackInfo)!>!`)` <br /> Sends the list of all audio/video/subtitle tracks. The is used by the framework to maintain the track information for a given session, which in turn is used by[TvView.getTracks](https://developer.android.com/reference/kotlin/android/media/tv/TvView#getTracks(kotlin.Int))for the application to retrieve metadata for a given track type. The TV input service must call this method as soon as the track information becomes available or is updated. Note that in a case where a part of the information for a certain track is updated, it is not necessary to create a new[TvTrackInfo](https://developer.android.com/reference/kotlin/android/media/tv/TvTrackInfo)object with a different track ID. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyTuned](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyTuned(android.net.Uri))`(`channelUri:` `[Uri](https://developer.android.com/reference/kotlin/android/net/Uri.html#)`)` <br /> Informs the application that this session has been tuned to the given channel. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyTvMessage](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyTvMessage(kotlin.Int,%20android.os.Bundle))`(`type:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `data:` `[Bundle](https://developer.android.com/reference/kotlin/android/os/Bundle.html#)`)` <br /> Sends the raw data from the received TV message as well as the type of message received. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyVideoAvailable](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyVideoAvailable())`()` <br /> Informs the application that the video is now available for watching. Video is blocked until this method is called. The TV input service must call this method as soon as the content rendered onto its surface is ready for viewing. This method must be called each time #onTune is called. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyVideoFreezeUpdated](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyVideoFreezeUpdated(kotlin.Boolean))`(`isFrozen:` `[Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`)` <br /> Informs the application that the video freeze state has been updated. When`true`, the video is frozen on the last frame but audio playback remains active. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [notifyVideoUnavailable](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyVideoUnavailable(kotlin.Int))`(`reason:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` <br /> Informs the application that the video became unavailable for some reason. This is primarily used to signal the application to block the screen not to show any intermittent video artifacts. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onAdBufferReady](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onAdBufferReady(android.media.tv.AdBuffer))`(`buffer:` `[AdBuffer](https://developer.android.com/reference/kotlin/android/media/tv/AdBuffer)`)` <br /> Called when an advertisement buffer is ready for playback. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onAppPrivateCommand](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onAppPrivateCommand(kotlin.String,%20android.os.Bundle))`(`action:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `data:` `[Bundle](https://developer.android.com/reference/kotlin/android/os/Bundle.html#)!`)` <br /> Processes a private command sent from the application to the TV input. This can be used to provide domain-specific features that are only known between certain TV inputs and their clients. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | | [View](https://developer.android.com/reference/kotlin/android/view/View.html#)!    | [onCreateOverlayView](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onCreateOverlayView())`()` <br /> Called when the application requests to create an overlay view. Each session implementation can override this method and return its own view. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | | [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | [onGenericMotionEvent](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onGenericMotionEvent(android.view.MotionEvent))`(`event:` `[MotionEvent](https://developer.android.com/reference/kotlin/android/view/MotionEvent.html#)!`)` <br /> Implement this method to handle generic motion events on the current input session. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | | [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | [onKeyDown](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onKeyDown(kotlin.Int,%20android.view.KeyEvent))`(`keyCode:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `event:` `[KeyEvent](https://developer.android.com/reference/kotlin/android/view/KeyEvent.html#)!`)` <br /> Default implementation of[KeyEvent.Callback.onKeyDown()](https://developer.android.com/reference/kotlin/android/view/KeyEvent.Callback.html#onKeyDown(kotlin.Int,%20android.view.KeyEvent)): always returns false (doesn't handle the event). Override this to intercept key down events before they are processed by the application. If you return true, the application will not process the event itself. If you return false, the normal application processing will occur as if the TV input had not seen the event at all. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | | [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | [onKeyLongPress](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onKeyLongPress(kotlin.Int,%20android.view.KeyEvent))`(`keyCode:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `event:` `[KeyEvent](https://developer.android.com/reference/kotlin/android/view/KeyEvent.html#)!`)` <br /> Default implementation of[KeyEvent.Callback.onKeyLongPress()](https://developer.android.com/reference/kotlin/android/view/KeyEvent.Callback.html#onKeyLongPress(kotlin.Int,%20android.view.KeyEvent)): always returns false (doesn't handle the event). Override this to intercept key long press events before they are processed by the application. If you return true, the application will not process the event itself. If you return false, the normal application processing will occur as if the TV input had not seen the event at all. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | | [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | [onKeyMultiple](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onKeyMultiple(kotlin.Int,%20kotlin.Int,%20android.view.KeyEvent))`(`keyCode:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `count:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `event:` `[KeyEvent](https://developer.android.com/reference/kotlin/android/view/KeyEvent.html#)!`)` <br /> Default implementation of[KeyEvent.Callback.onKeyMultiple()](https://developer.android.com/reference/kotlin/android/view/KeyEvent.Callback.html#onKeyMultiple(kotlin.Int,%20kotlin.Int,%20android.view.KeyEvent)): always returns false (doesn't handle the event). Override this to intercept special key multiple events before they are processed by the application. If you return true, the application will not itself process the event. If you return false, the normal application processing will occur as if the TV input had not seen the event at all. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | | [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | [onKeyUp](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onKeyUp(kotlin.Int,%20android.view.KeyEvent))`(`keyCode:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `event:` `[KeyEvent](https://developer.android.com/reference/kotlin/android/view/KeyEvent.html#)!`)` <br /> Default implementation of[KeyEvent.Callback.onKeyUp()](https://developer.android.com/reference/kotlin/android/view/KeyEvent.Callback.html#onKeyUp(kotlin.Int,%20android.view.KeyEvent)): always returns false (doesn't handle the event). Override this to intercept key up events before they are processed by the application. If you return true, the application will not itself process the event. If you return false, the normal application processing will occur as if the TV input had not seen the event at all. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onOverlayViewSizeChanged](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onOverlayViewSizeChanged(kotlin.Int,%20kotlin.Int))`(`width:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `height:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` <br /> Called when the size of the overlay view is changed by the application. This is always called at least once when the session is created regardless of whether the overlay view is enabled or not. The overlay view size is the same as the containing[TvView](https://developer.android.com/reference/kotlin/android/media/tv/TvView). Note that the size of the underlying surface can be different if the surface was changed by calling[layoutSurface](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#layoutSurface(kotlin.Int,%20kotlin.Int,%20kotlin.Int,%20kotlin.Int)). <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onRelease](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onRelease())`()` <br /> Called when the session is released. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onRemoveBroadcastInfo](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onRemoveBroadcastInfo(kotlin.Int))`(`requestId:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` <br /> Called when broadcast info is removed. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onRequestAd](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onRequestAd(android.media.tv.AdRequest))`(`request:` `[AdRequest](https://developer.android.com/reference/kotlin/android/media/tv/AdRequest)`)` <br /> Called when advertisement request is received. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onRequestBroadcastInfo](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onRequestBroadcastInfo(android.media.tv.BroadcastInfoRequest))`(`request:` `[BroadcastInfoRequest](https://developer.android.com/reference/kotlin/android/media/tv/BroadcastInfoRequest)`)` <br /> Called when broadcast info is requested. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onResumePlayback](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onResumePlayback())`()` <br /> Resumes playback of the Audio, Video, and CC streams. Note that this is different form #timeShiftResume() as this is intended to be used after stopping playback. This is used to resume playback from the current position in the live broadcast. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | | [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | [onSelectAudioPresentation](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onSelectAudioPresentation(kotlin.Int,%20kotlin.Int))`(`presentationId:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `programId:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` <br /> Selects an audio presentation. On successfully selecting the audio presentation,[notifyAudioPresentationSelected](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyAudioPresentationSelected(kotlin.Int,%20kotlin.Int))is invoked to provide updated information about the selected audio presentation to applications. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | | [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | [onSelectTrack](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onSelectTrack(kotlin.Int,%20kotlin.String))`(`type:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `trackId:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)?`)` <br /> Selects a given track. If this is done successfully, the implementation should call[notifyTrackSelected](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyTrackSelected(kotlin.Int,%20kotlin.String))to help applications maintain the up-to-date list of the selected tracks. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onSetCaptionEnabled](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onSetCaptionEnabled(kotlin.Boolean))`(`enabled:` `[Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`)` <br /> Enables or disables the caption. The locale for the user's preferred captioning language can be obtained by calling[CaptioningManager.getLocale()](https://developer.android.com/reference/kotlin/android/view/accessibility/CaptioningManager.html#getLocale()). <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onSetInteractiveAppNotificationEnabled](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onSetInteractiveAppNotificationEnabled(kotlin.Boolean))`(`enabled:` `[Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`)` <br /> Enables or disables interactive app notification. This method enables or disables the event detection from the corresponding TV input. When it's enabled, the TV input service detects events related to interactive app, such as AIT (Application Information Table) and sends to TvView or the linked TV interactive app service. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onSetStreamVolume](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onSetStreamVolume(kotlin.Float))`(`volume:` `[Float](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-float/index.html)`)` <br /> Sets the relative stream volume of the current TV input session. The implementation should honor this request in order to handle audio focus changes or mute the current session when multiple sessions, possibly from different inputs are active. If the method has not yet been called, the implementation should assume the default value of`1.0f`. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onSetTvMessageEnabled](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onSetTvMessageEnabled(kotlin.Int,%20kotlin.Boolean))`(`type:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `enabled:` `[Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`)` <br /> Called when the application enables or disables the detection of the specified message type. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onStopPlayback](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onStopPlayback(kotlin.Int))`(`mode:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` <br /> Called when the application requests playback of the Audio, Video, and CC streams to be stopped, but the metadata should continue to be filtered. The metadata that will continue to be filtered includes the PSI (Program specific information) and SI (Service Information), part of ISO/IEC 13818-1. Note that this is different form #timeShiftPause() as should release the stream, making it impossible to resume from this position again. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onSurfaceChanged](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onSurfaceChanged(kotlin.Int,%20kotlin.Int,%20kotlin.Int))`(`format:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `width:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `height:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` <br /> Called after any structural changes (format or size) have been made to the surface passed in[onSetSurface](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onSetSurface(android.view.Surface)). This method is always called at least once, after[onSetSurface](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onSetSurface(android.view.Surface))is called with non-null surface. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | | [Long](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)       | [onTimeShiftGetCurrentPosition](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftGetCurrentPosition())`()` <br /> Returns the current position for time shifting, in milliseconds since the epoch. Returns[TvInputManager.TIME_SHIFT_INVALID_TIME](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#TIME_SHIFT_INVALID_TIME:kotlin.Long)if the position is unknown at the moment. The current position for time shifting is the same as the current position of playback. It should be equal to or greater than the start position reported by[onTimeShiftGetStartPosition()](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftGetStartPosition()). When playback is completed, the current position should stay where the playback ends, in other words, the returned value of this mehtod should be equal to the start position plus the duration of the program. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | | [Long](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)       | [onTimeShiftGetStartPosition](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftGetStartPosition())`()` <br /> Returns the start position for time shifting, in milliseconds since the epoch. Returns[TvInputManager.TIME_SHIFT_INVALID_TIME](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#TIME_SHIFT_INVALID_TIME:kotlin.Long)if the position is unknown at the moment. The start position for time shifting indicates the earliest possible time the user can seek to. Initially this is equivalent to the time when the implementation starts recording. Later it may be adjusted because there is insufficient space or the duration of recording is limited by the implementation. The application does not allow the user to seek to a position earlier than the start position. For playback of a recorded program initiated by[onTimeShiftPlay(android.net.Uri)](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftPlay(android.net.Uri)), the start position should be 0 and does not change. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onTimeShiftPause](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftPause())`()` <br /> Called when the application requests to pause playback. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onTimeShiftPlay](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftPlay(android.net.Uri))`(`recordedProgramUri:` `[Uri](https://developer.android.com/reference/kotlin/android/net/Uri.html#)!`)` <br /> Called when the application requests to play a given recorded TV program. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onTimeShiftResume](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftResume())`()` <br /> Called when the application requests to resume playback. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onTimeShiftSeekTo](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftSeekTo(kotlin.Long))`(`timeMs:` `[Long](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-long/index.html)`)` <br /> Called when the application requests to seek to a specified time position. Normally, the position is given within range between the start and the current time, inclusively. The implementation is expected to seek to the nearest time position if the given position is not in the range. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onTimeShiftSetMode](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftSetMode(kotlin.Int))`(`mode:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`)` <br /> Called when the application sets time shift mode. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onTimeShiftSetPlaybackParams](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTimeShiftSetPlaybackParams(android.media.PlaybackParams))`(`params:` `[PlaybackParams](https://developer.android.com/reference/kotlin/android/media/PlaybackParams.html#)!`)` <br /> Called when the application sets playback parameters containing the speed and audio mode. Once the playback parameters are set, the implementation should honor the current settings until the next tune request. Pause/resume/seek request does not reset the parameters previously set. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | | [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | [onTouchEvent](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTouchEvent(android.view.MotionEvent))`(`event:` `[MotionEvent](https://developer.android.com/reference/kotlin/android/view/MotionEvent.html#)!`)` <br /> Implement this method to handle touch screen motion events on the current input session. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | | [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | [onTrackballEvent](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTrackballEvent(android.view.MotionEvent))`(`event:` `[MotionEvent](https://developer.android.com/reference/kotlin/android/view/MotionEvent.html#)!`)` <br /> Implement this method to handle trackball events on the current input session. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | | [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | [onTune](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTune(android.net.Uri))`(`channelUri:` `[Uri](https://developer.android.com/reference/kotlin/android/net/Uri.html#)!`)` <br /> Tunes to a given channel. No video will be displayed until[notifyVideoAvailable()](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyVideoAvailable())is called. Also,[notifyVideoUnavailable(int)](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyVideoUnavailable(kotlin.Int))should be called when the TV input cannot continue playing the given channel. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | | [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | [onTune](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTune(android.net.Uri,%20android.os.Bundle))`(`channelUri:` `[Uri](https://developer.android.com/reference/kotlin/android/net/Uri.html#)!`, `params:` `[Bundle](https://developer.android.com/reference/kotlin/android/os/Bundle.html#)!`)` <br /> Tunes to a given channel. Override this method in order to handle domain-specific features that are only known between certain TV inputs and their clients. The default implementation calls[onTune(android.net.Uri)](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTune(android.net.Uri)). <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onTvAdSessionData](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTvAdSessionData(kotlin.String,%20android.os.Bundle))`(`type:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `data:` `[Bundle](https://developer.android.com/reference/kotlin/android/os/Bundle.html#)`)` <br /> Called when data from the linked[android.media.tv.ad.TvAdService](https://developer.android.com/reference/kotlin/android/media/tv/ad/TvAdService)is received. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onTvMessage](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onTvMessage(kotlin.Int,%20android.os.Bundle))`(`type:` `[Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html)`, `data:` `[Bundle](https://developer.android.com/reference/kotlin/android/os/Bundle.html#)`)` <br /> Called when a TV message is received <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [onUnblockContent](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onUnblockContent(android.media.tv.TvContentRating))`(`unblockedRating:` `[TvContentRating](https://developer.android.com/reference/kotlin/android/media/tv/TvContentRating)!`)` <br /> Requests to unblock the content according to the given rating. The implementation should unblock the content. TV input service has responsibility to decide when/how the unblock expires while it can keep previously unblocked ratings in order not to ask a user to unblock whenever a content rating is changed. Therefore an unblocked rating can be valid for a channel, a program, or certain amount of time depending on the implementation. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [sendTvInputSessionData](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#sendTvInputSessionData(kotlin.String,%20android.os.Bundle))`(`type:` `[String](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-string/index.html)`, `data:` `[Bundle](https://developer.android.com/reference/kotlin/android/os/Bundle.html#)`)` <br /> Sends data related to this session to corresponding linked[android.media.tv.ad.TvAdService](https://developer.android.com/reference/kotlin/android/media/tv/ad/TvAdService)object via TvAdView. Methods like[notifyBroadcastInfoResponse(android.media.tv.BroadcastInfoResponse)](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyBroadcastInfoResponse(android.media.tv.BroadcastInfoResponse))sends the related data to linked[android.media.tv.interactive.TvInteractiveAppService](https://developer.android.com/reference/kotlin/android/media/tv/interactive/TvInteractiveAppService), but don't work for[android.media.tv.ad.TvAdService](https://developer.android.com/reference/kotlin/android/media/tv/ad/TvAdService). The method is used specifically for[android.media.tv.ad.TvAdService](https://developer.android.com/reference/kotlin/android/media/tv/ad/TvAdService)use cases. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | | [Unit](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-unit/index.html)       | [setOverlayViewEnabled](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#setOverlayViewEnabled(kotlin.Boolean))`(`enable:` `[Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html)`)` <br /> Enables or disables the overlay view. By default, the overlay view is disabled. Must be called explicitly after the session is created to enable the overlay view. The TV input service can disable its overlay view when the size of the overlay view is insufficient to display the whole information, such as when used in Picture-in-picture. Override[onOverlayViewSizeChanged](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#onOverlayViewSizeChanged(kotlin.Int,%20kotlin.Int))to get the size of the overlay view, which then can be used to determine whether to enable/disable the overlay view. <br />                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | ||

## Public constructors

### HardwareSession

Added in[API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
HardwareSession(context: Context!)
```

Creates a new HardwareSession.

|                                                             Parameters                                                             ||
|-----------|-------------------------------------------------------------------------------------------------------------------------|
| `context` | [Context](https://developer.android.com/reference/kotlin/android/content/Context.html#)!:The context of the application |

## Public methods

### getHardwareInputId

Added in[API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
abstract fun getHardwareInputId(): String!
```

Returns the hardware TV input ID the external device is connected to.

TV input is expected to provide[android.R.attr#setupActivity](https://developer.android.com/reference/kotlin/android/R.attr.html#setupActivity:kotlin.Int)so that the application can launch it before using this TV input. The setup activity may let the user select the hardware TV input to which the external device is connected. The ID of the selected one should be stored in the TV input so that it can be returned here.  

### onHardwareVideoAvailable

Added in[API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
open fun onHardwareVideoAvailable(): Unit
```

Called when the underlying hardware TV input session calls[TvInputService.Session.notifyVideoAvailable()](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyVideoAvailable()).  

### onHardwareVideoUnavailable

Added in[API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
open fun onHardwareVideoUnavailable(reason: Int): Unit
```

Called when the underlying hardware TV input session calls[TvInputService.Session.notifyVideoUnavailable(int)](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.Session#notifyVideoUnavailable(kotlin.Int)).

|                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    Parameters                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    ||
|----------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `reason` | [Int](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html):The reason that the hardware TV input stopped the playback: - [TvInputManager.VIDEO_UNAVAILABLE_REASON_UNKNOWN](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#VIDEO_UNAVAILABLE_REASON_UNKNOWN:kotlin.Int) - [TvInputManager.VIDEO_UNAVAILABLE_REASON_TUNING](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#VIDEO_UNAVAILABLE_REASON_TUNING:kotlin.Int) - [TvInputManager.VIDEO_UNAVAILABLE_REASON_WEAK_SIGNAL](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#VIDEO_UNAVAILABLE_REASON_WEAK_SIGNAL:kotlin.Int) - [TvInputManager.VIDEO_UNAVAILABLE_REASON_BUFFERING](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#VIDEO_UNAVAILABLE_REASON_BUFFERING:kotlin.Int) - [TvInputManager.VIDEO_UNAVAILABLE_REASON_AUDIO_ONLY](https://developer.android.com/reference/kotlin/android/media/tv/TvInputManager#VIDEO_UNAVAILABLE_REASON_AUDIO_ONLY:kotlin.Int) |

### onSetSurface

Added in[API level 21](https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels)  

```
fun onSetSurface(surface: Surface?): Boolean
```

This method will not be called in[HardwareSession](https://developer.android.com/reference/kotlin/android/media/tv/TvInputService.HardwareSession#). Framework will forward the application's surface to the hardware TV input.

|                                                                         Parameters                                                                         ||
|-----------|-------------------------------------------------------------------------------------------------------------------------------------------------|
| `surface` | [Surface](https://developer.android.com/reference/kotlin/android/view/Surface.html#)?:The surface to be used for video rendering. Can be`null`. |

|                                                                     Return                                                                      ||
|------------------------------------------------------------------------------------|-------------------------------------------------------------|
| [Boolean](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-boolean/index.html) | `true`if the surface was set successfully,`false`otherwise. |