Rework the loading workflow to be more natural and fix some nasty bugs. Make the dialogs more localizable by extracting strings into resources.
This commit is contained in:
parent
da430d3611
commit
6a6f926e45
@ -3,6 +3,9 @@
|
||||
|
||||
<string name="app_name">OpenRocket</string>
|
||||
<string name="version">version 12.07-b7</string>
|
||||
<string name="cancel">Cancel</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="dismiss">Dismiss</string>
|
||||
<string name="load">Load</string>
|
||||
<string name="save">Save</string>
|
||||
<string name="Add">Add</string>
|
||||
@ -10,6 +13,9 @@
|
||||
<string name="Download">Download</string>
|
||||
<string name="About">About</string>
|
||||
<string name="Preferences">Preferences</string>
|
||||
<string name="missingMotors">Missing Motors</string>
|
||||
<string name="missingMotorsMessageStart">The following motors are missing:</string>
|
||||
<string name="missingMotorsMessageEnd">Would you like to download them from Thrustcurve?</string>
|
||||
<string name="configurePlot">Change Plot</string>
|
||||
<string name="view_events">View Events</string>
|
||||
<string name="simulationPlotDialogTitle">Select Series And Events</string>
|
||||
|
@ -11,7 +11,6 @@ public abstract class ActivityHelpers {
|
||||
|
||||
public static void goHome( Activity parent ) {
|
||||
Intent i = new Intent(parent, Main.class);
|
||||
i.putExtra(Main.restartFlag, true);
|
||||
i.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP + Intent.FLAG_ACTIVITY_NEW_TASK );
|
||||
parent.startActivity(i);
|
||||
}
|
||||
|
@ -2,7 +2,6 @@ package net.sf.openrocket.android;
|
||||
|
||||
import net.sf.openrocket.R;
|
||||
import net.sf.openrocket.android.rocket.OpenRocketLoaderActivity;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.widget.Button;
|
||||
@ -13,17 +12,10 @@ import com.actionbarsherlock.view.MenuItem;
|
||||
|
||||
public class Main extends OpenRocketLoaderActivity {
|
||||
|
||||
public final static String restartFlag = "restart";
|
||||
|
||||
/** Called when the activity is first created. */
|
||||
@Override
|
||||
public void onCreate(Bundle icicle) {
|
||||
super.onCreate(icicle);
|
||||
Intent i = getIntent();
|
||||
// Rocket already loaded. go to viewer unless we want to restart.
|
||||
if ( ( i.getBooleanExtra(restartFlag, false) == false) && CurrentRocketHolder.getCurrentRocket().getRocketDocument() != null ) {
|
||||
moveOnToViewer();
|
||||
}
|
||||
setContentView(R.layout.main);
|
||||
((Button) findViewById(R.id.main_open)).setOnClickListener(
|
||||
new View.OnClickListener() {
|
||||
@ -48,6 +40,15 @@ public class Main extends OpenRocketLoaderActivity {
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostResume() {
|
||||
super.onPostResume();
|
||||
// Rocket already loaded.
|
||||
if ( !isLoading() && CurrentRocketHolder.getCurrentRocket().getRocketDocument() != null ) {
|
||||
moveOnToViewer();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
MenuInflater inflater = getSupportMenuInflater();
|
||||
|
@ -0,0 +1,59 @@
|
||||
package net.sf.openrocket.android.rocket;
|
||||
|
||||
import net.sf.openrocket.R;
|
||||
import net.sf.openrocket.android.util.AndroidLogWrapper;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.os.Bundle;
|
||||
|
||||
import com.actionbarsherlock.app.SherlockDialogFragment;
|
||||
|
||||
public class ErrorLoadingFileDialogFragment extends SherlockDialogFragment {
|
||||
|
||||
public static ErrorLoadingFileDialogFragment newInstance( int titleRes, String message ) {
|
||||
ErrorLoadingFileDialogFragment dialog = new ErrorLoadingFileDialogFragment();
|
||||
Bundle b = new Bundle();
|
||||
b.putString("message", message);
|
||||
b.putInt("titleRes", titleRes);
|
||||
dialog.setArguments(b);
|
||||
dialog.setCancelable(true);
|
||||
return dialog;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onCancel(DialogInterface dialog) {
|
||||
((OpenRocketLoaderActivity)getActivity()).doDismissErrorDialog();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
AndroidLogWrapper.d(ErrorLoadingFileDialogFragment.class,"onCreateDialog");
|
||||
|
||||
String message = getArguments().getString("message");
|
||||
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
|
||||
if ( getArguments().containsKey("titleRes") ) {
|
||||
int titleRes = getArguments().getInt("titleRes");
|
||||
builder.setTitle(titleRes);
|
||||
}
|
||||
|
||||
builder.setMessage(message);
|
||||
builder.setNeutralButton(R.string.dismiss, new DialogInterface.OnClickListener() {
|
||||
|
||||
@Override
|
||||
public void onClick(DialogInterface arg0, int arg1) {
|
||||
((OpenRocketLoaderActivity)getActivity()).doDismissErrorDialog();
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
final AlertDialog dialog = builder.create();
|
||||
dialog.setOwnerActivity(getActivity());
|
||||
return dialog;
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -2,6 +2,8 @@ package net.sf.openrocket.android.rocket;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
import net.sf.openrocket.R;
|
||||
import net.sf.openrocket.android.util.AndroidLogWrapper;
|
||||
import net.sf.openrocket.motor.ThrustCurveMotorPlaceholder;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
@ -11,72 +13,68 @@ import android.os.Bundle;
|
||||
import com.actionbarsherlock.app.SherlockDialogFragment;
|
||||
|
||||
public class MissingMotorDialogFragment extends SherlockDialogFragment {
|
||||
|
||||
private final static String MESSAGE_ARG_KEY = "message";
|
||||
|
||||
private final static String MESSAGES_ARG_KEY = "messages";
|
||||
|
||||
public static MissingMotorDialogFragment newInstance( Set<ThrustCurveMotorPlaceholder> missingMotors ) {
|
||||
MissingMotorDialogFragment frag = new MissingMotorDialogFragment();
|
||||
Bundle b = new Bundle();
|
||||
b.putString(MESSAGE_ARG_KEY, buildMessage(missingMotors));
|
||||
String[] messages = new String[ missingMotors.size() ];
|
||||
int index = 0;
|
||||
for( ThrustCurveMotorPlaceholder m : missingMotors ) {
|
||||
messages[index++] = m.getManufacturer() + " " + m.getDesignation();
|
||||
}
|
||||
b.putStringArray(MESSAGES_ARG_KEY, messages);
|
||||
frag.setArguments(b);
|
||||
frag.setCancelable(false);
|
||||
return frag;
|
||||
}
|
||||
|
||||
private static String buildMessage( Set<ThrustCurveMotorPlaceholder> missingMotors ) {
|
||||
private String buildMessage( String[] missingMotors ) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append("The following motors are missing:");
|
||||
for( ThrustCurveMotorPlaceholder m : missingMotors ) {
|
||||
sb.append("\n").append(m.getManufacturer()).append(" ").append(m.getDesignation());
|
||||
sb.append(this.getString(R.string.missingMotorsMessageStart));
|
||||
for( String m : missingMotors ) {
|
||||
sb.append("\n").append(m);
|
||||
}
|
||||
sb.append("\nWould you like to download them from Thrustcurve?");
|
||||
sb.append("\n").append(this.getString(R.string.missingMotorsMessageEnd));
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setRetainInstance(true);
|
||||
setCancelable(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel(DialogInterface dialog) {
|
||||
((OpenRocketLoaderActivity)getActivity()).doNotFixMissingMotors();
|
||||
super.onCancel(dialog);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Dialog onCreateDialog(Bundle savedInstanceState) {
|
||||
|
||||
String message = getArguments().getString(MESSAGE_ARG_KEY);
|
||||
|
||||
AndroidLogWrapper.d(MissingMotorDialogFragment.class,"onCreateDialog");
|
||||
|
||||
String[] messages = getArguments().getStringArray(MESSAGES_ARG_KEY);
|
||||
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
// .setIcon(android.R.drawable.alert_dialog_icon)
|
||||
builder.setTitle("Missing Motors");
|
||||
builder.setMessage(message);
|
||||
builder.setPositiveButton("OK",
|
||||
builder.setTitle(R.string.missingMotors);
|
||||
builder.setMessage(buildMessage(messages));
|
||||
builder.setPositiveButton(R.string.yes,
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int whichButton) {
|
||||
((OpenRocketLoaderActivity)getActivity()).doFixMissingMotors();
|
||||
}
|
||||
}
|
||||
);
|
||||
builder.setNegativeButton("Cancel",
|
||||
});
|
||||
|
||||
builder.setNegativeButton(R.string.no,
|
||||
new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int whichButton) {
|
||||
((OpenRocketLoaderActivity)getActivity()).doNotFixMissingMotors();
|
||||
}
|
||||
}
|
||||
);
|
||||
return builder.create();
|
||||
});
|
||||
|
||||
AlertDialog dialog = builder.create();
|
||||
dialog.setOwnerActivity(getActivity());
|
||||
return dialog;
|
||||
}
|
||||
|
||||
/**
|
||||
* Work around for dialog getting dismissed on orientation change. See code.google.com/p/android/issues/detail?id=17423
|
||||
*/
|
||||
@Override
|
||||
public void onDestroyView() {
|
||||
if ( getDialog() != null && getRetainInstance() ) {
|
||||
getDialog().setDismissMessage(null);
|
||||
}
|
||||
super.onDestroyView();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
@ -12,8 +12,6 @@ import net.sf.openrocket.android.thrustcurve.TCQueryAction;
|
||||
import net.sf.openrocket.android.util.AndroidLogWrapper;
|
||||
import net.sf.openrocket.motor.ThrustCurveMotorPlaceholder;
|
||||
import net.sf.openrocket.rocketcomponent.Rocket;
|
||||
import android.app.AlertDialog;
|
||||
import android.app.Dialog;
|
||||
import android.content.ActivityNotFoundException;
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
@ -42,6 +40,12 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
|
||||
* Set to the Uri of the file we are supposed to load. Is saved in InstanceState.
|
||||
*/
|
||||
private Uri fileToLoad = null;
|
||||
|
||||
protected boolean isLoading() {
|
||||
AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "isLoading " + this.hashCode());
|
||||
AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "isLoading = " + isLoading);
|
||||
return isLoading;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onPostCreate(Bundle savedInstanceState) {
|
||||
@ -57,7 +61,8 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
|
||||
|
||||
@Override
|
||||
protected void onSaveInstanceState(Bundle outState) {
|
||||
AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "onSaveInstanceState");
|
||||
AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "onSaveInstanceState " + this.hashCode());
|
||||
AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "isLoading = " + isLoading);
|
||||
outState.putBoolean("isLoading", isLoading);
|
||||
if ( fileToLoad != null ) {
|
||||
outState.putParcelable("fileToLoad", fileToLoad);
|
||||
@ -69,6 +74,7 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
|
||||
protected void onRestoreInstanceState(Bundle savedInstanceState) {
|
||||
AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "onRestoreInstanceState");
|
||||
isLoading = savedInstanceState.getBoolean("isLoading",false);
|
||||
AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "isLoading = " + isLoading);
|
||||
if ( savedInstanceState.containsKey("fileToLoad") ) {
|
||||
fileToLoad = savedInstanceState.getParcelable("fileToLoad");
|
||||
}
|
||||
@ -164,16 +170,10 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
|
||||
* @param result
|
||||
*/
|
||||
public void onOpenRocketFileLoaded(OpenRocketLoaderResult result) {
|
||||
isLoading = false;
|
||||
if ( result.loadingError != null ) {
|
||||
|
||||
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
|
||||
dialogBuilder.setTitle( R.string.loadingErrorMessage );
|
||||
dialogBuilder.setMessage( result.loadingError.getLocalizedMessage());
|
||||
dialogBuilder.setCancelable(true);
|
||||
Dialog d = dialogBuilder.create();
|
||||
d.setCanceledOnTouchOutside(true);
|
||||
d.show();
|
||||
ErrorLoadingFileDialogFragment errorDialog = ErrorLoadingFileDialogFragment.newInstance(R.string.loadingErrorMessage, result.loadingError.getLocalizedMessage());
|
||||
errorDialog.show(getSupportFragmentManager(),"errorDialog");
|
||||
|
||||
} else {
|
||||
CurrentRocketHolder.getCurrentRocket().setRocketDocument( result.rocket );
|
||||
@ -188,8 +188,8 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
|
||||
Set<ThrustCurveMotorPlaceholder> missingMotors = MissingMotorHelpers.findMissingMotors(rocket);
|
||||
|
||||
if ( missingMotors.size() > 0 ) {
|
||||
DialogFragment missingMotorDialog = MissingMotorDialogFragment.newInstance( missingMotors );
|
||||
getSupportFragmentManager().beginTransaction().add(missingMotorDialog, MISSING_MOTOR_DIAG_FRAGMENT_TAG).commit();
|
||||
MissingMotorDialogFragment missingMotorDialog = MissingMotorDialogFragment.newInstance( missingMotors );
|
||||
missingMotorDialog.show(getSupportFragmentManager(), MISSING_MOTOR_DIAG_FRAGMENT_TAG);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -235,7 +235,13 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
|
||||
displayWarningDialog();
|
||||
}
|
||||
|
||||
public void doDismissErrorDialog() {
|
||||
isLoading = false;
|
||||
fileToLoad = null;
|
||||
}
|
||||
|
||||
public void moveOnToViewer() {
|
||||
isLoading = false;
|
||||
Intent i = new Intent(this,OpenRocketViewer.class);
|
||||
startActivity(i);
|
||||
finish();
|
||||
|
@ -18,7 +18,9 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
public class OpenRocketLoaderFragment extends Fragment {
|
||||
import com.actionbarsherlock.app.SherlockFragment;
|
||||
|
||||
public class OpenRocketLoaderFragment extends SherlockFragment {
|
||||
|
||||
private final static String FILE_ARG_KEY = "file";
|
||||
|
||||
|
@ -15,6 +15,7 @@ public class WarningDialogFragment extends DialogFragment {
|
||||
WarningDialogFragment frag = new WarningDialogFragment();
|
||||
Bundle args = new Bundle();
|
||||
frag.setArguments(args);
|
||||
frag.setCancelable(false);
|
||||
return frag;
|
||||
}
|
||||
|
||||
@ -35,11 +36,7 @@ public class WarningDialogFragment extends DialogFragment {
|
||||
((OpenRocketLoaderActivity)getActivity()).moveOnToViewer();
|
||||
}
|
||||
});
|
||||
builder.setOnCancelListener(new DialogInterface.OnCancelListener() {
|
||||
public void onCancel(DialogInterface dialog) {
|
||||
((OpenRocketLoaderActivity)getActivity()).moveOnToViewer();
|
||||
}
|
||||
});
|
||||
return builder.create();
|
||||
Dialog dialog = builder.create();
|
||||
return dialog;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user