Merge branch 'master' of https://github.com/owncloud/android into material_buttons
authorAndy Scherzinger <info@andy-scherzinger.de>
Fri, 6 Nov 2015 10:38:51 +0000 (11:38 +0100)
committerAndy Scherzinger <info@andy-scherzinger.de>
Fri, 6 Nov 2015 10:38:51 +0000 (11:38 +0100)
Conflicts:
res/layout/list_item.xml

1  2 
res/layout/list_item.xml
res/layout/ssl_untrusted_cert_layout.xml
res/values/styles.xml
src/com/owncloud/android/ui/activity/FileActivity.java
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/adapter/FileListListAdapter.java
src/com/owncloud/android/ui/adapter/LocalFileListAdapter.java

diff --combined res/layout/list_item.xml
@@@ -22,7 -22,7 +22,7 @@@
      android:layout_width="match_parent"\r
      android:background="@drawable/list_selector"\r
      android:orientation="vertical"\r
 -    android:layout_height="56dp">\r
 +    android:layout_height="72dp">\r
  \r
      <LinearLayout\r
          android:layout_width="match_parent"\r
          android:orientation="horizontal">\r
  \r
          <FrameLayout\r
 -            android:layout_width="56dp"\r
 -            android:layout_height="56dp"\r
 +            android:layout_width="60dp"\r
 +            android:layout_height="72dp"\r
 +            android:paddingLeft="12dp"\r
 +            android:paddingBottom="@dimen/standard_padding"\r
 +            android:paddingTop="@dimen/standard_padding"\r
 +            android:paddingRight="4dp"\r
              android:focusable="false"\r
              android:focusableInTouchMode="false">\r
  \r
                  android:id="@+id/localFileIndicator"\r
                  android:layout_width="@dimen/file_icon_size"\r
                  android:layout_height="@dimen/file_icon_size"\r
 -                android:layout_gravity="center_vertical"\r
 -                android:layout_marginLeft="22dp"\r
 +                android:layout_gravity="top|right"\r
 +                android:layout_marginRight="4dp"\r
                  android:src="@drawable/local_file_indicator" />\r
  \r
              <ImageView\r
                  android:id="@+id/thumbnail"\r
                  android:layout_width="@dimen/file_icon_size"\r
                  android:layout_height="@dimen/file_icon_size"\r
 -                android:layout_gravity="center_vertical"\r
 -                android:layout_marginLeft="12dp"\r
 +                android:layout_gravity="left|center_vertical"\r
                  android:src="@drawable/ic_menu_archive" />\r
  \r
              <ImageView\r
@@@ -59,7 -56,8 +59,7 @@@
                  android:layout_width="wrap_content"\r
                  android:layout_height="wrap_content"\r
                  android:layout_gravity="bottom|right"\r
 -                android:layout_marginBottom="10dp"\r
 -                android:layout_marginRight="2dp"\r
 +                android:layout_marginRight="4dp"\r
                  android:src="@drawable/ic_favorite" />\r
          </FrameLayout>\r
  \r
@@@ -67,8 -65,7 +67,8 @@@
              android:layout_width="0dp"\r
              android:layout_height="match_parent"\r
              android:layout_weight="1"\r
 -            android:gravity="center_vertical"\r
 +            android:gravity="top"\r
 +            android:paddingTop="@dimen/standard_padding"\r
              android:orientation="vertical" >\r
  \r
              <TextView\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_marginLeft="0dp"\r
                  android:layout_marginRight="4dp"\r
                  android:ellipsize="middle"\r
                  android:singleLine="true"\r
                  android:text="TextView"\r
-                 android:textColor="#303030"\r
+                 android:textColor="@color/textColor"\r
 -                android:textSize="16dip" />\r
 +                android:textSize="@dimen/two_line_primary_text_size" />\r
  \r
              <LinearLayout\r
                  android:layout_width="match_parent"\r
                  android:layout_height="wrap_content"\r
 -                android:layout_marginLeft="4dp"\r
 +                android:layout_marginLeft="0dp"\r
                  android:layout_marginRight="4dp"\r
 -                android:weightSum="1">\r
 +                android:orientation="horizontal">\r
  \r
                  <TextView\r
 -                    android:id="@+id/last_mod"\r
 +                    android:id="@+id/file_size"\r
                      android:layout_width="wrap_content"\r
                      android:layout_height="wrap_content"\r
 -                    android:text="TextView"\r
 -                    android:layout_weight=".5"\r
 +                    android:text="Size MB"\r
                      android:textColor="@color/list_item_lastmod_and_filesize_text"\r
 -                    android:textSize="12dip"/>\r
 +                    android:textSize="@dimen/two_line_secondary_text_size"/>\r
  \r
                  <TextView\r
 -                    android:id="@+id/file_size"\r
 +                    android:id="@+id/file_separator"\r
                      android:layout_width="wrap_content"\r
                      android:layout_height="wrap_content"\r
                      android:gravity="right"\r
 -                    android:text="TextView"\r
 +                    android:text=""\r
                      android:textColor="@color/list_item_lastmod_and_filesize_text"\r
 -                    android:layout_weight=".5"\r
 -                    android:textSize="12dip"/>\r
 +                    android:textSize="@dimen/two_line_secondary_text_size"/>\r
 +\r
 +                <TextView\r
 +                    android:id="@+id/last_mod"\r
 +                    android:layout_width="wrap_content"\r
 +                    android:layout_height="wrap_content"\r
 +                    android:gravity="right"\r
 +                    android:text="Mod Date"\r
 +                    android:textColor="@color/list_item_lastmod_and_filesize_text"\r
 +                    android:textSize="@dimen/two_line_secondary_text_size"/>\r
  \r
              </LinearLayout>\r
  \r
          </LinearLayout>\r
  \r
-         <LinearLayout\r
-             android:layout_width="25dp"\r
-             android:layout_height="match_parent"\r
-             android:gravity="center_vertical"\r
-             android:orientation="vertical">\r
\r
-             <ImageView\r
-                 android:id="@+id/sharedIcon"\r
-                 android:layout_width="wrap_content"\r
-                 android:layout_height="wrap_content"\r
-                 android:layout_gravity="center"\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"\r
-                 android:layout_marginLeft="4dp"\r
-                 android:layout_marginRight="4dp"\r
-                 android:layout_marginTop="4dp"\r
-                 android:src="@drawable/shared_with_me"\r
-                 android:visibility="invisible" />\r
\r
-         </LinearLayout>\r
+         <ImageView\r
+             android:id="@+id/sharedIcon"\r
+             android:layout_width="wrap_content"\r
+             android:layout_height="wrap_content"\r
+             android:layout_gravity="center"\r
+             android:layout_marginTop="4dp"\r
+             android:layout_marginLeft="4dp"\r
+             android:layout_marginBottom="4dp"\r
+             android:layout_marginRight="4dp"\r
+             android:src="@drawable/shared_via_link" />\r
  \r
          <ImageView\r
              android:id="@+id/custom_checkbox"\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_marginRight="@dimen/standard_margin"\r
              android:gravity=""\r
 -            android:src="@android:drawable/checkbox_off_background" />\r
 +            android:src="@drawable/ic_checkbox_blank_outline" />\r
      </LinearLayout>\r
  \r
      <View\r
@@@ -21,7 -21,7 +21,7 @@@
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:gravity="center"
 -      android:padding="16dp"
 +      android:padding="@dimen/standard_padding"
      android:orientation="vertical" >
  
        <TextView
@@@ -29,7 -29,7 +29,7 @@@
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="0"
 -              android:paddingBottom="16dp"
 +              android:paddingBottom="@dimen/standard_padding"
                android:text="@string/ssl_validator_header"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:textColor="@android:color/black"
                                    android:text=""
                                    android:textAppearance="?android:attr/textAppearanceSmall"
                                />
-                               
  
                                <TextView
                                android:id="@+id/label_signature"
                                android:text=""
                                android:textAppearance="?android:attr/textAppearanceSmall"
                        />
-                                                                                                                                                                                               
-                                                               
                                <TextView
-                               android:id="@+id/value_signature"
-                               android:layout_width="wrap_content"
-                               android:layout_height="wrap_content"
+                                       android:id="@+id/label_certificate_fingerprint"
+                                       android:layout_width="wrap_content"
+                                       android:layout_height="wrap_content"
                                        android:paddingBottom="5dp"
-                               android:text=""
-                               android:textAppearance="?android:attr/textAppearanceSmall"
-                       />
+                                       android:text="@string/ssl_validator_label_certificate_fingerprint"
+                                       android:textAppearance="?android:attr/textAppearanceSmall"
+                               />
+                               <TextView
+                                       android:id="@+id/value_certificate_fingerprint"
+                                       android:layout_width="wrap_content"
+                                       android:layout_height="wrap_content"
+                                       android:paddingBottom="5dp"
+                                       android:text=""
+                                       android:textAppearance="?android:attr/textAppearanceSmall"
+                               />
                                
                </LinearLayout>
                
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
                android:layout_weight="0"
 -              android:paddingTop="16dp"
 +              android:paddingTop="@dimen/standard_padding"
          android:text="@string/ssl_validator_question"
          android:textAppearance="?android:attr/textAppearanceMedium"
          >
diff --combined res/values/styles.xml
        <style name="Theme.ownCloud" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:actionBarStyle">@style/Theme.ownCloud.Widget.ActionBar</item>
        <item name="actionBarStyle">@style/Theme.ownCloud.Widget.ActionBar</item>
 -      <item name="android:buttonStyle">@style/Theme.ownCloud.ButtonStyle</item>
                <item name="colorPrimary">@color/primary</item>
                <item name="colorPrimaryDark">@color/primary_dark</item>
                <item name="colorAccent">@color/color_accent</item>
                <item name="android:alertDialogTheme">@style/Theme.ownCloud.Dialog</item>
                <item name="alertDialogTheme">@style/ownCloud.AlertDialog</item>
 -              <item name="colorButtonNormal">@color/background_color</item>
 -              <item name="colorControlActivated">@color/primary_dark</item>
 -              <item name="colorControlHighlight">@color/color_accent</item>
        </style>
  
        <!-- seperate action bar style for activities without an action bar -->
        <style name="Theme.ownCloud.noActionBar" parent="Theme.AppCompat.Light.DarkActionBar">
 -              <item name="android:buttonStyle">@style/Theme.ownCloud.ButtonStyle</item>
                <item name="windowNoTitle">true</item>
                <item name="windowActionBar">false</item>
                <item name="colorPrimary">@color/primary</item>
@@@ -40,6 -45,9 +40,6 @@@
                <item name="colorAccent">@color/color_accent</item>
                <item name="android:alertDialogTheme">@style/Theme.ownCloud.Dialog</item>
                <item name="alertDialogTheme">@style/ownCloud.AlertDialog</item>
 -              <item name="colorButtonNormal">@color/background_color</item>
 -              <item name="colorControlActivated">@color/primary_dark</item>
 -              <item name="colorControlHighlight">@color/color_accent</item>
      </style>
  
        <style name="Theme.ownCloud.noActionBar.Login" parent="Theme.ownCloud.noActionBar">
                
        <color name="setup_text_hint">#777777</color>
        <color name="setup_text_typed">#000000</color>
+     <style name="Theme.ownCloud.NoActionBar">
+         <item name="windowActionBar">false</item>
+         <item name="windowNoTitle">true</item>
+     </style>
+     <style name="Theme.ownCloud.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
+     <style name="Theme.ownCloud.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
  </resources>
@@@ -43,7 -43,6 +43,6 @@@ import android.support.v4.widget.Drawer
  import android.support.v7.app.ActionBar;
  import android.support.v7.app.ActionBarDrawerToggle;
  import android.support.v7.app.AppCompatActivity;
- import android.util.Log;
  import android.view.View;
  import android.widget.AdapterView;
  import android.widget.ListView;
@@@ -68,10 -67,12 +67,12 @@@ import com.owncloud.android.lib.common.
  import com.owncloud.android.lib.common.operations.RemoteOperationResult;
  import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode;
  import com.owncloud.android.lib.common.utils.Log_OC;
- import com.owncloud.android.operations.CreateShareOperation;
+ import com.owncloud.android.operations.CreateShareViaLinkOperation;
+ import com.owncloud.android.operations.CreateShareWithShareeOperation;
+ import com.owncloud.android.operations.GetSharesForFileOperation;
  import com.owncloud.android.operations.SynchronizeFileOperation;
  import com.owncloud.android.operations.SynchronizeFolderOperation;
- import com.owncloud.android.operations.UnshareLinkOperation;
+ import com.owncloud.android.operations.UnshareOperation;
  import com.owncloud.android.services.OperationsService;
  import com.owncloud.android.services.OperationsService.OperationsServiceBinder;
  import com.owncloud.android.ui.NavigationDrawerItem;
@@@ -100,12 -101,13 +101,13 @@@ public class FileActivity extends AppCo
      public static final String TAG = FileActivity.class.getSimpleName();
  
      private static final String DIALOG_WAIT_TAG = "DIALOG_WAIT";
      private static final String KEY_WAITING_FOR_OP_ID = "WAITING_FOR_OP_ID";
      private static final String DIALOG_SHARE_PASSWORD = "DIALOG_SHARE_PASSWORD";
      private static final String KEY_TRY_SHARE_AGAIN = "TRY_SHARE_AGAIN";
      private static final String KEY_ACTION_BAR_TITLE = "ACTION_BAR_TITLE";
  
-     protected static final long DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS = 200;
+     protected static final long DELAY_TO_REQUEST_OPERATIONS_LATER = 200;
  
  
      /** OwnCloud {@link Account} where the main {@link OCFile} handled by the activity is located.*/
                      savedInstanceState.getLong(KEY_WAITING_FOR_OP_ID, Long.MAX_VALUE)
                      );
              mTryShareAgain = savedInstanceState.getBoolean(KEY_TRY_SHARE_AGAIN);
-             getSupportActionBar().setTitle(savedInstanceState.getString(KEY_ACTION_BAR_TITLE));
+             if (getSupportActionBar() != null) {
+                 getSupportActionBar().setTitle(savedInstanceState.getString(KEY_ACTION_BAR_TITLE));
+             }
          } else {
              account = getIntent().getParcelableExtra(FileActivity.EXTRA_ACCOUNT);
              mFile = getIntent().getParcelableExtra(FileActivity.EXTRA_FILE);
  //        }
  
          // Display username in drawer
 -        Account account = AccountUtils.getCurrentOwnCloudAccount(getApplicationContext());
 -        if (account != null) {
 -            TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
 -            int lastAtPos = account.name.lastIndexOf("@");
 -            username.setText(account.name.substring(0, lastAtPos));
 -        }
 +        setUsernameInDrawer(navigationDrawerLayout, AccountUtils.getCurrentOwnCloudAccount(getApplicationContext()));
  
          // load slide menu items
          mDrawerTitles = getResources().getStringArray(R.array.drawer_items);
      }
  
      /**
 +     * sets the given account name in the drawer in case the drawer is available. The account name
 +     * is shortened beginning from the @-sign in the username.
 +     *
 +     * @param navigationDrawerLayout the drawer layout to be used
 +     * @param account                the account to be set in the drawer
 +     */
 +    protected void setUsernameInDrawer(RelativeLayout navigationDrawerLayout, Account account) {
 +        if (navigationDrawerLayout != null && getAccount() != null) {
 +            TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
 +            int lastAtPos = account.name.lastIndexOf("@");
 +            username.setText(account.name.substring(0, lastAtPos));
 +        }
 +    }
 +
 +    /**
       * Updates title bar and home buttons (state and icon).
       *
       * Assumes that navigation drawer is NOT visible.
          outState.putBoolean(FileActivity.EXTRA_FROM_NOTIFICATION, mFromNotification);
          outState.putLong(KEY_WAITING_FOR_OP_ID, mFileOperationsHelper.getOpIdWaitingFor());
          outState.putBoolean(KEY_TRY_SHARE_AGAIN, mTryShareAgain);
-         if(getSupportActionBar().getTitle() != null) {
+         if(getSupportActionBar() != null && getSupportActionBar().getTitle() != null) {
              // Null check in case the actionbar is used in ActionBar.NAVIGATION_MODE_LIST
              // since it doesn't have a title then
              outState.putString(KEY_ACTION_BAR_TITLE, getSupportActionBar().getTitle().toString());
  
          mFileOperationsHelper.setOpIdWaitingFor(Long.MAX_VALUE);
  
+         dismissLoadingDialog();
          if (!result.isSuccess() && (
                  result.getCode() == ResultCode.UNAUTHORIZED ||
                  result.isIdPRedirection() ||
              }
              mTryShareAgain = false;
  
-         } else if (operation instanceof CreateShareOperation) {
-             onCreateShareOperationFinish((CreateShareOperation) operation, result);
+         } else if (operation == null ||
+                 operation instanceof CreateShareWithShareeOperation ||
+                 operation instanceof UnshareOperation ||
+                 operation instanceof SynchronizeFolderOperation
+                 ) {
+             if (result.isSuccess()) {
+                 updateFileFromDB();
  
-         } else if (operation instanceof UnshareLinkOperation) {
-             onUnshareLinkOperationFinish((UnshareLinkOperation)operation, result);
+             } else if (result.getCode() != ResultCode.CANCELLED) {
+                 Toast t = Toast.makeText(this,
+                         ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
+                         Toast.LENGTH_LONG);
+                 t.show();
+             }
+         } else if (operation instanceof CreateShareViaLinkOperation) {
+             onCreateShareViaLinkOperationFinish((CreateShareViaLinkOperation) operation, result);
  
-         } else if (operation instanceof SynchronizeFolderOperation) {
-             onSynchronizeFolderOperationFinish((SynchronizeFolderOperation)operation, result);
+         } else if (operation instanceof SynchronizeFileOperation) {
+             onSynchronizeFileOperationFinish((SynchronizeFileOperation) operation, result);
  
-         }else if (operation instanceof SynchronizeFileOperation) {
-             onSynchronizeFileOperationFinish((SynchronizeFileOperation)operation, result);
+         } else if (operation instanceof GetSharesForFileOperation) {
+             if (result.isSuccess()) {
+                 updateFileFromDB();
  
+             } else if (result.getCode() != ResultCode.SHARE_NOT_FOUND) {
+                 Toast t = Toast.makeText(this,
+                         ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
+                         Toast.LENGTH_LONG);
+                 t.show();
+             }
          }
      }
  
  
  
  
-     private void onCreateShareOperationFinish(CreateShareOperation operation,
-                                               RemoteOperationResult result) {
-         dismissLoadingDialog();
+     private void onCreateShareViaLinkOperationFinish(CreateShareViaLinkOperation operation,
+                                                      RemoteOperationResult result) {
          if (result.isSuccess()) {
              mTryShareAgain = false;
              updateFileFromDB();
  
-             Intent sendIntent = operation.getSendIntent();
+             Intent sendIntent = operation.getSendIntentWithSubject(this);
              startActivity(sendIntent);
          } else {
              // Detect Failure (403) --> needs Password
          }
      }
  
-     private void onUnshareLinkOperationFinish(UnshareLinkOperation operation,
-                                               RemoteOperationResult result) {
-         dismissLoadingDialog();
-         if (result.isSuccess()){
-             updateFileFromDB();
-         } else {
-             Toast t = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result,
-                             operation, getResources()), Toast.LENGTH_LONG);
-             t.show();
-         }
-     }
-     private void onSynchronizeFolderOperationFinish(
-             SynchronizeFolderOperation operation, RemoteOperationResult result
-     ) {
-         if (!result.isSuccess() && result.getCode() != ResultCode.CANCELLED){
-             Toast t = Toast.makeText(this, ErrorMessageAdapter.getErrorCauseMessage(result,
-                             operation, getResources()), Toast.LENGTH_LONG);
-             t.show();
-         }
-     }
      private void onSynchronizeFileOperationFinish(SynchronizeFileOperation operation,
                                                    RemoteOperationResult result) {
-         dismissLoadingDialog();
          OCFile syncedFile = operation.getLocalFile();
          if (!result.isSuccess()) {
              if (result.getCode() == ResultCode.SYNC_CONFLICT) {
      /**
       * Show loading dialog
       */
-     public void showLoadingDialog() {
+     public void showLoadingDialog(String message) {
          // Construct dialog
-         LoadingDialog loading = new LoadingDialog(getResources().getString(R.string.wait_a_moment));
+         LoadingDialog loading = new LoadingDialog(message);
          FragmentManager fm = getSupportFragmentManager();
          FragmentTransaction ft = fm.beginTransaction();
          loading.show(ft, DIALOG_WAIT_TAG);
@@@ -79,13 -79,14 +79,14 @@@ import com.owncloud.android.lib.common.
  import com.owncloud.android.lib.common.utils.Log_OC;
  import com.owncloud.android.operations.CopyFileOperation;
  import com.owncloud.android.operations.CreateFolderOperation;
- import com.owncloud.android.operations.CreateShareOperation;
+ import com.owncloud.android.operations.CreateShareViaLinkOperation;
+ import com.owncloud.android.operations.CreateShareWithShareeOperation;
  import com.owncloud.android.operations.MoveFileOperation;
  import com.owncloud.android.operations.RefreshFolderOperation;
  import com.owncloud.android.operations.RemoveFileOperation;
  import com.owncloud.android.operations.RenameFileOperation;
  import com.owncloud.android.operations.SynchronizeFileOperation;
- import com.owncloud.android.operations.UnshareLinkOperation;
+ import com.owncloud.android.operations.UnshareOperation;
  import com.owncloud.android.services.observer.FileObserverService;
  import com.owncloud.android.syncadapter.FileSyncAdapter;
  import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
@@@ -116,8 -117,6 +117,6 @@@ public class FileDisplayActivity extend
          implements FileFragment.ContainerActivity,
          OnSslUntrustedCertListener, OnEnforceableRefreshListener {
  
      private SyncBroadcastReceiver mSyncBroadcastReceiver;
      private UploadFinishReceiver mUploadFinishReceiver;
      private DownloadFinishReceiver mDownloadFinishReceiver;
      }
  
      @Override
+     protected void onStop() {
+         Log_OC.v(TAG, "onStop() start");
+         super.onStop();
+         Log_OC.v(TAG, "onStop() end");
+     }
+     @Override
      protected void onDestroy() {
          Log_OC.v(TAG, "onDestroy() start");
          super.onDestroy();
              setFile(file);
  
              if (mAccountWasSet) {
 -                RelativeLayout navigationDrawerLayout = (RelativeLayout) findViewById(R.id.left_drawer);
 -                if (navigationDrawerLayout != null && getAccount() != null) {
 -                    TextView username = (TextView) navigationDrawerLayout.findViewById(R.id.drawer_username);
 -                    int lastAtPos = getAccount().name.lastIndexOf("@");
 -                    username.setText(getAccount().name.substring(0, lastAtPos));
 -                }
 +                setUsernameInDrawer((RelativeLayout) findViewById(R.id.left_drawer), getAccount());
              }
  
              if (!stateWasRecovered) {
                              requestMoveOperation(fData, fResultCode);
                          }
                      },
-                     DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS
+                     DELAY_TO_REQUEST_OPERATIONS_LATER
              );
  
          } else if (requestCode == ACTION_COPY_FILES && resultCode == RESULT_OK) {
                              requestCopyOperation(fData, fResultCode);
                          }
                      },
-                     DELAY_TO_REQUEST_OPERATION_ON_ACTIVITY_RESULTS
+                     DELAY_TO_REQUEST_OPERATIONS_LATER
              );
  
          } else {
                              }
  
                          }
                      }
                      removeStickyBroadcast(intent);
                      Log_OC.d(TAG, "Setting progress visibility to " + mSyncInProgress);
          } else if (operation instanceof CreateFolderOperation) {
              onCreateFolderOperationFinish((CreateFolderOperation) operation, result);
  
-         } else if (operation instanceof CreateShareOperation) {
-             onCreateShareOperationFinish((CreateShareOperation) operation, result);
+         } else if (operation instanceof CreateShareViaLinkOperation ||
+                     operation instanceof CreateShareWithShareeOperation ) {
  
-         } else if (operation instanceof UnshareLinkOperation) {
-             onUnshareLinkOperationFinish((UnshareLinkOperation) operation, result);
+             refreshShowDetails();
+             refreshListOfFilesFragment();
+         } else if (operation instanceof UnshareOperation) {
+             onUnshareLinkOperationFinish((UnshareOperation) operation, result);
  
          } else if (operation instanceof MoveFileOperation) {
              onMoveFileOperationFinish((MoveFileOperation) operation, result);
          }
  
      }
-     private void onCreateShareOperationFinish(CreateShareOperation operation,
-                                               RemoteOperationResult result) {
-         if (result.isSuccess()) {
-             refreshShowDetails();
-             refreshListOfFilesFragment();
-         }
-     }
  
-     private void onUnshareLinkOperationFinish(UnshareLinkOperation operation,
+     private void onUnshareLinkOperationFinish(UnshareOperation operation,
                                                RemoteOperationResult result) {
          if (result.isSuccess()) {
              refreshShowDetails();
       */
      private void onRemoveFileOperationFinish(RemoveFileOperation operation,
                                               RemoteOperationResult result) {
-         dismissLoadingDialog();
          Toast msg = Toast.makeText(this,
                  ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
                  Toast.LENGTH_LONG);
      private void onMoveFileOperationFinish(MoveFileOperation operation,
                                             RemoteOperationResult result) {
          if (result.isSuccess()) {
-             dismissLoadingDialog();
              refreshListOfFilesFragment();
          } else {
-             dismissLoadingDialog();
              try {
                  Toast msg = Toast.makeText(FileDisplayActivity.this,
                          ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
       */
      private void onCopyFileOperationFinish(CopyFileOperation operation, RemoteOperationResult result) {
          if (result.isSuccess()) {
-             dismissLoadingDialog();
              refreshListOfFilesFragment();
          } else {
-             dismissLoadingDialog();
              try {
                  Toast msg = Toast.makeText(FileDisplayActivity.this,
                          ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
       */
      private void onRenameFileOperationFinish(RenameFileOperation operation,
                                               RemoteOperationResult result) {
-         dismissLoadingDialog();
          OCFile renamedFile = operation.getFile();
          if (result.isSuccess()) {
              FileFragment details = getSecondFragment();
      private void onCreateFolderOperationFinish(CreateFolderOperation operation,
                                                 RemoteOperationResult result) {
          if (result.isSuccess()) {
-             dismissLoadingDialog();
              refreshListOfFilesFragment();
          } else {
-             dismissLoadingDialog();
              try {
                  Toast msg = Toast.makeText(FileDisplayActivity.this,
                          ErrorMessageAdapter.getErrorCauseMessage(result, operation, getResources()),
          return null;
      }
  
-     public void startSyncFolderOperation(OCFile folder, boolean ignoreETag) {
-         long currentSyncTime = System.currentTimeMillis();
-         mSyncInProgress = true;
-         // perform folder synchronization
-         RemoteOperation synchFolderOp = new RefreshFolderOperation( folder,
-                 currentSyncTime,
-                 false,
-                 getFileOperationsHelper().isSharedSupported(),
-                 ignoreETag,
-                 getStorageManager(),
-                 getAccount(),
-                 getApplicationContext()
+     /**
+      * Starts an operation to refresh the requested folder.
+      *
+      * The operation is run in a new background thread created on the fly.
+      *
+      * The refresh updates is a "light sync": properties of regular files in folder are updated (including
+      * associated shares), but not their contents. Only the contents of files marked to be kept-in-sync are
+      * synchronized too.
+      *
+      * @param folder        Folder to refresh.
+      * @param ignoreETag    If 'true', the data from the server will be fetched and sync'ed even if the eTag
+      *                      didn't change.
+      */
+     public void startSyncFolderOperation(final OCFile folder, final boolean ignoreETag) {
+         // the execution is slightly delayed to allow the activity get the window focus if it's being started
+         // or if the method is called from a dialog that is being dismissed
+         getHandler().postDelayed(
+                 new Runnable() {
+                     @Override
+                     public void run() {
+                         if (hasWindowFocus()) {
+                             long currentSyncTime = System.currentTimeMillis();
+                             mSyncInProgress = true;
+                             // perform folder synchronization
+                             RemoteOperation synchFolderOp = new RefreshFolderOperation(folder,
+                                     currentSyncTime,
+                                     false,
+                                     getFileOperationsHelper().isSharedSupported(),
+                                     ignoreETag,
+                                     getStorageManager(),
+                                     getAccount(),
+                                     getApplicationContext()
+                             );
+                             synchFolderOp.execute(
+                                     getAccount(),
+                                     MainApp.getAppContext(),
+                                     FileDisplayActivity.this,
+                                     null,
+                                     null
+                             );
+                             mProgressBar.setIndeterminate(true);
+                             setBackgroundText();
+                         }   // else: NOTHING ; lets' not refresh when the user rotates the device but there is
+                         // another window floating over
+                     }
+                 },
+                 DELAY_TO_REQUEST_OPERATIONS_LATER
          );
-         synchFolderOp.execute(getAccount(), MainApp.getAppContext(), this, null, null);
-         mProgressBar.setIndeterminate(true);
  
-         setBackgroundText();
      }
  
      /**
@@@ -63,7 -63,6 +63,6 @@@ import com.owncloud.android.utils.Mimet
   * instance.\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
              switch (viewType){\r
                  case LIST_ITEM:\r
                      TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);\r
 +                    TextView fileSizeSeparatorV = (TextView) view.findViewById(R.id.file_separator);\r
                      TextView lastModV = (TextView) view.findViewById(R.id.last_mod);\r
                      ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);\r
  \r
  \r
                      checkBoxV.setVisibility(View.GONE);\r
  \r
 +                    fileSizeSeparatorV.setVisibility(View.VISIBLE);\r
                      fileSizeV.setVisibility(View.VISIBLE);\r
                      fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));\r
  \r
                              } else {\r
                                  if (parentList.isItemChecked(position)) {\r
                                      checkBoxV.setImageResource(\r
 -                                            android.R.drawable.checkbox_on_background);\r
 +                                            R.drawable.ic_checkbox_marked);\r
                                  } else {\r
                                      checkBoxV.setImageResource(\r
 -                                            android.R.drawable.checkbox_off_background);\r
 +                                            R.drawable.ic_checkbox_blank_outline);\r
                                  }\r
                                  checkBoxV.setVisibility(View.VISIBLE);\r
                              }\r
                          }\r
  \r
                      } else { //Folder\r
 -                        fileSizeV.setVisibility(View.INVISIBLE);\r
 +                        fileSizeSeparatorV.setVisibility(View.GONE);\r
 +                        fileSizeV.setVisibility(View.GONE);\r
                      }\r
  \r
                  case GRID_ITEM:\r
                  case GRID_IMAGE:\r
                      // sharedIcon\r
                      ImageView sharedIconV = (ImageView) view.findViewById(R.id.sharedIcon);\r
-                     if (file.isShareByLink()) {\r
+                     if (file.isSharedViaLink()) {\r
+                         sharedIconV.setImageResource(R.drawable.shared_via_link);\r
+                         sharedIconV.setVisibility(View.VISIBLE);\r
+                         sharedIconV.bringToFront();\r
+                     } else if (file.isSharedWithSharee() || file.isSharedWithMe() ) {\r
+                         sharedIconV.setImageResource(R.drawable.shared_via_users);\r
                          sharedIconV.setVisibility(View.VISIBLE);\r
                          sharedIconV.bringToFront();\r
                      } else {\r
                          sharedIconV.setVisibility(View.GONE);\r
                      }\r
  \r
+                     /*ImageView sharedWithMeIcon = (ImageView) view.findViewById(R.id.sharedWithMeIcon);\r
+                     sharedWithMeIcon.bringToFront();*/\r
\r
                      // local state\r
                      ImageView localStateView = (ImageView) view.findViewById(R.id.localFileIndicator);\r
                      localStateView.bringToFront();\r
                          localStateView.setVisibility(View.VISIBLE);\r
                      }\r
  \r
-                     // share with me icon\r
-                     ImageView sharedWithMeIconV = (ImageView)\r
-                             view.findViewById(R.id.sharedWithMeIcon);\r
-                     sharedWithMeIconV.bringToFront();\r
-                     if (checkIfFileIsSharedWithMe(file) &&\r
-                             (!file.isFolder() || !mGridMode)) {\r
-                         sharedWithMeIconV.setVisibility(View.VISIBLE);\r
-                     } else {\r
-                         sharedWithMeIconV.setVisibility(View.GONE);\r
-                     }\r
\r
                      break;\r
              }\r
              \r
                  // Folder\r
                  fileIcon.setImageResource(\r
                          MimetypeIconUtil.getFolderTypeIconId(\r
-                                 checkIfFileIsSharedWithMe(file), file.isShareByLink()));\r
+                                 file.isSharedWithMe() || file.isSharedWithSharee(),\r
+                                 file.isSharedViaLink()\r
+                         )\r
+                 );\r
              }\r
          }\r
  \r
      }\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 \r
-                 && !mFile.getPermissions().contains(PERMISSION_SHARED_WITH_ME)\r
-                 && file.getPermissions() != null \r
-                 && file.getPermissions().contains(PERMISSION_SHARED_WITH_ME));\r
-     }\r
\r
      public void setSortOrder(Integer order, boolean ascending) {\r
          SharedPreferences.Editor editor = mAppPreferences.edit();\r
          editor.putInt("sortOrder", order);\r
@@@ -121,11 -121,9 +121,11 @@@ public class LocalFileListAdapter exten
              fileIcon.setTag(file.hashCode());
  
              TextView fileSizeV = (TextView) view.findViewById(R.id.file_size);
 +            TextView fileSizeSeparatorV = (TextView) view.findViewById(R.id.file_separator);
              TextView lastModV = (TextView) view.findViewById(R.id.last_mod);
              ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox);
              if (!file.isDirectory()) {
 +                fileSizeSeparatorV.setVisibility(View.VISIBLE);
                  fileSizeV.setVisibility(View.VISIBLE);
                  fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.length()));
  
                      checkBoxV.setVisibility(View.GONE);
                  } else {
                      if (parentList.isItemChecked(position)) {
 -                        checkBoxV.setImageResource(android.R.drawable.checkbox_on_background);
 +                        checkBoxV.setImageResource(R.drawable.ic_checkbox_marked);
                      } else {
 -                        checkBoxV.setImageResource(android.R.drawable.checkbox_off_background);
 +                        checkBoxV.setImageResource(R.drawable.ic_checkbox_blank_outline);
                      }
                      checkBoxV.setVisibility(View.VISIBLE);
                  }
                  }  
  
              } else {
 +                fileSizeSeparatorV.setVisibility(View.GONE);
                  fileSizeV.setVisibility(View.GONE);
                  lastModV.setVisibility(View.GONE);
                  checkBoxV.setVisibility(View.GONE);
              view.findViewById(R.id.favoriteIcon).setVisibility(View.GONE);
              
              view.findViewById(R.id.sharedIcon).setVisibility(View.GONE);
-             view.findViewById(R.id.sharedWithMeIcon).setVisibility(View.GONE);
          }
  
          return view;