Skip to content

Commit

Permalink
feat(AdBottomsheet): Reopen deeplink after connection when user wants…
Browse files Browse the repository at this point in the history
… to execute actions
  • Loading branch information
FabianDevel committed Oct 1, 2024
1 parent 51b4726 commit c5bc274
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 8 deletions.
28 changes: 22 additions & 6 deletions app/src/main/java/com/infomaniak/drive/ui/login/LoginActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
import androidx.core.net.toUri
import androidx.core.view.isInvisible
import androidx.lifecycle.lifecycleScope
import androidx.viewpager2.widget.ViewPager2
Expand All @@ -38,6 +39,7 @@ import com.infomaniak.drive.data.cache.DriveInfosController
import com.infomaniak.drive.data.documentprovider.CloudStorageProvider
import com.infomaniak.drive.data.models.drive.DriveInfo
import com.infomaniak.drive.databinding.ActivityLoginBinding
import com.infomaniak.drive.ui.LaunchActivity
import com.infomaniak.drive.ui.MainActivity
import com.infomaniak.drive.utils.AccountUtils
import com.infomaniak.drive.utils.getInfomaniakLogin
Expand All @@ -54,8 +56,8 @@ import com.infomaniak.lib.core.utils.Utils.lockOrientationForSmallScreens
import com.infomaniak.lib.login.ApiToken
import com.infomaniak.lib.login.InfomaniakLogin
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.invoke
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

class LoginActivity : AppCompatActivity() {

Expand Down Expand Up @@ -169,19 +171,25 @@ class LoginActivity : AppCompatActivity() {
lifecycleScope.launch(Dispatchers.IO) {
when (val returnValue = authenticateUser(this@LoginActivity, apiToken)) {
is User -> {
trackUserId(AccountUtils.currentUserId)
trackAccountEvent("loggedIn")
launchMainActivity()
val deeplink = navigationArgs?.publicShareDeeplink
if (deeplink.isNullOrBlank()) {
trackUserId(AccountUtils.currentUserId)
trackAccountEvent("loggedIn")
launchMainActivity()
} else {
launchDeeplinkAndFinish(deeplink)
}

return@launch
}
is ApiResponse<*> -> withContext(Dispatchers.Main) {
is ApiResponse<*> -> Dispatchers.Main {
if (returnValue.error?.code == ErrorCode.NO_DRIVE) {
launchNoDriveActivity()
} else {
showError(getString(returnValue.translatedError))
}
}
else -> withContext(Dispatchers.Main) { showError(getString(R.string.anErrorHasOccurred)) }
else -> Dispatchers.Main { showError(getString(R.string.anErrorHasOccurred)) }
}

infomaniakLogin.deleteToken(
Expand All @@ -199,6 +207,14 @@ class LoginActivity : AppCompatActivity() {
if (!connectButton.isEnabled) connectButton.isEnabled = true
}

private fun launchDeeplinkAndFinish(deeplink: String) {
Intent(this@LoginActivity, LaunchActivity::class.java).apply {
setData(deeplink.toUri())
clearStack()
}.also(::startActivity)
finishAffinity()
}

private fun launchMainActivity() {
startActivity(Intent(this, MainActivity::class.java).clearStack())
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.activityViewModels
import androidx.navigation.fragment.findNavController
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.infomaniak.drive.databinding.FragmentBottomSheetObtainKdriveAdBinding
Expand All @@ -32,6 +33,7 @@ import com.infomaniak.lib.core.utils.safeBinding
class ObtainKDriveAdBottomSheetDialog : BottomSheetDialogFragment() {

private var binding: FragmentBottomSheetObtainKdriveAdBinding by safeBinding()
private val publicShareViewModel: PublicShareViewModel by activityViewModels()

override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
return FragmentBottomSheetObtainKdriveAdBinding.inflate(inflater, container, false).also { binding = it }.root
Expand All @@ -44,9 +46,14 @@ class ObtainKDriveAdBottomSheetDialog : BottomSheetDialogFragment() {
binding.alreadyGotAnAccountButton.setOnClickListener { openLoginActivity(shouldLaunchAccountCreation = false) }
}

private fun openLoginActivity(shouldLaunchAccountCreation: Boolean) {
private fun openLoginActivity(shouldLaunchAccountCreation: Boolean) = with(publicShareViewModel) {
Intent(requireActivity(), LoginActivity::class.java).apply {
putExtras(LoginActivityArgs(shouldLaunchAccountCreation = shouldLaunchAccountCreation).toBundle())
putExtras(
LoginActivityArgs(
shouldLaunchAccountCreation = shouldLaunchAccountCreation,
publicShareDeeplink = "https://kdrive.infomaniak.com/app/share/$driveId/$publicShareUuid",
).toBundle()
)
}.also(::startActivity)
findNavController().popBackStack()
}
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/res/navigation/main_navigation.xml
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,10 @@
android:name="shouldLaunchAccountCreation"
android:defaultValue="false"
app:argType="boolean" />
<argument
android:name="publicShareDeeplink"
android:defaultValue=""
app:argType="string" />
</activity>

<dialog
Expand Down

0 comments on commit c5bc274

Please sign in to comment.