diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingScreen.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingScreen.kt index 935d176903..af6f782d83 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingScreen.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingScreen.kt @@ -1,9 +1,6 @@ package com.bitwarden.authenticator.ui.authenticator.feature.itemlisting import android.Manifest -import android.content.Intent -import android.net.Uri -import android.provider.Settings import android.widget.Toast import androidx.compose.foundation.Image 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.permissions.PermissionsManager 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.components.util.rememberVectorPainter import com.bitwarden.ui.platform.feature.settings.appearance.model.AppTheme @@ -139,10 +138,7 @@ fun ItemListingScreen( is ItemListingEvent.NavigateToEditItem -> onNavigateToEditItemScreen(event.id) is ItemListingEvent.NavigateToAppSettings -> { - val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS) - intent.data = Uri.parse("package:" + context.packageName) - - intentManager.startActivity(intent = intent) + intentManager.startAuthenticatorAppSettings(context) } ItemListingEvent.NavigateToBitwardenListing -> { @@ -156,7 +152,7 @@ fun ItemListingScreen( } ItemListingEvent.NavigateToBitwardenSettings -> { - intentManager.startMainBitwardenAppAccountSettings() + intentManager.startBitwardenAccountSettings() } is ItemListingEvent.ShowFirstTimeSyncSnackbar -> { diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/manager/intent/IntentManager.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/manager/intent/IntentManager.kt index 7c0a724a0f..3acdb947ec 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/manager/intent/IntentManager.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/manager/intent/IntentManager.kt @@ -19,16 +19,6 @@ interface IntentManager { */ 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. */ diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/manager/intent/IntentManagerImpl.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/manager/intent/IntentManagerImpl.kt index 021aaf7aa7..94019196fc 100644 --- a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/manager/intent/IntentManagerImpl.kt +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/manager/intent/IntentManagerImpl.kt @@ -6,7 +6,6 @@ import android.content.Context import android.content.Intent import android.net.Uri import android.provider.MediaStore -import android.provider.Settings import android.webkit.MimeTypeMap import androidx.activity.compose.ManagedActivityResultLauncher import androidx.activity.compose.rememberLauncherForActivityResult @@ -14,7 +13,6 @@ import androidx.activity.result.ActivityResult import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.runtime.Composable import androidx.core.content.ContextCompat -import androidx.core.net.toUri import com.bitwarden.annotation.OmitFromCoverage import com.bitwarden.ui.platform.model.FileData import com.bitwarden.ui.platform.resource.BitwardenString @@ -30,7 +28,7 @@ class IntentManagerImpl( override fun startActivity(intent: Intent) { try { context.startActivity(intent) - } catch (e: ActivityNotFoundException) { + } catch (_: ActivityNotFoundException) { // no-op } } @@ -75,12 +73,6 @@ class IntentManagerImpl( 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) { val newUri = if (uri.scheme == null) { uri.buildUpon().scheme("https").build() @@ -90,17 +82,6 @@ class IntentManagerImpl( 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? = context .contentResolver diff --git a/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/util/IntentManagerUtils.kt b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/util/IntentManagerUtils.kt new file mode 100644 index 0000000000..a5bd53c268 --- /dev/null +++ b/authenticator/src/main/kotlin/com/bitwarden/authenticator/ui/platform/util/IntentManagerUtils.kt @@ -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) + }, + ) +} diff --git a/authenticator/src/test/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingScreenTest.kt b/authenticator/src/test/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingScreenTest.kt index 4b7edf173f..a1188f5efe 100644 --- a/authenticator/src/test/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingScreenTest.kt +++ b/authenticator/src/test/kotlin/com/bitwarden/authenticator/ui/authenticator/feature/itemlisting/ItemListingScreenTest.kt @@ -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.manager.intent.IntentManager 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.ui.platform.feature.settings.appearance.model.AppTheme import com.bitwarden.ui.util.asText @@ -23,6 +24,7 @@ import com.bitwarden.ui.util.onNodeWithTextAfterScroll import io.mockk.every import io.mockk.just import io.mockk.mockk +import io.mockk.mockkStatic import io.mockk.runs import io.mockk.verify import kotlinx.coroutines.flow.MutableStateFlow @@ -181,9 +183,11 @@ class ItemListingScreenTest : AuthenticatorComposeTest() { @Test @Suppress("MaxLineLength") fun `on NavigateToBitwardenSettings receive should launch bitwarden account security deep link`() { - every { intentManager.startMainBitwardenAppAccountSettings() } just runs - mutableEventFlow.tryEmit(ItemListingEvent.NavigateToBitwardenSettings) - verify { intentManager.startMainBitwardenAppAccountSettings() } + mockkStatic(IntentManager::startBitwardenAccountSettings) { + every { intentManager.startBitwardenAccountSettings() } just runs + mutableEventFlow.tryEmit(ItemListingEvent.NavigateToBitwardenSettings) + verify { intentManager.startBitwardenAccountSettings() } + } } @Test