diff options
| author | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-01-19 15:40:38 +0100 |
|---|---|---|
| committer | Jonatan Rhodin <jonatan.rhodin@mullvad.net> | 2024-01-23 21:57:00 +0100 |
| commit | ca4d52d8681be7b567ca2ab051e11ffd6df24f95 (patch) | |
| tree | 0f49668e0707d8e8f81bccf11f8d7ff8dbc59014 /android | |
| parent | e0307dd96d1233816029b809ffecd8c0976b81ec (diff) | |
| download | mullvadvpn-ca4d52d8681be7b567ca2ab051e11ffd6df24f95.tar.xz mullvadvpn-ca4d52d8681be7b567ca2ab051e11ffd6df24f95.zip | |
Handle exceptions when getting app icon in SplitTunnelingScreen
Diffstat (limited to 'android')
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SplitTunnelingScreen.kt | 4 | ||||
| -rw-r--r-- | android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt | 18 |
2 files changed, 20 insertions, 2 deletions
diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SplitTunnelingScreen.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SplitTunnelingScreen.kt index 3396739491..5164fe0a3d 100644 --- a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SplitTunnelingScreen.kt +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/compose/screen/SplitTunnelingScreen.kt @@ -23,7 +23,6 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview -import androidx.core.graphics.drawable.toBitmapOrNull import com.ramcosta.composedestinations.annotation.Destination import com.ramcosta.composedestinations.navigation.DestinationsNavigator import net.mullvad.mullvadvpn.R @@ -42,6 +41,7 @@ import net.mullvad.mullvadvpn.compose.state.SplitTunnelingUiState import net.mullvad.mullvadvpn.compose.transitions.SlideInFromRightTransition import net.mullvad.mullvadvpn.lib.theme.AppTheme import net.mullvad.mullvadvpn.lib.theme.Dimens +import net.mullvad.mullvadvpn.util.getApplicationIconBitmapOrNull import net.mullvad.mullvadvpn.viewmodel.SplitTunnelingViewModel import org.koin.androidx.compose.koinViewModel @@ -93,7 +93,7 @@ fun SplitTunneling(navigator: DestinationsNavigator) { onIncludeAppClick = viewModel::onIncludeAppClick, onBackClick = navigator::navigateUp, onResolveIcon = { packageName -> - packageManager.getApplicationIcon(packageName).toBitmapOrNull() + packageManager.getApplicationIconBitmapOrNull(packageName) } ) } diff --git a/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt new file mode 100644 index 0000000000..ea8ce1f4e1 --- /dev/null +++ b/android/app/src/main/kotlin/net/mullvad/mullvadvpn/util/PackageManagerExtensions.kt @@ -0,0 +1,18 @@ +package net.mullvad.mullvadvpn.util + +import android.content.pm.PackageManager +import android.graphics.Bitmap +import androidx.core.graphics.drawable.toBitmapOrNull + +fun PackageManager.getApplicationIconBitmapOrNull(packageName: String): Bitmap? = + try { + getApplicationIcon(packageName).toBitmapOrNull() + } catch (e: Exception) { + // Name not found is thrown if the application is not installed + // IllegalArgumentException is thrown if the application has an invalid icon + when (e) { + is PackageManager.NameNotFoundException, + is IllegalArgumentException -> null + else -> throw e + } + } |
