package Ġcom . example . shape color Ċ Ċ import ĠCircle View Ċ import ĠSquare View Ċ import ĠTriangle View Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . Animation Ċ import Ġandroid . view . animation . Scale Animation Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . ImageView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . example . shape color . databinding . Activity Main Binding Ċ import Ġcom . example . shape color . events .* Ċ import Ġcom . example . shape color . models . Random Color Ċ import Ġcom . example . shape color . models . Random Pattern Ċ import Ġcom . example . shape color . shape . ShapeBase Ċ import Ġcom . example . shape color . shape . Shape Type Ċ import Ġcom . example . shape color . utils . Utils Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġkotlin . random . Random ĊĊ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity (), ĠAcc eler ometer Listener , ĠEvent Tap Callback Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġtab Selected Ġ= ĠShape Type . Square ĊĊĠĠĠ Ġprivate Ġvar Ġmax Limit Percent Ġ= Ġ 0 . 4 5 ĊĠĠĠ Ġprivate Ġvar Ġmin Limit Percent Ġ= Ġ 0 . 1 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Main Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmain ViewModel : ĠMain ViewModel ĊĠĠĠ Ġprivate Ġvar Ġis Dragging Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġshape Moving : ĠView ? Ġ= Ġnull ĊĠĠĠ Ġlateinit Ġvar Ġaccel erometer Manager : ĠAcc eler ometer Manager ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġmain ViewModel Ġ= ĠMain ViewModel () ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Main Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġbinding . root ĊĠĠĠĠĠĠĠ ĠsetContentView ( view ) ĊĠĠĠĠĠĠĠ Ġset EventListener () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġprivate Ġfun Ġset EventListener () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . header Tab . add On Tab Selected Listener ( object Ġ: ĠTab Layout . On Tab Selected Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Selected ( tab : ĠTab Layout . Tab ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tab Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( tab . position ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġset Tab Selected ( Shape Type . Square ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġset Tab Selected ( Shape Type . Circle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 2 Ġ-> Ġset Tab Selected ( Shape Type . Triangle ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 3 Ġ-> Ġset Tab Selected ( Shape Type . All ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Un selected ( tab : ĠTab Layout . Tab ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Tab Re selected ( tab : ĠTab Layout . Tab ?) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġbinding . frm Content . setOn Touch Listener Ġ{ Ġv , Ġevent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ UP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( shape Moving == null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Dragging ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading Progress . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Pos Ġ= Ġevent . x . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Pos Ġ= Ġevent . y . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcompare Share Type Ġ= Ġtab Selected ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compare Share Type Ġ== ĠShape Type . All ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompare Share Type Ġ= ĠShape Type . values ()[ Random . nextInt ( 0 , Ġ 3 )] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġint Color : ĠInt Ġ= ĠColor . rgb ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRandom . nextInt ( 2 5 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRandom . nextInt ( 2 5 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRandom . nextInt ( 2 5 5 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrandom Hex Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjava . lang . String . format ("% 0 6 X ", Ġ 0 x FFFFFF Ġand Ġint Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Utils . is Internet On ( this @ MainActivity )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compare Share Type Ġ== ĠShape Type . Square ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . getRandom Pattern ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApiResponse Listener < List < Random Pattern >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( data : ĠList < Random Pattern >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Shape ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompare Share Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Hex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ 0 ]. imageUrl ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Shape ( compare Share Type , Ġx Pos , Ġy Pos , Ġrandom Hex , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . getRandom Color ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApiResponse Listener < List < Random Color >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( data : ĠList < Random Color >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Shape ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompare Share Type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy Pos , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata [ 0 ]. hex , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Shape ( compare Share Type , Ġx Pos , Ġy Pos , Ġrandom Hex , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Shape ( compare Share Type , Ġx Pos , Ġy Pos , Ġrandom Hex , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape Moving Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( event . action Ġ== ĠMotion Event . ACTION _ MOVE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Dragging Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( shape Moving Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlayout Params Ġ= Ġshape Moving !!. layout Params Ġas ĠFrame Layout . LayoutParams ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Pos Ġ= Ġevent . x . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġy Pos Ġ= Ġevent . y . toInt () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . margin Start Ġ= Ġx Pos Ġ- Ġ( layout Params . width Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . top Margin Ġ= Ġy Pos Ġ- Ġ( layout Params . width Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape Moving !!. layout Params Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġfunction : Ġrender Ġa Ġshape ĊĠĠĠĠ Ġ* Ġ@ param Ġx ĠThe Ġx - coordinate Ġof Ġthe Ġcenter Ġof Ġpoint Ġof Ġtouch Ġevent ĊĠĠĠĠ Ġ* Ġ@ param Ġy ĠThe Ġy - coordinate Ġof Ġthe Ġcenter Ġof Ġpoint Ġof Ġtouch Ġevent ĊĠĠĠĠ Ġ* Ġ@ param Ġhex Color ĠThe Ġcolor Ġwill Ġbe Ġfilled Ġinto Ġshape ĊĠĠĠĠ Ġ* Ġ@ param ĠimageUrl ĠThe ĠimageUrl Ġwill Ġbe Ġfilled Ġinto Ġshape ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġfun Ġshow Shape ( ĊĠĠĠĠĠĠĠ Ġcompare Share Type : ĠShape Type , ĊĠĠĠĠĠĠĠ Ġx : ĠInt , ĊĠĠĠĠĠĠĠ Ġy : ĠInt , ĊĠĠĠĠĠĠĠ Ġhex Color : ĠString , ĊĠĠĠĠĠĠĠ ĠimageUrl : ĠString ? ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . loading Progress . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġvar Ġrandom X Ġ= ĠRandom . nextInt ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( window . decor View . width Ġ* Ġmin Limit Percent ). toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( window . decor View . width Ġ* Ġmax Limit Percent ). toInt () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġvar Ġshape View : ĠView ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġif Ġ( compare Share Type Ġ== ĠShape Type . Circle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape View Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCircle View ( this @ MainActivity , Ġrandom X Ġ/ Ġ 2 , Ġrandom X Ġ/ Ġ 2 , Ġrandom X Ġ/ Ġ 2 , Ġhex Color ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( compare Share Type Ġ== ĠShape Type . Triangle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape View Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTriangle View ( this @ MainActivity , Ġrandom X Ġ/ Ġ 2 , Ġrandom X Ġ/ Ġ 2 , Ġrandom X , Ġhex Color ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( compare Share Type Ġ== ĠShape Type . Square ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( imageUrl Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape View Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSquare View ( this @ MainActivity , Ġ 0 , Ġ 0 , Ġrandom X , Ġrandom X , Ġhex Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape View Ġ= ĠImageView ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( shape View Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlayout Params Ġ= ĠFrame Layout . LayoutParams ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom X , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom X ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . J EL LY _ BE AN _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . margin Start Ġ= Ġx Ġ- Ġ( random X Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . top Margin Ġ= Ġy Ġ- Ġ( random X Ġ/ Ġ 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfade _ in Ġ= ĠScale Animation ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation . AB SOL UTE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnimation . AB SOL UTE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 . 5 f ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfade _ in . duration Ġ= Ġ 3 0 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfade _ in . fill After Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape View !!. start Animation ( fade _ in ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . frm Content . addView ( shape View , Ġlayout Params ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdouble Tap Listener Ġ= ĠEvent Tap Listener () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdouble Tap Listener . set Double Tap Callback Listener ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshape View ?. setOn Touch Listener ( double Tap Listener ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compare Share Type Ġ== ĠShape Type . Square ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( imageUrl != null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshape View ?. setBackground Resource ( R . drawable . shape _ bg ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( this . application Context ). load ( imageUrl ). center Crop () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( shape View Ġas ĠImageView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġremove Shape () Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . frm Content . removeAll Views () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Tab Selected ( shape : ĠShape Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . tab Selected Ġ= Ġshape ĊĠĠĠĠĠĠĠ Ġthis . shape Moving Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġthis . is Dragging Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠLog . d (" set Tab Selected ", Ġshape . name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġaccel erometer Manager Ġ= ĠAcc eler ometer Manager () ĊĠĠĠĠĠĠĠ Ġif Ġ( accel erometer Manager . is Supported ( this )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccel erometer Manager . start Listening ( this ); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġif Ġ( accel erometer Manager . is Listening ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccel erometer Manager . stop Listening (); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Acceleration Changed ( x : ĠFloat , Ġy : ĠFloat , Ġz : ĠFloat ) Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Sh ake ( force : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠ Ġremove Shape () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon DoubleClick ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . loading Progress . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġval Ġint Color : ĠInt Ġ= ĠColor . rgb ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRandom . nextInt ( 2 5 6 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRandom . nextInt ( 2 5 5 ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRandom . nextInt ( 2 5 5 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġrandom Hex Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava . lang . String . format ("% 0 6 X ", Ġ 0 x FFFFFF Ġand Ġint Color ) ĊĊĠĠĠĠĠĠĠ Ġif ( v Ġis ĠImageView ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . getRandom Pattern ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApiResponse Listener < List < Random Pattern >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( data : ĠList < Random Pattern >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading Progress . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( this @ MainActivity . application Context ). load ( data [ 0 ]. imageUrl ). center Crop (). into ( v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . set BackgroundColor ( int Color ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : Ġjava . lang . Exception ){} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading Progress . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} else Ġif ( v Ġis ĠShape Base ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmain ViewModel . getRandom Color ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApiResponse Listener < List < Random Color >> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( data : ĠList < Random Color >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading Progress . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . update Color ( data [ 0 ]. hex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . loading Progress . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġv . update Color ( random Hex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Moving ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . shape Moving Ġ= Ġv ĊĠĠĠ Ġ} Ċ }