package Ġcom . b side . five . ui . result Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Canvas Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġandroidx . core . graphics . drawable . to Drawable Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġcom . b side . five . R Ċ import Ġcom . b side . five . base . Base Activity Ċ import Ġcom . b side . five . constants . Constants Ċ import Ġcom . b side . five . databinding . Activity Qr Code Binding Ċ import Ġcom . b side . five . extension . show Keyboard Ċ import Ġcom . b side . five . network . ApiClient Ċ import Ġcom . b side . five . util . Activity Util Ċ import Ġcom . b side . five . util . Common Util Ċ import Ġcom . b side . five . util . G lide Util Ċ import Ġcom . b side . five . util . Image Util Ċ import Ġcom . google . zx ing . Barcode Format Ċ import Ġcom . jo urney apps . barcode scanner . Barcode Encoder ĊĊ Ċ class ĠQ r Code Activity Ġ: ĠBase Activity < Activity Qr Code Binding , ĠQ r Code ViewModel >() Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠQR _ CODE _ WIDTH Ġ= Ġ 1 7 6 ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠQR _ CODE _ HEIGHT Ġ= Ġ 1 7 6 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġuri : ĠUri Ġ= ĠUri . EMPTY ĊĠĠĠ Ġprivate Ġvar Ġqr Url : ĠString Ġ= Ġ"" ĊĊĠĠĠ Ġoverride Ġval Ġlayout ResourceId : ĠInt ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠR . layout . activity _ qr _ code ĊĠĠĠ Ġoverride Ġval ĠviewModel Class : ĠClass < Qr Code ViewModel > ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠQ r Code ViewModel :: class . java ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġinit Toolbar () ĊĠĠĠĠĠĠĠ Ġinit Intent () ĊĠĠĠĠĠĠĠ Ġsubscribe () ĊĠĠĠĠĠĠĠ Ġinit View () ĊĠĠĠĠĠĠĠ Ġbinding . qr Code Title . show Keyboard () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ ĠImage Util . delete Image ( this , Ġuri ) ĊĠĠĠĠĠĠĠ Ġuri Ġ= ĠUri . EMPTY ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ share Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Common Util . check Storage Permission ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= ĠSystem . currentTimeMillis (). toString () Ġ+ Ġ"_ ${ Image Util . TEMP _ FILE _ NAME }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Qr Code Image ( fileName ). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri Ġ= Ġit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Util . share Google Link ( this , Ġit , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . qr _ code , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK Ġ&& Ġrequest Code Ġ== ĠImage Util . DELETE _ PERMISSION _ REQUEST ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . Q ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠImage Util . delete Image ( this , ĠImage Util . TEMP _ FILE _ NAME ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Toolbar () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( binding . qr Code Toolbar Ġas ĠToolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Display Show Custom Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Display Home As Up Enabled ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Display Show Title Enabled ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Intent () Ġ{ ĊĠĠĠĠĠĠĠ Ġintent . let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . getString Extra ( Constants . EXTRA _ SUR VE Y _ ID )?. let Ġ{ Ġsurvey Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġqr Url Ġ= ĠApi Client . USER _ SUR VE Y _ URL Ġ+ Ġsurvey Id Ġ+ Ġ"/ view " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . getBoolean Extra ( Constants . EXTRA _ IS _ CREATE _ QR , Ġfalse ). let Ġ{ Ġis Create Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Create ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Sn ackBar ( R . string . survey _ complete _ msg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit View () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimg Ġ= Ġcreate Qr Code ( qr Url ). to Drawable ( resources ) ĊĠĠĠĠĠĠĠ ĠG lide Util . load Image ( binding . qr Code Img , Ġimg ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Qr Code ( url : ĠString ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbarcode Encoder Ġ= ĠBar code Encoder () ĊĠĠĠĠĠĠĠ Ġreturn Ġbarcode Encoder . encode Bitmap ( url , ĠBar code Format . QR _ CODE , ĠQR _ CODE _ WIDTH , ĠQR _ CODE _ HEIGHT ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsave Qr Code Image ( fileName : ĠString ): ĠUri Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġget Bitmap From View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . qr Code Container , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . qr Code Container . width , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . qr Code Container . height ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġreturn ĠImage Util . insert Image ( this , Ġbitmap , ĠfileName , Ġ" image /* ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Bitmap From View ( view : ĠView , Ġwidth : ĠInt , Ġheight : ĠInt ): ĠBitmap Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠBitmap . create Bitmap ( width , Ġheight , ĠBitmap . Config . ARGB _ 8 8 8 8 ) ĊĠĠĠĠĠĠĠ Ġval Ġcanvas Ġ= ĠCanvas ( bitmap ) ĊĠĠĠĠĠĠĠ Ġval Ġbg Drawable Ġ= Ġview . background ĊĊĠĠĠĠĠĠĠ Ġif Ġ( bg Drawable Ġ!= Ġnull ) Ġbg Drawable . draw ( canvas ) Ġelse Ġcanvas . draw Color ( Color . WHITE ) ĊĠĠĠĠĠĠĠ Ġview . draw ( canvas ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbitmap ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsubscribe () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel . image Save Live . observe ( this , ĠObserver < String ?> Ġ{ ĠfileName Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfileName ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsave Qr Code Image ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . finish Download Qr () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide Util . load Image ( binding . qr Code Save Icon , ĠR . drawable . ic _ download _ done ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Util . start MainActivity ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }