package Ġme . blog . k orn 1 2 3 . commons . utils Ċ Ċ import Ġandroid . content . Content Resolver Ċ import Ġandroid . content . Context Ċ import Ġandroid . database . Cursor Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Port er D uff Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Environment Ċ import Ġandroid . provider . Open able Columns Ċ import Ġandroid . text . Sp ann able String Ċ import Ġandroid . text . Sp anned Ċ import Ġandroid . text . style . BackgroundColor Span Ċ import Ġandroid . text . style . Style Span Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . Adapter View Ċ import Ġandroid . widget . ListView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġid . zel ory . compressor . Compressor Ċ import Ġio . github . aaf actory . commons . utils . Bitmap Utils Ċ import Ġio . github . aaf actory . commons . utils . CAL C UL ATION Ċ import Ġio . github . aaf actory . commons . utils . Common Utils Ċ import Ġme . blog . k orn 1 2 3 . easy di ary . R Ċ import Ġme . blog . k orn 1 2 3 . easy di ary . adapters . Second Item Adapter Ċ import Ġme . blog . k orn 1 2 3 . easy di ary . extensions . check Permission Ċ import Ġme . blog . k orn 1 2 3 . easy di ary . extensions . config Ċ import Ġme . blog . k orn 1 2 3 . easy di ary . helper .* Ċ import Ġme . blog . k orn 1 2 3 . easy di ary . models . Di ary Dto Ċ import Ġme . blog . k orn 1 2 3 . easy di ary . models . Photo Uri Dto Ċ import Ġorg . apache . commons . io . FileUtils Ċ import Ġorg . apache . commons . lang 3 . StringUtils Ċ import Ġjava . io . File Ċ import Ġjava . io . FileNotFoundException Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby Ġhan jo ong Ġon Ġ 2 0 1 7 - 0 4 - 3 0 . Ċ Ġ*/ Ċ Ċ object ĠEasy Di ary Utils Ġ{ ĊĠĠĠ Ġprivate Ġconst Ġval ĠH IG HL IGHT _ COLOR : ĠInt Ġ= Ġ 0 x 9 FFFF F 0 0 . toInt () ĊĊĠĠĠ Ġval Ġeasy Di ary MimeType : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ" text / aaf _ v " Ġ+ ĠEasy Di ary Db Helper . getInstance (). version ĊĊĠĠĠ Ġval Ġeasy Di ary MimeType All : ĠArray < String ?> ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Version Ġ= ĠEasy Di ary Db Helper . getInstance (). version . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġeasy Di ary MimeType Ġ= ĠarrayOf Null s < String >( current Version ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcurrent Version ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġeasy Di ary MimeType [ i ] Ġ= Ġ" text / aaf _ v " Ġ+ Ġ( i Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġeasy Di ary MimeType ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit Working Directory ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context . check Permission ( EXTERNAL _ STORAGE _ PERMISSION S )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Directory ( getApplication Data Directory ( context ) Ġ+ ĠDI ARY _ PH OTO _ DIRECTORY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Directory ( getApplication Data Directory ( context ) Ġ+ ĠDI ARY _ POST CARD _ DIRECTORY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Directory ( getApplication Data Directory ( context ) Ġ+ ĠUSER _ CUSTOM _ FONT S _ DIRECTORY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Directory ( getApplication Data Directory ( context ) Ġ+ ĠMARK DOWN _ DIRECTORY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Directory ( getApplication Data Directory ( context ) Ġ+ ĠBACK UP _ EX CEL _ DIRECTORY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Directory ( getApplication Data Directory ( context ) Ġ+ ĠBACK UP _ DB _ DIRECTORY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinit Legacy Working Directory ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context . check Permission ( EXTERNAL _ STORAGE _ PERMISSION S )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmake Directory ( get External Storage Directory (). absolute Path Ġ+ ĠBACK UP _ EX CEL _ DIRECTORY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġmake Directory ( path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġworking Directory Ġ= ĠFile ( path ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! working Directory . exists ()) Ġworking Directory . mkdir s () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Application Data Directory ( context : ĠContext ): ĠString Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġreturn ĠEnvironment . get External Storage Directory (). absolute Path ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . application Info . data Dir ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget External Storage Directory (): ĠFile Ġ= ĠEnvironment . get External Storage Directory () ĊĊĠĠĠ Ġfun Ġbold String ( context : ĠContext , ĠtextView : ĠTextView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context . config . bold Style Enable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠtextView ?. let Ġ{ Ġtv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsp ann able String Ġ= ĠSp ann able String ( tv . text ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able String . set Span ( Style Span ( Type face . BOLD ), Ġ 0 , Ġtv . text . length , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . text Ġ= Ġsp ann able String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġfun Ġhighlight String ( textView : ĠTextView ?, Ġinput : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠtextView ?. let Ġ{ Ġtv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput ?. let Ġ{ Ġtarget String Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Get Ġthe Ġtext Ġfrom Ġtext Ġview Ġand Ġcreate Ġa Ġsp ann able Ġstring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsp ann able String Ġ= ĠSp ann able String ( tv . text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Get Ġthe Ġprevious Ġspans Ġand Ġremove Ġthem ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackground Spans Ġ= Ġsp ann able String . get Spans ( 0 , Ġsp ann able String . length , ĠBackground Color Span :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( span Ġin Ġbackground Spans ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able String . remove Span ( span ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Search Ġfor Ġall Ġoccurrences Ġof Ġthe Ġkeyword Ġin Ġthe Ġstring ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠindexOf Keyword Ġ= Ġsp ann able String . toString (). indexOf ( target String ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( indexOf Keyword Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Create Ġa Ġbackground Ġcolor Ġspan Ġon Ġthe Ġkeyword ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able String . set Span ( BackgroundColor Span ( HIG HL IGHT _ COLOR ), ĠindexOf Keyword , ĠindexOf Keyword Ġ+ Ġtarget String . length , ĠSp anned . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Get Ġthe Ġnext Ġindex Ġof Ġthe Ġkeyword ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠindexOf Keyword Ġ= Ġsp ann able String . toString (). indexOf ( target String , ĠindexOf Keyword Ġ+ Ġtarget String . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Set Ġthe Ġfinal Ġtext Ġon ĠTextView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . text Ġ= Ġsp ann able String ĠĠĠĠ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhighlight String IgnoreCase ( textView : ĠTextView ?, Ġinput : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠtextView ?. let Ġ{ Ġtv Ġ-> ĠĊĠĠĠĠĠĠĠĠĠĠĠ Ġinput ?. let Ġ{ Ġtarget String Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinput Lower Ġ= Ġtarget String . toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontents Lower Ġ= Ġtv . text . toString (). toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsp ann able String Ġ= ĠSp ann able String ( tv . text ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbackground Spans Ġ= Ġsp ann able String . get Spans ( 0 , Ġsp ann able String . length , ĠBackground Color Span :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( span Ġin Ġbackground Spans ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able String . remove Span ( span ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar ĠindexOf Keyword Ġ= Ġcontents Lower . indexOf ( input Lower ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( indexOf Keyword Ġ>= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsp ann able String . set Span ( BackgroundColor Span ( HIG HL IGHT _ COLOR ), ĠindexOf Keyword , ĠindexOf Keyword Ġ+ Ġinput Lower . length , ĠSp anned . SPAN _ EXCL USIVE _ EXCL USIVE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠindexOf Keyword Ġ= Ġcontents Lower . indexOf ( input Lower , ĠindexOf Keyword Ġ+ Ġinput Lower . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv . text Ġ= Ġsp ann able String ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Seconds Picker Builder ( context : ĠContext , Ġitem ClickListener : ĠAdapter View . On ItemClickListener , Ġsecond : ĠInt ): ĠAlertDialog . Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( context ) ĊĠĠĠĠĠĠĠ Ġbuilder . set Negative Button ( context . getString ( android . R . string . cancel ), Ġnull ) ĊĠĠĠĠĠĠĠ Ġbuilder . setTitle ( context . getString ( R . string . common _ create _ seconds )) ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= Ġcontext . getSystem Service ( Context . LAYOUT _ IN FL ATER _ SERVICE ) Ġas ĠLayoutInflater ĊĠĠĠĠĠĠĠ Ġval Ġseconds Picker Ġ= Ġinflater . inflate ( R . layout . dialog _ seconds _ picker , Ġnull ) ĊĠĠĠĠĠĠĠ Ġval ĠlistView Ġ= Ġseconds Picker . findViewById < ListView >( R . id . seconds ) ĊĠĠĠĠĠĠĠ Ġval Ġlist Second Ġ= ĠArrayList < Map < String , ĠString >>() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 5 9 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġhash Map Of < String , ĠString >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put (" label ", Ġi . toString () Ġ+ Ġ" s ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmap . put (" value ", Ġi . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Second . add ( map ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠSecond Item Adapter ( context , ĠR . layout . item _ second , Ġlist Second , Ġsecond ) ĊĠĠĠĠĠĠĠ ĠlistView . adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ ĠlistView . on ItemClickListener Ġ= Ġitem ClickListener ĊĠĠĠĠĠĠĠ Ġbuilder . setView ( seconds Picker ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbuilder ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġphoto Uri To Down Sampling Bitmap ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext : ĠContext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Uri Dto : ĠPhoto Uri Dto , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequired Size : ĠInt Ġ= Ġ 5 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixed Width : ĠInt Ġ= Ġ 4 5 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfixed Height : ĠInt Ġ= Ġ 4 5 ĊĠĠĠ Ġ): ĠBitmap Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( photo Uri Dto . is Content Uri ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Utils . decode File ( context , ĠUri . parse ( photo Uri Dto . photo Uri ), ĠCommon Utils . dp To Pixel ( context , Ġfixed Width . toFloat (), ĠCAL C UL ATION . FLO OR ), ĠCommon Utils . dp To Pixel ( context , Ġfixed Height . toFloat (), ĠCAL C UL ATION . FLO OR )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( fixed Width Ġ== Ġfixed Height ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> ĠBitmap Utils . decode File Crop Center ( getApplication Data Directory ( context ) Ġ+ Ġphoto Uri Dto . get FilePath (), ĠCommon Utils . dp To Pixel ( context , Ġfixed Width . toFloat (), ĠCAL C UL ATION . FLO OR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> ĠBitmap Utils . decode File ( getApplication Data Directory ( context ) Ġ+ Ġphoto Uri Dto . get FilePath (), ĠCommon Utils . dp To Pixel ( context , Ġfixed Width . toFloat (), ĠCAL C UL ATION . FLO OR ), ĠCommon Utils . dp To Pixel ( context , Ġfixed Height . toFloat (), ĠCAL C UL ATION . FLO OR )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ġcatch Ġ( fe : ĠFileNotFoundException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfe . printStackTrace () ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode Resource ( context . resources , ĠR . drawable . question _ shield ) ĊĠĠĠ Ġ} Ġcatch Ġ( se : ĠSecurity Exception ) Ġ{ ĊĠĠĠĠĠĠĠ Ġse . printStackTrace () ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode Resource ( context . resources , ĠR . drawable . question _ shield ) ĊĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode Resource ( context . resources , ĠR . drawable . question _ shield ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġphoto Uri To Bitmap ( context : ĠContext , Ġphoto Uri Dto : ĠPhoto Uri Dto ): ĠBitmap ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbitmap : ĠBitmap ? Ġ= Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( photo Uri Dto . is Content Uri ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode Stream ( context . content Resolver . open InputStream ( Uri . parse ( photo Uri Dto . photo Uri ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfalse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Factory . decode File ( getApplication Data Directory ( context ) Ġ+ Ġphoto Uri Dto . get FilePath ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġfun Ġdown Sampling Image ( context : ĠContext , Ġsrc File : ĠFile , Ġdest File : ĠFile ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcompressed File Ġ= ĠCompress or ( context ). set Quality ( 7 0 ). compress ToFile ( src File ) ĊĠĠĠĠĠĠĠ ĠFileUtils . copy File ( compressed File , Ġdest File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchange Drawable Icon Color ( context : ĠContext , Ġcolor : ĠInt , Ġresource Id : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( context , Ġresource Id )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Color Filter ( color , ĠPort er D uff . Mode . SRC _ IN ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsummary Di ary Label ( di ary Dto : ĠDi ary Dto ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! di ary Dto . title . isNull OrEmpty ()) Ġdi ary Dto . title !! Ġelse ĠStringUtils . abbre vi ate ( di ary Dto . contents , Ġ 1 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdate Picker To Time Millis ( day OfMonth : ĠInt , Ġmonth : ĠInt , Ġyear : ĠInt , Ġis Full Hour : ĠBoolean Ġ= Ġfalse , Ġhour : ĠInt Ġ= Ġ 0 , Ġminute : ĠInt Ġ= Ġ 0 , Ġsecond : ĠInt Ġ= Ġ 0 ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcal Ġ= ĠCalendar . getInstance ( Locale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġcal . set ( Calendar . YEAR , Ġyear ) ĊĠĠĠĠĠĠĠ Ġcal . set ( Calendar . MONTH , Ġmonth ) ĊĠĠĠĠĠĠĠ Ġcal . set ( Calendar . DAY _ OF _ MONTH , Ġday OfMonth ) ĊĠĠĠĠĠĠĠ Ġcal . set ( Calendar . HOUR _ OF _ DAY , Ġif Ġ( is Full Hour ) Ġ 2 3 Ġelse Ġhour ) ĊĠĠĠĠĠĠĠ Ġcal . set ( Calendar . MINUTE , Ġif Ġ( is Full Hour ) Ġ 5 9 Ġelse Ġminute ) ĊĠĠĠĠĠĠĠ Ġcal . set ( Calendar . SECOND , Ġif Ġ( is Full Hour ) Ġ 5 9 Ġelse Ġsecond ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcal . time In Millis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsequence To Page Index ( di ary List : ĠArrayList < Di ary Dto >, Ġsequence : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġpage Index Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġif Ġ( sequence Ġ> Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġdi ary List . indices ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( di ary List [ i ]. sequence Ġ== Ġsequence ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpage Index Ġ= Ġi ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġpage Index ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġquery Name ( resolver : ĠContent Resolver , Ġuri : ĠUri ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreturn Cursor : ĠCursor ? Ġ= Ġresolver . query ( uri , Ġnull , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġvar Ġname : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Cursor ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Index Ġ= Ġit . getColumnIndex ( Open able Columns . DISPLAY _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . moveTo First () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġreturn Cursor . getString ( name Index ); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Cursor . close () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġname Ġ?: ĠUUID . randomUUID (). toString () ĊĠĠĠ Ġ} Ċ } Ċ