Modify OperationsService so that AuthenticatorActivity may ask for the execution...
authormasensio <masensio@solidgear.es>
Fri, 28 Mar 2014 11:57:18 +0000 (12:57 +0100)
committermasensio <masensio@solidgear.es>
Fri, 28 Mar 2014 11:57:18 +0000 (12:57 +0100)
src/com/owncloud/android/authentication/AuthenticatorActivity.java
src/com/owncloud/android/services/OperationsService.java
src/com/owncloud/android/ui/activity/FileDisplayActivity.java

index e5e8014..255ed80 100644 (file)
@@ -25,8 +25,11 @@ import android.accounts.AccountManager;
 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
@@ -34,6 +37,7 @@ import android.net.Uri;
 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
@@ -76,6 +80,8 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCo
 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
@@ -177,8 +183,10 @@ SsoWebViewClientListener, OnSslUntrustedCertListener {
     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
@@ -394,6 +402,9 @@ SsoWebViewClientListener, OnSslUntrustedCertListener {
                 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
@@ -964,13 +975,11 @@ SsoWebViewClientListener, OnSslUntrustedCertListener {
 \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
@@ -1796,4 +1805,31 @@ SsoWebViewClientListener, OnSslUntrustedCertListener {
 \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
index 80caea7..bef03ad 100644 (file)
@@ -32,6 +32,7 @@ import com.owncloud.android.lib.common.operations.RemoteOperationResult;
 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;
 
@@ -47,7 +48,6 @@ import android.os.IBinder;
 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 {
@@ -62,6 +62,7 @@ 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";
@@ -134,6 +135,9 @@ public class OperationsService extends Service {
                 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;
index d0c6069..f6136ed 100644 (file)
@@ -19,7 +19,6 @@
 package com.owncloud.android.ui.activity;
 
 import java.io.File;
-import java.io.InvalidClassException;
 
 import android.accounts.Account;
 import android.app.AlertDialog;