Revised the notification mechanism for background processes (simulations) to use...
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Tue, 10 Jul 2012 03:40:44 +0000 (03:40 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Tue, 10 Jul 2012 03:40:44 +0000 (03:40 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@876 180e2498-e6e9-4542-8430-84ac67f01cd8

android/src/net/sf/openrocket/android/CurrentRocket.java
android/src/net/sf/openrocket/android/RocketChangedEventHandler.java [deleted file]
android/src/net/sf/openrocket/android/events/ChangeEventBroadcastReceiver.java [new file with mode: 0644]
android/src/net/sf/openrocket/android/events/Events.java [new file with mode: 0644]
android/src/net/sf/openrocket/android/rocket/Configurations.java
android/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java
android/src/net/sf/openrocket/android/simservice/SimulationService.java
android/src/net/sf/openrocket/android/simulation/SimulationEditFragment.java
android/src/net/sf/openrocket/android/simulation/Simulations.java

index 7546808d5c12eaab417a987382e19774ac228289..17e2929a02b46c36d478195021e411269af00529 100644 (file)
@@ -1,5 +1,7 @@
 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
@@ -11,7 +13,10 @@ import net.sf.openrocket.document.Simulation;
 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
@@ -20,15 +25,9 @@ public class CurrentRocket {
        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
@@ -36,60 +35,66 @@ public class CurrentRocket {
                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
@@ -119,21 +124,21 @@ public class CurrentRocket {
        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
diff --git a/android/src/net/sf/openrocket/android/RocketChangedEventHandler.java b/android/src/net/sf/openrocket/android/RocketChangedEventHandler.java
deleted file mode 100644 (file)
index 06668fa..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-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
diff --git a/android/src/net/sf/openrocket/android/events/ChangeEventBroadcastReceiver.java b/android/src/net/sf/openrocket/android/events/ChangeEventBroadcastReceiver.java
new file mode 100644 (file)
index 0000000..55543eb
--- /dev/null
@@ -0,0 +1,43 @@
+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
diff --git a/android/src/net/sf/openrocket/android/events/Events.java b/android/src/net/sf/openrocket/android/events/Events.java
new file mode 100644 (file)
index 0000000..75114d9
--- /dev/null
@@ -0,0 +1,14 @@
+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
index 4e86610b61415268ba424ac905ea9ec455a77919..b588413ac932832621e31a7d5f12dfbff799d78d 100644 (file)
@@ -70,7 +70,7 @@ public class Configurations extends ExpandableListFragment {
        }\r
 \r
        private void addConfiguration() {\r
-               CurrentRocketHolder.getCurrentRocket().addNewMotorConfig();\r
+               CurrentRocketHolder.getCurrentRocket().addNewMotorConfig(getActivity());\r
        }\r
        \r
        private static class MotorMountInfo {\r
index 5274912e6461e225c7bba8316db1464057ee5069..cd1ae74c359dfd955885e9a91304d76bcfcd2982 100644 (file)
@@ -4,6 +4,7 @@ package net.sf.openrocket.android.rocket;
 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
@@ -47,6 +48,9 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
        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
@@ -80,7 +84,7 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
 \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
@@ -95,8 +99,7 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
 \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
@@ -220,7 +223,7 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
                }\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
index 65d9d817149758b739704dd469a551c87f4cbb4b..d241cb68a3f85200baf8059c9faef95e2d1ee53f 100644 (file)
@@ -23,6 +23,8 @@ public class SimulationService extends IntentService {
        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
@@ -39,8 +41,7 @@ public class SimulationService extends IntentService {
                        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
index 147dec98d7b9eebb9c0a3609f1e9c1290bd2295a..b66a3d7c5269e0ed39c6819fccae29d3299a3bcf 100644 (file)
@@ -109,7 +109,7 @@ public class SimulationEditFragment extends SherlockDialogFragment {
        }\r
 \r
        public void onDelete( ) {\r
-               CurrentRocketHolder.getCurrentRocket().deleteSimulation(simulationId);\r
+               CurrentRocketHolder.getCurrentRocket().deleteSimulation(getActivity(), simulationId);\r
                getDialog().dismiss();\r
        }\r
        \r
index 805792b6583d02778f7ca424b40b9265bf577f97..4d8314ae2262aab5ba772bb1b556fbc61062bf7f 100644 (file)
@@ -169,7 +169,7 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
        }\r
 \r
        private void addSimulation() {\r
-               CurrentRocketHolder.getCurrentRocket().addNewSimulation();\r
+               CurrentRocketHolder.getCurrentRocket().addNewSimulation(getActivity());\r
        }\r
        \r
 }\r