Implement autosave rockets. Controlled by preference. When preference is set, the...
[debian/openrocket] / android / src / net / sf / openrocket / android / rocket / OpenRocketViewer.java
index b04f40eef3e4d5f54a947b2188ce320c67b896af..c621dab23a1b931a941cba1830da3e2dc9366502 100644 (file)
@@ -14,20 +14,25 @@ import net.sf.openrocket.document.Simulation;
 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
@@ -37,9 +42,11 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
        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
        @Override\r
        protected void onCreate(Bundle savedInstanceState) {\r
@@ -58,6 +65,10 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
                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
@@ -70,11 +81,20 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
        @Override\r
        protected void onPause() {\r
                CurrentRocketHolder.getCurrentRocket().setHandler(null);\r
+               SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);\r
+               pref.unregisterOnSharedPreferenceChangeListener(this);\r
                super.onPause();\r
        }\r
 \r
        @Override\r
        protected void onResume() {\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
                RocketChangedEventHandler handler = new RocketChangedEventHandler();\r
                CurrentRocketHolder.getCurrentRocket().setHandler(handler);\r
                super.onResume();\r
@@ -119,9 +139,7 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
                                        @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
@@ -130,9 +148,7 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
                        }\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
@@ -150,6 +166,13 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
                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
@@ -185,6 +208,12 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
                }\r
        }\r
 \r
+       private void saveRocketDocument() {\r
+               getSupportFragmentManager().beginTransaction()\r
+               .add( OpenRocketSaverFragment.newInstance(false), "saver")\r
+               .commitAllowingStateLoss();\r
+       }\r
+\r
        @Override\r
        public void onOpenRocketFileSaved(Boolean result) {\r
                invalidateOptionsMenu();\r
@@ -198,6 +227,10 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
 \r
                @Override\r
                protected void doSimsChanged() {\r
+                       if ( autoSaveEnabled ) {\r
+                               Toast.makeText(OpenRocketViewer.this, R.string.autoSaveMessage, Toast.LENGTH_SHORT).show();\r
+                               OpenRocketViewer.this.saveRocketDocument();\r
+                       }\r
                        invalidateOptionsMenu();\r
                        Simulations sims = (Simulations) viewPagerAdapter.getFragmentAtPos(SIMS_POS);\r
                        if ( sims != null ) {\r