Home key hangs device

I’ve written a simple program that renders a screen, with a message wait loop for input and exit from the program. I listen for roUniversalControlEvent and pick up on all the button presses… except the home key.

The problem is that when the home key is pressed, the Brightscript console prints that the program has exited, but instead of returning to the home page it just creates a black screen. Almost any button press will produce a sound, but you are still stuck at the black screen. Through much experimentation, I discovered that if I press the netflix button, wait for a moment, then press the home button, I can recover the home screen.

Since I’m not allowed to handle the home key, I don’t know what to do to fix this. The main program code is below.

Any ideas on why the firmware isn’t taking me fully back to the home screen?

David

sub showChannelSGScreen()

screen = CreateObject(“roScreen”)

port = CreateObject(“roMessagePort”)

screen.SetMessagePort(port)

width = screen.GetWidth()

height = screen.GetHeight()

white = &hDDDDDDFF

dark_gray = &h919498FF

green = &h00FF00FF

black = &h000000FF

blue = &h007C9C7F

fontRegistry = CreateObject(“roFontRegistry”)

font = fontRegistry.GetDefaultFont()

instructionFont = fontRegistry.GetDefaultFont(90,true,false)

number_width = width / 4

number_height = height / 2

screen.finish()

state = 2

notFinished = true

offset = 40

print “Entering CHOOSE A DIE rendering loop”

while notFinished

screen.DrawRect(0, 0, width,height,white)

screen.DrawText(“CHOOSE A DIE”,width / 4 + 100, height / 4,blue, instructionFont)

upper_x = 0

upper_y = number_height - 25

if state = 0

upper_x = 0 + (number_width / 2) - offset

else if state = 1

upper_x = number_width + (number_width / 2) - offset

else if state = 2

upper_x = (number_width * 2) + (number_width / 2) - offset

else if state = 3

upper_x = (number_width * 3) + (number_width / 2) - offset

else

print "unexpected state: " + StrI(state)

end if

screen.DrawRect(upper_x, upper_y,100,100,dark_gray)

screen.DrawText(“2”, 0 + (number_width / 2), number_height, black, font)

screen.DrawText(“6”, number_width + (number_width / 2), number_height, black, font)

screen.DrawText(“8”, (number_width * 2) + (number_width / 2), number_height, black, font)

screen.DrawText(“20”, (number_width * 3) + (number_width / 2), number_height, black, font)

screen.finish()

print “Entering CHOOSE A DIE input loop”

msg = wait(0, port) ’ wait for a message

if type(msg) = “roUniversalControlEvent” then

if(msg.isPress()) then

print “key:” + StrI(msg.GetKey())

if msg.getKey() = 4

if state > 0

state = state - 1

endif

else if msg.getKey() = 3

if state > 0

state = state - 1

endif

else if msg.getKey() = 5

if state < 3

state = state + 1

endif

else if msg.getKey() = 2

if state < 3

state = state + 1

endif

else if msg.getKey() = 6

notFinished = false

else if msg.getKey() = 0

return

endif

endif

endif

end while

end sub

Here is a shorter program that exhibits the same hang on hitting the home key (while in the input loop):

sub Main()

showChannelSGScreen()

end sub

sub showChannelSGScreen()

screen = CreateObject(“roScreen”)

port = CreateObject(“roMessagePort”)

screen.SetMessagePort(port)

print “DBM 1”

red = &hFF0000FF

width = screen.GetWidth()

height = screen.GetHeight()

screen.DrawRect(0,0,width,height,red)

screen.finish()

notFinished = true

while notFinished

msg = wait(0, port) ’ wait for a message

if type(msg) = “roUniversalControlEvent” then

if(msg.isPress()) then

print “key:” + StrI(msg.GetKey())

endif

endif

end while

end sub

This one shows the hang too..

sub Main()

showChannelSGScreen()

end sub

sub showChannelSGScreen()

screen = CreateObject(“roScreen”)

port = CreateObject(“roMessagePort”)

screen.SetMessagePort(port)

print “DBM 1”

red = &hFF0000FF

width = screen.GetWidth()

height = screen.GetHeight()

screen.DrawRect(0,0,width,height,red)

screen.finish()

wait(0, port)

end sub

This will also give you the home key hang.

sub Main()

showChannelSGScreen()

end sub

sub showChannelSGScreen()

screen = CreateObject(“roScreen”)

port = CreateObject(“roMessagePort”)

screen.SetMessagePort(port)

wait(0, port)

end sub

I tried your last example and whether I press Home or any other button it exits to the home screen. What version of firmware do you have? I’m on v9.2.

3810X - Roku Streaming Stick+

9.2.0 build 4807-50

I don’t have one of those sticks. You’ve probably done this, but make sure you reboot your device before you try it again.

This happened on both my Roku Streaming Stick and my Roku Ultra.

The solution was to remove this line from my manifest:

splash_rsg_optimization=1

When this line is present in the manifest, the Home Key is broken for exiting the app. By removing it, the Home Key works as expected.

I followed the examples! Kind of unhappy about Roku development today. There isn’t a big body of coding samples out there and I really felt cut adrift on something that seemed simple like this.