package Ġcom . code path . apps . rest client template . activities Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Menu Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . widget . Toolbar Ċ import Ġcom . code path . apps . rest client template . R Ċ import Ġcom . code path . apps . rest client template . Twitter Client Ċ import Ġcom . code path . apps . rest client template . backend . Twitter Application Ċ import Ġcom . code path . apps . rest client template . models . Tweet Ċ import Ġcom . code path . as yn ch ttp client . callback . Json HttpResponse Handler Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġokhttp 3 . Headers ĊĊ Ċ class ĠCompose Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġlateinit Ġvar Ġet Compose : ĠEditText ĊĠĠĠ Ġlateinit Ġvar Ġbtn Tweet : ĠButton ĊĠĠĠ Ġlateinit Ġvar Ġclient : ĠTwitter Client ĊĠĠĠ Ġlateinit Ġvar Ġchar Limit : ĠTextView ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ compose ) ĊĠĠĠĠĠĠĠ Ġval Ġtoolbar : ĠToolbar Ġ= ĠfindViewById ( R . id . include ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. hide () ĊĊĠĠĠĠĠĠĠ Ġet Compose Ġ= ĠfindViewById ( R . id . et Tweet Compose ) ĊĠĠĠĠĠĠĠ Ġbtn Tweet Ġ= ĠfindViewById ( R . id . btn Tweet ) ĊĠĠĠĠĠĠĠ Ġclient Ġ= ĠTwitter Application . get RestClient ( this ) ĊĠĠĠĠĠĠĠ Ġchar Limit Ġ= ĠfindViewById ( R . id . tv Char Limit ) ĊĠĠĠĠĠĠĠ Ġchar Limit . text Ġ= ĠMAX _ CHAR . toString () ĊĊĠĠĠĠĠĠĠ Ġet Compose . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar Limit . text Ġ= Ġ( MAX _ CHAR Ġ- Ġs . length ). toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s . length Ġ<= Ġ 2 8 0 ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar Limit . setTextColor ( Color . WHITE ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchar Limit . setTextColor ( Color . RED ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence , Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ) Ġ{} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbtn Tweet . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtweet Content Ġ= Ġet Compose . text . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweet Content . isEmpty () Ġ-> ĠSn ackbar . make ( it , Ġ" Please ĠType Ġsomething Ġbefore ĠT we eting !", ĠSn ackbar . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtweet Content . length Ġ> Ġ 2 8 0 Ġ-> ĠSn ackbar . make ( it , Ġ" Characters Ġcannot Ġexceed Ġbeyond Ġ 2 8 0 !", ĠSn ackbar . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . publish Tweet ( tweet Content , Ġobject Ġ: ĠJson HttpResponse Handler () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( statusCode : ĠInt , Ġheaders : ĠHeaders ?, Ġresponse : ĠString ?, Ġthrowable : ĠThrowable ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Error ĠOcc urred ! ĠPlease Ġtry Ġagain .", Ġthrowable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( statusCode : ĠInt , Ġheaders : ĠHeaders , Ġjson : ĠJSON ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Success .") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtweet Ġ= ĠTweet . fromJson ( json . jsonObject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġi Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi . putExtra (" tweet ", Ġtweet ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( RESULT _ OK , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . menu _ compose , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Compose Activity " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠMAX _ CHAR Ġ= Ġ 2 8 0 ĊĠĠĠ Ġ} Ċ }