|
@@ -36,6 +36,8 @@ import android.os.Looper;
|
|
|
import android.support.annotation.Nullable;
|
|
|
import android.support.annotation.StringRes;
|
|
|
import android.support.design.widget.BottomNavigationView;
|
|
|
+import android.support.design.widget.BottomSheetBehavior;
|
|
|
+import android.support.design.widget.BottomSheetDialog;
|
|
|
import android.support.design.widget.Snackbar;
|
|
|
import android.support.v4.app.FragmentActivity;
|
|
|
import android.support.v4.widget.DrawerLayout;
|
|
@@ -53,9 +55,9 @@ import android.view.MenuItem;
|
|
|
import android.view.View;
|
|
|
import android.view.ViewGroup;
|
|
|
import android.widget.AbsListView;
|
|
|
+import android.widget.ImageView;
|
|
|
import android.widget.PopupMenu;
|
|
|
import android.widget.RelativeLayout;
|
|
|
-import android.widget.TextView;
|
|
|
|
|
|
import com.owncloud.android.MainApp;
|
|
|
import com.owncloud.android.R;
|
|
@@ -163,7 +165,6 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
|
|
|
private int mProgressBarColor;
|
|
|
|
|
|
private boolean mHideFab = true;
|
|
|
- private boolean miniFabClicked = false;
|
|
|
private ActionMode mActiveActionMode;
|
|
|
private OCFileListFragment.MultiChoiceModeListener mMultiChoiceModeListener;
|
|
|
|
|
@@ -327,19 +328,7 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
|
|
|
setFabEnabled(false);
|
|
|
} else {
|
|
|
setFabEnabled(true);
|
|
|
- registerFabListeners();
|
|
|
-
|
|
|
- // detect if a mini FAB has ever been clicked
|
|
|
- if (PreferenceManager.getFABClicked(getActivity()) > 0) {
|
|
|
- miniFabClicked = true;
|
|
|
- }
|
|
|
-
|
|
|
- // add labels to the min FABs when none of them has ever been clicked on
|
|
|
- if (!miniFabClicked) {
|
|
|
- setFabLabels();
|
|
|
- } else {
|
|
|
- removeFabLabels();
|
|
|
- }
|
|
|
+ registerFabListener();
|
|
|
}
|
|
|
|
|
|
searchEvent = Parcels.unwrap(getArguments().getParcelable(OCFileListFragment.SEARCH_EVENT));
|
|
@@ -381,138 +370,64 @@ public class OCFileListFragment extends ExtendedListFragment implements OCFileLi
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * adds labels to all mini FABs.
|
|
|
- */
|
|
|
- private void setFabLabels() {
|
|
|
- getFabUpload().setTitle(getResources().getString(R.string.actionbar_upload));
|
|
|
- getFabMkdir().setTitle(getResources().getString(R.string.actionbar_mkdir));
|
|
|
- getFabUploadFromApp().setTitle(getResources().getString(R.string.actionbar_upload_from_apps));
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * registers all listeners on all mini FABs.
|
|
|
- */
|
|
|
- private void registerFabListeners() {
|
|
|
- registerFabUploadListeners(getActivity());
|
|
|
- registerFabMkDirListeners(getActivity());
|
|
|
- registerFabUploadFromAppListeners(getActivity());
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * registers {@link android.view.View.OnClickListener} and {@link android.view.View.OnLongClickListener}
|
|
|
- * on the Upload mini FAB for the linked action and {@link Snackbar} showing the underlying action.
|
|
|
- *
|
|
|
- * @param activity the activity on which's content the {@link Snackbar} will be shown.
|
|
|
+ * register listener on FAB.
|
|
|
*/
|
|
|
- private void registerFabUploadListeners(final Activity activity) {
|
|
|
- getFabUpload().setOnClickListener(new View.OnClickListener() {
|
|
|
- @Override
|
|
|
- public void onClick(View v) {
|
|
|
- UploadFilesActivity.startUploadActivityForResult(getActivity(), ((FileActivity) getActivity())
|
|
|
- .getAccount(), FileDisplayActivity.REQUEST_CODE__SELECT_FILES_FROM_FILE_SYSTEM);
|
|
|
- getFabMain().collapse();
|
|
|
- recordMiniFabClick();
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- getFabUpload().setOnLongClickListener(new View.OnLongClickListener() {
|
|
|
- @Override
|
|
|
- public boolean onLongClick(View v) {
|
|
|
- DisplayUtils.showSnackMessage(activity, R.string.actionbar_upload);
|
|
|
- return true;
|
|
|
- }
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * registers {@link android.view.View.OnClickListener} and {@link android.view.View.OnLongClickListener}
|
|
|
- * on the 'Create Dir' mini FAB for the linked action and {@link Snackbar} showing the underlying action.
|
|
|
- *
|
|
|
- * @param activity the activity on which's content the {@link Snackbar} will be shown.
|
|
|
- */
|
|
|
- private void registerFabMkDirListeners(final Activity activity) {
|
|
|
- getFabMkdir().setOnClickListener(new View.OnClickListener() {
|
|
|
- @Override
|
|
|
- public void onClick(View v) {
|
|
|
- CreateFolderDialogFragment dialog =
|
|
|
- CreateFolderDialogFragment.newInstance(mFile);
|
|
|
- dialog.show(getActivity().getSupportFragmentManager(), DIALOG_CREATE_FOLDER);
|
|
|
- getFabMain().collapse();
|
|
|
- recordMiniFabClick();
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- getFabMkdir().setOnLongClickListener(new View.OnLongClickListener() {
|
|
|
- @Override
|
|
|
- public boolean onLongClick(View v) {
|
|
|
- DisplayUtils.showSnackMessage(activity, R.string.actionbar_mkdir);
|
|
|
- return true;
|
|
|
- }
|
|
|
+ private void registerFabListener() {
|
|
|
+ getFabMain().setOnClickListener(v -> {
|
|
|
+ final View fileListActionsBottomSheet = getLayoutInflater()
|
|
|
+ .inflate(R.layout.file_list_actions_bottom_sheet_fragment, null);
|
|
|
+ final BottomSheetDialog dialog = new BottomSheetDialog(getContext());
|
|
|
+ dialog.setContentView(fileListActionsBottomSheet);
|
|
|
+
|
|
|
+ ThemeUtils.tintDrawable(((ImageView) fileListActionsBottomSheet.findViewById(R.id.menu_icon_upload_files))
|
|
|
+ .getDrawable(),ThemeUtils.primaryColor());
|
|
|
+ ThemeUtils.tintDrawable(((ImageView) fileListActionsBottomSheet.findViewById(R.id.menu_icon_upload_from_app))
|
|
|
+ .getDrawable(),ThemeUtils.primaryColor());
|
|
|
+ ThemeUtils.tintDrawable(((ImageView) fileListActionsBottomSheet.findViewById(R.id.menu_icon_mkdir))
|
|
|
+ .getDrawable(),ThemeUtils.primaryColor());
|
|
|
+
|
|
|
+ fileListActionsBottomSheet.findViewById(R.id.menu_upload_files)
|
|
|
+ .setOnClickListener(view -> uploadFiles(dialog));
|
|
|
+ fileListActionsBottomSheet.findViewById(R.id.menu_upload_from_app)
|
|
|
+ .setOnClickListener(view -> uploadFromApp(dialog));
|
|
|
+ fileListActionsBottomSheet.findViewById(R.id.menu_mkdir)
|
|
|
+ .setOnClickListener(view -> createFolder(dialog));
|
|
|
+
|
|
|
+ dialog.setOnShowListener(d ->
|
|
|
+ BottomSheetBehavior.from((View) fileListActionsBottomSheet.getParent())
|
|
|
+ .setPeekHeight(fileListActionsBottomSheet.getMeasuredHeight())
|
|
|
+ );
|
|
|
+ dialog.show();
|
|
|
});
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * registers {@link android.view.View.OnClickListener} and {@link android.view.View.OnLongClickListener}
|
|
|
- * on the Upload from App mini FAB for the linked action and {@link Snackbar} showing the underlying action.
|
|
|
- *
|
|
|
- * @param activity the activity on which's content the {@link Snackbar} will be shown.
|
|
|
- */
|
|
|
- private void registerFabUploadFromAppListeners(final Activity activity) {
|
|
|
- getFabUploadFromApp().setOnClickListener(new View.OnClickListener() {
|
|
|
- @Override
|
|
|
- public void onClick(View v) {
|
|
|
- Intent action = new Intent(Intent.ACTION_GET_CONTENT);
|
|
|
- action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE);
|
|
|
- //Intent.EXTRA_ALLOW_MULTIPLE is only supported on api level 18+, Jelly Bean
|
|
|
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
|
|
- action.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
|
|
|
- }
|
|
|
- getActivity().startActivityForResult(
|
|
|
- Intent.createChooser(action, getString(R.string.upload_chooser_title)),
|
|
|
- FileDisplayActivity.REQUEST_CODE__SELECT_CONTENT_FROM_APPS
|
|
|
- );
|
|
|
- getFabMain().collapse();
|
|
|
- recordMiniFabClick();
|
|
|
- }
|
|
|
- });
|
|
|
-
|
|
|
- getFabUploadFromApp().setOnLongClickListener(new View.OnLongClickListener() {
|
|
|
- @Override
|
|
|
- public boolean onLongClick(View v) {
|
|
|
- DisplayUtils.showSnackMessage(activity, R.string.actionbar_upload_from_apps);
|
|
|
- return true;
|
|
|
- }
|
|
|
- });
|
|
|
+ private void createFolder(BottomSheetDialog dialog) {
|
|
|
+ CreateFolderDialogFragment.newInstance(mFile)
|
|
|
+ .show(getActivity().getSupportFragmentManager(), DIALOG_CREATE_FOLDER);
|
|
|
+ dialog.dismiss();
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * records a click on a mini FAB and thus:
|
|
|
- * <ol>
|
|
|
- * <li>persists the click fact</li>
|
|
|
- * <li>removes the mini FAB labels</li>
|
|
|
- * </ol>
|
|
|
- */
|
|
|
- private void recordMiniFabClick() {
|
|
|
- // only record if it hasn't been done already at some other time
|
|
|
- if (!miniFabClicked) {
|
|
|
- PreferenceManager.setFABClicked(getActivity());
|
|
|
- miniFabClicked = true;
|
|
|
+ private void uploadFromApp(BottomSheetDialog dialog) {
|
|
|
+ Intent action = new Intent(Intent.ACTION_GET_CONTENT);
|
|
|
+ action = action.setType("*/*").addCategory(Intent.CATEGORY_OPENABLE);
|
|
|
+ //Intent.EXTRA_ALLOW_MULTIPLE is only supported on api level 18+, Jelly Bean
|
|
|
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
|
|
|
+ action.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
|
|
|
}
|
|
|
+ getActivity().startActivityForResult(
|
|
|
+ Intent.createChooser(action, getString(R.string.upload_chooser_title)),
|
|
|
+ FileDisplayActivity.REQUEST_CODE__SELECT_CONTENT_FROM_APPS
|
|
|
+ );
|
|
|
+ dialog.dismiss();
|
|
|
}
|
|
|
|
|
|
- /**
|
|
|
- * removes the labels on all known min FABs.
|
|
|
- */
|
|
|
- private void removeFabLabels() {
|
|
|
- getFabUpload().setTitle(null);
|
|
|
- getFabMkdir().setTitle(null);
|
|
|
- getFabUploadFromApp().setTitle(null);
|
|
|
- ((TextView) getFabUpload().getTag(
|
|
|
- com.getbase.floatingactionbutton.R.id.fab_label)).setVisibility(View.GONE);
|
|
|
- ((TextView) getFabMkdir().getTag(
|
|
|
- com.getbase.floatingactionbutton.R.id.fab_label)).setVisibility(View.GONE);
|
|
|
- ((TextView) getFabUploadFromApp().getTag(
|
|
|
- com.getbase.floatingactionbutton.R.id.fab_label)).setVisibility(View.GONE);
|
|
|
+ private void uploadFiles(BottomSheetDialog dialog) {
|
|
|
+ UploadFilesActivity.startUploadActivityForResult(
|
|
|
+ getActivity(),
|
|
|
+ ((FileActivity) getActivity()).getAccount(),
|
|
|
+ FileDisplayActivity.REQUEST_CODE__SELECT_FILES_FROM_FILE_SYSTEM
|
|
|
+ );
|
|
|
+ dialog.dismiss();
|
|
|
}
|
|
|
|
|
|
@Override
|