package Ġz dz . bil ic over . ui . main Ċ Ċ import Ġandroid . app . Download Manager Ċ import Ġandroid . content .* Ċ import Ġandroid . content . Intent . EXTRA _ STREAM Ċ import Ġandroid . content . Intent . EXTRA _ TEXT Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os .* Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroid . widget . Toast . LENGTH _ SHORT Ċ import Ġandroidx . activity . Component Activity Ċ import Ġandroidx . activity . compose . setContent Ċ import Ġandroidx . activity . result . Activity Result Launcher Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . compose . foundation . layout . fill MaxSize Ċ import Ġandroidx . compose . material 3 . Material Theme Ċ import Ġandroidx . compose . material 3 . Surface Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . core . content . File Provider Ċ import Ġandroidx . core . net . to File Ċ import Ġandroidx . document file . provider . Document File Ċ import Ġandroidx . navigation . compose . Nav Host Ċ import Ġandroidx . navigation . compose . comp osable Ċ import Ġandroidx . navigation . compose . remember Nav Controller Ċ import Ġcom . google . gson . Gson Ċ import Ġdagger . h ilt . android . Android EntryPoint Ċ import Ġkotlinx . coroutines . Coroutine Scope Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġz dz . bil ic over . Data Ċ import Ġz dz . bil ic over . R Ċ import Ġz dz . bil ic over . ui . Nav Item Ċ import Ġz dz . bil ic over . ui . main . sub . Guide Screen Ċ import Ġz dz . bil ic over . ui . main . sub . Main Screen Ċ import Ġz dz . bil ic over . ui . main . sub . Settings Screen Ċ import Ġz dz . bil ic over . ui . theme . B ilib ili Cover Getter Theme Ċ import Ġz dz . bil ic over . url .* Ċ import Ġjava . io . InputStream Ċ import Ġjava . net . Socket TimeoutException Ċ import Ġjava . net . URL ĊĊ Ċ @ Android EntryPoint Ċ class ĠMainActivity Ġ: ĠComponent Activity () Ġ{ ĊĠĠĠĠĊĠĠĠ Ġprivate Ġval Ġvm : ĠMain ViewModel Ġby Ġview Models () ĊĠĠĠĠĊĠĠĠ Ġlateinit Ġvar Ġpick Dir : ĠActivity Result Launcher < Uri ?> ĊĠĠĠĠĊĠĠĠ Ġlateinit Ġvar Ġdata : ĠData ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġset Content Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠB ilib ili Cover Getter Theme ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdark Theme Ġ= Ġvm . dark Theme , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransparent Ġ= Ġvm . transparent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠA Ġsurface Ġcontainer Ġusing Ġthe Ġ' background ' Ġcolor Ġfrom Ġthe Ġtheme ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSurface ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier . fill MaxSize (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠMaterial Theme . color Scheme . background ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnav Controller Ġ= Ġremember Nav Controller () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNav Host ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller Ġ= Ġnav Controller , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Destination Ġ= ĠNav Item . Main Scr . route ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ( Nav Item . Main Scr . route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Screen ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ MainActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ( Nav Item . Guide Scr . route ) Ġ{ ĠGuide Screen ( vm . debug ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomp osable ( Nav Item . Settings Scr . route ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings Screen ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvm , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ MainActivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġwhen Ġ( intent ?. action ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . ACTION _ SEND Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent . type Ġ== Ġ" text / plain ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . getString Extra ( EXTRA _ TEXT )?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcache ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" èİ·åıĸ åĪĨäº« æĪĲåĬŁ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ// åĪĿå§ĭåĮĸ æĹ¶ å°Ĩ ä¿Ŀ æľīçļĦ æ°¸ ä¹ħ uri è®¿éĹ® åľ°åĿĢ è¯»åıĸ åĪ° viewModel ĊĠĠĠĠĠĠĠ Ġset Root () ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġpick Dir Ġ= Ġregister For Activity Result ( vm . dir Contracts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( vm . rootDir ?. uri Ġ!= Ġit Ġ&& Ġvm . rootDir Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . release Persist able Uri Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvm . rootDir !!. uri , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . FLAG _ GRANT _ READ _ URI _ PERMISSION Ġor ĠIntent . FLAG _ GRANT _ WRITE _ URI _ PERMISSION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ("$ e ", Ġ" Error Ġon Ġreleasing Ġpersist able ĠURI ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . take Persist able Uri Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent . FLAG _ GRANT _ READ _ URI _ PERMISSION Ġor ĠIntent . FLAG _ GRANT _ WRITE _ URI _ PERMISSION ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvm . rootDir Ġ= ĠDocument File . from Tree Uri ( this , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġvm . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġskip SSL () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= ĠGson (). fromJson ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠURL (" https :// api . github . com / repos / Z ID OU ZI / B ilib ili - Cover - Getter - for Android / releases / latest "). getSource Code () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠData :: class . java ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠSocket TimeoutException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ("$ e ", Ġ" Error Ġon Ġgetting Ġlatest Ġrelease ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġ å¼¹ çªĹ æĽ´æĸ° ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¤ĦçĲĨ éĵ¾æİ¥ , å¹¶ å°Ĩ éĵ¾æİ¥ åĽ¾çīĩ ç¼ĵåŃĺ åĪ° [ bitmap ][ Main ViewModel . bitmap ] ä¸Ń . æĹł è®º æĺ¯ éĢļè¿ĩ åĪĨäº« è¿ĺæĺ¯ ç² ĺ è´ ´ è§£æŀĲ éĥ½ä¼ļ åħĪ æī§è¡Į æŃ¤ åĩ½æķ° ĊĠĠĠĠ Ġ* Ġ@ param [ res ] éĢļè¿ĩ åĪĨäº« æĪĸ ç² ĺ è´ ´ å¾ĹåĪ° çļĦ åİŁå§ĭ æĸĩæľ¬ ĊĠĠĠĠ Ġ* Ġ@ return Ġ å¤ĦçĲĨ åĲİ åĽ¾çīĩ çļĦ éĵ¾æİ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcache ( res : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvm . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvm . url Ġ= Ġres . getUrl ()?. get Img Url (). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠcheckNotNull ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream : ĠInputStream Ġ= Ġit . open Stream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvm . bitmap Ġ= ĠBitmap Factory . decode Stream ( inputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO : Ġokhttp å¯¼èĩ´ è¯·æ±Ĥ æĹłæ³ķ æŃ£å¸¸ å®ĮæĪĲ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast (" è§£æŀĲ æĪĲåĬŁ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ// è°ĥçĶ¨ ç³»ç»Ł ä¸ĭè½½ åĻ¨ ä¸ĭè½½ æĸĩä»¶ ĊĠĠĠ Ġfun Ġdownload ( url : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġ"${ getString ( R . string . app _ name )} _ release _${ data . tag _ name }. apk " ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠDownload Manager . Request ( Uri . parse ( url )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle (" ä¸ĭè½½ ä¸Ń ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Description (" æŃ£åľ¨ ä¸ĭè½½ $ fileName ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Notification Visibility ( Download Manager . Request . VIS IBILITY _ VISIBLE _ NOTIFY _ COMPLETED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Destination In External Public Dir ( Environment . DIRECTORY _ DOWNLOAD S , ĠfileName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġget System Service ( Context . DOWNLOAD _ SERVICE ) Ġas ĠDownload Manager ĊĠĠĠĠĠĠĠ Ġmanager . enqueue ( request ) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġfun Ġshare Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠIntent . ACTION _ SEND ĊĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" image /* " ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠFile Provider . get Uri For File ( this , Ġ" z dz . bil ic over . file Provider ", Ġsave (). to File ()) ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ STREAM , Ġuri ) ĊĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ GRANT _ READ _ URI _ PERMISSION ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( intent , Ġ" åĪĨäº« åĽ¾çīĩ ")) ĊĠĠĠĠĠĠĠĠĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ@ param [ name ] æĸĩä»¶ åĲį . é»ĺè®¤ä¸º cache File . ä½¿çĶ¨ cache File ä½ľä¸º æĸĩä»¶ åĲį å°Ĩ ä¿Ŀ åŃĺåľ¨ ç¼ĵåŃĺ çĽ®å½ķ , å¦Ĥæŀľ è¦ģ ä½¿çĶ¨ ä¸ĭè½½ æĹ¶çļĦ åİŁ åĲį è¯· è®¾ ä¸º null ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġsave ( name : ĠString ? Ġ= Ġ" cache File "): ĠUri Ġ{ ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ// ä»İ ç½ĳç»ľ èİ·åıĸ çļĦ åİŁ åĽ¾çīĩ åĲį ĊĠĠĠĠĠĠĠ Ġval Ġsource Name Ġ= ĠRegex ("\\ w + \\ .( png | j pe ? g ) "). find ( vm . url . toString ()) ?. value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠRegex (". + mmb iz _ jpg /( \\ w +)/ 0 \\ ? wx _ fmt =( \\ w +) "). replace ( vm . url . toString (), Ġ"$ 1 .$ 2 ") ĊĠĠĠĠĠĠĠ Ġval Ġprefix Ġ= Ġname Ġ?: Ġsource Name . substring ( 0 Ġuntil Ġsource Name . lastIndexOf ('. ')) ĊĠĠĠĠĠĠĠ Ġval Ġsuffix Ġ= Ġsource Name . substring ( source Name . lastIndexOf ('. ')) ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġprefix Ġ+ Ġsuffix ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ// åĪ¤æĸŃ åĽ¾çīĩ æł¼å¼ı ĊĠĠĠĠĠĠĠ Ġval Ġformat : ĠBitmap . Compress Format ĊĠĠĠĠĠĠĠ Ġval ĠmimeType : ĠString ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġwhen Ġ( suffix ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ". jpg ", Ġ". jpeg " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmimeType Ġ= Ġ" */ jpg " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= ĠBitmap . Compress Format . JPEG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ". png " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmimeType Ġ= Ġ" */ png " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= ĠBitmap . Compress Format . PNG ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ". webp " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmimeType Ġ= Ġ" */ webp " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformat Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= Ġ 3 0 ) ĠBitmap . Compress Format . WE BP _ LO SS LESS ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠBitmap . Compress Format . WE BP ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠIllegalStateException (" MainActivity : Ġsave Ġ æľª çŁ¥ çļĦ åĽ¾çīĩ æł¼å¼ı ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġ// TODO : Ġ éĢĤ éħį content :/// æł¼å¼ı uri ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġval Ġfolder Ġ= Ġif Ġ( prefix Ġ== Ġ" cache File ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexternal Cache Dir ?. let Ġ{ ĠDocument File . from File ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvm . rootDir ĊĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠException (" ???? ???? ") ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġval Ġresolve Ġ= Ġfolder . find File ("$ prefix $ suffix ") ?. take If Ġ{ Ġ! it . isDirectory Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġfolder . create File ( mime Type , ĠfileName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠException (" ........ ") ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġvm . launch ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= Ġcontent Resolver . open OutputStream ( resolve . uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( vm . bitmap ?. compress ( format , Ġ 1 0 0 , ĠoutputStream ) Ġ== Ġtrue ) Ġtoast (" ä¿ĿåŃĺ æĪĲåĬŁ ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream ?. close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// TODO : Ġä¿®æĶ¹ çĽ®å½ķ æĹ¶ æĹłæ³ķ åıĳçİ° å·² åĪłéĻ¤ çĽ®å½ķ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġreturn Ġresolve . uri ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¤įåĪ¶ åĪ° åī ª è´ ´ æĿ¿ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcopy () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcm Ġ= Ġget System Service ( CLIP BOARD _ SERVICE ) Ġas ĠClip board Manager ĊĠĠĠĠĠĠĠ Ġ// ĠåĪĽå»º æĻ®éĢļ åŃĹç¬¦ åŀĭ Clip Data ĊĠĠĠĠĠĠĠ Ġval Ġm Clip Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠClip Data . new Plain Text ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" copy Ġimage Ġlink ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvm . url . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Ġå°Ĩ Clip Data åĨħå®¹ æĶ¾ åĪ° ç³»ç»Ł åī ª è´ ´ æĿ¿ éĩĮ ãĢĤ ĊĠĠĠĠĠĠĠ Ġcm . set Primary Clip ( m Clip Data ) ĊĠĠĠĠĠĠĠ Ġtoast (" å¤įåĪ¶ æĪĲåĬŁ ") ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĨ äº« éĵ¾æİ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġshare URL ( url : ĠURL ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . action Ġ= ĠIntent . ACTION _ SEND ĊĠĠĠĠĠĠĠ Ġintent . type Ġ= Ġ" text /* " ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( EXTRA _ TEXT , Ġurl . toString ()) ĊĠĠĠĠĠĠĠ ĠstartActivity ( Intent . create Chooser ( intent , Ġ" åĪĨäº« åĪ° ï¼ļ ")) ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġfun Ġtoast ( text : ĠString ) Ġ= ĠToast . makeText ( this , Ġtext , ĠLEN GTH _ SHORT ). show () ĊĠĠĠĠĊĠĠĠ Ġfun ĠCor outine Scope . toast ( text : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠL ooper . prepare () ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġtext , ĠLEN GTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ ĠL ooper . loop () ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġfun Ġset Root () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( content Resolver . pers isted Uri Permissions . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvm . rootDir Ġ= ĠDocument File . from Tree Uri ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . pers isted Uri Permissions . take If Ġ{ Ġit . isNotEmpty < Uri Permission ?> () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ? . get ( 0 )?. uri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġthrow ĠException ("> >>>>>>>> >>>>>>>> >> " /* ĠTODO () Ġ*/) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġ// æ¸ħ éĻ¤ ç¼ĵåŃĺ ĊĠĠĠĠĠĠĠ Ġexternal Cache Dir ?. let Ġ{ ĠDocument File . from File ( it ) Ġ} ?. find File (" cache File ") ?. delete () ĊĠĠĠ Ġ} ĊĠĠĠĠĊĠĠĠ Ġfun Ġopen Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW ) ĊĠĠĠĠĠĠĠ Ġintent . add Flags ( Intent . FLAG _ GRANT _ READ _ URI _ PERMISSION ) ĊĠĠĠĠĠĠĠ Ġintent . setData And Type ( save ( null ), Ġ" image /* ") ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĠĠĠĠ Ċ }