diff --git a/owncloud-android-library b/owncloud-android-library index a3117826a80b..51af0d75897e 160000 --- a/owncloud-android-library +++ b/owncloud-android-library @@ -1 +1 @@ -Subproject commit a3117826a80bc70b69338d65e4024182d0cb7815 +Subproject commit 51af0d75897eff1f6131ac6e46d7fcf0d2a2ca55 diff --git a/owncloudApp/src/main/java/com/owncloud/android/authentication/AccountUtils.java b/owncloudApp/src/main/java/com/owncloud/android/authentication/AccountUtils.java index 62f60c030d7e..313ffa98647d 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/authentication/AccountUtils.java +++ b/owncloudApp/src/main/java/com/owncloud/android/authentication/AccountUtils.java @@ -30,6 +30,7 @@ import com.owncloud.android.MainApp; import com.owncloud.android.datamodel.FileDataStorageManager; import com.owncloud.android.domain.capabilities.model.OCCapability; +import com.owncloud.android.lib.common.OwnCloudAccount; import com.owncloud.android.lib.common.accounts.AccountTypeUtils; import com.owncloud.android.lib.common.accounts.AccountUtils.Constants; import com.owncloud.android.lib.resources.status.OwnCloudVersion; @@ -38,12 +39,13 @@ import java.util.Locale; import static com.owncloud.android.lib.common.OwnCloudClient.WEBDAV_PATH_4_0_AND_LATER; +import static com.owncloud.android.lib.common.accounts.AccountUtils.TEMPORAL_ACCOUNT_NAME; public class AccountUtils { private static final String ODAV_PATH = "/remote.php/odav"; - public static final int ACCOUNT_VERSION = 1; + static final int ACCOUNT_VERSION = 1; /** * Can be used to get the currently selected ownCloud {@link Account} in the @@ -81,6 +83,18 @@ public static Account getCurrentOwnCloudAccount(Context context) { return defaultAccount; } + /** + * Used for requests when there's no account yet, i.e. login process + */ + public static Account getCurrentOwnCloudAccountOrATemporalOne(Context context) { + Account currentAccount = getCurrentOwnCloudAccount(context); + if (currentAccount == null) { + return new Account(TEMPORAL_ACCOUNT_NAME, MainApp.Companion.getAccountType()); + } else { + return currentAccount; + } + } + public static Account[] getAccounts(Context context) { AccountManager accountManager = AccountManager.get(context); return accountManager.getAccountsByType(MainApp.Companion.getAccountType()); diff --git a/owncloudApp/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java b/owncloudApp/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java index e6af1235dc9c..4b9aa2dcdcfb 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java +++ b/owncloudApp/src/main/java/com/owncloud/android/authentication/AuthenticatorActivity.java @@ -747,6 +747,11 @@ private void checkOcServer() { mServerStatusIcon = R.drawable.progress_small; showServerStatus(); + SharedPreferences.Editor editor = PreferenceManager + .getDefaultSharedPreferences(this).edit(); + editor.putString("server_url", normalizeUrlSuffix(uri)); + editor.apply(); + Intent getServerInfoIntent = new Intent(); getServerInfoIntent.setAction(OperationsService.ACTION_GET_SERVER_INFO); getServerInfoIntent.putExtra(OperationsService.EXTRA_SERVER_URL, normalizeUrlSuffix(uri)); diff --git a/owncloudApp/src/main/java/com/owncloud/android/authentication/AuthenticatorAsyncTask.java b/owncloudApp/src/main/java/com/owncloud/android/authentication/AuthenticatorAsyncTask.java index 6ed2e471ad37..e2a77e68fa6f 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/authentication/AuthenticatorAsyncTask.java +++ b/owncloudApp/src/main/java/com/owncloud/android/authentication/AuthenticatorAsyncTask.java @@ -74,8 +74,12 @@ protected RemoteOperationResult doInBackground(Object... params) { credentials = (OwnCloudCredentials) params[1]; } + mUseCaseHelper.checkPathExistence(url); + mUseCaseHelper.getServerInfo(url); + // Client Uri uri = Uri.parse(url); + OwnCloudClient client = OwnCloudClientFactory.createOwnCloudClient(uri, mContext, true); client.setCredentials(credentials); diff --git a/owncloudApp/src/main/java/com/owncloud/android/dependecyinjection/RemoteDataSourceModule.kt b/owncloudApp/src/main/java/com/owncloud/android/dependecyinjection/RemoteDataSourceModule.kt index f4ebd5baba9e..50594e767dde 100644 --- a/owncloudApp/src/main/java/com/owncloud/android/dependecyinjection/RemoteDataSourceModule.kt +++ b/owncloudApp/src/main/java/com/owncloud/android/dependecyinjection/RemoteDataSourceModule.kt @@ -29,7 +29,7 @@ import com.owncloud.android.data.server.datasources.RemoteAnonymousDatasource import com.owncloud.android.data.server.datasources.RemoteServerDataSource import com.owncloud.android.data.server.datasources.implementation.OCRemoteAnonymousDataSource import com.owncloud.android.data.server.datasources.implementation.OCRemoteServerDataSource -import com.owncloud.android.data.server.network.OCAnonymousServerService +import com.owncloud.android.data.server.network.OCFileService import com.owncloud.android.data.server.network.OCServerService import com.owncloud.android.data.sharing.shares.network.OCShareService import com.owncloud.android.data.sharing.sharees.datasources.RemoteShareeDataSource @@ -42,7 +42,7 @@ import com.owncloud.android.data.user.datasources.implementation.OCRemoteUserDat import com.owncloud.android.data.user.network.OCUserService import com.owncloud.android.lib.common.OwnCloudAccount import com.owncloud.android.lib.common.SingleSessionManager -import com.owncloud.android.lib.resources.server.AnonymousService +import com.owncloud.android.lib.resources.server.FileService import com.owncloud.android.lib.resources.server.ServerService import com.owncloud.android.lib.resources.shares.ShareService import com.owncloud.android.lib.resources.shares.ShareeService @@ -52,7 +52,7 @@ import org.koin.android.ext.koin.androidContext import org.koin.dsl.module val remoteDataSourceModule = module { - single { AccountUtils.getCurrentOwnCloudAccount(androidContext()) } + single { AccountUtils.getCurrentOwnCloudAccountOrATemporalOne(androidContext()) } single { OwnCloudAccount(get(), androidContext()) } single { SingleSessionManager.getDefaultSingleton().getClientFor(get(), androidContext()) } @@ -61,7 +61,7 @@ val remoteDataSourceModule = module { single { OCShareeService(get()) } single { OCUserService(get()) } single { OCServerService(get()) } - single{ OCAnonymousServerService()} + single{ OCFileService(get())} factory { OCRemoteCapabilitiesDataSource( diff --git a/owncloudData/src/main/java/com/owncloud/android/data/server/datasources/implementation/OCRemoteAnonymousDataSource.kt b/owncloudData/src/main/java/com/owncloud/android/data/server/datasources/implementation/OCRemoteAnonymousDataSource.kt index 6abf3a480bb0..15ff48594a2e 100644 --- a/owncloudData/src/main/java/com/owncloud/android/data/server/datasources/implementation/OCRemoteAnonymousDataSource.kt +++ b/owncloudData/src/main/java/com/owncloud/android/data/server/datasources/implementation/OCRemoteAnonymousDataSource.kt @@ -24,20 +24,20 @@ import com.owncloud.android.data.server.datasources.RemoteAnonymousDatasource import com.owncloud.android.domain.server.model.AuthenticationMethod import com.owncloud.android.lib.common.http.HttpConstants import com.owncloud.android.lib.common.operations.RemoteOperationResult -import com.owncloud.android.lib.resources.server.AnonymousService +import com.owncloud.android.lib.resources.server.FileService import com.owncloud.android.lib.resources.status.OwnCloudVersion class OCRemoteAnonymousDataSource( - private val anonymousService: AnonymousService + private val fileService: FileService ) : RemoteAnonymousDatasource { /* Basically, tries to access to the root folder without authorization and analyzes the response.*/ override fun getAuthenticationMethod(path: String): AuthenticationMethod { // Step 1: check whether the root folder exists, following redirections - var checkPathExistenceResult = anonymousService.checkPathExistence(path, isUserLogged = false) + var checkPathExistenceResult = fileService.checkPathExistence(path, isUserLogged = false) var redirectionLocation = checkPathExistenceResult.redirectedLocation while (!redirectionLocation.isNullOrEmpty()) { - checkPathExistenceResult = anonymousService.checkPathExistence(redirectionLocation, isUserLogged = false) + checkPathExistenceResult = fileService.checkPathExistence(redirectionLocation, isUserLogged = false) redirectionLocation = checkPathExistenceResult.redirectedLocation } @@ -55,7 +55,7 @@ class OCRemoteAnonymousDataSource( } override fun getRemoteStatus(path: String): Pair { - val remoteStatusResult = anonymousService.getRemoteStatus(path) + val remoteStatusResult = fileService.getRemoteStatus(path) val ownCloudVersion = executeRemoteOperation { remoteStatusResult diff --git a/owncloudData/src/main/java/com/owncloud/android/data/server/network/OCAnonymousServerService.kt b/owncloudData/src/main/java/com/owncloud/android/data/server/network/OCFileService.kt similarity index 78% rename from owncloudData/src/main/java/com/owncloud/android/data/server/network/OCAnonymousServerService.kt rename to owncloudData/src/main/java/com/owncloud/android/data/server/network/OCFileService.kt index 626b478741ff..48025aa47c62 100644 --- a/owncloudData/src/main/java/com/owncloud/android/data/server/network/OCAnonymousServerService.kt +++ b/owncloudData/src/main/java/com/owncloud/android/data/server/network/OCFileService.kt @@ -19,25 +19,20 @@ package com.owncloud.android.data.server.network -import android.net.Uri import com.owncloud.android.lib.common.OwnCloudClient import com.owncloud.android.lib.common.operations.RemoteOperationResult -import com.owncloud.android.lib.resources.server.AnonymousService import com.owncloud.android.lib.resources.server.CheckPathExistenceRemoteOperation +import com.owncloud.android.lib.resources.server.FileService import com.owncloud.android.lib.resources.server.GetRemoteStatusOperation import com.owncloud.android.lib.resources.status.OwnCloudVersion -class OCAnonymousServerService : AnonymousService { +class OCFileService(override val client: OwnCloudClient) : FileService { override fun checkPathExistence(path: String, isUserLogged: Boolean): RemoteOperationResult = CheckPathExistenceRemoteOperation( remotePath = path, isUserLogged = true - ).execute(createClientFromPath(path)) + ).execute(client) override fun getRemoteStatus(path: String): RemoteOperationResult = - GetRemoteStatusOperation().execute(createClientFromPath(path)) - - private fun createClientFromPath(path: String): OwnCloudClient { - return OwnCloudClient(Uri.parse(path)) - } + GetRemoteStatusOperation().execute(client) } diff --git a/owncloudData/src/test/java/com/owncloud/android/data/server/datasources/OCRemoteAnonymousDatasourceTest.kt b/owncloudData/src/test/java/com/owncloud/android/data/server/datasources/OCRemoteAnonymousDatasourceTest.kt index 5c6a9d4753c7..3f33f399b2ed 100644 --- a/owncloudData/src/test/java/com/owncloud/android/data/server/datasources/OCRemoteAnonymousDatasourceTest.kt +++ b/owncloudData/src/test/java/com/owncloud/android/data/server/datasources/OCRemoteAnonymousDatasourceTest.kt @@ -20,7 +20,7 @@ package com.owncloud.android.data.server.datasources import com.owncloud.android.data.server.datasources.implementation.OCRemoteAnonymousDataSource -import com.owncloud.android.data.server.network.OCAnonymousServerService +import com.owncloud.android.data.server.network.OCFileService import com.owncloud.android.domain.server.model.AuthenticationMethod import com.owncloud.android.lib.common.http.HttpConstants.HTTP_UNAUTHORIZED import com.owncloud.android.lib.common.operations.RemoteOperationResult @@ -40,7 +40,7 @@ import org.junit.Test class OCRemoteAnonymousDatasourceTest { private lateinit var ocRemoteAnonymousDatasource: OCRemoteAnonymousDataSource - private val ocAnonymousService: OCAnonymousServerService = mockk() + private val ocFileService: OCFileService = mockk() private val OC_OWNCLOUD_VERSION = OwnCloudVersion("10.3.2") private val basicAuthHeader = "basic realm=\"owncloud\", charset=\"utf-8\"" @@ -49,7 +49,7 @@ class OCRemoteAnonymousDatasourceTest { @Before fun init() { - ocRemoteAnonymousDatasource = OCRemoteAnonymousDataSource(ocAnonymousService) + ocRemoteAnonymousDatasource = OCRemoteAnonymousDataSource(ocFileService) } @Test @@ -70,11 +70,11 @@ class OCRemoteAnonymousDatasourceTest { ) every { - ocAnonymousService.checkPathExistence(redirectedLocation, false) + ocFileService.checkPathExistence(redirectedLocation, false) } returns checkPathExistenceResultFollowRedirectionMocked every { - ocAnonymousService.checkPathExistence(OC_ServerInfo.baseUrl, false) + ocFileService.checkPathExistence(OC_ServerInfo.baseUrl, false) } returns checkPathExistenceResultMocked val authenticationMethod = ocRemoteAnonymousDatasource.getAuthenticationMethod(redirectedLocation) @@ -82,7 +82,7 @@ class OCRemoteAnonymousDatasourceTest { assertNotNull(authenticationMethod) assertEquals(AuthenticationMethod.BASIC_HTTP_AUTH, authenticationMethod) - verify { ocAnonymousService.checkPathExistence(OC_ServerInfo.baseUrl, false) } + verify { ocFileService.checkPathExistence(OC_ServerInfo.baseUrl, false) } } @Test @@ -98,7 +98,7 @@ class OCRemoteAnonymousDatasourceTest { ) every { - ocAnonymousService.checkPathExistence(OC_ServerInfo.baseUrl, false) + ocFileService.checkPathExistence(OC_ServerInfo.baseUrl, false) } returns checkPathExistenceResultMocked val authenticationMethod = ocRemoteAnonymousDatasource.getAuthenticationMethod(OC_ServerInfo.baseUrl) @@ -106,7 +106,7 @@ class OCRemoteAnonymousDatasourceTest { assertNotNull(authenticationMethod) assertEquals(AuthenticationMethod.BASIC_HTTP_AUTH, authenticationMethod) - verify { ocAnonymousService.checkPathExistence(OC_ServerInfo.baseUrl, false) } + verify { ocFileService.checkPathExistence(OC_ServerInfo.baseUrl, false) } } @Test @@ -122,7 +122,7 @@ class OCRemoteAnonymousDatasourceTest { ) every { - ocAnonymousService.checkPathExistence(OC_ServerInfo.baseUrl, false) + ocFileService.checkPathExistence(OC_ServerInfo.baseUrl, false) } returns checkPathExistenceResultMocked val authenticationMethod = ocRemoteAnonymousDatasource.getAuthenticationMethod(OC_ServerInfo.baseUrl) @@ -130,13 +130,13 @@ class OCRemoteAnonymousDatasourceTest { assertNotNull(authenticationMethod) assertEquals(AuthenticationMethod.BEARER_TOKEN, authenticationMethod) - verify { ocAnonymousService.checkPathExistence(OC_ServerInfo.baseUrl, false) } + verify { ocFileService.checkPathExistence(OC_ServerInfo.baseUrl, false) } } @Test(expected = Exception::class) fun getAuthenticationMethodException() { every { - ocAnonymousService.checkPathExistence(OC_ServerInfo.baseUrl, false) + ocFileService.checkPathExistence(OC_ServerInfo.baseUrl, false) } throws Exception() val authenticationMethod = ocRemoteAnonymousDatasource.getAuthenticationMethod(OC_ServerInfo.baseUrl) @@ -144,7 +144,7 @@ class OCRemoteAnonymousDatasourceTest { assertNotNull(authenticationMethod) assertEquals(AuthenticationMethod.BASIC_HTTP_AUTH, authenticationMethod) - verify { ocAnonymousService.checkPathExistence(OC_ServerInfo.baseUrl, false) } + verify { ocFileService.checkPathExistence(OC_ServerInfo.baseUrl, false) } } @Test @@ -153,7 +153,7 @@ class OCRemoteAnonymousDatasourceTest { createRemoteOperationResultMock(data = OC_OWNCLOUD_VERSION, isSuccess = true, resultCode = OK_SSL) every { - ocAnonymousService.getRemoteStatus(OC_ServerInfo.baseUrl) + ocFileService.getRemoteStatus(OC_ServerInfo.baseUrl) } returns remoteStatusResultMocked val remoteStatus = ocRemoteAnonymousDatasource.getRemoteStatus(OC_ServerInfo.baseUrl) @@ -161,7 +161,7 @@ class OCRemoteAnonymousDatasourceTest { assertNotNull(remoteStatus) assertEquals(Pair(OC_OWNCLOUD_VERSION, true), remoteStatus) - verify { ocAnonymousService.getRemoteStatus(OC_ServerInfo.baseUrl) } + verify { ocFileService.getRemoteStatus(OC_ServerInfo.baseUrl) } } @Test @@ -170,7 +170,7 @@ class OCRemoteAnonymousDatasourceTest { createRemoteOperationResultMock(data = OC_OWNCLOUD_VERSION, isSuccess = true, resultCode = OK_NO_SSL) every { - ocAnonymousService.getRemoteStatus(OC_ServerInfo.baseUrl) + ocFileService.getRemoteStatus(OC_ServerInfo.baseUrl) } returns remoteStatusResultMocked val remoteStatus = ocRemoteAnonymousDatasource.getRemoteStatus(OC_ServerInfo.baseUrl) @@ -178,13 +178,13 @@ class OCRemoteAnonymousDatasourceTest { assertNotNull(remoteStatus) assertEquals(Pair(OC_OWNCLOUD_VERSION, false), remoteStatus) - verify { ocAnonymousService.getRemoteStatus(OC_ServerInfo.baseUrl) } + verify { ocFileService.getRemoteStatus(OC_ServerInfo.baseUrl) } } @Test(expected = Exception::class) fun getRemoteStatusException() { every { - ocAnonymousService.getRemoteStatus(OC_ServerInfo.baseUrl) + ocFileService.getRemoteStatus(OC_ServerInfo.baseUrl) } throws Exception() val remoteStatus = ocRemoteAnonymousDatasource.getRemoteStatus(OC_ServerInfo.baseUrl) @@ -192,6 +192,6 @@ class OCRemoteAnonymousDatasourceTest { assertNotNull(remoteStatus) assertEquals(Pair(OC_OWNCLOUD_VERSION, true), remoteStatus) - verify { ocAnonymousService.getRemoteStatus(OC_ServerInfo.baseUrl) } + verify { ocFileService.getRemoteStatus(OC_ServerInfo.baseUrl) } } }