Moved execution of GetSharesOperation to OperationsService

This commit is contained in:
David A. Velasco 2014-01-30 17:58:35 +01:00
parent 72d9d63acb
commit 871d5ea05d
4 changed files with 61 additions and 40 deletions

View file

@ -149,6 +149,7 @@
</intent-filter>
</activity>
<service android:name=".services.OperationsService" />
<service android:name=".files.services.FileDownloader" />
<service android:name=".files.services.FileUploader" />
<service android:name=".media.MediaService" />

View file

@ -19,10 +19,8 @@ package com.owncloud.android.operations;
import java.util.ArrayList;
import com.owncloud.android.datamodel.FileDataStorageManager;
import com.owncloud.android.datamodel.OCFile;
import com.owncloud.android.lib.network.OwnCloudClient;
import com.owncloud.android.lib.operations.common.RemoteOperation;
import com.owncloud.android.lib.operations.common.RemoteOperationResult;
import com.owncloud.android.lib.operations.common.OCShare;
import com.owncloud.android.lib.operations.common.ShareType;

View file

@ -52,8 +52,9 @@ public class OperationsService extends Service {
public static final String EXTRA_ACCOUNT = "ACCOUNT";
public static final String EXTRA_SERVER_URL = "SERVER_URL";
public static final String EXTRA_RESULT = "RESULT";
private static final String ACTION_OPERATION_ADDED = OperationsService.class.getName() + ".OPERATION_ADDED";
private static final String ACTION_OPERATION_FINISHED = OperationsService.class.getName() + ".OPERATION_FINISHED";
public static final String ACTION_OPERATION_ADDED = OperationsService.class.getName() + ".OPERATION_ADDED";
public static final String ACTION_OPERATION_FINISHED = OperationsService.class.getName() + ".OPERATION_FINISHED";
private ConcurrentLinkedQueue<Pair<Target, RemoteOperation>> mPendingOperations = new ConcurrentLinkedQueue<Pair<Target, RemoteOperation>>();
@ -259,6 +260,8 @@ public class OperationsService extends Service {
}
// TODO - maybe add a notification for real start of operations
/**
* Sends a LOCAL broadcast when an operations finishes in order to the interested activities can update their view
*

View file

@ -45,6 +45,7 @@ import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
@ -69,8 +70,6 @@ import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder;
import com.owncloud.android.files.services.FileUploader.FileUploaderBinder;
import com.owncloud.android.operations.CreateFolderOperation;
import com.owncloud.android.operations.GetSharesOperation;
import com.owncloud.android.lib.operations.common.OnRemoteOperationListener;
import com.owncloud.android.lib.operations.common.RemoteOperation;
import com.owncloud.android.lib.operations.common.RemoteOperationResult;
@ -80,7 +79,7 @@ import com.owncloud.android.operations.RemoveFileOperation;
import com.owncloud.android.operations.RenameFileOperation;
import com.owncloud.android.operations.SynchronizeFileOperation;
import com.owncloud.android.operations.SynchronizeFolderOperation;
import com.owncloud.android.operations.common.SyncOperation;
import com.owncloud.android.services.OperationsService;
import com.owncloud.android.syncadapter.FileSyncService;
import com.owncloud.android.ui.dialog.EditNameDialog;
import com.owncloud.android.ui.dialog.EditNameDialog.EditNameDialogListener;
@ -115,6 +114,7 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
private SyncBroadcastReceiver mSyncBroadcastReceiver;
private UploadFinishReceiver mUploadFinishReceiver;
private DownloadFinishReceiver mDownloadFinishReceiver;
private OperationsServiceReceiver mOperationsServiceReceiver;
private FileDownloaderBinder mDownloaderBinder = null;
private FileUploaderBinder mUploaderBinder = null;
private ServiceConnection mDownloadConnection = null, mUploadConnection = null;
@ -704,6 +704,12 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
downloadIntentFilter.addAction(FileDownloader.getDownloadFinishMessage());
mDownloadFinishReceiver = new DownloadFinishReceiver();
registerReceiver(mDownloadFinishReceiver, downloadIntentFilter);
// Listen for messages from the OperationsService
IntentFilter operationsIntentFilter = new IntentFilter(OperationsService.ACTION_OPERATION_ADDED);
operationsIntentFilter.addAction(OperationsService.ACTION_OPERATION_FINISHED);
mOperationsServiceReceiver = new OperationsServiceReceiver();
LocalBroadcastManager.getInstance(this).registerReceiver(mOperationsServiceReceiver, operationsIntentFilter);
Log_OC.d(TAG, "onResume() end");
}
@ -725,7 +731,10 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
unregisterReceiver(mDownloadFinishReceiver);
mDownloadFinishReceiver = null;
}
if (mOperationsServiceReceiver != null) {
LocalBroadcastManager.getInstance(this).unregisterReceiver(mOperationsServiceReceiver);
mOperationsServiceReceiver = null;
}
Log_OC.d(TAG, "onPause() end");
}
@ -1034,6 +1043,45 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
return (accountName != null && getAccount() != null && accountName.equals(getAccount().name));
}
}
/**
* Class waiting for broadcast events from the {@link OperationsService}.
*
* Updates the list of files when a get for shares is finished; at this moment the refresh of shares is the only
* operation performed in {@link OperationsService}.
*
* In the future will handle the progress or finalization of all the operations performed in {@link OperationsService},
* probably all the operations associated to the app model.
*/
private class OperationsServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (OperationsService.ACTION_OPERATION_ADDED.equals(intent.getAction())) {
} else if (OperationsService.ACTION_OPERATION_FINISHED.equals(intent.getAction())) {
mRefreshSharesInProgress = false;
Account account = intent.getParcelableExtra(OperationsService.EXTRA_ACCOUNT);
RemoteOperationResult getSharesResult = (RemoteOperationResult)intent.getSerializableExtra(OperationsService.EXTRA_RESULT);
if (getAccount() != null && account.name.equals(getAccount().name)
&& mStorageManager != null
) {
refeshListOfFilesFragment();
}
if ((getSharesResult != null) &&
RemoteOperationResult.ResultCode.SSL_RECOVERABLE_PEER_UNVERIFIED.equals(getSharesResult.getCode())) {
mLastSslUntrustedServerResult = getSharesResult;
showDialog(DIALOG_SSL_VALIDATOR);
}
setSupportProgressBarIndeterminateVisibility(mRefreshSharesInProgress || mSyncInProgress);
}
}
}
/**
@ -1298,29 +1346,10 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
} else if (operation instanceof CreateFolderOperation) {
onCreateFolderOperationFinish((CreateFolderOperation)operation, result);
} else if (operation instanceof GetSharesOperation) {
onGetSharesOperationFinish((GetSharesOperation) operation, result);
}
}
/** Updates the data about shared files
*
* @param operation Get Shared Files
* @param result Result of the operation
*/
private void onGetSharesOperationFinish(GetSharesOperation operation, RemoteOperationResult result) {
// Refresh the filelist with the information
refeshListOfFilesFragment();
mRefreshSharesInProgress = false;
if (!mSyncInProgress) {
setSupportProgressBarIndeterminateVisibility(false);
}
}
/**
* Updates the view associated to the activity after the finish of an operation trying to remove a
* file.
@ -1532,23 +1561,13 @@ OCFileListFragment.ContainerActivity, FileDetailFragment.ContainerActivity, OnNa
private void startGetShares() {
// Get shared files/folders
SyncOperation getShares = new GetSharesOperation();
getShares.execute(mStorageManager, this, this, mHandler, this);
Intent intent = new Intent(this, OperationsService.class);
intent.putExtra(OperationsService.EXTRA_ACCOUNT, getAccount());
startService(intent);
mRefreshSharesInProgress = true;
setSupportProgressBarIndeterminateVisibility(true);
}
// public void enableDisableViewGroup(ViewGroup viewGroup, boolean enabled) {
// int childCount = viewGroup.getChildCount();
// for (int i = 0; i < childCount; i++) {
// View view = viewGroup.getChildAt(i);
// view.setEnabled(enabled);
// view.setClickable(!enabled);
// if (view instanceof ViewGroup) {
// enableDisableViewGroup((ViewGroup) view, enabled);
// }
// }
// }
}