Merge pull request #755 from owncloud/OpenWithInContextMenu
authorjabarros <jabarros@solidgear.es>
Fri, 26 Dec 2014 08:13:58 +0000 (09:13 +0100)
committerjabarros <jabarros@solidgear.es>
Fri, 26 Dec 2014 08:13:58 +0000 (09:13 +0100)
"open with" in ContextMenu of downloaded files

1  2 
src/com/owncloud/android/ui/fragment/OCFileListFragment.java

  package com.owncloud.android.ui.fragment;
  
  import java.io.File;
 +import java.util.Vector;
  
  import android.app.Activity;
 +import android.content.Context;
  import android.content.Intent;
  import android.os.Bundle;
  import android.support.v4.widget.SwipeRefreshLayout;
@@@ -31,8 -29,6 +31,8 @@@ import android.view.MenuItem
  import android.view.View;
  import android.widget.AdapterView;
  import android.widget.AdapterView.AdapterContextMenuInfo;
 +import android.widget.TextView;
 +import android.view.LayoutInflater;
  
  import com.owncloud.android.R;
  import com.owncloud.android.datamodel.FileDataStorageManager;
@@@ -40,7 -36,7 +40,7 @@@ import com.owncloud.android.datamodel.O
  import com.owncloud.android.files.FileMenuFilter;
  import com.owncloud.android.lib.common.utils.Log_OC;
  import com.owncloud.android.ui.activity.FileDisplayActivity;
 -import com.owncloud.android.ui.activity.MoveActivity;
 +import com.owncloud.android.ui.activity.FolderPickerActivity;
  import com.owncloud.android.ui.activity.OnEnforceableRefreshListener;
  import com.owncloud.android.ui.adapter.FileListListAdapter;
  import com.owncloud.android.ui.dialog.ConfirmationDialogFragment;
@@@ -74,7 -70,6 +74,7 @@@ public class OCFileListFragment extend
     
      private OCFile mFile = null;
      private FileListListAdapter mAdapter;
 +    private View mFooterView;
      
      private OCFile mTargetFile;
  
      public void onActivityCreated(Bundle savedInstanceState) {
          super.onActivityCreated(savedInstanceState);
          Log_OC.e(TAG, "onActivityCreated() start");
 -        
 +
          if (savedInstanceState != null) {
              mFile = savedInstanceState.getParcelable(KEY_FILE);
          }
 -        
 +
 +        mFooterView = ((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(
 +                        R.layout.list_footer, null, false);
 +        setFooterView(mFooterView);
 +
          Bundle args = getArguments();
          boolean justFolders = (args == null) ? false : args.getBoolean(ARG_JUST_FOLDERS, false); 
          mAdapter = new FileListListAdapter(
                  justFolders,
                  getSherlockActivity(), 
                  mContainerActivity
 -        );
 +                );
          setListAdapter(mAdapter);
 -        
 +
          registerForContextMenu(getListView());
          getListView().setOnCreateContextMenuListener(this);
 -  }
 -    
 +    }
 +
      /**
       * Saves the current listed folder.
       */
                  );
                  mf.filter(menu);
              }
-             
-             /// additional restrictions for this fragment 
-             // TODO allow in the future 'open with' for previewable files
-             MenuItem item = menu.findItem(R.id.action_open_file_with);
-             if (item != null) {
-                 item.setVisible(false);
-                 item.setEnabled(false);
-             }
+                  
              /// TODO break this direct dependency on FileDisplayActivity... if possible
+             MenuItem item = menu.findItem(R.id.action_open_file_with);
              FileFragment frag = ((FileDisplayActivity)getSherlockActivity()).getSecondFragment();
              if (frag != null && frag instanceof FileDetailFragment && 
                      frag.getFile().getFileId() == targetFile.getFileId()) {
              case R.id.action_share_file: {
                  mContainerActivity.getFileOperationsHelper().shareFileWithLink(mTargetFile);
                  return true;
+             }
+             case R.id.action_open_file_with: {
+                 mContainerActivity.getFileOperationsHelper().openFile(mTargetFile);
+                 return true;
              }
              case R.id.action_unshare_file: {
                  mContainerActivity.getFileOperationsHelper().unshareFileWithLink(mTargetFile);
                  return true;
              }
              case R.id.action_move: {
 -                Intent action = new Intent(getActivity(), MoveActivity.class);
 +                Intent action = new Intent(getActivity(), FolderPickerActivity.class);
  
                  // Pass mTargetFile that contains info of selected file/folder
 -                action.putExtra(MoveActivity.EXTRA_TARGET_FILE, mTargetFile);
 +                action.putExtra(FolderPickerActivity.EXTRA_FILE, mTargetFile);
                  getActivity().startActivityForResult(action, FileDisplayActivity.ACTION_MOVE_FILES);
                  return true;
              }
                  mList.setSelectionFromTop(0, 0);
              }
              mFile = directory;
 +            
 +            // Update Footer
 +            TextView footerText = (TextView) mFooterView.findViewById(R.id.footerText);
 +            Log_OC.d("footer", String.valueOf(System.currentTimeMillis()));
 +            footerText.setText(generateFooterText(directory));
 +            Log_OC.d("footer", String.valueOf(System.currentTimeMillis()));
          }
      }
      
 +    private String generateFooterText(OCFile directory) {
 +        Integer files = 0;
 +        Integer folders = 0;
 +
 +        FileDataStorageManager storageManager = mContainerActivity.getStorageManager();
 +        Vector<OCFile> mFiles = storageManager.getFolderContent(mFile);
 +
 +        for (OCFile ocFile : mFiles) {
 +            if (ocFile.isFolder()) {
 +                folders++;
 +            } else {
 +                files++;
 +            }
 +        }
 +
 +        String output = "";
 +       
 +        if (files > 0){
 +            if (files == 1) {
 +                output = output + files.toString() + " " + getResources().getString(R.string.file_list_file);
 +            } else {
 +                output = output + files.toString() + " " + getResources().getString(R.string.file_list_files);
 +            }
 +        }
 +        if (folders > 0 && files > 0){
 +            output = output + ", ";
 +        }
 +        if (folders == 1) {
 +            output = output + folders.toString() + " " + getResources().getString(R.string.file_list_folder);
 +        } else if (folders > 1) {
 +            output = output + folders.toString() + " " + getResources().getString(R.string.file_list_folders);
 +        }
 +        
 +        return output;
 +    }
 +    
      public void sortByName(boolean descending) {
          mAdapter.setSortOrder(FileListListAdapter.SORT_NAME, descending);
      }