X-Git-Url: http://git.linex4red.de/pub/Android/ownCloud.git/blobdiff_plain/0f99af779e39e3bdca3ca67b5a196d69d36691fe..b2e14a93df4370ecbc98d1c272f0216f6c2cc95d:/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 dc3ad0db..895e7764 100644 --- a/src/com/owncloud/android/ui/activity/FileActivity.java +++ b/src/com/owncloud/android/ui/activity/FileActivity.java @@ -1,6 +1,6 @@ /* ownCloud Android client application * Copyright (C) 2011 Bartek Przybylski - * Copyright (C) 2012-2013 ownCloud Inc. + * Copyright (C) 2012-2014 ownCloud Inc. * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2, @@ -42,10 +42,14 @@ 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; @@ -60,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"; @@ -70,6 +75,7 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp public static final String TAG = FileActivity.class.getSimpleName(); private static final String DIALOG_WAIT_TAG = "DIALOG_WAIT"; + private static final String KEY_WAITING_FOR_OP_ID = "WAITING_FOR_OP_ID";; /** OwnCloud {@link Account} where the main {@link OCFile} handled by the activity is located. */ @@ -101,7 +107,11 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp 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 @@ -114,12 +124,15 @@ 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); mFile = savedInstanceState.getParcelable(FileActivity.EXTRA_FILE); mFromNotification = savedInstanceState.getBoolean(FileActivity.EXTRA_FROM_NOTIFICATION); + mFileOperationsHelper.setOpIdWaitingFor( + savedInstanceState.getLong(KEY_WAITING_FOR_OP_ID, Long.MAX_VALUE) + ); } else { account = getIntent().getParcelableExtra(FileActivity.EXTRA_ACCOUNT); mFile = getIntent().getParcelableExtra(FileActivity.EXTRA_FILE); @@ -130,6 +143,16 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp 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); + } + } @@ -151,6 +174,7 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp @Override protected void onStart() { super.onStart(); + if (mAccountWasSet) { onAccountSet(mAccountWasRestored); } @@ -159,13 +183,33 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp } } + @Override + protected void onResume() { + super.onResume(); + + if (mOperationsServiceBinder != null) { + doOnResumeAndBound(); + } + + } + + @Override + protected void onPause() { + if (mOperationsServiceBinder != null) { + mOperationsServiceBinder.removeOperationListener(this); + } + + super.onPause(); + } @Override protected void onStop() { - super.onStop(); + if (mOperationsServiceBinder != null) { mOperationsServiceBinder.removeOperationListener(this); } + + super.onStop(); } @@ -176,6 +220,14 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp unbindService(mOperationsServiceConnection); mOperationsServiceBinder = null; } + if (mDownloadServiceConnection != null) { + unbindService(mDownloadServiceConnection); + mDownloadServiceConnection = null; + } + if (mUploadServiceConnection != null) { + unbindService(mUploadServiceConnection); + mUploadServiceConnection = null; + } } @@ -255,6 +307,7 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp outState.putParcelable(FileActivity.EXTRA_FILE, mFile); outState.putParcelable(FileActivity.EXTRA_ACCOUNT, mAccount); outState.putBoolean(FileActivity.EXTRA_FROM_NOTIFICATION, mFromNotification); + outState.putLong(KEY_WAITING_FOR_OP_ID, mFileOperationsHelper.getOpIdWaitingFor()); } @@ -302,6 +355,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. @@ -385,6 +447,9 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp @Override public void onRemoteOperationFinish(RemoteOperation operation, RemoteOperationResult result) { Log_OC.d(TAG, "Received result of operation in FileActivity - common behaviour for all the FileActivities "); + + mFileOperationsHelper.setOpIdWaitingFor(Long.MAX_VALUE); + if (operation instanceof CreateShareOperation) { onCreateShareOperationFinish((CreateShareOperation) operation, result); @@ -463,6 +528,15 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp } + private void doOnResumeAndBound() { + mOperationsServiceBinder.addOperationListener(FileActivity.this, mHandler); + long waitingForOpId = mFileOperationsHelper.getOpIdWaitingFor(); + if (waitingForOpId <= Integer.MAX_VALUE) { + mOperationsServiceBinder.dispatchResultIfFinished((int)waitingForOpId, this); + } + } + + /** * Implements callback methods for service binding. Passed as a parameter to { */ @@ -473,10 +547,10 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp 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()) { + /*if (!mOperationsServiceBinder.isPerformingBlockingOperation()) { dismissLoadingDialog(); - } + }*/ + doOnResumeAndBound(); } else { return; @@ -492,6 +566,19 @@ public class FileActivity extends SherlockFragmentActivity implements OnRemoteOp // TODO whatever could be waiting for the service is unbound } } + } + + + @Override + public FileDownloaderBinder getFileDownloaderBinder() { + return mDownloaderBinder; + } + + + @Override + public FileUploaderBinder getFileUploaderBinder() { + return mUploaderBinder; }; + }