package Ġconsult an . van ke . com . activity . kt Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . animation . Animator Ċ import Ġandroid . animation . Animator Listener Adapter Ċ import Ġandroid . animation . Object Animator Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . os . Handler Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . provider . Settings Ċ import Ġandroid . view . KeyEvent Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . content . File Provider Ċ import Ġandroidx . core . os . Environment Compat Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . recyclerview . widget . Grid LayoutManager Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . recyclerview . widget . Simple Item Animator Ċ import Ġcom . um eng . analytics . Mob click Agent Ċ import Ġconsult an . van ke . com . R Ċ import Ġconsult an . van ke . com . activity . Base Activity Ċ import Ġconsult an . van ke . com . adapter . Folder Adapter Ċ import Ġconsult an . van ke . com . adapter . Image Adapter Ċ import Ġconsult an . van ke . com . bean . Folder Ċ import Ġconsult an . van ke . com . bean . Image Ċ import Ġconsult an . van ke . com . bean . Request Config Ċ import Ġconsult an . van ke . com . utils .* Ċ import Ġconsult an . van ke . com . utils . Sd card Helper . Images Ċ import Ġconsult an . van ke . com . utils . Sd card Helper . PATH Ċ import Ġkotlinx . android . synt hetic . main . activity _ image _ select .* Ċ import Ġme . yo keyword . fragment ation . Support Activity Ċ import Ġjava . io . File Ċ import Ġjava . io . IOException Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ class ĠImage Selector Activity Ġ: ĠBase Activity () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġm Adapter : ĠImage Adapter ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm LayoutManager : ĠGrid LayoutManager ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Folders : ĠArrayList < Folder >? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Folder : ĠFolder ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġapply Load Image Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġapply Camera Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Camera Uri : ĠUri ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Camera Image Path : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar ĠisOpen Folder Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Show Time Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Init Folder Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġis Single Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġcan Preview Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġm Max Count Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġvar Ġuse Camera Ġ= Ġtrue ĊĠĠĠ Ġprivate Ġvar Ġonly Take Photo Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġval Ġm Hide Handler Ġ= ĠHandler () ĊĠĠĠ Ġprivate Ġval Ġm Hide Ġ= ĠRunnable Ġ{ Ġhide Time () Ġ} ĊĠĠĠ Ġ// çĶ¨äºİ æİ¥æĶ¶ ä»İ å¤ĸ éĿ¢ ä¼ł è¿Ľ æĿ¥çļĦ å·² éĢīæĭ© çļĦ åĽ¾çīĩ åĪĹè¡¨ ãĢĤ å½ĵ çĶ¨æĪ· åİŁ æĿ¥ å·²ç»ı æľī éĢīæĭ© è¿ĩ åĽ¾çīĩ ï¼Į çİ°åľ¨ éĩįæĸ° æīĵå¼Ģ éĢīæĭ© åĻ¨ ï¼Į åħģè®¸ çĶ¨ Ċ // Ġ æĪ· æĬĬ åħĪ åīį éĢī è¿ĩ çļĦ åĽ¾çīĩ ä¼ł è¿Ľ æĿ¥ ï¼Į å¹¶ æĬĬ è¿ĻäºĽ åĽ¾çīĩ é»ĺè®¤ä¸º éĢī ä¸Ń çĬ¶æĢģ ãĢĤ ĊĠĠĠ Ġprivate Ġvar Ġm Selected Images : ĠArrayList < String >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä¿®æĶ¹ çĬ¶æĢģ æłı é¢ľèī² ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġset StatusBar Color () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Version Utils . is Android L ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwindow Ġ= Ġwindow ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ DR AWS _ SYSTEM _ BAR _ BACK GRO UN DS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwindow . status Bar Color Ġ= Ġresources . getColor ( R . color . color _ 3 7 3 c 3 d ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Listener () Ġ{ ĊĠĠĠĠĠĠĠ Ġbtn _ back . setOnClickListener Ġ{ Ġfinish () Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ preview !!. setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimages Ġ= ĠArrayList < Image >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimages . addAll ( m Adapter !!. select Images ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto Preview Activity ( images , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ confirm !!. setOnClickListener Ġ{ Ġconfirm () Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ folder . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Init Folder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( isOpen Folder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Folder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Folder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġmask ing !!. setOnClickListener Ġ{ Ġclose Folder () Ġ} ĊĠĠĠĠĠĠĠ Ġrv _ image !!. add On Scroll Listener ( object Ġ: ĠRecyclerView . On Scroll Listener () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scroll StateChanged ( re cyclerView : ĠRecyclerView , ĠnewState : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Scroll StateChanged ( re cyclerView , ĠnewState ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sc rolled ( re cyclerView : ĠRecyclerView , Ġdx : ĠInt , Ġdy : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Sc rolled ( re cyclerView , Ġdx , Ġdy ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ åĽ¾çīĩ åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit ImageList () Ġ{ Ġ// ĠåĪ¤æĸŃ å±ı å¹ķ æĸ¹åĲĳ ĊĠĠĠĠĠĠĠ Ġval Ġconfiguration Ġ= Ġresources . configuration ĊĠĠĠĠĠĠĠ Ġm LayoutManager Ġ= Ġif Ġ( configuration . orientation Ġ== ĠConfiguration . OR IENTATION _ POR TRA IT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGrid LayoutManager ( this , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGrid LayoutManager ( this , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġrv _ image !!. layout Manager Ġ= Ġm LayoutManager ĊĠĠĠĠĠĠĠ Ġm Adapter Ġ= ĠImage Adapter ( this , Ġm Max Count , Ġis Single , Ġcan Preview ) ĊĠĠĠĠĠĠĠ Ġrv _ image !!. adapter Ġ= Ġm Adapter ĊĠĠĠĠĠĠĠ Ġ( rv _ image !!. item Animator Ġas ĠSimple Item Animator ?) !!. supports Change Animations Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( m Folders Ġ!= Ġnull Ġ&& Ġ! m Folders !!. isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Folder ( m Folders ! ![ 0 ]) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Adapter !!. setOn Image Select Listener Ġ{ Ġimage , Ġis Select , Ġselect Count Ġ-> Ġset Select Image Count ( select Count ) Ġ} ĊĠĠĠĠĠĠĠ Ġm Adapter !!. setOn ItemClickListener ( object Ġ: ĠImage Adapter . On ItemClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠOn Item Click ( image : ĠImage , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġto Preview Activity ( m Adapter !!. data , Ġposition ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠOn Camera Click () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Permission And Camera () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ åĽ¾çīĩ æĸĩä»¶å¤¹ åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Folder List () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Folders Ġ!= Ġnull Ġ&& Ġ! m Folders !!. isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Init Folder Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ folder !!. layout Manager Ġ= ĠLinearLayoutManager ( this @ Image Selector Activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠFolder Adapter ( this @ Image Selector Activity , Ġm Folders ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter . setOn Folder Select Listener Ġ{ Ġfolder Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Folder ( folder ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclose Folder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ folder !!. adapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪļ å¼Ģå§ĭ çļĦæĹ¶åĢĻ æĸĩä»¶å¤¹ åĪĹè¡¨ é»ĺè®¤ æĺ¯ éļĲèĹı çļĦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġhide Folder List () Ġ{ ĊĠĠĠĠĠĠĠ Ġrv _ folder !!. post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ folder !!. translation Y Ġ= Ġrv _ folder !!. height . toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ folder !!. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ folder !!. set BackgroundColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġè®¾ç½® éĢī ä¸ŃçļĦ æĸĩä»¶å¤¹ ï¼Į åĲĮæĹ¶ åĪ·æĸ° åĽ¾çīĩ åĪĹè¡¨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfolder ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġset Folder ( folder : ĠFolder ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( folder Ġ!= Ġnull Ġ&& Ġm Adapter Ġ!= Ġnull Ġ&& Ġfolder Ġ!= Ġm Folder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Folder Ġ= Ġfolder ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ folder _ name !!. text Ġ= Ġfolder . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ image !!. scrollTo Position ( 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter !!. refresh ( folder . images , Ġfolder . is Use Camera ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Select Image Count ( count : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn _ confirm !!. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn _ preview !!. isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ confirm !!. setText ( R . string . selector _ send ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ preview !!. setText ( R . string . selector _ preview ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn _ confirm !!. isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbtn _ preview !!. isEnabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ preview !!. text Ġ= ĠgetString ( R . string . selector _ preview ) Ġ+ Ġ"(" Ġ+ Ġcount Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Single ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ confirm !!. setText ( R . string . selector _ send ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Max Count Ġ> Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ confirm !!. text Ġ= ĠgetString ( R . string . selector _ send ) Ġ+ Ġ"(" Ġ+ Ġcount Ġ+ Ġ"/" Ġ+ Ġm Max Count Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ confirm !!. text Ġ= ĠgetString ( R . string . selector _ send ) Ġ+ Ġ"(" Ġ+ Ġcount Ġ+ Ġ")" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¼¹ åĩº æĸĩä»¶å¤¹ åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Object Animator Binding ") ĊĠĠĠ Ġprivate Ġfun Ġopen Folder () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! isOpen Folder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmask ing !!. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= ĠObject Animator . of Float ( rv _ folder , Ġ" translation Y ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ folder !!. height . toFloat (), Ġ 0 f ). set Duration ( 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . addListener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation Start ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation Start ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ folder !!. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . start () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisOpen Folder Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĶ¶ èµ· æĸĩä»¶å¤¹ åĪĹè¡¨ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Object Animator Binding ") ĊĠĠĠ Ġprivate Ġfun Ġclose Folder () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( isOpen Folder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmask ing !!. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= ĠObject Animator . of Float ( rv _ folder , Ġ" translation Y ", Ġ 0 f , Ġrv _ folder !!. height . toFloat ()). set Duration ( 3 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . addListener ( object Ġ: ĠAn imator Listener Adapter () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( animation : ĠAn imator ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Animation End ( animation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrv _ folder !!. visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanim ator . start () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisOpen Folder Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éļĲèĹı æĹ¶éĹ´ æĿ¡ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Object Animator Binding ") ĊĠĠĠ Ġprivate Ġfun Ġhide Time () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Show Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( tv _ time , Ġ" alpha ", Ġ 1 f , Ġ 0 f ). set Duration ( 3 0 0 ). start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Show Time Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĺ¾ç¤º æĹ¶éĹ´ æĿ¡ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Object Animator Binding ") ĊĠĠĠ Ġprivate Ġfun Ġshow Time () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Show Time ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠObject Animator . of Float ( tv _ time , Ġ" alpha ", Ġ 0 f , Ġ 1 f ). set Duration ( 3 0 0 ). start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Show Time Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĶ¹åıĺ æĹ¶éĹ´ æĿ¡ æĺ¾ç¤º çļĦæĹ¶éĹ´ ï¼Ī æĺ¾ç¤º åĽ¾çīĩ åĪĹè¡¨ ä¸ŃçļĦ ç¬¬ä¸Ģä¸ª åı¯ è§ģ åĽ¾çīĩ çļĦæĹ¶éĹ´ ï¼ī ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġchange Time () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfirst Visible Item Ġ= Ġfirst Visible Item ĊĠĠĠĠĠĠĠ Ġval Ġimage Ġ= Ġm Adapter !!. getFirst Visible Image ( first Visible Item ) ĊĠĠĠĠĠĠĠ Ġif Ġ( image Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠDate Utils . getImage Time ( this , Ġimage . time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ time !!. text Ġ= Ġtime ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Hide Handler . remove Callbacks ( m Hide ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Hide Handler . post Delayed ( m Hide , Ġ 1 5 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġfirst Visible Item : ĠInt ĊĠĠĠĠĠĠĠ Ġprivate Ġget () Ġ= Ġm LayoutManager !!. findFirst Visible Item Position () ĊĊĠĠĠ Ġprivate Ġfun Ġconfirm () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( m Adapter Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// åĽłä¸º åĽ¾çīĩ çļĦ å®ŀä½ĵ ç±» æĺ¯ Image ï¼Į èĢĮ æĪĳä»¬ è¿ĶåĽŀ çļĦæĺ¯ String æķ°ç»Ħ ï¼Į æīĢä»¥ è¦ģ è¿Ľè¡Į è½¬æį¢ ãĢĤ ĊĠĠĠĠĠĠĠ Ġval Ġselect Images Ġ= Ġm Adapter !!. select Images ĊĠĠĠĠĠĠĠ Ġval Ġimages Ġ= ĠArrayList < String ?> () ĊĠĠĠĠĠĠĠ Ġfor Ġ( image Ġin Ġselect Images ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimages . add ( image . path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsave Image And Finish ( images , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Image And Finish ( images : ĠArrayList < String ? >, Ġis Camera Image : ĠBoolean ) Ġ{ Ġ// çĤ¹åĩ» ç¡®å®ļ ï¼Į æĬĬ éĢī ä¸ŃçļĦ åĽ¾çīĩ éĢļè¿ĩ Intent ä¼ł ç»Ļ ä¸Ĭ ä¸Ģä¸ª Activity ãĢĤ ĊĠĠĠĠĠĠĠ Ġset Result ( images , Ġis Camera Image ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠ Ġ// ĠĠĠĠĠĠĠ Ġif Ġ(! Version Utils . is Android Q () Ġ|| Ġimages . isEmpty ()) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ// çĤ¹åĩ» ç¡®å®ļ ï¼Į æĬĬ éĢī ä¸ŃçļĦ åĽ¾çīĩ éĢļè¿ĩ Intent ä¼ł ç»Ļ ä¸Ĭ ä¸Ģä¸ª Activity ãĢĤ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( images , Ġis Camera Image ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġfinish (); Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġ// Ġ éĢĤ éħį android Ġ 1 0 ï¼Į åħĪ æĬĬ åĽ¾çīĩ æĭ · è´Ŀ åĪ° app ç§ģ æľī çĽ®å½ķ Ċ // ĠĠĠĠĠĠĠ Ġnew ĠThread ( new ĠRunnable () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Override Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġvoid Ġrun () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinal ĠArrayList < String > Ġnew Images Ġ= Ġnew ĠArrayList <>(); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Ġcontext Ġ= ĠImage Selector Activity . this ; Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Ġdir Ġ= ĠImage Util . getImage Cache Dir ( context ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( String Ġimage Ġ: Ġimages ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Ġmd 5 Ġ= ĠMD 5 Utils . md 5 ( image ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( md 5 Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap Ġbitmap Ġ= ĠImage Util . get Bitmap From Uri ( context , ĠUri Utils . getImage Content Uri ( context , Ġimage ), Ġnull ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( bitmap Ġ!= Ġnull ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠString Ġnew Image Ġ= ĠImage Util . save Image ( bitmap , Ġdir , Ġmd 5 ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! StringUtils . isEmpty String ( new Image )) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Images . add ( new Image ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread ( new ĠRunnable () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ@ Override Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpublic Ġvoid Ġrun () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( new Images , Ġis Camera Image ); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish (); Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}); Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġ}). start (); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Result ( images : ĠArrayList < String ? >, Ġis Camera Image : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠ Ġintent . putString ArrayList Extra ( Image Selector . SELECT _ RESULT , Ġimages ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Image Selector . IS _ CAMERA _ IMAGE , Ġis Camera Image ) ĊĠĠĠĠĠĠĠ Ġset Result ( Activity . RESULT _ OK , Ġintent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġto Preview Activity ( images : ĠArrayList < Image > ?, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( images Ġ!= Ġnull Ġ&& Ġ! images . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPreview Activity . open Activity ( this , Ġimages , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter !!. select Images , Ġis Single , Ġm Max Count , Ġposition ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġif Ġ( apply Load Image ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Load Image Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Permission And Load Images () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( apply Camera ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġapply Camera Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Permission And Camera () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit ContentView ( bundle : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġintent ĊĠĠĠĠĠĠĠ Ġval Ġconfig : ĠRequest Config Ġ= Ġintent . get Parcelable Extra ( Image Selector . KEY _ CONFIG ) ĊĠĠĠĠĠĠĠ Ġm Max Count Ġ= Ġconfig . max Select Count ĊĠĠĠĠĠĠĠ Ġis Single Ġ= Ġconfig . is Single ĊĠĠĠĠĠĠĠ Ġcan Preview Ġ= Ġconfig . can Preview ĊĠĠĠĠĠĠĠ Ġuse Camera Ġ= Ġconfig . use Camera ĊĠĠĠĠĠĠĠ Ġm Selected Images Ġ= Ġconfig . selected ĊĠĠĠĠĠĠĠ Ġonly Take Photo Ġ= Ġconfig . only Take Photo ĊĠĠĠĠĠĠĠ Ġif Ġ( only Take Photo ) Ġ{ Ġ// Ġ ä»ħ æĭ į çħ§ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Permission And Camera () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ image _ select ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset StatusBar Color () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit Listener () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinit ImageList () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Permission And Load Images () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Folder List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Select Image Count ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Elements () Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġinit Data () Ġ{} ĊĠĠĠ Ġoverride Ġfun Ġinit Event () Ġ{} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¤ĦçĲĨ åĽ¾çīĩ é¢Ħ è§Ī é¡µ è¿ĶåĽŀ çļĦ ç»ĵæŀľ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrequest Code ĊĠĠĠĠ Ġ* Ġ@ param ĠresultCode ĊĠĠĠĠ Ġ* Ġ@ param Ġdata ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠImage Selector . RESULT _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Ġ!= Ġnull Ġ&& Ġdata . getBoolean Extra ( Image Selector . IS _ CONFIRM , Ġfalse )) Ġ{ Ġ// å¦Ĥæŀľ çĶ¨æĪ· åľ¨ é¢Ħ è§Ī é¡µ çĤ¹åĩ» äºĨ ç¡®å®ļ ï¼Į å°± çĽ´æİ¥ æĬĬ çĶ¨æĪ· éĢī ä¸ŃçļĦ åĽ¾çīĩ è¿ĶåĽŀ ç»Ļ çĶ¨æĪ· ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconfirm () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// åĲ¦åĪĻ ï¼Į å°± åĪ·æĸ° å½ĵåīį é¡µéĿ¢ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter !!. notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Select Image Count ( m Adapter !!. select Images . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( request Code Ġ== ĠCAM ERA _ REQUEST _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġimages Ġ= ĠArrayList < String ?> () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Version Utils . is Android Q ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Broadcast ( Intent ( Intent . ACTION _ MEDIA _ SCAN NER _ SCAN _ FILE , Ġm Camera Uri )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimages . add ( Uri Utils . getPath For Uri ( this , Ġm Camera Uri )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Broadcast ( Intent ( Intent . ACTION _ MEDIA _ SCAN NER _ SCAN _ FILE , ĠUri . from File ( File ( m Camera Image Path )))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimages . add ( m Camera Image Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Image And Finish ( images , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( only Take Photo ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ¨ ª ç« ĸ å±ı åĪĩæį¢ å¤ĦçĲĨ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġnew Config ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Configuration Changed ( new Config : ĠConfiguration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Configuration Changed ( new Config ) ĊĠĠĠĠĠĠĠ Ġif Ġ( m LayoutManager Ġ!= Ġnull Ġ&& Ġm Adapter Ġ!= Ġnull ) Ġ{ Ġ// åĪĩæį¢ ä¸º ç« ĸ å±ı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( new Config . orientation Ġ== ĠConfiguration . OR IENTATION _ POR TRA IT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm LayoutManager !!. span Count Ġ= Ġ 3 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( new Config . orientation Ġ== ĠConfiguration . OR IENTATION _ LAND SC APE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm LayoutManager !!. span Count Ġ= Ġ 5 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter !!. notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ£Ģ æŁ¥ æĿĥéĻĲ å¹¶ åĬłè½½ SD åį¡ éĩĮ çļĦ åĽ¾çīĩ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Permission And Load Images () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Environment . get External Storage State () Ġ!= ĠEnvironment . MEDIA _ MOUNT ED ) Ġ{ Ġ// ĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" æ²¡æľī åĽ¾çīĩ ", ĠToast . LENGTH _ LONG ). show (); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġhas Write External Permission Ġ= ĠContext Compat . check Self Permission ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( has Write External Permission Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ Ġ// æľī æĿĥéĻĲ ï¼Į åĬłè½½ åĽ¾çīĩ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġload Image For SD Card () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// æ²¡æľī æĿĥéĻĲ ï¼Į çĶ³è¯· æĿĥéĻĲ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this @ Image Selector Activity , ĠarrayOf ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE ), ĠPER MISSION _ WRITE _ EXTERNAL _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġæ£Ģ æŁ¥ æĿĥéĻĲ å¹¶ æĭ į çħ§ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Permission And Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhas Camera Permission Ġ= ĠContext Compat . check Self Permission ( this , ĠManifest . permission . CAMERA ) ĊĠĠĠĠĠĠĠ Ġval Ġhas Write External Permission Ġ= ĠContext Compat . check Self Permission ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( has Camera Permission Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġhas Write External Permission Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ Ġ// æľī è°ĥ èµ· çĽ¸ æľº æĭ į çħ§ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// æ²¡æľī æĿĥéĻĲ ï¼Į çĶ³è¯· æĿĥéĻĲ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this @ Image Selector Activity , ĠarrayOf ( Manifest . permission . CAMERA , ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ), ĠPER MISSION _ CAMERA _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¤ĦçĲĨ æĿĥéĻĲ çĶ³è¯· çļĦ åĽŀè°ĥ ãĢĤ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrequest Code ĊĠĠĠĠ Ġ* Ġ@ param Ġpermissions ĊĠĠĠĠ Ġ* Ġ@ param Ġgrant Results ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠPER MISSION _ WRITE _ EXTERNAL _ REQUEST _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ> Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ Ġ// åħģè®¸ æĿĥéĻĲ ï¼Į åĬłè½½ åĽ¾çīĩ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Image For SD Card () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// æĭ Ĵ ç»Ŀ æĿĥéĻĲ ï¼Į å¼¹ åĩº æıĲç¤º æ¡Ĩ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Exception Dialog ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( request Code Ġ== ĠPER MISSION _ CAMERA _ REQUEST _ CODE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ> Ġ 1 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED Ġ&& Ġgrant Results [ 1 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ Ġ// åħģè®¸ æĿĥéĻĲ ï¼Į æľī è°ĥ èµ· çĽ¸ æľº æĭ į çħ§ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ġ// æĭ Ĵ ç»Ŀ æĿĥéĻĲ ï¼Į å¼¹ åĩº æıĲç¤º æ¡Ĩ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Exception Dialog ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åıĳçĶŁ æ²¡æľī æĿĥéĻĲ çŃī å¼Ĥå¸¸ æĹ¶ ï¼Į æĺ¾ç¤º ä¸Ģä¸ª æıĲç¤º dialog . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Exception Dialog ( apply Load : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . selector _ hint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . selector _ permissions _ hint ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . selector _ cancel ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. set Positive Button ( R . string . selector _ confirm ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart AppSettings () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( apply Load ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Load Image Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapply Camera Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġä»İ SD Card åĬłè½½ åĽ¾çīĩ ãĢĤ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġload Image For SD Card () Ġ{ ĊĠĠĠĠĠĠĠ ĠImage Model . load Image For SD Card ( this ) Ġ{ Ġfolders Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Folders Ġ= Ġfolders ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Folders Ġ!= Ġnull Ġ&& Ġ! m Folders !!. isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Folder List () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Folders ! ![ 0 ]. is Use Camera Ġ= Ġuse Camera ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Folder ( m Folders ! ![ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Selected Images Ġ!= Ġnull Ġ&& Ġm Adapter Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Adapter !!. setSelected Images ( m Selected Images ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Selected Images Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Select Image Count ( m Adapter !!. select Images . size ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è°ĥ èµ· çĽ¸ æľº æĭ į çħ§ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġopen Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapture Intent Ġ= ĠIntent ( Media Store . ACTION _ IMAGE _ CAPTURE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( capture Intent . resolve Activity ( package Manager ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġphoto File : ĠFile ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġphoto Uri : ĠUri ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Version Utils . is Android Q ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Uri Ġ= Ġcreate Image Path Uri () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto File Ġ= Ġcreate Image File () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( photo File Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera Image Path Ġ= Ġphoto File . absolute Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto Uri Ġ= Ġif Ġ( Version Utils . is Android N ()) Ġ{ Ġ// éĢļè¿ĩ File Provider åĪĽå»ºä¸Ģä¸ª content ç±»åŀĭçļĦ Uri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Provider . get Uri For File ( this , Ġ"$ packageName . image Selector Provider ", Ġphoto File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . from File ( photo File ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Camera Uri Ġ= Ġphoto Uri ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( photo Uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Intent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġphoto Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Intent . add Flags ( Intent . FLAG _ GRANT _ WRITE _ URI _ PERMISSION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( capture Intent , ĠCAM ERA _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĽå»º ä¸ĢæĿ¡ åĽ¾çīĩ åľ°åĿĢ uri , çĶ¨äºİ ä¿ĿåŃĺ æĭ į çħ§ åĲİçļĦ çħ§ çīĩ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġ åĽ¾çīĩ çļĦ uri ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcreate Image Path Uri (): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠEnvironment . get External Storage State () ĊĠĠĠĠĠĠĠ Ġval Ġtime Formatter Ġ= ĠSimpleDateFormat (" yyyy MM dd _ HH mm ss ", ĠLocale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġimage Name Ġ= Ġtime Formatter . format ( Date ( time )) ĊĠĠĠĠĠĠĠ Ġ// ĠContent Values æĺ¯ æĪĳä»¬ å¸ĮæľĽ è¿Ļ æĿ¡ è®°å½ķ è¢« åĪĽå»º æĹ¶ åĮħåĲ« çļĦæķ°æį® ä¿¡æģ¯ ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠContent Values ( 2 ) ĊĠĠĠĠĠĠĠ Ġvalues . put ( Media Store . Images . Media . DISPLAY _ NAME , Ġimage Name ) ĊĠĠĠĠĠĠĠ Ġvalues . put ( Media Store . Images . Media . MIME _ TYPE , Ġ" image / jpeg ") ĊĠĠĠĠĠĠĠ Ġ// ĠåĪ¤æĸŃ æĺ¯åĲ¦ æľī SD åį¡ , ä¼ĺåħĪ ä½¿çĶ¨ SD åį¡ åŃĺåĤ¨ , å½ĵ æ²¡æľī SD åį¡ æĹ¶ ä½¿çĶ¨ æīĭæľº åŃĺåĤ¨ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( status Ġ== ĠEnvironment . MEDIA _ MOUNT ED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . insert ( Media Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġvalues ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontent Resolver . insert ( Media Store . Images . Media . INTERNAL _ CONTENT _ URI , Ġvalues ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( IOException :: class ) ĊĠĠĠ Ġprivate Ġfun Ġcreate Image File (): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Stamp Ġ= ĠSimpleDateFormat (" yyyy MM dd _ HH mm ss ", ĠLocale . getDefault ()). format ( Date ()) ĊĠĠĠĠĠĠĠ Ġval Ġimage FileName Ġ= ĠString . format (" JPEG _% s . jpg ", Ġtime Stamp ) ĊĠĠĠĠĠĠĠ Ġval Ġstorage Dir Ġ= ĠFile ( Environment . get External Storage Directory () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. toString () Ġ+ ĠFile . separator Ġ+ ĠPATH Ġ+ ĠFile . separator Ġ+ ĠImages ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! storage Dir . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstorage Dir . mkdir () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtemp File Ġ= ĠFile ( storage Dir , Ġimage FileName ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Environment . MEDIA _ MOUNT ED Ġ!= ĠEnvironment Compat . get Storage State ( temp File )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġtemp File ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĲ¯åĬ¨ åºĶçĶ¨ çļĦ è®¾ç½® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġstart AppSettings () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSettings . ACTION _ APPLICATION _ DETAILS _ SETTINGS ) ĊĠĠĠĠĠĠĠ Ġintent . data Ġ= ĠUri . parse (" package :$ packageName ") ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon KeyDown ( keyCode : ĠInt , Ġevent : ĠKeyEvent ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( keyCode Ġ== ĠKeyEvent . KEYCODE _ BACK Ġ&& Ġevent . action Ġ== ĠKeyEvent . ACTION _ DOWN Ġ&& ĠisOpen Folder ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclose Folder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on KeyDown ( keyCode , Ġevent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ ĠMob click Agent . on Resume ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ ĠMob click Agent . on Pause ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPER MISSION _ WRITE _ EXTERNAL _ REQUEST _ CODE Ġ= Ġ 0 x 0 0 0 0 0 0 1 1 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠPER MISSION _ CAMERA _ REQUEST _ CODE Ġ= Ġ 0 x 0 0 0 0 0 0 1 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCAM ERA _ REQUEST _ CODE Ġ= Ġ 0 x 0 0 0 0 0 0 1 0 ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åĲ¯åĬ¨ åĽ¾çīĩ éĢīæĭ© åĻ¨ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġactivity ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġrequest Code ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġconfig ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġopen Activity ( activity : ĠActivity , Ġrequest Code : ĠInt , Ġconfig : ĠRequest Config ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( activity , ĠImage Selector Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Image Selector . KEY _ CONFIG , Ġconfig ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity For Result ( intent , Ġrequest Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åĲ¯åĬ¨ åĽ¾çīĩ éĢīæĭ© åĻ¨ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġfragment ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġrequest Code ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġconfig ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġfun Ġopen Activity ( fragment : ĠFragment , Ġrequest Code : ĠInt , Ġconfig : ĠRequest Config ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( fragment . activity , ĠImage Selector Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Image Selector . KEY _ CONFIG , Ġconfig ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . startActivity For Result ( intent , Ġrequest Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ åĲ¯åĬ¨ åĽ¾çīĩ éĢīæĭ© åĻ¨ ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġfragment ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġrequest Code ĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġconfig ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġopen Activity ( fragment : ĠSupport Activity , Ġrequest Code : ĠInt , Ġconfig : ĠRequest Config ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( fragment , ĠImage Selector Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Image Selector . KEY _ CONFIG , Ġconfig ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment . startActivity For Result ( intent , Ġrequest Code ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }