summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-05-28 11:58:52 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2021-05-28 11:58:52 -0300
commit2c31c16266a370054cf5467bd6840d581cb98d42 (patch)
tree79827440e987ee5f6fc77066d41d7dca38c9c37c
parentd157ceec4d136bddfc44c42c8b88de3bc0a8a1e8 (diff)
parent4364cf616695a5b97d29c79762dfacd3f901791f (diff)
downloadmullvadvpn-2c31c16266a370054cf5467bd6840d581cb98d42.tar.xz
mullvadvpn-2c31c16266a370054cf5467bd6840d581cb98d42.zip
Merge branch 'fix-split-tunneling-support-for-tv-apps'
-rw-r--r--CHANGELOG.md1
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt3
-rw-r--r--android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt54
3 files changed, 48 insertions, 10 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bac1887bce..15d3b55d96 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -75,6 +75,7 @@ Line wrap the file at 100 chars. Th
isn't granted to the app. The app will now show the UI to ask for the permission and correctly
connect after it is granted.
- Fix quick-settings tile sometimes showing the wrong tunnel state.
+- Fix TV-only apps not appearing in the Split Tunneling screen.
## [2021.3] - 2021-04-28
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt
index a097ffd231..ab6315afd2 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProvider.kt
@@ -30,7 +30,8 @@ class ApplicationsProvider(
}
private fun isLaunchable(packageName: String): Boolean {
- return packageManager.getLaunchIntentForPackage(packageName) != null
+ return packageManager.getLaunchIntentForPackage(packageName) != null ||
+ packageManager.getLeanbackLaunchIntentForPackage(packageName) != null
}
private fun isSelfApplication(packageName: String): Boolean {
diff --git a/android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt b/android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt
index 689047e565..578f6b4821 100644
--- a/android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt
+++ b/android/src/test/kotlin/net/mullvad/mullvadvpn/applist/ApplicationsProviderTest.kt
@@ -28,6 +28,9 @@ class ApplicationsProviderTest {
val launchWithoutInternetPackageName = "launch_without_internet_package_name"
val nonLaunchWithInternetPackageName = "non_launch_with_internet_package_name"
val nonLaunchWithoutInternetPackageName = "non_launch_without_internet_package_name"
+ val leanbackLaunchWithInternetPackageName = "leanback_launch_with_internet_package_name"
+ val leanbackLaunchWithoutInternetPackageName =
+ "leanback_launch_without_internet_package_name"
every {
mockedPackageManager.getInstalledApplications(PackageManager.GET_META_DATA)
@@ -36,12 +39,19 @@ class ApplicationsProviderTest {
createApplicationInfo(launchWithoutInternetPackageName, launch = true),
createApplicationInfo(nonLaunchWithInternetPackageName, internet = true),
createApplicationInfo(nonLaunchWithoutInternetPackageName),
+ createApplicationInfo(
+ leanbackLaunchWithInternetPackageName,
+ leanback = true,
+ internet = true
+ ),
+ createApplicationInfo(leanbackLaunchWithoutInternetPackageName, leanback = true),
createApplicationInfo(selfPackageName, internet = true, launch = true)
)
val result = testSubject.getAppsList()
val expected = listOf(
- AppData(launchWithInternetPackageName, 0, launchWithInternetPackageName)
+ AppData(launchWithInternetPackageName, 0, launchWithInternetPackageName),
+ AppData(leanbackLaunchWithInternetPackageName, 0, leanbackLaunchWithInternetPackageName)
)
assertLists(expected, result)
@@ -49,21 +59,40 @@ class ApplicationsProviderTest {
verifyAll {
mockedPackageManager.getInstalledApplications(PackageManager.GET_META_DATA)
- mockedPackageManager.checkPermission(internet, launchWithInternetPackageName)
- mockedPackageManager.checkPermission(internet, launchWithoutInternetPackageName)
- mockedPackageManager.checkPermission(internet, nonLaunchWithInternetPackageName)
- mockedPackageManager.checkPermission(internet, nonLaunchWithoutInternetPackageName)
- mockedPackageManager.checkPermission(internet, selfPackageName)
+ listOf(
+ launchWithInternetPackageName,
+ launchWithoutInternetPackageName,
+ nonLaunchWithInternetPackageName,
+ nonLaunchWithoutInternetPackageName,
+ leanbackLaunchWithInternetPackageName,
+ leanbackLaunchWithoutInternetPackageName,
+ selfPackageName
+ ).forEach { packageName ->
+ mockedPackageManager.checkPermission(internet, packageName)
+ }
- mockedPackageManager.getLaunchIntentForPackage(launchWithInternetPackageName)
- mockedPackageManager.getLaunchIntentForPackage(nonLaunchWithInternetPackageName)
- mockedPackageManager.getLaunchIntentForPackage(selfPackageName)
+ listOf(
+ launchWithInternetPackageName,
+ nonLaunchWithInternetPackageName,
+ leanbackLaunchWithInternetPackageName,
+ selfPackageName
+ ).forEach { packageName ->
+ mockedPackageManager.getLaunchIntentForPackage(packageName)
+ }
+
+ listOf(
+ nonLaunchWithInternetPackageName,
+ leanbackLaunchWithInternetPackageName,
+ ).forEach { packageName ->
+ mockedPackageManager.getLeanbackLaunchIntentForPackage(packageName)
+ }
}
}
private fun createApplicationInfo(
packageName: String,
launch: Boolean = false,
+ leanback: Boolean = false,
internet: Boolean = false
): ApplicationInfo {
val mockApplicationInfo = mockk<ApplicationInfo>()
@@ -81,6 +110,13 @@ class ApplicationsProviderTest {
null
every {
+ mockedPackageManager.getLeanbackLaunchIntentForPackage(packageName)
+ } returns if (leanback)
+ mockk()
+ else
+ null
+
+ every {
mockedPackageManager.checkPermission(Manifest.permission.INTERNET, packageName)
} returns if (internet)
PackageManager.PERMISSION_GRANTED