diff options
| author | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-05-28 11:58:52 -0300 |
|---|---|---|
| committer | Janito Vaqueiro Ferreira Filho <janito@mullvad.net> | 2021-05-28 11:58:52 -0300 |
| commit | 2c31c16266a370054cf5467bd6840d581cb98d42 (patch) | |
| tree | 79827440e987ee5f6fc77066d41d7dca38c9c37c | |
| parent | d157ceec4d136bddfc44c42c8b88de3bc0a8a1e8 (diff) | |
| parent | 4364cf616695a5b97d29c79762dfacd3f901791f (diff) | |
| download | mullvadvpn-2c31c16266a370054cf5467bd6840d581cb98d42.tar.xz mullvadvpn-2c31c16266a370054cf5467bd6840d581cb98d42.zip | |
Merge branch 'fix-split-tunneling-support-for-tv-apps'
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 |
