From a6f93088dfd3ea6f7a15dbfe37a899d71411fca7 Mon Sep 17 00:00:00 2001 From: vanitasvitae Date: Wed, 13 Sep 2017 14:51:35 +0200 Subject: [PATCH] Fix NPE, add permission for external storage --- app/src/main/AndroidManifest.xml | 8 ++++++++ .../java/de/trac/spherical/MainActivity.java | 18 +++++++++++------- .../de/trac/spherical/parser/SphereParser.java | 5 ++++- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 25b41ae..518f078 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + + + + + + + diff --git a/app/src/main/java/de/trac/spherical/MainActivity.java b/app/src/main/java/de/trac/spherical/MainActivity.java index 4d8c832..5a6f3ca 100644 --- a/app/src/main/java/de/trac/spherical/MainActivity.java +++ b/app/src/main/java/de/trac/spherical/MainActivity.java @@ -72,7 +72,7 @@ public class MainActivity extends AppCompatActivity { displayPhotoSphere(imageUri); break; - case MIME_IMAGE: + default: displayMaybePhotoSphere(imageUri); break; } @@ -92,12 +92,10 @@ public class MainActivity extends AppCompatActivity { String xml = SphereParser.getXMLContent(inputStream); PhotoSphereMetadata metadata = SphereParser.parse(xml); - inputStream = getContentResolver().openInputStream(uri); - - if (metadata.isUsePanoramaViewer()) { - displayPhotoSphere(inputStream, metadata); + if (metadata == null || !metadata.isUsePanoramaViewer()) { + displayFlatImage(getContentResolver().openInputStream(uri)); } else { - displayFlatImage(inputStream); + displayPhotoSphere(getContentResolver().openInputStream(uri), metadata); } } catch (FileNotFoundException e) { @@ -117,6 +115,11 @@ public class MainActivity extends AppCompatActivity { String xml = SphereParser.getXMLContent(inputStream); PhotoSphereMetadata metadata = SphereParser.parse(xml); + if (metadata == null) { + Log.e(TAG, "Metadata is null. Fall back to flat image."); + displayFlatImage(getContentResolver().openInputStream(uri)); + } + displayPhotoSphere(getContentResolver().openInputStream(uri), metadata); } catch (FileNotFoundException e) { @@ -130,6 +133,7 @@ public class MainActivity extends AppCompatActivity { private void displayPhotoSphere(InputStream inputStream, PhotoSphereMetadata metadata) { //Please fill me! + Log.d(TAG, "Display Photo Sphere!"); } /** @@ -137,6 +141,6 @@ public class MainActivity extends AppCompatActivity { * @param inputStream */ private void displayFlatImage(InputStream inputStream) { - + Log.d(TAG, "Display Flat Image!"); } } diff --git a/app/src/main/java/de/trac/spherical/parser/SphereParser.java b/app/src/main/java/de/trac/spherical/parser/SphereParser.java index 57d36c5..0f2a420 100644 --- a/app/src/main/java/de/trac/spherical/parser/SphereParser.java +++ b/app/src/main/java/de/trac/spherical/parser/SphereParser.java @@ -115,12 +115,15 @@ public class SphereParser { byte[] xml = new byte[xmlLen - 2]; i = inputStream.read(xml); - throwIfUnexpectedEOF(i, r.length); + throwIfUnexpectedEOF(i, xml.length); return new String(xml); } public static PhotoSphereMetadata parse(String xmp) { + if (xmp == null) { + return null; + } PhotoSphereMetadata meta = new PhotoSphereMetadata(); meta.setUsePanoramaViewer(parseBoolean(USE_PANORAMA_VIEWER, xmp, true)); meta.setCaptureSoftware(parseString(CAPTURE_SOFTWARE, xmp));