owncloud-android-external
[pub/Android/ownCloud.git] / src / com / owncloud / android / utils / FileStorageUtils.java
index 1894e74..d0f457e 100644 (file)
 package com.owncloud.android.utils;
 
 import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.nio.channels.FileChannel;
 
 import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
@@ -30,6 +26,8 @@ import com.owncloud.android.lib.resources.files.RemoteFile;
 
 import android.annotation.SuppressLint;
 import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
 import android.net.Uri;
 import android.os.Environment;
 import android.os.StatFs;
@@ -41,12 +39,25 @@ import android.os.StatFs;
  * @author David A. Velasco
  */
 public class FileStorageUtils {
-    //private static final String LOG_TAG = "FileStorageUtils";
+    //private static final String TAG = FileStorageUtils.class.getSimpleName();
+
+    @SuppressLint("NewApi")
+    private static final File getBaseStorePath() {
+        File baseStoragePath = Environment.getExternalStorageDirectory();
+        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.KITKAT) {
+            File[] dirs = MainApp.getAppContext().getExternalFilesDirs(null);
+            if (dirs.length > 1) {
+                baseStoragePath = dirs[1];
+            }
+        }
+        return baseStoragePath;
+    }
 
     public static final String getSavePath(String accountName) {
-        File sdCard = Environment.getExternalStorageDirectory();
-        return sdCard.getAbsolutePath() + "/" + MainApp.getDataFolder() + "/" + Uri.encode(accountName, "@");
+        //File sdCard = Environment.getExternalStorageDirectory();
+        //return sdCard.getAbsolutePath() + "/" + MainApp.getDataFolder() + "/" + Uri.encode(accountName, "@");
         // URL encoding is an 'easy fix' to overcome that NTFS and FAT32 don't allow ":" in file names, that can be in the accountName since 0.1.190B
+        return getBaseStorePath().getAbsolutePath()  + "/" + Uri.encode(accountName, "@");
     }
 
     public static final String getDefaultSavePathFor(String accountName, OCFile file) {
@@ -54,14 +65,16 @@ public class FileStorageUtils {
     }
 
     public static final String getTemporalPath(String accountName) {
-        File sdCard = Environment.getExternalStorageDirectory();
-        return sdCard.getAbsolutePath() + "/" + MainApp.getDataFolder() + "/tmp/" + Uri.encode(accountName, "@");
+        //File sdCard = Environment.getExternalStorageDirectory();
+        //return sdCard.getAbsolutePath() + "/" + MainApp.getDataFolder() + "/tmp/" + Uri.encode(accountName, "@");
             // URL encoding is an 'easy fix' to overcome that NTFS and FAT32 don't allow ":" in file names, that can be in the accountName since 0.1.190B
+        return getBaseStorePath().getAbsolutePath() + "/tmp/" + Uri.encode(accountName, "@");
     }
 
     @SuppressLint("NewApi")
     public static final long getUsableSpace(String accountName) {
-        File savePath = Environment.getExternalStorageDirectory();
+        //File savePath = Environment.getExternalStorageDirectory();
+        File savePath = getBaseStorePath();
         if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD) {
             return savePath.getUsableSpace();
 
@@ -77,10 +90,26 @@ public class FileStorageUtils {
     }
 
     public static String getInstantUploadFilePath(Context context, String fileName) {
-        String uploadPath = context.getString(R.string.instant_upload_path);
+        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
+        String uploadPathdef = context.getString(R.string.instant_upload_path);
+        String uploadPath = pref.getString("instant_upload_path", uploadPathdef);
         String value = uploadPath + OCFile.PATH_SEPARATOR +  (fileName == null ? "" : fileName);
         return value;
     }
+
+    /**
+     * Gets the composed path when video is or must be stored
+     * @param context
+     * @param fileName: video file name
+     * @return String: video file path composed
+     */
+    public static String getInstantVideoUploadFilePath(Context context, String fileName) {
+        SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(context);
+        String uploadVideoPathdef = context.getString(R.string.instant_upload_path);
+        String uploadVideoPath = pref.getString("instant_video_upload_path", uploadVideoPathdef);
+        String value = uploadVideoPath + OCFile.PATH_SEPARATOR +  (fileName == null ? "" : fileName);
+        return value;
+    }
     
     public static String getParentPath(String remotePath) {
         String parentPath = new File(remotePath).getParent();
@@ -101,7 +130,8 @@ public class FileStorageUtils {
         file.setMimetype(remote.getMimeType());
         file.setModificationTimestamp(remote.getModifiedTimestamp());
         file.setEtag(remote.getEtag());
-        
+        file.setPermissions(remote.getPermissions());
+        file.setRemoteId(remote.getRemoteId());
         return file;
     }
     
@@ -118,48 +148,9 @@ public class FileStorageUtils {
         file.setMimeType(ocFile.getMimetype());
         file.setModifiedTimestamp(ocFile.getModificationTimestamp());
         file.setEtag(ocFile.getEtag());
+        file.setPermissions(ocFile.getPermissions());
+        file.setRemoteId(ocFile.getRemoteId());
         return file;
     }
-    
-    /**
-     * Copy file src in dst
-     * @param src
-     * @param dst
-     * @throws IOException
-     */
-    @SuppressWarnings("resource")
-    public static  void copyFile(File src, File dst) throws IOException {
-        FileChannel inChannel = new FileInputStream(src).getChannel();
-        FileChannel outChannel = new FileOutputStream(dst).getChannel();
-        try {
-            inChannel.transferTo(0, inChannel.size(), outChannel);
-        } finally {
-            if (inChannel != null)
-                inChannel.close();
-            if (outChannel != null)
-                outChannel.close();
-        }
-    }
-
-
-    /** 
-     * Delete folder
-     * @param folder
-     * @return true if folder is deleted
-     */
-    public static boolean deleteFolder(File folder){
-        if (folder.isDirectory()) {
-            String[] children = folder.list();
-            for (int i=0; i<children.length; i++) {
-                boolean success = deleteFolder(new File(folder, children[i]));
-                if (!success) {
-                    return false;
-                }
-            }
-        }
-        // The folder is now empty so delete it
-        return folder.delete();
-
-    }
   
-}
\ No newline at end of file
+}