Merge branch 'develop' into file_browsing_refactoring
authorDavid A. Velasco <dvelasco@solidgear.es>
Mon, 6 May 2013 08:48:43 +0000 (10:48 +0200)
committerDavid A. Velasco <dvelasco@solidgear.es>
Mon, 6 May 2013 08:48:43 +0000 (10:48 +0200)
Conflicts:
AndroidManifest.xml
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/fragment/FileDetailFragment.java

1  2 
AndroidManifest.xml
src/com/owncloud/android/ui/activity/FileDisplayActivity.java
src/com/owncloud/android/ui/fragment/FileDetailFragment.java
src/com/owncloud/android/ui/fragment/OCFileListFragment.java
src/com/owncloud/android/ui/preview/PreviewMediaFragment.java

              </intent-filter>
              <intent-filter>
                  <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
 -            </intent-filter>\r
 -        </receiver>\r
 -        <receiver android:name=".files.BootupBroadcastReceiver">\r
 -            <intent-filter>\r
 -                <action android:name="android.intent.action.BOOT_COMPLETED"/>\r
 -            </intent-filter>\r
 -        </receiver>\r
 -        <service android:name=".files.services.FileObserverService"/>\r
 -        \r
 -    </application>\r
 -\r
 +            </intent-filter>
 +        </receiver>
 +        <receiver android:name=".files.BootupBroadcastReceiver">
 +            <intent-filter>
 +                <action android:name="android.intent.action.BOOT_COMPLETED"/>
 +            </intent-filter>
 +        </receiver>
 +        <service android:name=".files.services.FileObserverService"/>
++        
 +    </application>
-     
++
  </manifest>
@@@ -92,10 -88,7 +89,8 @@@ import com.owncloud.android.ui.fragment
  import com.owncloud.android.ui.preview.PreviewImageActivity;
  import com.owncloud.android.ui.preview.PreviewImageFragment;
  import com.owncloud.android.ui.preview.PreviewMediaFragment;
 +import com.owncloud.android.ui.preview.PreviewVideoActivity;
  
- import eu.alefzero.webdav.WebdavClient;
  /**
   * Displays, what files the user has available in his ownCloud.
   * 
@@@ -148,8 -135,9 +140,10 @@@ public class FileDisplayActivity extend
      public void onCreate(Bundle savedInstanceState) {
          Log_OC.d(getClass().toString(), "onCreate() start");
          super.onCreate(savedInstanceState);
 +        mStarted = false;
  
+         mHandler = new Handler();
          /// Load of parameters from received intent
          Account account = getIntent().getParcelableExtra(FileDetailFragment.EXTRA_ACCOUNT);
          if (account != null && AccountUtils.setCurrentOwnCloudAccount(this, account.name)) {
@@@ -19,23 -19,8 +19,11 @@@ package com.owncloud.android.ui.fragmen
  
  import java.io.File;
  import java.lang.ref.WeakReference;
 +import java.util.ArrayList;
 +import java.util.List;
  
- import org.apache.commons.httpclient.methods.GetMethod;
- import org.apache.commons.httpclient.methods.PostMethod;
- import org.apache.commons.httpclient.methods.StringRequestEntity;
- import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
- import org.apache.http.HttpStatus;
- import org.apache.http.NameValuePair;
- import org.apache.http.client.utils.URLEncodedUtils;
- import org.apache.http.message.BasicNameValuePair;
- import org.apache.http.protocol.HTTP;
- import org.apache.jackrabbit.webdav.client.methods.PropFindMethod;
- import org.json.JSONObject;
  import android.accounts.Account;
 +import android.accounts.AccountManager;
  import android.app.Activity;
  import android.content.ActivityNotFoundException;
  import android.content.BroadcastReceiver;
@@@ -59,13 -44,8 +46,11 @@@ import android.widget.TextView
  import android.widget.Toast;
  
  import com.actionbarsherlock.app.SherlockFragment;
- import com.owncloud.android.AccountUtils;
 +import com.actionbarsherlock.view.Menu;
 +import com.actionbarsherlock.view.MenuInflater;
 +import com.actionbarsherlock.view.MenuItem;
  import com.owncloud.android.DisplayUtils;
  import com.owncloud.android.Log_OC;
- import com.owncloud.android.authenticator.AccountAuthenticator;
  import com.owncloud.android.datamodel.FileDataStorageManager;
  import com.owncloud.android.datamodel.OCFile;
  import com.owncloud.android.files.services.FileObserverService;
@@@ -90,10 -68,8 +74,9 @@@ import com.owncloud.android.ui.dialog.E
  import com.owncloud.android.R;
  
  import eu.alefzero.webdav.OnDatatransferProgressListener;
 +import eu.alefzero.webdav.WebdavClient;
  import eu.alefzero.webdav.WebdavUtils;
  
  /**
   * This Fragment is used to display the details about a file.
   * 
@@@ -262,239 -241,109 +244,236 @@@ public class FileDetailFragment extend
      }
  
      
 -    @Override\r
 -    public View getView() {\r
 -        return super.getView() == null ? mView : super.getView();\r
 -    }\r
 -
 -    \r
 -    @Override\r
 -    public void onClick(View v) {\r
 -        switch (v.getId()) {\r
 -            case R.id.fdDownloadBtn: {\r
 -                FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder();\r
 -                FileUploaderBinder uploaderBinder = mContainerActivity.getFileUploaderBinder();\r
 -                if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, mFile)) {\r
 -                    downloaderBinder.cancel(mAccount, mFile);\r
 -                    if (mFile.isDown()) {\r
 -                        setButtonsForDown();\r
 -                    } else {\r
 -                        setButtonsForRemote();\r
 -                    }\r
 -\r
 -                } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, mFile)) {\r
 -                    uploaderBinder.cancel(mAccount, mFile);\r
 -                    if (!mFile.fileExists()) {\r
 -                        // TODO make something better\r
 -                        if (getActivity() instanceof FileDisplayActivity) {\r
 -                            // double pane\r
 -                            FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();\r
 -                            transaction.replace(R.id.file_details_container, new FileDetailFragment(null, null), FTAG); // empty FileDetailFragment\r
 -                            transaction.commit();\r
 -                            mContainerActivity.onFileStateChanged();\r
 -                        } else {\r
 -                            getActivity().finish();\r
 -                        }\r
 -                        \r
 -                    } else if (mFile.isDown()) {\r
 -                        setButtonsForDown();\r
 -                    } else {\r
 -                        setButtonsForRemote();\r
 -                    }\r
 -                    \r
 -                } else {\r
 -                    mLastRemoteOperation = new SynchronizeFileOperation(mFile, null, mStorageManager, mAccount, true, false, getActivity());\r
 -                    mLastRemoteOperation.execute(mAccount, getSherlockActivity(), this, mHandler, getSherlockActivity());\r
 -                \r
 -                    // update ui \r
 -                    boolean inDisplayActivity = getActivity() instanceof FileDisplayActivity;\r
 -                    getActivity().showDialog((inDisplayActivity)? FileDisplayActivity.DIALOG_SHORT_WAIT : FileDetailActivity.DIALOG_SHORT_WAIT);\r
 -                    setButtonsForTransferring(); // disable button immediately, although the synchronization does not result in a file transference\r
 -                    \r
 -                }\r
 -                break;\r
 -            }\r
 -            case R.id.fdKeepInSync: {
 -                CheckBox cb = (CheckBox) getView().findViewById(R.id.fdKeepInSync);
 -                mFile.setKeepInSync(cb.isChecked());
 -                mStorageManager.saveFile(mFile);
 -                
 -                /// register the OCFile instance in the observer service to monitor local updates;
 -                /// if necessary, the file is download 
 -                Intent intent = new Intent(getActivity().getApplicationContext(),
 -                                           FileObserverService.class);
 -                intent.putExtra(FileObserverService.KEY_FILE_CMD,
 -                           (cb.isChecked()?
 -                                   FileObserverService.CMD_ADD_OBSERVED_FILE:
 -                                   FileObserverService.CMD_DEL_OBSERVED_FILE));
 -                intent.putExtra(FileObserverService.KEY_CMD_ARG_FILE, mFile);
 -                intent.putExtra(FileObserverService.KEY_CMD_ARG_ACCOUNT, mAccount);
 -                getActivity().startService(intent);
 -                
 -                if (mFile.keepInSync()) {
 -                    onClick(getView().findViewById(R.id.fdDownloadBtn));    // force an immediate synchronization
 -                }
 -                break;
 +    @Override
 +    public View getView() {
 +        return super.getView() == null ? mView : super.getView();
 +    }
 +
 +    
 +    /**
 +     * {@inheritDoc}
 +     */
 +    @Override
 +    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
 +        super.onCreateOptionsMenu(menu, inflater);
 +        inflater.inflate(R.menu.file_actions_menu, menu);
 +        MenuItem item = menu.findItem(R.id.action_see_details);
 +        if (item != null) {
 +            item.setVisible(false);
 +            item.setEnabled(false);
 +        }
 +    }
 +
 +    
 +    /**
 +     * {@inheritDoc}
 +     */
 +    @Override
 +    public void onPrepareOptionsMenu (Menu menu) {
 +        super.onPrepareOptionsMenu(menu);
 +        
 +        List<Integer> toHide = new ArrayList<Integer>();
 +        List<Integer> toShow = new ArrayList<Integer>();
 +        
 +        FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder();
 +        boolean downloading = downloaderBinder != null && downloaderBinder.isDownloading(mAccount, mFile);
 +        FileUploaderBinder uploaderBinder = mContainerActivity.getFileUploaderBinder();
 +        boolean uploading = uploaderBinder != null && uploaderBinder.isUploading(mAccount, mFile);
 +        
 +        if (downloading || uploading) {
 +            toHide.add(R.id.action_download_file);
 +            toHide.add(R.id.action_rename_file);
 +            toHide.add(R.id.action_remove_file);
 +            toHide.add(R.id.action_open_file_with);
 +            if (!downloading) {
 +                toHide.add(R.id.action_cancel_download);
 +                toShow.add(R.id.action_cancel_upload);
 +            } else {
 +                toHide.add(R.id.action_cancel_upload);
 +                toShow.add(R.id.action_cancel_download);
              }
 -            case R.id.fdRenameBtn: {
 -                String fileName = mFile.getFileName();
 -                int extensionStart = mFile.isDirectory() ? -1 : fileName.lastIndexOf(".");
 -                int selectionEnd = (extensionStart >= 0) ? extensionStart : fileName.length();
 -                EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.rename_dialog_title), fileName, 0, selectionEnd, this);
 -                dialog.show(getFragmentManager(), "nameeditdialog");
 -                break;
 -            }   
 -            case R.id.fdRemoveBtn: {
 -                ConfirmationDialogFragment confDialog = ConfirmationDialogFragment.newInstance(
 -                        R.string.confirmation_remove_alert,
 -                        new String[]{mFile.getFileName()},
 -                        mFile.isDown() ? R.string.confirmation_remove_remote_and_local : R.string.confirmation_remove_remote,
 -                        mFile.isDown() ? R.string.confirmation_remove_local : -1,
 -                        R.string.common_cancel);
 -                confDialog.setOnConfirmationListener(this);
 -                confDialog.show(getFragmentManager(), FTAG_CONFIRMATION);
 -                break;
 +
 +        } else if (mFile != null && mFile.isDown()) {
 +            toHide.add(R.id.action_download_file);
 +            toHide.add(R.id.action_cancel_download);
 +            toHide.add(R.id.action_cancel_upload);
 +            
 +            toShow.add(R.id.action_rename_file);
 +            toShow.add(R.id.action_remove_file);
 +            toShow.add(R.id.action_open_file_with);
 +            toShow.add(R.id.action_sync_file);
 +            
 +        } else if (mFile != null) {
 +            toHide.add(R.id.action_open_file_with);
 +            toHide.add(R.id.action_cancel_download);
 +            toHide.add(R.id.action_cancel_upload);
 +            toHide.add(R.id.action_sync_file);
 +            
 +            toShow.add(R.id.action_rename_file);
 +            toShow.add(R.id.action_remove_file);
 +            toShow.add(R.id.action_download_file);
 +            
 +        } else {
 +            toHide.add(R.id.action_open_file_with);
 +            toHide.add(R.id.action_cancel_download);
 +            toHide.add(R.id.action_cancel_upload);
 +            toHide.add(R.id.action_sync_file);
 +            toHide.add(R.id.action_download_file);
 +            toHide.add(R.id.action_rename_file);
 +            toHide.add(R.id.action_remove_file);
 +            
 +        }
 +
 +        MenuItem item = null;
 +        for (int i : toHide) {
 +            item = menu.findItem(i);
 +            if (item != null) {
 +                item.setVisible(false);
 +                item.setEnabled(false);
 +            }
 +        }
 +        for (int i : toShow) {
 +            item = menu.findItem(i);
 +            if (item != null) {
 +                item.setVisible(true);
 +                item.setEnabled(true);
              }
 -            case R.id.fdOpenBtn: {
 +        }
 +    }
 +
 +    
 +    /**
 +     * {@inheritDoc}
 +     */
 +    @Override
 +    public boolean onOptionsItemSelected(MenuItem item) {
 +        switch (item.getItemId()) {
 +            case R.id.action_open_file_with: {
                  openFile();
-     
 +                return true;
 +            }
 +            case R.id.action_remove_file: {
 +                removeFile();
 +                return true;
 +            }
 +            case R.id.action_rename_file: {
 +                renameFile();
 +                return true;
 +            }
 +            case R.id.action_download_file: 
 +            case R.id.action_cancel_download:
 +            case R.id.action_cancel_upload:
 +            case R.id.action_sync_file: {
 +                synchronizeFile();
 +                return true;
 +            }
 +            default:
 +                return false;
 +        }
 +    }
 +    
 +    @Override
 +    public void onClick(View v) {
 +        switch (v.getId()) {
 +            case R.id.fdKeepInSync: {
 +                toggleKeepInSync();
 +                break;
 +            }
 +            case R.id.fdCancelBtn: {
 +                synchronizeFile();
                  break;
              }
              default:
                  Log_OC.e(TAG, "Incorrect view clicked!");
          }
 +    }
 +    
 +    
 +    private void toggleKeepInSync() {
 +        CheckBox cb = (CheckBox) getView().findViewById(R.id.fdKeepInSync);
 +        mFile.setKeepInSync(cb.isChecked());
 +        mStorageManager.saveFile(mFile);
          
 -    }\r
 -    \r
 +        /// register the OCFile instance in the observer service to monitor local updates;
 +        /// if necessary, the file is download 
 +        Intent intent = new Intent(getActivity().getApplicationContext(),
 +                                   FileObserverService.class);
 +        intent.putExtra(FileObserverService.KEY_FILE_CMD,
 +                   (cb.isChecked()?
 +                           FileObserverService.CMD_ADD_OBSERVED_FILE:
 +                           FileObserverService.CMD_DEL_OBSERVED_FILE));
 +        intent.putExtra(FileObserverService.KEY_CMD_ARG_FILE, mFile);
 +        intent.putExtra(FileObserverService.KEY_CMD_ARG_ACCOUNT, mAccount);
 +        getActivity().startService(intent);
 +        
 +        if (mFile.keepInSync()) {
 +            synchronizeFile();   // force an immediate synchronization
 +        }
 +    }
 +
 +
 +    private void removeFile() {
 +        ConfirmationDialogFragment confDialog = ConfirmationDialogFragment.newInstance(
 +                R.string.confirmation_remove_alert,
 +                new String[]{mFile.getFileName()},
 +                mFile.isDown() ? R.string.confirmation_remove_remote_and_local : R.string.confirmation_remove_remote,
 +                mFile.isDown() ? R.string.confirmation_remove_local : -1,
 +                R.string.common_cancel);
 +        confDialog.setOnConfirmationListener(this);
 +        confDialog.show(getFragmentManager(), FTAG_CONFIRMATION);
 +    }
 +
 +
 +    private void renameFile() {
 +        String fileName = mFile.getFileName();
 +        int extensionStart = mFile.isDirectory() ? -1 : fileName.lastIndexOf(".");
 +        int selectionEnd = (extensionStart >= 0) ? extensionStart : fileName.length();
 +        EditNameDialog dialog = EditNameDialog.newInstance(getString(R.string.rename_dialog_title), fileName, 0, selectionEnd, this);
 +        dialog.show(getFragmentManager(), "nameeditdialog");
 +    }
 +
 +    private void synchronizeFile() {
 +        FileDownloaderBinder downloaderBinder = mContainerActivity.getFileDownloaderBinder();
 +        FileUploaderBinder uploaderBinder = mContainerActivity.getFileUploaderBinder();
 +        if (downloaderBinder != null && downloaderBinder.isDownloading(mAccount, mFile)) {
 +            downloaderBinder.cancel(mAccount, mFile);
 +            if (mFile.isDown()) {
 +                setButtonsForDown();
 +            } else {
 +                setButtonsForRemote();
 +            }
 +
 +        } else if (uploaderBinder != null && uploaderBinder.isUploading(mAccount, mFile)) {
 +            uploaderBinder.cancel(mAccount, mFile);
 +            if (!mFile.fileExists()) {
 +                // TODO make something better
 +                if (getActivity() instanceof FileDisplayActivity) {
 +                    // double pane
 +                    FragmentTransaction transaction = getActivity().getSupportFragmentManager().beginTransaction();
 +                    transaction.replace(R.id.file_details_container, new FileDetailFragment(null, null), FTAG); // empty FileDetailFragment
 +                    transaction.commit();
 +                    mContainerActivity.onFileStateChanged();
 +                } else {
 +                    getActivity().finish();
 +                }
 +                
 +            } else if (mFile.isDown()) {
 +                setButtonsForDown();
 +            } else {
 +                setButtonsForRemote();
 +            }
 +            
 +        } else {
 +            mLastRemoteOperation = new SynchronizeFileOperation(mFile, null, mStorageManager, mAccount, true, false, getActivity());
-             WebdavClient wc = OwnCloudClientUtils.createOwnCloudClient(mAccount, getSherlockActivity().getApplicationContext());
-             mLastRemoteOperation.execute(wc, this, mHandler);
-         
++            mLastRemoteOperation.execute(mAccount, getSherlockActivity(), this, mHandler, getSherlockActivity());
++            
 +            // update ui 
 +            boolean inDisplayActivity = getActivity() instanceof FileDisplayActivity;
 +            getActivity().showDialog((inDisplayActivity)? FileDisplayActivity.DIALOG_SHORT_WAIT : FileDetailActivity.DIALOG_SHORT_WAIT);
 +            
 +        }
 +    }
 +
      /**
       * Opens mFile.
       */
@@@ -314,12 -311,10 +311,11 @@@ public class OCFileListFragment extend
                  }
                  return true;
              }
 -            case R.id.action_download_file: {
 +            case R.id.action_download_file: 
 +            case R.id.action_sync_file: {
                  Account account = AccountUtils.getCurrentOwnCloudAccount(getSherlockActivity());
                  RemoteOperation operation = new SynchronizeFileOperation(mTargetFile, null, mContainerActivity.getStorageManager(), account, true, false, getSherlockActivity());
-                 WebdavClient wc = OwnCloudClientUtils.createOwnCloudClient(account, getSherlockActivity().getApplicationContext());
-                 operation.execute(wc, mContainerActivity, mHandler);
+                 operation.execute(account, getSherlockActivity(), mContainerActivity, mHandler, getSherlockActivity());
                  getSherlockActivity().showDialog(FileDisplayActivity.DIALOG_SHORT_WAIT);
                  return true;
              }
@@@ -437,31 -422,11 +434,31 @@@ public class PreviewMediaFragment exten
  
      
      @Override
 +    public void onPause() {
 +        super.onPause();
 +        Log_OC.e(TAG, "onPause");
 +    }
 +    
 +    @Override
 +    public void onResume() {
 +        super.onResume();
 +        Log_OC.e(TAG, "onResume");
 +    }
 +    
 +    @Override
 +    public void onDestroy() {
 +        super.onDestroy();
 +        Log_OC.e(TAG, "onDestroy");
 +    }
 +    
 +    @Override
      public void onStop() {
 +        Log_OC.e(TAG, "onStop");
          super.onStop();
 -        
 +
 +        mPrepared = false;
          if (mMediaServiceConnection != null) {
-             Log.d(TAG, "Unbinding from MediaService ...");
+             Log_OC.d(TAG, "Unbinding from MediaService ...");
              if (mMediaServiceBinder != null && mMediaController != null) {
                  mMediaServiceBinder.unregisterMediaController(mMediaController);
              }