diff --git a/build.gradle b/build.gradle index ec15ebc22..06b97f395 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ allprojects { ext { androidApplicationId = 'org.cryptomator' androidVersionCode = getVersionCode() - androidVersionName = '1.6.1' + androidVersionName = '1.6.2' } repositories { mavenCentral() diff --git a/fastlane/metadata/android/de-DE/changelogs/default.txt b/fastlane/metadata/android/de-DE/changelogs/default.txt index 74b767a73..6f60085e1 100644 --- a/fastlane/metadata/android/de-DE/changelogs/default.txt +++ b/fastlane/metadata/android/de-DE/changelogs/default.txt @@ -1 +1 @@ -- Kompatibilität zu Tresor-Format 8 verbessert \ No newline at end of file +- Fixed add pCloud connection on some devices \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/default.txt b/fastlane/metadata/android/en-US/changelogs/default.txt index 532ed6a88..f686002aa 100644 --- a/fastlane/metadata/android/en-US/changelogs/default.txt +++ b/fastlane/metadata/android/en-US/changelogs/default.txt @@ -1 +1 @@ -- Enhanced compatibility to vault format 8 \ No newline at end of file +- pCloud-Verbindung können wieder auf allen Geräten hinzugefügt werden \ No newline at end of file diff --git a/fastlane/release-notes.html b/fastlane/release-notes.html index 700252e58..0761a6a16 100644 --- a/fastlane/release-notes.html +++ b/fastlane/release-notes.html @@ -1,3 +1,3 @@ \ No newline at end of file diff --git a/presentation/src/main/java/org/cryptomator/presentation/ui/activity/AuthenticatePCloudActivity.kt b/presentation/src/main/java/org/cryptomator/presentation/ui/activity/AuthenticatePCloudActivity.kt index 0ec795142..59b610eeb 100644 --- a/presentation/src/main/java/org/cryptomator/presentation/ui/activity/AuthenticatePCloudActivity.kt +++ b/presentation/src/main/java/org/cryptomator/presentation/ui/activity/AuthenticatePCloudActivity.kt @@ -2,6 +2,7 @@ package org.cryptomator.presentation.ui.activity import android.content.Intent import android.net.Uri +import android.os.Handler import android.widget.Toast import org.cryptomator.generator.Activity import org.cryptomator.presentation.BuildConfig @@ -13,6 +14,12 @@ import timber.log.Timber @Activity class AuthenticatePCloudActivity : BaseActivity() { + private val startAuthenticationRequestCode = 1232 + private val redirectTimeoutAfterAuthenticationAndResumed = 1000L + + private var cancelAuthenticationHandler: Handler = Handler() + private var oAuthResultReceived = false + override fun setupView() { val uri = Uri.parse("https://my.pcloud.com/oauth2/authorize") .buildUpon() @@ -21,18 +28,27 @@ class AuthenticatePCloudActivity : BaseActivity() { .appendQueryParameter("redirect_uri", "pcloudoauth://redirect") .build() - startActivityForResult(Intent(Intent.ACTION_VIEW, uri), 25) + startActivityForResult(Intent(Intent.ACTION_VIEW, uri), startAuthenticationRequestCode) } override fun onActivityResult(requestCode: Int, resultCode: Int, intent: Intent?) { super.onActivityResult(requestCode, resultCode, intent) - finish() + if (requestCode == startAuthenticationRequestCode) { + cancelAuthenticationHandler.postDelayed({ + if (!oAuthResultReceived) { + Timber.tag("AuthenticatePCloudActivity").i("Authentication canceled or no redirect received after resuming Cryptomator since 1.5s") + Toast.makeText(context(), R.string.error_authentication_failed, Toast.LENGTH_SHORT).show() + finish() + } + }, redirectTimeoutAfterAuthenticationAndResumed) + } } override fun onNewIntent(intent: Intent) { super.onNewIntent(intent) intent.data?.let { - if(it.host == "redirect" && it.scheme == "pcloudoauth") { + if (it.host == "redirect" && it.scheme == "pcloudoauth") { + oAuthResultReceived = true val parameters = parseUrlFragmentParameters(it) val accessToken = parameters["access_token"] val hostname = parameters["hostname"] @@ -41,10 +57,11 @@ class AuthenticatePCloudActivity : BaseActivity() { result.putExtra(CloudConnectionListPresenter.PCLOUD_OAUTH_AUTH_CODE, accessToken) result.putExtra(CloudConnectionListPresenter.PCLOUD_HOSTNAME, hostname) setResult(android.app.Activity.RESULT_OK, result) - finish() } else { Toast.makeText(this, R.string.error_authentication_failed, Toast.LENGTH_LONG).show() + Timber.tag("AuthenticatePCloudActivity").i("Authentication failed as the access token or hostname is null") } + finish() } else { Timber.tag("AuthenticatePCloudActivity").e("Tried to call activity using a different redirect scheme") } @@ -63,4 +80,9 @@ class AuthenticatePCloudActivity : BaseActivity() { } return emptyMap() } + + override fun onDestroy() { + super.onDestroy() + cancelAuthenticationHandler.removeCallbacksAndMessages(null) + } }