This is my mainscene.brs
' ********** Copyright 2016 Roku Corp. All Rights Reserved. ********** sub init() m.top.SetFocus(true) m.top.backgroundURI = "pkg:/images/login_bg.png" m.loginBtn = m.top.findNode("loginBtn") m.loginscreen = m.top.findNode("LoginScreen") m.loginscreen.observeField("ready", "onLoginReady") End sub Function OnLoginReady() m.loginBtn.setFocus(true) m.loginscreen.visible = true end function
This is my mainscene.xml
<?xml version="1.0" encoding="UTF-8"?> <component name="MainScene" extends="Scene" initialFocus = "LoginScreen"> <!-- importing main handler --> <script type="text/brightscript" uri="pkg:/components/src/MainScene.brs" /> <children> <LoginScreen id="LoginScreen"/> </children> </component>
this is my loginsceen.brs
sub init() m.LoginParser = createObject("roSGNode","LoginTask") m.LoginParser.observeField("msg", "returnMsg") m.top.backgroundURI = "pkg:/images/login_bg.png" m.keyboard = m.top.findNode("keyboard") m.fullkeyboard = m.top.findNode("fullkeyboard") m.username = m.top.findNode("username") m.usernameLabel = m.top.findNode("usernameLabel") m.password = m.top.findNode("password") m.passwordLabel = m.top.findNode("passwordLabel") m.loginBtn = m.top.findNode("loginBtn") m.loginBtn.observeField("buttonSelected", "btnSelected") m.loginLabel = m.top.findNode("btnLabel") m.loader = m.top.findNode("loader") m.loaderLabel = m.top.findNode("loaderLabel") m.urlfield = m.top.findNode("urlfield") m.keyboard.textEditBox.maxTextLength = 22 m.username.text = m.global.username m.password.text = m.global.password m.username.cursorPosition = Len(m.username.text) m.password.cursorPosition = Len(m.password.text) m.backup = "" m.blocked = false m.top.setFocus(true) end sub function onKeyEvent(key as String, press as Boolean) as Boolean if m.blocked then return true if m.loader.visible and ( key="up" or key="down" ) then m.loader.visible = false if m.fullkeyboard.visible then if m.username.active and (key = "OK" or key = "replay") then m.username.text = m.keyboard.textEditBox.text m.username.cursorPosition = m.keyboard.textEditBox.cursorPosition return true else if m.password.active and (key = "OK" or key = "replay") then m.password.text = m.keyboard.textEditBox.text m.password.cursorPosition = m.keyboard.textEditBox.cursorPosition return true else if m.urlfield.active and (key = "OK" or key = "replay") then m.urlfield.text = m.keyboard.textEditBox.text m.urlfield.cursorPosition = m.keyboard.textEditBox.cursorPosition return true else if key = "back" and m.username.active then m.backup = m.username.text m.fullkeyboard.visible = false m.keyboard.setFocus(false) m.username.setFocus(true) return true else if key = "back" and m.password.active then m.backup = m.password.text m.fullkeyboard.visible = false m.keyboard.setFocus(false) m.password.secureMode="true" m.password.setFocus(true) return true else if key = "back" and m.urlfield.active then m.backup = m.urlfield.text m.fullkeyboard.visible = false m.keyboard.setFocus(false) m.urlfield.setFocus(true) return true endif return true endif if key = "back" and press then m.top.goback = true return true endif if press then if key = "up" then if m.loginBtn.hasFocus() then m.password.backgroundUri = "pkg:/images/text_field_on_hover.png" m.password.active = true m.username.active = false m.loginBtn.setFocus(false) m.password.setFocus(true) m.backup = m.password.text m.password.cursorPosition = Len(m.password.text) else if m.password.active then m.password.active = false m.password.backgroundUri = "pkg:/images/text_field.png" m.username.backgroundUri = "pkg:/images/text_field_on_hover.png" m.username.active = true m.password.setFocus(false) m.username.setFocus(true) m.backup = m.username.text m.username.cursorPosition = Len(m.username.text) else if m.username.active then m.username.active = false m.urlfield.backgroundUri = "pkg:/images/text_field_on_hover.png" m.username.backgroundUri = "pkg:/images/text_field.png" m.urlfield.active = true m.username.setFocus(false) m.urlfield.setFocus(true) m.backup = m.urlfield.text m.username.cursorPosition = Len(m.username.text) endif else if key = "OK" then if m.username.active then m.keyboard.textEditBox.text = m.username.text m.keyboard.textEditBox.cursorPosition = m.username.cursorPosition m.keyboard.setFocus(true) m.fullkeyboard.visible = true else if m.password.active then m.password.secureMode = false m.keyboard.textEditBox.text = m.password.text m.keyboard.textEditBox.cursorPosition = m.password.cursorPosition m.keyboard.setFocus(true) m.fullkeyboard.visible = true else if m.urlfield.active then m.keyboard.textEditBox.text = m.urlfield.text m.keyboard.textEditBox.cursorPosition = m.urlfield.cursorPosition m.keyboard.setFocus(true) m.fullkeyboard.visible = true endif endif return true endif if not press then if key = "down" then if m.password.active then m.password.text = m.backup m.password.active = "false" m.password.backgroundUri = "pkg:/images/text_field.png" m.loginBtn.setFocus(true) else if m.username.active then m.username.text = m.backup m.username.active = "false" m.username.setFocus(false) m.password.active = "true" m.password.setFocus(true) m.password.backgroundUri = "pkg:/images/text_field_on_hover.png" m.username.backgroundUri = "pkg:/images/text_field.png" m.backup = m.password.text else if m.urlfield.active then m.urlfield.text = m.backup m.urlfield.active = "false" m.urlfield.setFocus(false) m.username.active = "true" m.username.setFocus(true) m.username.backgroundUri = "pkg:/images/text_field_on_hover.png" m.urlfield.backgroundUri = "pkg:/images/text_field.png" m.backup = m.username.text endif endif endif return true end function sub btnSelected() m.blocked = true if m.username.text = "" or m.password.text = "" then m.loader.color = "0xb40579FF" m.loaderLabel.color = "0xFFFFFFFF" m.loaderLabel.text = "Username or password is empty" m.blocked = false else 'm.registry.Write("username", m.username.text) 'm.registry.Write("password", m.password.text) m.loader.color = "0xDDDDDD80" m.loaderLabel.color = "0x000000FF" m.loaderLabel.text = "Loading..." m.LoginParser.username = m.username.text m.LoginParser.password = m.password.text m.LoginParser.control = "RUN" endif m.loader.visible = true end sub sub returnMsg() m.loaderLabel.text = m.LoginParser.msg if m.LoginParser.msg <> "OK" then m.loader.color = "0xb40579FF" m.loaderLabel.color = "0xFFFFFFFF" else m.loader.visible = false m.top.visible = false m.top.ready = true endif m.blocked = false endsub
this is my loginscreen.xml
<?xml version = "1.0" encoding = "utf-8" ?> <component name="LoginScreen" extends = "Group" initialFocus = "loginBtn" > <interface> <field id="ready" type="bool" alwaysNotify="true" /> <field id="goback" type="boolean" alwaysNotify="true" /> </interface> <script type="text/brightscript" uri = "pkg:/components/src/loginscreen.brs"/> <children> <Group translation="[604,400]"> <Poster id="loginicon" uri="pkg:/images/login_screen_logo.png" width="500" height="100" translation="[8,-180]" /> <TextEditBox id="urlfield" translation="[100,100]" hintText="url" width="500" maxTextLength="24" backgroundUri="pkg:/images/text_field.png" hintTextColor="FAF7F6" /> <TextEditBox id="username" translation="[100,204]" hintText="username" width="500" maxTextLength="24" backgroundUri="pkg:/images/text_field.png" hintTextColor="FAF7F6"/> <TextEditBox id="password" translation="[100,304]" hintText="password" width="500" maxTextLength="24" backgroundUri="pkg:/images/text_field.png" hintTextColor="FAF7F6" secureMode="true"/> <Poster id="urlicon" translation="[50,110]" uri="pkg:/images/url_icon.png" width="30" height="55"/> <Poster id="usernameicon" translation="[50,214]" uri="pkg:/images/username_icon.png" width="30" height="55"/> <Poster id="passwordicon" translation="[50,314]" uri="pkg:/images/password_icon.png" width="30" height="55"/> <Button translation="[180,400]" id="loginBtn" showFocusFootprint="true" focusFootprintBitmapUri="pkg:/images/login_button.png" iconUri="" focusedIconUri="" height="90" focusBitmapUri="pkg:/images/login_button.png" minWidth="320" maxWidth="320"> <Label id="btnLabel" color="0xFFFFFFFF" horizAlign="center" text="Login" width="320" height="90" numLines="1" vertAlign="center"/> </Button> </Group> <Rectangle id = "fullkeyboard" color="0xb40579DD" width="1416" height="380" translation="[252,680]" visible="false"> <Keyboard id="keyboard" showTextEditBox="false" keyColor="0xFFFFFFFF"/> </Rectangle> <Rectangle id="loader" color="0xDDDDDD80" width="1920" height="60" translation="[0,1020]" visible="false"> <Label id="loaderLabel" color="0x000000FF" horizAlign="center" text="Loading..." width="1920" height="60" numLines="1" vertAlign="center"/> </Rectangle> </children> </component>