X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/80e7836840d39bbe65db9772f90791a021eab204..ba80646e4e31a6c19d4ef8b60ea0e30cf3bd00cc:/src/com/owncloud/android/ui/dialog/FileActionsDialogFragment.java diff --git a/src/com/owncloud/android/ui/dialog/FileActionsDialogFragment.java b/src/com/owncloud/android/ui/dialog/FileActionsDialogFragment.java new file mode 100644 index 00000000..6a023942 --- /dev/null +++ b/src/com/owncloud/android/ui/dialog/FileActionsDialogFragment.java @@ -0,0 +1,146 @@ +package com.owncloud.android.ui.dialog; + +import android.support.v4.app.DialogFragment; +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.ArrayAdapter; +import android.widget.ListView; + +import com.owncloud.android.R; +import com.owncloud.android.ui.dialog.parcel.MenuItemParcelable; +import com.owncloud.android.ui.dialog.parcel.MenuParcelable; + +import java.util.ArrayList; +import java.util.List; + +/** + * Dialog for choosing a file action. + */ +public class FileActionsDialogFragment extends DialogFragment implements + OnItemClickListener { + private static final String ARG_ITEM_LIST = "ITEM_LIST"; + private static final String ARG_FILE_POSITION = "FILE_POSITION"; + public static final String FTAG_FILE_ACTIONS = "FILE_ACTIONS_FRAGMENT"; + + private List menuItems; + + private int filePosition; + + private ListView mListView; + + /** + * Listener interface for the file action fragment. + */ + public interface FileActionsDialogFragmentListener { + public boolean onFileActionChosen(int menuId, int filePosition); + } + + /** + * Public factory method to create new FileActionsDialogFragment instances. + * + * @param menu menu to be display. + * @return Dialog ready to show. + */ + public static FileActionsDialogFragment newInstance(Menu menu, int filePosition) { + FileActionsDialogFragment fragment = new FileActionsDialogFragment(); + Bundle args = new Bundle(); + + MenuParcelable menuParcelable = new MenuParcelable(); + menuParcelable.setMenuItems(calculateMenuParcel(menu)); + + args.putParcelable(ARG_ITEM_LIST, menuParcelable); + args.putInt(ARG_FILE_POSITION, filePosition); + + fragment.setArguments(args); + return fragment; + } + + /** + * {@inheritDoc} + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setStyle(DialogFragment.STYLE_NORMAL, R.style.ownCloud_Dialog); + } + + /** + * {@inheritDoc} + */ + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View view = inflater.inflate(R.layout.file_actions, null, false); + mListView = (ListView) view.findViewById(R.id.file_actions_list); + + getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE); + return view; + } + + + /** + * {@inheritDoc} + */ + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + filePosition = getArguments().getInt(ARG_FILE_POSITION); + + MenuParcelable menu = getArguments().getParcelable(ARG_ITEM_LIST); + menuItems = menu.getMenuItems(); + List stringList = new ArrayList(); + for (int i = 0; i < menuItems.size(); i++) { + stringList.add(menuItems.get(i).getMenuText()); + } + + ArrayAdapter adapter = new ArrayAdapter(getActivity(), + R.layout.simple_dialog_list_item, stringList); + + mListView.setAdapter(adapter); + + mListView.setOnItemClickListener(this); + } + + /** + * {@inheritDoc} + */ + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) { + dismiss(); + ((FileActionsDialogFragmentListener) getTargetFragment()).onFileActionChosen(menuItems.get(position).getMenuItemId(), filePosition); + } + + /** + * calculates a parcelable list of MenuItemParcelable based on the given menu and the visibility of the menu items. + * + * @param menu the menu to be displayed + * @return a filtered List of parcelables based on the menu + */ + private static List calculateMenuParcel(Menu menu) { + int index = 0; + boolean hasNext = true; + List itemList = new ArrayList(); + MenuParcelable menuParcelable = new MenuParcelable(); + try { + while (hasNext) { + MenuItem item = menu.getItem(index); + if (item.isVisible()) { + itemList.add(new MenuItemParcelable(item)); + } + index++; + } + } catch (IndexOutOfBoundsException iobe) { + // reach the end of the item list + } + + return itemList; + } +}