Merge pull request #549 from owncloud/see_files_shared_with_me
authorDavid A. Velasco <dvelasco@owncloud.com>
Tue, 1 Jul 2014 08:05:25 +0000 (10:05 +0200)
committerDavid A. Velasco <dvelasco@owncloud.com>
Tue, 1 Jul 2014 08:05:25 +0000 (10:05 +0200)
New icons for files shared with me out of Shared/ folder, for new sharing policy in OC 7

18 files changed:
owncloud-android-library
res/drawable-hdpi/shared_with_me.png [new file with mode: 0644]
res/drawable-hdpi/shared_with_me_folder.png [new file with mode: 0644]
res/drawable-hdpi/sharedlink.png
res/drawable-mdpi/shared_with_me.png [new file with mode: 0644]
res/drawable-mdpi/shared_with_me_folder.png [new file with mode: 0644]
res/drawable-mdpi/sharedlink.png
res/drawable-xhdpi/shared_with_me.png [new file with mode: 0644]
res/drawable-xhdpi/sharedlink.png
res/layout/list_item.xml
src/com/owncloud/android/datamodel/FileDataStorageManager.java
src/com/owncloud/android/datamodel/OCFile.java
src/com/owncloud/android/db/ProviderMeta.java
src/com/owncloud/android/operations/SynchronizeFolderOperation.java
src/com/owncloud/android/providers/FileContentProvider.java
src/com/owncloud/android/ui/adapter/FileListListAdapter.java
src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java
src/com/owncloud/android/utils/FileStorageUtils.java

index 8f8c29c..48d43b5 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 8f8c29c776c299a639bc21a5ffbb63aeda07b1f9
+Subproject commit 48d43b576c1411be4bbf8a9b96e351fa18948a2f
diff --git a/res/drawable-hdpi/shared_with_me.png b/res/drawable-hdpi/shared_with_me.png
new file mode 100644 (file)
index 0000000..222172a
Binary files /dev/null and b/res/drawable-hdpi/shared_with_me.png differ
diff --git a/res/drawable-hdpi/shared_with_me_folder.png b/res/drawable-hdpi/shared_with_me_folder.png
new file mode 100644 (file)
index 0000000..271e7b2
Binary files /dev/null and b/res/drawable-hdpi/shared_with_me_folder.png differ
index 222172a..071c622 100644 (file)
Binary files a/res/drawable-hdpi/sharedlink.png and b/res/drawable-hdpi/sharedlink.png differ
diff --git a/res/drawable-mdpi/shared_with_me.png b/res/drawable-mdpi/shared_with_me.png
new file mode 100644 (file)
index 0000000..8300eac
Binary files /dev/null and b/res/drawable-mdpi/shared_with_me.png differ
diff --git a/res/drawable-mdpi/shared_with_me_folder.png b/res/drawable-mdpi/shared_with_me_folder.png
new file mode 100644 (file)
index 0000000..3b8aeee
Binary files /dev/null and b/res/drawable-mdpi/shared_with_me_folder.png differ
index 8300eac..95ab180 100644 (file)
Binary files a/res/drawable-mdpi/sharedlink.png and b/res/drawable-mdpi/sharedlink.png differ
diff --git a/res/drawable-xhdpi/shared_with_me.png b/res/drawable-xhdpi/shared_with_me.png
new file mode 100644 (file)
index 0000000..3879663
Binary files /dev/null and b/res/drawable-xhdpi/shared_with_me.png differ
index 3879663..f474b48 100644 (file)
Binary files a/res/drawable-xhdpi/sharedlink.png and b/res/drawable-xhdpi/sharedlink.png differ
index abe0e7f..9c47aa6 100644 (file)
 \r
     </LinearLayout>\r
 \r
+    <LinearLayout\r
+        android:layout_width="wrap_content"\r
+        android:layout_height="match_parent"\r
+        android:gravity="center_vertical"\r
+        android:orientation="vertical">\r
+\r
     <ImageView\r
-        android:id="@+id/shareIcon"\r
+        android:id="@+id/sharedIcon"\r
         android:layout_width="wrap_content"\r
         android:layout_height="wrap_content"\r
         android:layout_gravity="center_vertical"\r
         android:layout_marginLeft="4dp"\r
+        android:layout_marginBottom="4dp"\r
         android:layout_marginRight="4dp"\r
         android:src="@drawable/sharedlink" />\r
 \r
     <ImageView\r
+        android:id="@+id/sharedWithMeIcon"\r
+        android:layout_width="wrap_content"\r
+        android:layout_height="wrap_content"\r
+        android:layout_gravity="center_vertical"\r
+        android:layout_marginLeft="4dp"\r
+        android:layout_marginRight="4dp"\r
+        android:layout_marginTop="4dp"\r
+        android:src="@drawable/shared_with_me" />\r
+\r
+    </LinearLayout>\r
+\r
+    <ImageView\r
         android:id="@+id/custom_checkbox"\r
         android:layout_width="wrap_content"\r
         android:layout_height="wrap_content"\r
index 650acf7..c8c0d24 100644 (file)
@@ -186,6 +186,8 @@ public class FileDataStorageManager {
         cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag());
         cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0);
         cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink());
+        cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions());
+        cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId());
         
         boolean sameRemotePath = fileExists(file.getRemotePath());
         if (sameRemotePath ||
@@ -285,6 +287,8 @@ public class FileDataStorageManager {
             cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag());
             cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0);
             cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink());
+            cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions());
+            cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId());
 
             boolean existsByPath = fileExists(file.getRemotePath());
             if (existsByPath || fileExists(file.getFileId())) {
@@ -342,6 +346,8 @@ public class FileDataStorageManager {
         cv.put(ProviderTableMeta.FILE_ETAG, folder.getEtag());
         cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, folder.isShareByLink() ? 1 : 0);
         cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, folder.getPublicLink());
+        cv.put(ProviderTableMeta.FILE_PERMISSIONS, folder.getPermissions());
+        cv.put(ProviderTableMeta.FILE_REMOTE_ID, folder.getRemoteId());
         
         operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI).
                 withValues(cv).
@@ -750,6 +756,8 @@ public class FileDataStorageManager {
             file.setShareByLink(c.getInt(
                     c.getColumnIndex(ProviderTableMeta.FILE_SHARE_BY_LINK)) == 1 ? true : false);
             file.setPublicLink(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_PUBLIC_LINK)));
+            file.setPermissions(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_PERMISSIONS)));
+            file.setRemoteId(c.getString(c.getColumnIndex(ProviderTableMeta.FILE_REMOTE_ID)));
                     
         }
         return file;
@@ -1092,6 +1100,8 @@ public class FileDataStorageManager {
                 cv.put(ProviderTableMeta.FILE_ETAG, file.getEtag());
                 cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, file.isShareByLink() ? 1 : 0);
                 cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, file.getPublicLink());
+                cv.put(ProviderTableMeta.FILE_PERMISSIONS, file.getPermissions());
+                cv.put(ProviderTableMeta.FILE_REMOTE_ID, file.getRemoteId());
 
                 boolean existsByPath = fileExists(file.getRemotePath());
                 if (existsByPath || fileExists(file.getFileId())) {
index 82c341c..92168ff 100644 (file)
@@ -65,6 +65,9 @@ public class OCFile implements Parcelable, Comparable<OCFile> {
     private boolean mShareByLink;
     private String mPublicLink;
 
+    private String mPermissions;
+    private String mRemoteId;
+
 
     /**
      * Create new {@link OCFile} with given path.
@@ -104,6 +107,8 @@ public class OCFile implements Parcelable, Comparable<OCFile> {
         mEtag = source.readString();
         mShareByLink = source.readInt() == 1;
         mPublicLink = source.readString();
+        mPermissions = source.readString();
+        mRemoteId = source.readString();
     }
 
     @Override
@@ -124,6 +129,8 @@ public class OCFile implements Parcelable, Comparable<OCFile> {
         dest.writeString(mEtag);
         dest.writeInt(mShareByLink ? 1 : 0);
         dest.writeString(mPublicLink);
+        dest.writeString(mPermissions);
+        dest.writeString(mRemoteId);
     }
     
     /**
@@ -334,6 +341,8 @@ public class OCFile implements Parcelable, Comparable<OCFile> {
         mEtag = null;
         mShareByLink = false;
         mPublicLink = null;
+        mPermissions = null;
+        mRemoteId = null;
     }
 
     /**
@@ -518,4 +527,20 @@ public class OCFile implements Parcelable, Comparable<OCFile> {
         return (result != null) ? result : "";
     }
 
+    public String getPermissions() {
+        return mPermissions;
+    }
+
+    public void setPermissions(String permissions) {
+        this.mPermissions = permissions;
+    }
+
+    public String getRemoteId() {
+        return mRemoteId;
+    }
+
+    public void setRemoteId(String remoteId) {
+        this.mRemoteId = remoteId;
+    }
+
 }
index 2101a68..1adf697 100644 (file)
  */\r
 package com.owncloud.android.db;\r
 \r
-import com.owncloud.android.MainApp;\r
-\r
 import android.net.Uri;\r
 import android.provider.BaseColumns;\r
 \r
+import com.owncloud.android.MainApp;\r
+\r
 /**\r
  * Meta-Class that holds various static field information\r
  * \r
@@ -31,7 +31,7 @@ import android.provider.BaseColumns;
 public class ProviderMeta {\r
 \r
     public static final String DB_NAME = "filelist";\r
-    public static final int DB_VERSION = 6;\r
+    public static final int DB_VERSION = 7;\r
 \r
     private ProviderMeta() {\r
     }\r
@@ -68,6 +68,8 @@ public class ProviderMeta {
         public static final String FILE_ETAG = "etag";\r
         public static final String FILE_SHARE_BY_LINK = "share_by_link";\r
         public static final String FILE_PUBLIC_LINK = "public_link";\r
+        public static final String FILE_PERMISSIONS = "permissions";\r
+        public static final String FILE_REMOTE_ID = "remote_id";\r
 \r
         public static final String FILE_DEFAULT_SORT_ORDER = FILE_NAME\r
                 + " collate nocase asc";\r
index a8e230d..fc4a74e 100644 (file)
@@ -416,6 +416,8 @@ public class SynchronizeFolderOperation extends RemoteOperation {
         file.setMimetype(remote.getMimeType());
         file.setModificationTimestamp(remote.getModifiedTimestamp());
         file.setEtag(remote.getEtag());
+        file.setPermissions(remote.getPermissions());
+        file.setRemoteId(remote.getRemoteId());
         return file;
     }
     
index c84d66b..d001bf8 100644 (file)
@@ -93,6 +93,10 @@ public class FileContentProvider extends ContentProvider {
                 ProviderTableMeta.FILE_SHARE_BY_LINK);
         mFileProjectionMap.put(ProviderTableMeta.FILE_PUBLIC_LINK,
                 ProviderTableMeta.FILE_PUBLIC_LINK);
+        mFileProjectionMap.put(ProviderTableMeta.FILE_PERMISSIONS,
+                ProviderTableMeta.FILE_PERMISSIONS);
+        mFileProjectionMap.put(ProviderTableMeta.FILE_REMOTE_ID,
+                ProviderTableMeta.FILE_REMOTE_ID);
     }
 
     private static final int SINGLE_FILE = 1;
@@ -554,7 +558,9 @@ public class FileContentProvider extends ContentProvider {
                     + ProviderTableMeta.FILE_MODIFIED_AT_LAST_SYNC_FOR_DATA + " INTEGER, "
                     + ProviderTableMeta.FILE_ETAG + " TEXT, " 
                     + ProviderTableMeta.FILE_SHARE_BY_LINK + " INTEGER, "
-                    + ProviderTableMeta.FILE_PUBLIC_LINK  + " TEXT );"
+                    + ProviderTableMeta.FILE_PUBLIC_LINK  + " TEXT, "
+                    + ProviderTableMeta.FILE_PERMISSIONS  + " TEXT null,"
+                    + ProviderTableMeta.FILE_REMOTE_ID  + " TEXT null);"
                     );
             
             // Create table ocshares
@@ -643,7 +649,7 @@ public class FileContentProvider extends ContentProvider {
             }
             if (!upgraded)
                 Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion + ", newVersion == " + newVersion);
-            
+
             if (oldVersion < 6 && newVersion >= 6) {
                 Log_OC.i("SQL", "Entering in the #5 ADD in onUpgrade");
                 db.beginTransaction();
@@ -655,7 +661,7 @@ public class FileContentProvider extends ContentProvider {
                     db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME +
                             " ADD COLUMN " + ProviderTableMeta.FILE_PUBLIC_LINK + " TEXT " +
                             " DEFAULT NULL");
-                    
+
                     // Create table ocshares
                     db.execSQL("CREATE TABLE " + ProviderTableMeta.OCSHARES_TABLE_NAME + "("
                             + ProviderTableMeta._ID + " INTEGER PRIMARY KEY, "
@@ -673,6 +679,27 @@ public class FileContentProvider extends ContentProvider {
                             + ProviderTableMeta.OCSHARES_USER_ID + " INTEGER, "
                             + ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + " INTEGER," 
                             + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + " TEXT );" );
+
+                    upgraded = true;
+                    db.setTransactionSuccessful();
+                } finally {
+                    db.endTransaction();
+                }
+            }
+            if (!upgraded)
+                Log_OC.i("SQL", "OUT of the ADD in onUpgrade; oldVersion == " + oldVersion + ", newVersion == " + newVersion);
+
+            if (oldVersion < 7 && newVersion >= 7) {
+                Log_OC.i("SQL", "Entering in the #7 ADD in onUpgrade");
+                db.beginTransaction();
+                try {
+                    db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME +
+                            " ADD COLUMN " + ProviderTableMeta.FILE_PERMISSIONS + " TEXT " +
+                            " DEFAULT NULL");
+
+                    db .execSQL("ALTER TABLE " + ProviderTableMeta.FILE_TABLE_NAME +
+                            " ADD COLUMN " + ProviderTableMeta.FILE_REMOTE_ID + " TEXT " +
+                            " DEFAULT NULL");
                     
                     upgraded = true;
                     db.setTransactionSuccessful();
index 656e004..408154a 100644 (file)
  */\r
 package com.owncloud.android.ui.adapter;\r
 \r
+import java.util.Vector;\r
+\r
 import android.accounts.Account;\r
-import android.content.Context;
+import android.content.Context;\r
 import android.view.LayoutInflater;\r
 import android.view.View;\r
 import android.view.ViewGroup;\r
@@ -28,9 +30,6 @@ import android.widget.ListAdapter;
 import android.widget.ListView;\r
 import android.widget.TextView;\r
 \r
-\r
-import java.util.Vector;\r
-\r
 import com.owncloud.android.R;\r
 import com.owncloud.android.authentication.AccountUtils;\r
 import com.owncloud.android.datamodel.FileDataStorageManager;\r
@@ -49,6 +48,8 @@ import com.owncloud.android.utils.DisplayUtils;
  * \r
  */\r
 public class FileListListAdapter extends BaseAdapter implements ListAdapter {\r
+    private final static String PERMISSION_SHARED_WITH_ME = "S";\r
+\r
     private Context mContext;\r
     private OCFile mFile = null;\r
     private Vector<OCFile> mFiles = null;\r
@@ -113,7 +114,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 \r
             fileName.setText(name);\r
             ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1);\r
-            fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
+            ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon);\r
+            ImageView sharedWithMeIconV = (ImageView) view.findViewById(R.id.sharedWithMeIcon);\r
+            sharedWithMeIconV.setVisibility(View.GONE);\r
+\r
             ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2);\r
             FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder();\r
             FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();\r
@@ -158,7 +162,12 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                     }\r
                     checkBoxV.setVisibility(View.VISIBLE);\r
                 }\r
-                \r
+\r
+                fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
+\r
+                if (checkIfFileIsSharedWithMe(file)) {\r
+                    sharedWithMeIconV.setVisibility(View.VISIBLE);\r
+                }\r
             } \r
             else {\r
                 \r
@@ -168,13 +177,19 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));\r
                 checkBoxV.setVisibility(View.GONE);\r
                 view.findViewById(R.id.imageView3).setVisibility(View.GONE);\r
+\r
+                if (checkIfFileIsSharedWithMe(file)) {\r
+                    fileIcon.setImageResource(R.drawable.shared_with_me_folder);\r
+                    sharedWithMeIconV.setVisibility(View.VISIBLE);\r
+                } else {\r
+                    fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));\r
+                }\r
             }\r
-            \r
-            ImageView shareIconV = (ImageView) view.findViewById(R.id.shareIcon);\r
+\r
             if (file.isShareByLink()) {\r
-                shareIconV.setVisibility(View.VISIBLE);\r
+                sharedIconV.setVisibility(View.VISIBLE);\r
             } else {\r
-                shareIconV.setVisibility(View.INVISIBLE);\r
+                sharedIconV.setVisibility(View.GONE);\r
             }\r
         }\r
 \r
@@ -215,4 +230,15 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         notifyDataSetChanged();\r
     }\r
     \r
+    /**\r
+     * Check if parent folder does not include 'S' permission and if file/folder\r
+     * is shared with me\r
+     * \r
+     * @param file: OCFile\r
+     * @return boolean: True if it is shared with me and false if it is not\r
+     */\r
+    private boolean checkIfFileIsSharedWithMe(OCFile file) {\r
+        return (mFile.getPermissions() != null && !mFile.getPermissions().contains(PERMISSION_SHARED_WITH_ME)\r
+                && file.getPermissions() != null && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME));\r
+    }\r
 }\r
index 5686874..6190ebe 100644 (file)
@@ -21,10 +21,6 @@ import java.io.File;
 import java.util.Arrays;
 import java.util.Comparator;
 
-import com.owncloud.android.R;
-import com.owncloud.android.utils.DisplayUtils;
-
-
 import android.content.Context;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -35,6 +31,9 @@ import android.widget.ListAdapter;
 import android.widget.ListView;
 import android.widget.TextView;
 
+import com.owncloud.android.R;
+import com.owncloud.android.utils.DisplayUtils;
+
 /**
  * This Adapter populates a ListView with all files and directories contained
  * in a local directory
@@ -136,7 +135,8 @@ public class LocalFileListAdapter extends BaseAdapter implements ListAdapter {
             view.findViewById(R.id.imageView2).setVisibility(View.INVISIBLE);   // not GONE; the alignment changes; ugly way to keep it
             view.findViewById(R.id.imageView3).setVisibility(View.GONE);
             
-            view.findViewById(R.id.shareIcon).setVisibility(View.GONE);
+            view.findViewById(R.id.sharedIcon).setVisibility(View.GONE);
+            view.findViewById(R.id.sharedWithMeIcon).setVisibility(View.GONE);
         }
 
         return view;
index e8e8f48..58dda0d 100644 (file)
@@ -97,7 +97,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;
     }
     
@@ -114,6 +115,8 @@ 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;
     }