package Ġde . r ki . cor on aw arn app . ui . register Ċ Ċ 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 . fragment . app . view Models Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . google . zx ing . Barcode Format Ċ import Ġcom . jo urney apps . barcode scanner . Barcode Result Ċ import Ġcom . jo urney apps . barcode scanner . Default Decoder Factory Ċ import Ġde . r ki . cor on aw arn app . R Ċ import Ġde . r ki . cor on aw arn app . databinding . Fragment Register Qr Code Scan Binding Ċ import Ġde . r ki . cor on aw arn app . ui . Base Fragment Ċ import Ġde . r ki . cor on aw arn app . ui . view model . Submission ViewModel Ċ import Ġde . r ki . cor on aw arn app . util . Camera Permission Helper Ċ Ċ /** Ċ Ġ* ĠA Ġsimple Ġ[ Base Fragment ] Ġsubclass . Ċ Ġ*/ Ċ class ĠRegister QR Code Scan Fragment Ġ: ĠBase Fragment () Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG : ĠString ? Ġ= ĠRegister QR Code Scan Fragment :: class . simple Name ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ CAMERA _ PERMISSION _ CODE Ġ= Ġ 1 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval ĠviewModel : ĠSubmission ViewModel Ġby Ġview Models () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Register Qr Code Scan Binding ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠFragment Register Qr Code Scan Binding . inflate ( in flater ) ĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdecode Callback ( result : ĠBar code Result ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . validate And Store Test GUID ( result . text ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Decode () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . register Qr Code Scan Preview . decode Single Ġ{ Ġdecode Callback ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġcheck For Camera Permission () ĊĊĠĠĠĠĠĠĠ Ġbinding . register Qr Code Scan Torch . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . register Qr Code Scan Preview . set Torch ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Checked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . register Qr Code Scan Close . button Icon . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdo Navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRegister QR Code Scan Fragment Directions . action Register QR Code Fragment To Submission Dispatcher Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . register Qr Code Scan Preview . decoder Factory Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Decoder Factory ( listOf ( Barcode Format . QR _ CODE )) ĊĠĠĠĠĠĠĠ Ġbinding . register Qr Code Scan View finder View . set Camera Preview ( binding . register Qr Code Scan Preview ) ĊĊĠĠĠĠĠĠĠ ĠviewModel . scan Status . observe ( view Lifecycle Owner , ĠObserver Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Scan Status . SUCCESS Ġ== Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Successful Scan Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Scan Status . INVALID Ġ== Ġit ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Invalid Scan Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġstart Decode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġnavigate To Dispatch Screen () Ġ= ĊĠĠĠĠĠĠĠ Ġdo Navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRegister QR Code Scan Fragment Directions . action Register QR Code Fragment To Submission Dispatcher Fragment () ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġfun Ġshow Successful Scan Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalert Dialog : ĠAlertDialog Ġ= Ġrequire Activity (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( R . string . register _ qr _ code _ scan _ successful _ dialog _ headline ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( R . string . register _ qr _ code _ scan _ successful _ dialog _ body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . register _ qr _ code _ scan _ successful _ dialog _ button _ positive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRegister QR Code Scan Fragment Directions . action Register QR Code Fragment To Device Registration Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . register _ qr _ code _ scan _ successful _ dialog _ button _ negative ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . delete Test GUID () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Dispatch Screen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . create () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġalert Dialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Invalid Scan Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalert Dialog : ĠAlertDialog Ġ= Ġrequire Activity (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( R . string . register _ qr _ code _ scan _ invalid _ dialog _ headline ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( R . string . register _ qr _ code _ scan _ invalid _ dialog _ body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . register _ qr _ code _ scan _ invalid _ dialog _ button _ positive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Decode () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . register _ qr _ code _ scan _ invalid _ dialog _ button _ negative ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Dispatch Screen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . create () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġalert Dialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck For Camera Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! Camera Permission Helper . has Camera Permission ( require Activity ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( should Show Request Permission R ationale ( Manifest . permission . CAMERA )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Camera Permission R ationale Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . CAMERA ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CAMERA _ PERMISSION _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Permission Is Granted () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcamera Permission Is Granted () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . register Qr Code Scan Preview . resume () ĊĠĠĠĠĠĠĠ Ġstart Decode () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ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 ) ĊĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Permission Is Granted () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Camera Permission Denied Dialog () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Camera Permission R ationale Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalert Dialog : ĠAlertDialog Ġ= Ġrequire Activity (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( R . string . register _ qr _ code _ scan _ permission _ ration ale _ dialog _ headline ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( R . string . register _ qr _ code _ scan _ permission _ ration ale _ dialog _ body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . register _ qr _ code _ scan _ permission _ ration ale _ dialog _ button _ positive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . CAMERA ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CAMERA _ PERMISSION _ CODE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . register _ qr _ code _ scan _ permission _ ration ale _ dialog _ button _ negative ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Dispatch Screen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . create () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġalert Dialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Camera Permission Denied Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġalert Dialog : ĠAlertDialog Ġ= Ġrequire Activity (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( R . string . register _ qr _ code _ scan _ permission _ den ied _ dialog _ headline ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( R . string . register _ qr _ code _ scan _ permission _ den ied _ dialog _ body ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . register _ qr _ code _ scan _ permission _ den ied _ dialog _ button _ positive ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnavigate To Dispatch Screen () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . create () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġalert Dialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġbinding . register Qr Code Scan Preview . resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġbinding . register Qr Code Scan Preview . pause () ĊĠĠĠ Ġ} Ċ } Ċ