瀏覽代碼

Merge pull request #549 from owncloud/see_files_shared_with_me

New icons for files shared with me out of Shared/ folder, for new sharing policy in OC 7
David A. Velasco 11 年之前
父節點
當前提交
21071c6994

+ 1 - 1
owncloud-android-library

@@ -1 +1 @@
-Subproject commit 8f8c29c776c299a639bc21a5ffbb63aeda07b1f9
+Subproject commit 48d43b576c1411be4bbf8a9b96e351fa18948a2f

二進制
res/drawable-hdpi/shared_with_me.png


二進制
res/drawable-hdpi/shared_with_me_folder.png


二進制
res/drawable-hdpi/sharedlink.png


二進制
res/drawable-mdpi/shared_with_me.png


二進制
res/drawable-mdpi/shared_with_me_folder.png


二進制
res/drawable-mdpi/sharedlink.png


二進制
res/drawable-xhdpi/shared_with_me.png


二進制
res/drawable-xhdpi/sharedlink.png


+ 20 - 1
res/layout/list_item.xml

@@ -103,15 +103,34 @@
 
     </LinearLayout>
 
+    <LinearLayout
+        android:layout_width="wrap_content"
+        android:layout_height="match_parent"
+        android:gravity="center_vertical"
+        android:orientation="vertical">
+
     <ImageView
-        android:id="@+id/shareIcon"
+        android:id="@+id/sharedIcon"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center_vertical"
         android:layout_marginLeft="4dp"
+        android:layout_marginBottom="4dp"
         android:layout_marginRight="4dp"
         android:src="@drawable/sharedlink" />
 
+    <ImageView
+        android:id="@+id/sharedWithMeIcon"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:layout_marginLeft="4dp"
+        android:layout_marginRight="4dp"
+        android:layout_marginTop="4dp"
+        android:src="@drawable/shared_with_me" />
+
+    </LinearLayout>
+
     <ImageView
         android:id="@+id/custom_checkbox"
         android:layout_width="wrap_content"

+ 10 - 0
src/com/owncloud/android/datamodel/FileDataStorageManager.java

@@ -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())) {

+ 25 - 0
src/com/owncloud/android/datamodel/OCFile.java

@@ -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;
+    }
+
 }

+ 5 - 3
src/com/owncloud/android/db/ProviderMeta.java

@@ -17,11 +17,11 @@
  */
 package com.owncloud.android.db;
 
-import com.owncloud.android.MainApp;
-
 import android.net.Uri;
 import android.provider.BaseColumns;
 
+import com.owncloud.android.MainApp;
+
 /**
  * Meta-Class that holds various static field information
  * 
@@ -31,7 +31,7 @@ import android.provider.BaseColumns;
 public class ProviderMeta {
 
     public static final String DB_NAME = "filelist";
-    public static final int DB_VERSION = 6;
+    public static final int DB_VERSION = 7;
 
     private ProviderMeta() {
     }
@@ -68,6 +68,8 @@ public class ProviderMeta {
         public static final String FILE_ETAG = "etag";
         public static final String FILE_SHARE_BY_LINK = "share_by_link";
         public static final String FILE_PUBLIC_LINK = "public_link";
+        public static final String FILE_PERMISSIONS = "permissions";
+        public static final String FILE_REMOTE_ID = "remote_id";
 
         public static final String FILE_DEFAULT_SORT_ORDER = FILE_NAME
                 + " collate nocase asc";

+ 2 - 0
src/com/owncloud/android/operations/SynchronizeFolderOperation.java

@@ -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;
     }
     

+ 30 - 3
src/com/owncloud/android/providers/FileContentProvider.java

@@ -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();

+ 36 - 10
src/com/owncloud/android/ui/adapter/FileListListAdapter.java

@@ -17,8 +17,10 @@
  */
 package com.owncloud.android.ui.adapter;
 
+import java.util.Vector;
+
 import android.accounts.Account;
-import android.content.Context;
+import android.content.Context;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -28,9 +30,6 @@ import android.widget.ListAdapter;
 import android.widget.ListView;
 import android.widget.TextView;
 
-
-import java.util.Vector;
-
 import com.owncloud.android.R;
 import com.owncloud.android.authentication.AccountUtils;
 import com.owncloud.android.datamodel.FileDataStorageManager;
@@ -49,6 +48,8 @@ import com.owncloud.android.utils.DisplayUtils;
  * 
  */
 public class FileListListAdapter extends BaseAdapter implements ListAdapter {
+    private final static String PERMISSION_SHARED_WITH_ME = "S";
+
     private Context mContext;
     private OCFile mFile = null;
     private Vector<OCFile> mFiles = null;
@@ -113,7 +114,10 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
 
             fileName.setText(name);
             ImageView fileIcon = (ImageView) view.findViewById(R.id.imageView1);
-            fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));
+            ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon);
+            ImageView sharedWithMeIconV = (ImageView) view.findViewById(R.id.sharedWithMeIcon);
+            sharedWithMeIconV.setVisibility(View.GONE);
+
             ImageView localStateView = (ImageView) view.findViewById(R.id.imageView2);
             FileDownloaderBinder downloaderBinder = mTransferServiceGetter.getFileDownloaderBinder();
             FileUploaderBinder uploaderBinder = mTransferServiceGetter.getFileUploaderBinder();
@@ -158,7 +162,12 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                     }
                     checkBoxV.setVisibility(View.VISIBLE);
                 }
-                
+
+                fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));
+
+                if (checkIfFileIsSharedWithMe(file)) {
+                    sharedWithMeIconV.setVisibility(View.VISIBLE);
+                }
             } 
             else {
                 
@@ -168,13 +177,19 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
                 lastModV.setText(DisplayUtils.unixTimeToHumanReadable(file.getModificationTimestamp()));
                 checkBoxV.setVisibility(View.GONE);
                 view.findViewById(R.id.imageView3).setVisibility(View.GONE);
+
+                if (checkIfFileIsSharedWithMe(file)) {
+                    fileIcon.setImageResource(R.drawable.shared_with_me_folder);
+                    sharedWithMeIconV.setVisibility(View.VISIBLE);
+                } else {
+                    fileIcon.setImageResource(DisplayUtils.getResourceId(file.getMimetype(), file.getFileName()));
+                }
             }
-            
-            ImageView shareIconV = (ImageView) view.findViewById(R.id.shareIcon);
+
             if (file.isShareByLink()) {
-                shareIconV.setVisibility(View.VISIBLE);
+                sharedIconV.setVisibility(View.VISIBLE);
             } else {
-                shareIconV.setVisibility(View.INVISIBLE);
+                sharedIconV.setVisibility(View.GONE);
             }
         }
 
@@ -215,4 +230,15 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter {
         notifyDataSetChanged();
     }
     
+    /**
+     * Check if parent folder does not include 'S' permission and if file/folder
+     * is shared with me
+     * 
+     * @param file: OCFile
+     * @return boolean: True if it is shared with me and false if it is not
+     */
+    private boolean checkIfFileIsSharedWithMe(OCFile file) {
+        return (mFile.getPermissions() != null && !mFile.getPermissions().contains(PERMISSION_SHARED_WITH_ME)
+                && file.getPermissions() != null && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME));
+    }
 }

+ 5 - 5
src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java

@@ -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;

+ 4 - 1
src/com/owncloud/android/utils/FileStorageUtils.java

@@ -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;
     }