package Ġio . ag ora . ag ora _ android _ u ikit Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . constraint layout . widget . Constraint Layout Ċ import Ġio . ag ora . ag or au ikit _ android .* Ċ import Ġio . ag ora . rtc . Constants Ċ import Ġio . ag ora . rtc . video . Be auty Options Ċ Ċ // ĠAsk Ġfor ĠAndroid Ġdevice Ġpermissions Ġat Ġruntime . Ċ private Ġconst Ġval ĠPER MISSION _ REQ _ ID Ġ= Ġ 2 2 Ċ private Ġval ĠREQUEST ED _ PERMISSION S Ġ= ĠarrayOf < String >( ĊĠĠĠ ĠManifest . permission . RECORD _ AUDIO , ĊĠĠĠ ĠManifest . permission . CAMERA , ĊĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE Ċ ) Ċ @ Experimental Unsigned Types Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġvar Ġag View : ĠA gor a Video Viewer ? Ġ= Ġnull ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġag View Ġ= ĠA gor a Video Viewer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĠA gor a Connection Data (" my - app - id "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġag ora Settings Ġ= Ġthis . settings With Extra Buttons () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint (" Could Ġnot Ġinitialise ĠA gor a Video Viewer . ĠCheck Ġyour ĠApp ĠID Ġis Ġvalid .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint ( e . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġset Ġ= ĠFrame Layout . LayoutParams ( Frame Layout . LayoutParams . MATCH _ PARENT , ĠFrame Layout . LayoutParams . MATCH _ PARENT ) ĊĊĠĠĠĠĠĠĠ Ġthis . add ContentView ( ag View , Ġset ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġthat Ġthe Ġcamera Ġand Ġmic Ġpermissions Ġare Ġaccepted Ġbefore Ġattempting Ġto Ġjoin ĊĠĠĠĠĠĠĠ Ġif Ġ( Ag ora Video Viewer . request Permissions ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġag View !!. join (" test ", Ġrole Ġ= ĠConstants . CLIENT _ ROLE _ BRO ADCAST ER ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjoin Button Ġ= ĠButton ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjoin Button . text Ġ= Ġ" Allow ĠCamera Ġand ĠMicro phone , Ġthen Ġclick Ġhere " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjoin Button . setOnClickListener ( View . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen Ġthe Ġbutton Ġis Ġclicked , Ġcheck Ġpermissions Ġagain Ġand Ġjoin Ġchannel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġif Ġpermissions Ġare Ġgranted . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Ag ora Video Viewer . request Permissions ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( join Button . parent Ġas ĠViewGroup ). remove View ( join Button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġag View !!. join (" test ", Ġrole = Constants . CLIENT _ ROLE _ BRO ADCAST ER ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjoin Button . set BackgroundColor ( Color . GREEN ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjoin Button . setTextColor ( Color . RED ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . add ContentView ( join Button , ĠFrame Layout . LayoutParams ( Frame Layout . LayoutParams . MATCH _ PARENT , Ġ 3 0 0 )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsettings With Extra Buttons (): ĠA gor a Settings Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġag ora Settings Ġ= ĠA gor a Settings () ĊĊĠĠĠĠĠĠĠ Ġval Ġag Be auty Button Ġ= ĠA gor a Button ( this ) ĊĠĠĠĠĠĠĠ Ġag Be auty Button . click Action Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . isSelected Ġ= Ġ! it . isSelected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġag Be auty Button . setImage Resource ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . isSelected ) Ġandroid . R . drawable . star _ on Ġelse Ġandroid . R . drawable . star _ off ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . background . set Tint ( if Ġ( it . isSelected ) ĠColor . GREEN Ġelse ĠColor . GRAY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . ag View ?. ag kit ?. set Be auty Effect Options ( it . isSelected , Ġthis . ag View ?. be auty Options ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġag Be auty Button . setImage Resource ( android . R . drawable . star _ off ) ĊĊĠĠĠĠĠĠĠ Ġag ora Settings . extra Buttons Ġ= Ġmutable ListOf ( ag Be auty Button ) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġag ora Settings ĊĠĠĠ Ġ} Ċ }