X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/fd0b92e9f2575b74d82e1748b009b94d3a520bec..4e9becbc974cddc38a6d25e6469bfb56947f5147:/src/com/owncloud/android/ui/activity/FileActivity.java diff --git a/src/com/owncloud/android/ui/activity/FileActivity.java b/src/com/owncloud/android/ui/activity/FileActivity.java index fac275ca..a19a362b 100644 --- a/src/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/com/owncloud/android/ui/activity/FileActivity.java @@ -23,9 +23,13 @@ import android.accounts.AccountManager; import android.accounts.AccountManagerCallback; import android.accounts.AccountManagerFuture; import android.accounts.OperationCanceledException; +import android.content.ComponentName; +import android.content.Context; import android.content.Intent; +import android.content.ServiceConnection; import android.os.Bundle; import android.os.Handler; +import android.os.IBinder; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentTransaction; @@ -38,13 +42,19 @@ import com.owncloud.android.authentication.AccountUtils; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.files.FileOperationsHelper; -import com.owncloud.android.lib.operations.common.OnRemoteOperationListener; -import com.owncloud.android.lib.operations.common.RemoteOperation; -import com.owncloud.android.lib.operations.common.RemoteOperationResult; -import com.owncloud.android.lib.operations.common.RemoteOperationResult.ResultCode; +import com.owncloud.android.files.services.FileDownloader; +import com.owncloud.android.files.services.FileUploader; +import com.owncloud.android.files.services.FileDownloader.FileDownloaderBinder; +import com.owncloud.android.files.services.FileUploader.FileUploaderBinder; +import com.owncloud.android.lib.common.operations.OnRemoteOperationListener; +import com.owncloud.android.lib.common.operations.RemoteOperation; +import com.owncloud.android.lib.common.operations.RemoteOperationResult; +import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; import com.owncloud.android.operations.CreateShareOperation; import com.owncloud.android.operations.UnshareLinkOperation; +import com.owncloud.android.services.OperationsService; +import com.owncloud.android.services.OperationsService.OperationsServiceBinder; import com.owncloud.android.ui.dialog.LoadingDialog; import com.owncloud.android.utils.Log_OC; @@ -54,7 +64,8 @@ import com.owncloud.android.utils.Log_OC; * * @author David A. Velasco */ -public class FileActivity extends SherlockFragmentActivity implements OnRemoteOperationListener { +public class FileActivity extends SherlockFragmentActivity +implements OnRemoteOperationListener, ComponentsGetter { public static final String EXTRA_FILE = "com.owncloud.android.ui.activity.FILE"; public static final String EXTRA_ACCOUNT = "com.owncloud.android.ui.activity.ACCOUNT"; @@ -91,7 +102,15 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp private FileDataStorageManager mStorageManager = null; private FileOperationsHelper mFileOperationsHelper; - + + private ServiceConnection mOperationsServiceConnection = null; + + private OperationsServiceBinder mOperationsServiceBinder = null; + + protected FileDownloaderBinder mDownloaderBinder = null; + protected FileUploaderBinder mUploaderBinder = null; + private ServiceConnection mDownloadServiceConnection, mUploadServiceConnection = null; + /** * Loads the ownCloud {@link Account} and main {@link OCFile} to be handled by the instance of @@ -104,7 +123,7 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mHandler = new Handler(); - mFileOperationsHelper = new FileOperationsHelper(); + mFileOperationsHelper = new FileOperationsHelper(this); Account account; if(savedInstanceState != null) { account = savedInstanceState.getParcelable(FileActivity.EXTRA_ACCOUNT); @@ -117,7 +136,19 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp } setAccount(account, savedInstanceState != null); - + + mOperationsServiceConnection = new OperationsServiceConnection(); + bindService(new Intent(this, OperationsService.class), mOperationsServiceConnection, Context.BIND_AUTO_CREATE); + + mDownloadServiceConnection = newTransferenceServiceConnection(); + if (mDownloadServiceConnection != null) { + bindService(new Intent(this, FileDownloader.class), mDownloadServiceConnection, Context.BIND_AUTO_CREATE); + } + mUploadServiceConnection = newTransferenceServiceConnection(); + if (mUploadServiceConnection != null) { + bindService(new Intent(this, FileUploader.class), mUploadServiceConnection, Context.BIND_AUTO_CREATE); + } + } @@ -133,16 +164,48 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp if (!validAccount) { swapToDefaultAccount(); } - } @Override protected void onStart() { super.onStart(); + if (mAccountWasSet) { onAccountSet(mAccountWasRestored); } + if (mOperationsServiceBinder != null) { + mOperationsServiceBinder.addOperationListener(FileActivity.this, mHandler); + } + } + + + @Override + protected void onStop() { + + if (mOperationsServiceBinder != null) { + mOperationsServiceBinder.removeOperationListener(this); + } + + super.onStop(); + } + + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mOperationsServiceConnection != null) { + unbindService(mOperationsServiceConnection); + mOperationsServiceBinder = null; + } + if (mDownloadServiceConnection != null) { + unbindService(mDownloadServiceConnection); + mDownloadServiceConnection = null; + } + if (mUploadServiceConnection != null) { + unbindService(mUploadServiceConnection); + mUploadServiceConnection = null; + } } @@ -269,6 +332,15 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp } + public OperationsServiceBinder getOperationsServiceBinder() { + return mOperationsServiceBinder; + } + + protected ServiceConnection newTransferenceServiceConnection() { + return null; + } + + /** * Helper class handling a callback from the {@link AccountManager} after the creation of * a new ownCloud {@link Account} finished, successfully or not. @@ -364,6 +436,8 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp private void onCreateShareOperationFinish(CreateShareOperation operation, RemoteOperationResult result) { dismissLoadingDialog(); if (result.isSuccess()) { + updateFileFromDB(); + Intent sendIntent = operation.getSendIntent(); startActivity(sendIntent); @@ -381,7 +455,13 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp private void onUnshareLinkOperationFinish(UnshareLinkOperation operation, RemoteOperationResult result) { dismissLoadingDialog(); - if (!result.isSuccess()){ // Generic error + if (result.isSuccess()){ + updateFileFromDB(); + + } else if (result.getCode() == ResultCode.SHARE_NOT_FOUND) { // Error --> SHARE_NOT_FOUND + Toast t = Toast.makeText(this, getString(R.string.unshare_link_file_no_exist), Toast.LENGTH_LONG); + t.show(); + } else { // Generic error // Show a Message, operation finished without success Toast t = Toast.makeText(this, getString(R.string.unshare_link_file_error), Toast.LENGTH_LONG); t.show(); @@ -389,6 +469,14 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp } + + private void updateFileFromDB(){ + OCFile file = getStorageManager().getFileByPath(getFile().getRemotePath()); + if (file != null) { + setFile(file); + } + } + /** * Show loading dialog */ @@ -412,5 +500,50 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp loading.dismiss(); } } + + + /** + * Implements callback methods for service binding. Passed as a parameter to { + */ + private class OperationsServiceConnection implements ServiceConnection { + + @Override + public void onServiceConnected(ComponentName component, IBinder service) { + if (component.equals(new ComponentName(FileActivity.this, OperationsService.class))) { + Log_OC.d(TAG, "Operations service connected"); + mOperationsServiceBinder = (OperationsServiceBinder) service; + mOperationsServiceBinder.addOperationListener(FileActivity.this, mHandler); + if (!mOperationsServiceBinder.isPerformingBlockingOperation()) { + dismissLoadingDialog(); + } + + } else { + return; + } + } + + + @Override + public void onServiceDisconnected(ComponentName component) { + if (component.equals(new ComponentName(FileActivity.this, OperationsService.class))) { + Log_OC.d(TAG, "Operations service disconnected"); + mOperationsServiceBinder = null; + // TODO whatever could be waiting for the service is unbound + } + } + } + + + @Override + public FileDownloaderBinder getFileDownloaderBinder() { + return mDownloaderBinder; + } + + + @Override + public FileUploaderBinder getFileUploaderBinder() { + return mUploaderBinder; + }; + }