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