Merge branch 'develop' into share_link__unshare_file
authormasensio <masensio@solidgear.es>
Fri, 7 Feb 2014 11:02:38 +0000 (12:02 +0100)
committermasensio <masensio@solidgear.es>
Fri, 7 Feb 2014 11:02:38 +0000 (12:02 +0100)
1  2 
owncloud-android-library
src/com/owncloud/android/datamodel/FileDataStorageManager.java
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

diff --combined owncloud-android-library
@@@ -1,1 -1,1 +1,1 @@@
--Subproject commit 815fbba48677e40bff2c3c114c4ce8dd1e35bc17
++Subproject commit 985b005995429f52446dc5bb66abd236595e627e
@@@ -790,33 -790,23 +790,23 @@@ public class FileDataStorageManager 
          cv.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
          cv.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
          cv.put(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME, share.getSharedWithDisplayName());
-         cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isDirectory() ? 1 : 0);
+         cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
          cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
          cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
          cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
          
-         boolean samePath = shareExists(share.getPath());
-         if (samePath ||
-                 shareExists(share.getId())) {           // for renamed files; no more delete and create
-             OCShare oldFile = null;
-             if (samePath) {
-                 oldFile = getShareByPath(share.getPath());
-                 share.setId(oldFile.getId());
-             } else {
-                 oldFile = getShareById(share.getId());
-             }
+         if (shareExists(share.getIdRemoteShared())) {           // for renamed files; no more delete and create
  
              overriden = true;
              if (getContentResolver() != null) {
                  getContentResolver().update(ProviderTableMeta.CONTENT_URI_SHARE, cv,
-                         ProviderTableMeta._ID + "=?",
-                         new String[] { String.valueOf(share.getId()) });
+                         ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
+                         new String[] { String.valueOf(share.getIdRemoteShared()) });
              } else {
                  try {
                      getContentProviderClient().update(ProviderTableMeta.CONTENT_URI_SHARE,
-                             cv, ProviderTableMeta._ID + "=?",
-                             new String[] { String.valueOf(share.getId()) });
+                             cv, ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?",
+                             new String[] { String.valueOf(share.getIdRemoteShared()) });
                  } catch (RemoteException e) {
                      Log_OC.e(TAG,
                              "Fail to insert insert file to database "
          return share;
      }
  
+     private OCShare getShareByRemoteId(long remoteId) {
+         Cursor c = getShareCursorForValue(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, String.valueOf(remoteId));
+         OCShare share = null;
+         if (c.moveToFirst()) {
+             share = createShareInstance(c);
+         }
+         c.close();
+         return share;
+     }
      public OCShare getShareByPath(String path) {
          Cursor c = getShareCursorForValue(ProviderTableMeta.OCSHARES_PATH, path);
          OCShare share = null;
                      .getColumnIndex(ProviderTableMeta.OCSHARES_TOKEN)));
              share.setSharedWithDisplayName(c.getString(c
                      .getColumnIndex(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME)));
-             share.setIsDirectory(c.getInt(
+             share.setIsFolder(c.getInt(
                      c.getColumnIndex(ProviderTableMeta.OCSHARES_IS_DIRECTORY)) == 1 ? true : false);
              share.setUserId(c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_USER_ID)));
              share.setIdRemoteShared(c.getLong(c.getColumnIndex(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED)));
          return retval;
      }
      
-     public boolean shareExists(long id) {
-         return shareExists(ProviderTableMeta._ID, String.valueOf(id));
+     private boolean shareExists(long remoteId) {
+         return shareExists(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, String.valueOf(remoteId));
      }
  
-     public boolean shareExists(String path) {
-         return shareExists(ProviderTableMeta.OCSHARES_PATH, path);
-     }
-     
      private void cleanSharedFiles() {
          ContentValues cv = new ContentValues();
          cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, false);
          }
      }
  
+     private void cleanSharedFilesInFolder(OCFile folder) {
+         ContentValues cv = new ContentValues();
+         cv.put(ProviderTableMeta.FILE_SHARE_BY_LINK, false);
+         cv.put(ProviderTableMeta.FILE_PUBLIC_LINK, "");
+         String where = ProviderTableMeta.FILE_ACCOUNT_OWNER + "=? AND " + ProviderTableMeta.FILE_PARENT + "=?";
+         String [] whereArgs = new String[] { mAccount.name , String.valueOf(folder.getFileId()) };
+         
+         if (getContentResolver() != null) {
+             getContentResolver().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs);
+         } else {
+             try {
+                 getContentProviderClient().update(ProviderTableMeta.CONTENT_URI, cv, where, whereArgs);
+                 
+             } catch (RemoteException e) {
+                 Log_OC.e(TAG, "Exception in cleanSharedFilesInFolder " + e.getMessage());
+             }
+         }
+     }
      private void cleanShares() {
          String where = ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
          String [] whereArgs = new String[]{mAccount.name};
                  cv.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
                  cv.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
                  cv.put(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME, share.getSharedWithDisplayName());
-                 cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isDirectory() ? 1 : 0);
+                 cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
                  cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
                  cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
                  cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
  
-                 boolean existsByPath = shareExists(share.getPath());
-                 if (existsByPath || shareExists(share.getId())) {
+                 if (shareExists(share.getIdRemoteShared())) {
                      // updating an existing file
                      operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI_SHARE).
                              withValues(cv).
-                             withSelection(  ProviderTableMeta._ID + "=?", 
-                                     new String[] { String.valueOf(share.getId()) })
+                             withSelection(  ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?", 
+                                     new String[] { String.valueOf(share.getIdRemoteShared()) })
                                      .build());
  
                  } else {
          }
          
      } 
 -
 -
 +    
 +    public void removeShare(OCShare share){
 +        Uri share_uri = ProviderTableMeta.CONTENT_URI_SHARE;
 +        String where = ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?" + " AND " + ProviderTableMeta.FILE_PATH + "=?";
 +        String [] whereArgs = new String[]{mAccount.name, share.getPath()};
 +        if (getContentProviderClient() != null) {
 +            try {
 +                getContentProviderClient().delete(share_uri, where, whereArgs);
 +            } catch (RemoteException e) {
 +                e.printStackTrace();
 +            }
 +        } else {
 +            getContentResolver().delete(share_uri, where, whereArgs); 
 +        }
 +    }
 +    
      public void saveSharesDB(ArrayList<OCShare> shares) {
          saveShares(shares);
  
          for (OCShare share : shares) {
              // Get the path
              String path = share.getPath();
-             if (share.isDirectory()) {
+             if (share.isFolder()) {
                  path = path + FileUtils.PATH_SEPARATOR;
              }           
  
          
          updateSharedFiles(sharedFiles);
      }
+     
+     public void saveSharesInFolder(ArrayList<OCShare> shares, OCFile folder) {
+         cleanSharedFilesInFolder(folder);
+         ArrayList<ContentProviderOperation> operations = new ArrayList<ContentProviderOperation>();
+         operations = prepareRemoveSharesInFolder(folder, operations);
+         
+         if (shares != null) {
+             // prepare operations to insert or update files to save in the given folder
+             for (OCShare share : shares) {
+                 ContentValues cv = new ContentValues();
+                 cv.put(ProviderTableMeta.OCSHARES_FILE_SOURCE, share.getFileSource());
+                 cv.put(ProviderTableMeta.OCSHARES_ITEM_SOURCE, share.getItemSource());
+                 cv.put(ProviderTableMeta.OCSHARES_SHARE_TYPE, share.getShareType().getValue());
+                 cv.put(ProviderTableMeta.OCSHARES_SHARE_WITH, share.getShareWith());
+                 cv.put(ProviderTableMeta.OCSHARES_PATH, share.getPath());
+                 cv.put(ProviderTableMeta.OCSHARES_PERMISSIONS, share.getPermissions());
+                 cv.put(ProviderTableMeta.OCSHARES_SHARED_DATE, share.getSharedDate());
+                 cv.put(ProviderTableMeta.OCSHARES_EXPIRATION_DATE, share.getExpirationDate());
+                 cv.put(ProviderTableMeta.OCSHARES_TOKEN, share.getToken());
+                 cv.put(ProviderTableMeta.OCSHARES_SHARE_WITH_DISPLAY_NAME, share.getSharedWithDisplayName());
+                 cv.put(ProviderTableMeta.OCSHARES_IS_DIRECTORY, share.isFolder() ? 1 : 0);
+                 cv.put(ProviderTableMeta.OCSHARES_USER_ID, share.getUserId());
+                 cv.put(ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED, share.getIdRemoteShared());
+                 cv.put(ProviderTableMeta.OCSHARES_ACCOUNT_OWNER, mAccount.name);
+                 /*
+                 if (shareExists(share.getIdRemoteShared())) {
+                     // updating an existing share resource
+                     operations.add(ContentProviderOperation.newUpdate(ProviderTableMeta.CONTENT_URI_SHARE).
+                             withValues(cv).
+                             withSelection(  ProviderTableMeta.OCSHARES_ID_REMOTE_SHARED + "=?", 
+                                     new String[] { String.valueOf(share.getIdRemoteShared()) })
+                                     .build());
+                 } else {
+                 */
+                 // adding a new share resource
+                 operations.add(ContentProviderOperation.newInsert(ProviderTableMeta.CONTENT_URI_SHARE).withValues(cv).build());
+                 //}
+             }
+         }
+             
+         // apply operations in batch
+         if (operations.size() > 0) {
+             @SuppressWarnings("unused")
+             ContentProviderResult[] results = null;
+             Log_OC.d(TAG, "Sending " + operations.size() + " operations to FileContentProvider");
+             try {
+                 if (getContentResolver() != null) {
+                     results = getContentResolver().applyBatch(MainApp.getAuthority(), operations);
+                 } else {
+                     results = getContentProviderClient().applyBatch(operations);
+                 }
+             } catch (OperationApplicationException e) {
+                 Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+             } catch (RemoteException e) {
+                 Log_OC.e(TAG, "Exception in batch of operations  " + e.getMessage());
+             }
+         }
+         //}
+         
+     }
+     private ArrayList<ContentProviderOperation> prepareRemoveSharesInFolder(OCFile folder, ArrayList<ContentProviderOperation> preparedOperations) {
+         if (folder != null) {
+             String where = ProviderTableMeta.OCSHARES_PATH + "=?" + " AND " + ProviderTableMeta.OCSHARES_ACCOUNT_OWNER + "=?";
+             String [] whereArgs = new String[]{ "", mAccount.name };
+             
+             Vector<OCFile> files = getFolderContent(folder);
+             
+             for (OCFile file : files) {
+                 whereArgs[0] = file.getRemotePath();
+                 preparedOperations.add(ContentProviderOperation.newDelete(ProviderTableMeta.CONTENT_URI_SHARE)
+                         .withSelection(where, whereArgs)
+                         .build());
+             }
+         }
+         return preparedOperations;
+         
+         /*
+         if (operations.size() > 0) {
+             try {
+                 if (getContentResolver() != null) {
+                     getContentResolver().applyBatch(MainApp.getAuthority(), operations);
+                 } else {
+                     getContentProviderClient().applyBatch(operations);
+                 }
+             } catch (OperationApplicationException e) {
+                 Log_OC.e(TAG, "Exception in batch of operations " + e.getMessage());
+             } catch (RemoteException e) {
+                 Log_OC.e(TAG, "Exception in batch of operations  " + e.getMessage());
+             }
+         }            
+         */
+             
+             /*
+             if (getContentResolver() != null) {
+                 
+                 getContentResolver().delete(ProviderTableMeta.CONTENT_URI_SHARE, 
+                                             where,
+                                             whereArgs);
+             } else {
+                 try {
+                     getContentProviderClient().delete(  ProviderTableMeta.CONTENT_URI_SHARE, 
+                                                         where,
+                                                         whereArgs);
+                 } catch (RemoteException e) {
+                     Log_OC.e(TAG, "Exception deleting shares in a folder " + e.getMessage());
+                 }
+             }
+             */
+         //}
+     }
  }
@@@ -43,7 -43,7 +43,7 @@@ import android.preference.PreferenceMan
  import android.provider.MediaStore;
  import android.support.v4.app.Fragment;
  import android.support.v4.app.FragmentTransaction;
- import android.support.v4.content.LocalBroadcastManager;
//import android.support.v4.content.LocalBroadcastManager;
  import android.util.Log;
  import android.view.View;
  import android.view.ViewGroup;
@@@ -75,7 -75,6 +75,7 @@@ import com.owncloud.android.operations.
  import com.owncloud.android.operations.RenameFileOperation;
  import com.owncloud.android.operations.SynchronizeFileOperation;
  import com.owncloud.android.operations.SynchronizeFolderOperation;
 +import com.owncloud.android.operations.UnshareLinkOperation;
  import com.owncloud.android.services.OperationsService;
  import com.owncloud.android.syncadapter.FileSyncAdapter;
  import com.owncloud.android.ui.dialog.EditNameDialog;
@@@ -86,7 -85,6 +86,7 @@@ import com.owncloud.android.ui.fragment
  import com.owncloud.android.ui.fragment.FileFragment;
  import com.owncloud.android.ui.fragment.OCFileListFragment;
  import com.owncloud.android.ui.preview.PreviewImageActivity;
 +import com.owncloud.android.ui.preview.PreviewImageFragment;
  import com.owncloud.android.ui.preview.PreviewMediaFragment;
  import com.owncloud.android.ui.preview.PreviewVideoActivity;
  import com.owncloud.android.utils.DisplayUtils;
@@@ -100,7 -98,7 +100,7 @@@ import com.owncloud.android.utils.Log_O
   * @author David A. Velasco
   */
  
- public class FileDisplayActivity extends FileActivity implements
+ public class FileDisplayActivity extends HookActivity implements
  OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNavigationListener, OnSslValidatorListener, EditNameDialogListener {
  
      private ArrayAdapter<String> mDirectories;
      private SyncBroadcastReceiver mSyncBroadcastReceiver;
      private UploadFinishReceiver mUploadFinishReceiver;
      private DownloadFinishReceiver mDownloadFinishReceiver;
-     private OperationsServiceReceiver mOperationsServiceReceiver;
+     //private OperationsServiceReceiver mOperationsServiceReceiver;
      private FileDownloaderBinder mDownloaderBinder = null;
      private FileUploaderBinder mUploaderBinder = null;
      private ServiceConnection mDownloadConnection = null, mUploadConnection = null;
      private OCFile mWaitingToPreview;
      
      private boolean mSyncInProgress = false;
-     private boolean mRefreshSharesInProgress = false;
+     //private boolean mRefreshSharesInProgress = false;
  
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          if(savedInstanceState != null) {
              mWaitingToPreview = (OCFile) savedInstanceState.getParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW);
              mSyncInProgress = savedInstanceState.getBoolean(KEY_SYNC_IN_PROGRESS);
-             mRefreshSharesInProgress = savedInstanceState.getBoolean(KEY_REFRESH_SHARES_IN_PROGRESS);
+             //mRefreshSharesInProgress = savedInstanceState.getBoolean(KEY_REFRESH_SHARES_IN_PROGRESS);
             
          } else {
              mWaitingToPreview = null;
              mSyncInProgress = false;
-             mRefreshSharesInProgress = false;
+             //mRefreshSharesInProgress = false;
          }        
  
          /// USER INTERFACE
          // Action bar setup
          mDirectories = new CustomArrayAdapter<String>(this, R.layout.sherlock_spinner_dropdown_item);
          getSupportActionBar().setHomeButtonEnabled(true);       // mandatory since Android ICS, according to the official documentation
-         setSupportProgressBarIndeterminateVisibility(mSyncInProgress || mRefreshSharesInProgress);    // always AFTER setContentView(...) ; to work around bug in its implementation
+         setSupportProgressBarIndeterminateVisibility(mSyncInProgress /*|| mRefreshSharesInProgress*/);    // always AFTER setContentView(...) ; to work around bug in its implementation
          
          Log_OC.d(TAG, "onCreate() end");
      }
              // the next operation triggers a new call to this method, but it's necessary to 
              // ensure that the name exposed in the action bar is the current directory when the 
              // user selected it in the navigation list
-             getSupportActionBar().setSelectedNavigationItem(0);
+             if (getSupportActionBar().getNavigationMode() == ActionBar.NAVIGATION_MODE_LIST  && itemPosition != 0) 
+                 getSupportActionBar().setSelectedNavigationItem(0);
          }
          return true;
      }
          super.onSaveInstanceState(outState);
          outState.putParcelable(FileDisplayActivity.KEY_WAITING_TO_PREVIEW, mWaitingToPreview);
          outState.putBoolean(FileDisplayActivity.KEY_SYNC_IN_PROGRESS, mSyncInProgress);
-         outState.putBoolean(FileDisplayActivity.KEY_REFRESH_SHARES_IN_PROGRESS, mRefreshSharesInProgress);
+         //outState.putBoolean(FileDisplayActivity.KEY_REFRESH_SHARES_IN_PROGRESS, mRefreshSharesInProgress);
  
          Log_OC.d(TAG, "onSaveInstanceState() end");
      }
          // Listen for sync messages
          IntentFilter syncIntentFilter = new IntentFilter(FileSyncAdapter.EVENT_FULL_SYNC_START);
          syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_END);
-         syncIntentFilter.addAction(FileSyncAdapter.EVENT_FOLDER_SIZE_SYNCED);
-         syncIntentFilter.addAction(FileSyncAdapter.EVENT_FOLDER_CONTENTS_SYNCED);
-         syncIntentFilter.addAction(SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SYNCED);
+         syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_FOLDER_SIZE_SYNCED);
+         syncIntentFilter.addAction(FileSyncAdapter.EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED);
+         syncIntentFilter.addAction(SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_CONTENTS_SYNCED);
+         syncIntentFilter.addAction(SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED);
          mSyncBroadcastReceiver = new SyncBroadcastReceiver();
-         //registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
-         LocalBroadcastManager.getInstance(this).registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
+         registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
+         //LocalBroadcastManager.getInstance(this).registerReceiver(mSyncBroadcastReceiver, syncIntentFilter);
  
          // Listen for upload messages
          IntentFilter uploadIntentFilter = new IntentFilter(FileUploader.getUploadFinishMessage());
          registerReceiver(mDownloadFinishReceiver, downloadIntentFilter);
          
          // Listen for messages from the OperationsService
+         /*
          IntentFilter operationsIntentFilter = new IntentFilter(OperationsService.ACTION_OPERATION_ADDED);
          operationsIntentFilter.addAction(OperationsService.ACTION_OPERATION_FINISHED);
          mOperationsServiceReceiver = new OperationsServiceReceiver();
          LocalBroadcastManager.getInstance(this).registerReceiver(mOperationsServiceReceiver, operationsIntentFilter);
+         */
      
          Log_OC.d(TAG, "onResume() end");
      }
          super.onPause();
          Log_OC.e(TAG, "onPause() start");
          if (mSyncBroadcastReceiver != null) {
-             //unregisterReceiver(mSyncBroadcastReceiver);
-             LocalBroadcastManager.getInstance(this).unregisterReceiver(mSyncBroadcastReceiver);
+             unregisterReceiver(mSyncBroadcastReceiver);
+             //LocalBroadcastManager.getInstance(this).unregisterReceiver(mSyncBroadcastReceiver);
              mSyncBroadcastReceiver = null;
          }
          if (mUploadFinishReceiver != null) {
              unregisterReceiver(mDownloadFinishReceiver);
              mDownloadFinishReceiver = null;
          }
+         /*
          if (mOperationsServiceReceiver != null) {
              LocalBroadcastManager.getInstance(this).unregisterReceiver(mOperationsServiceReceiver);
              mOperationsServiceReceiver = null;
          }
+         */
          Log_OC.d(TAG, "onPause() end");
      }
  
  
              ((TextView) v).setTextColor(getResources().getColorStateList(
                      android.R.color.white));
+             
+             fixRoot((TextView) v );
              return v;
          }
  
              ((TextView) v).setTextColor(getResources().getColorStateList(
                      android.R.color.white));
  
+             fixRoot((TextView) v );
              return v;
          }
  
+         private void fixRoot(TextView v) {
+             if (v.getText().equals(OCFile.PATH_SEPARATOR)) {
+                 v.setText(R.string.default_display_name_for_root_folder);
+             }
+         }
      }
  
      private class SyncBroadcastReceiver extends BroadcastReceiver {
          @Override
          public void onReceive(Context context, Intent intent) {
              String event = intent.getAction();
+             Log_OC.d(TAG, "Received broadcast " + event);
              String accountName = intent.getStringExtra(FileSyncAdapter.EXTRA_ACCOUNT_NAME);
              String synchFolderRemotePath = intent.getStringExtra(FileSyncAdapter.EXTRA_FOLDER_PATH); 
              RemoteOperationResult synchResult = (RemoteOperationResult)intent.getSerializableExtra(FileSyncAdapter.EXTRA_RESULT);
  
              if (sameAccount) {
                  
-                 if (!FileSyncAdapter.EVENT_FULL_SYNC_START.equals(event)) {
+                 if (FileSyncAdapter.EVENT_FULL_SYNC_START.equals(event)) {
+                     mSyncInProgress = true;
+                     
+                 } else {
                      OCFile currentFile = (getFile() == null) ? null : getStorageManager().getFileByPath(getFile().getRemotePath());
                      OCFile currentDir = (getCurrentDir() == null) ? null : getStorageManager().getFileByPath(getCurrentDir().getRemotePath());
  
                          setFile(currentFile);
                      }
                      
-                     mSyncInProgress = (!FileSyncAdapter.EVENT_FULL_SYNC_END.equals(event) && 
-                                         !SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SYNCED.equals(event) &&
-                                         (synchResult == null || synchResult.isSuccess())) ;
-                     
+                     mSyncInProgress = (!FileSyncAdapter.EVENT_FULL_SYNC_END.equals(event) && !SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SHARES_SYNCED.equals(event));
+                             
+                     /*
                      if (synchResult != null && 
                          synchResult.isSuccess() &&
                              (SynchronizeFolderOperation.EVENT_SINGLE_FOLDER_SYNCED.equals(event) || 
-                                 FileSyncAdapter.EVENT_FOLDER_CONTENTS_SYNCED.equals(event)
+                                 FileSyncAdapter.EVENT_FULL_SYNC_FOLDER_CONTENTS_SYNCED.equals(event)
                              ) &&
                              !mRefreshSharesInProgress &&
                              getFileOperationsHelper().isSharedSupported(FileDisplayActivity.this)
                          ) {
                          startGetShares();
                      }
+                     */
                      
                  }
-                 //removeStickyBroadcast(intent);
-                 setSupportProgressBarIndeterminateVisibility(mSyncInProgress || mRefreshSharesInProgress);
+                 removeStickyBroadcast(intent);
+                 Log_OC.d(TAG, "Setting progress visibility to " + mSyncInProgress);
+                 setSupportProgressBarIndeterminateVisibility(mSyncInProgress /*|| mRefreshSharesInProgress*/);
              }
              
              if (synchResult != null) {
              if (OperationsService.ACTION_OPERATION_ADDED.equals(intent.getAction())) {
                  
              } else if (OperationsService.ACTION_OPERATION_FINISHED.equals(intent.getAction())) {
-                 mRefreshSharesInProgress = false;
+                 //mRefreshSharesInProgress = false;
                  
                  Account account = intent.getParcelableExtra(OperationsService.EXTRA_ACCOUNT);
                  RemoteOperationResult getSharesResult = (RemoteOperationResult)intent.getSerializableExtra(OperationsService.EXTRA_RESULT);
                      showDialog(DIALOG_SSL_VALIDATOR); 
                  }
  
-                 setSupportProgressBarIndeterminateVisibility(mRefreshSharesInProgress || mSyncInProgress);
+                 //setSupportProgressBarIndeterminateVisibility(mRefreshSharesInProgress || mSyncInProgress);
              }
              
          }
          if (chosenFile == null || mDualPane) {
              // only list of files - set for browsing through folders
              OCFile currentDir = getCurrentDir();
-             actionBar.setDisplayHomeAsUpEnabled(currentDir != null && currentDir.getParentId() != 0);
-             actionBar.setDisplayShowTitleEnabled(false);
-             actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);
+             boolean noRoot = (currentDir != null && currentDir.getParentId() != 0);
+             actionBar.setDisplayHomeAsUpEnabled(noRoot);
+             actionBar.setDisplayShowTitleEnabled(!noRoot); 
+             if (!noRoot) {
+                 actionBar.setTitle(getString(R.string.default_display_name_for_root_folder));
+             }
+             actionBar.setNavigationMode(!noRoot ? ActionBar.NAVIGATION_MODE_STANDARD : ActionBar.NAVIGATION_MODE_LIST);
              actionBar.setListNavigationCallbacks(mDirectories, this);   // assuming mDirectories is updated
  
          } else {
  
          } else if (operation instanceof CreateFolderOperation) {
              onCreateFolderOperationFinish((CreateFolderOperation)operation, result);
 -        
 +            
          } else if (operation instanceof CreateShareOperation) {
              onCreateShareOperationFinish((CreateShareOperation) operation, result);
 -        }
 +            
 +        } else if (operation instanceof UnshareLinkOperation) {
 +            onUnshareLinkOperationFinish((UnshareLinkOperation)operation, result);
 +        
 +        } 
          
      }
  
 -
 +    
      private void onCreateShareOperationFinish(CreateShareOperation operation, RemoteOperationResult result) {
          if (result.isSuccess()) {
 +            refreshShowDetails();
              refeshListOfFilesFragment();
          }
      }
  
      
 +    private void onUnshareLinkOperationFinish(UnshareLinkOperation operation, RemoteOperationResult result) {
 +        if (result.isSuccess()) {
 +            refreshShowDetails();
 +            refeshListOfFilesFragment();
 +        }
 +    }
 +    
 +    private void refreshShowDetails() {
 +        FileFragment details = getSecondFragment();
 +        if (details != null) {
 +            OCFile file = details.getFile();
 +            if (file != null) {
 +                file = getStorageManager().getFileByPath(file.getRemotePath()); {
 +                    if (!(details instanceof PreviewMediaFragment || details instanceof PreviewImageFragment)) {
 +                        showDetails(file);
 +                    } else if (details instanceof PreviewMediaFragment) {                        
 +                        startMediaPreview(file, 0, false);
 +                    } 
 +                }
 +                invalidateOptionsMenu();
 +            }
 +        }
 +    }
 +    
      /**
       * Updates the view associated to the activity after the finish of an operation trying to remove a 
       * file. 
          RemoteOperation synchFolderOp = new SynchronizeFolderOperation( folder,  
                                                                          currentSyncTime, 
                                                                          false,
+                                                                         getFileOperationsHelper().isSharedSupported(this),
                                                                          getStorageManager(), 
                                                                          getAccount(), 
                                                                          getApplicationContext()
          setSupportProgressBarIndeterminateVisibility(true);
      }
  
-     
+     /*
      private void startGetShares() {
          // Get shared files/folders
          Intent intent = new Intent(this, OperationsService.class);
          
          mRefreshSharesInProgress = true;
      }
-     
-     
+     */
  
  }