Rework the loading workflow to be more natural and fix some nasty bugs. Make the...
[debian/openrocket] / android / src / net / sf / openrocket / android / rocket / OpenRocketLoaderFragment.java
index 89c202c3d3db539d0f0b1b2ec10065e2baa6d582..e6dc5dd3b2e751c2af2d0b43fdee85406abe872b 100644 (file)
@@ -2,12 +2,13 @@ package net.sf.openrocket.android.rocket;
 \r
 import java.io.File;\r
 \r
+import net.sf.openrocket.R;\r
 import net.sf.openrocket.android.util.AndroidLogWrapper;\r
 import net.sf.openrocket.android.util.ProgressDialogFragment;\r
 import net.sf.openrocket.document.OpenRocketDocument;\r
 import net.sf.openrocket.file.DatabaseMotorFinderWithMissingMotors;\r
+import net.sf.openrocket.file.GeneralRocketLoader;\r
 import net.sf.openrocket.file.RocketLoadException;\r
-import net.sf.openrocket.file.openrocket.importt.OpenRocketLoader;\r
 import android.app.Activity;\r
 import android.os.AsyncTask;\r
 import android.os.Bundle;\r
@@ -17,12 +18,12 @@ import android.view.LayoutInflater;
 import android.view.View;\r
 import android.view.ViewGroup;\r
 \r
-public class OpenRocketLoaderFragment extends Fragment {\r
+import com.actionbarsherlock.app.SherlockFragment;\r
+\r
+public class OpenRocketLoaderFragment extends SherlockFragment {\r
        \r
        private final static String FILE_ARG_KEY = "file";\r
        \r
-       private final static String LOADING_MESSAGE = "Loading file...";\r
-\r
        public interface OnOpenRocketFileLoaded {\r
                public void onOpenRocketFileLoaded( OpenRocketLoaderResult result );\r
        }\r
@@ -74,7 +75,8 @@ public class OpenRocketLoaderFragment extends Fragment {
                @Override\r
                protected void onPreExecute() {\r
                        super.onPreExecute();\r
-                       DialogFragment newFragment = ProgressDialogFragment.newInstance("", LOADING_MESSAGE);\r
+                       String loading = getActivity().getResources().getString(R.string.loading);\r
+                       DialogFragment newFragment = ProgressDialogFragment.newInstance("", loading);\r
                        newFragment.show(getFragmentManager(), PROGRESS_DIALOG_TAG);\r
                }\r
 \r
@@ -85,27 +87,30 @@ public class OpenRocketLoaderFragment extends Fragment {
                protected OpenRocketLoaderResult doInBackground(File... arg0) {\r
                        AndroidLogWrapper.d(OpenRocketLoaderTask.class, "doInBackgroud");\r
                        \r
-                       OpenRocketLoader rocketLoader = new OpenRocketLoader();\r
+                       GeneralRocketLoader rocketLoader = new GeneralRocketLoader();\r
+                       OpenRocketLoaderResult result = new OpenRocketLoaderResult();\r
                        try {\r
-                               OpenRocketLoaderResult result = new OpenRocketLoaderResult();\r
                                OpenRocketDocument rocket = rocketLoader.load(arg0[0], new DatabaseMotorFinderWithMissingMotors());\r
+                               rocket.getDefaultConfiguration().setAllStages();\r
                                result.rocket = rocket;\r
                                result.warnings = rocketLoader.getWarnings();\r
-                               return result;\r
                        } catch (RocketLoadException ex) {\r
-                               AndroidLogWrapper.e(OpenRocketLoaderTask.class, "doInBackground rocketLaoder.load threw", ex);\r
+                               AndroidLogWrapper.e(OpenRocketLoaderTask.class, "doInBackground rocketLaoder.load threw {}", ex);\r
+                               result.loadingError = ex;\r
                        }\r
-                       return null;\r
+                       return result;\r
                        \r
                }\r
 \r
                @Override\r
                protected void onPostExecute(OpenRocketLoaderResult result) {\r
                        super.onPostExecute(result);\r
-                       AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Finished loading " + OpenRocketLoaderTask.this);\r
+                       AndroidLogWrapper.d(OpenRocketLoaderFragment.class,"Finished loading " + OpenRocketLoaderTask.this);\r
                        Fragment progress = getActivity().getSupportFragmentManager().findFragmentByTag(PROGRESS_DIALOG_TAG);\r
                        if ( progress != null ) {\r
-                               ((DialogFragment)progress).dismiss();\r
+                               // Remove the fragment instead of trying to use DialogFragment.dismiss.\r
+                               // If the dialog is now currently shown, dismiss fails.\r
+                               getFragmentManager().beginTransaction().remove(progress).commitAllowingStateLoss();\r
                        }\r
                        if ( listener != null ) {\r
                                listener.onOpenRocketFileLoaded(result);\r