import android.app.AlertDialog;\r
import android.app.Dialog;\r
import android.app.ProgressDialog;\r
+import android.content.ComponentName;\r
+import android.content.Context;\r
import android.content.DialogInterface;\r
import android.content.Intent;\r
+import android.content.ServiceConnection;\r
import android.content.SharedPreferences;\r
import android.graphics.Rect;\r
import android.graphics.drawable.Drawable;\r
import android.net.http.SslError;\r
import android.os.Bundle;\r
import android.os.Handler;\r
+import android.os.IBinder;\r
import android.preference.PreferenceManager;\r
import android.support.v4.app.Fragment;\r
import android.support.v4.app.FragmentManager;\r
import com.owncloud.android.lib.resources.files.ExistenceCheckRemoteOperation;\r
import com.owncloud.android.lib.resources.users.GetRemoteUserNameOperation;\r
\r
+import com.owncloud.android.services.OperationsService;\r
+import com.owncloud.android.services.OperationsService.OperationsServiceBinder;\r
import com.owncloud.android.ui.dialog.SamlWebViewDialog;\r
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog;\r
import com.owncloud.android.ui.dialog.SslUntrustedCertDialog.OnSslUntrustedCertListener;\r
private boolean mResumed; // Control if activity is resumed\r
\r
public static String DIALOG_UNTRUSTED_CERT = "DIALOG_UNTRUSTED_CERT";\r
-\r
- private DetectAuthenticationMethodOperation mDetectAuthenticationOperation;\r
+ \r
+ private ServiceConnection mOperationsServiceConnection = null;\r
+ \r
+ private OperationsServiceBinder mOperationsServiceBinder = null;\r
\r
\r
/**\r
return false;\r
}\r
});\r
+ \r
+ mOperationsServiceConnection = new OperationsServiceConnection();\r
+ bindService(new Intent(this, OperationsService.class), mOperationsServiceConnection, Context.BIND_AUTO_CREATE);\r
}\r
\r
\r
\r
Log_OC.d(TAG, "Trying empty authorization to detect authentication method");\r
\r
- /// get the path to the root folder through WebDAV from the version server\r
- String webdav_path = AccountUtils.getWebdavPath(mDiscoveredVersion, mAuthTokenType);\r
-\r
/// test credentials \r
- mDetectAuthenticationOperation = new DetectAuthenticationMethodOperation(this);\r
- OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(Uri.parse(mHostBaseUrl + webdav_path), this, true);\r
- mOperationThread = mDetectAuthenticationOperation.execute(client, this, mHandler);\r
+ Intent service = new Intent(this, OperationsService.class);\r
+ service.setAction(OperationsService.ACTION_DETECT_AUTHENTICATION_METHOD);\r
+ service.putExtra(OperationsService.EXTRA_SERVER_URL, mHostBaseUrl);\r
+ startService(service);\r
}\r
\r
\r
\r
}\r
\r
+ /** \r
+ * Implements callback methods for service binding. Passed as a parameter to { \r
+ */\r
+ private class OperationsServiceConnection implements ServiceConnection {\r
+\r
+ @Override\r
+ public void onServiceConnected(ComponentName component, IBinder service) {\r
+ if (component.equals(new ComponentName(AuthenticatorActivity.this, OperationsService.class))) {\r
+ Log_OC.d(TAG, "Operations service connected");\r
+ mOperationsServiceBinder = (OperationsServiceBinder) service;\r
+ mOperationsServiceBinder.addOperationListener(AuthenticatorActivity.this, mHandler);\r
+ } else {\r
+ return;\r
+ }\r
+ \r
+ }\r
+\r
+ @Override\r
+ public void onServiceDisconnected(ComponentName component) {\r
+ if (component.equals(new ComponentName(AuthenticatorActivity.this, OperationsService.class))) {\r
+ Log_OC.d(TAG, "Operations service disconnected");\r
+ mOperationsServiceBinder = null;\r
+ // TODO whatever could be waiting for the service is unbound\r
+ }\r
+ }\r
+ \r
+ }\r
}\r
import com.owncloud.android.lib.resources.shares.ShareType;
import com.owncloud.android.operations.common.SyncOperation;
import com.owncloud.android.operations.CreateShareOperation;
+import com.owncloud.android.operations.DetectAuthenticationMethodOperation;
import com.owncloud.android.operations.UnshareLinkOperation;
import com.owncloud.android.utils.Log_OC;
import android.os.Looper;
import android.os.Message;
import android.os.Process;
-//import android.support.v4.content.LocalBroadcastManager;
import android.util.Pair;
public class OperationsService extends Service {
public static final String ACTION_CREATE_SHARE = "CREATE_SHARE";
public static final String ACTION_UNSHARE = "UNSHARE";
+ public static final String ACTION_DETECT_AUTHENTICATION_METHOD = "DETECT_AUTHENTICATION_METHOD";
public static final String ACTION_OPERATION_ADDED = OperationsService.class.getName() + ".OPERATION_ADDED";
public static final String ACTION_OPERATION_FINISHED = OperationsService.class.getName() + ".OPERATION_FINISHED";
if (remotePath.length() > 0) {
operation = new UnshareLinkOperation(remotePath, this.getApplicationContext());
}
+ } else if (action.equals(ACTION_DETECT_AUTHENTICATION_METHOD)) { // Detect Authentication Method
+ operation = new DetectAuthenticationMethodOperation(this.getApplicationContext());
+
} else {
// nothing we are going to handle
return START_NOT_STICKY;