package Ġcom . example . pod classic . widget Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . Toast Ċ import Ġcom . example . pod classic .` object `. Core Ċ import Ġcom . example . pod classic .` object `. MediaPlayer Ċ import Ġcom . example . pod classic . util . Values Ċ import Ġcom . example . pod classic . util . Volume Util Ċ import Ġkotlin . math . abs Ċ import Ġkotlin . math . atan 2 Ċ Ċ import Ġkotlin . math . min Ċ import Ġkotlin . math . sqrt Ċ Ċ class ĠButton Controller Ġ: Ġandroidx . appcompat . widget . AppCompat ImageView Ġ{ ĊĠĠĠ Ġconstructor ( context Ġ: ĠContext ) Ġ: Ġsuper ( context ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?) Ġ: Ġsuper ( context , Ġattrs ) ĊĠĠĠ Ġconstructor ( context : ĠContext , Ġattrs : ĠAttributeSet ?, Ġdef Style Attr : ĠInt ) Ġ: Ġsuper ( context , Ġattrs , Ġdef Style Attr ) ĊĊĠĠĠ Ġprivate Ġvar Ġcenter X Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġcenter Y Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġcenter Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġmin R Ġ= Ġ 0 f ĊĠĠĠ Ġprivate Ġvar Ġmax R Ġ= Ġ 0 f ĊĊĠĠĠ Ġoverride Ġfun Ġon Measure ( width Measure Spec : ĠInt , Ġheight Measure Spec : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Measure ( width Measure Spec , Ġheight Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= ĠMeasure Spec . getSize ( width Measure Spec ) ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= ĠMeasure Spec . getSize ( height Measure Spec ) ĊĊĠĠĠĠĠĠĠ Ġval Ġwidth Ġ= Ġmin ( x , Ġy ) ĊĠĠĠĠĠĠĠ Ġcenter X Ġ= Ġwidth Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġcenter Y Ġ= Ġcenter X ĊĠĠĠĠĠĠĠ Ġcenter Ġ= Ġcenter X ĊĊĊĠĠĠĠĠĠĠ Ġmax R Ġ= Ġwidth Ġ/ Ġ 2 f ĊĠĠĠĠĠĠĠ Ġmin R Ġ= Ġmax R Ġ/ Ġ 1 6 Ġ* Ġ 5 ĊĊĠĠĠĠĠĠĠ Ġset Measured Dimension ( width , Ġwidth ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun Ġon Touch Event ( event : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( event Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Touch Event ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( event . action Ġ!= ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Touch Event ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġx Ġ= Ġevent . x Ġ- Ġcenter X ĊĠĠĠĠĠĠĠ Ġval Ġy Ġ= Ġevent . y Ġ- Ġcenter Y ĊĊĠĠĠĠĠĠĠ Ġval Ġr Ġ= Ġsqrt ( x Ġ* Ġx Ġ+ Ġy Ġ* Ġy ) ĊĠĠĠĠĠĠĠ Ġif Ġ( r Ġ> Ġmax R ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Touch Event ( event ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġvar Ġdeg Ġ= ĠMath . to Degrees ( atan 2 ( y . toDouble (), Ġx . toDouble ())). toInt () ĊĠĠĠĠĠĠĠ Ġif Ġ( deg Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdeg Ġ+= Ġ 3 6 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġval Ġin Center Ġ= Ġr Ġ>= Ġ 0 Ġ&& Ġr Ġ< Ġmin R ĊĠĠĠĠĠĠĠ Ġval Ġin Circle Ġ= Ġr Ġin Ġmin R .. max R ĊĠĠĠĠĠĠĠ Ġif Ġ( in Center ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( MediaPlayer . get Play List (). size Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player . shuffle Play () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMedia Player . pause () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( in Circle ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( deg ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 4 5 .. 1 3 5 Ġ-> Ġ{ ĠVolume Util . volume Down () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 1 3 5 .. 2 2 5 Ġ-> Ġ{ ĠMedia Player . prev () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 2 2 5 .. 3 1 5 Ġ-> Ġ{ ĠVolume Util . volume Up () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 3 1 5 .. 3 6 0 Ġ-> Ġ{ ĠMedia Player . next () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġ 0 .. 4 5 Ġ-> Ġ{ ĠMedia Player . next () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠVolume Util . vi br ate ( this ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} Ċ }