Add unshare with user option to share with view
authormasensio <masensio@solidgear.es>
Mon, 19 Oct 2015 11:52:58 +0000 (13:52 +0200)
committerDavid A. Velasco <dvelasco@solidgear.es>
Fri, 30 Oct 2015 15:28:37 +0000 (16:28 +0100)
res/layout/share_user_item.xml
src/com/owncloud/android/ui/adapter/ShareUserListAdapter.java
src/com/owncloud/android/ui/fragment/OCFileListFragment.java
src/com/owncloud/android/ui/fragment/ShareFileFragment.java

index 1a9077b..e360d1d 100644 (file)
     android:layout_height="match_parent"
     android:orientation="vertical">
 
     android:layout_height="match_parent"
     android:orientation="vertical">
 
-    <TextView
+    <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:text="@string/username"
-        android:id="@+id/userOrGroupName"
-        android:layout_margin="12dp"
-        android:textColor="@color/textColor"/>
+        android:orientation="horizontal"
+        android:weightSum="1"
+        android:longClickable="true">
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_weight="0.7"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:text="@string/username"
+            android:id="@+id/userOrGroupName"
+            android:layout_margin="12dp"
+            android:textColor="@color/textColor"/>
+
+        <ImageView
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_weight="0.3"
+            android:id="@+id/unshareButton"
+            android:src="@drawable/ic_cancel"
+            android:layout_marginRight="4dp"
+            android:layout_marginLeft="4dp"
+            android:layout_gravity="center_horizontal"
+            android:visibility="gone"/>
+    </LinearLayout>
 
     <View
         android:layout_width="match_parent"
 
     <View
         android:layout_width="match_parent"
index 2297fc2..900fe15 100644 (file)
@@ -25,14 +25,14 @@ import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ArrayAdapter;
-import android.widget.BaseAdapter;
+import android.widget.ImageView;
 import android.widget.TextView;
 
 import com.owncloud.android.R;
 import android.widget.TextView;
 
 import com.owncloud.android.R;
+import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.ShareType;
 
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.ShareType;
 
-import java.io.File;
 import java.util.ArrayList;
 
 /**
 import java.util.ArrayList;
 
 /**
@@ -43,6 +43,8 @@ public class ShareUserListAdapter extends ArrayAdapter {
     private Context mContext;
     private ArrayList<OCShare> mShares;
 
     private Context mContext;
     private ArrayList<OCShare> mShares;
 
+    private ImageView mUnshareButton;
+
     public ShareUserListAdapter(Context context, int resource, ArrayList<OCShare>shares) {
         super(context, resource);
         mContext= context;
     public ShareUserListAdapter(Context context, int resource, ArrayList<OCShare>shares) {
         super(context, resource);
         mContext= context;
@@ -65,10 +67,9 @@ public class ShareUserListAdapter extends ArrayAdapter {
     }
 
     @Override
     }
 
     @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
+    public View getView(final int position, View convertView, ViewGroup parent) {
         LayoutInflater inflator = (LayoutInflater) mContext
                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         LayoutInflater inflator = (LayoutInflater) mContext
                 .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-//        View rowView = inflater.inflate(R.layout.row_estacion, parent, false);
         View view = inflator.inflate(R.layout.share_user_item, parent, false);
 
         if (mShares != null && mShares.size() > position) {
         View view = inflator.inflate(R.layout.share_user_item, parent, false);
 
         if (mShares != null && mShares.size() > position) {
@@ -76,12 +77,28 @@ public class ShareUserListAdapter extends ArrayAdapter {
 
             TextView userName = (TextView) view.findViewById(R.id.userOrGroupName);
             String name = share.getSharedWithDisplayName();
 
             TextView userName = (TextView) view.findViewById(R.id.userOrGroupName);
             String name = share.getSharedWithDisplayName();
-            if (share.getShareType() == ShareType.GROUP){
+            if (share.getShareType() == ShareType.GROUP) {
                 name = name + "(group)";
             }
             userName.setText(name);
                 name = name + "(group)";
             }
             userName.setText(name);
-        }
 
 
+            mUnshareButton = (ImageView) view.findViewById(R.id.unshareButton);
+            mUnshareButton.setVisibility(View.GONE);
+            mUnshareButton.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    // TODO: Unshare
+
+                    Log_OC.d("TAG - ShareUserListAdapter", "TODO Unshare - " +
+                            mShares.get(position).getSharedWithDisplayName());
+                }
+            });
+
+
+        }
         return view;
     }
         return view;
     }
+
+
+
 }
 }
index 5dfa6a5..599959d 100644 (file)
@@ -53,8 +53,8 @@ import com.owncloud.android.ui.dialog.RemoveFileDialogFragment;
 import com.owncloud.android.ui.dialog.RenameFileDialogFragment;
 import com.owncloud.android.ui.preview.PreviewImageFragment;
 import com.owncloud.android.ui.preview.PreviewMediaFragment;
 import com.owncloud.android.ui.dialog.RenameFileDialogFragment;
 import com.owncloud.android.ui.preview.PreviewImageFragment;
 import com.owncloud.android.ui.preview.PreviewMediaFragment;
-import com.owncloud.android.utils.FileStorageUtils;
 import com.owncloud.android.ui.preview.PreviewTextFragment;
 import com.owncloud.android.ui.preview.PreviewTextFragment;
+import com.owncloud.android.utils.FileStorageUtils;
 
 import java.io.File;
 
 
 import java.io.File;
 
index 90304d2..4546cc0 100644 (file)
 package com.owncloud.android.ui.fragment;
 
 import android.accounts.Account;
 package com.owncloud.android.ui.fragment;
 
 import android.accounts.Account;
-import android.accounts.AuthenticatorException;
-import android.accounts.OperationCanceledException;
 import android.app.Activity;
 import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.v4.app.Fragment;
 import android.view.LayoutInflater;
 import android.app.Activity;
 import android.graphics.Bitmap;
 import android.net.Uri;
 import android.os.Bundle;
 import android.support.v4.app.Fragment;
 import android.view.LayoutInflater;
+import android.view.MotionEvent;
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.AdapterView;
 import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.TextView;
 import android.widget.Toast;
 
 import android.widget.Button;
 import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.TextView;
 import android.widget.Toast;
 
-import com.owncloud.android.MainApp;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.ThumbnailsCacheManager;
 import com.owncloud.android.R;
 import com.owncloud.android.datamodel.FileDataStorageManager;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.ThumbnailsCacheManager;
-import com.owncloud.android.lib.common.OwnCloudAccount;
-import com.owncloud.android.lib.common.OwnCloudClient;
-import com.owncloud.android.lib.common.OwnCloudClientManagerFactory;
-import com.owncloud.android.lib.common.accounts.AccountUtils;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 import com.owncloud.android.lib.common.operations.RemoteOperationResult;
-import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.ShareType;
 import com.owncloud.android.lib.resources.shares.OCShare;
 import com.owncloud.android.lib.resources.shares.ShareType;
-import com.owncloud.android.operations.GetSharesForFileOperation;
-import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.activity.ShareActivity;
 import com.owncloud.android.ui.activity.ShareActivity;
-import com.owncloud.android.ui.adapter.LocalFileListAdapter;
 import com.owncloud.android.ui.adapter.ShareUserListAdapter;
 import com.owncloud.android.ui.adapter.ShareUserListAdapter;
-import com.owncloud.android.utils.CopyTmpFileAsyncTask;
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.GetShareWithUserAsyncTask;
 import com.owncloud.android.utils.MimetypeIconUtil;
 
 import com.owncloud.android.utils.DisplayUtils;
 import com.owncloud.android.utils.GetShareWithUserAsyncTask;
 import com.owncloud.android.utils.MimetypeIconUtil;
 
-import java.io.IOException;
 import java.util.ArrayList;
 
 /**
 import java.util.ArrayList;
 
 /**
@@ -74,7 +63,7 @@ import java.util.ArrayList;
  * create an instance of this fragment.
  */
 public class ShareFileFragment extends Fragment
  * create an instance of this fragment.
  */
 public class ShareFileFragment extends Fragment
-        implements GetShareWithUserAsyncTask.OnGetSharesWithUserTaskListener{
+        implements GetShareWithUserAsyncTask.OnGetSharesWithUserTaskListener, View.OnTouchListener {
     private static final String TAG = ShareFileFragment.class.getSimpleName();
 
     // the fragment initialization parameters
     private static final String TAG = ShareFileFragment.class.getSimpleName();
 
     // the fragment initialization parameters
@@ -172,7 +161,7 @@ public class ShareFileFragment extends Fragment
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
 
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
 
-        getShares(mFile);
+        getShares();
     }
 
     // TODO: Rename method, update argument and hook method into UI event
     }
 
     // TODO: Rename method, update argument and hook method into UI event
@@ -200,26 +189,14 @@ public class ShareFileFragment extends Fragment
     }
 
     // Get users and groups to fill the "share with" list
     }
 
     // Get users and groups to fill the "share with" list
-    private void getShares(OCFile file){
+    private void getShares(){
         mShares = new ArrayList<>();
 
         mShares = new ArrayList<>();
 
-        RemoteOperationResult result = null;
-
-        // Show loading
-        // TODO: Activate loading
-//        ( (ShareActivity) getActivity()).showWaitingLoadDialog();
         // Get Users and Groups
         // Get Users and Groups
-        GetShareWithUserAsyncTask getTask = new GetShareWithUserAsyncTask(this);
         FileDataStorageManager fileDataStorageManager =
                 new FileDataStorageManager(mAccount, getActivity().getContentResolver());
         mShares = fileDataStorageManager.getSharesWithForAFile(mFile.getRemotePath(), mAccount.name);
 
         FileDataStorageManager fileDataStorageManager =
                 new FileDataStorageManager(mAccount, getActivity().getContentResolver());
         mShares = fileDataStorageManager.getSharesWithForAFile(mFile.getRemotePath(), mAccount.name);
 
-//        Object[] params = { mFile, mAccount, fileDataStorageManager};
-//        getTask.execute(params);
-
-//        // Remove loading
-//        ((ShareActivity) getActivity()).dismissWaitingLoadDialog();
-
         // Update list of users/groups
         updateListOfUserGroups();
     }
         // Update list of users/groups
         updateListOfUserGroups();
     }
@@ -260,12 +237,38 @@ public class ShareFileFragment extends Fragment
             usersList.setVisibility(View.VISIBLE);
             usersList.setAdapter(mUserGroupsAdapter);
 
             usersList.setVisibility(View.VISIBLE);
             usersList.setAdapter(mUserGroupsAdapter);
 
+            // Add unshare options
+            registerLongClickListener(usersList);
+
         } else {
             noShares.setVisibility(View.VISIBLE);
             usersList.setVisibility(View.GONE);
         }
     }
 
         } else {
             noShares.setVisibility(View.VISIBLE);
             usersList.setVisibility(View.GONE);
         }
     }
 
+    private void registerLongClickListener(final ListView listView) {
+        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
+            @Override
+            public boolean onItemLongClick(AdapterView<?> parent, View view, int position,
+                                           long id) {
+                // Show unshare button
+                ImageView unshareButton = (ImageView) view.findViewById(R.id.unshareButton);
+                if (unshareButton.getVisibility() == View.GONE) {
+                    unshareButton.setVisibility(View.VISIBLE);
+                } else {
+                    unshareButton.setVisibility(View.GONE);
+                }
+                return false;
+            }
+        });
+    }
+
+    @Override
+    public boolean onTouch(View v, MotionEvent event) {
+        return false;
+    }
+
+
     // TODO: review if it is necessary
     /**
      * This interface must be implemented by activities that contain this
     // TODO: review if it is necessary
     /**
      * This interface must be implemented by activities that contain this