package Ġcom . nose trap . event record Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . PixelFormat Ċ import Ġandroid . os . Build Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . Switch Ċ import Ġandroid . widget . Toast Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . google . gson . JsonObject Ċ import Ġcom . nose trap . drag lib . overlay . Drag gable Overlay On Touch Listener Ċ import Ġcom . nose trap . drag lib . overlay . Drag gable Overlay Service Ċ import Ġcom . nose trap . drag lib . overlay . On Drag Listener Ċ import Ġcom . nose trap . event record lib . Action Trigger Listener Ċ import Ġcom . nose trap . event record lib . callback . Recorder Callback Ċ import Ġcom . nose trap . event record lib . Recorder Manager Ċ import Ġcom . nose trap . event record lib . recorder . Action Recorder Ċ Ċ class ĠO Service Ġ: ĠDrag gable Overlay Service () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġplay Button On Touch Listener Ġ: ĠDrag gable Overlay On Touch Listener ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview On Touch Listener : ĠDrag gable Overlay On Touch Listener ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġplayback On Touch Listener : Drag gable Overlay On Touch Listener ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġrecorder : ĠAction Recorder < Recording Data > ĊĠĠĠ Ġprivate Ġval Ġrec orderId Ġ= Ġ 1 ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcode ( intent : ĠIntent ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġinf late View ( R . layout . overlay ) ĊĠĠĠĠĠĠĠ Ġ// Ġval Ġwindow Manager Ġ= Ġget System Service ( Context . WINDOW _ SERVICE ) Ġas ĠWindow Manager ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= ĠWindow Manager . LayoutParams ( WindowManager . LayoutParams . WRAP _ CONTENT , ĠWindow Manager . LayoutParams . WRAP _ CONTENT , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ) ĠWindow Manager . LayoutParams . TYPE _ APPLICATION _ OVER LAY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠWindow Manager . LayoutParams . FLAG _ LAYOUT _ NO _ LIMIT S ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠWindow Manager . LayoutParams . TYPE _ SYSTEM _ ERROR , ĠWindow Manager . LayoutParams . FLAG _ NOT _ TO UCH _ MOD AL Ġor ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠWindow Manager . LayoutParams . FLAG _ NOT _ FOCUS ABLE Ġor ĠWindow Manager . LayoutParams . FLAG _ LAYOUT _ NO _ LIMIT S , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPixel Format . TRANSL UC ENT ) ĊĊĠĠĠĠĠĠĠ Ġval Ġrecorder Manager Ġ= ĠRec order Manager . getInstance ( this ) ĊĠĠĠĠĠĠĠ Ġrecorder Manager . delete Record ings ( recorder Id ) ĊĊĠĠĠĠĠĠĠ Ġwindow Manager . addView ( view , Ġparams ) ĊĊĊĠĠĠĠĠĠĠ Ġ// prepare Ġthe Ġaction Ġtrigger ĊĠĠĠĠĠĠĠ Ġrecorder Ġ= ĠAction Recorder ( this , recorder Id ) ĊĠĠĠĠĠĠĠ Ġval Ġtrigger Ġ= Ġview . findViewById < Switch >( R . id . trigger ) ĊĊĠĠĠĠĠĠĠ Ġtrigger . setOn Checked ChangeListener Ġ{ Ġ_, Ġis Checked Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecording Data Ġ= ĠRecord ing Data ( params . x , Ġparams . y , Ġis Checked ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder . action Performed ( recording Data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġon Action Trigger Ġ= Ġobject : ĠAction Trigger Listener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Trigger ( data : ĠJsonObject ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠGson (). fromJson < Recording Data >( data , Recording Data :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrigger . isChecked Ġ= Ġdata . trigger ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . x Ġ= Ġdata . x ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparams . y Ġ= Ġdata . y ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow Manager . update View Layout ( view , Ġparams ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// inst ati ating Ġthe Ġdraggable Overlay ĠOn Touch Listeners ĊĠĠĠĠĠĠĠ Ġplay Button On Touch Listener Ġ= ĠDrag gable Overlay On Touch Listener ( view , params ) ĊĠĠĠĠĠĠĠ Ġplayback On Touch Listener Ġ= ĠDrag gable Overlay On Touch Listener ( view , params ) ĊĠĠĠĠĠĠĠ Ġview On Touch Listener Ġ= ĠDrag gable Overlay On Touch Listener ( view , params ) ĊĊĠĠĠĠĠĠĠ Ġ// on Drag Listener ĊĠĠĠĠĠĠĠ Ġval Ġon Drag Listener Ġ= Ġobject : ĠOn Drag Listener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drag ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecording Data Ġ= ĠRecord ing Data ( params . x , Ġparams . y , Ġtrigger . isChecked ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder . action Performed ( recording Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// settings Ġon Ġdrag Ġlistener ĊĠĠĠĠĠĠĠ Ġview On Touch Listener . setOn Drag Listener ( on Drag Listener ) ĊĠĠĠĠĠĠĠ Ġplayback On Touch Listener . setOn Drag Listener ( on Drag Listener ) ĊĠĠĠĠĠĠĠ Ġplay Button On Touch Listener . setOn Drag Listener ( on Drag Listener ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġplayback On Touch Listener . setOnClickListener ( View . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( recorder . isIn Play Back Mode ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder . stop Playback () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecord ings Ġ= Ġrecorder Manager . get Record ings ( recorder Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder . toggle Playback ( record ings [ 0 ]. id , on Action Trigger ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġplay Button On Touch Listener . setOnClickListener ( View . OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( recorder . isIn Record Mode ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder . stop Recording () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder . save To Database (" Sample ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecorder . start Recording () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĊ Ċ // setting Ġon Touch Listeners Ġto Ġthe Ġviews ĊĠĠĠĠĠĠĠ Ġview . setOn Touch Listener ( view On Touch Listener ) ĊĠĠĠĠĠĠĠ Ġ( view . findViewById < Button >( R . id . btn )). setOn Touch Listener ( play Button On Touch Listener ) ĊĠĠĠĠĠĠĠ Ġ( view . findViewById < Button >( R . id . playback )). setOn Touch Listener ( playback On Touch Listener ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġregister Drag gable Touch Listener () Ġ{ ĊĠĠĠĠĠĠ Ġregister On Touch Listener ( play Button On Touch Listener ) ĊĠĠĠĠĠĠĠ Ġregister On Touch Listener ( view On Touch Listener ) ĊĠĠĠĠĠĠĠ Ġregister On Touch Listener ( playback On Touch Listener ) ĊĊĠĠĠĠĠĠĠ Ġrecorder . set Recorder Callback ( object Ġ: ĠRec order Callback Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Recording Saved () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Recording Saved () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ O Service ," Saved ĠSaved Recording ", Toast . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Recording Save Progress ( progress : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Recording Save Progress ( progress ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Recording Stopped () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Recording Stopped () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ O Service ," Stopped ĠSaved Recording ", Toast . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Pre Playback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Pre Playback () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ O Service ," Pre Playback ", Toast . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonError ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ O Service ," Error ", Toast . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Recording Started () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Recording Started () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ O Service ," Started ĠSaved Recording ", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Playback Stopped () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Playback Stopped () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ O Service ," Stopped ĠPlay back ", Toast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Playback Started () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Playback Started () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ O Service ," Started ĠPlay back ", Toast . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }