Эх сурвалжийг харах

Migate file details and share details to User model

UserAccountManager:
 - added userOwnsFile API that replaces accountOwnsFile
 - deprecated accountOwnsFile

FileDisplayActivity:
 - simplified initFragmentWithFile by passing non-null instanecs
   of user and file and thus avoiding numerous redundant null-checks
 - fragments are initialized using User model instead of Account
 - transfer and download callbacks use getUser() instead of getAccount()
   and pass user instance to framents

ShareActivity
 - initlize fragment using user model instead of account
 - close acivity immediately if current user is not available
   (cannot reach such state not, but historically account was nullable)

FileDetailTabAdapter
 - framents are initialized using User model instead of Account

FileDetailActivitiesFragment
 - migrated to User
 - removed dependency on constants from FileActivity

FileDetailFragment
 - migrated to User
 - removed dependency on constants from FileActivity

FileDetailsSharingFragment
 - migrated to User
 - removed dependency on constants from FileActivity

Signed-off-by: Chris Narkiewicz <hello@ezaquarii.com>
Chris Narkiewicz 4 жил өмнө
parent
commit
e13a3ca7cb

+ 10 - 0
src/main/java/com/nextcloud/client/account/UserAccountManager.java

@@ -137,8 +137,18 @@ public interface UserAccountManager extends CurrentAccountProvider {
      * @param account account to compare
      * @param account account to compare
      * @return false if ownerId is not set or owner is a different account
      * @return false if ownerId is not set or owner is a different account
      */
      */
+    @Deprecated
     boolean accountOwnsFile(OCFile file, Account account);
     boolean accountOwnsFile(OCFile file, Account account);
 
 
+    /**
+     * Checks if an account owns the file (file's ownerId is the same as account name)
+     *
+     * @param file File to check
+     * @param user user to check against
+     * @return false if ownerId is not set or owner is a different account
+     */
+    boolean userOwnsFile(OCFile file, User user);
+
     /**
     /**
      * Extract username from account.
      * Extract username from account.
      *
      *

+ 5 - 0
src/main/java/com/nextcloud/client/account/UserAccountManagerImpl.java

@@ -340,6 +340,11 @@ public class UserAccountManagerImpl implements UserAccountManager {
         return TextUtils.isEmpty(ownerId) || account.name.split("@")[0].equals(ownerId);
         return TextUtils.isEmpty(ownerId) || account.name.split("@")[0].equals(ownerId);
     }
     }
 
 
+    @Override
+    public boolean userOwnsFile(OCFile file, User user) {
+        return accountOwnsFile(file, user.toPlatformAccount());
+    }
+
     public boolean migrateUserId() {
     public boolean migrateUserId() {
         Account[] ocAccounts = accountManager.getAccountsByType(MainApp.getAccountType(context));
         Account[] ocAccounts = accountManager.getAccountsByType(MainApp.getAccountType(context));
         String userId;
         String userId;

+ 40 - 48
src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.java

@@ -428,49 +428,36 @@ public class FileDisplayActivity extends FileActivity
         }
         }
     }
     }
 
 
-    private void initFragmentsWithFile() {
-        if (getAccount() != null && getFile() != null) {
-            /// First fragment
-            OCFileListFragment listOfFiles = getListOfFilesFragment();
-            if (listOfFiles != null && TextUtils.isEmpty(searchQuery)) {
-                listOfFiles.listDirectory(getCurrentDir(), getFile(), MainApp.isOnlyOnDevice(), false);
-            } else {
-                Log_OC.e(TAG, "Still have a chance to lose the initialization of list fragment >(");
-            }
-
-            /// Second fragment
-            if (mDualPane) {
-                OCFile file = getFile();
+    private void initFragmentsWithFile(User user, OCFile file) {
+        /// First fragment
+        OCFileListFragment listOfFiles = getListOfFilesFragment();
+        if (listOfFiles != null && TextUtils.isEmpty(searchQuery)) {
+            listOfFiles.listDirectory(getCurrentDir(), getFile(), MainApp.isOnlyOnDevice(), false);
+        } else {
+            Log_OC.e(TAG, "Still have a chance to lose the initialization of list fragment >(");
+        }
 
 
-                Fragment secondFragment = getSecondFragment();
-                if (secondFragment == null) {
-                    secondFragment = chooseInitialSecondFragment(file);
-                }
+        /// Second fragment
+        if (mDualPane) {
+            Fragment secondFragment = getSecondFragment();
+            if (secondFragment == null) {
+                secondFragment = chooseInitialSecondFragment(file, user);
+            }
 
 
-                if (secondFragment != null) {
-                    setSecondFragment(secondFragment);
-                    updateFragmentsVisibility(true);
-                    updateActionBarTitleAndHomeButton(file);
-                } else {
-                    cleanSecondFragment();
-                    if (file.isDown() && MimeTypeUtil.isVCard(file.getMimeType())) {
-                        startContactListFragment(file);
-                    } else if (file.isDown() && PreviewTextFileFragment.canBePreviewed(file)) {
-                        startTextPreview(file, false);
-                    }
-                }
+            if (secondFragment != null) {
+                setSecondFragment(secondFragment);
+                updateFragmentsVisibility(true);
+                updateActionBarTitleAndHomeButton(file);
             } else {
             } else {
                 cleanSecondFragment();
                 cleanSecondFragment();
+                if (file.isDown() && MimeTypeUtil.isVCard(file.getMimeType())) {
+                    startContactListFragment(file);
+                } else if (file.isDown() && PreviewTextFileFragment.canBePreviewed(file)) {
+                    startTextPreview(file, false);
+                }
             }
             }
-
         } else {
         } else {
-            Log_OC.e(TAG, "initFragments() called with invalid NULLs!");
-            if (getAccount() == null) {
-                Log_OC.e(TAG, "\t account is NULL");
-            }
-            if (getFile() == null) {
-                Log_OC.e(TAG, "\t file is NULL");
-            }
+            cleanSecondFragment();
         }
         }
     }
     }
 
 
@@ -529,17 +516,17 @@ public class FileDisplayActivity extends FileActivity
             }
             }
     }
     }
 
 
-    private Fragment chooseInitialSecondFragment(OCFile file) {
+    private Fragment chooseInitialSecondFragment(OCFile file, User user) {
         Fragment secondFragment = null;
         Fragment secondFragment = null;
         if (file != null && !file.isFolder()) {
         if (file != null && !file.isFolder()) {
             if (file.isDown() && PreviewMediaFragment.canBePreviewed(file)) {
             if (file.isDown() && PreviewMediaFragment.canBePreviewed(file)) {
                 int startPlaybackPosition = getIntent().getIntExtra(PreviewVideoActivity.EXTRA_START_POSITION, 0);
                 int startPlaybackPosition = getIntent().getIntExtra(PreviewVideoActivity.EXTRA_START_POSITION, 0);
                 boolean autoplay = getIntent().getBooleanExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, true);
                 boolean autoplay = getIntent().getBooleanExtra(PreviewVideoActivity.EXTRA_AUTOPLAY, true);
-                secondFragment = PreviewMediaFragment.newInstance(file, getAccount(), startPlaybackPosition, autoplay);
+                secondFragment = PreviewMediaFragment.newInstance(file, user.toPlatformAccount(), startPlaybackPosition, autoplay);
             } else if (file.isDown() && PreviewTextFileFragment.canBePreviewed(file)) {
             } else if (file.isDown() && PreviewTextFileFragment.canBePreviewed(file)) {
                 secondFragment = null;
                 secondFragment = null;
             } else {
             } else {
-                secondFragment = FileDetailFragment.newInstance(file, getAccount());
+                secondFragment = FileDetailFragment.newInstance(file, user);
             }
             }
         }
         }
         return secondFragment;
         return secondFragment;
@@ -1556,7 +1543,8 @@ public class FileDisplayActivity extends FileActivity
      * @param activeTab the active tab in the details view
      * @param activeTab the active tab in the details view
      */
      */
     public void showDetails(OCFile file, int activeTab) {
     public void showDetails(OCFile file, int activeTab) {
-        Fragment detailFragment = FileDetailFragment.newInstance(file, getAccount(), activeTab);
+        User currentUser = getUser().orElseThrow(RuntimeException::new);
+        Fragment detailFragment = FileDetailFragment.newInstance(file, currentUser, activeTab);
         setSecondFragment(detailFragment);
         setSecondFragment(detailFragment);
         updateFragmentsVisibility(true);
         updateFragmentsVisibility(true);
         updateActionBarTitleAndHomeButton(file);
         updateActionBarTitleAndHomeButton(file);
@@ -1834,13 +1822,15 @@ public class FileDisplayActivity extends FileActivity
      */
      */
     private void onRenameFileOperationFinish(RenameFileOperation operation,
     private void onRenameFileOperationFinish(RenameFileOperation operation,
                                              RemoteOperationResult result) {
                                              RemoteOperationResult result) {
+        Optional<User> optionalUser = getUser();
         OCFile renamedFile = operation.getFile();
         OCFile renamedFile = operation.getFile();
-        if (result.isSuccess()) {
+        if (result.isSuccess() && optionalUser.isPresent()) {
+            final User currentUser = optionalUser.get();
             FileFragment details = getSecondFragment();
             FileFragment details = getSecondFragment();
             if (details != null) {
             if (details != null) {
                 if (details instanceof FileDetailFragment &&
                 if (details instanceof FileDetailFragment &&
                         renamedFile.equals(details.getFile())) {
                         renamedFile.equals(details.getFile())) {
-                    ((FileDetailFragment) details).updateFileDetails(renamedFile, getAccount());
+                    ((FileDetailFragment) details).updateFileDetails(renamedFile, currentUser);
                     showDetails(renamedFile);
                     showDetails(renamedFile);
 
 
                 } else if (details instanceof PreviewMediaFragment &&
                 } else if (details instanceof PreviewMediaFragment &&
@@ -1929,10 +1919,11 @@ public class FileDisplayActivity extends FileActivity
     public void onTransferStateChanged(OCFile file, boolean downloading, boolean uploading) {
     public void onTransferStateChanged(OCFile file, boolean downloading, boolean uploading) {
         updateListOfFilesFragment(false);
         updateListOfFilesFragment(false);
         FileFragment details = getSecondFragment();
         FileFragment details = getSecondFragment();
-        if (details instanceof FileDetailFragment &&
-                file.equals(details.getFile())) {
+        Optional<User> optionalUser = getUser();
+        if (details instanceof FileDetailFragment && file.equals(details.getFile()) && optionalUser.isPresent()) {
+            final User currentUser = optionalUser.get();
             if (downloading || uploading) {
             if (downloading || uploading) {
-                ((FileDetailFragment) details).updateFileDetails(file, getAccount());
+                ((FileDetailFragment) details).updateFileDetails(file, currentUser);
             } else {
             } else {
                 if (!file.fileExists()) {
                 if (!file.fileExists()) {
                     cleanSecondFragment();
                     cleanSecondFragment();
@@ -2216,7 +2207,8 @@ public class FileDisplayActivity extends FileActivity
      * @param file {@link OCFile} to download and preview.
      * @param file {@link OCFile} to download and preview.
      */
      */
     public void startDownloadForPreview(OCFile file) {
     public void startDownloadForPreview(OCFile file) {
-        Fragment detailFragment = FileDetailFragment.newInstance(file, getAccount());
+        final User currentUser = getUser().orElseThrow(RuntimeException::new);
+        Fragment detailFragment = FileDetailFragment.newInstance(file, currentUser);
         setSecondFragment(detailFragment);
         setSecondFragment(detailFragment);
         mWaitingToPreview = file;
         mWaitingToPreview = file;
         requestForDownload();
         requestForDownload();
@@ -2379,7 +2371,7 @@ public class FileDisplayActivity extends FileActivity
             final boolean accountChanged = !user.getAccountName().equals(lastDisplayedAccountName);
             final boolean accountChanged = !user.getAccountName().equals(lastDisplayedAccountName);
             if (accountChanged) {
             if (accountChanged) {
                 Log_OC.d(TAG, "Initializing Fragments in onAccountChanged..");
                 Log_OC.d(TAG, "Initializing Fragments in onAccountChanged..");
-                initFragmentsWithFile();
+                initFragmentsWithFile(user, file);
                 if (file.isFolder() && TextUtils.isEmpty(searchQuery)) {
                 if (file.isFolder() && TextUtils.isEmpty(searchQuery)) {
                     startSyncFolderOperation(file, false);
                     startSyncFolderOperation(file, false);
                 }
                 }

+ 9 - 2
src/main/java/com/owncloud/android/ui/activity/ShareActivity.java

@@ -25,6 +25,8 @@ import android.graphics.Bitmap;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuff;
 import android.os.Bundle;
 import android.os.Bundle;
 
 
+import com.nextcloud.client.account.User;
+import com.nextcloud.java.util.Optional;
 import com.owncloud.android.R;
 import com.owncloud.android.R;
 import com.owncloud.android.databinding.ShareActivityBinding;
 import com.owncloud.android.databinding.ShareActivityBinding;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
@@ -92,11 +94,16 @@ public class ShareActivity extends FileActivity {
         // Size
         // Size
         binding.shareFileSize.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));
         binding.shareFileSize.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength()));
 
 
-        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
+        Optional<User> optionalUser = getUser();
+        if (!optionalUser.isPresent()) {
+            finish();
+            return;
+        }
 
 
         if (savedInstanceState == null) {
         if (savedInstanceState == null) {
             // Add Share fragment on first creation
             // Add Share fragment on first creation
-            Fragment fragment = FileDetailSharingFragment.newInstance(getFile(), getAccount());
+            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
+            Fragment fragment = FileDetailSharingFragment.newInstance(getFile(), optionalUser.get());
             ft.replace(R.id.share_fragment_container, fragment, TAG_SHARE_FRAGMENT);
             ft.replace(R.id.share_fragment_container, fragment, TAG_SHARE_FRAGMENT);
             ft.commit();
             ft.commit();
         }
         }

+ 6 - 6
src/main/java/com/owncloud/android/ui/adapter/FileDetailTabAdapter.java

@@ -22,6 +22,7 @@ package com.owncloud.android.ui.adapter;
 
 
 import android.accounts.Account;
 import android.accounts.Account;
 
 
+import com.nextcloud.client.account.User;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.datamodel.OCFile;
 import com.owncloud.android.ui.fragment.FileDetailActivitiesFragment;
 import com.owncloud.android.ui.fragment.FileDetailActivitiesFragment;
 import com.owncloud.android.ui.fragment.FileDetailSharingFragment;
 import com.owncloud.android.ui.fragment.FileDetailSharingFragment;
@@ -35,26 +36,25 @@ import androidx.fragment.app.FragmentStatePagerAdapter;
  */
  */
 public class FileDetailTabAdapter extends FragmentStatePagerAdapter {
 public class FileDetailTabAdapter extends FragmentStatePagerAdapter {
     private OCFile file;
     private OCFile file;
-    private Account account;
+    private User user;
 
 
     private FileDetailSharingFragment fileDetailSharingFragment;
     private FileDetailSharingFragment fileDetailSharingFragment;
     private FileDetailActivitiesFragment fileDetailActivitiesFragment;
     private FileDetailActivitiesFragment fileDetailActivitiesFragment;
 
 
-    public FileDetailTabAdapter(FragmentManager fm, OCFile file, Account account) {
+    public FileDetailTabAdapter(FragmentManager fm, OCFile file, User user) {
         super(fm);
         super(fm);
-
         this.file = file;
         this.file = file;
-        this.account = account;
+        this.user = user;
     }
     }
 
 
     @Override
     @Override
     public Fragment getItem(int position) {
     public Fragment getItem(int position) {
         switch (position) {
         switch (position) {
             case 0:
             case 0:
-                fileDetailActivitiesFragment = FileDetailActivitiesFragment.newInstance(file, account);
+                fileDetailActivitiesFragment = FileDetailActivitiesFragment.newInstance(file, user);
                 return fileDetailActivitiesFragment;
                 return fileDetailActivitiesFragment;
             case 1:
             case 1:
-                fileDetailSharingFragment = FileDetailSharingFragment.newInstance(file, account);
+                fileDetailSharingFragment = FileDetailSharingFragment.newInstance(file, user);
                 return fileDetailSharingFragment;
                 return fileDetailSharingFragment;
             default:
             default:
                 return null;
                 return null;

+ 20 - 14
src/main/java/com/owncloud/android/ui/fragment/FileDetailActivitiesFragment.java

@@ -24,6 +24,7 @@
 package com.owncloud.android.ui.fragment;
 package com.owncloud.android.ui.fragment;
 
 
 import android.accounts.Account;
 import android.accounts.Account;
+import android.content.ContentResolver;
 import android.graphics.PorterDuff;
 import android.graphics.PorterDuff;
 import android.os.AsyncTask;
 import android.os.AsyncTask;
 import android.os.Bundle;
 import android.os.Bundle;
@@ -58,7 +59,6 @@ import com.owncloud.android.lib.resources.status.OCCapability;
 import com.owncloud.android.lib.resources.status.OwnCloudVersion;
 import com.owncloud.android.lib.resources.status.OwnCloudVersion;
 import com.owncloud.android.operations.CommentFileOperation;
 import com.owncloud.android.operations.CommentFileOperation;
 import com.owncloud.android.ui.activity.ComponentsGetter;
 import com.owncloud.android.ui.activity.ComponentsGetter;
-import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.adapter.ActivityAndVersionListAdapter;
 import com.owncloud.android.ui.adapter.ActivityAndVersionListAdapter;
 import com.owncloud.android.ui.events.CommentsEvent;
 import com.owncloud.android.ui.events.CommentsEvent;
 import com.owncloud.android.ui.helpers.FileOperationsHelper;
 import com.owncloud.android.ui.helpers.FileOperationsHelper;
@@ -95,7 +95,7 @@ public class FileDetailActivitiesFragment extends Fragment implements
     private static final String TAG = FileDetailActivitiesFragment.class.getSimpleName();
     private static final String TAG = FileDetailActivitiesFragment.class.getSimpleName();
 
 
     private static final String ARG_FILE = "FILE";
     private static final String ARG_FILE = "FILE";
-    private static final String ARG_ACCOUNT = "ACCOUNT";
+    private static final String ARG_USER = "USER";
     private static final int END_REACHED = 0;
     private static final int END_REACHED = 0;
 
 
     private ActivityAndVersionListAdapter adapter;
     private ActivityAndVersionListAdapter adapter;
@@ -104,7 +104,7 @@ public class FileDetailActivitiesFragment extends Fragment implements
     private NextcloudClient nextcloudClient;
     private NextcloudClient nextcloudClient;
 
 
     private OCFile file;
     private OCFile file;
-    private Account account;
+    private User user;
 
 
     private int lastGiven;
     private int lastGiven;
     private boolean isLoadingActivities;
     private boolean isLoadingActivities;
@@ -148,12 +148,13 @@ public class FileDetailActivitiesFragment extends Fragment implements
 
 
     @Inject UserAccountManager accountManager;
     @Inject UserAccountManager accountManager;
     @Inject ClientFactory clientFactory;
     @Inject ClientFactory clientFactory;
+    @Inject ContentResolver contentResolver;
 
 
-    public static FileDetailActivitiesFragment newInstance(OCFile file, Account account) {
+    public static FileDetailActivitiesFragment newInstance(OCFile file, User user) {
         FileDetailActivitiesFragment fragment = new FileDetailActivitiesFragment();
         FileDetailActivitiesFragment fragment = new FileDetailActivitiesFragment();
         Bundle args = new Bundle();
         Bundle args = new Bundle();
         args.putParcelable(ARG_FILE, file);
         args.putParcelable(ARG_FILE, file);
-        args.putParcelable(ARG_ACCOUNT, account);
+        args.putParcelable(ARG_USER, user);
         fragment.setArguments(args);
         fragment.setArguments(args);
         return fragment;
         return fragment;
     }
     }
@@ -163,12 +164,16 @@ public class FileDetailActivitiesFragment extends Fragment implements
                              ViewGroup container,
                              ViewGroup container,
                              Bundle savedInstanceState) {
                              Bundle savedInstanceState) {
 
 
-        file = getArguments().getParcelable(ARG_FILE);
-        account = getArguments().getParcelable(ARG_ACCOUNT);
+        final Bundle arguments = getArguments();
+        if (arguments == null) {
+            throw new IllegalStateException("arguments are mandatory");
+        }
+        file = arguments.getParcelable(ARG_FILE);
+        user = arguments.getParcelable(ARG_USER);
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
-            file = savedInstanceState.getParcelable(FileActivity.EXTRA_FILE);
-            account = savedInstanceState.getParcelable(FileActivity.EXTRA_ACCOUNT);
+            file = savedInstanceState.getParcelable(ARG_FILE);
+            user = savedInstanceState.getParcelable(ARG_USER);
         }
         }
 
 
         View view = inflater.inflate(R.layout.file_details_activities_fragment, container, false);
         View view = inflater.inflate(R.layout.file_details_activities_fragment, container, false);
@@ -245,11 +250,12 @@ public class FileDetailActivitiesFragment extends Fragment implements
     }
     }
 
 
     private void setupView() {
     private void setupView() {
-        FileDataStorageManager storageManager = new FileDataStorageManager(account, requireActivity().getContentResolver());
+        FileDataStorageManager storageManager = new FileDataStorageManager(user.toPlatformAccount(),
+                                                                           contentResolver);
         operationsHelper = ((ComponentsGetter) requireActivity()).getFileOperationsHelper();
         operationsHelper = ((ComponentsGetter) requireActivity()).getFileOperationsHelper();
 
 
-        OCCapability capability = storageManager.getCapability(account.name);
-        OwnCloudVersion serverVersion = accountManager.getServerVersion(account);
+        OCCapability capability = storageManager.getCapability(user.getAccountName());
+        OwnCloudVersion serverVersion = user.getServer().getVersion();
         restoreFileVersionSupported = capability.getFilesVersioning().isTrue() &&
         restoreFileVersionSupported = capability.getFilesVersioning().isTrue() &&
             serverVersion.compareTo(OwnCloudVersion.nextcloud_14) >= 0;
             serverVersion.compareTo(OwnCloudVersion.nextcloud_14) >= 0;
 
 
@@ -462,8 +468,8 @@ public class FileDetailActivitiesFragment extends Fragment implements
     public void onSaveInstanceState(@NonNull Bundle outState) {
     public void onSaveInstanceState(@NonNull Bundle outState) {
         super.onSaveInstanceState(outState);
         super.onSaveInstanceState(outState);
 
 
-        outState.putParcelable(FileActivity.EXTRA_FILE, file);
-        outState.putParcelable(FileActivity.EXTRA_ACCOUNT, account);
+        outState.putParcelable(ARG_FILE, file);
+        outState.putParcelable(ARG_USER, user);
     }
     }
 
 
     @Override
     @Override

+ 30 - 30
src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java

@@ -44,6 +44,7 @@ import android.widget.ProgressBar;
 import android.widget.TextView;
 import android.widget.TextView;
 
 
 import com.google.android.material.tabs.TabLayout;
 import com.google.android.material.tabs.TabLayout;
+import com.nextcloud.client.account.User;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.account.UserAccountManager;
 import com.nextcloud.client.device.DeviceInfo;
 import com.nextcloud.client.device.DeviceInfo;
 import com.nextcloud.client.di.Injectable;
 import com.nextcloud.client.di.Injectable;
@@ -59,7 +60,6 @@ import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
 import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
 import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
 import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
 import com.owncloud.android.lib.common.network.OnDatatransferProgressListener;
 import com.owncloud.android.lib.common.utils.Log_OC;
 import com.owncloud.android.lib.common.utils.Log_OC;
-import com.owncloud.android.ui.activity.FileActivity;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
 import com.owncloud.android.ui.activity.FileDisplayActivity;
 import com.owncloud.android.ui.activity.ToolbarActivity;
 import com.owncloud.android.ui.activity.ToolbarActivity;
 import com.owncloud.android.ui.adapter.FileDetailTabAdapter;
 import com.owncloud.android.ui.adapter.FileDetailTabAdapter;
@@ -90,7 +90,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
     static final String FTAG_RENAME_FILE = "RENAME_FILE_FRAGMENT";
     static final String FTAG_RENAME_FILE = "RENAME_FILE_FRAGMENT";
 
 
     private static final String ARG_FILE = "FILE";
     private static final String ARG_FILE = "FILE";
-    private static final String ARG_ACCOUNT = "ACCOUNT";
+    private static final String ARG_USER = "USER";
     private static final String ARG_ACTIVE_TAB = "TAB";
     private static final String ARG_ACTIVE_TAB = "TAB";
 
 
     @BindView(R.id.detail_container)
     @BindView(R.id.detail_container)
@@ -143,7 +143,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
 
 
     private int layout;
     private int layout;
     private View view;
     private View view;
-    private Account account;
+    private User user;
     private Unbinder unbinder;
     private Unbinder unbinder;
     private boolean previewLoaded;
     private boolean previewLoaded;
 
 
@@ -162,14 +162,14 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
      * When 'fileToDetail' or 'ocAccount' are null, creates a dummy layout (to use when a file wasn't tapped before).
      * When 'fileToDetail' or 'ocAccount' are null, creates a dummy layout (to use when a file wasn't tapped before).
      *
      *
      * @param fileToDetail      An {@link OCFile} to show in the fragment
      * @param fileToDetail      An {@link OCFile} to show in the fragment
-     * @param account           An ownCloud account; needed to start downloads
+     * @param user              Currently active user
      * @return                  New fragment with arguments set
      * @return                  New fragment with arguments set
      */
      */
-    public static FileDetailFragment newInstance(OCFile fileToDetail, Account account) {
+    public static FileDetailFragment newInstance(OCFile fileToDetail, User user) {
         FileDetailFragment frag = new FileDetailFragment();
         FileDetailFragment frag = new FileDetailFragment();
         Bundle args = new Bundle();
         Bundle args = new Bundle();
         args.putParcelable(ARG_FILE, fileToDetail);
         args.putParcelable(ARG_FILE, fileToDetail);
-        args.putParcelable(ARG_ACCOUNT, account);
+        args.putParcelable(ARG_USER, user);
         frag.setArguments(args);
         frag.setArguments(args);
         return frag;
         return frag;
     }
     }
@@ -180,15 +180,15 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
      * When 'fileToDetail' or 'ocAccount' are null, creates a dummy layout (to use when a file wasn't tapped before).
      * When 'fileToDetail' or 'ocAccount' are null, creates a dummy layout (to use when a file wasn't tapped before).
      *
      *
      * @param fileToDetail      An {@link OCFile} to show in the fragment
      * @param fileToDetail      An {@link OCFile} to show in the fragment
-     * @param account           An ownCloud account; needed to start downloads
+     * @param user              Currently active user
      *                          @param activeTab to be active tab
      *                          @param activeTab to be active tab
      * @return New fragment with arguments set
      * @return New fragment with arguments set
      */
      */
-    public static FileDetailFragment newInstance(OCFile fileToDetail, Account account, int activeTab) {
+    public static FileDetailFragment newInstance(OCFile fileToDetail, User user, int activeTab) {
         FileDetailFragment frag = new FileDetailFragment();
         FileDetailFragment frag = new FileDetailFragment();
         Bundle args = new Bundle();
         Bundle args = new Bundle();
         args.putParcelable(ARG_FILE, fileToDetail);
         args.putParcelable(ARG_FILE, fileToDetail);
-        args.putParcelable(ARG_ACCOUNT, account);
+        args.putParcelable(ARG_USER, user);
         args.putInt(ARG_ACTIVE_TAB, activeTab);
         args.putInt(ARG_ACTIVE_TAB, activeTab);
         frag.setArguments(args);
         frag.setArguments(args);
         return frag;
         return frag;
@@ -202,7 +202,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
      */
      */
     public FileDetailFragment() {
     public FileDetailFragment() {
         super();
         super();
-        account = null;
+        user = null;
         layout = R.layout.file_details_fragment;
         layout = R.layout.file_details_fragment;
         progressListener = null;
         progressListener = null;
     }
     }
@@ -246,18 +246,18 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
         }
         }
 
 
         setFile(arguments.getParcelable(ARG_FILE));
         setFile(arguments.getParcelable(ARG_FILE));
-        account = arguments.getParcelable(ARG_ACCOUNT);
+        user = arguments.getParcelable(ARG_USER);
         activeTab = arguments.getInt(ARG_ACTIVE_TAB, 0);
         activeTab = arguments.getInt(ARG_ACTIVE_TAB, 0);
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
-            setFile(savedInstanceState.getParcelable(FileActivity.EXTRA_FILE));
-            account = savedInstanceState.getParcelable(FileActivity.EXTRA_ACCOUNT);
+            setFile(savedInstanceState.getParcelable(ARG_FILE));
+            user = savedInstanceState.getParcelable(ARG_USER);
         }
         }
 
 
         view = inflater.inflate(layout, null);
         view = inflater.inflate(layout, null);
         unbinder = ButterKnife.bind(this, view);
         unbinder = ButterKnife.bind(this, view);
 
 
-        if (getFile() == null || account == null) {
+        if (getFile() == null || user == null) {
             showEmptyContent();
             showEmptyContent();
         } else {
         } else {
             emptyContentContainer.setVisibility(View.GONE);
             emptyContentContainer.setVisibility(View.GONE);
@@ -268,7 +268,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
 
 
     @Override
     @Override
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
     public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
-        if (getFile() != null && account != null) {
+        if (getFile() != null && user != null) {
             ThemeUtils.colorHorizontalProgressBar(progressBar, ThemeUtils.primaryAccentColor(getContext()));
             ThemeUtils.colorHorizontalProgressBar(progressBar, ThemeUtils.primaryAccentColor(getContext()));
             progressListener = new ProgressListener(progressBar);
             progressListener = new ProgressListener(progressBar);
             cancelButton.setOnClickListener(this);
             cancelButton.setOnClickListener(this);
@@ -298,7 +298,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
         tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
         tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);
         tabLayout.setSelectedTabIndicatorColor(ThemeUtils.primaryAccentColor(getContext()));
         tabLayout.setSelectedTabIndicatorColor(ThemeUtils.primaryAccentColor(getContext()));
 
 
-        final FileDetailTabAdapter adapter = new FileDetailTabAdapter(getFragmentManager(), getFile(), account);
+        final FileDetailTabAdapter adapter = new FileDetailTabAdapter(getFragmentManager(), getFile(), user);
         viewPager.setAdapter(adapter);
         viewPager.setAdapter(adapter);
         viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout) {
         viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout) {
             @Override
             @Override
@@ -341,8 +341,8 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
     @Override
     @Override
     public void onSaveInstanceState(@NonNull Bundle outState) {
     public void onSaveInstanceState(@NonNull Bundle outState) {
         super.onSaveInstanceState(outState);
         super.onSaveInstanceState(outState);
-        outState.putParcelable(FileActivity.EXTRA_FILE, getFile());
-        outState.putParcelable(FileActivity.EXTRA_ACCOUNT, account);
+        outState.putParcelable(ARG_FILE, getFile());
+        outState.putParcelable(ARG_USER, user);
     }
     }
 
 
     @Override
     @Override
@@ -509,7 +509,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
      * @return True when the fragment was created with the empty layout.
      * @return True when the fragment was created with the empty layout.
      */
      */
     public boolean isEmpty() {
     public boolean isEmpty() {
-        return layout == R.layout.empty_list || getFile() == null || account == null;
+        return layout == R.layout.empty_list || getFile() == null || user == null;
     }
     }
 
 
     /**
     /**
@@ -517,9 +517,9 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
      *
      *
      * @param file : An {@link OCFile}
      * @param file : An {@link OCFile}
      */
      */
-    public void updateFileDetails(OCFile file, Account ocAccount) {
+    public void updateFileDetails(OCFile file, User user) {
         setFile(file);
         setFile(file);
-        account = ocAccount;
+        this.user = user;
         updateFileDetails(false, false);
         updateFileDetails(false, false);
     }
     }
 
 
@@ -564,8 +564,8 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
             FileDownloaderBinder downloaderBinder = containerActivity.getFileDownloaderBinder();
             FileDownloaderBinder downloaderBinder = containerActivity.getFileDownloaderBinder();
             FileUploaderBinder uploaderBinder = containerActivity.getFileUploaderBinder();
             FileUploaderBinder uploaderBinder = containerActivity.getFileUploaderBinder();
             if (transferring
             if (transferring
-                    || (downloaderBinder != null && downloaderBinder.isDownloading(account, file))
-                    || (uploaderBinder != null && uploaderBinder.isUploading(account, file))) {
+                    || (downloaderBinder != null && downloaderBinder.isDownloading(user.toPlatformAccount(), file))
+                    || (uploaderBinder != null && uploaderBinder.isUploading(user.toPlatformAccount(), file))) {
                 setButtonsForTransferring();
                 setButtonsForTransferring();
 
 
             } else if (file.isDown()) {
             } else if (file.isDown()) {
@@ -609,7 +609,7 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
      * @return 'True' when the fragment is ready to show details of a file
      * @return 'True' when the fragment is ready to show details of a file
      */
      */
     private boolean readyToShow() {
     private boolean readyToShow() {
-        return getFile() != null && account != null && layout == R.layout.file_details_fragment;
+        return getFile() != null && user != null && layout == R.layout.file_details_fragment;
     }
     }
 
 
     /**
     /**
@@ -680,11 +680,11 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
             FileDownloaderBinder downloaderBinder = containerActivity.getFileDownloaderBinder();
             FileDownloaderBinder downloaderBinder = containerActivity.getFileDownloaderBinder();
             FileUploaderBinder uploaderBinder = containerActivity.getFileUploaderBinder();
             FileUploaderBinder uploaderBinder = containerActivity.getFileUploaderBinder();
             //if (getFile().isDownloading()) {
             //if (getFile().isDownloading()) {
-            if (downloaderBinder != null && downloaderBinder.isDownloading(account, getFile())) {
+            if (downloaderBinder != null && downloaderBinder.isDownloading(user.toPlatformAccount(), getFile())) {
                 progressText.setText(R.string.downloader_download_in_progress_ticker);
                 progressText.setText(R.string.downloader_download_in_progress_ticker);
             }
             }
             else {
             else {
-                if (uploaderBinder != null && uploaderBinder.isUploading(account, getFile())) {
+                if (uploaderBinder != null && uploaderBinder.isUploading(user.toPlatformAccount(), getFile())) {
                     progressText.setText(R.string.uploader_upload_in_progress_ticker);
                     progressText.setText(R.string.uploader_upload_in_progress_ticker);
                 }
                 }
             }
             }
@@ -715,11 +715,11 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
         if (progressListener != null) {
         if (progressListener != null) {
             if (containerActivity.getFileDownloaderBinder() != null) {
             if (containerActivity.getFileDownloaderBinder() != null) {
                 containerActivity.getFileDownloaderBinder().
                 containerActivity.getFileDownloaderBinder().
-                        addDatatransferProgressListener(progressListener, account, getFile());
+                        addDatatransferProgressListener(progressListener, user.toPlatformAccount(), getFile());
             }
             }
             if (containerActivity.getFileUploaderBinder() != null) {
             if (containerActivity.getFileUploaderBinder() != null) {
                 containerActivity.getFileUploaderBinder().
                 containerActivity.getFileUploaderBinder().
-                        addDatatransferProgressListener(progressListener, account, getFile());
+                        addDatatransferProgressListener(progressListener, user.toPlatformAccount(), getFile());
             }
             }
         } else {
         } else {
             Log_OC.d(TAG, "progressListener == null");
             Log_OC.d(TAG, "progressListener == null");
@@ -730,11 +730,11 @@ public class FileDetailFragment extends FileFragment implements OnClickListener,
         if (progressListener != null) {
         if (progressListener != null) {
             if (containerActivity.getFileDownloaderBinder() != null) {
             if (containerActivity.getFileDownloaderBinder() != null) {
                 containerActivity.getFileDownloaderBinder().
                 containerActivity.getFileDownloaderBinder().
-                        removeDatatransferProgressListener(progressListener, account, getFile());
+                        removeDatatransferProgressListener(progressListener, user.toPlatformAccount(), getFile());
             }
             }
             if (containerActivity.getFileUploaderBinder() != null) {
             if (containerActivity.getFileUploaderBinder() != null) {
                 containerActivity.getFileUploaderBinder().
                 containerActivity.getFileUploaderBinder().
-                        removeDatatransferProgressListener(progressListener, account, getFile());
+                        removeDatatransferProgressListener(progressListener, user.toPlatformAccount(), getFile());
             }
             }
         }
         }
     }
     }

+ 15 - 18
src/main/java/com/owncloud/android/ui/fragment/FileDetailSharingFragment.java

@@ -90,13 +90,13 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
     DisplayUtils.AvatarGenerationListener, Injectable {
     DisplayUtils.AvatarGenerationListener, Injectable {
 
 
     private static final String ARG_FILE = "FILE";
     private static final String ARG_FILE = "FILE";
-    private static final String ARG_ACCOUNT = "ACCOUNT";
+    private static final String ARG_USER = "USER";
 
 
     // to show share with users/groups info
     // to show share with users/groups info
     private List<OCShare> shares;
     private List<OCShare> shares;
 
 
     private OCFile file;
     private OCFile file;
-    private Account account;
+    private User user;
     private OCCapability capabilities;
     private OCCapability capabilities;
     private OCShare publicShare;
     private OCShare publicShare;
 
 
@@ -150,11 +150,11 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
 
 
     @Inject UserAccountManager accountManager;
     @Inject UserAccountManager accountManager;
 
 
-    public static FileDetailSharingFragment newInstance(OCFile file, Account account) {
+    public static FileDetailSharingFragment newInstance(OCFile file, User user) {
         FileDetailSharingFragment fragment = new FileDetailSharingFragment();
         FileDetailSharingFragment fragment = new FileDetailSharingFragment();
         Bundle args = new Bundle();
         Bundle args = new Bundle();
         args.putParcelable(ARG_FILE, file);
         args.putParcelable(ARG_FILE, file);
-        args.putParcelable(ARG_ACCOUNT, account);
+        args.putParcelable(ARG_USER, user);
         fragment.setArguments(args);
         fragment.setArguments(args);
         return fragment;
         return fragment;
     }
     }
@@ -164,14 +164,13 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
         super.onCreate(savedInstanceState);
         super.onCreate(savedInstanceState);
 
 
         if (savedInstanceState != null) {
         if (savedInstanceState != null) {
-            file = savedInstanceState.getParcelable(FileActivity.EXTRA_FILE);
-            account = savedInstanceState.getParcelable(FileActivity.EXTRA_ACCOUNT);
+            file = savedInstanceState.getParcelable(ARG_FILE);
+            user = savedInstanceState.getParcelable(ARG_USER);
         } else {
         } else {
             Bundle arguments = getArguments();
             Bundle arguments = getArguments();
-
             if (arguments != null) {
             if (arguments != null) {
                 file = getArguments().getParcelable(ARG_FILE);
                 file = getArguments().getParcelable(ARG_FILE);
-                account = getArguments().getParcelable(ARG_ACCOUNT);
+                user = getArguments().getParcelable(ARG_USER);
             }
             }
         }
         }
 
 
@@ -179,7 +178,7 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
             throw new IllegalArgumentException("File may not be null");
             throw new IllegalArgumentException("File may not be null");
         }
         }
 
 
-        if (account == null) {
+        if (user == null) {
             throw new IllegalArgumentException("Account may not be null");
             throw new IllegalArgumentException("Account may not be null");
         }
         }
 
 
@@ -301,20 +300,18 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
      */
      */
     public void setShareWithUserInfo() {
     public void setShareWithUserInfo() {
         // Get Users and Groups
         // Get Users and Groups
-        shares = fileDataStorageManager.getSharesWithForAFile(file.getRemotePath(), account.name);
+        shares = fileDataStorageManager.getSharesWithForAFile(file.getRemotePath(), user.getAccountName());
 
 
         // Update list of users/groups
         // Update list of users/groups
         updateListOfUserGroups();
         updateListOfUserGroups();
     }
     }
 
 
     private void setShareWithYou() {
     private void setShareWithYou() {
-        if (accountManager.accountOwnsFile(file, account)) {
+        if (accountManager.userOwnsFile(file, user)) {
             sharedWithYouContainer.setVisibility(View.GONE);
             sharedWithYouContainer.setVisibility(View.GONE);
         } else {
         } else {
             sharedWithYouUsername.setText(
             sharedWithYouUsername.setText(
                 String.format(getString(R.string.shared_with_you_by), file.getOwnerDisplayName()));
                 String.format(getString(R.string.shared_with_you_by), file.getOwnerDisplayName()));
-
-            final User user = accountManager.getUser(account.name).orElseThrow(RuntimeException::new);
             DisplayUtils.setAvatar(user, file.getOwnerId(), this, getResources().getDimension(
             DisplayUtils.setAvatar(user, file.getOwnerId(), this, getResources().getDimension(
                 R.dimen.file_list_item_avatar_icon_radius), getResources(), sharedWithYouAvatar,
                 R.dimen.file_list_item_avatar_icon_radius), getResources(), sharedWithYouAvatar,
                 getContext());
                 getContext());
@@ -336,14 +333,14 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
 
 
         if (shares.size() > 0) {
         if (shares.size() > 0) {
             AccountManager accountManager = AccountManager.get(getContext());
             AccountManager accountManager = AccountManager.get(getContext());
-            String userId = accountManager.getUserData(account,
+            String userId = accountManager.getUserData(user.toPlatformAccount(),
                                                        com.owncloud.android.lib.common.accounts.AccountUtils.Constants.KEY_USER_ID);
                                                        com.owncloud.android.lib.common.accounts.AccountUtils.Constants.KEY_USER_ID);
 
 
             usersList.setVisibility(View.VISIBLE);
             usersList.setVisibility(View.VISIBLE);
             usersList.setAdapter(new ShareeListAdapter(fileActivity.getSupportFragmentManager(),
             usersList.setAdapter(new ShareeListAdapter(fileActivity.getSupportFragmentManager(),
                                                        fileActivity,
                                                        fileActivity,
                                                        shares,
                                                        shares,
-                                                       account,
+                                                       user.toPlatformAccount(),
                                                        file,
                                                        file,
                                                        this,
                                                        this,
                                                        userId));
                                                        userId));
@@ -611,7 +608,7 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
      * Get known server capabilities from DB
      * Get known server capabilities from DB
      */
      */
     public void refreshCapabilitiesFromDB() {
     public void refreshCapabilitiesFromDB() {
-        capabilities = fileDataStorageManager.getCapability(account.name);
+        capabilities = fileDataStorageManager.getCapability(user.getAccountName());
     }
     }
 
 
     /**
     /**
@@ -656,8 +653,8 @@ public class FileDetailSharingFragment extends Fragment implements ShareeListAda
     public void onSaveInstanceState(@NonNull Bundle outState) {
     public void onSaveInstanceState(@NonNull Bundle outState) {
         super.onSaveInstanceState(outState);
         super.onSaveInstanceState(outState);
 
 
-        outState.putParcelable(FileActivity.EXTRA_FILE, file);
-        outState.putParcelable(FileActivity.EXTRA_ACCOUNT, account);
+        outState.putParcelable(ARG_FILE, file);
+        outState.putParcelable(ARG_USER, user);
     }
     }
 
 
     @Override
     @Override