/** Ċ Ġ* ĠBack pack Ġfor ĠAndroid Ġ- ĠSky scanner 's ĠDesign ĠSystem Ċ Ġ* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 - 2 0 2 1 ĠSky scanner ĠLtd Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġnet . sky scanner . back pack . st arr ating Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġkotlin . math . max Ċ import Ġkotlin . math . round ToInt Ċ import Ġnet . sky scanner . back pack . R Ċ import Ġnet . sky scanner . back pack . st arr ating . internal . B pk Star Rating Base Ċ import Ġnet . sky scanner . back pack . util . create Context Theme Wrapper Ċ Ċ open Ġclass ĠB pk Interactive Star Rating Ġ@ Jvm Over loads Ġconstructor ( ĊĠ Ġcontext : ĠContext , ĊĠ Ġattrs : ĠAttributeSet ? Ġ= Ġnull , ĊĠ Ġdef Style Attr : ĠInt Ġ= Ġ 0 Ċ ) Ġ: ĠB pk Star Rating Base ( ĊĠ Ġcontext Ġ= Ġcreate Context Theme Wrapper ( context , Ġattrs , ĠR . attr . b pk Interactive Star Rating Style ), ĊĠ Ġattrs Ġ= Ġattrs , ĊĠ Ġdef Style Attr Ġ= Ġdef Style Attr , ĊĠ Ġempty Ġ= ĠR . drawable . b pk _ star _ outline , ĊĠ Ġhalf Ġ= ĠR . drawable . b pk _ star , ĊĠ Ġfull Ġ= ĠR . drawable . b pk _ star , ĊĠ Ġstar Size Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . b pk Spacing X xl ) Ċ ) Ġ{ ĊĊĠ Ġvar Ġon Rating Changed Listener : Ġ(( Float , ĠFloat ) Ġ-> ĠUnit )? Ġ= Ġnull ĊĊĠ Ġfinal Ġoverride Ġvar Ġrating : ĠFloat ĊĠĠĠ Ġget () Ġ= Ġsuper . rating ĊĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠ Ġval ĠnewValue Ġ= Ġvalue . round ToInt (). toFloat () ĊĠĠĠĠĠ Ġif Ġ( newValue Ġ!= Ġsuper . rating ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . rating Ġ= ĠnewValue ĊĠĠĠĠĠĠĠ Ġon Rating Changed Listener ?. invoke ( newValue , Ġmax Rating . toFloat ()) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠ Ġprivate Ġvar Ġlast Rating : ĠFloat Ġ= Ġrating ĊĊĠ Ġoverride Ġfun Ġdispatch Touch Event ( ev : ĠMotion Event ): ĠBoolean Ġ{ ĊĠĠĠ Ġif Ġ( ev . action Ġ== ĠMotion Event . ACTION _ DOWN ) Ġ{ ĊĠĠĠĠĠ Ġlast Rating Ġ= Ġrating ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġx Ġ= Ġif Ġ( layout Direction Ġ== ĠView . LAYOUT _ DIRECTION _ RTL ) Ġwidth Ġ- Ġev . x Ġelse Ġev . x ĊĠĠĠ Ġval Ġitem Width Ġ= Ġwidth Ġ/ Ġmax Rating ĊĠĠĠ Ġval Ġselected Items Ġ= Ġx Ġ/ Ġitem Width ĊĠĠĠ Ġsuper . rating Ġ= Ġmax ( 1 f , Ġselected Items Ġ+ Ġ 0 . 5 f ). round ToInt (). toFloat () ĊĊĠĠĠ Ġif Ġ( ev . action Ġ== ĠMotion Event . ACTION _ UP ) Ġ{ ĊĠĠĠĠĠ Ġon Rating Changed Listener ?. invoke ( rating , Ġmax Rating . toFloat ()) ĊĠĠĠ Ġ} ĊĠĠĠ Ġif Ġ( ev . action Ġ== ĠMotion Event . ACTION _ CANCEL ) Ġ{ ĊĠĠĠĠĠ Ġsuper . rating Ġ= Ġlast Rating ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġreturn Ġtrue ĊĠ Ġ} ĊĊĠ Ġinterface ĠOn Rating Changed Listener Ġ: Ġ( Float , ĠFloat ) Ġ-> ĠUnit Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġinvoke ( current : ĠFloat , Ġmax : ĠFloat ) ĊĠ Ġ} Ċ } Ċ