mirror of
https://github.com/bitwarden/android.git
synced 2025-12-11 04:39:19 -06:00
[PM-24411] Extract Authenticator functions from IntentManager (#5702)
This commit is contained in:
parent
b9cc664efa
commit
b0b4379307
@ -1,9 +1,6 @@
|
|||||||
package com.bitwarden.authenticator.ui.authenticator.feature.itemlisting
|
package com.bitwarden.authenticator.ui.authenticator.feature.itemlisting
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
import android.content.Intent
|
|
||||||
import android.net.Uri
|
|
||||||
import android.provider.Settings
|
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
import androidx.compose.foundation.Image
|
import androidx.compose.foundation.Image
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
@ -83,6 +80,8 @@ import com.bitwarden.authenticator.ui.platform.composition.LocalPermissionsManag
|
|||||||
import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager
|
import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager
|
||||||
import com.bitwarden.authenticator.ui.platform.manager.permissions.PermissionsManager
|
import com.bitwarden.authenticator.ui.platform.manager.permissions.PermissionsManager
|
||||||
import com.bitwarden.authenticator.ui.platform.theme.Typography
|
import com.bitwarden.authenticator.ui.platform.theme.Typography
|
||||||
|
import com.bitwarden.authenticator.ui.platform.util.startAuthenticatorAppSettings
|
||||||
|
import com.bitwarden.authenticator.ui.platform.util.startBitwardenAccountSettings
|
||||||
import com.bitwarden.ui.platform.base.util.EventsEffect
|
import com.bitwarden.ui.platform.base.util.EventsEffect
|
||||||
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
import com.bitwarden.ui.platform.components.util.rememberVectorPainter
|
||||||
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
|
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
|
||||||
@ -139,10 +138,7 @@ fun ItemListingScreen(
|
|||||||
|
|
||||||
is ItemListingEvent.NavigateToEditItem -> onNavigateToEditItemScreen(event.id)
|
is ItemListingEvent.NavigateToEditItem -> onNavigateToEditItemScreen(event.id)
|
||||||
is ItemListingEvent.NavigateToAppSettings -> {
|
is ItemListingEvent.NavigateToAppSettings -> {
|
||||||
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
intentManager.startAuthenticatorAppSettings(context)
|
||||||
intent.data = Uri.parse("package:" + context.packageName)
|
|
||||||
|
|
||||||
intentManager.startActivity(intent = intent)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ItemListingEvent.NavigateToBitwardenListing -> {
|
ItemListingEvent.NavigateToBitwardenListing -> {
|
||||||
@ -156,7 +152,7 @@ fun ItemListingScreen(
|
|||||||
}
|
}
|
||||||
|
|
||||||
ItemListingEvent.NavigateToBitwardenSettings -> {
|
ItemListingEvent.NavigateToBitwardenSettings -> {
|
||||||
intentManager.startMainBitwardenAppAccountSettings()
|
intentManager.startBitwardenAccountSettings()
|
||||||
}
|
}
|
||||||
|
|
||||||
is ItemListingEvent.ShowFirstTimeSyncSnackbar -> {
|
is ItemListingEvent.ShowFirstTimeSyncSnackbar -> {
|
||||||
|
|||||||
@ -19,16 +19,6 @@ interface IntentManager {
|
|||||||
*/
|
*/
|
||||||
fun startActivity(intent: Intent)
|
fun startActivity(intent: Intent)
|
||||||
|
|
||||||
/**
|
|
||||||
* Start the main Bitwarden app with scheme that routes to the account security screen.
|
|
||||||
*/
|
|
||||||
fun startMainBitwardenAppAccountSettings()
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Starts the application's settings activity.
|
|
||||||
*/
|
|
||||||
fun startApplicationDetailsSettingsActivity()
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start an activity to view the given [uri] in an external browser.
|
* Start an activity to view the given [uri] in an external browser.
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -6,7 +6,6 @@ import android.content.Context
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import android.provider.Settings
|
|
||||||
import android.webkit.MimeTypeMap
|
import android.webkit.MimeTypeMap
|
||||||
import androidx.activity.compose.ManagedActivityResultLauncher
|
import androidx.activity.compose.ManagedActivityResultLauncher
|
||||||
import androidx.activity.compose.rememberLauncherForActivityResult
|
import androidx.activity.compose.rememberLauncherForActivityResult
|
||||||
@ -14,7 +13,6 @@ import androidx.activity.result.ActivityResult
|
|||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import androidx.core.net.toUri
|
|
||||||
import com.bitwarden.annotation.OmitFromCoverage
|
import com.bitwarden.annotation.OmitFromCoverage
|
||||||
import com.bitwarden.ui.platform.model.FileData
|
import com.bitwarden.ui.platform.model.FileData
|
||||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||||
@ -30,7 +28,7 @@ class IntentManagerImpl(
|
|||||||
override fun startActivity(intent: Intent) {
|
override fun startActivity(intent: Intent) {
|
||||||
try {
|
try {
|
||||||
context.startActivity(intent)
|
context.startActivity(intent)
|
||||||
} catch (e: ActivityNotFoundException) {
|
} catch (_: ActivityNotFoundException) {
|
||||||
// no-op
|
// no-op
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -75,12 +73,6 @@ class IntentManagerImpl(
|
|||||||
putExtra(Intent.EXTRA_TITLE, fileName)
|
putExtra(Intent.EXTRA_TITLE, fileName)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun startApplicationDetailsSettingsActivity() {
|
|
||||||
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
|
||||||
intent.data = "package:$context.packageName".toUri()
|
|
||||||
startActivity(intent = intent)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun launchUri(uri: Uri) {
|
override fun launchUri(uri: Uri) {
|
||||||
val newUri = if (uri.scheme == null) {
|
val newUri = if (uri.scheme == null) {
|
||||||
uri.buildUpon().scheme("https").build()
|
uri.buildUpon().scheme("https").build()
|
||||||
@ -90,17 +82,6 @@ class IntentManagerImpl(
|
|||||||
startActivity(Intent(Intent.ACTION_VIEW, newUri))
|
startActivity(Intent(Intent.ACTION_VIEW, newUri))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun startMainBitwardenAppAccountSettings() {
|
|
||||||
startActivity(
|
|
||||||
Intent(
|
|
||||||
Intent.ACTION_VIEW,
|
|
||||||
"bitwarden://settings/account_security".toUri(),
|
|
||||||
).apply {
|
|
||||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun getLocalFileData(uri: Uri): FileData? =
|
private fun getLocalFileData(uri: Uri): FileData? =
|
||||||
context
|
context
|
||||||
.contentResolver
|
.contentResolver
|
||||||
|
|||||||
@ -0,0 +1,34 @@
|
|||||||
|
@file:OmitFromCoverage
|
||||||
|
|
||||||
|
package com.bitwarden.authenticator.ui.platform.util
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.provider.Settings
|
||||||
|
import androidx.core.net.toUri
|
||||||
|
import com.bitwarden.annotation.OmitFromCoverage
|
||||||
|
import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Launches the authenticator app settings.
|
||||||
|
*/
|
||||||
|
fun IntentManager.startAuthenticatorAppSettings(context: Context) {
|
||||||
|
startActivity(
|
||||||
|
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS)
|
||||||
|
.setData("package:${context.packageName}".toUri()),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Launches the Bitwarden account settings.
|
||||||
|
*/
|
||||||
|
fun IntentManager.startBitwardenAccountSettings() {
|
||||||
|
startActivity(
|
||||||
|
Intent(
|
||||||
|
Intent.ACTION_VIEW,
|
||||||
|
"bitwarden://settings/account_security".toUri(),
|
||||||
|
).apply {
|
||||||
|
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
@ -15,6 +15,7 @@ import com.bitwarden.authenticator.ui.authenticator.feature.model.VerificationCo
|
|||||||
import com.bitwarden.authenticator.ui.platform.base.AuthenticatorComposeTest
|
import com.bitwarden.authenticator.ui.platform.base.AuthenticatorComposeTest
|
||||||
import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager
|
import com.bitwarden.authenticator.ui.platform.manager.intent.IntentManager
|
||||||
import com.bitwarden.authenticator.ui.platform.manager.permissions.FakePermissionManager
|
import com.bitwarden.authenticator.ui.platform.manager.permissions.FakePermissionManager
|
||||||
|
import com.bitwarden.authenticator.ui.platform.util.startBitwardenAccountSettings
|
||||||
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
|
import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow
|
||||||
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
|
import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme
|
||||||
import com.bitwarden.ui.util.asText
|
import com.bitwarden.ui.util.asText
|
||||||
@ -23,6 +24,7 @@ import com.bitwarden.ui.util.onNodeWithTextAfterScroll
|
|||||||
import io.mockk.every
|
import io.mockk.every
|
||||||
import io.mockk.just
|
import io.mockk.just
|
||||||
import io.mockk.mockk
|
import io.mockk.mockk
|
||||||
|
import io.mockk.mockkStatic
|
||||||
import io.mockk.runs
|
import io.mockk.runs
|
||||||
import io.mockk.verify
|
import io.mockk.verify
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
@ -181,9 +183,11 @@ class ItemListingScreenTest : AuthenticatorComposeTest() {
|
|||||||
@Test
|
@Test
|
||||||
@Suppress("MaxLineLength")
|
@Suppress("MaxLineLength")
|
||||||
fun `on NavigateToBitwardenSettings receive should launch bitwarden account security deep link`() {
|
fun `on NavigateToBitwardenSettings receive should launch bitwarden account security deep link`() {
|
||||||
every { intentManager.startMainBitwardenAppAccountSettings() } just runs
|
mockkStatic(IntentManager::startBitwardenAccountSettings) {
|
||||||
mutableEventFlow.tryEmit(ItemListingEvent.NavigateToBitwardenSettings)
|
every { intentManager.startBitwardenAccountSettings() } just runs
|
||||||
verify { intentManager.startMainBitwardenAppAccountSettings() }
|
mutableEventFlow.tryEmit(ItemListingEvent.NavigateToBitwardenSettings)
|
||||||
|
verify { intentManager.startBitwardenAccountSettings() }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user