Rework the loader activity base class so it is compatible with ICS.
This commit is contained in:
parent
90c2bdb7d8
commit
0461ea5ced
@ -34,7 +34,14 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
|
|||||||
private final static String MISSING_MOTOR_DIAG_FRAGMENT_TAG = "missingmotordialog";
|
private final static String MISSING_MOTOR_DIAG_FRAGMENT_TAG = "missingmotordialog";
|
||||||
private final static String MISSING_MOTOR_DOWNLOAD_FRAGMENT_TAG = "missingmotortask";
|
private final static String MISSING_MOTOR_DOWNLOAD_FRAGMENT_TAG = "missingmotortask";
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set to true when we have started to load a file. Is saved in InstanceState.
|
||||||
|
*/
|
||||||
private boolean isLoading = false;
|
private boolean isLoading = false;
|
||||||
|
/*
|
||||||
|
* Set to the Uri of the file we are supposed to load. Is saved in InstanceState.
|
||||||
|
*/
|
||||||
|
private Uri fileToLoad = null;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onPostCreate(Bundle savedInstanceState) {
|
protected void onPostCreate(Bundle savedInstanceState) {
|
||||||
@ -42,15 +49,40 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
|
|||||||
Intent i = getIntent();
|
Intent i = getIntent();
|
||||||
if (Intent.ACTION_VIEW.equals(i.getAction()) && i.getData() != null ) {
|
if (Intent.ACTION_VIEW.equals(i.getAction()) && i.getData() != null ) {
|
||||||
Uri file = i.getData();
|
Uri file = i.getData();
|
||||||
loadOrkFile(file);
|
fileToLoad = file;
|
||||||
|
loadOrkFile();
|
||||||
} else {
|
} else {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onSaveInstanceState(Bundle outState) {
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
super.onSaveInstanceState(outState);
|
AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "onSaveInstanceState");
|
||||||
outState.putBoolean("isLoading", isLoading);
|
outState.putBoolean("isLoading", isLoading);
|
||||||
|
if ( fileToLoad != null ) {
|
||||||
|
outState.putParcelable("fileToLoad", fileToLoad);
|
||||||
|
}
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onRestoreInstanceState(Bundle savedInstanceState) {
|
||||||
|
AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "onRestoreInstanceState");
|
||||||
|
isLoading = savedInstanceState.getBoolean("isLoading",false);
|
||||||
|
if ( savedInstanceState.containsKey("fileToLoad") ) {
|
||||||
|
fileToLoad = savedInstanceState.getParcelable("fileToLoad");
|
||||||
|
}
|
||||||
|
super.onRestoreInstanceState(savedInstanceState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "onResume");
|
||||||
|
super.onResume();
|
||||||
|
// Start loading a file if we have a file and are not already loading one.
|
||||||
|
if ( fileToLoad != null && !isLoading ) {
|
||||||
|
loadOrkFile();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
@ -58,11 +90,22 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
|
AndroidLogWrapper.d(OpenRocketLoaderActivity.class, "onActivityResult");
|
||||||
switch ( requestCode ) {
|
switch ( requestCode ) {
|
||||||
case PICK_ORK_FILE_RESULT:
|
case PICK_ORK_FILE_RESULT:
|
||||||
if(resultCode==RESULT_OK){
|
if(resultCode==RESULT_OK){
|
||||||
Uri file = data.getData();
|
Uri file = data.getData();
|
||||||
loadOrkFile(file);
|
fileToLoad = file;
|
||||||
|
// It would be nice to just start loading the file - but that doesn't work correctly.
|
||||||
|
// I'm uncertain if it is a bug in Android 14/15 or a bug in the v4 support library.
|
||||||
|
// essentially what happens is, when the FileBrowserActivity is brought up,
|
||||||
|
// this activity goes through the saveInstanceState calls to push it to the background.
|
||||||
|
// When the FileBrowserActivity returns the result, this.onActivityResult is called
|
||||||
|
// prior to any of the other lifecycle methods (onRestoreInstanceState as documented, but onStart is
|
||||||
|
// a bug. Since onStart hasn't been called, this activity is not able to create fragments - which
|
||||||
|
// are used to indicate progress etc.
|
||||||
|
// Instead of calling loadOrkFile() here, we push the file Uri into a member variable,
|
||||||
|
// then check the member variable in onResume to actuall kick off the work.
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -96,14 +139,21 @@ implements TCQueryAction.OnTCQueryCompleteListener, OpenRocketLoaderFragment.OnO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadOrkFile( Uri file ) {
|
private void loadOrkFile( ) {
|
||||||
|
// a little protection.
|
||||||
|
if ( fileToLoad == null ) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
CurrentRocketHolder.getCurrentRocket().setFileUri( file );
|
CurrentRocketHolder.getCurrentRocket().setFileUri( fileToLoad );
|
||||||
AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Use ork file: " + file);
|
AndroidLogWrapper.d(OpenRocketLoaderActivity.class,"Use ork file: " + fileToLoad);
|
||||||
String path = file.getPath();
|
String path = fileToLoad.getPath();
|
||||||
File orkFile = new File(path);
|
File orkFile = new File(path);
|
||||||
|
|
||||||
getSupportFragmentManager().beginTransaction().add( OpenRocketLoaderFragment.newInstance(orkFile), "loader").commit();
|
// Also need commitAllowingState loss because of a bug in v4 dialog show.
|
||||||
|
getSupportFragmentManager().beginTransaction()
|
||||||
|
.add( OpenRocketLoaderFragment.newInstance(orkFile), "loader")
|
||||||
|
.commitAllowingStateLoss();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user