Skip to content

Commit

Permalink
feat(qr): support qr code sharing for connection requests and profile…
Browse files Browse the repository at this point in the history
…s - epic (WPB-10535) (#3342)
  • Loading branch information
yamilmedina authored Aug 26, 2024
1 parent fce45ea commit ef29e32
Show file tree
Hide file tree
Showing 15 changed files with 761 additions and 70 deletions.
1 change: 1 addition & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@ dependencies {

implementation(libs.aboutLibraries.core)
implementation(libs.aboutLibraries.ui)
implementation(libs.compose.qr.code)

// Unit/Android tests dependencies
testImplementation(libs.androidx.test.archCore)
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,10 @@
android:host="conversation"
android:scheme="wire" />

<data
android:host="user"
android:scheme="wire" />

<data
android:host="other-user-profile"
android:scheme="wire" />
Expand Down
24 changes: 22 additions & 2 deletions app/src/main/kotlin/com/wire/android/ui/WireActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ package com.wire.android.ui
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.os.Build
import android.os.Bundle
import android.view.WindowManager
import android.widget.Toast
Expand Down Expand Up @@ -64,8 +65,8 @@ import com.wire.android.navigation.MainNavHost
import com.wire.android.navigation.Navigator
import com.wire.android.navigation.rememberNavigator
import com.wire.android.ui.calling.getIncomingCallIntent
import com.wire.android.ui.calling.ongoing.getOngoingCallIntent
import com.wire.android.ui.calling.getOutgoingCallIntent
import com.wire.android.ui.calling.ongoing.getOngoingCallIntent
import com.wire.android.ui.common.snackbar.LocalSnackbarHostState
import com.wire.android.ui.common.topappbar.CommonTopAppBar
import com.wire.android.ui.common.topappbar.CommonTopAppBarViewModel
Expand Down Expand Up @@ -513,17 +514,26 @@ class WireActivity : AppCompatActivity() {

override fun onSaveInstanceState(outState: Bundle) {
outState.putBoolean(HANDLED_DEEPLINK_FLAG, true)
outState.putParcelable(ORIGINAL_SAVED_INTENT_FLAG, intent)
super.onSaveInstanceState(outState)
}

override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
savedInstanceState.getOriginalIntent()?.let {
this.intent = it
}
}

@Suppress("ComplexCondition")
private fun handleDeepLink(
intent: Intent?,
savedInstanceState: Bundle? = null
) {
val originalIntent = savedInstanceState.getOriginalIntent()
if (intent == null
|| intent.flags and Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY != 0
|| savedInstanceState?.getBoolean(HANDLED_DEEPLINK_FLAG, false) == true
|| originalIntent == intent // This is the case when the activity is recreated and already handled
|| intent.getBooleanExtra(HANDLED_DEEPLINK_FLAG, false)
) {
return
Expand Down Expand Up @@ -560,6 +570,15 @@ class WireActivity : AppCompatActivity() {
}
}

private fun Bundle?.getOriginalIntent(): Intent? {
return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
@Suppress("DEPRECATION") // API 33
this?.getParcelable(ORIGINAL_SAVED_INTENT_FLAG)
} else {
this?.getParcelable(ORIGINAL_SAVED_INTENT_FLAG, Intent::class.java)
}
}

private fun handleDeepLinkResult(result: DeepLinkResult) {
val navigate: (NavigationCommand) -> Unit = { lifecycleScope.launch { navigationCommands.emit(it) } }
when (result) {
Expand Down Expand Up @@ -597,6 +616,7 @@ class WireActivity : AppCompatActivity() {

companion object {
private const val HANDLED_DEEPLINK_FLAG = "deeplink_handled_flag_key"
private const val ORIGINAL_SAVED_INTENT_FLAG = "original_saved_intent"
private const val TAG = "WireActivity"
}
}
Expand Down
Loading

0 comments on commit ef29e32

Please sign in to comment.