/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 , ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . example . android . g ues st he word . screens . game Ċ Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . V ibration Effect Ċ import Ġandroid . os . V ibr ator Ċ import Ġandroid . text . format . Date Utils Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . content . getSystem Service Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . navigation . fragment . Nav Host Fragment . find Nav Controller Ċ import Ġcom . example . android . g ues st he word . R Ċ import Ġcom . example . android . g ues st he word . databinding . Game Fragment Binding Ċ import Ġtim ber . log . Tim ber Ċ Ċ /** Ċ Ġ* ĠFragment Ġwhere Ġthe Ġgame Ġis Ġplayed Ċ Ġ*/ Ċ class ĠGame Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġ_ Game ViewModel : ĠGame ViewModel ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠGame Fragment Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (": ĠonCreate View ĠCalled ") ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġview Ġand Ġobtain Ġan Ġinstance Ġof Ġthe Ġbinding Ġclass ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . game _ fragment , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ ĠTim ber . d (": ĠGame ViewModel ĠCalled ĠWith ĠInstance ĠOf !") ĊĠĠĠĠĠĠĠ Ġ/** ĠMakes ĠA ĠCall ĠTo ĠViewModel Providers ĠTo ĠReturn ĠAn ĠInstance ĠOf ĠGame ViewModel ĊĠĠĠĠĠĠĠĠ Ġ* ĠTo ĠAssoci ate ĠIt ĠWith ĠThe ĠGame Fragment ĠFor ĠThe ĠDuration ĠOf ĠThe ĠFragment Life Cycle ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ_ Game ViewModel Ġ= ĠViewModel Providers . of ( this ). get ( Game ViewModel :: class . java ) ĊĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ĠSetup ĠData Binding ĠExpress ions ĠFor ĠThe ĠGame Fragment ĠLayout ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġbinding . game ViewModel Ġ= Ġ_ Game ViewModel ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġ// Initial ise ĠFirst ĠWord Ġ& ĠScore ĊĠĠĠĠĠĠĠ Ġbinding . word Text . text Ġ= Ġ(_ Game ViewModel . get Word LiveData () ?: Ġ" Ġ"). toString () ĊĠĠĠĠĠĠĠ Ġbinding . score Text . text Ġ= Ġ(_ Game ViewModel . get Score LiveData () ?: Ġ 0 ). toString () ĊĠĠĠĠĠĠĠ Ġbinding . timer Text . text Ġ= Ġ" 0 : 0 0 " ĊĊĠĠĠĠĠĠĠ Ġ/** Ġ************************************************* ****** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ ĠRegister ing ĠOb servers ĊĠĠĠĠĠĠĠĠ Ġ********************************************************* */ ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister ĠThe ĠGame Fragment ĠAs ĠAn ĠObserver ĠOf ĠThe ĠScore ĠFrom ĠGame ViewModel 's ĠScore ĠLive Data ĠVariable Ċ // ĠĠĠĠĠĠĠ Ġ_ Game ViewModel . get Score LiveData (). observe ( this , ĠObserver Ġ{ ĠNew Score -> Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (": Ġupdate Score Text ĠCurrent ĠScore Ġ= Ġ${ New Score }") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . score Text . text Ġ= ĠNew Score . toString () Ċ // ĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister ĠThe ĠGame Fragment ĠAs ĠAn ĠObserver ĠOf ĠThe ĠWord ĠFrom ĠGame ViewModel 's ĠWord ĠLive Data ĠVariable Ċ // ĠĠĠĠĠĠĠ Ġ_ Game ViewModel . get Word LiveData (). observe ( this , ĠObserver Ġ{ ĠNew Word Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (": Ġupdate Word Text ĠCurrent ĠWord ĠIs Ġ= Ġ${ New Word }") Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . word Text . text Ġ= ĠNew Word . toString () Ċ // ĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠRegister ĠThe ĠGame Fragment ĠAs ĠAn ĠObserver ĠOf ĠThe ĠGame ĠState Ġ( is Game Finished ) ĠFrom ĠGame ViewModel 's Ġis Game Finished ĠLive Data ĠVariable ĊĠĠĠĠĠĠĠ Ġ_ Game ViewModel . Game Finished . observe ( this , ĠObserver Ġ{ ĠGame Is Finished Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( Game Is Finished ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Finished () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ_ Game ViewModel . Current Bu z zer Pattern . observe ( this , ĠObserver Ġ{ ĠBu zz ing Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen ( Bu zz ing ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBu zz Type . NO _ BU ZZ Ġ-> Ġbu zz (_ Game ViewModel ._ Bu zz ArrayType . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBu zz Type . COUNT DOWN _ PAN IC Ġ-> Ġbu zz (_ Game ViewModel ._ Bu zz ArrayType . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBu zz Type . CORRECT Ġ-> Ġbu zz (_ Game ViewModel ._ Bu zz ArrayType . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBu zz Type . GAME _ OVER Ġ-> Ġbu zz (_ Game ViewModel ._ Bu zz ArrayType . value !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊ Ċ // ĠĠĠĠĠĠĠ Ġ_ Game ViewModel . Current Time . observe ( this , ĠObserver Ġ{ ĠE lapsed Time Ġ-> Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . timer Text . text Ġ= ĠDate Utils . format Elapsed Time ( Elapsed Time ) Ċ // ĠĠĠĠĠĠĠ Ġ}) ĊĊ Ċ // ĠĠĠĠĠĠĠ Ġbinding . correct Button . setOnClickListener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ_ Game ViewModel . on Correct () Ċ //// ĠĠĠĠĠĠĠĠĠĠĠ Ġif (_ Game ViewModel . is Game Finished ()) Ċ //// ĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Finished () Ċ //// ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġbinding . skip Button . setOnClickListener Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ_ Game ViewModel . on Skip () Ċ //// ĠĠĠĠĠĠĠĠĠĠĠ Ġif (_ Game ViewModel . is Game Finished ()) Ġ{ Ċ //// ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgame Finished () Ċ //// ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġbu zz ( pattern : ĠLong Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbu z zer Ġ= Ġactivity ?. getSystem Service < V ibr ator >() ĊĊĠĠĠĠĠĠĠ Ġbu z zer ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbu z zer . vi br ate ( V ibration Effect . create Wave form ( pattern , Ġ- 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// deprecated Ġin ĠAPI Ġ 2 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbu z zer . vi br ate ( pattern , Ġ- 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġgame Ġis Ġfinished ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġgame Finished () Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Navigation ĠGame Ġ---- > ĠScore ") ĊĠĠĠĠĠĠĠ Ġ// ĠEl vis ĠOperator Ġ" Ġ?: Ġ" ĠWill ĠPro duce ĠZero ĠIf ĠThe ĠLive Data ĠFrom ĠScore LiveData ĠEnd s ĠUp ĠBe ing ĠNull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠGame Fragment Directions . action Game To Score (_ Game ViewModel . get Score LiveData (). value ?: Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfind Nav Controller ( this ). navigate ( action ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĠMethods Ġfor Ġupdating Ġthe ĠUI Ġ**/ Ċ Ċ // ĠĠĠ Ġprivate Ġfun Ġupdate Word Text () Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠTim ber . d (": Ġupdate Word Text ĠCurrent ĠWord ĠIs Ġ= Ġ${ _ Game ViewModel . get Word () }") Ċ // ĠĠĠĠĠĠĠ Ġbinding . word Text . text Ġ= Ġ_ Game ViewModel . get Word () Ċ // Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġupdate Score Text () Ġ{ Ċ // ĠĠĠĠĠĠĠ ĠTim ber . d (": Ġupdate Score Text ĠCurrent ĠScore Ġ= Ġ${ _ Game ViewModel . get Score () }") Ċ // ĠĠĠĠĠĠĠ Ġbinding . score Text . text Ġ= Ġ_ Game ViewModel . get Score (). toString () Ċ // ĠĠĠ Ġ} Ċ } Ċ