kopia lustrzana https://github.com/ge0rg/aprsdroid
				
				
				
			
		
			
				
	
	
		
			46 wiersze
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Scala
		
	
	
			
		
		
	
	
			46 wiersze
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Scala
		
	
	
package org.aprsdroid.app
 | 
						|
 | 
						|
import _root_.android.content.{BroadcastReceiver, Context, Intent, IntentFilter}
 | 
						|
import _root_.android.os.Handler
 | 
						|
import _root_.android.util.Log
 | 
						|
 | 
						|
 | 
						|
class LocationReceiver2[Result](bg_task : (Intent) => Result,
 | 
						|
				finish_task : (Result) => Unit,
 | 
						|
				cancel_task : (Result) => Unit)
 | 
						|
		extends BroadcastReceiver {
 | 
						|
 | 
						|
	var pending = 0
 | 
						|
 | 
						|
	def startTask(i : Intent) {
 | 
						|
		pending += 1
 | 
						|
		if (pending == 1)
 | 
						|
			new LRAsync(i).execute(null)
 | 
						|
	}
 | 
						|
 | 
						|
	override def onReceive(ctx : Context, i : Intent) {
 | 
						|
		startTask(i)
 | 
						|
	}
 | 
						|
 | 
						|
	class LRAsync(val i : Intent) extends MyAsyncTask[Unit, Result] {
 | 
						|
		override def doInBackground1(params : Array[String]) = {
 | 
						|
			val r = bg_task(i)
 | 
						|
			// here we cheat and call cancel from the bg thread, not from UI
 | 
						|
			if (isCancelled())
 | 
						|
				cancel_task(r)
 | 
						|
			r
 | 
						|
		}
 | 
						|
 | 
						|
		override def onPostExecute(result : Result) {
 | 
						|
			finish_task(result)
 | 
						|
			if (pending > 1) {
 | 
						|
				// something happened, we need to rerun
 | 
						|
				Log.d("LocationReceiver2", "rerunning...")
 | 
						|
				pending = 0
 | 
						|
				startTask(i)
 | 
						|
			} else
 | 
						|
				pending = 0
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |