package Ġcom . example . work out Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . V ibration Effect Ċ import Ġandroid . os . V ibr ator Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Process Lifecycle Owner Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġandroidx . navigation . ui . AppBar Configuration Ċ import Ġandroidx . navigation . ui . navigate Up Ċ import Ġandroidx . navigation . ui . setup ActionBar With Nav Controller Ċ import Ġcom . example . work out . databinding . Activity Cast Binding Ċ import Ġcom . example . work out . db . App Database Ċ import Ġcom . example . work out . db . Routine Work out Stats Element Ċ import Ġcom . google . android . gms . cast . Cast Ċ import Ġcom . google . android . gms . cast . Cast Device Ċ import Ġcom . google . android . gms . cast . Media Load Request Data Ċ import Ġcom . google . android . gms . cast . framework .* Ċ import Ġcom . google . android . gms . cast . framework . media . Remote Media Client Ċ import Ġcom . google . gson . Gson Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġjava . io . IOException Ċ import Ġorg . json . JSONObject Ċ import Ġcom . google . android . gms . cast . framework . Cast Context Ċ import Ġkotlinx . coroutines . run Blocking ĊĊ Ċ class ĠCast Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapp Bar Configuration : ĠApp Bar Configuration ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Cast Binding ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Session Manager : ĠSession Manager ĊĠĠĠ Ġprivate Ġvar Ġm Cast Session : ĠCast Session ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġm Session Manager Listener : ĠSession Manager Listener < Cast Session > Ġ= ĊĠĠĠĠĠĠĠ ĠSession Manager Listener Impl () ĊĊĠĠĠ Ġprivate Ġval Ġm Custom Channel : ĠCustom Channel Ġ= ĠCustom Channel () ĊĠĠĠ Ġprivate Ġval Ġm Custom Channel 2 : ĠCustom Channel 2 Ġ= ĠCustom Channel 2 () ĊĠĠĠ Ġprivate Ġval Ġm Custom Channel Debug : ĠCustom Channel Debug Ġ= ĠCustom Channel Debug () ĊĊĠĠĠ Ġprivate Ġval Ġm My Cast State Listener : ĠCast State Listener Ġ= ĠMy Cast State Listener () ĊĊĊĠĠĠ Ġprivate Ġinner Ġclass ĠSession Manager Listener Impl Ġ: ĠSession Manager Listener < Cast Session > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Session Started ( session : ĠCast Session ?, ĠsessionId : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" Cast ĠSession Ġstarted Ġwith ĠsessionId Ġ$ sessionId ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Custom Channels Ġbei Ġder ĠCast Session Ġregist rier en ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Cast Session Ġ= Ġsession ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Cast Session ?. setMessage Received Callbacks ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Custom Channel . namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Custom Channel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception Ġwhile Ġcreating Ġchannel Ġ 1 ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Cast Session ?. setMessage Received Callbacks ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Custom Channel 2 . namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Custom Channel 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception Ġwhile Ġcreating Ġchannel Ġ 2 ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Cast Session ?. setMessage Received Callbacks ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Custom Channel Debug . namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Custom Channel Debug ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception Ġwhile Ġcreating Ġchannel Ġdebug ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// N ach richt ĠÃ¼ber ĠCustom ĠChannel Ġsend en ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// M uss Ġim ĠJSON - Format Ġsein ; ĠN icht - JSON - Strings Ġfunktion ieren Ġnicht ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage ( intent . getString Extra (" routine Json "). toString (), Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Session Starting ( p 0 : ĠCast Session ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" Cast ĠSession Ġstarting ...") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// L ades ymbol Ġein bl enden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Session Ended ( session : ĠCast Session ?, Ġerror : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" Cast ĠSession Ġended Ġwith Ġerror Ġ${ error . toString () }") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// F er nb ed ien ung Ġaus bl enden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message And Hide Buttons () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Be i ĠBe enden Ġder ĠSession ĠActivity Ġbe enden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// finish () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Session Ending ( p 0 : ĠCast Session ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" Cast ĠSession Ġending ...") ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Session Res umed ( session : ĠCast Session ?, Ġwas Sus pended : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" Cast ĠSession Ġres umed . Ġwas Sus pended Ġ= Ġ$ was Sus pended ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Custom Channels Ġbei Ġder ĠCast Session Ġregist rier en ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ke ine Ġwe itere ĠN ach richt Ġmit ĠWork out Ġsend en , Ġda ĠSession Ġfort ge fÃ¼hrt Ġwurde . ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Cast Session Ġ= Ġsession ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Cast Session ?. setMessage Received Callbacks ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Custom Channel . namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Custom Channel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception Ġwhile Ġcreating Ġchannel Ġ 1 ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Cast Session ?. setMessage Received Callbacks ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Custom Channel 2 . namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Custom Channel 2 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception Ġwhile Ġcreating Ġchannel Ġ 2 ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Cast Session ?. setMessage Received Callbacks ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Custom Channel Debug . namespace , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Custom Channel Debug ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception Ġwhile Ġcreating Ġchannel Ġdebug ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// F er nb ed ien ung Ġein bl enden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Message And Show Buttons () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// L ades ymbol Ġaus bl enden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Session Res uming ( p 0 : ĠCast Session ?, Ġp 1 : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" Cast ĠSession Ġres uming ...") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// L ades ymbol Ġein bl enden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Loading () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Session Resume Failed ( p 0 : ĠCast Session ?, Ġp 1 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" Cast ĠSession Ġresume Ġfailed .") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( binding . root , Ġ" Cast ĠSession Ġresume Ġfailed .", ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" Action ", Ġnull ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// L ades ymbol Ġaus bl enden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Session Start Failed ( p 0 : ĠCast Session ?, Ġp 1 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" Cast ĠSession Ġstart Ġfailed .") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( binding . root , Ġ" Cast ĠSession Ġstart Ġfailed .", ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" Action ", Ġnull ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// L ades ymbol Ġaus bl enden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Session Sus pended ( p 0 : ĠCast Session ?, Ġp 1 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" Cast ĠSession Ġsus pended ") ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Cast Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġ// B ild sch rim Ġan lass en ĊĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . toolbar ) ĊĊĊĠĠĠĠĠĠĠ Ġ// Cast Context ĊĠĠĠĠĠĠĠ Ġval Ġcast Context Ġ= ĠCast Context . get Shared Instance ( this ) ĊĠĠĠĠĠĠĠ Ġm Session Manager Ġ= Ġcast Context . session Manager ĊĊĠĠĠĠĠĠĠ Ġ// Cast State Listener : Ġhttps :// developers . google . com / android / reference / com / google / android / gms / cast / framework / Cast State ĊĠĠĠĠĠĠĠ Ġ// https :// developers . google . com / android / reference / com / google / android / gms / cast / framework / Cast State Listener ĊĠĠĠĠĠĠĠ Ġ// https :// developers . google . com / android / reference / com / google / android / gms / cast / framework / Cast State ĊĠĠĠĠĠĠĠ Ġcast Context . add Cast State Listener ( m My Cast State Listener ) ĊĊĊĠĠĠĠĠĠĠ Ġ// OnClickListener Ġder ĠButtons : ĊĊĠĠĠĠĠĠĠ Ġval Ġpause Button : ĠButton Ġ= ĠfindViewById ( R . id . button Pause ) ĊĠĠĠĠĠĠĠ Ġpause Button . setOnClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( pause Button ?. text Ġ== Ġ" Pause ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Json : ĠString Ġ= ĠGson (). toJson (" PAUSE ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage ( output Json , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Json : ĠString Ġ= ĠGson (). toJson (" CONTINUE ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage ( output Json , Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Json : ĠString Ġ= ĠGson (). toJson (" PAUSE ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage ( output Json , Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvi br ate () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġskip Button : ĠButton Ġ= ĠfindViewById ( R . id . button Skip ) ĊĠĠĠĠĠĠĠ Ġskip Button . setOnClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Json : ĠString Ġ= ĠGson (). toJson (" SKIP ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage ( output Json , Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvi br ate () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġstop Button : ĠButton Ġ= ĠfindViewById ( R . id . button Stop ) ĊĊĠĠĠĠĠĠĠ Ġ// Ein Ġe inf acher ĠK lick Ġauf ĠSto pp Ġze igt ĠSn ackbar ĊĠĠĠĠĠĠĠ Ġstop Button . setOnClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( v , Ġ" Z um ĠSto pp en Ġge dr Ã¼ck t Ġhal ten ", ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" Action ", Ġnull ). show () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstop Button . setOn Long ClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Json : ĠString Ġ= ĠGson (). toJson (" STOP ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage ( output Json , Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvi br ate () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ setOn Long ClickListener Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġback Button : ĠButton Ġ= ĠfindViewById ( R . id . button Back ) ĊĠĠĠĠĠĠĠ Ġback Button . setOnClickListener Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Json : ĠString Ġ= ĠGson (). toJson (" BACK ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage ( output Json , Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvi br ate () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĊĠĠĠĠĠĠĠ Ġ/* ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġintent ĊĠĠĠĠĠĠĠ Ġm Session Manager . start Session ( intent ) ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĊĠĠĠĠĠĠĠ Ġm Cast Session Ġ= Ġm Session Manager . current Cast Session ĊĊĊĠĠĠĠĠĠĠ Ġ// F er nb ed ien ung Ġan ze igen , Ġwenn ĠActivity Ġfort ge fÃ¼hrt Ġwird ĊĠĠĠĠĠĠĠ Ġif Ġ( m Cast Session ?. isConnected Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Message And Show Buttons () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Session Manager . add Session Manager Listener ( m Session Manager Listener , ĠCast Session :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġ// Cast Listener : Ġhttps :// developers . google . com / android / reference / com / google / android / gms / cast / Cast . Listener ĊĠĠĠĠĠĠĠ Ġ// m Cast Session . add Cast Listener () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĊĊĠĠĠĠĠĠĠ Ġm Session Manager . remove Session Manager Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Session Manager Listener , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCast Session :: class . java ĊĠĠĠĠĠĠĠ Ġ) ĊĊĊĠĠĠĠĠĠĠ Ġ// m Cast Session Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĊĠĠĠĠĠĠĠ Ġ// Die Ġfol gende ĠZe ile Ġbeen det Ġdie ĠSession . Ġ' false ' Ġals ĠParameter Ġsol lte Ġd abe i Ġdie ĠReceiver ĠAn wendung Ġnicht Ġbe enden ĊĠĠĠĠĠĠĠ Ġ// J ed och Ġbeen det Ġdie ĠReceiver ĠApp , Ġwenn Ġkeine ĠSession Ġmehr Ġaktiv Ġist . ĊĠĠĠĠĠĠĠ Ġ// m Session Manager . end Current Session ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// n icht s Ġt un , Ġum Ġzu Ġver h inder n , Ġdass ĠBack - Button Ġbet Ã¤t igt Ġwird Ġund Ġso ĠActivity Ġdestroyed Ġwird , Ġw Ã¤h rend Ġdes ĠTrain ings ĊĠĠĠĠĠĠĠ Ġif Ġ( m Cast Session ?. isConnected Ġ== Ġtrue ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// Cast - Button Ġan ze igen ĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu ) ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ cast , Ġmenu ) ĊĠĠĠĠĠĠĠ ĠCast Button Factory . setUp Media Route Button ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Context , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . media _ route _ menu _ item ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun ĠsendMessage ( message : ĠString , Ġchannel Number : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( channel Number Ġ== Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Custom Channel Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Cast Session ?. sendMessage ( m Custom Channel . namespace , Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . set Result Callback Ġ{ Ġstatus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! status . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Sending Ġmessage Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Send en Ġfe hl ges ch l agen ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" Action ", Ġnull ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" Sending Ġsuccessful ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception Ġwhile Ġsending Ġmessage Ġon Ġchannel Ġ 1 ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( channel Number Ġ== Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Custom Channel 2 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Cast Session ?. sendMessage ( m Custom Channel 2 . namespace , Ġmessage ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . set Result Callback Ġ{ Ġstatus Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! status . is Success ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Sending Ġmessage Ġfailed ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Send en Ġfe hl ges ch l agen ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction (" Action ", Ġnull ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" Sending Ġsuccessful ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" hh h ", Ġ" Exception Ġwhile Ġsending Ġmessage Ġon Ġchannel Ġ 2 ", Ġe ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Message And Show Buttons () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġskip Button : ĠButton Ġ= ĠfindViewById ( R . id . button Skip ) ĊĠĠĠĠĠĠĠ Ġval Ġpause Button : ĠButton Ġ= ĠfindViewById ( R . id . button Pause ) ĊĠĠĠĠĠĠĠ Ġval Ġback Button : ĠButton Ġ= ĠfindViewById ( R . id . button Back ) ĊĠĠĠĠĠĠĠ Ġval Ġstop Button : ĠButton Ġ= ĠfindViewById ( R . id . button Stop ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage : ĠTextView Ġ= ĠfindViewById ( R . id . message ) ĊĠĠĠĠĠĠĠ Ġskip Button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġpause Button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġback Button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġstop Button . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġmessage . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Message And Hide Buttons () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġskip Button : ĠButton Ġ= ĠfindViewById ( R . id . button Skip ) ĊĠĠĠĠĠĠĠ Ġval Ġpause Button : ĠButton Ġ= ĠfindViewById ( R . id . button Pause ) ĊĠĠĠĠĠĠĠ Ġval Ġback Button : ĠButton Ġ= ĠfindViewById ( R . id . button Back ) ĊĠĠĠĠĠĠĠ Ġval Ġstop Button : ĠButton Ġ= ĠfindViewById ( R . id . button Stop ) ĊĠĠĠĠĠĠĠ Ġval Ġmessage : ĠTextView Ġ= ĠfindViewById ( R . id . message ) ĊĠĠĠĠĠĠĠ Ġskip Button . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġpause Button . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġback Button . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġstop Button . visibility Ġ= ĠView . IN VISIBLE ĊĊĠĠĠĠĠĠĠ Ġmessage . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogress bar : ĠProgress Bar Ġ= ĠfindViewById ( R . id . progress Bar 2 ) ĊĠĠĠĠĠĠĠ Ġprogress bar . visibility Ġ= ĠView . VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Loading () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġprogress bar : ĠProgress Bar Ġ= ĠfindViewById ( R . id . progress Bar 2 ) ĊĠĠĠĠĠĠĠ Ġprogress bar . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// V ibration ĊĠĠĠ Ġprivate Ġfun Ġvi br ate () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvi br ator Ġ= Ġget System Service ( V IB R ATOR _ SERVICE ) Ġas ĠV ibr ator ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 2 6 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvi br ator . vi br ate ( V ibration Effect . create One Shot ( 1 5 0 , ĠV ibration Effect . DEFAULT _ AMP LIT UDE )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvi br ator . vi br ate ( 1 5 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġprivate Ġfun Ġchange Text Pause Button (){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( pause Button ?. text Ġ== Ġ" We iter "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause Button ?. text Ġ= Ġ" Pause " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpause Button ?. text Ġ= Ġ" We iter " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĠĠĠĠ Ġ*/ ĊĊĊĠĠĠ Ġ/* ĊĠĠĠ Ġprivate Ġfun Ġload Remote Media ( position : ĠInt , Ġauto Play : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Cast Session Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġremote Media Client Ġ= Ġm Cast Session !!. remote Media Client Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġremote Media Client . register Callback ( object Ġ: ĠRemote Media Client . Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Status Updated () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this @ Local Player Activity , ĠEx pan ded Controls Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremote Media Client . unregister Callback ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġremote Media Client . load ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Load Request Data . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Media Info ( m Selected Media ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Aut oplay ( auto Play ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setCurrent Time ( position . to Long ()). build () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ}*/ ĊĊĊĠĠĠ Ġ// Er ster ĠChannel ĊĠĠĠ Ġinner Ġclass ĠCustom Channel Ġ: ĠCast . Message Received Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnamespace : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Namespace ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" urn : x - cast : com . example . custom " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Message Received ( cast Device : ĠCast Device , Ġnamespace : ĠString , Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" on Message Received Ġ( Channel Ġ 1 ): Ġ$ message ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Message And Show Buttons () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// L ades ymbol Ġaus bl enden ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Loading () ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Z we iter ĠChannel . ĠEmp f Ã¤ng t Ġdie ĠN ach richt ĠÃ¼ber Ġer fol gre ichen ĠAbs ch l uss Ġder ĠRout ine . ĊĠĠĠ Ġinner Ġclass ĠCustom Channel 2 Ġ: ĠCast . Message Received Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnamespace : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Namespace ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" urn : x - cast : com . example . custom 2 " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Message Received ( cast Device : ĠCast Device , Ġnamespace : ĠString , Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" on Message Received Ġ( Channel Ġ 2 ): Ġ$ message ") ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ann ah me Ġeiner ĠN ach richt Ġin ĠJSON : ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠJSONObject ( message ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength Ġ= Ġobj . getInt (" length ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnumber Sets Done Ġ= Ġobj . getInt (" number Sets Done ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġobj . getString (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtimestamp Ġ= Ġobj . getLong (" timestamp ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstats Object Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRout ine Work out Stats Element ( 0 , Ġlength , Ġnumber Sets Done , Ġname , Ġtimestamp ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Routine Work out Stats Element Ġin ĠDB Ġe inf Ã¼gen ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Blocking Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp Database . getInstance ( application Context ). routine Work out Stats Element Dao () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. insert ( stats Object ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// F er nb ed ien ung Ġaus bl enden ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Message And Hide Buttons () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Send en , Ġdass ĠDaten Ġer halten . ĠReceiver Ġkann Ġdann ĠApp Ġbe enden . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Json : ĠString Ġ= ĠGson (). toJson (" OK ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage ( output Json , Ġ 2 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Listener Ġent fer nen Ġ( n icht Ġn Ã¶ tig ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// m Cast Session ?. remove Message Received Callbacks ( m Custom Channel 2 . namespace ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Activity Ġbe enden ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Debug - Channel ĊĠĠĠ Ġinner Ġclass ĠCustom Channel Debug Ġ: ĠCast . Message Received Callback Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnamespace : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Namespace ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" urn : x - cast : com . google . cast . debug logger " ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Message Received ( cast Device : ĠCast Device , Ġnamespace : ĠString , Ġmessage : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" on Message Received Ġ( Channel Ġdebug ): Ġ$ message ") ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ class ĠMy Cast State Listener Ġ: ĠCast State Listener Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġon Cast StateChanged ( p 0 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . v (" hh h ", Ġ" State Ġchanged : Ġ$ p 0 ") ĊĠĠĠ Ġ} Ċ } ĊĊĊĊ ĊĊĊĊĊ