package Ġcom . b side . five . util Ċ Ċ import Ġandroid . app . Recover able Security Exception Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Log Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġjava . io . File OutputStream Ċ Ċ object ĠImage Util Ġ{ ĊĊĠĠĠ Ġconst Ġval ĠTEMP _ FILE _ NAME Ġ= Ġ" temp _ qr . jpg " ĊĠĠĠ Ġconst Ġval ĠDELETE _ PERMISSION _ REQUEST Ġ= Ġ 0 x 1 0 3 3 ĊĊĠĠĠ Ġfun Ġinsert Image ( context : ĠContext , Ġbitmap : ĠBitmap , Ġfilename : ĠString , ĠfileType : ĠString ): ĠUri Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= ĠContent Values (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Media Store . Images . Media . DISPLAY _ NAME , Ġfilename ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Media Store . Images . Media . MIME _ TYPE , ĠfileType ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput ( Media Store . Images . Media . IS _ PENDING , Ġ 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcollection Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . getContent Uri ( Media Store . VOLUME _ EXTERNAL _ PRIMARY ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . EXTERNAL _ CONTENT _ URI ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġitem Ġ= Ġcontext . content Resolver . insert ( collection , Ġvalues ) !! ĊĊĠĠĠĠĠĠĠ Ġcontext . content Resolver . open FileDescriptor ( item , Ġ" w "). use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileOutputStream ( it !!. file Descriptor ). use Ġ{ ĠoutputStream Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbitmap . compress ( Bitmap . Compress Format . JPEG , Ġ 1 0 0 , ĠoutputStream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠoutputStream . close () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvalues . clear () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalues . put ( Media Store . Images . Media . IS _ PENDING , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . update ( item , Ġvalues , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġitem ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Image ( context : ĠContext , ĠfileName : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdelete List : ĠArrayList < Uri > Ġ= ĠArrayList () ĊĊĠĠĠĠĠĠĠ Ġval Ġcollection Ġ= Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . getContent Uri ( Media Store . VOLUME _ EXTERNAL _ PRIMARY ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . EXTERNAL _ CONTENT _ URI ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġprojection Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media ._ ID ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġselection Ġ= Ġ"${ Media Store . Video . Media . DISPLAY _ NAME } ĠLIKE Ġ? " ĊĊĠĠĠĠĠĠĠ Ġval Ġselection Args Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"% ${ fileName } %" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġcontext . content Resolver . query ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcollection , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprojection , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġselection Args , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ?. use Ġ{ Ġcursor Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Column Ġ= Ġcursor . getColumnIndex OrThrow ( Media Store . Images . Media ._ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcursor . getLong ( id Column ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete List . add ( Uri . with App ended Path ( Media Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġid . toString ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdelete List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Image ( context , Ġit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Image ( context : ĠContext , Ġuri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Uri . EMPTY Ġ== Ġuri ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Image Util ()", Ġ" delete Image ĠUri . EMPTY ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . delete ( uri , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠRe cover able Security Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠAndroid ĠQ ĠìĿ´ ìĥģ ìĹĲìĦľ ĠíĮĮìĿ¼ ĠìĤ Ń ìłľ ìĭľ ìĹĲ ë§Į Ġê ¶ Į íķľ ĠìļĶ ì²Ń ê³¼ Ġíķ¨ ê » ĺ ĠìĤ Ń ìłľ Ġëĭ¤ ìĿ´ ìĸ ¼ ë¡ľ ê·¸ ë¥¼ Ġë Ŀ Ħ ìļ° ëĬĶ Ġìłķ ì ± ħ ìĿ´ ĠìŀĪ ìĸ´ Ġíķ´ëĭ¹ ìŀĳ ìĹħ ìĿĦ ĠìĪĺ íĸī íķ´ìķ¼ íķ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠDELETE _ PERMISSION _ REQUEST Ġê ¶ Į íķľ ìĿĦ Ġë°Ľ ìľ¼ ë©´ Ġon Activity Result () Ġíĺ¸ì¶ľ ëĲĺ ë©° , Ġëĭ¤ ìĭľ ĠìĤ Ń ìłľ ĠìļĶ ì²Ń íķ´ìķ¼ íķ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ**/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Sender Ġ= Ġe . user Action . action Intent . intent Sender ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Sender ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( context Ġas ĠAppCompatActivity ). start Intent Sender For Result ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent Sender , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDELETE _ PERMISSION _ REQUEST , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . content Resolver . delete ( uri , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }