Implement autosave rockets. Controlled by preference. When preference is set, the rocket is automatically saved when simulation changed events are fired. This is really too often since addSimulation should not cause rocket to be saved.
This commit is contained in:
parent
b835dd08b4
commit
fed956e2b0
@ -6,6 +6,7 @@
|
|||||||
<string name="PreferenceUseInternalFileBrowserOption">PreferenceUseInternalFileBrowserOpion</string>
|
<string name="PreferenceUseInternalFileBrowserOption">PreferenceUseInternalFileBrowserOpion</string>
|
||||||
<string name="PreferenceFileBrowserBaseDirectory">PreferenceFileBrowserBaseDirectory</string>
|
<string name="PreferenceFileBrowserBaseDirectory">PreferenceFileBrowserBaseDirectory</string>
|
||||||
<string name="PreferenceShowOnlyOrkFiles">PreferenceShowOnlyOrkFiles</string>
|
<string name="PreferenceShowOnlyOrkFiles">PreferenceShowOnlyOrkFiles</string>
|
||||||
|
<string name="PreferenceAutoSaveOption">PreferenceAutoSaveOption</string>
|
||||||
|
|
||||||
<string-array name="PreferenceMotorBrowserGroupingValues">
|
<string-array name="PreferenceMotorBrowserGroupingValues">
|
||||||
<item>0</item>
|
<item>0</item>
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
<string name="loadWarnUnsaved">Would you like to save the changes to the current model?</string>
|
<string name="loadWarnUnsaved">Would you like to save the changes to the current model?</string>
|
||||||
<string name="no">No</string>
|
<string name="no">No</string>
|
||||||
<string name="yes">Yes</string>
|
<string name="yes">Yes</string>
|
||||||
|
<string name="autoSaveMessage">Automatically saving rocket</string>
|
||||||
|
|
||||||
<string-array name="PreferenceMotorBrowserGroupingEntries">
|
<string-array name="PreferenceMotorBrowserGroupingEntries">
|
||||||
<item>Case</item>
|
<item>Case</item>
|
||||||
@ -32,7 +33,12 @@
|
|||||||
<string name="simulationSeries1Label">Series 1</string>
|
<string name="simulationSeries1Label">Series 1</string>
|
||||||
<string name="simulationSeries2Label">Series 2</string>
|
<string name="simulationSeries2Label">Series 2</string>
|
||||||
|
|
||||||
|
<string name="autosavetitle">Autosave Rocket</string>
|
||||||
|
<string name="autosavesummary">Automatically save the rocket document after simulations</string>
|
||||||
|
|
||||||
<string name="motorbrowsergrouptitle">Motor Browser Grouping</string>
|
<string name="motorbrowsergrouptitle">Motor Browser Grouping</string>
|
||||||
|
<string name="motorbrowsergroupsummary">Set the grouping in Motor Browser</string>
|
||||||
|
|
||||||
<string name="motorbrowsertitle">Motor Browser</string>
|
<string name="motorbrowsertitle">Motor Browser</string>
|
||||||
|
|
||||||
<string name="useinternalfilebrowsertitle">Use Internal File Browser</string>
|
<string name="useinternalfilebrowsertitle">Use Internal File Browser</string>
|
||||||
|
@ -8,9 +8,15 @@
|
|||||||
android:entries="@array/PreferenceMotorBrowserGroupingEntries"
|
android:entries="@array/PreferenceMotorBrowserGroupingEntries"
|
||||||
android:entryValues="@array/PreferenceMotorBrowserGroupingValues"
|
android:entryValues="@array/PreferenceMotorBrowserGroupingValues"
|
||||||
android:key="@string/PreferenceMotorBrowserGroupingOption"
|
android:key="@string/PreferenceMotorBrowserGroupingOption"
|
||||||
android:summary="Set the grouping in Motor Browser"
|
android:summary="@string/motorbrowsergroupsummary"
|
||||||
android:title="@string/motorbrowsergrouptitle" />
|
android:title="@string/motorbrowsergrouptitle" />
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:defaultValue="false"
|
||||||
|
android:title="@string/autosavetitle"
|
||||||
|
android:key="@string/PreferenceAutoSaveOption"
|
||||||
|
android:summary="@string/autosavesummary"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:defaultValue="true"
|
android:defaultValue="true"
|
||||||
android:title="@string/useinternalfilebrowsertitle"
|
android:title="@string/useinternalfilebrowsertitle"
|
||||||
|
@ -12,12 +12,16 @@ import android.support.v4.app.Fragment;
|
|||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.view.Window;
|
||||||
|
|
||||||
|
import com.actionbarsherlock.app.SherlockFragmentActivity;
|
||||||
|
|
||||||
public class OpenRocketSaverFragment extends Fragment {
|
public class OpenRocketSaverFragment extends Fragment {
|
||||||
|
|
||||||
public static OpenRocketSaverFragment newInstance() {
|
public static OpenRocketSaverFragment newInstance( boolean showProgressDialog) {
|
||||||
OpenRocketSaverFragment frag = new OpenRocketSaverFragment();
|
OpenRocketSaverFragment frag = new OpenRocketSaverFragment();
|
||||||
Bundle b = new Bundle();
|
Bundle b = new Bundle();
|
||||||
|
b.putBoolean(SHOW_PRGRESS_DIALOG_ARG, showProgressDialog);
|
||||||
frag.setArguments(b);
|
frag.setArguments(b);
|
||||||
return frag;
|
return frag;
|
||||||
}
|
}
|
||||||
@ -25,7 +29,10 @@ public class OpenRocketSaverFragment extends Fragment {
|
|||||||
public interface OnOpenRocketFileSaved {
|
public interface OnOpenRocketFileSaved {
|
||||||
public void onOpenRocketFileSaved( Boolean result );
|
public void onOpenRocketFileSaved( Boolean result );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private final static String SHOW_PRGRESS_DIALOG_ARG = "net.sf.openrocket.android.ShowProgressDialog";
|
||||||
|
|
||||||
|
private boolean showProgressDialog = true;
|
||||||
private OpenRocketSaverTask task;
|
private OpenRocketSaverTask task;
|
||||||
private OnOpenRocketFileSaved listener;
|
private OnOpenRocketFileSaved listener;
|
||||||
|
|
||||||
@ -34,6 +41,9 @@ public class OpenRocketSaverFragment extends Fragment {
|
|||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setRetainInstance(true);
|
setRetainInstance(true);
|
||||||
Bundle b = getArguments();
|
Bundle b = getArguments();
|
||||||
|
if ( b != null ) {
|
||||||
|
showProgressDialog = b.getBoolean(SHOW_PRGRESS_DIALOG_ARG, true);
|
||||||
|
}
|
||||||
if ( task == null ) {
|
if ( task == null ) {
|
||||||
// since we retain instance state, task will be non-null if it is already loading.
|
// since we retain instance state, task will be non-null if it is already loading.
|
||||||
task = new OpenRocketSaverTask();
|
task = new OpenRocketSaverTask();
|
||||||
@ -63,9 +73,15 @@ public class OpenRocketSaverFragment extends Fragment {
|
|||||||
@Override
|
@Override
|
||||||
protected void onPreExecute() {
|
protected void onPreExecute() {
|
||||||
super.onPreExecute();
|
super.onPreExecute();
|
||||||
String savingMessage = getActivity().getResources().getString(R.string.saving);
|
if ( showProgressDialog ) {
|
||||||
DialogFragment newFragment = ProgressDialogFragment.newInstance("", savingMessage);
|
String savingMessage = getActivity().getResources().getString(R.string.saving);
|
||||||
newFragment.show(getFragmentManager(), PROGRESS_DIALOG_TAG);
|
DialogFragment newFragment = ProgressDialogFragment.newInstance("", savingMessage);
|
||||||
|
newFragment.show(getFragmentManager(), PROGRESS_DIALOG_TAG);
|
||||||
|
} else {
|
||||||
|
((SherlockFragmentActivity)getActivity()).setSupportProgressBarIndeterminate(true);
|
||||||
|
((SherlockFragmentActivity)getActivity()).setSupportProgress(0);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
@ -89,11 +105,16 @@ public class OpenRocketSaverFragment extends Fragment {
|
|||||||
protected void onPostExecute(Boolean result) {
|
protected void onPostExecute(Boolean result) {
|
||||||
super.onPostExecute(result);
|
super.onPostExecute(result);
|
||||||
AndroidLogWrapper.d(OpenRocketSaverFragment.class,"Finished saving " + OpenRocketSaverTask.this);
|
AndroidLogWrapper.d(OpenRocketSaverFragment.class,"Finished saving " + OpenRocketSaverTask.this);
|
||||||
Fragment progress = getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);
|
if ( showProgressDialog ) {
|
||||||
if ( progress != null ) {
|
Fragment progress = getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);
|
||||||
// Remove the fragment instead of trying to use DialogFragment.dismiss.
|
if ( progress != null ) {
|
||||||
// If the dialog is now currently shown, dismiss fails.
|
// Remove the fragment instead of trying to use DialogFragment.dismiss.
|
||||||
getFragmentManager().beginTransaction().remove(progress).commitAllowingStateLoss();
|
// If the dialog is now currently shown, dismiss fails.
|
||||||
|
getFragmentManager().beginTransaction().remove(progress).commitAllowingStateLoss();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
((SherlockFragmentActivity)getActivity()).setSupportProgress(Window.PROGRESS_END);
|
||||||
|
((SherlockFragmentActivity)getActivity()).setSupportProgressBarVisibility(false);
|
||||||
}
|
}
|
||||||
if ( listener != null ) {
|
if ( listener != null ) {
|
||||||
listener.onOpenRocketFileSaved(result);
|
listener.onOpenRocketFileSaved(result);
|
||||||
|
@ -14,20 +14,25 @@ import net.sf.openrocket.document.Simulation;
|
|||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentManager;
|
import android.support.v4.app.FragmentManager;
|
||||||
import android.support.v4.app.FragmentPagerAdapter;
|
import android.support.v4.app.FragmentPagerAdapter;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
import android.support.v4.app.FragmentTransaction;
|
||||||
import android.support.v4.view.ViewPager;
|
import android.support.v4.view.ViewPager;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.actionbarsherlock.view.Menu;
|
import com.actionbarsherlock.view.Menu;
|
||||||
import com.actionbarsherlock.view.MenuInflater;
|
import com.actionbarsherlock.view.MenuInflater;
|
||||||
import com.actionbarsherlock.view.MenuItem;
|
import com.actionbarsherlock.view.MenuItem;
|
||||||
|
import com.actionbarsherlock.view.Window;
|
||||||
|
|
||||||
public class OpenRocketViewer extends OpenRocketLoaderActivity
|
public class OpenRocketViewer extends OpenRocketLoaderActivity
|
||||||
implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnOpenRocketFileSaved
|
implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnOpenRocketFileSaved, SharedPreferences.OnSharedPreferenceChangeListener
|
||||||
{
|
{
|
||||||
|
|
||||||
private final static int OVERVIEW_POS = 0;
|
private final static int OVERVIEW_POS = 0;
|
||||||
@ -37,9 +42,11 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
|
|||||||
private final static int TABSIZE = 4;
|
private final static int TABSIZE = 4;
|
||||||
|
|
||||||
private OpenRocketViewerPagerAdapter viewPagerAdapter;
|
private OpenRocketViewerPagerAdapter viewPagerAdapter;
|
||||||
|
|
||||||
private final static String LOAD_AFTER_SAVE = "net.sf.openrocket.android.loadAfterSave";
|
private final static String LOAD_AFTER_SAVE = "net.sf.openrocket.android.loadAfterSave";
|
||||||
private boolean loadAfterSave = false;
|
private boolean loadAfterSave = false;
|
||||||
|
private String autoSaveEnabledKey;
|
||||||
|
private boolean autoSaveEnabled = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -58,6 +65,10 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
|
|||||||
if (savedInstanceState != null ) {
|
if (savedInstanceState != null ) {
|
||||||
loadAfterSave = savedInstanceState.getBoolean(LOAD_AFTER_SAVE);
|
loadAfterSave = savedInstanceState.getBoolean(LOAD_AFTER_SAVE);
|
||||||
}
|
}
|
||||||
|
// Must use com.actionbarsherlock.view.Window.FEATURE_INDETERMINATE_PROGRESS
|
||||||
|
requestWindowFeature(Window.FEATURE_PROGRESS);
|
||||||
|
setSupportProgressBarIndeterminate(true);
|
||||||
|
|
||||||
setTitle(rocDoc.getRocket().getName());
|
setTitle(rocDoc.getRocket().getName());
|
||||||
getSupportActionBar().setHomeButtonEnabled(true);
|
getSupportActionBar().setHomeButtonEnabled(true);
|
||||||
|
|
||||||
@ -70,11 +81,20 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
|
|||||||
@Override
|
@Override
|
||||||
protected void onPause() {
|
protected void onPause() {
|
||||||
CurrentRocketHolder.getCurrentRocket().setHandler(null);
|
CurrentRocketHolder.getCurrentRocket().setHandler(null);
|
||||||
|
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
pref.unregisterOnSharedPreferenceChangeListener(this);
|
||||||
super.onPause();
|
super.onPause();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
|
Resources resources = this.getResources();
|
||||||
|
autoSaveEnabledKey = resources.getString(R.string.PreferenceAutoSaveOption);
|
||||||
|
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
autoSaveEnabled = pref.getBoolean(autoSaveEnabledKey, false);
|
||||||
|
|
||||||
|
pref.registerOnSharedPreferenceChangeListener(this);
|
||||||
|
|
||||||
RocketChangedEventHandler handler = new RocketChangedEventHandler();
|
RocketChangedEventHandler handler = new RocketChangedEventHandler();
|
||||||
CurrentRocketHolder.getCurrentRocket().setHandler(handler);
|
CurrentRocketHolder.getCurrentRocket().setHandler(handler);
|
||||||
super.onResume();
|
super.onResume();
|
||||||
@ -119,9 +139,7 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
OpenRocketViewer.this.loadAfterSave = true;
|
OpenRocketViewer.this.loadAfterSave = true;
|
||||||
getSupportFragmentManager().beginTransaction()
|
OpenRocketViewer.this.saveRocketDocument();
|
||||||
.add( OpenRocketSaverFragment.newInstance(), "saver")
|
|
||||||
.commitAllowingStateLoss();
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
builder.create().show();
|
builder.create().show();
|
||||||
@ -130,9 +148,7 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
case R.id.menu_save:
|
case R.id.menu_save:
|
||||||
getSupportFragmentManager().beginTransaction()
|
OpenRocketViewer.this.saveRocketDocument();
|
||||||
.add( OpenRocketSaverFragment.newInstance(), "saver")
|
|
||||||
.commitAllowingStateLoss();
|
|
||||||
return true;
|
return true;
|
||||||
case android.R.id.home:
|
case android.R.id.home:
|
||||||
ActivityHelpers.goHome(this);
|
ActivityHelpers.goHome(this);
|
||||||
@ -150,6 +166,13 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
|
|||||||
return super.onMenuItemSelected(featureId, item);
|
return super.onMenuItemSelected(featureId, item);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSharedPreferenceChanged(SharedPreferences arg0, String arg1) {
|
||||||
|
if ( autoSaveEnabledKey.equals(arg1) ) {
|
||||||
|
autoSaveEnabled = arg0.getBoolean(autoSaveEnabledKey, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSimulationSelected(int simulationId) {
|
public void onSimulationSelected(int simulationId) {
|
||||||
|
|
||||||
@ -185,6 +208,12 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void saveRocketDocument() {
|
||||||
|
getSupportFragmentManager().beginTransaction()
|
||||||
|
.add( OpenRocketSaverFragment.newInstance(false), "saver")
|
||||||
|
.commitAllowingStateLoss();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onOpenRocketFileSaved(Boolean result) {
|
public void onOpenRocketFileSaved(Boolean result) {
|
||||||
invalidateOptionsMenu();
|
invalidateOptionsMenu();
|
||||||
@ -198,6 +227,10 @@ implements Simulations.OnSimulationSelectedListener, OpenRocketSaverFragment.OnO
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void doSimsChanged() {
|
protected void doSimsChanged() {
|
||||||
|
if ( autoSaveEnabled ) {
|
||||||
|
Toast.makeText(OpenRocketViewer.this, R.string.autoSaveMessage, Toast.LENGTH_SHORT).show();
|
||||||
|
OpenRocketViewer.this.saveRocketDocument();
|
||||||
|
}
|
||||||
invalidateOptionsMenu();
|
invalidateOptionsMenu();
|
||||||
Simulations sims = (Simulations) viewPagerAdapter.getFragmentAtPos(SIMS_POS);
|
Simulations sims = (Simulations) viewPagerAdapter.getFragmentAtPos(SIMS_POS);
|
||||||
if ( sims != null ) {
|
if ( sims != null ) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user