Merge branch 'master' of gitorious.org:owncloud/android-devel
authorBartek Przybylski <bart.p.pl@gmail.com>
Sat, 30 Jun 2012 11:51:31 +0000 (13:51 +0200)
committerBartek Przybylski <bart.p.pl@gmail.com>
Sat, 30 Jun 2012 11:51:31 +0000 (13:51 +0200)
45 files changed:
AndroidManifest.xml
res/drawable-hdpi-v9/ic_action_create_dir.png [new file with mode: 0644]
res/drawable-hdpi-v9/ic_action_refresh.png [new file with mode: 0644]
res/drawable-hdpi-v9/ic_action_search.png [new file with mode: 0644]
res/drawable-hdpi-v9/ic_action_upload.png [new file with mode: 0644]
res/drawable-hdpi/ic_action_create_dir.png
res/drawable-hdpi/ic_action_create_dir_old.png [new file with mode: 0644]
res/drawable-hdpi/ic_action_refresh.png
res/drawable-hdpi/ic_action_refresh_black.png
res/drawable-hdpi/ic_action_search.png
res/drawable-hdpi/ic_action_upload.png
res/drawable-ldpi-v9/ic_action_create_dir.png [new file with mode: 0644]
res/drawable-ldpi-v9/ic_action_refresh.png [new file with mode: 0644]
res/drawable-ldpi-v9/ic_action_search.png [new file with mode: 0644]
res/drawable-ldpi-v9/ic_action_upload.png [new file with mode: 0644]
res/drawable-ldpi/ic_action_create_dir.png
res/drawable-ldpi/ic_action_create_dir_old.png [new file with mode: 0644]
res/drawable-ldpi/ic_action_refresh.png
res/drawable-ldpi/ic_action_refresh_black.png
res/drawable-ldpi/ic_action_search.png
res/drawable-ldpi/ic_action_upload.png
res/drawable-mdpi-v9/ic_action_create_dir.png [new file with mode: 0644]
res/drawable-mdpi-v9/ic_action_refresh.png [new file with mode: 0644]
res/drawable-mdpi-v9/ic_action_search.png [new file with mode: 0644]
res/drawable-mdpi-v9/ic_action_upload.png [new file with mode: 0644]
res/drawable-mdpi/ic_action_create_dir.png
res/drawable-mdpi/ic_action_create_dir_old.png [new file with mode: 0644]
res/drawable-mdpi/ic_action_refresh.png
res/drawable-mdpi/ic_action_refresh_black.png
res/drawable-mdpi/ic_action_search.png
res/drawable-mdpi/ic_action_upload.png
res/layout-land/account_setup.xml
res/layout/account_setup.xml
res/values/strings.xml
src/eu/alefzero/owncloud/AccountUtils.java
src/eu/alefzero/owncloud/files/PhotoTakenBroadcastReceiver.java
src/eu/alefzero/owncloud/files/services/FileUploader.java
src/eu/alefzero/owncloud/syncadapter/FileSyncAdapter.java
src/eu/alefzero/owncloud/syncadapter/FileSyncService.java
src/eu/alefzero/owncloud/ui/activity/AuthenticatorActivity.java
src/eu/alefzero/owncloud/ui/activity/FileDetailActivity.java
src/eu/alefzero/owncloud/ui/activity/FileDisplayActivity.java
src/eu/alefzero/owncloud/ui/fragment/FileDetailFragment.java
src/eu/alefzero/owncloud/ui/fragment/FileListFragment.java
src/eu/alefzero/webdav/WebdavEntry.java

index 935a8fc..bb1f30e 100644 (file)
@@ -18,7 +18,7 @@
  -->\r
 <manifest package="eu.alefzero.owncloud"\r
     android:versionCode="1"\r
-    android:versionName="0.1.134B" xmlns:android="http://schemas.android.com/apk/res/android">\r
+    android:versionName="0.1.140B" xmlns:android="http://schemas.android.com/apk/res/android">\r
 \r
     <uses-permission android:name="android.permission.GET_ACCOUNTS" />\r
     <uses-permission android:name="android.permission.USE_CREDENTIALS" />\r
diff --git a/res/drawable-hdpi-v9/ic_action_create_dir.png b/res/drawable-hdpi-v9/ic_action_create_dir.png
new file mode 100644 (file)
index 0000000..ece0eb4
Binary files /dev/null and b/res/drawable-hdpi-v9/ic_action_create_dir.png differ
diff --git a/res/drawable-hdpi-v9/ic_action_refresh.png b/res/drawable-hdpi-v9/ic_action_refresh.png
new file mode 100644 (file)
index 0000000..a7fdc0d
Binary files /dev/null and b/res/drawable-hdpi-v9/ic_action_refresh.png differ
diff --git a/res/drawable-hdpi-v9/ic_action_search.png b/res/drawable-hdpi-v9/ic_action_search.png
new file mode 100644 (file)
index 0000000..3549f84
Binary files /dev/null and b/res/drawable-hdpi-v9/ic_action_search.png differ
diff --git a/res/drawable-hdpi-v9/ic_action_upload.png b/res/drawable-hdpi-v9/ic_action_upload.png
new file mode 100644 (file)
index 0000000..2369348
Binary files /dev/null and b/res/drawable-hdpi-v9/ic_action_upload.png differ
index 1d1a03e..15068bc 100644 (file)
Binary files a/res/drawable-hdpi/ic_action_create_dir.png and b/res/drawable-hdpi/ic_action_create_dir.png differ
diff --git a/res/drawable-hdpi/ic_action_create_dir_old.png b/res/drawable-hdpi/ic_action_create_dir_old.png
new file mode 100644 (file)
index 0000000..49a226e
Binary files /dev/null and b/res/drawable-hdpi/ic_action_create_dir_old.png differ
index 479aca4..e6212cf 100644 (file)
Binary files a/res/drawable-hdpi/ic_action_refresh.png and b/res/drawable-hdpi/ic_action_refresh.png differ
index 479aca4..e6212cf 100644 (file)
Binary files a/res/drawable-hdpi/ic_action_refresh_black.png and b/res/drawable-hdpi/ic_action_refresh_black.png differ
index f6719d2..f89c4e9 100644 (file)
Binary files a/res/drawable-hdpi/ic_action_search.png and b/res/drawable-hdpi/ic_action_search.png differ
index d30ee8a..b372b7e 100644 (file)
Binary files a/res/drawable-hdpi/ic_action_upload.png and b/res/drawable-hdpi/ic_action_upload.png differ
diff --git a/res/drawable-ldpi-v9/ic_action_create_dir.png b/res/drawable-ldpi-v9/ic_action_create_dir.png
new file mode 100644 (file)
index 0000000..8ed2dae
Binary files /dev/null and b/res/drawable-ldpi-v9/ic_action_create_dir.png differ
diff --git a/res/drawable-ldpi-v9/ic_action_refresh.png b/res/drawable-ldpi-v9/ic_action_refresh.png
new file mode 100644 (file)
index 0000000..bd611e8
Binary files /dev/null and b/res/drawable-ldpi-v9/ic_action_refresh.png differ
diff --git a/res/drawable-ldpi-v9/ic_action_search.png b/res/drawable-ldpi-v9/ic_action_search.png
new file mode 100644 (file)
index 0000000..587d9e0
Binary files /dev/null and b/res/drawable-ldpi-v9/ic_action_search.png differ
diff --git a/res/drawable-ldpi-v9/ic_action_upload.png b/res/drawable-ldpi-v9/ic_action_upload.png
new file mode 100644 (file)
index 0000000..2d4ba56
Binary files /dev/null and b/res/drawable-ldpi-v9/ic_action_upload.png differ
index 49a226e..78356fe 100644 (file)
Binary files a/res/drawable-ldpi/ic_action_create_dir.png and b/res/drawable-ldpi/ic_action_create_dir.png differ
diff --git a/res/drawable-ldpi/ic_action_create_dir_old.png b/res/drawable-ldpi/ic_action_create_dir_old.png
new file mode 100644 (file)
index 0000000..ce8cdef
Binary files /dev/null and b/res/drawable-ldpi/ic_action_create_dir_old.png differ
index e6212cf..63e70e1 100644 (file)
Binary files a/res/drawable-ldpi/ic_action_refresh.png and b/res/drawable-ldpi/ic_action_refresh.png differ
index e6212cf..63e70e1 100644 (file)
Binary files a/res/drawable-ldpi/ic_action_refresh_black.png and b/res/drawable-ldpi/ic_action_refresh_black.png differ
index f89c4e9..45d2398 100644 (file)
Binary files a/res/drawable-ldpi/ic_action_search.png and b/res/drawable-ldpi/ic_action_search.png differ
index b372b7e..9e3f745 100644 (file)
Binary files a/res/drawable-ldpi/ic_action_upload.png and b/res/drawable-ldpi/ic_action_upload.png differ
diff --git a/res/drawable-mdpi-v9/ic_action_create_dir.png b/res/drawable-mdpi-v9/ic_action_create_dir.png
new file mode 100644 (file)
index 0000000..9215a62
Binary files /dev/null and b/res/drawable-mdpi-v9/ic_action_create_dir.png differ
diff --git a/res/drawable-mdpi-v9/ic_action_refresh.png b/res/drawable-mdpi-v9/ic_action_refresh.png
new file mode 100644 (file)
index 0000000..bb9d855
Binary files /dev/null and b/res/drawable-mdpi-v9/ic_action_refresh.png differ
diff --git a/res/drawable-mdpi-v9/ic_action_search.png b/res/drawable-mdpi-v9/ic_action_search.png
new file mode 100644 (file)
index 0000000..f12e005
Binary files /dev/null and b/res/drawable-mdpi-v9/ic_action_search.png differ
diff --git a/res/drawable-mdpi-v9/ic_action_upload.png b/res/drawable-mdpi-v9/ic_action_upload.png
new file mode 100644 (file)
index 0000000..0faf43b
Binary files /dev/null and b/res/drawable-mdpi-v9/ic_action_upload.png differ
index ce8cdef..636cf0e 100644 (file)
Binary files a/res/drawable-mdpi/ic_action_create_dir.png and b/res/drawable-mdpi/ic_action_create_dir.png differ
diff --git a/res/drawable-mdpi/ic_action_create_dir_old.png b/res/drawable-mdpi/ic_action_create_dir_old.png
new file mode 100644 (file)
index 0000000..1d1a03e
Binary files /dev/null and b/res/drawable-mdpi/ic_action_create_dir_old.png differ
index 63e70e1..479aca4 100644 (file)
Binary files a/res/drawable-mdpi/ic_action_refresh.png and b/res/drawable-mdpi/ic_action_refresh.png differ
index 63e70e1..479aca4 100644 (file)
Binary files a/res/drawable-mdpi/ic_action_refresh_black.png and b/res/drawable-mdpi/ic_action_refresh_black.png differ
index 45d2398..f6719d2 100644 (file)
Binary files a/res/drawable-mdpi/ic_action_search.png and b/res/drawable-mdpi/ic_action_search.png differ
index 9e3f745..d30ee8a 100644 (file)
Binary files a/res/drawable-mdpi/ic_action_upload.png and b/res/drawable-mdpi/ic_action_upload.png differ
index cdd3172..93f3038 100644 (file)
@@ -42,7 +42,7 @@
                 android:layout_height="match_parent"
                 android:layout_margin="7dp"
                 android:layout_weight="1"
-                android:src="@drawable/logo_inverted" />
+                android:src="@drawable/owncloud_logo" />
 
             <LinearLayout
                 android:id="@+id/LinearLayout1"
index add258c..65e1cd9 100644 (file)
@@ -46,7 +46,7 @@
                 android:layout_height="wrap_content"
                 android:layout_marginBottom="10dp"
                 android:layout_weight="1"
-                android:src="@drawable/logo_inverted" />
+                android:src="@drawable/owncloud_logo" />
 
             <FrameLayout
                 android:layout_width="match_parent"
index c111f8b..5e21f88 100644 (file)
@@ -68,6 +68,7 @@
     <string name="uploader_info_dirname">Directory name</string>
     <string name="uploader_upload_succeed">Uploading completed successfully</string>
     <string name="uploader_upload_failed">Upload failed: </string>
+    <string name="uploader_files_uploaded_suffix"> files uploaded</string>
     <string name="common_choose_account">Choose account</string>
     <string name="sync_string_contacts">Contacts</string>
     <string name="use_ssl">Use Secure Connection</string>
index 090dec3..d088d2c 100644 (file)
@@ -68,6 +68,21 @@ public class AccountUtils {
         return defaultAccount;\r
     }\r
 \r
+    \r
+\r
+    /**\r
+     * Checks, whether or not there are any ownCloud accounts setup.\r
+     * \r
+     * @return true, if there is at least one account.\r
+     */\r
+    public static boolean accountsAreSetup(Context context) {\r
+        AccountManager accMan = AccountManager.get(context);\r
+        Account[] accounts = accMan\r
+                .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);\r
+        return accounts.length > 0;\r
+    }\r
+    \r
+    \r
     public static void setCurrentOwnCloudAccount(Context context, String name) {\r
         SharedPreferences.Editor appPrefs = PreferenceManager\r
                 .getDefaultSharedPreferences(context).edit();\r
index b6a0a60..9314942 100644 (file)
@@ -111,9 +111,16 @@ public class PhotoTakenBroadcastReceiver extends BroadcastReceiver {
                         Intent upload_intent = new Intent(context, InstantUploadService.class);
                         Account account = new Account(account_name, AccountAuthenticator.ACCOUNT_TYPE);
                         
-                        String mimeType = MimeTypeMap.getSingleton()
-                                .getMimeTypeFromExtension(
-                                        f.getName().substring(f.getName().lastIndexOf('.') + 1));
+                        String mimeType;
+                        try {
+                            mimeType = MimeTypeMap.getSingleton()
+                                    .getMimeTypeFromExtension(
+                                            f.getName().substring(f.getName().lastIndexOf('.') + 1));
+                        
+                        } catch (IndexOutOfBoundsException e) {
+                            Log.e(TAG, "Trying to find out MIME type of a file without extension: " + f.getName());
+                            mimeType = "application/octet-stream";
+                        }
                         
                         upload_intent.putExtra(InstantUploadService.KEY_ACCOUNT, account);
                         upload_intent.putExtra(InstantUploadService.KEY_FILE_PATH, file_path);
index 5d748c9..23e24c4 100644 (file)
@@ -1,6 +1,7 @@
 package eu.alefzero.owncloud.files.services;
 
 import java.io.File;
+import java.util.List;
 
 import eu.alefzero.owncloud.AccountUtils;
 import eu.alefzero.owncloud.R;
@@ -9,7 +10,6 @@ import eu.alefzero.owncloud.datamodel.FileDataStorageManager;
 import eu.alefzero.owncloud.datamodel.OCFile;
 import eu.alefzero.owncloud.files.interfaces.OnDatatransferProgressListener;
 import eu.alefzero.owncloud.utils.OwnCloudVersion;
-import eu.alefzero.webdav.OnUploadProgressListener;
 import eu.alefzero.webdav.WebdavClient;
 import android.accounts.Account;
 import android.accounts.AccountManager;
@@ -32,6 +32,9 @@ import android.widget.Toast;
 
 public class FileUploader extends Service implements OnDatatransferProgressListener {
 
+    public static final String UPLOAD_FINISH_MESSAGE = "UPLOAD_FINISH";
+    public static final String EXTRA_PARENT_DIR_ID = "PARENT_DIR_ID";
+    
     public static final String KEY_LOCAL_FILE = "LOCAL_FILE";
     public static final String KEY_REMOTE_FILE = "REMOTE_FILE";
     public static final String KEY_ACCOUNT = "ACCOUNT";
@@ -47,11 +50,11 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
     private AccountManager mAccountManager;
     private Account mAccount;
     private String[] mLocalPaths, mRemotePaths;
-    private boolean mResult;
     private int mUploadType;
     private Notification mNotification;
     private int mTotalDataToSend, mSendData;
     private int mCurrentIndexUpload, mPreviousPercent;
+    private int mSuccessCounter;
 
     @Override
     public IBinder onBind(Intent arg0) {
@@ -119,12 +122,16 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
     }
 
     public void run() {
-        if (mResult) {
-            Toast.makeText(this, "Upload successfull", Toast.LENGTH_SHORT)
-                    .show();
+        String message;
+        if (mSuccessCounter == mLocalPaths.length) {
+            message = getString(R.string.uploader_upload_succeed); 
         } else {
+            message = getString(R.string.uploader_upload_failed); 
+            if (mLocalPaths.length > 1)
+                message += " (" + mSuccessCounter + " / " + mLocalPaths.length + getString(R.string.uploader_files_uploaded_suffix) + ")";
             Toast.makeText(this, "Upload could not be completed", Toast.LENGTH_SHORT).show();
         }
+        Toast.makeText(this, message, Toast.LENGTH_SHORT).show();
     }
 
     public void uploadFile() {
@@ -166,15 +173,24 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
         
         Log.d(TAG, "Will upload " + mTotalDataToSend + " bytes, with " + mLocalPaths.length + " files");
         
+        mSuccessCounter = 0;
+        
         for (int i = 0; i < mLocalPaths.length; ++i) {
-            String mimeType = MimeTypeMap.getSingleton()
-                    .getMimeTypeFromExtension(
-                            mLocalPaths[i].substring(mLocalPaths[i]
+            
+            String mimeType;
+            try {
+                mimeType = MimeTypeMap.getSingleton()
+                        .getMimeTypeFromExtension(
+                                mLocalPaths[i].substring(mLocalPaths[i]
                                     .lastIndexOf('.') + 1));
-            mResult = false;
+            } catch (IndexOutOfBoundsException e) {
+                Log.e(TAG, "Trying to find out MIME type of a file without extension: " + mLocalPaths[i]);
+                mimeType = "application/octet-stream";
+            }
+            
             mCurrentIndexUpload = i;
             if (wc.putFile(mLocalPaths[i], mRemotePaths[i], mimeType)) {
-                mResult |= true;
+                mSuccessCounter++;
                 OCFile new_file = new OCFile(mRemotePaths[i]);
                 new_file.setMimetype(mimeType);
                 new_file.setFileLength(new File(mLocalPaths[i]).length());
@@ -182,12 +198,16 @@ public class FileUploader extends Service implements OnDatatransferProgressListe
                 new_file.setLastSyncDate(0);
                 new_file.setStoragePath(mLocalPaths[i]);         
                 File f = new File(mRemotePaths[i]);
-                new_file.setParentId(storageManager.getFileByPath(f.getParent().endsWith("/")?f.getParent():f.getParent()+"/").getFileId());
+                long parentDirId = storageManager.getFileByPath(f.getParent().endsWith("/")?f.getParent():f.getParent()+"/").getFileId();
+                new_file.setParentId(parentDirId);
                 storageManager.saveFile(new_file);
+                
+                Intent end = new Intent(UPLOAD_FINISH_MESSAGE);
+                end.putExtra(EXTRA_PARENT_DIR_ID, parentDirId);
+                sendBroadcast(end);
             }
+            
         }
-        // notification.contentView.setProgressBar(R.id.status_progress,
-        // mLocalPaths.length-1, mLocalPaths.length-1, false);
         mNotificationManager.cancel(42);
         run();
     }
index d5512a1..39a8831 100644 (file)
@@ -19,6 +19,9 @@
 package eu.alefzero.owncloud.syncadapter;\r
 \r
 import java.io.IOException;\r
+import java.util.ArrayList;\r
+import java.util.Iterator;\r
+import java.util.List;\r
 import java.util.Vector;\r
 \r
 import org.apache.jackrabbit.webdav.DavException;\r
@@ -34,6 +37,7 @@ import android.content.Intent;
 import android.content.SyncResult;\r
 import android.os.Bundle;\r
 import android.util.Log;\r
+import android.webkit.MimeTypeMap;\r
 import eu.alefzero.owncloud.datamodel.FileDataStorageManager;\r
 import eu.alefzero.owncloud.datamodel.OCFile;\r
 import eu.alefzero.webdav.WebdavEntry;\r
@@ -63,13 +67,10 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         this.setContentProvider(provider);\r
         this.setStorageManager(new FileDataStorageManager(account,\r
                 getContentProvider()));\r
-\r
+        \r
         Log.d(TAG, "syncing owncloud account " + account.name);\r
 \r
-        Intent i = new Intent(FileSyncService.SYNC_MESSAGE);\r
-        i.putExtra(FileSyncService.IN_PROGRESS, true);\r
-        i.putExtra(FileSyncService.ACCOUNT_NAME, account.name);\r
-        getContext().sendStickyBroadcast(i);\r
+        sendStickyBroadcast(true, -1);  // starting message to the main IU\r
 \r
         PropFindMethod query;\r
         try {\r
@@ -98,8 +99,7 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
             syncResult.stats.numIoExceptions++;\r
             e.printStackTrace();\r
         }\r
-        i.putExtra(FileSyncService.IN_PROGRESS, false);\r
-        getContext().sendStickyBroadcast(i);\r
+        sendStickyBroadcast(false, -1);        \r
     }\r
 \r
     private void fetchData(String uri, SyncResult syncResult, long parentId) {\r
@@ -108,6 +108,8 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
             getClient().executeMethod(query);\r
             MultiStatus resp = null;\r
             resp = query.getResponseBodyAsMultiStatus();\r
+            List<String> paths = new ArrayList<String>();\r
+            List<Long> fileIds = new ArrayList<Long>(); \r
             for (int i = 1; i < resp.getResponses().length; ++i) {\r
                 WebdavEntry we = new WebdavEntry(resp.getResponses()[i], getUri().getPath());\r
                 OCFile file = fillOCFile(we);\r
@@ -115,15 +117,31 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
                 getStorageManager().saveFile(file);\r
                 if (parentId == 0)\r
                     parentId = file.getFileId();\r
-                if (we.contentType().equals("DIR"))\r
-                    fetchData(getUri().toString() + we.path(), syncResult, file.getFileId());\r
+                if (we.contentType().equals("DIR")) {\r
+                    // for recursive fetch later\r
+                    paths.add(we.path());\r
+                    fileIds.add(file.getFileId());\r
+                }\r
             }\r
+            \r
             Vector<OCFile> files = getStorageManager().getDirectoryContent(\r
                     getStorageManager().getFileById(parentId));\r
             for (OCFile file : files) {\r
                 if (file.getLastSyncDate() != mCurrentSyncTime && file.getLastSyncDate() != 0)\r
                     getStorageManager().removeFile(file);\r
             }\r
+            \r
+            // synched folder -> notice to main thread\r
+            sendStickyBroadcast(true, parentId);\r
+\r
+            // recursive fetch\r
+            Iterator<String> pathsIt = paths.iterator();\r
+            Iterator<Long> fileIdsIt = fileIds.iterator();\r
+            while (pathsIt.hasNext()) {\r
+                fetchData(getUri().toString() + pathsIt.next(), syncResult, fileIdsIt.next());\r
+            }\r
+\r
+\r
         } catch (OperationCanceledException e) {\r
             e.printStackTrace();\r
         } catch (AuthenticatorException e) {\r
@@ -147,5 +165,16 @@ public class FileSyncAdapter extends AbstractOwnCloudSyncAdapter {
         file.setLastSyncDate(mCurrentSyncTime);\r
         return file;\r
     }\r
+    \r
+    \r
+    private void sendStickyBroadcast(boolean inProgress, long OCDirId) {\r
+        Intent i = new Intent(FileSyncService.SYNC_MESSAGE);\r
+        i.putExtra(FileSyncService.IN_PROGRESS, inProgress);\r
+        i.putExtra(FileSyncService.ACCOUNT_NAME, getAccount().name);\r
+        if (OCDirId > 0) {\r
+            i.putExtra(FileSyncService.SYNC_FOLDER, OCDirId);\r
+        }\r
+        getContext().sendStickyBroadcast(i);\r
+    }\r
 \r
 }\r
index 6ab23db..6c1ed0f 100644 (file)
@@ -31,6 +31,7 @@ public class FileSyncService extends Service {
     public static final String SYNC_MESSAGE = "eu.alefzero.owncloud.files.ACCOUNT_SYNC";\r
     public static final String IN_PROGRESS = "sync_in_progress";\r
     public static final String ACCOUNT_NAME = "account_name";\r
+    public static final String SYNC_FOLDER = "eu.alefzero.owncloud.files.SYNC_FOLDER";\r
 \r
     /*\r
      * {@inheritDoc}\r
index bd0ddb0..b944240 100644 (file)
@@ -204,8 +204,9 @@ public class AuthenticatorActivity extends AccountAuthenticatorActivity
             setResult(RESULT_OK, intent);\r
             Bundle bundle = new Bundle();\r
             bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);\r
-            getContentResolver().startSync(ProviderTableMeta.CONTENT_URI,\r
-                    bundle);\r
+            //getContentResolver().startSync(ProviderTableMeta.CONTENT_URI,\r
+            //        bundle);\r
+            ContentResolver.requestSync(account, "org.ownlcoud", bundle);\r
 \r
             /*\r
              * if\r
index f5664ea..00a1f83 100644 (file)
@@ -48,7 +48,7 @@ public class FileDetailActivity extends SherlockFragmentActivity {
         \r
         FragmentTransaction ft = getSupportFragmentManager().beginTransaction();\r
         mFileDetail = new FileDetailFragment();\r
-        ft.add(R.id.fragment, mFileDetail, "FileDetails");\r
+        ft.replace(R.id.fragment, mFileDetail, "FileDetails");\r
         ft.commit();\r
 \r
     }\r
index ec4def4..657d6df 100644 (file)
 \r
 package eu.alefzero.owncloud.ui.activity;\r
 \r
-import java.io.BufferedReader;\r
 import java.io.File;\r
-import java.io.InputStreamReader;\r
-import java.lang.Thread.UncaughtExceptionHandler;\r
 import java.util.ArrayList;\r
 \r
 import android.accounts.Account;\r
@@ -37,20 +34,18 @@ import android.content.DialogInterface.OnClickListener;
 import android.content.Intent;\r
 import android.content.IntentFilter;\r
 import android.content.pm.PackageInfo;\r
-import android.content.pm.PackageManager;\r
 import android.content.pm.PackageManager.NameNotFoundException;\r
 import android.database.Cursor;\r
 import android.net.Uri;\r
 import android.os.Bundle;\r
 import android.provider.MediaStore;\r
-import android.telephony.TelephonyManager;\r
 import android.util.Log;\r
 import android.view.View;\r
 import android.view.ViewGroup;\r
 import android.widget.ArrayAdapter;\r
-import android.widget.CheckedTextView;\r
 import android.widget.EditText;\r
 import android.widget.TextView;\r
+import android.widget.Toast;\r
 \r
 import com.actionbarsherlock.app.ActionBar;\r
 import com.actionbarsherlock.app.ActionBar.OnNavigationListener;\r
@@ -67,6 +62,7 @@ import eu.alefzero.owncloud.authenticator.AccountAuthenticator;
 import eu.alefzero.owncloud.datamodel.DataStorageManager;\r
 import eu.alefzero.owncloud.datamodel.FileDataStorageManager;\r
 import eu.alefzero.owncloud.datamodel.OCFile;\r
+import eu.alefzero.owncloud.files.services.FileDownloader;\r
 import eu.alefzero.owncloud.files.services.FileUploader;\r
 import eu.alefzero.owncloud.syncadapter.FileSyncService;\r
 import eu.alefzero.owncloud.ui.fragment.FileDetailFragment;\r
@@ -81,16 +77,18 @@ import eu.alefzero.webdav.WebdavClient;
  */\r
 \r
 public class FileDisplayActivity extends SherlockFragmentActivity implements\r
-        OnNavigationListener, OnClickListener, android.view.View.OnClickListener {\r
+        OnNavigationListener, OnClickListener, android.view.View.OnClickListener  {\r
+    \r
     private ArrayAdapter<String> mDirectories;\r
-    private DataStorageManager mStorageManager;\r
-    private FileListFragment mFileList;\r
     private OCFile mCurrentDir;\r
     private String[] mDirs = null;\r
 \r
-    private SyncBroadcastReceiver syncBroadcastRevceiver;\r
+    private DataStorageManager mStorageManager;\r
+    private SyncBroadcastReceiver mSyncBroadcastReceiver;\r
+    private UploadFinishReceiver mUploadFinishReceiver;\r
     \r
     private View mLayoutView = null;\r
+    private FileListFragment mFileList;\r
     \r
     private static final String KEY_DIR_ARRAY = "DIR_ARRAY";\r
     private static final String KEY_CURRENT_DIR = "DIR";\r
@@ -98,39 +96,37 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
     private static final int DIALOG_SETUP_ACCOUNT = 0;\r
     private static final int DIALOG_CREATE_DIR = 1;\r
     private static final int DIALOG_ABOUT_APP = 2;\r
+    \r
     private static final int ACTION_SELECT_FILE = 1;\r
+    //private static final int ACTION_CREATE_FIRST_ACCOUNT = 2; dvelasco: WIP\r
 \r
     @Override\r
     public void onCreate(Bundle savedInstanceState) {\r
+        Log.i(getClass().toString(), "onCreate() start");\r
         super.onCreate(savedInstanceState);\r
 \r
-        // TODO: fix hack: workaround for bug in actionbar sherlock\r
-        // it always shows indeterminate progress bar\r
-        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {\r
-            requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);\r
-            setProgressBarIndeterminateVisibility(false);\r
-        }\r
+        requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);\r
+        setSupportProgressBarIndeterminateVisibility(false);\r
 \r
         Thread.setDefaultUncaughtExceptionHandler(new CrashHandler(getApplicationContext()));\r
 \r
         if(savedInstanceState != null){\r
-            mCurrentDir = (OCFile) savedInstanceState.getParcelable(KEY_CURRENT_DIR);\r
+            mCurrentDir = (OCFile) savedInstanceState.getParcelable(KEY_CURRENT_DIR);   // this is never saved with this key :S\r
         }\r
         \r
-        if (findViewById(R.id.file_list_view) == null) \r
-            mLayoutView = getLayoutInflater().inflate(R.layout.files, null);  // always inflate this at onCreate() ; just once!\r
+        mLayoutView = getLayoutInflater().inflate(R.layout.files, null);  // always inflate this at onCreate() ; just once!\r
         \r
-        //TODO: Dialog useless -> get rid of this\r
-        if (!accountsAreSetup()) {\r
+        if (AccountUtils.accountsAreSetup(this)) {\r
+            setContentView(mLayoutView);    \r
+            \r
+        } else  {\r
             setContentView(R.layout.no_account_available);\r
             setProgressBarIndeterminateVisibility(false);\r
             getSupportActionBar().setNavigationMode(ActionBar.DISPLAY_SHOW_TITLE);\r
             findViewById(R.id.setup_account).setOnClickListener(this);\r
-            \r
-        } else if (findViewById(R.id.file_list_view) == null) {\r
-            setContentView(mLayoutView);\r
         }\r
         \r
+        Log.i(getClass().toString(), "onCreate() end");\r
     }\r
 \r
     @Override\r
@@ -151,6 +147,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
             case R.id.startSync: {\r
                 Bundle bundle = new Bundle();\r
                 bundle.putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true);\r
+                bundle.putString("PROBANDO", "PARAMETRO PASADO AL SYNC");\r
                 ContentResolver.requestSync(\r
                         AccountUtils.getCurrentOwnCloudAccount(this),\r
                         "org.owncloud", bundle);\r
@@ -199,8 +196,8 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
      * Called, when the user selected something for uploading\r
      */\r
     public void onActivityResult(int requestCode, int resultCode, Intent data) {\r
-        if (resultCode == RESULT_OK) {\r
-            if (requestCode == ACTION_SELECT_FILE) {\r
+        if (requestCode == ACTION_SELECT_FILE) {\r
+            if (resultCode == RESULT_OK) {\r
                 Uri selectedImageUri = data.getData();\r
     \r
                 String filemanagerstring = selectedImageUri.getPath();\r
@@ -234,7 +231,13 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
                 i.putExtra(FileUploader.KEY_UPLOAD_TYPE, FileUploader.UPLOAD_SINGLE_FILE);\r
                 startService(i);\r
             }\r
-        }\r
+            \r
+        }/* dvelasco: WIP - not working as expected ... yet :)\r
+             else if (requestCode == ACTION_CREATE_FIRST_ACCOUNT) {\r
+            if (resultCode != RESULT_OK) {\r
+                finish();   // the user cancelled the AuthenticatorActivity\r
+            }\r
+        }*/\r
     }\r
 \r
     @Override\r
@@ -255,6 +258,7 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
 \r
     @Override\r
     protected void onRestoreInstanceState(Bundle savedInstanceState) {\r
+        Log.i(getClass().toString(), "onRestoreInstanceState() start");\r
         super.onRestoreInstanceState(savedInstanceState);\r
         mDirs = savedInstanceState.getStringArray(KEY_DIR_ARRAY);\r
         mDirectories = new CustomArrayAdapter<String>(this, R.layout.sherlock_spinner_dropdown_item);\r
@@ -263,10 +267,12 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
             for (String s : mDirs)\r
                 mDirectories.insert(s, 0);\r
         mCurrentDir = savedInstanceState.getParcelable(FileDetailFragment.EXTRA_FILE);\r
+        Log.i(getClass().toString(), "onRestoreInstanceState() end");\r
     }\r
     \r
     @Override\r
     protected void onSaveInstanceState(Bundle outState) {\r
+        Log.i(getClass().toString(), "onSaveInstanceState() start");\r
         super.onSaveInstanceState(outState);\r
         if(mDirectories != null && mDirectories.getCount() != 0){\r
             mDirs = new String[mDirectories.getCount()-1];\r
@@ -276,20 +282,35 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
         }\r
         outState.putStringArray(KEY_DIR_ARRAY, mDirs);\r
         outState.putParcelable(FileDetailFragment.EXTRA_FILE, mCurrentDir);\r
+        Log.i(getClass().toString(), "onSaveInstanceState() end");\r
     }\r
 \r
     @Override\r
     protected void onResume() {\r
+        Log.i(getClass().toString(), "onResume() start");\r
         super.onResume();\r
 \r
-        if (accountsAreSetup()) {\r
+        if (!AccountUtils.accountsAreSetup(this)) {\r
+            /*Intent intent = new Intent(android.provider.Settings.ACTION_ADD_ACCOUNT);\r
+            intent.putExtra(android.provider.Settings.EXTRA_AUTHORITIES, new String[] { AccountAuthenticator.AUTH_TOKEN_TYPE });\r
+            //startActivity(intent);\r
+            startActivityForResult(intent, ACTION_CREATE_FIRST_ACCOUNT);*/\r
+            \r
+        } else {    // at least an account exist: normal operation\r
 \r
-            setContentView(mLayoutView);    // this should solve the crash by repeated inflating in big screens (DROIDCLOUD-27)\r
+            // set the layout only if it couldn't be set in onCreate\r
+            if (findViewById(R.id.file_list_view) == null)\r
+                setContentView(mLayoutView);\r
 \r
             // Listen for sync messages\r
             IntentFilter syncIntentFilter = new IntentFilter(FileSyncService.SYNC_MESSAGE);\r
-            syncBroadcastRevceiver = new SyncBroadcastReceiver();\r
-            registerReceiver(syncBroadcastRevceiver, syncIntentFilter);\r
+            mSyncBroadcastReceiver = new SyncBroadcastReceiver();\r
+            registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);\r
+            \r
+            // Listen for upload messages\r
+            IntentFilter uploadIntentFilter = new IntentFilter(FileUploader.UPLOAD_FINISH_MESSAGE);\r
+            mUploadFinishReceiver = new UploadFinishReceiver();\r
+            registerReceiver(mUploadFinishReceiver, uploadIntentFilter);\r
         \r
             // Storage manager initialization\r
             mStorageManager = new FileDataStorageManager(\r
@@ -355,16 +376,23 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
             // List dir here\r
             mFileList.listDirectory(mCurrentDir);\r
         }\r
+        Log.i(getClass().toString(), "onResume() end");\r
     }\r
 \r
     @Override\r
     protected void onPause() {\r
+        Log.i(getClass().toString(), "onPause() start");\r
         super.onPause();\r
-        if (syncBroadcastRevceiver != null) {\r
-            unregisterReceiver(syncBroadcastRevceiver);\r
-            syncBroadcastRevceiver = null;\r
+        if (mSyncBroadcastReceiver != null) {\r
+            unregisterReceiver(mSyncBroadcastReceiver);\r
+            mSyncBroadcastReceiver = null;\r
+        }\r
+        if (mUploadFinishReceiver != null) {\r
+            unregisterReceiver(mUploadFinishReceiver);\r
+            mUploadFinishReceiver = null;\r
         }\r
         getIntent().putExtra(FileDetailFragment.EXTRA_FILE, mCurrentDir);\r
+        Log.i(getClass().toString(), "onPause() end");\r
     }\r
 \r
     @Override\r
@@ -520,18 +548,6 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
         return !mDirectories.isEmpty();\r
     }\r
 \r
-    /**\r
-     * Checks, whether or not there are any ownCloud accounts setup.\r
-     * \r
-     * @return true, if there is at least one account.\r
-     */\r
-    private boolean accountsAreSetup() {\r
-        AccountManager accMan = AccountManager.get(this);\r
-        Account[] accounts = accMan\r
-                .getAccountsByType(AccountAuthenticator.ACCOUNT_TYPE);\r
-        return accounts.length > 0;\r
-    }\r
-\r
     private class DirectoryCreator implements Runnable {\r
         private String mTargetPath;\r
         private Account mAccount;\r
@@ -598,17 +614,58 @@ public class FileDisplayActivity extends SherlockFragmentActivity implements
                     .getStringExtra(FileSyncService.ACCOUNT_NAME);\r
             Log.d("FileDisplay", "sync of account " + account_name\r
                     + " is in_progress: " + inProgress);\r
-            setProgressBarIndeterminateVisibility(inProgress);\r
+            setSupportProgressBarIndeterminateVisibility(inProgress);\r
+            \r
+            long OCDirId = intent.getLongExtra(FileSyncService.SYNC_FOLDER, -1);\r
+            if (OCDirId > 0) {\r
+                OCFile syncDir = mStorageManager.getFileById(OCDirId);\r
+                if (syncDir != null && (\r
+                        (mCurrentDir == null && syncDir.getFileName().equals("/")) ||\r
+                         syncDir.equals(mCurrentDir))\r
+                    ) {\r
+                    FileListFragment fileListFragment = (FileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
+                    if (fileListFragment != null) { \r
+                        fileListFragment.listDirectory();\r
+                    }\r
+                }\r
+            }\r
+            \r
             if (!inProgress) {\r
-                FileListFragment fileListFramgent = (FileListFragment) getSupportFragmentManager()\r
+                FileListFragment fileListFragment = (FileListFragment) getSupportFragmentManager()\r
                         .findFragmentById(R.id.fileList);\r
-                if (fileListFramgent != null)\r
-                    fileListFramgent.listDirectory();\r
+                if (fileListFragment != null)\r
+                    fileListFragment.listDirectory();\r
             }\r
         }\r
 \r
     }\r
+    \r
+\r
+    private class UploadFinishReceiver extends BroadcastReceiver {\r
+        /**\r
+         * Once the file upload has finished -> update view\r
+         *  @author David A. Velasco\r
+         * {@link BroadcastReceiver} to enable upload feedback in UI\r
+         */\r
+        @Override\r
+        public void onReceive(Context context, Intent intent) {\r
+            long parentDirId = intent.getLongExtra(FileUploader.EXTRA_PARENT_DIR_ID, -1);\r
+            OCFile parentDir = mStorageManager.getFileById(parentDirId);\r
+            \r
+            if (parentDir != null && (\r
+                    (mCurrentDir == null && parentDir.getFileName().equals("/")) ||\r
+                     parentDir.equals(mCurrentDir))\r
+                ) {\r
+                FileListFragment fileListFragment = (FileListFragment) getSupportFragmentManager().findFragmentById(R.id.fileList);\r
+                if (fileListFragment != null) { \r
+                    fileListFragment.listDirectory();\r
+                }\r
+            }\r
+        }\r
+        \r
+    }\r
 \r
+    \r
     @Override\r
     public void onClick(View v) {\r
         if (v.getId() == R.id.setup_account) {\r
index ee69555..2badae1 100644 (file)
@@ -22,6 +22,7 @@ import java.util.List;
 import android.accounts.Account;\r
 import android.accounts.AccountManager;\r
 import android.app.ActionBar.LayoutParams;\r
+import android.content.ActivityNotFoundException;\r
 import android.content.BroadcastReceiver;\r
 import android.content.Context;\r
 import android.content.Intent;\r
@@ -38,6 +39,7 @@ import android.view.LayoutInflater;
 import android.view.View;\r
 import android.view.View.OnClickListener;\r
 import android.view.ViewGroup;\r
+import android.webkit.MimeTypeMap;\r
 import android.widget.Button;\r
 import android.widget.ImageView;\r
 import android.widget.TextView;\r
@@ -203,9 +205,13 @@ public class FileDetailFragment extends SherlockFragment implements
                     if (mFile.getMimetype().startsWith("image/")) {\r
                         BitmapFactory.Options options = new Options();\r
                         options.inScaled = true;\r
-                        options.inMutable = false;\r
-                        options.inPreferQualityOverSpeed = false;\r
                         options.inPurgeable = true;\r
+                        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.GINGERBREAD_MR1) {\r
+                            options.inPreferQualityOverSpeed = false;\r
+                        }\r
+                        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {\r
+                            options.inMutable = false;\r
+                        }\r
 \r
                         Bitmap bmp = BitmapFactory.decodeFile(mFile.getStoragePath(), options);\r
 \r
@@ -224,18 +230,55 @@ public class FileDetailFragment extends SherlockFragment implements
                 } catch (OutOfMemoryError e) {\r
                     preview.setVisibility(View.INVISIBLE);\r
                     Log.e(TAG, "Out of memory occured for file with size " + mFile.getFileLength());\r
+                    \r
+                } catch (NoSuchFieldError e) {\r
+                    preview.setVisibility(View.INVISIBLE);\r
+                    Log.e(TAG, "Error from access to unexisting field despite protection " + mFile.getFileLength());\r
+                    \r
+                } catch (Throwable t) {\r
+                    preview.setVisibility(View.INVISIBLE);\r
+                    Log.e(TAG, "Unexpected error while creating image preview " + mFile.getFileLength(), t);\r
                 }\r
                 downloadButton.setText(R.string.filedetails_open);\r
                 downloadButton.setOnClickListener(new OnClickListener() {\r
                     @Override\r
                     public void onClick(View v) {\r
-                        Intent i = new Intent(Intent.ACTION_VIEW);\r
-                        i.setDataAndType(Uri.parse("file://"+mFile.getStoragePath()), mFile.getMimetype());\r
-                        List list = getActivity().getPackageManager().queryIntentActivities(i, PackageManager.MATCH_DEFAULT_ONLY);\r
-                        if (list.size() > 0) {\r
+                        String storagePath = mFile.getStoragePath();\r
+                        try {\r
+                            Intent i = new Intent(Intent.ACTION_VIEW);\r
+                            i.setDataAndType(Uri.parse("file://"+ storagePath), mFile.getMimetype());\r
+                            i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);\r
                             startActivity(i);\r
-                        } else {\r
-                            Toast.makeText(getActivity(), "There is no application to handle file " + mFile.getFileName(), Toast.LENGTH_SHORT).show();\r
+                            \r
+                        } catch (Throwable t) {\r
+                            Log.e(TAG, "Fail when trying to open with the mimeType provided from the ownCloud server: " + mFile.getMimetype());\r
+                            boolean toastIt = true; \r
+                            String mimeType = "";\r
+                            try {\r
+                                Intent i = new Intent(Intent.ACTION_VIEW);\r
+                                mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(storagePath.substring(storagePath.lastIndexOf('.') + 1));\r
+                                if (mimeType != mFile.getMimetype()) {\r
+                                    i.setDataAndType(Uri.parse("file://"+mFile.getStoragePath()), mimeType);\r
+                                    i.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);\r
+                                    startActivity(i);\r
+                                    toastIt = false;\r
+                                }\r
+                                \r
+                            } catch (IndexOutOfBoundsException e) {\r
+                                Log.e(TAG, "Trying to find out MIME type of a file without extension: " + storagePath);\r
+                                \r
+                            } catch (ActivityNotFoundException e) {\r
+                                Log.e(TAG, "No activity found to handle: " + storagePath + " with MIME type " + mimeType + " obtained from extension");\r
+                                \r
+                            } catch (Throwable th) {\r
+                                Log.e(TAG, "Unexpected problem when opening: " + storagePath, th);\r
+                                \r
+                            } finally {\r
+                                if (toastIt) {\r
+                                    Toast.makeText(getActivity(), "There is no application to handle file " + mFile.getFileName(), Toast.LENGTH_SHORT).show();\r
+                                }\r
+                            }\r
+                            \r
                         }\r
                     }\r
                 });\r
@@ -306,7 +349,7 @@ public class FileDetailFragment extends SherlockFragment implements
      * the time that the file was created. There is a chance that this will\r
      * be fixed in future versions. Use this method to check if this version of\r
      * ownCloud has this fix.\r
-     * @return True, if ownCloud the ownCloud version is > 3.0.4 and 4.0.1\r
+     * @return True, if ownCloud the ownCloud version is > 3.0.4 and 4.0.4\r
      */\r
     private boolean ocVersionSupportsTimeCreated(){\r
         if(mIntent != null){\r
@@ -315,7 +358,7 @@ public class FileDetailFragment extends SherlockFragment implements
                 AccountManager accManager = (AccountManager) getActivity().getSystemService(Context.ACCOUNT_SERVICE);\r
                 OwnCloudVersion ocVersion = new OwnCloudVersion(accManager\r
                         .getUserData(ocAccount, AccountAuthenticator.KEY_OC_VERSION));\r
-                if(ocVersion.compareTo(new OwnCloudVersion(0x030004)) >= 0 || ocVersion.compareTo(new OwnCloudVersion(0x040001)) >= 0){\r
+                if(ocVersion.compareTo(new OwnCloudVersion(0x030004)) >= 0 || ocVersion.compareTo(new OwnCloudVersion(0x040004)) >= 0){\r
                     return true;\r
                 }\r
             }\r
index 3aedfad..895b3a2 100644 (file)
@@ -50,36 +50,40 @@ import eu.alefzero.owncloud.ui.adapter.FileListListAdapter;
  */\r
 public class FileListFragment extends FragmentListView {\r
     private static final String TAG = "FileListFragment";\r
-    //private Account mAccount;         // dvelasco : the fragment is not recreated when other account is selected; keep as an attribute is dangerous\r
+    \r
     private Vector<OCFile> mFiles;    \r
-    //private DataStorageManager mStorageManager;   // dvelasco : just the same; it depends upon the current account ; it's updated in FileDisplayActivity!!\r
     private OCFile mFile;\r
-    private boolean mIsLargeDevice = false\r
+    private boolean mIsLargeDevice; \r
 \r
     @Override\r
     public void onCreate(Bundle savedInstanceState) {\r
+        Log.i(getClass().toString(), "onCreate() start");\r
         super.onCreate(savedInstanceState);\r
 \r
         Intent intent = getActivity().getIntent();\r
         OCFile directory = intent.getParcelableExtra(FileDetailFragment.EXTRA_FILE);\r
         mFile = directory;\r
+        mIsLargeDevice = false; \r
         \r
+        Log.i(getClass().toString(), "onCreate() stop");\r
     }\r
     \r
     @Override\r
     public View onCreateView(LayoutInflater inflater, ViewGroup container,\r
             Bundle savedInstanceState) {\r
+        Log.i(getClass().toString(), "onCreateView() start");\r
         super.onCreateView(inflater, container, savedInstanceState);\r
         getListView().setDivider(getResources().getDrawable(R.drawable.uploader_list_separator));\r
         getListView().setDividerHeight(1);\r
         \r
-        //listDirectory(mFile);\r
-        \r
+        Log.i(getClass().toString(), "onCreateView() end");\r
         return getListView();\r
     }    \r
 \r
     @Override\r
     public void onStart() {\r
+        Log.i(getClass().toString(), "onStart() start");\r
+        super.onStart();\r
         // Create a placeholder upon launch\r
         View fragmentContainer = getActivity().findViewById(R.id.file_details_container);\r
         if (fragmentContainer != null) {\r
@@ -88,7 +92,7 @@ public class FileListFragment extends FragmentListView {
             transaction.replace(R.id.file_details_container, new FileDetailFragment(true));\r
             transaction.commit();\r
         }\r
-        super.onStart();\r
+        Log.i(getClass().toString(), "onStart() end");\r
     }\r
 \r
     @Override\r
@@ -206,16 +210,10 @@ public class FileListFragment extends FragmentListView {
         mFile = directory;\r
         \r
         mFiles = storageManager.getDirectoryContent(directory);\r
-        if (mFiles == null || mFiles.size() == 0) {\r
+        /*if (mFiles == null || mFiles.size() == 0) {\r
             Toast.makeText(getActivity(), "There are no files here", Toast.LENGTH_LONG).show();\r
-        }\r
+        }*/\r
         setListAdapter(new FileListListAdapter(directory, storageManager, getActivity()));\r
     }\r
 \r
-    @Override\r
-    public void onSaveInstanceState(Bundle outState) {\r
-        super.onSaveInstanceState(outState);\r
-        outState.putParcelable("ACCOUNT", AccountUtils.getCurrentOwnCloudAccount(getActivity()));\r
-    }\r
-\r
 }\r
index 032d996..f4fbda4 100644 (file)
@@ -52,6 +52,10 @@ public class WebdavEntry {
             prop = propSet.get(DavPropertyName.GETCONTENTTYPE);
             if (prop != null) {
                 mContentType = (String) prop.getValue();
+                // dvelasco: some builds of ownCloud server 4.0.x added a trailing ';' to the MIME type ; if looks fixed, but let's be cautious
+                if (mContentType.indexOf(";") >= 0) {
+                    mContentType = mContentType.substring(0, mContentType.indexOf(";"));
+                }
             } else {
                 mContentType = "DIR";
                 /*