package Ġcom . anit rack . ruby . anit rack . ui . detail Ċ Ċ import Ġandroid . content . Activity NotFoundException Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . anit rack . ruby . anit rack . R Ċ import Ġcom . anit rack . ruby . anit rack . Temp Toolbar Title Listener Ċ import Ġcom . anit rack . ruby . anit rack . data . source . remote . Ret rofit Client Ċ import Ġcom . anit rack . ruby . anit rack . data . source . remote . models . Data An ime Ċ import Ġcom . anit rack . ruby . anit rack . utils . View Utils Ċ import Ġcom . google . android . material . chip . Chip Ċ import Ġcom . squareup . pic asso . Pic asso Ċ import Ġkotlinx . android . synt hetic . main . fragment _ anime _ detail .* Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . activity . On Back Pressed Callback Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . anit rack . ruby . anit rack . data . source . local . models . An ime Ċ import Ġcom . anit rack . ruby . anit rack . ui . Base Fragment Ċ import Ġcom . anit rack . ruby . anit rack . ui . ViewModel Factory Ċ import Ġcom . anit rack . ruby . anit rack . utils . Enum Streaming Ċ import Ġjava . net . URL Ċ import Ġcom . h lab . fab reveal menu . listeners . On FAB Menu Selected Listener ĊĊ Ċ class ĠAn ime Detail Fragment Ġ: ĠBase Fragment (), ĠOn FAB Menu Selected Listener , ĠOn Back Pressed Callback Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġhandle On Back Pressed (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( fab _ save _ menu Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// action Ġnot Ġpop Back Stack ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( fab _ save _ menu . is Showing ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfab _ save _ menu . close Menu (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ; ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ; ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon MenuItem Selected ( view : ĠView ?, Ġid : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( id Ġ== ĠR . id . menu _ w atched ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" menu _ w atched ", ĠToast . LENGTH _ SHORT ). show (); ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( id Ġ== ĠR . id . menu _ watch _ later ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" menu _ watch _ later ", ĠToast . LENGTH _ SHORT ). show (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠARG _ AN IME Ġ= Ġ" ARG _ AN IME " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠviewModel : ĠAn ime Detail ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġobserver Extra Detail Result : ĠObserver < An ime > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġobserver Network Errors : ĠObserver < String > ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ anime _ detail , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġval Ġan ime : ĠData An ime Ġ= Ġarguments !!. get Parcelable < Data An ime >( ARG _ AN IME ) ĊĊĠĠĠĠĠĠĠ ĠviewModel Ġ= ĠViewModel Providers . of ( this , ĠViewModel Factory . newInstance ( context !! , ĠRet rofit Client (), ĠlistOf ( anime ))). get ( An ime Detail ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġ// Handle ĠBack ĠButton ĊĠĠĠĠĠĠĠ Ġrequire Activity (). add On Back Pressed Callback ( view Lifecycle Owner , Ġthis ) ĊĊĠĠĠĠĠĠĠ Ġ( activity Ġas ĠTemp Toolbar Title Listener ). update Title ( anime . attributes . canonical Title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ" An ime ĠDetail ") ĊĠĠĠĠĠĠĠ Ġtv _ name . text Ġ= Ġif Ġ( anime . attributes . titles ?. english J apan Ġ!= Ġan ime . attributes . canonical Title ) Ġan ime . attributes . titles ?. english J apan Ġelse Ġ"" ĊĠĠĠĠĠĠĠ Ġtv _ summary . text Ġ= Ġan ime . attributes . syn opsis ĊĠĠĠĠĠĠĠ Ġtv _ rating . text Ġ= ĠView Utils . as Rounded Decimal ( anime . attributes . average Star Ġ?: Ġ 0 f , Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠPic asso . get (). load ( anime . attributes . poster Image ?. medium ). into ( iv _ background ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( tv _ name . text . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ name . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġiv _ background . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwatch Y outube Video ( context !! , Ġan ime . attributes . youtube Video Id !! ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// attach Ġmenu Ġto Ġfab ĊĠĠĠĠĠĠĠ Ġfab _ save _ menu . bind Anchor View ( fab _ save ); ĊĠĠĠĠĠĠĠ Ġ// set Ġmenu Ġselection Ġlistener ĊĠĠĠĠĠĠĠ Ġfab _ save _ menu . setOn FAB Menu Selected Listener ( this ); ĊĊĠĠĠĠĠĠĠ ĠviewModel . search ( anime . id Ġ?: Ġ" 0 ") ĊĊĠĠĠĠĠĠĠ Ġobserver Extra Detail Result Ġ= ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . genres Ġ== Ġnull Ġ|| Ġit . streaming Links Ġ== Ġnull ) Ġreturn @ Observer ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcg _ genres . removeAll Views () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġit . genres !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchip Ġ= ĠCh ip ( cg _ genres . context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . text Ġ= Ġitem . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . setTextColor ( Context Compat . getColor ( context !! , ĠR . color . white )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . set Chip BackgroundColor Resource ( R . color . color Accent ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġnecessary Ġto Ġget Ġsingle Ġselection Ġworking ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . is Clickable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchip . is Check able Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcg _ genres . addView ( chip ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( v _ container _ watch _ on Ġas ĠViewGroup ). removeAll Views () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( item Ġin Ġit . streaming Links !! ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġurl Ġ= ĠURL ( item . url ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhost Ġ= Ġurl . getHost () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠimageView Ġ= ĠImageView ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠLinearLayout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Resources (). get Dimension ( R . dim en . streaming _ button _ size ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Resources (). get Dimension ( R . dim en . streaming _ button _ size ). toInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . margin End Ġ= Ġget Resources (). get Dimension ( R . dim en . space _ 1 0 ). toInt (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setImage Resource ( Enum Streaming . getBy Url ( host ). drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( v _ container _ watch _ on Ġas ĠViewGroup ). addView ( imageView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġobserver Network Errors Ġ= ĠObserver < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ"\ uD 8 3 D \ u DE 2 8 ĠW oo ops Ġ${ it }", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . live Data Mer ger !!. re Ob serve ( view Lifecycle Owner , Ġobserver Extra Detail Result ) ĊĠĠĠĠĠĠĠ ĠviewModel . genre Network Errors !!. re Ob serve ( view Lifecycle Owner , Ġobserver Network Errors ) ĊĠĠĠĠĠĠĠ ĠviewModel . streaming Network Errors !!. re Ob serve ( view Lifecycle Owner , Ġobserver Network Errors ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy View () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy View () ĊĠĠĠĠĠĠĠ ĠviewModel . live Data Mer ger !!. remove Observer ( observer Extra Detail Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwatch Y outube Video ( context : ĠContext , Ġid : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapp Intent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse (" vnd . youtube :$ id ")) ĊĠĠĠĠĠĠĠ Ġval Ġweb Intent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" http :// www . youtube . com / watch ? v =$ id ")) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( app Intent ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠActivity NotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . startActivity ( web Intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊ Ċ } Ċ