/* Ċ Ġ* Ġ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 . navigation Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . navigation . find Nav Controller Ċ import Ġcom . example . android . navigation . databinding . Fragment Game W on Binding Ċ Ċ /** Ċ Ġ* ĠThis Ġis Ġthe Ġ[ Fragment ] Ġwe Ġnavigate Ġto Ġif Ġthe Ġuser Ġwins Ġthe Ġgame . ĠIt Ġjust Ġdisplays Ġa Ġmessage Ġand Ċ Ġ* Ġprovides Ġa Ġ" Next ĠMatch " Ġbutton Ġthat Ġnav i ag ates Ġback Ġto Ġ` Game Fragment ` Ġwhen Ġit Ġis Ġclicked . Ċ Ġ*/ Ċ class ĠGame W on Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġto Ġhave Ġthe Ġfragment Ġinstantiate Ġits Ġuser Ġinterface Ġview . ĠThis Ġwill Ġbe Ġcalled Ġbetween ĊĠĠĠĠ Ġ* Ġ[ onCreate ] Ġand Ġ[ on Activity Created ]. ĠWe Ġinitialize Ġour Ġ[ Fragment Game W on Binding ] Ġvariable ĊĠĠĠĠ Ġ* Ġ` val Ġbinding ` Ġby Ġhaving Ġthe Ġ[ Data Binding Util . inflate ] Ġmethod Ġuse Ġour Ġ[ LayoutInflater ] ĊĠĠĠĠ Ġ* Ġparameter Ġ[ in flater ] Ġto Ġinf late Ġour Ġlayout Ġfile Ġ[ R . layout . fragment _ game _ won ], Ġusing Ġour ĊĠĠĠĠ Ġ* Ġ[ ViewGroup ] Ġparameter Ġ[ container ] Ġfor Ġits ĠLayout Params Ġwithout Ġatt aching Ġto Ġit . ĠWe Ġthen Ġset ĊĠĠĠĠ Ġ* Ġthe Ġ` OnClickListener ` Ġof Ġthe Ġ` next Match Button ` Ġbutton Ġof Ġ` binding ` Ġto Ġa Ġlambda Ġwhich Ġnavig ates ĊĠĠĠĠ Ġ* Ġto Ġthe Ġ` Game Fragment `. ĠWe Ġthen Ġinitialize Ġour Ġ[ Game W on Fragment Args ] Ġvariable Ġ` val Ġargs ` Ġto ĊĠĠĠĠ Ġ* Ġthe Ġclass Ġthat Ġthe Ġ` from Bundle ` Ġmethod Ġof Ġour Ġ[ Game W on Fragment Args ] Ġgenerated Ġ` Nav Args ` ĊĠĠĠĠ Ġ* Ġclass Ġcreates Ġfrom Ġthe Ġarguments Ġsupplied Ġwhen Ġthe Ġfragment Ġwas Ġinstantiated . ĠWe Ġtoast Ġthe ĊĠĠĠĠ Ġ* Ġ" Num Correct " Ġand Ġ" Num Questions " Ġvalues Ġstored Ġin Ġ` args `, Ġthen Ġcall Ġ[ set Has Options Menu ] Ġwith ĊĠĠĠĠ Ġ* Ġ` true ` Ġto Ġreport Ġthat Ġthis Ġfragment Ġwould Ġlike Ġto Ġparticip ate Ġin Ġpop ulating Ġthe Ġoptions Ġmenu ĊĠĠĠĠ Ġ* Ġby Ġreceiving Ġa Ġcall Ġto Ġ[ onCreate Options Menu ] Ġand Ġrelated Ġmethods . ĠFinally Ġwe Ġreturn Ġthe ĊĠĠĠĠ Ġ* Ġ` root ` Ġproperty Ġof Ġ` binding ` Ġ( the Ġout erm ost Ġ[ View ] Ġin Ġthe Ġlayout Ġfile Ġassociated Ġwith Ġthe ĊĠĠĠĠ Ġ* ĠBinding ) Ġto Ġthe Ġcaller . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġinflater ĠThe Ġ[ LayoutInflater ] Ġobject Ġthat Ġcan Ġbe Ġused Ġto Ġinf late ĊĠĠĠĠ Ġ* Ġany Ġviews Ġin Ġthe Ġfragment , ĊĠĠĠĠ Ġ* Ġ@ param Ġcontainer ĠIf Ġnon - null , Ġthis Ġis Ġthe Ġparent Ġview Ġthat Ġthe Ġfragment 's ĊĠĠĠĠ Ġ* ĠUI Ġwill Ġbe Ġattached Ġto . ĠThe Ġfragment Ġshould Ġnot Ġadd Ġthe Ġview Ġitself , ĊĠĠĠĠ Ġ* Ġbut Ġthis Ġcan Ġbe Ġused Ġto Ġgenerate Ġthe ĠLayout Params Ġof Ġthe Ġview . ĊĠĠĠĠ Ġ* Ġ@ param ĠsavedInstanceState ĠIf Ġnon - null , Ġthis Ġfragment Ġis Ġbeing Ġre - construct ed Ġfrom Ġa Ġprevious ĊĠĠĠĠ Ġ* Ġsaved Ġstate Ġas Ġgiven Ġhere , Ġbut Ġwe Ġdo Ġnot Ġoverride Ġ[ on Save InstanceState ] Ġso Ġdo Ġnot Ġuse . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturn Ġthe Ġ[ View ] Ġfor Ġthe Ġfragment 's ĠUI . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" Red undant Nullable ReturnType ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġval Ġbinding : ĠFragment Game W on Binding Ġ= ĠData Binding Util . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . fragment _ game _ won , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbinding . next Match Button . setOnClickListener Ġ{ Ġview : ĠView Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . find Nav Controller () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. navigate ( Game W on Fragment Directions . action Game W on Fragment To Game Fragment ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠGame W on Fragment Args . from Bundle ( require Arguments ()) ĊĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Num Correct : Ġ${ args . num Correct }, ĠNum Questions : Ġ${ args . num Questions }", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠ Ġ). show () ĊĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreating Ġour ĠShare ĠIntent . ĠWe Ġinitialize Ġour Ġ[ Game W on Fragment Args ] Ġvariable Ġ` val Ġargs ` ĊĠĠĠĠ Ġ* Ġto Ġthe Ġsafe Ġ` Nav Args ` Ġclass Ġthat Ġthe Ġ[ Game W on Fragment Args . from Bundle ] Ġ Ġmethod Ġcreates ĊĠĠĠĠ Ġ* Ġfrom Ġthe Ġarguments Ġsupplied Ġwhen Ġthe Ġfragment Ġwas Ġinstantiated Ġ( it Ġcontains Ġgetters Ġfor ĊĠĠĠĠ Ġ* Ġthe Ġ` num Correct ` Ġand Ġ` num Questions ` Ġsafe Ġarguments ). ĠWe Ġinitialize Ġour Ġ[ Intent ] Ġvariable ĊĠĠĠĠ Ġ* Ġ` val Ġshare Intent ` Ġwith Ġthe Ġaction Ġ[ Intent . ACTION _ SEND ] Ġ( Deliver Ġsome Ġdata Ġto Ġsomeone Ġelse ). ĊĠĠĠĠ Ġ* ĠWe Ġset Ġthe Ġtype Ġof Ġ` share Intent ` Ġto Ġ" text / plain " Ġand Ġadd Ġan Ġ[ Intent . EXTRA _ TEXT ] Ġextra Ġwhich ĊĠĠĠĠ Ġ* Ġconsists Ġof Ġa Ġformatted Ġstring Ġdisplaying Ġthe Ġ` num Correct ` Ġ( number Ġcorrectly Ġanswered ) Ġand ĊĠĠĠĠ Ġ* Ġ` num Questions ` Ġ( total Ġnumber Ġof Ġquestions Ġasked ) Ġproperties Ġof Ġ` args `. ĠFinally Ġwe Ġreturn ĊĠĠĠĠ Ġ* Ġ` share Intent ` Ġto Ġthe Ġcaller . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġan Ġ[ Intent ] Ġwhose Ġaction Ġis Ġ[ Intent . ACTION _ SEND ] Ġand Ġwhose Ġextra Ġis Ġa Ġformatted ĊĠĠĠĠ Ġ* Ġstring Ġreporting Ġthe Ġresults Ġof Ġplaying Ġthe Ġgame . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Share Intent () Ġ: ĠIntent Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġargs Ġ= ĠGame W on Fragment Args . from Bundle ( require Arguments ()) ĊĠĠĠĠĠĠĠ Ġval Ġshare Intent Ġ= ĠIntent ( Intent . ACTION _ SEND ) ĊĠĠĠĠĠĠĠ Ġshare Intent . setType (" text / plain ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . EXTRA _ TEXT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . share _ success _ text , Ġargs . num Correct , Ġargs . num Questions ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn Ġshare Intent ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠStarting Ġan ĠActivity Ġwith Ġour Ġnew ĠIntent . ĠWe Ġjust Ġcall Ġthe Ġ[ startActivity ] Ġmethod Ġwith Ġthe ĊĠĠĠĠ Ġ* Ġ[ Intent ] Ġcreated Ġby Ġour Ġ[ get Share Intent ] Ġmethod . ĠCalled Ġfrom Ġour Ġ[ on Options ItemSelected ] ĊĠĠĠĠ Ġ* Ġoverride Ġwhen Ġthe Ġ` itemId ` Ġof Ġthe Ġ[ MenuItem ] Ġselected Ġis Ġ[ R . id . share ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshare Success () Ġ{ ĊĠĠĠĠĠĠĠ ĠstartActivity ( get Share Intent ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitialize Ġthe Ġcontents Ġof Ġthe ĠFragment Ġhost 's Ġstandard Ġoptions Ġmenu . ĠFirst Ġwe Ġcall Ġour ĊĠĠĠĠ Ġ* Ġsuper 's Ġimplementation Ġof Ġ` onCreate Options Menu `, Ġthen Ġwe Ġuse Ġour Ġ[ Menu Inflater ] Ġparameter ĊĠĠĠĠ Ġ* Ġ[ in flater ] Ġto Ġinf late Ġour Ġmenu Ġlayout Ġfile Ġ[ R . menu . winner _ menu ] Ġinto Ġour Ġ[ Menu ] Ġparameter ĊĠĠĠĠ Ġ* Ġ[ menu ]. ĠIf Ġthe Ġ` resolve Activity ` Ġmethod Ġof Ġthe Ġ[ Intent ] Ġcreated Ġby Ġour Ġ[ get Share Intent ] ĊĠĠĠĠ Ġ* Ġmethod Ġis Ġunable Ġto Ġfind Ġan Ġactivity Ġwhich Ġcan Ġhandle Ġwe Ġset Ġthe Ġvisibility Ġof Ġthe Ġmenu ĊĠĠĠĠ Ġ* Ġitem Ġin Ġ[ menu ] Ġwith Ġthe Ġid Ġ[ R . id . share ] Ġto Ġinvisible . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmenu ĠThe Ġoptions Ġmenu Ġin Ġwhich Ġyou Ġplace Ġyour Ġitems . ĊĠĠĠĠ Ġ* Ġ@ param Ġinflater Ġa Ġ[ Menu Inflater ] Ġone Ġcan Ġuse Ġto Ġinf late Ġan ĠXML Ġmenu Ġfile . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Query Permissions Needed ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . winner _ menu , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġ// Ġcheck Ġif Ġthe Ġactivity Ġresolves ĊĠĠĠĠĠĠĠ Ġif Ġ( null Ġ== Ġget Share Intent (). resolve Activity ( require Activity (). package Manager )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġhide Ġthe Ġmenu Ġitem Ġif Ġit Ġdoesn 't Ġresolve ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmenu . find Item ( R . id . share )?. isVisible Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġhook Ġis Ġcalled Ġwhenever Ġan Ġitem Ġin Ġyour Ġoptions Ġmenu Ġis Ġselected . ĠWhen Ġthe ĠID Ġof Ġour ĊĠĠĠĠ Ġ* Ġ[ MenuItem ] Ġparameter Ġ[ item ] Ġis Ġ[ R . id . share ] Ġwe Ġcall Ġour Ġmethod Ġ[ share Success ] Ġ( which Ġwill ĊĠĠĠĠ Ġ* Ġlaunch Ġanother Ġactivity Ġwhich Ġwill Ġ" share " Ġour Ġgame Ġresults ). ĠIn Ġany Ġcase Ġwe Ġthen Ġreturn Ġthe ĊĠĠĠĠ Ġ* Ġvalue Ġreturned Ġby Ġour Ġsuper 's Ġimplementation Ġof Ġ` on Options ItemSelected `. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġitem ĠThe Ġmenu Ġitem Ġthat Ġwas Ġselected . ĊĠĠĠĠ Ġ* Ġ@ return Ġboolean ĠReturn Ġ` false ` Ġto Ġallow Ġnormal Ġmenu Ġprocessing Ġto Ġproceed , Ġ` true ` Ġto ĊĠĠĠĠ Ġ* Ġconsume Ġit Ġhere . ĊĠĠĠĠ Ġ*/ ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . share Ġ-> Ġshare Success () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} Ċ } Ċ