package Ġwork . air z . pr if ollow Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . support . v 7 . app . AlertDialog Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġcom . google . zx ing . Barcode Format Ċ import Ġcom . google . zx ing . Result Metadata Type Ċ import Ġcom . google . zx ing . Result Point Ċ import Ġcom . google . zx ing . qrcode . decoder . Error Correction Level Ċ import Ġcom . jo urney apps . barcode scanner . Barcode Callback Ċ import Ġcom . jo urney apps . barcode scanner . Barcode Result Ċ import Ġcom . jo urney apps . barcode scanner . Decorated Barcode View Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . android . synt hetic . main . content _ main .* Ċ import Ġkotlinx . android . synt hetic . main . create _ user _ dialog . view .* Ċ import Ġwork . air z . pri manager . db . DB Constants Ċ import Ġwork . air z . pri manager . db . DB Format Ċ import Ġwork . air z . pri manager . db . DB Util Ċ import Ġwork . air z . pri manager . qr . QR Util Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġval ĠREQUEST _ PERMISSION Ġ= Ġ 1 0 0 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdb Util : ĠDB Util ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġqr Reader View : ĠDecor ated Barcode View ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġfab . setOnClickListener Ġ{ Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd User Alert ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġdb Util Ġ= ĠDB Util ( application Context ) ĊĊĠĠĠĠĠĠĠ Ġwhile Ġ(! check Permission ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" permission ", Ġ" not Ġgranted ") ĊĠĠĠĠĠĠĠĠĠĠĠ ĠThread . sleep ( 2 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠLog . d (" permission ", Ġ" gr anted ") ĊĠĠĠĠĠĠĠ Ġread QR () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġmenu ; Ġthis Ġadds Ġitems Ġto Ġthe Ġaction Ġbar Ġif Ġit Ġis Ġpresent . ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ main , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠHandle Ġaction Ġbar Ġitem Ġclicks Ġhere . ĠThe Ġaction Ġbar Ġwill ĊĠĠĠĠĠĠĠ Ġ// Ġautomatically Ġhandle Ġclicks Ġon Ġthe ĠHome / Up Ġbutton , Ġso Ġlong ĊĠĠĠĠĠĠĠ Ġ// Ġas Ġyou Ġspecify Ġa Ġparent Ġactivity Ġin ĠAndroid Manifest . xml . ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . delete user Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Account Alert () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠQR ãĤ³ãĥ¼ãĥī ãģ® èªŃãģ¿ åıĸ ãĤĬ éĥ¨åĪĨ ãģ® åĩ¦çĲĨ ĊĠĠĠĠ Ġ* Ġ èªŃãģ¿ åıĸ ãģ£ãģ¦ è©³ç´° ãĥĩãĥ¼ãĤ¿ ãģ¾ãģ§ åıĸå¾Ĺ ãģĻãĤĭ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġread QR () Ġ{ ĊĠĠĠĠĠĠĠ Ġqr Reader View Ġ= Ġdecor ated Barcode View ĊĠĠĠĠĠĠĠ Ġqr Reader View . decode Continuous ( object Ġ: ĠBar code Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġpossible Result Points ( result Points : ĠMutable List < Result Point > ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbarcode Result ( result : ĠBar code Result ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Ġ== Ġnull Ġ|| Ġresult . barcode Format Ġ!= ĠBar code Format . QR _ CODE ) Ġreturn ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbytes Ġ= Ġresult . result Metadata [ Result Metadata Type . BYTE _ SEG MENTS ] Ġas ? ĠList < *> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġbytes ?. get ( 0 ) Ġas ? ĠByteArray Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstr b Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . forEach Ġ{ Ġstr b . append ( String . format ("% 0 2 X Ġ", Ġit )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" QR ĠD UMP ", Ġstr b . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" mask Index ", Ġresult . result . mask Index . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" QR ãģ® ãĤµ ãĤ¤ãĤº ", Ġresult . raw Bytes . size . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanalyze QR ( data , Ġresult ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġqr Reader View . resume () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġanalyze QR ( data : ĠByteArray , Ġresult : ĠBar code Result ) Ġ{ ĊĠĠĠĠĠĠĠ Ġqr Reader View . pause () ĊĊĠĠĠĠĠĠĠ Ġval Ġdb Util Ġ= ĠDB Util ( application Context ) ĊĠĠĠĠĠĠĠ Ġval Ġraw String Ġ= ĠQR Util . byte ToString ( data ) ĊĊĠĠĠĠĠĠĠ Ġval Ġqr Format Ġ= ĠQR Util . QR Format ( QR Util . QR Format . getString To Error Correction Level ( result . result Metadata [ Result Metadata Type . ERROR _ COR RECTION _ LEVEL ] Ġas ĠString ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . result . mask Index , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . source Data . isIn verted , ĠQR Util . detect Version M ( result . raw Bytes . size )) ĊĠĠĠĠĠĠĠ ĠLog . d (" qr format ", Ġqr Format . toString ()) ĊĊĠĠĠĠĠĠĠ Ġvar Ġticket Type : ĠQR Util . Ticket Type Ġ= Ġintent . get Serializable Extra ( QR Util . TICK ET _ TYPE ) Ġas ? ĠQR Util . Ticket Type ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠQR Util . detect QR Format ( data ) ĊĠĠĠĠĠĠĠ Ġif Ġ( db Util . getUser List (). isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccount Zero Alert () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( ticket Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQR Util . Ticket Type . PR ICH AN _ FOLLOW Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfollow UserID Ġ= ĠQR Util . get Follow UserID ( data ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfollowed Users Ġ= Ġdb Util . getUser List (). filter Ġ{ Ġdb Util . is Follow ed ( it , Ġfollow UserID ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Duplicate Ġ= Ġdb Util . is Duplicate ( DB Constants . FOLLOW _ TICK ET _ TABLE , Ġraw String ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfollow Account Alert ( data , Ġqr Format , ĠQR Util . Ticket Type . PR ICH AN _ FOLLOW ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġothers Data Alert () // è ¬ İ ãĥĩãĥ¼ãĤ¿ ãģ§ãģĤãĤĭ ãģĵãģ¨ ãĤĴ åĳĬ çŁ¥ ãģĻãĤĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfollow Account Alert ( raw Data : ĠByteArray , Ġqr Format : ĠQR Util . QR Format , Ġticket Type : ĠQR Util . Ticket Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser List Ġ= Ġdb Util . getUser List () ĊĠĠĠĠĠĠĠ Ġval Ġuser List String Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġuser Follow List Ġ= Ġmutable ListOf < Boolean >() ĊĠĠĠĠĠĠĠ Ġval Ġtarget Id Ġ= ĠQR Util . get Follow UserID ( raw Data ) ĊĠĠĠĠĠĠĠ Ġuser List . forEach Ġ{ Ġuser List String . add ( it . userName ) Ġ} ĊĠĠĠĠĠĠĠ Ġuser List . forEach Ġ{ Ġuser Follow List . add ( db Util . is Follow ed ( it , Ġtarget Id )) Ġ} ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( resources . getString ( R . string . select _ follow _ account )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Multi Choice Items ( user List String . to Typed Array (), Ġuser Follow List . to Boolean Array ()) Ġ{ Ġ_, Ġwhich , Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Follow List [ which ] Ġ= Ġis Checked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( resources . getString ( R . string . save )) Ġ{ Ġdialog , Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Follow List . with Index (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Util . follow User ( user List [ it . index ], ĠDB Format . User Follow ( target Id , Ġ"", Ġ"", Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it . value Ġ== Ġfalse Ġ&& Ġdb Util . is Follow ed ( user List [ it . index ], Ġtarget Id )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Util . remove Follow User ( user List [ it . index ], Ġtarget Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor ated Barcode View . resume () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( resources . getString ( R . string . cancel )) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor ated Barcode View . resume () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdelete Account Alert () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuser List Ġ= Ġdb Util . getUser List () ĊĠĠĠĠĠĠĠ Ġval Ġuser List String Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġval Ġuser List Checked Ġ= Ġmutable ListOf < Boolean >() ĊĠĠĠĠĠĠĠ Ġuser List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser List String . add ( it . userName ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser List Checked . add ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( resources . getString ( R . string . select _ delete _ account )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Multi Choice Items ( user List String . to Typed Array (), Ġuser List Checked . to Boolean Array ()) Ġ{ Ġ_, Ġwhich , Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser List Checked [ which ] Ġ= Ġis Checked ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( resources . getString ( R . string . delete )) Ġ{ Ġdialog , Ġid Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser List Checked . with Index (). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" ãĥ ¦ãĥ¼ãĤ¶ åīĬéĻ¤ ", Ġuser List [ it . index ]. userName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Util . remove User ( user List [ it . index ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor ated Barcode View . resume () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( resources . getString ( R . string . cancel )) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor ated Barcode View . resume () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è ¬ İ ãĥĩãĥ¼ãĤ¿ ãģĮ æĿ¥ ãģŁ ãģ¨ ãģį ãģ® ãĤ¢ ãĥ© ãĥ¼ãĥĪ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġothers Data Alert () Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( resources . getString ( R . string . unknown _ data )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( resources . getString ( R . string . please _ read _ follow _ ticket )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( resources . getString ( R . string . yes )) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor ated Barcode View . resume () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠãĤ¢ ãĤ«ãĤ¦ãĥ³ãĥĪ æķ° ãģĮ 0 ãģ® ãģ¨ ãģį ãģ® ãĤ¢ ãĥ© ãĥ¼ãĥĪ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġaccount Zero Alert () Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( resources . getString ( R . string . user _ zero )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( resources . getString ( R . string . please _ add _ user )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( resources . getString ( R . string . yes )) Ġ{ Ġdialog , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdecor ated Barcode View . resume () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġãĥ ¦ãĥ¼ãĤ¶ è¿½åĬł ĊĠĠĠĠ Ġ* Ġ@ param Ġcontext Ġapp Ġcontext ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġadd User Alert ( context : ĠContext ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( context ) ĊĠĠĠĠĠĠĠ Ġvar Ġdialog Root Ġ= Ġinflater . inflate ( R . layout . create _ user _ dialog , Ġnull ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġedit Text Ġ= Ġdialog Root . filename ĊĠĠĠĠĠĠĠ Ġedit Text . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( db Util . is Duplicate ( DB Constants . USER _ TABLE , Ġdb Util . getUser Hash String ( edit Text . text . toString ()))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Root . error . visibility Ġ= ĠTextView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Root . error . visibility Ġ= ĠTextView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġvar Ġbuilder Ġ= ĠAlertDialog . Builder ( context ) ĊĠĠĠĠĠĠĠ Ġbuilder . setView ( dialog Root ) ĊĠĠĠĠĠĠĠ Ġbuilder . set Cancel able ( false ) ĊĠĠĠĠĠĠĠ Ġbuilder . set Negative Button ( context . resources . getString ( R . string . cancel )) Ġ{ Ġdialog Interface , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdialog Interface . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . set Positive Button ( context . resources . getString ( R . string . create )) Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( edit Text . text . toString (). isNull OrEmpty ()) Ġ{ Ġ// ç©º çĻ½ ãĥģ ãĤ§ ãĥĥãĤ¯ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġcontext . resources . getText ( R . string . please _ set _ user _ name ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ set Positive Button ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġoutput Name : ĠString Ġ= Ġedit Text . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĲįåīį éĩį è¤ĩ ãĥģ ãĤ§ ãĥĥãĤ¯ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( db Util . is Duplicate ( DB Constants . USER _ TABLE , Ġdb Util . getUser Hash String ( output Name ))) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġcontext . resources . getText ( R . string . please _ use _ de ffer ent _ name ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ set Positive Button ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠDB Format . User ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdb Util . getUser Hash String ( output Name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠQR Util . QR Format ( Error Correction Level . M , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput Name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBitmap . create Scaled Bitmap ( Bitmap Factory . decode Resource ( context . resources , ĠR . drawable . baseline _ person _ add _ black _ 2 4 ), Ġ 1 0 , Ġ 1 0 , Ġfalse ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" f ${ db Util . getUser Hash String ( output Name )}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdb Util . add User ( user ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbuilder . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permission (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ æĹ¢ ãģ« è¨± åı¯ ãģĹãģ¦ãģĦãĤĭ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( Activity Compat . check Self Permission ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Storage Permission () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ}// Ġæĭ Ĵ åĲ¦ ãģĹãģ¦ãģĦ ãģŁ åł´åĲĪ ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġrequest Storage Permission () Ġ{ ĊĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . CAMERA , ĠManifest . permission . INTER NET ), ĠREQUEST _ PERMISSION ) ĊĠĠĠ Ġ} Ċ } Ċ