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
import android.app.AlertDialog;\r
import android.content.DialogInterface;\r
import android.content.Intent;\r
+import android.content.SharedPreferences;\r
+import android.content.res.Resources;\r
import android.os.Bundle;\r
+import android.preference.PreferenceManager;\r
import android.support.v4.app.Fragment;\r
import android.support.v4.app.FragmentManager;\r
import android.support.v4.app.FragmentPagerAdapter;\r
import android.support.v4.app.FragmentTransaction;\r
import android.support.v4.view.ViewPager;\r
import android.view.View;\r
+import android.widget.Toast;\r
\r
import com.actionbarsherlock.view.Menu;\r
import com.actionbarsherlock.view.MenuInflater;\r
import com.actionbarsherlock.view.MenuItem;\r
+import com.actionbarsherlock.view.Window;\r
\r
public class OpenRocketViewer extends OpenRocketLoaderActivity\r
-implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnOpenRocketFileSaved\r
+implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnOpenRocketFileSaved, SharedPreferences.OnSharedPreferenceChangeListener\r
{\r
\r
private final static int OVERVIEW_POS = 0;\r
private final static int TABSIZE = 4;\r
\r
private OpenRocketViewerPagerAdapter viewPagerAdapter;\r
- \r
+\r
private final static String LOAD_AFTER_SAVE = "net.sf.openrocket.android.loadAfterSave";\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
if (savedInstanceState != null ) {\r
loadAfterSave = savedInstanceState.getBoolean(LOAD_AFTER_SAVE);\r
}\r
+ // Must use com.actionbarsherlock.view.Window.FEATURE_INDETERMINATE_PROGRESS\r
+ requestWindowFeature(Window.FEATURE_PROGRESS);\r
+ setSupportProgressBarIndeterminate(true);\r
+\r
setTitle(rocDoc.getRocket().getName());\r
getSupportActionBar().setHomeButtonEnabled(true);\r
\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
\r
@Override\r
protected void onResume() {\r
- RocketChangedEventHandler handler = new RocketChangedEventHandler();\r
- CurrentRocketHolder.getCurrentRocket().setHandler(handler);\r
+ Resources resources = this.getResources();\r
+ autoSaveEnabledKey = resources.getString(R.string.PreferenceAutoSaveOption);\r
+ SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);\r
+ autoSaveEnabled = pref.getBoolean(autoSaveEnabledKey, false);\r
+\r
+ pref.registerOnSharedPreferenceChangeListener(this);\r
+\r
+ handler.register(this);\r
super.onResume();\r
}\r
\r
MenuInflater inflater = getSupportMenuInflater();\r
inflater.inflate(R.menu.rocket_viewer_option_menu, menu);\r
MenuItem saveAction = menu.findItem(R.id.menu_save);\r
- if ( CurrentRocketHolder.getCurrentRocket().isModified() ) {\r
+ if ( CurrentRocketHolder.getCurrentRocket().canSave() ) {\r
saveAction.setVisible(true);\r
saveAction.setShowAsAction( MenuItem.SHOW_AS_ACTION_ALWAYS );\r
} else {\r
@Override\r
public void onClick(DialogInterface dialog, int which) {\r
OpenRocketViewer.this.loadAfterSave = true;\r
- getSupportFragmentManager().beginTransaction()\r
- .add( OpenRocketSaverFragment.newInstance(), "saver")\r
- .commitAllowingStateLoss();\r
+ OpenRocketViewer.this.saveRocketDocument();\r
}\r
});\r
builder.create().show();\r
}\r
return true;\r
case R.id.menu_save:\r
- getSupportFragmentManager().beginTransaction()\r
- .add( OpenRocketSaverFragment.newInstance(), "saver")\r
- .commitAllowingStateLoss();\r
+ OpenRocketViewer.this.saveRocketDocument();\r
return true;\r
case android.R.id.home:\r
ActivityHelpers.goHome(this);\r
return super.onMenuItemSelected(featureId, item);\r
}\r
\r
+ @Override\r
+ public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {\r
+ if ( autoSaveEnabledKey.equals(arg1) ) {\r
+ autoSaveEnabled = arg0.getBoolean(autoSaveEnabledKey, false);\r
+ }\r
+ }\r
+\r
@Override\r
public void onSimulationSelected(int simulationId) {\r
\r
Simulation sim = CurrentRocketHolder.getCurrentRocket().getRocketDocument().getSimulation(simulationId);\r
// Check if there is data for this simulation.\r
if ( sim.getSimulatedData() == null || sim.getSimulatedData().getBranchCount() == 0 ) {\r
- AlertDialog.Builder builder = new AlertDialog.Builder(this);\r
- builder.setMessage("The selected simulation does not have saved data.");\r
- builder.setCancelable(true);\r
- builder.show();\r
+ // This shouldn't happen because the Simulations list does the check.\r
return;\r
}\r
\r
}\r
}\r
\r
+ private void saveRocketDocument() {\r
+ getSupportFragmentManager().beginTransaction()\r
+ .add( OpenRocketSaverFragment.newInstance(true), "saver")\r
+ .commitAllowingStateLoss();\r
+ }\r
+\r
@Override\r
public void onOpenRocketFileSaved(Boolean result) {\r
invalidateOptionsMenu();\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
+ if ( autoSaveEnabled && CurrentRocketHolder.getCurrentRocket().canSave() ) {\r
+ Toast.makeText(OpenRocketViewer.this, R.string.autoSaveMessage, Toast.LENGTH_SHORT).show();\r
+ OpenRocketViewer.this.saveRocketDocument();\r
+ }\r
+ doSimsChanged();\r
+ }\r
\r
@Override\r
protected void doSimsChanged() {\r