package Ġcom . lo dz . android . pand ora . picker . file . builder Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Environment Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Int Range Ċ import Ġandroidx . lifecycle . Default Lifecycle Observer Ċ import Ġcom . lo dz . android . core kt . ank o . ded up lication Ċ import Ġcom . lo dz . android . core kt . ank o . toast Short Ċ import Ġcom . lo dz . android . core kt . utils . Toast Utils Ċ import Ġcom . lo dz . android . pand ora . R Ċ import Ġcom . lo dz . android . pand ora . picker . contract . On Img Loader Ċ import Ġcom . lo dz . android . pand ora . picker . contract . picker . On File Picker Listener Ċ import Ġcom . lo dz . android . pand ora . picker . file . Picker Bean Ċ import Ġcom . lo dz . android . pand ora . picker . file . Picker Manager Ċ import Ġcom . lo dz . android . pand ora . picker . file . Picker UI Config Ċ import Ġcom . lo dz . android . pand ora . picker . file . pick . any . Any Picker Activity Ċ import Ġcom . lo dz . android . pand ora . picker . preview . Abs ImageView Ċ Ċ /** Ċ Ġ* Ġæĸĩä»¶ éĢīæĭ© æŀĦå»º ç±» Ċ Ġ* ĠCreated Ġby Ġz hou L Ġon Ġ 2 0 1 8 / 1 2 / 1 9 . Ċ Ġ*/ Ċ open Ġclass ĠP icker Builder < V Ġ: ĠView , ĠT Ġ: ĠAny > Ġconstructor ( private Ġval Ġpicker Bean : ĠP icker Bean < V , ĠT >) Ġ{ ĊĊĠĠĠ Ġ/** Ġè®¾ç½® åĽ¾çīĩ åĬłè½½ åĻ¨ [ img Loader ] Ġ*/ ĊĠĠĠ Ġfun Ġset Img Loader ( img Loader : ĠOn Img Loader < T >): ĠP icker Builder < V , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġpicker Bean . img Loader Ġ= Ġimg Loader ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġè®¾ç½® æĸĩä»¶ éĢī ä¸Ń åĽŀè°ĥ [ listener ] Ġ*/ ĊĠĠĠ Ġfun Ġset On File Picker Listener ( listener : ĠOn File Picker Listener < T >): ĠP icker Builder < V , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġpicker Bean . file Picker Listener Ġ= Ġlistener ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġè®¾ç½® çĶŁåĳ½ åĳ¨æľŁ è§Ĥ å¯Ł èĢħ [ observer ] Ġ*/ ĊĠĠĠ Ġfun Ġset On Lifecycle Observer ( observer : ĠDefault Lifecycle Observer ): ĠP icker Builder < V , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġpicker Bean . lifecycle Observer Ġ= Ġobserver ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġè®¾ç½® åĽ¾çīĩ åı¯ éĢī æľĢå¤§ æķ°éĩı [ max Count ] Ġ*/ ĊĠĠĠ Ġfun Ġset Max Count (@ Int Range ( from Ġ= Ġ 1 ) Ġmax Count : ĠInt ): ĠP icker Builder < V , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( max Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker Bean . max Count Ġ= Ġmax Count ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġè®¾ç½® æĺ¯åĲ¦ éľĢè¦ģ çĽ¸ æľº åĬŁèĥ½ [ need Camera ] ï¼Į åħ¬ åħ± çĽ®å½ķ åĲįç§° [ directory Name ] ï¼Į ä¸į è®¾ç½® é»ĺè®¤ åĢ¼ä¸º Environment . DIRECTORY _ PI CTURE S Ġ*/ ĊĠĠĠ Ġ@ Jvm Over loads ĊĠĠĠ Ġfun Ġset Need Camera ( need Camera : ĠBoolean , Ġdirectory Name : ĠString Ġ= Ġ"") : ĠP icker Builder < V , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġpicker Bean . is Need Camera Ġ= Ġneed Camera ĊĠĠĠĠĠĠĠ Ġif Ġ( directory Name . isNotEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker Bean . public DirectoryName Ġ= Ġdirectory Name ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġè®¾ç½® æĺ¯åĲ¦ éľĢè¦ģ é¢Ħ è§Ī åĬŁèĥ½ [ need Preview ] Ġ*/ ĊĠĠĠ Ġfun Ġset Need Preview ( need Preview : ĠBoolean ): ĠP icker Builder < V , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġpicker Bean . is Need Preview Ġ= Ġneed Preview ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġè®¾ç½® éĢīæĭ© åĻ¨ çļĦ çķĮéĿ¢ éħįç½® [ config ] Ġ*/ ĊĠĠĠ Ġfun Ġset Picker UI Config ( config : ĠP icker UI Config ): ĠP icker Builder < V , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġpicker Bean . picker UI Config Ġ= Ġconfig ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġè®¾ç½® 7 . 0 çļĦ File Provider åĲįåŃĹ [ authority ] Ġ*/ ĊĠĠĠ Ġfun Ġset Authority ( authority : ĠString ): ĠP icker Builder < V , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġpicker Bean . authority Ġ= Ġauthority ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġè®¾ç½® åĽ¾çīĩ æİ§ä»¶ [ view ] Ġ*/ ĊĠĠĠ Ġfun Ġset ImageView ( view : ĠAbs ImageView < V , ĠT >): ĠP icker Builder < V , ĠT > Ġ{ ĊĠĠĠĠĠĠĠ Ġpicker Bean . img View Ġ= Ġview ĊĠĠĠĠĠĠĠ Ġreturn Ġthis ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ æīĵå¼Ģ éĢīæĭ© åĻ¨ ï¼Į ä¸Ĭä¸ĭ æĸĩ [ context ] ï¼Į Intent åĲ¯åĬ¨ æłĩè®° [ flags ] Ġ*/ ĊĠĠĠ Ġopen Ġfun Ġopen ( context : ĠContext , Ġflags : ĠList < Int >? Ġ= Ġnull ): ĠP icker Manager Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= ĠP icker Manager () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( picker Bean . img Loader Ġ== Ġnull ) Ġ{// Ġ æł¡éªĮ åĽ¾çīĩ åĬłè½½ åĻ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . toast Short ( R . string . pand ora _ picker _ loader _ unset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmanager ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( picker Bean . img View Ġ== Ġnull ) Ġ{// Ġ æł¡éªĮ åĽ¾çīĩ é¢Ħ è§Ī æİ§ä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast Utils . show Short ( context , ĠR . string . pand ora _ preview _ img _ unset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmanager ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( picker Bean . file Picker Listener Ġ== Ġnull ) Ġ{// Ġ æł¡éªĮ æĸĩä»¶ éĢī ä¸Ń åĽŀè°ĥ çĽĳåĲ¬ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . toast Short ( R . string . pand ora _ picker _ selected _ listener _ unset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmanager ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġpicker Bean . pick Type Ġ// Ġ æĮ ĳ éĢī ç±»åŀĭ ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠP icker Manager . P ICK _ PHONE _ SUFFIX Ġ&& Ġpicker Bean . suffix Array . isEmpty ()) Ġ{// æł¡éªĮ åĲİ ç¼Ģ æĺ¯åĲ¦ è®¾ç½® ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . toast Short ( R . string . pand ora _ picker _ suffix _ unset ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmanager ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġlist Ġ= Ġpicker Bean . source List ĊĠĠĠĠĠĠĠ Ġif Ġ( type Ġ== ĠP icker Manager . P ICK _ ANY Ġ|| Ġtype Ġ== ĠP icker Manager . P ICK _ FILE Ġ|| Ġtype Ġ== ĠP icker Manager . P ICK _ URI ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġtype Ġ== ĠP icker Manager . P ICK _ RES _ ID Ġ|| Ġtype Ġ== ĠP icker Manager . P ICK _ IMAGE _ URL ) Ġ{// æĮ ĳ éĢī æĮĩå®ļ æĸĩä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( list . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . toast Short ( R . string . pand ora _ picker _ source _ list _ empty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmanager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker Bean . source List Ġ= Ġlist . ded up lication (). toList () // Ġå¯¹ æĮĩå®ļ çļĦæĸĩä»¶ åĪĹè¡¨ åİ» éĩį ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker Bean . is Need Camera Ġ= Ġfalse // Ġä¸į åħģè®¸ ä½¿çĶ¨ æĭ į çħ§ æ¨¡å¼ı ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( picker Bean . max Count Ġ< Ġ 1 ) Ġ{// Ġ ä¿®æŃ£ æľĢå¤§ éĢīæĭ© æķ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpicker Bean . max Count Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( picker Bean . is Need Camera Ġ&& Ġpicker Bean . public DirectoryName . isEmpty ()) Ġ{// Ġ å¼ĢåĲ¯ æĭ į çħ§ åĬŁèĥ½ è¦ģ æł¡éªĮ åħ¬ åħ± çĽ®å½ķ è·¯å¾Ħ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpath Ġ= ĠEnvironment . get External Storage Public Directory ( picker Bean . public DirectoryName )?. absolute Path Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( path . isEmpty ()) Ġ{// Ġ æł¡éªĮ åħ¬ åħ± çĽ®å½ķ è·¯å¾Ħ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . toast Short ( R . string . pand ora _ picker _ public _ directory _ empty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmanager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// å¼ĢåĲ¯ æĭ į çħ§ åĬŁèĥ½ Ġ&& Ġå½ĵåīį ç³»ç»Ł æĺ¯ 7 . 0 ä»¥ä¸Ĭ ä¸Ķ æ²¡æľī éħįç½® File Provider ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . N Ġ&& Ġpicker Bean . is Need Camera Ġ&& Ġpicker Bean . authority . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . toast Short ( R . string . pand ora _ picker _ authority _ empty ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmanager ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠstartActivity ( context , Ġflags ) ĊĠĠĠĠĠĠĠ Ġreturn Ġmanager ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ è·³è½¬ æĮĩå®ļçļĦ Activity Ġ*/ ĊĠĠĠ Ġprotected Ġopen Ġfun ĠstartActivity ( context : ĠContext , Ġflags : ĠList < Int >? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAny Picker Activity . start ( context , Ġpicker Bean , Ġflags ) ĊĠĠĠ Ġ} Ċ }