package Ġcom . example . travel planner Ċ Ċ import Ġandroid . content . Content U ris Ċ import Ġandroid . content . Content Values Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . icu . text . DateFormat Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Environment Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Size Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . activity . result . Activity Result Callback Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġjava . io . File Ċ import Ġjava . lang . Exception Ċ import Ġjava . util . Date Ċ Ċ class ĠGallery Adapter ( val Ġroot View : ĠView , Ġval Ġactivity : ĠAppCompatActivity ) Ġ: ĠView . OnClickListener Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlinear Layout Ġ= Ġroot View . findViewById < LinearLayout >( R . id . gallery _ layout ) ĊĊĠĠĠ Ġprivate Ġvar Ġattached Item : ĠAny ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġattached ID String : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġroot View . findViewById < Button >( R . id . gallery _ button _ add ). setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġroot View . findViewById < Button >( R . id . gallery _ button _ open ). setOnClickListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġattach ( item : ĠAny ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( item Ġis ĠStop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattach ( item Ġas ĠStop ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( item Ġis ĠDestination With Stops ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattach ( item Ġas ĠDestination With Stops ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( item Ġis ĠTrip With Dest And Stop ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattach ( item Ġas ĠTrip With Dest And Stop ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġreset () Ġ{ ĊĠĠĠĠĠĠĠ Ġlinear Layout . removeAll Views () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġattach ( trip With Dest And Stop : ĠTrip With Dest And Stop ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreset () ĊĠĠĠĠĠĠĠ Ġattached Item Ġ= Ġtrip With Dest And Stop ĊĠĠĠĠĠĠĠ Ġattached ID String Ġ= Ġ" t _" Ġ+ Ġtrip With Dest And Stop . trip . trip Id ĊĠĠĠĠĠĠĠ Ġget Images ( attached ID String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġattach ( dest With Stops : ĠDestination With Stops ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreset () ĊĠĠĠĠĠĠĠ Ġattached Item Ġ= Ġdest With Stops ĊĠĠĠĠĠĠĠ Ġattached ID String Ġ= Ġ" d _" Ġ+ Ġdest With Stops . destination . dest Id ĊĠĠĠĠĠĠĠ Ġget Images ( attached ID String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġattach ( stop : ĠStop ) Ġ{ ĊĠĠĠĠĠĠĠ Ġreset () ĊĠĠĠĠĠĠĠ Ġattached Item Ġ= Ġstop ĊĠĠĠĠĠĠĠ Ġattached ID String Ġ= Ġ" s _" Ġ+ Ġstop . stop Id ĊĠĠĠĠĠĠĠ Ġget Images ( attached ID String ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( view . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . gallery _ button _ add Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġnew Image ( attached ID String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠTr avel Planner Interface ). tp Import Image Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠTr avel Planner Interface ). tp Take Image Callback Ġ= ĠTake Image Callback () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠTr avel Planner Interface ). tp Take Image Launcher ?. launch ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . gallery _ button _ open Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġnew Image ( attached ID String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠTr avel Planner Interface ). tp Take Image Callback Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠTr avel Planner Interface ). tp Import Image Callback Ġ= ĠImport Image Callback ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( activity Ġas ĠTr avel Planner Interface ). tp Import Image Launcher ?. launch (" image /* ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠTake Image Callback Ġ: ĠActivity Result Callback < Boolean > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Result ( result : ĠBoolean ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattached Item ?. let Ġ{ Ġattach ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠImport Image Callback ( private Ġval Ġtarget Uri : ĠUri ) Ġ: ĠActivity Result Callback < Uri > Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Activity Result ( result : ĠUri ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠinputStream Ġ= Ġactivity . content Resolver . open InputStream ( result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠoutputStream Ġ= Ġactivity . content Resolver . open OutputStream ( target Uri ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( inputStream Ġ== Ġnull Ġ|| ĠoutputStream Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠinputStream . copy To ( output Stream ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattached Item ?. let Ġ{ Ġattach ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . Q ) ĊĠĠĠ Ġfun Ġnew Image ( id String : ĠString ?): ĠUri ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( id String Ġ== Ġnull ) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! activity . package Manager . has System Feature ( PackageManager . FEATURE _ CAMERA _ ANY )) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġtime Stamp Ġ= ĠDate Format . get DateTime Instance (). format ( Date ()) ĊĠĠĠĠĠĠĠ Ġval Ġdir String Ġ= ĠStringBuffer () ĊĠĠĠĠĠĠĠ Ġdir String . append ( File . separator Ġ+ Ġ" Travel Planner ") ĊĠĠĠĠĠĠĠ Ġdir String . append ( File . separator Ġ+ Ġid String ) ĊĠĠĠĠĠĠĠ Ġdir String . append ( File . separator Ġ+ Ġ" Travel _ Planner _ Images ") ĊĊĠĠĠĠĠĠĠ Ġval Ġcontent Values Ġ= ĠContent Values () ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( Media Store . Images . Media . DISPLAY _ NAME , Ġ"$ time Stamp . jpg ") ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( Media Store . Images . Media . MIME _ TYPE , Ġ" image / jpeg ") ĊĠĠĠĠĠĠĠ Ġcontent Values . put ( Media Store . Images . Media . REL ATIVE _ PATH , ĠEnvironment . DIRECTORY _ PI CTURE S Ġ+ Ġdir String . toString ()) ĊĠĠĠĠĠĠĠ Ġreturn Ġactivity . content Resolver . insert ( Media Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġcontent Values ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Images ( id String : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( id String Ġ== Ġnull ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ< ĠBuild . VERSION _ CODES . Q ) Ġreturn ĊĊĠĠĠĠĠĠĠ Ġval Ġdir String Ġ= ĠStringBuffer () ĊĠĠĠĠĠĠĠ Ġdir String . append ( File . separator Ġ+ Ġ" Travel Planner ") ĊĠĠĠĠĠĠĠ Ġdir String . append ( File . separator Ġ+ Ġid String ) ĊĠĠĠĠĠĠĠ Ġdir String . append ( File . separator Ġ+ Ġ" Travel _ Planner _ Images ") ĊĊĠĠĠĠĠĠĠ Ġval Ġprojection Ġ= ĠarrayOf ( Media Store . Images . Media ._ ID , ĠMedia Store . Images . Image Columns . REL ATIVE _ PATH ) ĊĠĠĠĠĠĠĠ Ġval Ġselection Ġ= ĠMedia Store . Images . Media . REL ATIVE _ PATH Ġ+ Ġ"= ?" ĊĠĠĠĠĠĠĠ Ġval Ġselection Args Ġ= ĠarrayOf ( Environment . DIRECTORY _ PI CTURE S Ġ+ Ġdir String . toString () Ġ+ ĠFile . separator ) ĊĠĠĠĠĠĠĠ Ġval Ġcursor Ġ= Ġactivity . content Resolver . query ( Media Store . Images . Media . EXTERNAL _ CONTENT _ URI , Ġprojection , Ġselection , Ġselection Args , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( cursor Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠcolumnIndex Ġ= Ġcursor . getColumnIndex ( Media Store . Images . Media ._ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( cursor . moveTo Next ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠContent U ris . with App ended Id ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . EXTERNAL _ CONTENT _ URI , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcursor . getLong ( column Index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadd Image ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġadd Image ( uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimage : ĠImageView Ġ= ĠLayoutInflater . from ( activity ). inflate ( R . layout . layout _ image , Ġlinear Layout , Ġfalse ) Ġas ĠImageView ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthumbnail Ġ= Ġactivity . content Resolver . load Thumbnail ( uri , ĠSize ( 1 2 8 , Ġ 1 2 8 ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage . setImage Bitmap ( thumbnail ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval ĠonClick Listener Ġ= ĠView . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , Ġuri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . flags Ġ= ĠIntent . FLAG _ ACTIVITY _ LA UNCH _ ADJ AC ENT Ġ+ ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . startActivity ( intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġimage . setOnClickListener ( on ClickListener ) ĊĠĠĠĠĠĠĠ Ġlinear Layout . addView ( image ) ĊĠĠĠ Ġ} Ċ } Ċ