import net.sf.openrocket.android.simulation.SimulationViewActivity;\r
import net.sf.openrocket.android.simulation.SimulationViewFragment;\r
import net.sf.openrocket.android.util.AndroidLogWrapper;\r
+import net.sf.openrocket.document.OpenRocketDocument;\r
import net.sf.openrocket.document.Simulation;\r
import android.app.AlertDialog;\r
import android.content.Intent;\r
private final static int TABSIZE = 4;\r
\r
private OpenRocketViewerPagerAdapter viewPagerAdapter;\r
+ \r
+ private MenuItem saveAction;\r
\r
@Override\r
protected void onCreate(Bundle savedInstanceState) {\r
super.onCreate(savedInstanceState);\r
\r
- setTitle(CurrentRocketHolder.getCurrentRocket().getRocketDocument().getRocket().getName());\r
+ // If the application sleeps for a long time, the CurrentRocketHolder might get cleaned\r
+ // up. When this happens, we cannot restore this state, so instead we just\r
+ // go home.\r
+ OpenRocketDocument rocDoc = CurrentRocketHolder.getCurrentRocket().getRocketDocument();\r
+ if ( rocDoc == null ) {\r
+ AndroidLogWrapper.d(OpenRocketViewer.class, "No document - go home");\r
+ ActivityHelpers.goHome(this);\r
+ finish();\r
+ return;\r
+ }\r
+ setTitle(rocDoc.getRocket().getName());\r
getSupportActionBar().setHomeButtonEnabled(true);\r
\r
setContentView(R.layout.openrocketviewer);\r
@Override\r
protected void onResume() {\r
RocketChangedEventHandler handler = new RocketChangedEventHandler();\r
- // Fire change notices so the displayed lists get updated.\r
- // This is primarily because simulations run in the background\r
- handler.doSimsChanged();\r
- CurrentRocketHolder.getCurrentRocket().setHandler( handler );\r
+ CurrentRocketHolder.getCurrentRocket().setHandler(handler);\r
super.onResume();\r
}\r
\r
public boolean onCreateOptionsMenu(Menu menu) {\r
MenuInflater inflater = getSupportMenuInflater();\r
inflater.inflate(R.menu.rocket_viewer_option_menu, menu);\r
+ saveAction = menu.findItem(R.id.menu_save);\r
return true;\r
}\r
\r
// FIXME - Probably want to open a dialog here.\r
try {\r
CurrentRocketHolder.getCurrentRocket().saveOpenRocketDocument();\r
+ saveAction.setVisible(false);\r
+ invalidateOptionsMenu();\r
} catch ( IOException iex ) {\r
AndroidLogWrapper.d(OpenRocketViewer.class, iex.getMessage());\r
}\r
}\r
\r
private class RocketChangedEventHandler extends net.sf.openrocket.android.RocketChangedEventHandler {\r
-\r
\r
@Override\r
protected void doSimsChanged() {\r
+ if (saveAction != null ) {\r
+ saveAction.setVisible(true);\r
+ invalidateOptionsMenu();\r
+ }\r
Simulations sims = (Simulations) viewPagerAdapter.getFragmentAtPos(SIMS_POS);\r
if ( sims != null ) {\r
sims.refreshSimulationList();\r
\r
@Override\r
protected void doMotorConfigsChanged() {\r
+ if (saveAction != null ) {\r
+ saveAction.setVisible(true);\r
+ invalidateOptionsMenu();\r
+ }\r
Configurations configs = (Configurations) viewPagerAdapter.getFragmentAtPos(CONFIGS_POS);\r
if ( configs != null ) {\r
configs.refreshConfigsList();\r