From: tobiasKaminsky Date: Sun, 20 Sep 2015 14:21:34 +0000 (+0200) Subject: wip X-Git-Tag: beta-20151122~11^2~8 X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/commitdiff_plain/7d39cf7d82a470f4f1168cf94116dd9f77c8c009?hp=--cc wip --- 7d39cf7d82a470f4f1168cf94116dd9f77c8c009 diff --git a/res/layout/grid_image.xml b/res/layout/grid_image.xml index 383c6154..b6580e9f 100644 --- a/res/layout/grid_image.xml +++ b/res/layout/grid_image.xml @@ -81,6 +81,16 @@ android:layout_marginBottom="4dp" android:layout_marginRight="4dp" android:src="@drawable/ic_favorite" /> + + \ No newline at end of file diff --git a/res/layout/grid_item.xml b/res/layout/grid_item.xml index d0f3d0f1..23efe9a9 100644 --- a/res/layout/grid_item.xml +++ b/res/layout/grid_item.xml @@ -82,7 +82,16 @@ android:layout_marginRight="2dp" android:src="@drawable/ic_favorite" /> - + diff --git a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java index 5e94e0f2..a52e3a62 100644 --- a/src/com/owncloud/android/ui/adapter/FileListListAdapter.java +++ b/src/com/owncloud/android/ui/adapter/FileListListAdapter.java @@ -25,12 +25,16 @@ package com.owncloud.android.ui.adapter; import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import java.util.Vector; import android.accounts.Account; import android.content.Context; import android.content.SharedPreferences; import android.graphics.Bitmap; +import android.graphics.Color; import android.os.Build; import android.preference.PreferenceManager; import android.text.format.DateUtils; @@ -79,6 +83,8 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { private enum ViewType {LIST_ITEM, GRID_IMAGE, GRID_ITEM }; private SharedPreferences mAppPreferences; + + private HashMap mSelection = new HashMap(); public FileListListAdapter( boolean justFolders, @@ -195,32 +201,32 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { case LIST_ITEM: TextView fileSizeV = (TextView) view.findViewById(R.id.file_size); TextView lastModV = (TextView) view.findViewById(R.id.last_mod); - ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox); + lastModV.setVisibility(View.VISIBLE); lastModV.setText(showRelativeTimestamp(file)); - checkBoxV.setVisibility(View.GONE); + fileSizeV.setVisibility(View.VISIBLE); fileSizeV.setText(DisplayUtils.bytesToHumanReadable(file.getFileLength())); if (!file.isFolder()) { - AbsListView parentList = (AbsListView)parent; - if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { - if (parentList.getChoiceMode() == AbsListView.CHOICE_MODE_NONE) { - checkBoxV.setVisibility(View.GONE); - } else { - if (parentList.isItemChecked(position)) { - checkBoxV.setImageResource( - android.R.drawable.checkbox_on_background); - } else { - checkBoxV.setImageResource( - android.R.drawable.checkbox_off_background); - } - checkBoxV.setVisibility(View.VISIBLE); - } - } +// AbsListView parentList = (AbsListView)parent; +// if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { +// if (parentList.getChoiceMode() == AbsListView.CHOICE_MODE_NONE) { +// checkBoxV.setVisibility(View.GONE); +// } else { +// if (parentList.isItemChecked(position)) { +// checkBoxV.setImageResource( +// android.R.drawable.checkbox_on_background); +// } else { +// checkBoxV.setImageResource( +// android.R.drawable.checkbox_off_background); +// } +// checkBoxV.setVisibility(View.VISIBLE); +// } +// } } else { //Folder fileSizeV.setVisibility(View.INVISIBLE); @@ -282,6 +288,25 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { break; } + + ImageView checkBoxV = (ImageView) view.findViewById(R.id.custom_checkbox); + checkBoxV.setVisibility(View.GONE); + + AbsListView parentList = (AbsListView)parent; + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + if (parentList.getChoiceMode() == AbsListView.CHOICE_MODE_NONE) { + checkBoxV.setVisibility(View.GONE); + } else if (parentList.getCheckedItemCount() > 0){ + if (parentList.isItemChecked(position)) { + checkBoxV.setImageResource( + android.R.drawable.checkbox_on_background); + } else { + checkBoxV.setImageResource( + android.R.drawable.checkbox_off_background); + } + checkBoxV.setVisibility(View.VISIBLE); + } + } // For all Views @@ -342,6 +367,12 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { } } + if (mSelection.get(position) != null) { + view.setBackgroundColor(R.color.owncloud_blue); + } else { + view.setBackgroundColor(Color.WHITE); + } + return view; } @@ -487,4 +518,30 @@ public class FileListListAdapter extends BaseAdapter implements ListAdapter { public void setGridMode(boolean gridMode) { mGridMode = gridMode; } + + public void setNewSelection(int position, boolean checked) { + mSelection.put(position, checked); + notifyDataSetChanged(); + } + + public void removeSelection(int position) { + mSelection.remove(position); + notifyDataSetChanged(); + } + + public void removeSelection(){ + mSelection.clear(); + notifyDataSetChanged(); + } + + public ArrayList getCheckedItemPositions() { + ArrayList ids = new ArrayList(); + + for (Map.Entry entry : mSelection.entrySet()){ + if (entry.getValue()){ + ids.add(entry.getKey()); + } + } + return ids; + } } diff --git a/src/com/owncloud/android/ui/dialog/AccountActionsDialogFragment.java b/src/com/owncloud/android/ui/dialog/AccountActionsDialogFragment.java index 96414a02..e8289d01 100644 --- a/src/com/owncloud/android/ui/dialog/AccountActionsDialogFragment.java +++ b/src/com/owncloud/android/ui/dialog/AccountActionsDialogFragment.java @@ -39,6 +39,7 @@ public class AccountActionsDialogFragment extends DialogFragment implements * Listener interface for the file action fragment. */ public interface FileActionsDialogFragmentListener { + // TODO Tobi change to int array? public boolean onFileActionChosen(int menuId, int filePosition); } diff --git a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java index 24015d08..42ad54e4 100644 --- a/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java +++ b/src/com/owncloud/android/ui/fragment/ExtendedListFragment.java @@ -26,7 +26,10 @@ import android.os.Build; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.widget.SwipeRefreshLayout; +import android.view.ActionMode; import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; @@ -134,15 +137,61 @@ public class ExtendedListFragment extends Fragment Bundle savedInstanceState) { Log_OC.d(TAG, "onCreateView"); + // TODO Tobi remove +// AbsListView.MultiChoiceModeListener listener = new AbsListView.MultiChoiceModeListener() { +// @Override +// public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { +// // Capture total checked items +// final int checkedCount = mListView.getCheckedItemCount(); +// // Set the CAB title according to total checked items +// mode.setTitle(checkedCount + " Selected"); +// // Calls toggleSelection method from ListViewAdapter Class +// // mAdapter.toggleSelection(position); +// +// if (checked){ +// mAdapter.setNewSelection(position,checked); +// } else { +// mAdapter.removeSelection(position); +// } +// } +// +// @Override +// public boolean onCreateActionMode(ActionMode mode, Menu menu) { +// mode.getMenuInflater().inflate(R.menu.context, menu); +// return true; +// } +// +// @Override +// public boolean onPrepareActionMode(ActionMode mode, Menu menu) { +// return false; +// } +// +// @Override +// public boolean onActionItemClicked(ActionMode mode, MenuItem item) { +// return false; +// } +// +// @Override +// public void onDestroyActionMode(ActionMode mode) { +// // mAdapter.removeSelection(); +// } +// }; + View v = inflater.inflate(R.layout.list_fragment, null); mListView = (ExtendedListView)(v.findViewById(R.id.list_root)); mListView.setOnItemClickListener(this); + mListView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); + // mListView.setMultiChoiceModeListener(listener); mListFooterView = inflater.inflate(R.layout.list_footer, null, false); mGridView = (GridViewWithHeaderAndFooter) (v.findViewById(R.id.grid_root)); mGridView.setNumColumns(GridView.AUTO_FIT); - mGridView.setOnItemClickListener(this); + // mGridView.setOnItemClickListener(this); + mGridView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); + + // mGridView.setMultiChoiceModeListener(listener); + mGridFooterView = inflater.inflate(R.layout.list_footer, null, false); if (savedInstanceState != null) { diff --git a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java index 02bd845d..fc18dd3a 100644 --- a/src/com/owncloud/android/ui/fragment/OCFileListFragment.java +++ b/src/com/owncloud/android/ui/fragment/OCFileListFragment.java @@ -26,11 +26,13 @@ import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.support.v4.widget.SwipeRefreshLayout; +import android.view.ActionMode; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; +import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.PopupMenu; @@ -147,16 +149,83 @@ public class OCFileListFragment extends ExtendedListFragment implements FileActi } private void registerLongClickListener() { - getListView().setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { - public boolean onItemLongClick(AdapterView arg0, View v, - int index, long arg3) { - showFileAction(index); + getListView().setMultiChoiceModeListener(new AbsListView.MultiChoiceModeListener() { + @Override + public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { + // Capture total checked items + final int checkedCount = getListView().getCheckedItemCount(); + // Set the CAB title according to total checked items + mode.setTitle(checkedCount + " Selected"); + + if (checked){ + mAdapter.setNewSelection(position,checked); + } else { + mAdapter.removeSelection(position); + } + } + + @Override + public boolean onCreateActionMode(ActionMode mode, Menu menu) { + + Bundle args = getArguments(); + boolean allowContextualActions = + (args == null) ? true : args.getBoolean(ARG_ALLOW_CONTEXTUAL_ACTIONS, true); + if (allowContextualActions) { + MenuInflater inflater = getActivity().getMenuInflater(); + inflater.inflate(R.menu.file_actions_menu, menu); + AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; + OCFile targetFile = (OCFile) mAdapter.getItem(info.position); + + if (mContainerActivity.getStorageManager() != null) { + FileMenuFilter mf = new FileMenuFilter( + 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(); + if (frag != null && frag instanceof FileDetailFragment && + frag.getFile().getFileId() == targetFile.getFileId()) { + item = menu.findItem(R.id.action_see_details); + if (item != null) { + item.setVisible(false); + item.setEnabled(false); + } + } + } + + mode.getMenuInflater().inflate(R.menu.file_actions_menu, menu); return true; } + + @Override + public boolean onPrepareActionMode(ActionMode mode, Menu menu) { + return false; + } + + @Override + public boolean onActionItemClicked(ActionMode mode, MenuItem item) { + if (mAdapter.getCheckedItemPositions().size() == 1) { + return onFileActionChosen(item.getItemId(), mAdapter.getCheckedItemPositions().get(0)); + } else if (mAdapter.getCheckedItemPositions().size() > 1){ + return false; + } + return false; + } + + @Override + public void onDestroyActionMode(ActionMode mode) { + mAdapter.removeSelection(); + } }); } - + // TODO Tobi needed? private void showFileAction(int fileIndex) { Bundle args = getArguments(); PopupMenu pm = new PopupMenu(getActivity(),null); @@ -298,6 +367,7 @@ public class OCFileListFragment extends ExtendedListFragment implements FileActi /** * {@inheritDoc} */ + // TODO Tobi needed? @Override public void onCreateContextMenu( ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {