diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index 99419d1bf..daa4f0d62 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -56,9 +56,8 @@
android:scheme="file" />
-
+
diff --git a/android/src/net/sf/openrocket/android/rocket/Component.java b/android/src/net/sf/openrocket/android/rocket/Component.java
index 1cdbc07fa..ac8f1f993 100644
--- a/android/src/net/sf/openrocket/android/rocket/Component.java
+++ b/android/src/net/sf/openrocket/android/rocket/Component.java
@@ -31,13 +31,12 @@ public class Component extends Fragment {
}
@Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
+ public void onResume() {
+ super.onResume();
final OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();
componentTree.setAdapter( buildAdapter( rocketDocument.getRocket() ) );
}
-
+
private ListAdapter buildAdapter( Rocket rocket ) {
TreeStateManager manager = new InMemoryTreeStateManager();
diff --git a/android/src/net/sf/openrocket/android/rocket/Configurations.java b/android/src/net/sf/openrocket/android/rocket/Configurations.java
index 267507ab9..34c536427 100644
--- a/android/src/net/sf/openrocket/android/rocket/Configurations.java
+++ b/android/src/net/sf/openrocket/android/rocket/Configurations.java
@@ -42,6 +42,12 @@ public class Configurations extends ExpandableListFragment {
return v;
}
+ @Override
+ public void onResume() {
+ setup();
+ super.onResume();
+ }
+
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.rocket_viewer_configurations_option_menu, menu);
@@ -59,14 +65,6 @@ public class Configurations extends ExpandableListFragment {
}
}
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
-
- setup();
-
- }
-
public void refreshConfigsList() {
setup();
}
diff --git a/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderFragment.java b/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderFragment.java
index 99922752a..1c3e229b5 100644
--- a/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderFragment.java
+++ b/android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderFragment.java
@@ -105,7 +105,7 @@ public class OpenRocketLoaderFragment extends Fragment {
AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Finished loading " + OpenRocketLoaderTask.this);
Fragment progress = getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);
if ( progress != null ) {
- ((DialogFragment)progress).dismiss();
+ ((ProgressDialogFragment)progress).dismissAllowingStateLoss();
}
if ( listener != null ) {
listener.onOpenRocketFileLoaded(result);
diff --git a/android/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java b/android/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java
index 94beaffe2..7673f3116 100644
--- a/android/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java
+++ b/android/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java
@@ -10,6 +10,7 @@ import net.sf.openrocket.android.simulation.SimulationChart;
import net.sf.openrocket.android.simulation.SimulationViewActivity;
import net.sf.openrocket.android.simulation.SimulationViewFragment;
import net.sf.openrocket.android.util.AndroidLogWrapper;
+import net.sf.openrocket.document.OpenRocketDocument;
import net.sf.openrocket.document.Simulation;
import android.app.AlertDialog;
import android.content.Intent;
@@ -41,7 +42,17 @@ implements Simulations.OnSimulationSelectedListener
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setTitle(CurrentRocketHolder.getCurrentRocket().getRocketDocument().getRocket().getName());
+ // If the application sleeps for a long time, the CurrentRocketHolder might get cleaned
+ // up. When this happens, we cannot restore this state, so instead we just
+ // go home.
+ OpenRocketDocument rocDoc = CurrentRocketHolder.getCurrentRocket().getRocketDocument();
+ if ( rocDoc == null ) {
+ AndroidLogWrapper.d(OpenRocketViewer.class, "No document - go home");
+ ActivityHelpers.goHome(this);
+ finish();
+ return;
+ }
+ setTitle(rocDoc.getRocket().getName());
getSupportActionBar().setHomeButtonEnabled(true);
setContentView(R.layout.openrocketviewer);
@@ -59,10 +70,7 @@ implements Simulations.OnSimulationSelectedListener
@Override
protected void onResume() {
RocketChangedEventHandler handler = new RocketChangedEventHandler();
- // Fire change notices so the displayed lists get updated.
- // This is primarily because simulations run in the background
- handler.doSimsChanged();
- CurrentRocketHolder.getCurrentRocket().setHandler( handler );
+ CurrentRocketHolder.getCurrentRocket().setHandler(handler);
super.onResume();
}
diff --git a/android/src/net/sf/openrocket/android/rocket/Overview.java b/android/src/net/sf/openrocket/android/rocket/Overview.java
index e4c226fd9..33cedaeb7 100644
--- a/android/src/net/sf/openrocket/android/rocket/Overview.java
+++ b/android/src/net/sf/openrocket/android/rocket/Overview.java
@@ -55,6 +55,11 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
prefs.registerOnSharedPreferenceChangeListener(this);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
setup();
}
diff --git a/android/src/net/sf/openrocket/android/rocket/Simulations.java b/android/src/net/sf/openrocket/android/rocket/Simulations.java
index e121cdaf5..4ceb210f5 100644
--- a/android/src/net/sf/openrocket/android/rocket/Simulations.java
+++ b/android/src/net/sf/openrocket/android/rocket/Simulations.java
@@ -87,6 +87,11 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());
prefs.registerOnSharedPreferenceChangeListener(this);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
setup();
}
diff --git a/android/src/net/sf/openrocket/android/util/ProgressDialogFragment.java b/android/src/net/sf/openrocket/android/util/ProgressDialogFragment.java
index d095a5c9e..954f714a6 100644
--- a/android/src/net/sf/openrocket/android/util/ProgressDialogFragment.java
+++ b/android/src/net/sf/openrocket/android/util/ProgressDialogFragment.java
@@ -1,5 +1,7 @@
package net.sf.openrocket.android.util;
+import java.lang.reflect.Method;
+
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
@@ -18,6 +20,18 @@ public class ProgressDialogFragment extends DialogFragment {
return fragment;
}
+ /**
+ * Expose the private method to allow dismissing a dialog after saveInstanceState.
+ */
+ public void dismissAllowingStateLoss() {
+ try {
+ Method dismissInternalMethod = ProgressDialogFragment.class.getMethod("dismissInternal", Boolean.class);
+ dismissInternalMethod.setAccessible(true);
+ dismissInternalMethod.invoke(this, true);
+ } catch (Exception ex ) {
+ AndroidLogWrapper.d(ProgressDialogFragment.class, "Exception calling dismissAllowingStateInteral");
+ }
+ }
@Override
public void onCreate(Bundle savedInstanceState) {