1 package com
.owncloud
.android
.ui
.dialog
;
3 import android
.support
.v4
.app
.DialogFragment
;
4 import android
.os
.Bundle
;
5 import android
.view
.LayoutInflater
;
6 import android
.view
.Menu
;
7 import android
.view
.MenuItem
;
8 import android
.view
.View
;
9 import android
.view
.ViewGroup
;
10 import android
.view
.Window
;
11 import android
.widget
.AdapterView
;
12 import android
.widget
.AdapterView
.OnItemClickListener
;
13 import android
.widget
.ArrayAdapter
;
14 import android
.widget
.ListView
;
16 import com
.owncloud
.android
.R
;
17 import com
.owncloud
.android
.ui
.dialog
.parcel
.MenuItemParcelable
;
18 import com
.owncloud
.android
.ui
.dialog
.parcel
.MenuParcelable
;
20 import java
.util
.ArrayList
;
21 import java
.util
.List
;
24 * Dialog for choosing a file action.
26 public class FileActionsDialogFragment
extends DialogFragment
implements
28 private static final String ARG_ITEM_LIST
= "ITEM_LIST";
29 private static final String ARG_FILE_POSITION
= "FILE_POSITION";
30 public static final String FTAG_FILE_ACTIONS
= "FILE_ACTIONS_FRAGMENT";
32 private List
<MenuItemParcelable
> mMenuItems
;
34 private int mFilePosition
;
36 private ListView mListView
;
39 * Listener interface for the file action fragment.
41 public interface FileActionsDialogFragmentListener
{
42 public boolean onFileActionChosen(int menuId
, int filePosition
);
46 * Public factory method to create new FileActionsDialogFragment instances.
48 * @param menu menu to be display.
49 * @return Dialog ready to show.
51 public static FileActionsDialogFragment
newInstance(Menu menu
, int filePosition
) {
52 FileActionsDialogFragment fragment
= new FileActionsDialogFragment();
53 Bundle args
= new Bundle();
55 MenuParcelable menuParcelable
= new MenuParcelable();
56 menuParcelable
.setMenuItems(calculateMenuParcel(menu
));
58 args
.putParcelable(ARG_ITEM_LIST
, menuParcelable
);
59 args
.putInt(ARG_FILE_POSITION
, filePosition
);
61 fragment
.setArguments(args
);
69 public void onCreate(Bundle savedInstanceState
) {
70 super.onCreate(savedInstanceState
);
71 setStyle(DialogFragment
.STYLE_NORMAL
, R
.style
.ownCloud_Dialog
);
78 public View
onCreateView(LayoutInflater inflater
, ViewGroup container
,
79 Bundle savedInstanceState
) {
80 View view
= inflater
.inflate(R
.layout
.file_actions
, null
, false
);
81 mListView
= (ListView
) view
.findViewById(R
.id
.file_actions_list
);
83 getDialog().getWindow().requestFeature(Window
.FEATURE_NO_TITLE
);
92 public void onActivityCreated(Bundle savedInstanceState
) {
93 super.onActivityCreated(savedInstanceState
);
95 mFilePosition
= getArguments().getInt(ARG_FILE_POSITION
);
97 MenuParcelable menu
= getArguments().getParcelable(ARG_ITEM_LIST
);
98 mMenuItems
= menu
.getMenuItems();
99 List
<String
> stringList
= new ArrayList
<String
>();
100 for (int i
= 0; i
< mMenuItems
.size(); i
++) {
101 stringList
.add(mMenuItems
.get(i
).getMenuText());
104 ArrayAdapter
<String
> adapter
= new ArrayAdapter
<String
>(getActivity(),
105 R
.layout
.simple_dialog_list_item
, stringList
);
107 mListView
.setAdapter(adapter
);
109 mListView
.setOnItemClickListener(this);
116 public void onItemClick(AdapterView
<?
> parent
, View view
, int position
, long id
) {
118 ((FileActionsDialogFragmentListener
) getTargetFragment())
119 .onFileActionChosen(mMenuItems
.get(position
).getMenuItemId(), mFilePosition
);
123 * calculates a parcelable list of MenuItemParcelable based on the given menu and the visibility of the menu items.
125 * @param menu the menu to be displayed
126 * @return a filtered List of parcelables based on the menu
128 private static List
<MenuItemParcelable
> calculateMenuParcel(Menu menu
) {
130 boolean hasNext
= true
;
131 List
<MenuItemParcelable
> itemList
= new ArrayList
<MenuItemParcelable
>();
132 MenuParcelable menuParcelable
= new MenuParcelable();
135 MenuItem item
= menu
.getItem(index
);
136 if (item
.isVisible()) {
137 itemList
.add(new MenuItemParcelable(item
));
141 } catch (IndexOutOfBoundsException iobe
) {
142 // reach the end of the item list