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
;
15 import android
.widget
.TextView
;
17 import com
.owncloud
.android
.R
;
18 import com
.owncloud
.android
.ui
.dialog
.parcel
.MenuItemParcelable
;
19 import com
.owncloud
.android
.ui
.dialog
.parcel
.MenuParcelable
;
21 import java
.util
.ArrayList
;
22 import java
.util
.List
;
25 * Dialog for choosing a file action.
27 public class FileActionsDialogFragment
extends DialogFragment
implements
29 private static final String ARG_ITEM_LIST
= "ITEM_LIST";
30 private static final String ARG_FILE_POSITION
= "FILE_POSITION";
31 private static final String ARG_FILE_NAME
= "FILE_NAME";
32 public static final String FTAG_FILE_ACTIONS
= "FILE_ACTIONS_FRAGMENT";
34 private List
<MenuItemParcelable
> mMenuItems
;
36 private int mFilePosition
;
38 private ListView mListView
;
41 * Listener interface for the file action fragment.
43 public interface FileActionsDialogFragmentListener
{
44 public boolean onFileActionChosen(int menuId
, int filePosition
);
48 * Public factory method to create new FileActionsDialogFragment instances.
50 * @param menu menu to be display.
51 * @return Dialog ready to show.
53 public static FileActionsDialogFragment
newInstance(Menu menu
, int filePosition
, String fileName
) {
54 FileActionsDialogFragment fragment
= new FileActionsDialogFragment();
55 Bundle args
= new Bundle();
57 MenuParcelable menuParcelable
= new MenuParcelable();
58 menuParcelable
.setMenuItems(calculateMenuParcel(menu
));
60 args
.putParcelable(ARG_ITEM_LIST
, menuParcelable
);
61 args
.putInt(ARG_FILE_POSITION
, filePosition
);
62 args
.putCharSequence(ARG_FILE_NAME
, fileName
);
64 fragment
.setArguments(args
);
72 public void onCreate(Bundle savedInstanceState
) {
73 super.onCreate(savedInstanceState
);
74 setStyle(DialogFragment
.STYLE_NORMAL
, R
.style
.ownCloud_Dialog
);
81 public View
onCreateView(LayoutInflater inflater
, ViewGroup container
,
82 Bundle savedInstanceState
) {
83 View view
= inflater
.inflate(R
.layout
.file_actions
, null
, false
);
84 mListView
= (ListView
) view
.findViewById(R
.id
.file_actions_list
);
86 CharSequence title
= getArguments().getCharSequence(ARG_FILE_NAME
);
87 if(title
!= null
&& title
.length() > 0) {
88 TextView header
= (TextView
)view
.findViewById(R
.id
.file_actions_header
);
89 header
.setText(title
);
90 header
.setVisibility(View
.VISIBLE
);
91 view
.findViewById(R
.id
.file_actions_header_divider
).setVisibility(View
.VISIBLE
);
93 getDialog().getWindow().requestFeature(Window
.FEATURE_NO_TITLE
);
104 public void onActivityCreated(Bundle savedInstanceState
) {
105 super.onActivityCreated(savedInstanceState
);
107 mFilePosition
= getArguments().getInt(ARG_FILE_POSITION
);
109 MenuParcelable menu
= getArguments().getParcelable(ARG_ITEM_LIST
);
110 mMenuItems
= menu
.getMenuItems();
111 List
<String
> stringList
= new ArrayList
<String
>();
112 for (int i
= 0; i
< mMenuItems
.size(); i
++) {
113 stringList
.add(mMenuItems
.get(i
).getMenuText());
116 ArrayAdapter
<String
> adapter
= new ArrayAdapter
<String
>(getActivity(),
117 R
.layout
.simple_dialog_list_item
, stringList
);
119 mListView
.setAdapter(adapter
);
121 mListView
.setOnItemClickListener(this);
128 public void onItemClick(AdapterView
<?
> parent
, View view
, int position
, long id
) {
130 ((FileActionsDialogFragmentListener
) getTargetFragment())
131 .onFileActionChosen(mMenuItems
.get(position
).getMenuItemId(), mFilePosition
);
135 * calculates a parcelable list of MenuItemParcelable based on the given menu and the visibility of the menu items.
137 * @param menu the menu to be displayed
138 * @return a filtered List of parcelables based on the menu
140 private static List
<MenuItemParcelable
> calculateMenuParcel(Menu menu
) {
142 boolean hasNext
= true
;
143 List
<MenuItemParcelable
> itemList
= new ArrayList
<MenuItemParcelable
>();
144 MenuParcelable menuParcelable
= new MenuParcelable();
147 MenuItem item
= menu
.getItem(index
);
148 if (item
.isVisible()) {
149 itemList
.add(new MenuItemParcelable(item
));
153 } catch (IndexOutOfBoundsException iobe
) {
154 // reach the end of the item list