Text to speech for season posters, season episoded and extras (cast and crew)

This commit is contained in:
Jimi 2022-04-25 19:02:50 -06:00
parent e9509a68c5
commit 9dffe0f769
6 changed files with 72 additions and 29 deletions

View File

@ -5,6 +5,8 @@ sub init()
m.backdrop = m.top.findNode("backdrop")
m.deviceInfo = CreateObject("roDeviceInfo")
' Randmomise the background colors
posterBackgrounds = m.global.constants.poster_bg_pallet
m.backdrop.color = posterBackgrounds[rnd(posterBackgrounds.count()) - 1]
@ -68,6 +70,13 @@ sub focusChanged()
m.staticTitle.visible = false
m.title.visible = true
' text to speech for accessibility
if m.deviceInfo.IsAudioGuideEnabled() = true
txt2Speech = CreateObject("roTextToSpeech")
txt2Speech.Flush()
txt2Speech.Say(m.title.text)
end if
else
m.title.repeatCount = 0
m.staticTitle.visible = true

View File

@ -0,0 +1,31 @@
sub init()
m.posterImg = m.top.findNode("posterImg")
m.name = m.top.findNode("pLabel")
m.role = m.top.findNode("subTitle")
m.deviceInfo = CreateObject("roDeviceInfo")
end sub
sub showContent()
if m.top.itemContent <> invalid
cont = m.top.itemContent
m.name.text = cont.labelText
m.name.maxWidth = cont.imageWidth
m.role.Width = cont.imageWidth
m.posterImg.uri = cont.posterUrl
m.posterImg.width = cont.imageWidth
m.role.Text = cont.subTitle
else
m.role.text = "Who??"
m.posterImg.uri = "pkg:/images/baseline_person_white_48dp.png"
end if
end sub
sub focusChanged()
if m.deviceInfo.IsAudioGuideEnabled() = true
txt2Speech = CreateObject("roTextToSpeech")
txt2Speech.Flush()
txt2Speech.Say(m.name.text)
txt2Speech.Say(m.role.text)
end if
end sub

View File

@ -2,31 +2,9 @@
<component name="ExtrasItem" extends="JFGroup">
<interface>
<field id="itemContent" type="node" onChange="showContent" />
<field id="itemHasFocus" type="boolean" onChange="focusChanged" />
</interface>
<script type="text/brightscript">
<![CDATA[
function init() as void
m.posterImg = m.top.findNode("posterImg")
m.name = m.top.findNode("pLabel")
m.role = m.top.findNode("subTitle")
end function
sub showContent()
if m.top.itemContent <> Invalid
cont = m.top.itemContent
m.name.text = cont.labelText
m.name.maxWidth = cont.imageWidth
m.role.Width = cont.imageWidth
m.posterImg.uri = cont.posterUrl
m.posterImg.width = cont.imageWidth
m.role.Text = cont.subTitle
else
m.role.text = "Who??"
m.posterImg.uri = "pkg:/images/baseline_person_white_48dp.png"
end if
end sub
]]>
</script>
<script type="text/brightscript" uri="ExtrasItem.brs" />
<children>
<LayoutGroup layoutDirection="vert" >
<Poster id="posterImg" width="234" height="300" translation="[8,243]" failedBitmapUri="pkg:/images/baseline_person_white_48dp.png" />

View File

@ -1,6 +1,9 @@
sub init()
m.title = m.top.findNode("title")
m.title.text = tr("Loading...")
m.overview = m.top.findNode("overview")
m.deviceInfo = CreateObject("roDeviceInfo")
end sub
sub itemContentChanged()
@ -11,9 +14,9 @@ sub itemContentChanged()
else
indexNumber = ""
end if
m.top.findNode("title").text = indexNumber + item.title
m.title.text = indexNumber + item.title
m.top.findNode("poster").uri = item.posterURL
m.top.findNode("overview").text = item.overview
m.overview.text = item.overview
if type(itemData.RunTimeTicks) = "LongInteger"
m.top.findNode("runtime").text = stri(getRuntime()).trim() + " mins"
@ -65,3 +68,15 @@ function getEndTime() as string
return formatTime(date)
end function
sub focusChanged()
if m.top.itemHasFocus = true
' text to speech for accessibility
if m.deviceInfo.IsAudioGuideEnabled() = true
txt2Speech = CreateObject("roTextToSpeech")
txt2Speech.Flush()
txt2Speech.Say(m.title.text)
txt2Speech.Say(m.overview.text)
end if
end if
end sub

View File

@ -27,6 +27,7 @@
</children>
<interface>
<field id="itemContent" type="node" onChange="itemContentChanged"/>
<field id="itemHasFocus" type="boolean" onChange="focusChanged" />
</interface>
<script type="text/brightscript" uri="TVListDetails.brs" />
<script type="text/brightscript" uri="pkg:/source/utils/misc.brs" />

View File

@ -135,17 +135,22 @@ function round(f as float) as integer
end function
function onKeyEvent(key as string, press as boolean) as boolean
if not press then return false
overview = m.top.findNode("overview")
topGrp = m.top.findNode("seasons")
bottomGrp = m.top.findNode("extrasGrid")
if key = "down" and topGrp.isinFocusChain()
if key = "down" and overview.hasFocus()
topGrp.setFocus(true)
return true
else if key = "down" and topGrp.hasFocus()
bottomGrp.setFocus(true)
m.top.findNode("VertSlider").reverse = false
m.top.findNode("extrasFader").reverse = false
m.top.findNode("pplAnime").control = "start"
return true
else if key = "up" and bottomGrp.isinFocusChain()
else if key = "up" and bottomGrp.hasFocus()
if bottomGrp.itemFocused = 0
m.top.findNode("VertSlider").reverse = true
m.top.findNode("extrasFader").reverse = true
@ -153,6 +158,10 @@ function onKeyEvent(key as string, press as boolean) as boolean
topGrp.setFocus(true)
return true
end if
else if key = "up" and topGrp.hasFocus()
overview.setFocus(true)
return true
end if
return false
end function