package Ġcom . example . wik isp ot Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Environment Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġjava . io . File Ċ import Ġjava . io . FileInputStream Ċ import Ġjava . nio . channels . File Channel Ċ import Ġjava . nio . charset . Charset Ċ import Ġjava . util .* Ċ Ċ // Ġfor Ġshowing Ġmessages Ċ Ċ fun ĠContext . show Toast ( message : ĠString , Ġlength : ĠInt Ġ= ĠToast . LENGTH _ SHORT ) Ġ{ ĊĠĠĠ ĠToast . makeText ( this , Ġmessage , Ġlength ). show () Ċ } Ċ Ċ fun ĠContext . show Sn ack ( message : ĠString , Ġview : ĠView , Ġlength : ĠInt Ġ= ĠSn ackbar . LENGTH _ LONG ) Ġ{ ĊĠĠĠ ĠSn ackbar . make ( this , Ġview , Ġmessage , Ġlength ). show () Ċ } Ċ Ċ // Ġfor Ġtheme Ċ Ċ fun ĠContext . get Theme Id (): ĠInt Ġ{ ĊĠĠĠ Ġif Ġ( Theme Options . dark Theme ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Theme Options . more Colors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . style . Theme _ Wiki Spot Dark ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . style . Theme _ Wiki Spot Dark _ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Theme Options . more Colors ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . style . Theme _ Wiki Spot ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠR . style . Theme _ Wiki Spot _ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġworking Ġwith Ġfiles Ċ fun ĠContext . create File ( filename : ĠString , Ġfile type : ĠString ): ĠFile Ġ{ ĊĊĠĠĠ Ġval Ġstorage Dir Ġ= Ġget External Files Dir ( Environment . DIRECTORY _ DOCUMENT S ) ĊĠĠĠ Ġif Ġ(! storage Dir ?. exists () !! ) Ġ{ ĊĠĠĠĠĠĠĠ Ġstorage Dir . mkdir () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn ĠFile ( storage Dir , Ġ"$ filename .$ file type ") Ċ } Ċ Ċ fun ĠContext . getFile ( filename : ĠString , Ġfile type : ĠString ): ĠString Ġ{ ĊĊĠĠĠ Ġval Ġfile Ġ= Ġ( get External Files Dir ( Environment . DIRECTORY _ DOCUMENT S )?. absolute Path Ġ?: Ġ"") Ġ+ Ġ"/ $ filename .$ file type " ĊĊĠĠĠ Ġval Ġstream Ġ= ĠFileInputStream ( file ) ĊĊĠĠĠ Ġvar Ġreturn String Ġ= Ġ"" ĊĊĠĠĠ Ġstream . use Ġ{ Ġstream InUse Ġ-> ĊĠĠĠĠĠĠĠ Ġval Ġfile Channel Ġ= Ġstream InUse . channel ĊĠĠĠĠĠĠĠ Ġval Ġmapped ByteBuffer Ġ= Ġfile Channel . map ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Channel . Map Mode . READ _ ONLY , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile Channel . size () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġreturn String Ġ= ĠCharset . default Charset (). decode ( mapped ByteBuffer ). toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġreturn String Ċ } Ċ Ċ fun ĠContext . save String ( access Key : ĠString , Ġstring Value : ĠString , Ġpreferences Filename : ĠString =" general Preferences ") Ġ{ ĊĠĠĠ Ġval Ġshared Preferences Ġ= Ġget SharedPreferences ( preferences Filename , ĠContext . MODE _ PRIVATE ) ĊĠĠĠ Ġval Ġeditor Ġ= Ġshared Preferences . edit () ĊĊĠĠĠ Ġeditor . apply { ĊĠĠĠĠĠĠĠ Ġput String ( access Key , Ġstring Value ) ĊĠĠĠ Ġ}. apply () Ċ } Ċ Ċ fun ĠContext . getString From SharedPreferences ( access Key : ĠString , Ġpreferences Filename : ĠString =" general Preferences "): ĠString Ġ{ ĊĠĠĠ Ġval Ġshared Preferences Ġ= Ġget SharedPreferences ( preferences Filename , ĠContext . MODE _ PRIVATE ) ĊĠĠĠ Ġval Ġreturned String Ġ= Ġshared Preferences . getString ( access Key , Ġ"") ĊĊĠĠĠ Ġreturned String ?. let Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġreturned String ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġ Ġ"" Ċ } Ċ Ċ // ĠOther Ċ Ċ fun ĠContext . getRandom Generator ( seed String : ĠString ): ĠRandom Ġ{ ĊĠĠĠ Ġvar Ġn : ĠLong Ġ= Ġ 0 ĊĠĠĠ Ġfor Ġ( element Ġin Ġseed String ) Ġ{ ĊĠĠĠĠĠĠĠ Ġn Ġ+= Ġelement . toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprintln ( n ) ĊĠĠĠ Ġreturn ĠRandom ( n ) Ċ } Ċ Ċ // ĠActivity Ġextensions Ċ Ċ fun ĠActivity . ask To Quit () Ġ{ ĊĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this ) ĊĠĠĠ Ġbuilder . setTitle (" Confirm ") ĊĠĠĠ Ġbuilder . setMessage (" Do Ġyou Ġwant Ġto Ġquit Ġthe Ġapplication ?") ĊĠĠĠ Ġbuilder . set Positive Button (" Yes ") Ġ{ Ġ_, Ġ_ Ġ-> Ġfinish ()} ĊĠĠĠ Ġbuilder . set Negative Button (" No ") Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠ Ġbuilder . show () Ċ } Ċ