package Ġcom . code path . apps . Simple Tweet Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroid . widget . Toast . LENGTH _ SHORT Ċ import Ġcom . code path . apps . Simple Tweet . models . Tweet Ċ import Ġcom . code path . as yn ch ttp client . callback . Json HttpResponse Handler Ċ import Ġokhttp 3 . Headers Ċ Ċ class ĠCompose Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġet Compose : ĠEditText ĊĠĠĠ Ġlateinit Ġvar Ġcharacter Count : ĠTextView ĊĠĠĠ Ġlateinit Ġvar Ġbtn Tweet : ĠButton ĊĠĠĠ Ġlateinit Ġvar Ġclient : ĠTwitter Client ĊĠĠĠ Ġvar Ġcharacters Left : ĠInt Ġ= ĠMAX ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ compose ) ĊĊĠĠĠĠĠĠĠ Ġet Compose Ġ= ĠfindViewById ( R . id . et Tweet Compose ) ĊĠĠĠĠĠĠĠ Ġcharacter Count Ġ= ĠfindViewById ( R . id . tv Char Count ) ĊĠĠĠĠĠĠĠ Ġbtn Tweet Ġ= ĠfindViewById ( R . id . btn Tweet ) ĊĠĠĠĠĠĠĠ Ġclient Ġ= ĠTwitter Application . get RestClient ( this ) ĊĊĠĠĠĠĠĠĠ Ġcharacter Count . text Ġ= Ġ"$ MAX Ġcharacters Ġleft " ĊĊĠĠĠĠĠĠĠ Ġ// handle Ġcharacter Ġcount ĊĠĠĠĠĠĠĠ Ġet Compose . add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġcount : ĠInt , Ġafter : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// todo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( s : ĠCharSequence ?, Ġstart : ĠInt , Ġbefore : ĠInt , Ġcount : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// todo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( s Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacters Left Ġ= Ġcharacters Left ( s . length ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Count . text Ġ= Ġ"$ characters Left Ġcharacters Ġleft " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( characters Left Ġ< Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Count . setTextColor ( resources . getColor ( R . color . red )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Tweet . is Clickable Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcharacter Count . setTextColor ( resources . getColor ( R . color . black )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbtn Tweet . is Clickable Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// Ġhandle Ġuser Ġclick Ġon Ġtweet Ġbutton ĊĠĠĠĠĠĠĠ Ġbtn Tweet . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġgrab Ġcontent Ġof Ġedit text / et Compose ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtweet Content Ġ= Ġet Compose . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// make Ġsure Ġtweet Ġis nt Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tweet Content . isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Please Ġwrite Ġfor Ġtweet ", ĠLEN GTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// make Ġsure Ġtweet Ġis Ġunder Ġchar Ġcount ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( tweet Content . length Ġ> Ġ 2 8 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Allowed Ġcharacter Ġcount Ġis Ġ 2 8 0 Ġcharacters ", ĠLEN GTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmake Ġapi Ġcall Ġto Ġpublish Ġtweet ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . publish Tweet ( tweet Content , Ġobject Ġ: ĠJson HttpResponse Handler () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstatusCode : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders : ĠHeaders ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable : ĠThrowable ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġpublish Ġtweet ", Ġthrowable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( statusCode : ĠInt , Ġheaders : ĠHeaders ?, Ġjson : ĠJSON ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// todo Ġsend Ġtweet Ġback Ġto Ġtimeline Ġactivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Successfully Ġpublished Ġtweet ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtweet Ġ= ĠTweet . fromJson ( json . jsonObject ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" tweet ", Ġtweet ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( RESULT _ OK , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcharacters Left ( count : ĠInt ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠMAX Ġ- Ġcount ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= Ġ" Compose Tweet " ĊĠĠĠĠĠĠĠ Ġval ĠMAX Ġ= Ġ 2 8 0 ĊĠĠĠ Ġ} Ċ } Ċ