|
@@ -31,7 +31,6 @@ import android.os.Bundle;
|
|
|
import android.preference.PreferenceManager;
|
|
|
import android.support.v4.widget.SwipeRefreshLayout;
|
|
|
import android.view.ActionMode;
|
|
|
-import android.view.ContextMenu;
|
|
|
import android.view.LayoutInflater;
|
|
|
import android.view.Menu;
|
|
|
import android.view.MenuInflater;
|
|
@@ -109,6 +108,7 @@ public class OCFileListFragment extends ExtendedListFragment {
|
|
|
|
|
|
private boolean hideFab = true;
|
|
|
private boolean miniFabClicked = false;
|
|
|
+ private ActionMode mActiveActionMode;
|
|
|
|
|
|
@Override
|
|
|
public void onCreate(Bundle savedInstanceState) {
|
|
@@ -186,6 +186,7 @@ public class OCFileListFragment extends ExtendedListFragment {
|
|
|
getActivity(),
|
|
|
mContainerActivity
|
|
|
);
|
|
|
+ mAdapter.restoreSelectionState(savedInstanceState);
|
|
|
setListAdapter(mAdapter);
|
|
|
|
|
|
registerLongClickListener();
|
|
@@ -210,7 +211,7 @@ public class OCFileListFragment extends ExtendedListFragment {
|
|
|
removeFabLabels();
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
/**
|
|
|
* adds labels to all mini FABs.
|
|
@@ -348,27 +349,18 @@ public class OCFileListFragment extends ExtendedListFragment {
|
|
|
setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
|
|
|
setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() {
|
|
|
|
|
|
- private Menu menu;
|
|
|
-
|
|
|
@Override
|
|
|
public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) {
|
|
|
- if (checked) {
|
|
|
- mAdapter.setNewSelection(position, checked);
|
|
|
- } else {
|
|
|
- mAdapter.removeSelection(position);
|
|
|
- }
|
|
|
-
|
|
|
- updateActionsMenu(mode);
|
|
|
-
|
|
|
+ mAdapter.setNewSelection(position, checked);
|
|
|
+ mode.invalidate();
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
|
|
|
+ mActiveActionMode = mode;
|
|
|
|
|
|
createContextActionBar(menu);
|
|
|
- this.menu = menu;
|
|
|
-
|
|
|
- updateActionsMenu(mode);
|
|
|
+ mode.invalidate();
|
|
|
|
|
|
//set gray color
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
@@ -381,7 +373,8 @@ public class OCFileListFragment extends ExtendedListFragment {
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
- private void updateActionsMenu(ActionMode mode) {
|
|
|
+ @Override
|
|
|
+ public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
|
|
|
final int checkedCount = getListView().getCheckedItemCount();
|
|
|
|
|
|
mode.setTitle(checkedCount + " selected");
|
|
@@ -394,16 +387,11 @@ public class OCFileListFragment extends ExtendedListFragment {
|
|
|
targetFiles,
|
|
|
mContainerActivity.getStorageManager().getAccount(),
|
|
|
mContainerActivity,
|
|
|
- getActivity()
|
|
|
- );
|
|
|
+ getActivity());
|
|
|
mf.filter(menu);
|
|
|
}
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
|
|
|
- return false;
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -414,6 +402,7 @@ public class OCFileListFragment extends ExtendedListFragment {
|
|
|
@Override
|
|
|
public void onDestroyActionMode(ActionMode mode) {
|
|
|
mAdapter.removeSelection();
|
|
|
+ mActiveActionMode = null;
|
|
|
|
|
|
// reset to primary dark color
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
|
|
@@ -425,17 +414,18 @@ public class OCFileListFragment extends ExtendedListFragment {
|
|
|
setFabEnabled(true);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// TODO Tobi needed?
|
|
|
private void showFileAction(int fileIndex) {
|
|
|
Bundle args = getArguments();
|
|
|
- PopupMenu pm = new PopupMenu(getActivity(),null);
|
|
|
+ PopupMenu pm = new PopupMenu(getActivity(), null);
|
|
|
Menu menu = pm.getMenu();
|
|
|
|
|
|
boolean allowContextualActions =
|
|
|
- (args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
|
|
|
+ (args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true);
|
|
|
|
|
|
if (allowContextualActions) {
|
|
|
MenuInflater inflater = getActivity().getMenuInflater();
|
|
@@ -445,19 +435,19 @@ public class OCFileListFragment extends ExtendedListFragment {
|
|
|
|
|
|
if (mContainerActivity.getStorageManager() != null) {
|
|
|
FileMenuFilter mf = new FileMenuFilter(
|
|
|
- targetFile,
|
|
|
- mContainerActivity.getStorageManager().getAccount(),
|
|
|
- mContainerActivity,
|
|
|
- getActivity()
|
|
|
+ targetFile,
|
|
|
+ mContainerActivity.getStorageManager().getAccount(),
|
|
|
+ mContainerActivity,
|
|
|
+ getActivity()
|
|
|
);
|
|
|
mf.filter(menu);
|
|
|
}
|
|
|
|
|
|
/// TODO break this direct dependency on FileDisplayActivity... if possible
|
|
|
MenuItem item = menu.findItem(R.id.action_open_file_with);
|
|
|
- FileFragment frag = ((FileDisplayActivity)getActivity()).getSecondFragment();
|
|
|
+ FileFragment frag = ((FileDisplayActivity) getActivity()).getSecondFragment();
|
|
|
if (frag != null && frag instanceof FileDetailFragment &&
|
|
|
- frag.getFile().getFileId() == targetFile.getFileId()) {
|
|
|
+ frag.getFile().getFileId() == targetFile.getFileId()) {
|
|
|
item = menu.findItem(R.id.action_see_details);
|
|
|
if (item != null) {
|
|
|
item.setVisible(false);
|
|
@@ -466,7 +456,7 @@ public class OCFileListFragment extends ExtendedListFragment {
|
|
|
}
|
|
|
|
|
|
FileActionsDialogFragment dialog = FileActionsDialogFragment.newInstance(menu,
|
|
|
- fileIndex, targetFile.getFileName());
|
|
|
+ fileIndex, targetFile.getFileName());
|
|
|
dialog.setTargetFragment(this, 0);
|
|
|
dialog.show(getFragmentManager(), FileActionsDialogFragment.FTAG_FILE_ACTIONS);
|
|
|
}
|
|
@@ -479,6 +469,7 @@ public class OCFileListFragment extends ExtendedListFragment {
|
|
|
public void onSaveInstanceState(Bundle outState) {
|
|
|
super.onSaveInstanceState(outState);
|
|
|
outState.putParcelable(KEY_FILE, mFile);
|
|
|
+ mAdapter.saveSelectionState(outState);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
@@ -816,6 +807,13 @@ public class OCFileListFragment extends ExtendedListFragment {
|
|
|
switchToListView();
|
|
|
}
|
|
|
}
|
|
|
+ invalidateActionMode();
|
|
|
+ }
|
|
|
+
|
|
|
+ private void invalidateActionMode() {
|
|
|
+ if(mActiveActionMode != null){
|
|
|
+ mActiveActionMode.invalidate();
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private String generateFooterText(int filesCount, int foldersCount) {
|