package net.sf.openrocket.android;\r
\r
+import static net.sf.openrocket.android.events.Events.*;\r
+\r
import java.io.File;\r
import java.io.IOException;\r
import java.util.HashSet;\r
import net.sf.openrocket.document.StorageOptions;\r
import net.sf.openrocket.file.openrocket.OpenRocketSaver;\r
import net.sf.openrocket.rocketcomponent.Rocket;\r
+import android.content.Context;\r
+import android.content.Intent;\r
import android.net.Uri;\r
+import android.support.v4.content.LocalBroadcastManager;\r
\r
public class CurrentRocket {\r
\r
private OpenRocketDocument rocketDocument;\r
private WarningSet warnings;\r
\r
- private RocketChangedEventHandler handler;\r
- \r
private boolean isModified = false;\r
private Set<Integer> runningSims = new HashSet<Integer>();\r
- \r
- public void setHandler( RocketChangedEventHandler handler ) {\r
- this.handler = handler;\r
- }\r
- \r
+\r
/**\r
* @return the rocketDocument\r
*/\r
return rocketDocument;\r
}\r
\r
- public void notifySimsChanged() {\r
- synchronized ( this ) {\r
- isModified = true;\r
- }\r
- if ( handler != null ) {\r
- handler.simsChangedMessage();\r
- }\r
+ private void notifySimsChanged( Context context ) {\r
+ Intent msg = new Intent(MESSAGE_ACTION);\r
+ msg.putExtra(TYPE, SIMS_CHANGED);\r
+\r
+ LocalBroadcastManager.getInstance(context).sendBroadcast(msg);\r
}\r
\r
- public void notifySimComplete() {\r
- synchronized ( this ) {\r
- isModified = true;\r
- }\r
- if ( handler != null ) {\r
- handler.simCompleteMessage();\r
- }\r
+ private void notifySimComplete( Context context ) {\r
+ Intent msg = new Intent(MESSAGE_ACTION);\r
+ msg.putExtra(TYPE, SIM_COMPLETE);\r
+\r
+ LocalBroadcastManager.getInstance(context).sendBroadcast(msg);\r
}\r
\r
- public synchronized void lockSimulation( int simulationId ) {\r
+ private void notifyMotorConfigChanged( Context context ) {\r
+ Intent msg = new Intent(MESSAGE_ACTION);\r
+ msg.putExtra(TYPE, CONFIGS_CHANGED);\r
+\r
+ LocalBroadcastManager.getInstance(context).sendBroadcast(msg);\r
+ }\r
+\r
+ public synchronized void lockSimulation( Context context, int simulationId ) {\r
runningSims.add(simulationId);\r
+ // TODO - someday we might want to know about this:\r
+ // notifySimsChanged( context );\r
}\r
- \r
- public synchronized void unlockSimulation( int simulationId ) {\r
+\r
+ public synchronized void unlockSimulation( Context context, int simulationId ) {\r
+ this.isModified = true;\r
runningSims.remove(simulationId);\r
+ notifySimComplete(context);\r
}\r
- \r
+\r
public synchronized Set<Integer> lockedSimulations() {\r
return new HashSet<Integer>(runningSims);\r
}\r
- \r
- public void addNewSimulation() {\r
+\r
+ public synchronized void addNewSimulation( Context context ) {\r
+ isModified = true;\r
Rocket rocket = rocketDocument.getRocket();\r
// FIXME - hopefully the change to the Simulation object will be reverted soon.\r
Simulation newSim = new Simulation(rocketDocument, rocket);\r
newSim.setName(rocketDocument.getNextSimulationName());\r
rocketDocument.addSimulation(newSim);\r
- notifySimsChanged();\r
+ notifySimsChanged(context);\r
}\r
- \r
- public void deleteSimulation( int simulationPos ) {\r
+\r
+ public synchronized void deleteSimulation( Context context, int simulationPos ) {\r
+ isModified = true;\r
rocketDocument.removeSimulation( simulationPos );\r
- notifySimsChanged();\r
+ notifySimsChanged(context);\r
}\r
- \r
- public String addNewMotorConfig() {\r
- synchronized ( this ) {\r
- isModified = true;\r
- }\r
+\r
+ public synchronized String addNewMotorConfig( Context context ) {\r
+ isModified = true;\r
String configId = rocketDocument.getRocket().newMotorConfigurationID();\r
- if ( handler != null ) {\r
- handler.configsChangedMessage();\r
- }\r
+ notifyMotorConfigChanged(context);\r
return configId;\r
}\r
+ \r
/**\r
* @param rocketDocument the rocketDocument to set\r
*/\r
public boolean isModified() {\r
return this.isModified;\r
}\r
- \r
+\r
public boolean canSave() {\r
return this.isModified && this.runningSims.isEmpty();\r
}\r
- \r
+\r
public void saveOpenRocketDocument() throws IOException {\r
- \r
+\r
// Translate the fileUri if it happens to be a .rkt file.\r
\r
String filename = fileUri.getPath();\r
- \r
+\r
if ( ! filename.endsWith(".ork") ) {\r
filename = filename.concat(".ork");\r
}\r
- \r
+\r
OpenRocketSaver saver = new OpenRocketSaver();\r
StorageOptions options = new StorageOptions();\r
options.setCompressionEnabled(true);\r
+++ /dev/null
-package net.sf.openrocket.android;\r
-\r
-import android.os.Handler;\r
-import android.os.Looper;\r
-import android.os.Message;\r
-\r
-public abstract class RocketChangedEventHandler extends Handler {\r
-\r
- public RocketChangedEventHandler() {\r
- }\r
-\r
- public RocketChangedEventHandler(Callback callback) {\r
- super(callback);\r
- }\r
-\r
- public RocketChangedEventHandler(Looper looper) {\r
- super(looper);\r
- }\r
-\r
- public RocketChangedEventHandler(Looper looper, Callback callback) {\r
- super(looper, callback);\r
- }\r
-\r
- public static final int MOTOR_CONFIGS_CHANGED = 1;\r
- public static final int SIMS_CHANGED = 2;\r
- public static final int SIM_COMPLETE = 3;\r
-\r
- public void simCompleteMessage() {\r
- Message m = this.obtainMessage(SIM_COMPLETE);\r
- this.sendMessage(m);\r
- }\r
- \r
- public void simsChangedMessage() {\r
- Message m = this.obtainMessage(SIMS_CHANGED);\r
- this.sendMessage(m);\r
- }\r
- \r
- public void configsChangedMessage() {\r
- Message m = this.obtainMessage(MOTOR_CONFIGS_CHANGED);\r
- this.sendMessage(m);\r
- }\r
-\r
- @Override\r
- public void handleMessage(Message msg) {\r
- int what = msg.what;\r
- switch ( what ) {\r
- case SIMS_CHANGED:\r
- doSimsChanged();\r
- break;\r
- case MOTOR_CONFIGS_CHANGED:\r
- doMotorConfigsChanged();\r
- break;\r
- case SIM_COMPLETE:\r
- doSimComplete();\r
- break;\r
- default:\r
- super.handleMessage(msg);\r
- }\r
- }\r
-\r
- protected abstract void doSimComplete();\r
- \r
- protected abstract void doSimsChanged();\r
- \r
- protected abstract void doMotorConfigsChanged();\r
-\r
-}\r
--- /dev/null
+package net.sf.openrocket.android.events;\r
+\r
+import android.content.BroadcastReceiver;\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.content.IntentFilter;\r
+import android.support.v4.content.LocalBroadcastManager;\r
+\r
+public abstract class ChangeEventBroadcastReceiver extends BroadcastReceiver {\r
+\r
+ public void register( Context context ) {\r
+ LocalBroadcastManager.getInstance(context).registerReceiver( this, \r
+ new IntentFilter(Events.MESSAGE_ACTION) );\r
+ }\r
+ \r
+ public void unregister( Context context ) {\r
+ LocalBroadcastManager.getInstance(context).unregisterReceiver(this);\r
+ }\r
+\r
+ @Override\r
+ public void onReceive(Context context, Intent intent) {\r
+ \r
+ int type = intent.getIntExtra(Events.TYPE, -1);\r
+ switch( type ) {\r
+ case Events.CONFIGS_CHANGED:\r
+ doMotorConfigsChanged();\r
+ break;\r
+ case Events.SIMS_CHANGED:\r
+ doSimsChanged();\r
+ break;\r
+ case Events.SIM_COMPLETE:\r
+ doSimComplete();\r
+ break;\r
+ }\r
+ }\r
+\r
+ protected abstract void doSimComplete();\r
+\r
+ protected abstract void doSimsChanged();\r
+ \r
+ protected abstract void doMotorConfigsChanged();\r
+\r
+}\r
--- /dev/null
+package net.sf.openrocket.android.events;\r
+\r
+public abstract class Events {\r
+\r
+ public final static int SIMS_CHANGED=0;\r
+ public final static int SIM_COMPLETE=1;\r
+ public final static int CONFIGS_CHANGED=2;\r
+ \r
+ public final static String MESSAGE_ACTION = "net.sf.openrocket.Message";\r
+ \r
+ public final static String TYPE = "type";\r
+ \r
+ \r
+}\r
}\r
\r
private void addConfiguration() {\r
- CurrentRocketHolder.getCurrentRocket().addNewMotorConfig();\r
+ CurrentRocketHolder.getCurrentRocket().addNewMotorConfig(getActivity());\r
}\r
\r
private static class MotorMountInfo {\r
import net.sf.openrocket.R;\r
import net.sf.openrocket.android.ActivityHelpers;\r
import net.sf.openrocket.android.CurrentRocketHolder;\r
+import net.sf.openrocket.android.events.ChangeEventBroadcastReceiver;\r
import net.sf.openrocket.android.simulation.SimulationChart;\r
import net.sf.openrocket.android.simulation.SimulationViewActivity;\r
import net.sf.openrocket.android.simulation.SimulationViewFragment;\r
private boolean loadAfterSave = false;\r
private String autoSaveEnabledKey;\r
private boolean autoSaveEnabled = false;\r
+ \r
+ private RocketChangedEventHandler handler = new RocketChangedEventHandler();\r
+\r
\r
@Override\r
protected void onCreate(Bundle savedInstanceState) {\r
\r
@Override\r
protected void onPause() {\r
- CurrentRocketHolder.getCurrentRocket().setHandler(null);\r
+ handler.unregister(this);\r
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);\r
pref.unregisterOnSharedPreferenceChangeListener(this);\r
super.onPause();\r
\r
pref.registerOnSharedPreferenceChangeListener(this);\r
\r
- RocketChangedEventHandler handler = new RocketChangedEventHandler();\r
- CurrentRocketHolder.getCurrentRocket().setHandler(handler);\r
+ handler.register(this);\r
super.onResume();\r
}\r
\r
}\r
}\r
\r
- private class RocketChangedEventHandler extends net.sf.openrocket.android.RocketChangedEventHandler {\r
+ private class RocketChangedEventHandler extends ChangeEventBroadcastReceiver {\r
\r
@Override\r
protected void doSimComplete() {\r
public static void executeSimulationTask( Context c, SimulationTask t ) {\r
AndroidLogWrapper.d(SimulationService.class, "Submitting simulation " + t.simulationId );\r
\r
+ CurrentRocketHolder.getCurrentRocket().lockSimulation( c, t.simulationId );\r
+ \r
Intent intent = new Intent( c, SimulationService.class );\r
intent.putExtra("net.sf.openrocket.simulationtask", t);\r
c.startService(intent);\r
Simulation sim = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getSimulation(t.simulationId);\r
AndroidLogWrapper.d(SimulationService.class, "simulating " + t.simulationId );\r
sim.simulate();\r
- CurrentRocketHolder.getCurrentRocket().unlockSimulation(t.simulationId);\r
- CurrentRocketHolder.getCurrentRocket().notifySimsChanged();\r
+ CurrentRocketHolder.getCurrentRocket().unlockSimulation(this, t.simulationId);\r
}\r
catch (SimulationException simex) {\r
Toast.makeText(this, "Error in simulation:" + simex.getMessage(), Toast.LENGTH_LONG ).show();\r
}\r
\r
public void onDelete( ) {\r
- CurrentRocketHolder.getCurrentRocket().deleteSimulation(simulationId);\r
+ CurrentRocketHolder.getCurrentRocket().deleteSimulation(getActivity(), simulationId);\r
getDialog().dismiss();\r
}\r
\r
}\r
\r
private void addSimulation() {\r
- CurrentRocketHolder.getCurrentRocket().addNewSimulation();\r
+ CurrentRocketHolder.getCurrentRocket().addNewSimulation(getActivity());\r
}\r
\r
}\r