package Ġcom . example . wood in vo ic etest Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . android . vol ley . Default Retry Policy Ċ import Ġcom . android . vol ley . Request Ċ import Ġcom . android . vol ley . Response Ċ import Ġcom . android . vol ley . toolbox . String Request Ċ import Ġcom . android . vol ley . toolbox . Vol ley Ċ import Ġcom . it ext pdf . text .* Ċ import Ġcom . it ext pdf . text . pdf . Pdf Writer Ċ import Ġcom . kar umi . dex ter . Dex ter Ċ import Ġcom . kar umi . dex ter . Permission Token Ċ import Ġcom . kar umi . dex ter . listener . Permission Request Ċ import Ġkotlinx . android . synt hetic . main . activity _ confirm _ everything .* Ċ import Ġjava . io . File Ċ import Ġjava . io . File OutputStream Ċ import Ġcom . example . wood in vo ic etest . databinding . Activity Confirm Everything Binding Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . kar umi . dex ter . Multiple Permissions Report Ċ import Ġcom . kar umi . dex ter . listener . multi . Multiple Permissions Listener Ċ import Ġjava . lang . Exception Ċ Ċ class ĠConfirm Everything Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval Ġfilename : ĠString Ġ= Ġ" invoice . pdf " ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġval Ġbinding : ĠActivity Confirm Everything Binding Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠData Binding Util . set ContentView ( this , ĠR . layout . activity _ confirm _ everything ) ĊĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠgetString ( R . string . message Confirm Payment ), ĠToast . LENGTH _ LONG ). show () ĊĊĠĠĠĠĠĠĠ Ġval Ġapplication Ġ= Ġrequire NotNull ( this ). application ĊĠĠĠĠĠĠĠ Ġval ĠdataSource Ġ= ĠW ood In voices Database . getInstance ( application ). wood Invoice Dao ĊĠĠĠĠĠĠĠ Ġval Ġwood In voices ViewModel Factory Ġ= ĠW ood In voices ViewModel Factory ( dataSource , Ġapplication ) ĊĠĠĠĠĠĠĠ Ġval Ġwood In voices ViewModel Ġ= ĠViewModel Providers . of ( this , Ġwood In voices ViewModel Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( W ood In voices ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġshow Invoice . setOnClickListener Ġ{ Ġgo To Show One Invoice () Ġ} ĊĠĠĠĠĠĠĠ Ġback To Main Screen . setOnClickListener Ġ{ Ġfinish Invoice () Ġ} ĊĊĠĠĠĠĠĠĠ ĠDex ter . with Context ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . Manifest . permission . WRITE _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . Manifest . permission . INTER NET ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with Listener ( object Ġ: ĠMultiple Permissions Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Permissions Checked ( p 0 : ĠMultiple Permissions Report ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprint Invoice Button . setOnClickListener Ġ{ Ġsend Invoice To Printer () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( orders Invoice . send ToServer Ġ== Ġ" false ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ordered Invoice Ġ= Ġdata Class ToJson () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend Invoice ToServer ( json Ordered Invoice ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorders Invoice . send ToServer Ġ= Ġ" true " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Permission R ationale ShouldBe Shown ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 0 : ĠMutable List < Permission Request > ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp 1 : ĠPermission Token ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo Nothing () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. check () ĊĊĠĠĠĠĠĠĠ Ġbinding . lifecycle Owner Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġbinding . wood In voices ViewModel Ġ= Ġwood In voices ViewModel ĊĠĠĠĠĠĠĠ Ġif Ġ( orders Invoice . saved To Database Ġ== Ġ" false ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwood In voices ViewModel . on Confirm Everything () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorders Invoice . saved To Database Ġ= Ġ" true " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġsend Invoice To Printer () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpdf Path Ġ= ĠCommon . getApp Path ( this @ Confirm Everything ) Ġ+ Ġfilename ĊĠĠĠĠĠĠĠ Ġcreate PDF File ( pdf Path ) Ċ // ĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" the Ġpdf Ġpath Ġis Ġ$ pdf Path ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" This Ġfeature Ġis Ġin Ġdevelopment ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish Invoice () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfinish Invoice () Ġ{ ĊĠĠĠĠĠĠĠ Ġorders Invoice Ġ= ĠInvoice Object Class () ĊĠĠĠĠĠĠĠ Ġordered Product Ġ= ĠOrdered Product () ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate PDF File ( path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( File ( path ). exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( path ). delete () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" pdf Ġdeleted ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġdocument Ġ= ĠDocument () ĊĠĠĠĠĠĠĠ ĠPdf Writer . getInstance ( document , ĠFileOutputStream ( path )) ĊĠĠĠĠĠĠĠ Ġdocument . open () ĊĠĠĠĠĠĠĠ Ġdocument . pageSize Ġ= ĠPage Size . A 4 ĊĠĠĠĠĠĠĠ Ġdocument . add Creation Date () ĊĊĠĠĠĠĠĠĠ Ġval Ġcolor Accent Ġ= ĠBase Color ( 0 , Ġ 1 5 3 , Ġ 2 0 4 , Ġ 2 5 5 ) ĊĠĠĠĠĠĠĠ Ġval Ġheading FontSize Ġ= Ġ 2 0 . 0 f ĊĠĠĠĠĠĠĠ Ġval Ġvalue FontSize Ġ= Ġ 2 6 . 0 f ĊĊĠĠĠĠĠĠĠ Ġval Ġtitle Style Ġ= ĠFont ( Font . Font Family . CO URI ER , Ġ 3 6 . 0 f , ĠFont . NORMAL , ĠBase Color . BLACK ) ĊĠĠĠĠĠĠĠ Ġadd New Item ( document , Ġ" Invoice ", ĠElement . ALIGN _ CENTER , Ġtitle Style ) ĊĠĠĠĠĠĠĠ Ġdocument . close () ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" the Ġpdf Ġpath Ġis Ġ$ path ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠgetString ( R . string . message Confirm Print ing ), ĠToast . LENGTH _ LONG ). show () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Throws ( Document Exception :: class ) ĊĠĠĠ Ġprivate Ġfun Ġadd New Item ( document : ĠDocument , Ġtext : ĠString , Ġalign : ĠInt , Ġstyle : ĠFont ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġchunk Ġ= ĠChunk ( text , Ġstyle ) ĊĠĠĠĠĠĠĠ Ġval Ġp Ġ= ĠParagraph ( chunk ) ĊĠĠĠĠĠĠĠ Ġp . alignment Ġ= Ġalign ĊĠĠĠĠĠĠĠ Ġdocument . add ( p ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdata Class ToJson (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġgson Ġ= ĠGson () ĊĠĠĠĠĠĠĠ Ġval Ġjson T ut : ĠString Ġ= Ġgson . toJson ( orders Invoice ) ĊĠĠĠĠĠĠĠ ĠLog . i (" json ", Ġ" the Ġjson Ġobject : Ġ$ json T ut ") ĊĠĠĠĠĠĠĠ Ġreturn Ġjson T ut ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsend Invoice ToServer ( json Ordered Invoice : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexternal URL Ġ= ĠgetString ( R . string . external Server Url ) ĊĠĠĠĠĠĠĠ Ġval Ġinternal URL Ġ= ĠgetString ( R . string . internal Server Url ) ĊĠĠĠĠĠĠĠ Ġval Ġstring Request : ĠString Request Ġ= Ġobject Ġ: ĠString Request ( Request . Method . POST , Ġinternal URL , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResponse . Listener < String > Ġ{ Ġresponse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" server ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" the Ġinvoice Ġwas Ġsent Ġto Ġthe Ġserver Ġand Ġthe Ġresponse Ġis Ġ$ response " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . message Confirm Sent ToServer ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . message Error Send ToServer ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" server ", Ġ" did Ġnot Ġwork Ġ$ e ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĠResponse . Error Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" server ", Ġ" Error Ġ$ it ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Params (): ĠMap < String , ĠString > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams : ĠMutable Map < String , ĠString > Ġ= ĠHashMap () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Change Ġwith Ġyour Ġpost Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams [" sender "] Ġ= ĠgetString ( R . string . server Password ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams [" data "] Ġ= Ġjson Ordered Invoice ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġparams ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġstring Request . retry Policy Ġ= ĠDefault Retry Policy ( Default Retry Policy . DEFAULT _ TIMEOUT _ MS , Ġ 0 , Ġ 1 F ) ĊĠĠĠĠĠĠĠ Ġval Ġrequest Queue Ġ= ĠVol ley . new Request Queue ( this ) ĊĠĠĠĠĠĠĠ Ġrequest Queue . add ( string Request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo To Show One Invoice () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠShow Single Invoice :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" invoice Id ", Ġorders Invoice . invoice Id ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" invoice Note ", Ġorders Invoice . invoice Notes ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" invoice S old ", Ġorders Invoice . invoice S old . toString ()) ĊĠĠĠĠĠĠĠ Ġintent . putExtra ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" net Invoice Value ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( orders Invoice . invoice Total Sum Ġ- Ġorders Invoice . invoice S old ). toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} Ċ } Ċ