Use a different approach to prevent ForceClose after the application has been put...
authorkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Thu, 21 Jun 2012 19:10:06 +0000 (19:10 +0000)
committerkruland2607 <kruland2607@180e2498-e6e9-4542-8430-84ac67f01cd8>
Thu, 21 Jun 2012 19:10:06 +0000 (19:10 +0000)
git-svn-id: https://openrocket.svn.sourceforge.net/svnroot/openrocket/trunk@797 180e2498-e6e9-4542-8430-84ac67f01cd8

android/AndroidManifest.xml
android/src/net/sf/openrocket/android/rocket/Component.java
android/src/net/sf/openrocket/android/rocket/Configurations.java
android/src/net/sf/openrocket/android/rocket/OpenRocketLoaderFragment.java
android/src/net/sf/openrocket/android/rocket/OpenRocketViewer.java
android/src/net/sf/openrocket/android/rocket/Overview.java
android/src/net/sf/openrocket/android/rocket/Simulations.java
android/src/net/sf/openrocket/android/util/ProgressDialogFragment.java

index 99419d1bf07bcdae2dec316eaa8320824566eea2..daa4f0d62ceaaef9c3ed6c68c0f5c4286c0fdd1e 100644 (file)
@@ -56,9 +56,8 @@
                     android:scheme="file" />\r
             </intent-filter>\r
         </activity>\r
-        <activity\r
-            android:name=".android.rocket.OpenRocketViewer"\r
-            android:finishOnTaskLaunch="true" />\r
+        <activity android:name=".android.rocket.OpenRocketViewer"\r
+            android:windowSoftInputMode="adjustPan" />\r
         <activity android:name=".android.PreferencesActivity" >\r
             <intent-filter>\r
                 <action android:name="net.sf.openrocket.android.PreferencesActivity" />\r
index 1cdbc07fa4dbfa4391b2b31b498e2e2bbf980579..ac8f1f993ec6115318971e7d94b10a5900110722 100644 (file)
@@ -31,13 +31,12 @@ public class Component extends Fragment {
        }\r
 \r
        @Override\r
-       public void onActivityCreated(Bundle savedInstanceState) {\r
-               super.onActivityCreated(savedInstanceState);\r
-\r
+       public void onResume() {\r
+               super.onResume();\r
                final OpenRocketDocument rocketDocument = CurrentRocketHolder.getCurrentRocket().getRocketDocument();\r
                componentTree.setAdapter( buildAdapter( rocketDocument.getRocket() ) );\r
        }\r
-       \r
+\r
        private ListAdapter buildAdapter( Rocket rocket ) {\r
 \r
                TreeStateManager<RocketComponentWithId> manager = new InMemoryTreeStateManager<RocketComponentWithId>();\r
index 267507ab91148217f7005d05b031d23888346e43..34c536427eb6badd7d125ff8e9ad78178c8a8173 100644 (file)
@@ -42,6 +42,12 @@ public class Configurations extends ExpandableListFragment {
                return v;\r
        }\r
 \r
+       @Override\r
+       public void onResume() {\r
+               setup();\r
+               super.onResume();\r
+       }\r
+\r
        @Override\r
        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {\r
                inflater.inflate(R.menu.rocket_viewer_configurations_option_menu, menu);\r
@@ -59,14 +65,6 @@ public class Configurations extends ExpandableListFragment {
                }\r
        }\r
 \r
-       @Override\r
-       public void onActivityCreated(Bundle savedInstanceState) {\r
-               super.onActivityCreated(savedInstanceState);\r
-\r
-               setup();\r
-\r
-       }\r
-       \r
        public void refreshConfigsList() {\r
                setup();\r
        }\r
index 99922752a0798cce6243dd1410d101e16f851206..1c3e229b57a41138e8ee79503c32a5fe4a5aaaa3 100644 (file)
@@ -105,7 +105,7 @@ public class OpenRocketLoaderFragment extends Fragment {
                        AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Finished loading " + OpenRocketLoaderTask.this);\r
                        Fragment progress = getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);\r
                        if ( progress != null ) {\r
-                               ((DialogFragment)progress).dismiss();\r
+                               ((ProgressDialogFragment)progress).dismissAllowingStateLoss();\r
                        }\r
                        if ( listener != null ) {\r
                                listener.onOpenRocketFileLoaded(result);\r
index 94beaffe2b410254d635bc1c85d0852feaf1f978..7673f311641a8378edf116f08cd9a001dfc6ed1a 100644 (file)
@@ -10,6 +10,7 @@ import net.sf.openrocket.android.simulation.SimulationChart;
 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
@@ -41,7 +42,17 @@ implements Simulations.OnSimulationSelectedListener
        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
@@ -59,10 +70,7 @@ implements Simulations.OnSimulationSelectedListener
        @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
index e4c226fd997d88c8035e7c74e9b3e01c89fa3557..33cedaeb7b9744995bc802f8934a7fd6551a6769 100644 (file)
@@ -55,6 +55,11 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
                SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());\r
                prefs.registerOnSharedPreferenceChangeListener(this);\r
 \r
+       }\r
+\r
+       @Override\r
+       public void onResume() {\r
+               super.onResume();\r
                setup();\r
 \r
        }\r
index e121cdaf58050943807264c67c32c8066c072a1e..4ceb210f53e70a222c37ea26b49a8d856a4cbb34 100644 (file)
@@ -87,6 +87,11 @@ implements SharedPreferences.OnSharedPreferenceChangeListener
                SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getActivity());\r
                prefs.registerOnSharedPreferenceChangeListener(this);\r
 \r
+       }\r
+\r
+       @Override\r
+       public void onResume() {\r
+               super.onResume();\r
                setup();\r
 \r
        }\r
index d095a5c9efd0515ad11895055ac535f81856013c..954f714a650cbccf78a40d026e1ad42fbae1c497 100644 (file)
@@ -1,5 +1,7 @@
 package net.sf.openrocket.android.util;\r
 \r
+import java.lang.reflect.Method;\r
+\r
 import android.app.ProgressDialog;\r
 import android.os.Bundle;\r
 import android.support.v4.app.DialogFragment;\r
@@ -18,6 +20,18 @@ public class ProgressDialogFragment extends DialogFragment {
                return fragment;\r
        }\r
 \r
+       /**\r
+        * Expose the private method to allow dismissing a dialog after saveInstanceState.\r
+        */\r
+       public void dismissAllowingStateLoss() {\r
+               try {\r
+                       Method dismissInternalMethod = ProgressDialogFragment.class.getMethod("dismissInternal", Boolean.class);\r
+                       dismissInternalMethod.setAccessible(true);\r
+                       dismissInternalMethod.invoke(this, true);\r
+               } catch (Exception ex ) {\r
+                       AndroidLogWrapper.d(ProgressDialogFragment.class, "Exception calling dismissAllowingStateInteral");\r
+               }\r
+       }\r
 \r
        @Override\r
        public void onCreate(Bundle savedInstanceState) {\r