package Ġcom . example . picture čĊč Ċ import Ġandroid . Manifest č Ċ import Ġandroid . annotation . Suppress Lint č Ċ import Ġandroid . content . Content Values č Ċ import Ġandroid . content . pm . PackageManager č Ċ import Ġandroid . graphics . Bitmap č Ċ import Ġandroid . os . Build č Ċ import Ġandroid . os . Bundle č Ċ import Ġandroid . provider . Media Store č Ċ import Ġandroid . util . Log č Ċ import Ġandroidx . fragment . app . Fragment č Ċ import Ġandroid . view . LayoutInflater č Ċ import Ġandroid . view . View č Ċ import Ġandroid . view . ViewGroup č Ċ import Ġandroid . widget . Toast č Ċ import Ġandroidx . core . app . Activity Compat č Ċ import Ġandroidx . core . content . Context Compat č Ċ import Ġandroidx . core . graphics . drawable . to Bitmap č Ċ import Ġandroidx . core . view . get č Ċ import Ġandroidx . lifecycle . lifecycle Scope č Ċ import Ġandroidx . recyclerview . widget . RecyclerView č Ċ import Ġandroidx . view pager 2 . widget . ViewPager 2 č Ċ import Ġcom . example . picture . adapter . Pager Photo Adapter č Ċ import Ġcom . example . picture . dao . Photo Item č Ċ import Ġkotlinx . android . synt hetic . main . fragment _ pager .* č Ċ import Ġkotlinx . android . synt hetic . main . pager _ item . view .* č Ċ import Ġkotlinx . coroutines . Dispatch ers č Ċ import Ġkotlinx . coroutines . Main Scope č Ċ import Ġkotlinx . coroutines . launch č Ċ import Ġkotlinx . coroutines . with Context č Ċ import Ġorg . xml . sax . helpers . Parser Adapter čĊč Ċ // ĠTODO : ĠRename Ġparameter Ġarguments , Ġchoose Ġnames Ġthat Ġmatch č Ċ // Ġthe Ġfragment Ġinitialization Ġparameters , Ġe . g . ĠARG _ ITEM _ NUMBER č Ċ private Ġconst Ġval ĠARG _ PARAM 1 Ġ= Ġ" param 1 " č Ċ private Ġconst Ġval ĠARG _ PARAM 2 Ġ= Ġ" param 2 " čĊč Ċ /** čĊ Ġ* ĠA Ġsimple Ġ[ Fragment ] Ġsubclass . čĊ Ġ* ĠUse Ġthe Ġ[ Pager Fragment . newInstance ] Ġfactory Ġmethod Ġto čĊ Ġ* Ġcreate Ġan Ġinstance Ġof Ġthis Ġfragment . čĊ Ġ*/ č Ċ class ĠP ager Fragment Ġ: ĠFragment () Ġ{ čĊĠĠĠ Ġ// ĠTODO : ĠRename Ġand Ġchange Ġtypes Ġof Ġparameters čĊĠĠĠ Ġprivate Ġvar Ġparam 1 : ĠString ? Ġ= Ġnull čĊĠĠĠ Ġprivate Ġvar Ġparam 2 : ĠString ? Ġ= Ġnull čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) čĊĠĠĠĠĠĠĠ Ġarguments ?. let Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam 1 Ġ= Ġit . getString ( ARG _ PARAM 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġparam 2 Ġ= Ġit . getString ( ARG _ PARAM 2 ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( čĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, čĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? čĊĠĠĠ Ġ): ĠView ? Ġ{ čĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment čĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ pager , Ġcontainer , Ġfalse ) čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) čĊĠĠĠĠĠĠĠ Ġval Ġphoto List Ġ= Ġarguments ?. get Parcelable ArrayList < Photo Item >(" PH OTO _ LIST ") čĊĠĠĠĠĠĠĠ ĠP ager Photo Adapter (). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Page 2 . adapter Ġ= Ġthis čĊĠĠĠĠĠĠĠĠĠĠĠ Ġsubmit List ( photo List ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġview Page 2 . register On Page Change Callback ( object Ġ: ĠView Pager 2 . On Page Change Callback () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Page Selected ( position : ĠInt ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Page Selected ( position ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġphoto _ tag . text Ġ= ĠgetString ( R . string . photo _ tag , Ġposition Ġ+ Ġ 1 , Ġphoto List !!. size ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ}) čĊčĊĠĠĠĠĠĠĠ Ġview Page 2 . setCurrent Item ( arguments ?. getInt (" PH OTO _ POSITION ") !! , Ġfalse ) čĊčĊĠĠĠĠĠĠĠ Ġsave Button . setOnClickListener () Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ Ġ&& ĠçļĦ é¡ºåºı čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠBuild . VERSION . SDK _ INT ĠĠĠ Ġåľ¨ 2 9 ä¹ĭ ä¸Ĭ ä¸į çĶ¨ æĿĥéĻĲ çĽ´æİ¥ åŃĺåĤ¨ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( ĠContext Compat . check Self Permission ( require Context (), čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( require Activity (), ĠarrayOf ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE ), Ġ 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Photo () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( čĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , čĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, čĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array čĊĠĠĠ Ġ) Ġ{ čĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) čĊĠĠĠĠĠĠĠ Ġwhen ( request Code ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" eee ", Ġ" sss ") čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Photo () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġ" åŃĺåĤ¨ å¤±è´¥ ", ĠToast . LENGTH _ SHORT ). show () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġsave Photo () Ġ{ čĊĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . IO ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠviewHolder Ġ= Ġ( view Page 2 [ 0 ] Ġas ĠRecyclerView ). find ViewHolder For Adapter Position ( view Page 2 . currentItem ) Ġas ĠP ager Photo Adapter . ViewHolder čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠviewHolder . item View . pager _ photo View . drawable . to Bitmap () čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuri Ġ= Ġrequire Context (). content Resolver . insert ( čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Store . Images . Media . EXTERNAL _ CONTENT _ URI , čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContent Values () čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ?: Ġkotlin . run Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( require Context (), Ġ" åŃĺåĤ¨ å¤±è´¥ ", ĠToast . LENGTH _ SHORT ). show () čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with Context čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). content Resolver . open OutputStream ( uri ). use Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Ġbitmap . compress ( Bitmap . Compress Format . JPEG , Ġ 9 5 , Ġit )) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Scope (). launch Ġ{ Ġ ĠToast . makeText ( require Context (), Ġ" åŃĺåĤ¨ æĪĲåĬŁ ", ĠToast . LENGTH _ SHORT ). show () Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMain Scope (). launch Ġ{ ĠĠ ĠToast . makeText ( require Context (), Ġ" åŃĺåĤ¨ å¤±è´¥ ", ĠToast . LENGTH _ SHORT ). show () Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġcompanion Ġobject Ġ{ čĊĠĠĠĠĠĠĠ Ġ/** čĊĠĠĠĠĠĠĠĠ Ġ* ĠUse Ġthis Ġfactory Ġmethod Ġto Ġcreate Ġa Ġnew Ġinstance Ġof čĊĠĠĠĠĠĠĠĠ Ġ* Ġthis Ġfragment Ġusing Ġthe Ġprovided Ġparameters . čĊĠĠĠĠĠĠĠĠ Ġ* čĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġparam 1 ĠParameter Ġ 1 . čĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ param Ġparam 2 ĠParameter Ġ 2 . čĊĠĠĠĠĠĠĠĠ Ġ* Ġ@ return ĠA Ġnew Ġinstance Ġof Ġfragment ĠP ager Fragment . čĊĠĠĠĠĠĠĠĠ Ġ*/ čĊĠĠĠĠĠĠĠ Ġ// ĠTODO : ĠRename Ġand Ġchange Ġtypes Ġand Ġnumber Ġof Ġparameters čĊĠĠĠĠĠĠĠ Ġ@ Jvm Static čĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance ( param 1 : ĠString , Ġparam 2 : ĠString ) Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠ ĠP ager Fragment (). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( ARG _ PARAM 1 , Ġparam 1 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String ( ARG _ PARAM 2 , Ġparam 2 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ }