/* ĠCopyright Ġ 2 0 1 6 ĠGoogle ĠInc . Ċ Ġ* Ċ Ġ* Ġ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 . google . en ge du . an agrams Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Html Ċ import Ġandroid . text . InputType Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . input method . Editor Info Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġcom . google . en ge du . an agrams . databinding . Activity An agrams Binding Ċ import Ġcom . google . en ge du . an agrams . databinding . Content An agrams Binding Ċ import Ġjava . io . IOException Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . util .* Ċ Ċ class ĠAn agrams Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcurrent Word : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdictionary : ĠAn agram Dictionary ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġan agrams : ĠMutable List < String > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity An agrams Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġcontent Binding : ĠContent An agrams Binding ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity An agrams Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ Ġcontent Binding Ġ= ĠContent An agrams Binding . bind ( binding . content . root ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĠĠĠĠĠĠĠ Ġan agrams Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠ Ġval Ġtoolbar Ġ= ĠfindViewById < Toolbar >( R . id . toolbar ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġval Ġasset Manager Ġ= Ġassets ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġasset Manager . open (" words . txt ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdictionary Ġ= ĠAn agram Dictionary ( InputStream Reader ( inputStream )) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoast Ġ= ĠToast . makeText ( this , Ġ" Could Ġnot Ġload Ġdictionary ", ĠToast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġinit Ġclick Ġlistener ĊĠĠĠĠĠĠĠ Ġinit ClickListener () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit ClickListener () Ġ{ ĊĠĠĠĠĠĠĠ Ġcontent Binding . edit Text . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Raw InputType ( InputType . TYPE _ CLASS _ TEXT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ ime Options Ġ= ĠEditor Info . IME _ ACTION _ GO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset On Editor ActionListener Ġ{ Ġ_, Ġaction Id , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġhandled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( action Id Ġ== ĠEditor Info . IME _ ACTION _ GO Ġ|| Ġaction Id Ġ== ĠEditor Info . IME _ NULL Ġ&& Ġevent Ġ!= Ġnull Ġ&& Ġevent . action Ġ== ĠKeyEvent . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocess Word ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandled ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . fab . setOnClickListener Ġ{ Ġdefault Action () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprocess Word ( edit Text : ĠEditText ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġword Ġ= Ġedit Text . text . toString (). trim Ġ{ Ġit Ġ<= Ġ' Ġ' Ġ}. toLowerCase ( Locale . ROOT ) ĊĠĠĠĠĠĠĠ Ġif Ġ( word . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġcolor Ġ= Ġ"# cc 0 0 2 9 " ĊĠĠĠĠĠĠĠ Ġif Ġ( dictionary . is Good Word ( word , Ġcurrent Word . or Empty ()) Ġ&& Ġan agrams . contains ( word )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= Ġ"# 0 0 aa 2 9 " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġword Ġ= Ġ" X Ġ$ word " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġan agrams . remove ( word ) ĊĠĠĠĠĠĠĠ Ġcontent Binding . result View . append ( Html . from Html ( String . format ("< font Ġcolor =% s >% s </ font >< BR >", Ġcolor , Ġword ))) ĊĠĠĠĠĠĠĠ Ġedit Text . setText ("") ĊĠĠĠĠĠĠĠ Ġval Ġfab Ġ= ĠfindViewById < Floating ActionButton >( R . id . fab ) ĊĠĠĠĠĠĠĠ Ġfab . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġmenu ; Ġthis Ġadds Ġitems Ġto Ġthe Ġaction Ġbar Ġif Ġit Ġis Ġpresent . ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ an agrams , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġaction Ġbar Ġitem Ġclicks Ġhere . ĠThe Ġaction Ġbar Ġwill ĊĠĠĠĠĠĠĠ Ġ// Ġautomatically Ġhandle Ġclicks Ġon Ġthe ĠHome / Up Ġbutton , Ġso Ġlong ĊĠĠĠĠĠĠĠ Ġ// Ġas Ġyou Ġspecify Ġa Ġparent Ġactivity Ġin ĠAndroid Manifest . xml . ĊĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġitem . itemId ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( id Ġ== ĠR . id . action _ settings ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdefault Action () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( current Word Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Word Ġ= Ġdictionary . pick Good Starter Word () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġan agrams . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġan agrams . addAll ( dictionary . get An agrams With One More Letter ( current Word . or Empty ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Binding . game Status View . text Ġ= ĠHtml . from Html ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString . format ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSTART _ MESSAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Word . or Empty (). toUpperCase ( Locale . ROOT ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Word ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . fab . setImage Resource ( android . R . drawable . ic _ menu _ help ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . fab . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Binding . result View . text Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Binding . edit Text . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Text ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Focus () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimm Ġ= Ġget System Service ( INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimm . show Soft Input ( this , ĠInput Method Manager . SHOW _ IMP LICIT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Binding . edit Text . setText ( current Word ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Binding . edit Text . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . fab . setImage Resource ( android . R . drawable . ic _ media _ play ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Word Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Binding . result View . append ( TextUtils . join ("\ n ", Ġan agrams )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Binding . game Status View . append (" ĠHit Ġ' Play ' Ġto Ġstart Ġagain ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠSTART _ MESSAGE Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Find Ġas Ġmany Ġwords Ġas Ġpossible Ġthat Ġcan Ġbe Ġformed Ġby Ġadding Ġone Ġletter Ġto Ġ< big >% s </ big > Ġ( but Ġthat Ġdo Ġnot Ġcontain Ġthe Ġsubstring Ġ% s )." ĊĠĠĠ Ġ} Ċ }