Prechádzať zdrojové kódy

FileActionsBottomSheet: handle additional filtering for preview fragments

Signed-off-by: Álvaro Brey <alvaro.brey@nextcloud.com>
Álvaro Brey 2 rokov pred
rodič
commit
a1265bdae7

+ 0 - 1
app/src/main/java/com/nextcloud/ui/fileactions/FileAction.kt

@@ -27,7 +27,6 @@ import androidx.annotation.IdRes
 import androidx.annotation.StringRes
 import com.owncloud.android.R
 
-// TODO get rid of id, use enum value directly
 enum class FileAction(@IdRes val id: Int, @StringRes val title: Int, @DrawableRes val icon: Int? = null) {
     // selection
     SELECT_ALL(R.id.action_select_all_action_menu, R.string.select_all, R.drawable.ic_select_all),

+ 17 - 5
app/src/main/java/com/nextcloud/ui/fileactions/FileActionsBottomSheet.kt

@@ -71,6 +71,7 @@ class FileActionsBottomSheet private constructor() : BottomSheetDialogFragment()
         require(files != null)
         val numberOfAllFiles: Int = args.getInt(ARG_ALL_FILES_COUNT, 1)
         val isOverflow = args.getBoolean(ARG_IS_OVERFLOW, false)
+        val additionalFilter: IntArray? = args.getIntArray(ARG_ADDITIONAL_FILTER)
 
         viewModel = ViewModelProvider(this, vmFactory)[FileActionsViewModel::class.java]
         _binding = FileActionsBottomSheetBinding.inflate(inflater, container, false)
@@ -90,7 +91,7 @@ class FileActionsBottomSheet private constructor() : BottomSheetDialogFragment()
             dispatchActionClick(id)
         }
 
-        viewModel.load(files.toList(), componentsGetter, numberOfAllFiles, isOverflow)
+        viewModel.load(files.toList(), componentsGetter, numberOfAllFiles, isOverflow, additionalFilter)
 
         return binding.root
     }
@@ -144,31 +145,42 @@ class FileActionsBottomSheet private constructor() : BottomSheetDialogFragment()
         private const val ARG_ALL_FILES_COUNT = "ALL_FILES_COUNT"
         private const val ARG_FILES = "FILES"
         private const val ARG_IS_OVERFLOW = "OVERFLOW"
+        private const val ARG_ADDITIONAL_FILTER = "ADDITIONAL_FILTER"
 
         @JvmStatic
+        @JvmOverloads
         fun newInstance(
             file: OCFile,
             componentsGetter: ComponentsGetter,
             isOverflow: Boolean,
-            onItemClick: ClickListener
+            onItemClick: ClickListener,
+            @IdRes
+            additionalToHide: List<Int>? = null
         ): FileActionsBottomSheet {
-            return newInstance(1, listOf(file), componentsGetter, isOverflow, onItemClick)
+            return newInstance(1, listOf(file), componentsGetter, isOverflow, onItemClick, additionalToHide)
         }
 
         @JvmStatic
+        @JvmOverloads
         fun newInstance(
             numberOfAllFiles: Int,
             files: Collection<OCFile>,
             componentsGetter: ComponentsGetter,
             isOverflow: Boolean,
-            onItemClick: ClickListener
+            onItemClick: ClickListener,
+            @IdRes
+            additionalToHide: List<Int>? = null
         ): FileActionsBottomSheet {
             return FileActionsBottomSheet().apply {
-                arguments = bundleOf(
+                val argsBundle = bundleOf(
                     ARG_ALL_FILES_COUNT to numberOfAllFiles,
                     ARG_FILES to files.toTypedArray(),
                     ARG_IS_OVERFLOW to isOverflow
                 )
+                additionalToHide?.let {
+                    argsBundle.putIntArray(ARG_ADDITIONAL_FILTER, additionalToHide.toIntArray())
+                }
+                arguments = argsBundle
                 this.componentsGetter = componentsGetter
                 this.clickListener = onItemClick
             }

+ 3 - 1
app/src/main/java/com/nextcloud/ui/fileactions/FileActionsViewModel.kt

@@ -56,7 +56,8 @@ class FileActionsViewModel @Inject constructor(
         files: Collection<OCFile>,
         componentsGetter: ComponentsGetter,
         numberOfAllFiles: Int?,
-        isOverflow: Boolean?
+        isOverflow: Boolean?,
+        additionalFilter: IntArray?
     ) {
         val toHide = filterFactory.newInstance(
             numberOfAllFiles ?: 1,
@@ -67,6 +68,7 @@ class FileActionsViewModel @Inject constructor(
         )
             .getToHide(false)
         val availableActions = FileAction.SORTED_VALUES
+            .filter { additionalFilter == null || it.id !in additionalFilter }
             .filter { it.id !in toHide }
         _uiState.value = UiState.Loaded(availableActions)
     }

+ 17 - 46
app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.java

@@ -74,6 +74,8 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 
 import javax.annotation.Nullable;
 import javax.inject.Inject;
@@ -344,51 +346,6 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
         inflater.inflate(R.menu.custom_menu_placeholder, menu);
     }
 
-    /**
-     * {@inheritDoc}
-     */
-    // TODO delete
-    public void prepareOptionsMenu_old(@NonNull Menu menu) {
-        super.onPrepareOptionsMenu(menu);
-
-//        if (containerActivity.getStorageManager() != null && getFile() != null) {
-//            // Update the file
-//            final OCFile updatedFile = containerActivity.getStorageManager().getFileById(getFile().getFileId());
-//            setFile(updatedFile);
-//
-//            if (getFile() != null) {
-//                User currentUser = accountManager.getUser();
-//                FileMenuFilter mf = new FileMenuFilter(
-//                    getFile(),
-//                    containerActivity,
-//                    getActivity(),
-//                    false,
-//                    currentUser
-//                );
-//
-//                mf.filter(menu, true);
-//            }
-//        }
-
-        // TODO remove items from bottom sheet too
-        // additional restriction for this fragment
-        // TODO allow renaming in PreviewImageFragment
-        // TODO allow refresh file in PreviewImageFragment
-        MenuUtils.hideMenuItems(
-            menu.findItem(R.id.action_rename_file),
-            menu.findItem(R.id.action_sync_file),
-            menu.findItem(R.id.action_select_all),
-            menu.findItem(R.id.action_move),
-            menu.findItem(R.id.action_copy),
-            menu.findItem(R.id.action_favorite),
-            menu.findItem(R.id.action_unset_favorite)
-                               );
-
-        if (getFile() != null && getFile().isSharedWithMe() && !getFile().canReshare()) {
-            MenuUtils.hideMenuItem(menu.findItem(R.id.action_send_share_file));
-        }
-    }
-
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (item.getItemId() == R.id.custom_menu_placeholder_item) {
@@ -400,10 +357,24 @@ public class PreviewImageFragment extends FileFragment implements Injectable {
 
                 final OCFile fileNew = getFile();
                 if (fileNew != null) {
+                    final List<Integer> additionalFilter =
+                        Arrays.asList(
+                            R.id.action_rename_file,
+                            R.id.action_sync_file,
+                            R.id.action_select_all,
+                            R.id.action_move,
+                            R.id.action_copy,
+                            R.id.action_favorite,
+                            R.id.action_unset_favorite
+                                     );
+                    if (getFile() != null && getFile().isSharedWithMe() && !getFile().canReshare()) {
+                        additionalFilter.add(R.id.action_send_share_file);
+                    }
                     FileActionsBottomSheet.newInstance(fileNew,
                                                        containerActivity,
                                                        false,
-                                                       this::onFileActionChosen)
+                                                       this::onFileActionChosen,
+                                                       additionalFilter)
                         .show(getActivity().getSupportFragmentManager(), "actions");
                 }
             }

+ 18 - 74
app/src/main/java/com/owncloud/android/ui/preview/PreviewMediaFragment.java

@@ -76,6 +76,8 @@ import com.owncloud.android.utils.MimeTypeUtil;
 
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.concurrent.Executors;
 
 import javax.inject.Inject;
@@ -367,82 +369,10 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
     @Override
     public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
         super.onCreateOptionsMenu(menu, inflater);
-        menu.removeItem(R.id.action_search); // TODO handle in bottom sheet?
+        menu.removeItem(R.id.action_search);
         inflater.inflate(R.menu.custom_menu_placeholder, menu);
     }
 
-    // TODO remove
-    public void onPrepareOptionsMenu_old(@NonNull Menu menu) {
-        super.onPrepareOptionsMenu(menu);
-
-//        if (containerActivity.getStorageManager() != null) {
-//            User currentUser = accountManager.getUser();
-//            FileMenuFilter mf = new FileMenuFilter(
-//                getFile(),
-//                containerActivity,
-//                getActivity(),
-//                false,
-//                currentUser
-//            );
-//
-//            mf.filter(menu, true);
-//        }
-
-        // TODO handle this in bottomsheet to
-        // additional restriction for this fragment
-        // TODO allow renaming in PreviewImageFragment
-        MenuItem item = menu.findItem(R.id.action_rename_file);
-        if (item != null) {
-            item.setVisible(false);
-            item.setEnabled(false);
-        }
-
-        // additional restriction for this fragment
-        item = menu.findItem(R.id.action_select_all);
-        if (item != null) {
-            item.setVisible(false);
-            item.setEnabled(false);
-        }
-
-        // additional restriction for this fragment
-        item = menu.findItem(R.id.action_move);
-        if (item != null) {
-            item.setVisible(false);
-            item.setEnabled(false);
-        }
-
-        // additional restriction for this fragment
-        item = menu.findItem(R.id.action_copy);
-        if (item != null) {
-            item.setVisible(false);
-            item.setEnabled(false);
-        }
-
-        // additional restriction for this fragment
-        item = menu.findItem(R.id.action_favorite);
-        if (item != null) {
-            item.setVisible(false);
-            item.setEnabled(false);
-        }
-
-        // additional restriction for this fragment
-        item = menu.findItem(R.id.action_unset_favorite);
-        if (item != null) {
-            item.setVisible(false);
-            item.setEnabled(false);
-        }
-
-        if (getFile().isSharedWithMe() && !getFile().canReshare()) {
-            // additional restriction for this fragment
-            item = menu.findItem(R.id.action_send_share_file);
-            if (item != null) {
-                item.setVisible(false);
-                item.setEnabled(false);
-            }
-        }
-    }
-
-
     @Override
     // TODO replace with MenuProvider
     public boolean onOptionsItemSelected(@NonNull MenuItem item) {
@@ -455,10 +385,24 @@ public class PreviewMediaFragment extends FileFragment implements OnTouchListene
 
                 final OCFile fileNew = getFile();
                 if (fileNew != null) {
+                    final List<Integer> additionalFilter =
+                        Arrays.asList(
+                            R.id.action_rename_file,
+                            R.id.action_sync_file,
+                            R.id.action_select_all,
+                            R.id.action_move,
+                            R.id.action_copy,
+                            R.id.action_favorite,
+                            R.id.action_unset_favorite
+                                     );
+                    if (getFile() != null && getFile().isSharedWithMe() && !getFile().canReshare()) {
+                        additionalFilter.add(R.id.action_send_share_file);
+                    }
                     FileActionsBottomSheet.newInstance(fileNew,
                                                        containerActivity,
                                                        false,
-                                                       this::onFileActionChosen)
+                                                       this::onFileActionChosen,
+                                                       additionalFilter)
                         .show(getActivity().getSupportFragmentManager(), "actions");
                 }
             }

+ 16 - 35
app/src/main/java/com/owncloud/android/ui/preview/PreviewTextFileFragment.java

@@ -53,6 +53,7 @@ import java.io.IOException;
 import java.io.Reader;
 import java.io.StringWriter;
 import java.lang.ref.WeakReference;
+import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Scanner;
@@ -273,40 +274,6 @@ public class PreviewTextFileFragment extends PreviewTextFragment {
         }
     }
 
-    // TODO remove
-    public void onPrepareOptionsMenu_old(@NonNull Menu menu) {
-        super.onPrepareOptionsMenu(menu);
-
-//        if (containerActivity.getStorageManager() != null) {
-//            User user = accountManager.getUser();
-//            FileMenuFilter mf = new FileMenuFilter(
-//                getFile(),
-//                containerActivity,
-//                getActivity(),
-//                false,
-//                user
-//            );
-//            mf.filter(menu, true);
-//        }
-
-        // TODO remove in bottom sheet too
-        // additional restriction for this fragment
-        MenuUtils.hideMenuItems(
-            menu.findItem(R.id.action_rename_file),
-            menu.findItem(R.id.action_select_all),
-            menu.findItem(R.id.action_move),
-            menu.findItem(R.id.action_download_file),
-            menu.findItem(R.id.action_sync_file),
-            menu.findItem(R.id.action_favorite),
-            menu.findItem(R.id.action_unset_favorite)
-                               );
-
-        if (getFile().isSharedWithMe() && !getFile().canReshare()) {
-            MenuUtils.hideMenuItem(menu.findItem(R.id.action_send_share_file));
-        }
-    }
-
-
     @Override
     public boolean onOptionsItemSelected(@NonNull MenuItem item) {
         if (item.getItemId() == R.id.custom_menu_placeholder_item) {
@@ -318,10 +285,24 @@ public class PreviewTextFileFragment extends PreviewTextFragment {
 
                 final OCFile fileNew = getFile();
                 if (fileNew != null) {
+                    final List<Integer> additionalFilter =
+                        Arrays.asList(
+                            R.id.action_rename_file,
+                            R.id.action_sync_file,
+                            R.id.action_select_all,
+                            R.id.action_move,
+                            R.id.action_copy,
+                            R.id.action_favorite,
+                            R.id.action_unset_favorite
+                                     );
+                    if (getFile() != null && getFile().isSharedWithMe() && !getFile().canReshare()) {
+                        additionalFilter.add(R.id.action_send_share_file);
+                    }
                     FileActionsBottomSheet.newInstance(fileNew,
                                                        containerActivity,
                                                        false,
-                                                       this::onFileActionChosen)
+                                                       this::onFileActionChosen,
+                                                       additionalFilter)
                         .show(getActivity().getSupportFragmentManager(), "actions");
                 }
             }