package Ġcom . example . personal blog . ui . Star Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Matrix Ċ import Ġandroid . media . Ex if Interface Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . core . content . File Provider Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . example . personal blog . R Ċ import Ġjava . io . File Ċ Ċ class ĠStar _ Fr agement Ġ: Fragment (){ ĊĠĠĠ Ġval ĠviewModel Ġby Ġlazy Ġ{ ĠViewModel Provider ( this )[ Star ViewModel :: class . java ] Ġ} ĊĠĠĠ Ġlateinit Ġvar Ġtake Photo Btn : Button ĊĠĠĠ Ġlateinit Ġvar Ġfrom Al um Btn : Button ĊĠĠĠ Ġlateinit Ġvar ĠimageView : ĠImageView ĊĠĠĠ Ġlateinit Ġvar Ġimage Uri : Uri ĊĠĠĠ Ġlateinit Ġvar Ġoutput Image : ĠFile ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview = in flater . inflate ( R . layout . fr agem nt _ star , container , false ) ĊĠĠĠĠĠĠĠ Ġtake Photo Btn = view . findViewById ( R . id . take Photo Btn ) ĊĠĠĠĠĠĠĠ ĠimageView = view . findViewById ( R . id . photo _ image ) ĊĠĠĠĠĠĠĠ Ġfrom Al um Btn = view . findViewById ( R . id . from Album Btn ) ĊĠĠĠĠĠĠĠ Ġreturn Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġtake Photo Btn . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Image = ĠFile ( activity ?. external Cache Dir ," output _ image . jpg ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( output Image . exists ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Image . delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Image . createNew File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimage Uri = if ( Build . VERSION . SDK _ INT >= Build . VERSION _ CODES . N ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile Provider . get Uri For File ( activity !! ," com . example . personal blog . file provider ", output Image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . from File ( output Image ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// åĲ¯åĬ¨ çĽ¸ æľº ç¨ĭåºı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent = ĠIntent (" android . media . action . IMAGE _ CAPTURE ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra ( Media Store . EXTRA _ OUTPUT , image Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfrom Al um Btn . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æīĵå¼Ģ æĸĩä»¶ éĢīæĭ© åĻ¨ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent = Intent ( Intent . ACTION _ OPEN _ DOCUMENT ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . add Category ( Intent . CATEGORY _ OP ENABLE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// æĮĩå®ļ åıª æĺ¾ç¤º åĽ¾çīĩ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . type =" image /* " ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , 2 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġwhen ( request Code ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code == ĠActivity . RESULT _ OK ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å°Ĩ æĭ į æĳ Ħ çļĦ çħ§ çīĩ æĺ¾ç¤º åĩºæĿ¥ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap = Bitmap Factory . decode Stream ( activity !!. content Resolver . open InputStream ( image Uri )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setImage Bitmap ( rotate If Required ( bitmap )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠ 2 ->{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code == Activity . RESULT _ OK && data != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . data ?. let Ġ{ Ġuri Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// å°Ĩ éĢīæĭ© çļĦ åĽ¾çīĩ æĺ¾ç¤º ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap = get Bitmap From Uri ( uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠimageView . setImage Bitmap ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġget Bitmap From Uri ( uri : Uri )= activity !!. content Resolver . open FileDescriptor ( uri ," r "). use Ġ{ ĊĠĠĠĠĠĠĠ ĠBitmap Factory . decode FileDescriptor ( it ?. file Descriptor ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġrotate If Required ( bitmap : ĠBitmap ): Bitmap { ĊĠĠĠĠĠĠĠ Ġval Ġex if = Ex if Interface ( output Image . path ) ĊĠĠĠĠĠĠĠ Ġval Ġorientation = ex if . getAttribute Int ( Ex if Interface . TAG _ OR IENTATION , Ex if Interface . OR IENTATION _ NORMAL ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen ( orientation ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 9 0 -> rotate Bitmap ( bitmap , 9 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 1 8 0 -> rotate Bitmap ( bitmap , 1 8 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEx if Interface . OR IENTATION _ ROT ATE _ 2 7 0 -> rotate Bitmap ( bitmap , 2 7 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> bitmap ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġfun Ġrotate Bitmap ( bitmap : ĠBitmap , degree : Int ): Bitmap { ĊĠĠĠĠĠĠĠ Ġval Ġmatrix = Matrix () ĊĠĠĠĠĠĠĠ Ġmatrix . post Rotate ( degree . toFloat ()) ĊĠĠĠĠĠĠĠ Ġval Ġrotated Bitmap = Bitmap . create Bitmap ( bitmap , 0 , 0 , bitmap . width , bitmap . height , matrix , true ) ĊĠĠĠĠĠĠĠ Ġbitmap . recycle () ĊĠĠĠĠĠĠĠ Ġreturn Ġrotated Bitmap ĊĠĠĠ Ġ} Ċ }