package Ġcom . af ed ax o . presentation . ui . photo Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . af ed ax o . R Ċ import Ġcom . af ed ax o . databinding . Fragment Photo T aking Binding Ċ import Ġcom . af ed ax o . presentation . ui . base . Base Fragment Ċ import Ġcom . da im aj ia . android animations . library . Tech niques Ċ import Ġcom . da im aj ia . android animations . library . Yo Yo Ċ import Ġio . foto ap par at . F oto ap par at Ċ import Ġio . foto ap par at . parameter . Scale Type Ċ import Ġio . foto ap par at . selector . back Ċ import Ġio . foto ap par at . view . Camera View Ċ import Ġkotlinx . android . synt hetic . main . fragment _ photo _ t aking . view .* Ċ import Ġorg . k oin . android . view model . ext . android . viewModel Ċ Ċ open Ġclass ĠPhoto T aking Fragment Ġ: ĠBase Fragment () Ġ{ ĊĠĠĠ Ġvar ĠsessionId : ĠInt Ġ= Ġ 0 ĊĠĠĠ Ġlateinit Ġvar Ġbinding : ĠFragment Photo T aking Binding ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfoto ap par at : ĠF oto ap par at ĊĊĠĠĠ Ġval ĠviewModel Ġ: ĠPhoto T aking ViewModel Ġby ĠviewModel () ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĠR . layout . fragment _ photo _ t aking , Ġcontainer , Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbinding . viewModel Ġ= ĠviewModel ĊĊĠĠĠĠĠĠĠ Ġbinding . root . ac _ pt _ snap _ btn . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġphoto Result Ġ= Ġfoto ap par at . take Picture () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠYo Yo . with ( Tech niques . Fade Out Down ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. on End Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . findViewById < Camera View >( R . id . ac _ pt _ camera _ view )?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . findViewById < View >( R . id . ac _ pt _ snap _ btn )?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . on Photo Taken ( photo Result ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. duration ( 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. play On ( binding . root . findViewById < Camera View >( R . id . ac _ pt _ camera _ view )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠviewModel . photo Processed . observe ( this , ĠObserver < String > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Select Region ( it ) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġfoto ap par at Ġ= ĠF oto ap par at ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġ= Ġactivity !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlens Position Ġ= Ġback (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġscale Type Ġ= ĠScale Type . Center Crop , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Ġ= Ġbinding . root . ac _ pt _ camera _ view ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠsessionId Ġ= ĠPhoto T aking Fragment Args . from Bundle ( arguments !! ). sessionId ĊĠĠĠĠĠĠĠ ĠviewModel . init ( sessionId ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To Select Region ( full Filename : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġaction Ġ= ĠPhoto T aking Fragment Directions . action Photo T aking Fragment To Select Region Fragment ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsessionId , Ġfull Filename ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( action ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonStart () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onStart () ĊĠĠĠĠĠĠĠ Ġsetup Permissions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Stop () Ġ{ ĊĠĠĠĠĠĠĠ Ġfoto ap par at . stop () ĊĠĠĠĠĠĠĠ Ġsuper . on Stop () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Permissions () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpermission Ġ= ĠContext Compat . check Self Permission ( activity !! , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( permission Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Show Request Permission R ationale ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( activity !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage (" Permission Ġto Ġaccess Ġthe Ġcamera Ġis Ġrequired Ġfor Ġthis Ġapp Ġto Ġrecord Ġaudio .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" Permission Ġrequired ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Positive Button (" OK " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġdialog , Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Request () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġbuilder . create () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmake Request () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfoto ap par at . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . ac _ pt _ snap _ btn . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠCAM ERA _ REQUEST _ CODE Ġ= Ġ 1 0 1 ĊĊĠĠĠ Ġprivate Ġfun Ġmake Request () Ġ{ ĊĠĠĠĠĠĠĠ Ġrequest Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . CAMERA ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCAM ERA _ REQUEST _ CODE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( grant Results . size Ġ> Ġ 0 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfoto ap par at . start () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . root . ac _ pt _ snap _ btn . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠĠ Ċ }