Fixed local URI to video files passed to VideoView
authorDavid A. Velasco <dvelasco@solidgear.es>
Fri, 6 Nov 2015 14:02:57 +0000 (15:02 +0100)
committerDavid A. Velasco <dvelasco@solidgear.es>
Fri, 6 Nov 2015 14:02:57 +0000 (15:02 +0100)
src/com/owncloud/android/datamodel/OCFile.java
src/com/owncloud/android/ui/preview/PreviewMediaFragment.java
src/com/owncloud/android/ui/preview/PreviewVideoActivity.java

index a6da654..e5573b6 100644 (file)
@@ -20,6 +20,8 @@
 
 package com.owncloud.android.datamodel;
 
+import android.content.ContentResolver;
+import android.net.Uri;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.webkit.MimeTypeMap;
@@ -80,6 +82,12 @@ public class OCFile implements Parcelable, Comparable<OCFile> {
 
     private boolean mShareWithSharee;
 
+    /**
+     * URI to the local path of the file contents, if stored in the device; cached after first call
+     * to {@link #getStorageUri()}
+     */
+    private Uri mLocalUri;
+
 
     /**
      * Create new {@link OCFile} with given path.
@@ -214,12 +222,31 @@ public class OCFile implements Parcelable, Comparable<OCFile> {
     }
 
     /**
+     * The URI to the file contents, if stored locally
+     *
+     * @return A URI to the local copy of the file, or NULL if not stored in the device
+     */
+    public Uri getStorageUri() {
+        if (mLocalPath == null || mLocalPath.length() == 0) {
+            return null;
+        }
+        if (mLocalUri == null) {
+            Uri.Builder builder = new Uri.Builder();
+            builder.scheme(ContentResolver.SCHEME_FILE);
+            builder.path(mLocalPath);
+            mLocalUri = builder.build();
+        }
+        return mLocalUri;
+    }
+
+    /**
      * Can be used to set the path where the file is stored
      *
      * @param storage_path to set
      */
     public void setStoragePath(String storage_path) {
         mLocalPath = storage_path;
+        mLocalUri = null;
     }
 
     /**
index 2c5527c..b0578c2 100644 (file)
@@ -21,6 +21,7 @@ package com.owncloud.android.ui.preview;
 
 import android.accounts.Account;
 import android.app.Activity;
+import android.content.ContentResolver;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.media.MediaMetadataRetriever;
@@ -439,8 +440,7 @@ public class PreviewMediaFragment extends FileFragment implements
 
         // load the video file in the video player ; 
         // when done, VideoHelper#onPrepared() will be called
-        Uri uri = Uri.parse(getFile().getStoragePath());
-        mVideoPreview.setVideoPath(uri.encode(getFile().getStoragePath()));
+        mVideoPreview.setVideoURI(getFile().getStorageUri());
     }
 
 
@@ -491,7 +491,7 @@ public class PreviewMediaFragment extends FileFragment implements
                         mVideoPreview.stopPlayback();
                         mAutoplay = false;
                         mSavedPlaybackPosition = 0;
-                        mVideoPreview.setVideoPath(getFile().getStoragePath());
+                        mVideoPreview.setVideoURI(getFile().getStorageUri());
                     }
                 }
             } // else : called from onError()
index 42b7fb2..23188b5 100644 (file)
@@ -204,8 +204,8 @@ public class PreviewVideoActivity extends FileActivity implements OnCompletionLi
             file = getStorageManager().getFileById(file.getFileId()); 
             if (file != null) {
                 if (file.isDown()) {
-                    mVideoPlayer.setVideoPath(file.getStoragePath());
-                    
+                    mVideoPlayer.setVideoURI(file.getStorageUri());
+
                 } else {
                     // not working yet
                     String url;
@@ -216,13 +216,13 @@ public class PreviewVideoActivity extends FileActivity implements OnCompletionLi
                         onError(null, MediaService.OC_MEDIA_ERROR, R.string.media_err_no_account);
                     }
                 }
-                
+
                 // create and prepare control panel for the user
                 mMediaController = new MediaController(this);
                 mMediaController.setMediaPlayer(mVideoPlayer);
                 mMediaController.setAnchorView(mVideoPlayer);
                 mVideoPlayer.setMediaController(mMediaController);
-                
+
             } else {
                 finish();
             }