d241cb68a3f85200baf8059c9faef95e2d1ee53f
[debian/openrocket] / android / src / net / sf / openrocket / android / simservice / SimulationService.java
1 package net.sf.openrocket.android.simservice;\r
2 \r
3 import net.sf.openrocket.R;\r
4 import net.sf.openrocket.android.CurrentRocketHolder;\r
5 import net.sf.openrocket.android.util.AndroidLogWrapper;\r
6 import net.sf.openrocket.document.Simulation;\r
7 import net.sf.openrocket.simulation.exception.SimulationException;\r
8 import android.app.IntentService;\r
9 import android.app.Notification;\r
10 import android.app.PendingIntent;\r
11 import android.content.Context;\r
12 import android.content.Intent;\r
13 import android.os.IBinder;\r
14 import android.widget.Toast;\r
15 \r
16 public class SimulationService extends IntentService {\r
17 \r
18         // We use an id (from a dummy string) as the notificationID because it is unique.\r
19         private final static int notificationID = R.string.SimulationServiceNotificationID;\r
20         \r
21         private Notification notification;\r
22         \r
23         public static void executeSimulationTask( Context c, SimulationTask t ) {\r
24                 AndroidLogWrapper.d(SimulationService.class, "Submitting simulation " + t.simulationId );\r
25 \r
26                 CurrentRocketHolder.getCurrentRocket().lockSimulation( c, t.simulationId );\r
27                 \r
28                 Intent intent = new Intent( c, SimulationService.class );\r
29                 intent.putExtra("net.sf.openrocket.simulationtask", t);\r
30                 c.startService(intent);\r
31         }\r
32         \r
33         public SimulationService() {\r
34                 super("OpenRocket Simulation Execution Service");\r
35         }\r
36 \r
37         @Override\r
38         protected void onHandleIntent(Intent intent) {\r
39                 SimulationTask t = (SimulationTask) intent.getSerializableExtra("net.sf.openrocket.simulationtask");\r
40                 try {\r
41                         Simulation sim = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getSimulation(t.simulationId);\r
42                         AndroidLogWrapper.d(SimulationService.class, "simulating " + t.simulationId );\r
43                         sim.simulate();\r
44                         CurrentRocketHolder.getCurrentRocket().unlockSimulation(this, t.simulationId);\r
45                 }\r
46                 catch (SimulationException simex) {\r
47                         Toast.makeText(this, "Error in simulation:" + simex.getMessage(), Toast.LENGTH_LONG ).show();\r
48                 }\r
49         }\r
50 \r
51         @Override\r
52         public IBinder onBind(Intent intent) {\r
53                 return null;\r
54         }\r
55 \r
56         @Override\r
57         public void onCreate() {\r
58                 super.onCreate();\r
59                 \r
60                 this.notification = buildNotification();\r
61                 startForeground(notificationID, notification);\r
62                 \r
63         }\r
64 \r
65         @Override\r
66         public int onStartCommand(Intent intent, int flags, int startId) {\r
67                 super.onStartCommand(intent, flags, startId);\r
68                 return START_STICKY;\r
69         }\r
70 \r
71         \r
72         @Override\r
73         public void onDestroy() {\r
74                 super.onDestroy();\r
75                 stopForeground(true);\r
76         }\r
77 \r
78         private Notification buildNotification( ) {\r
79                 String message = "OpenRocket Simulation Execution";\r
80                 Notification notification = new Notification(R.drawable.or_launcher, message, System.currentTimeMillis());\r
81                 \r
82                 notification.flags = Notification.FLAG_NO_CLEAR;\r
83                 PendingIntent contentIntent = PendingIntent.getActivity( this, 0 , new Intent( ), PendingIntent.FLAG_UPDATE_CURRENT );\r
84                 notification.setLatestEventInfo(this, "OpenRocket", message, contentIntent);\r
85                 return notification;\r
86         }\r
87 }\r