Skip to content

Commit 9a6393c

Browse files
committed
VPN always on setting
1 parent 8534d27 commit 9a6393c

File tree

7 files changed

+54
-45
lines changed

7 files changed

+54
-45
lines changed

app-tracking-protection/vpn-impl/src/main/java/com/duckduckgo/mobile/android/vpn/ui/onboarding/VpnOnboardingActivity.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@ package com.duckduckgo.mobile.android.vpn.ui.onboarding
1919
import android.annotation.SuppressLint
2020
import android.content.Intent
2121
import android.net.VpnService
22-
import android.os.Build
2322
import android.os.Bundle
24-
import android.provider.Settings
2523
import androidx.lifecycle.Lifecycle
2624
import androidx.lifecycle.flowWithLifecycle
2725
import androidx.lifecycle.lifecycleScope
@@ -30,6 +28,7 @@ import com.duckduckgo.anvil.annotations.ContributeToActivityStarter
3028
import com.duckduckgo.anvil.annotations.InjectWith
3129
import com.duckduckgo.app.global.DispatcherProvider
3230
import com.duckduckgo.app.global.DuckDuckGoActivity
31+
import com.duckduckgo.app.global.extensions.launchAlwaysOnSystemSettings
3332
import com.duckduckgo.appbuildconfig.api.AppBuildConfig
3433
import com.duckduckgo.browser.api.ui.WebViewActivityWithParams
3534
import com.duckduckgo.di.scopes.ActivityScope
@@ -289,13 +288,7 @@ class VpnOnboardingActivity : DuckDuckGoActivity() {
289288
fun onVpnConflictDialogGoToSettings() {
290289
deviceShieldPixels.didChooseToOpenSettingsFromVpnConflictDialog()
291290

292-
val intent = if (appBuildConfig.sdkInt >= Build.VERSION_CODES.N) {
293-
Intent(Settings.ACTION_VPN_SETTINGS)
294-
} else {
295-
Intent("android.net.vpn.SETTINGS")
296-
}
297-
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
298-
startActivity(intent)
291+
this.launchAlwaysOnSystemSettings(appBuildConfig.sdkInt)
299292
}
300293

301294
fun onVpnConflictDialogContinue() {

app-tracking-protection/vpn-impl/src/main/java/com/duckduckgo/mobile/android/vpn/ui/tracker_activity/DeviceShieldTrackerActivity.kt

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,8 @@ import android.annotation.SuppressLint
2020
import android.content.Context
2121
import android.content.Intent
2222
import android.net.VpnService
23-
import android.os.Build
2423
import android.os.Bundle
2524
import android.os.ResultReceiver
26-
import android.provider.Settings
2725
import android.view.Menu
2826
import android.widget.CompoundButton
2927
import androidx.activity.result.ActivityResultLauncher
@@ -35,6 +33,7 @@ import com.duckduckgo.anvil.annotations.ContributeToActivityStarter
3533
import com.duckduckgo.anvil.annotations.InjectWith
3634
import com.duckduckgo.app.global.DispatcherProvider
3735
import com.duckduckgo.app.global.DuckDuckGoActivity
36+
import com.duckduckgo.app.global.extensions.launchAlwaysOnSystemSettings
3837
import com.duckduckgo.appbuildconfig.api.AppBuildConfig
3938
import com.duckduckgo.browser.api.ui.WebViewActivityWithParams
4039
import com.duckduckgo.di.scopes.ActivityScope
@@ -446,13 +445,7 @@ class DeviceShieldTrackerActivity :
446445

447446
@SuppressLint("InlinedApi")
448447
private fun openVPNSettings() {
449-
val intent = if (appBuildConfig.sdkInt >= Build.VERSION_CODES.N) {
450-
Intent(Settings.ACTION_VPN_SETTINGS)
451-
} else {
452-
Intent("android.net.vpn.SETTINGS")
453-
}
454-
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
455-
startActivity(intent)
448+
this.launchAlwaysOnSystemSettings(appBuildConfig.sdkInt)
456449
}
457450

458451
fun onVpnConflictDialogContinue() {

common/common-utils/src/main/java/com/duckduckgo/app/global/extensions/ActivityExtensions.kt

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,10 @@
1616

1717
package com.duckduckgo.app.global.extensions
1818

19+
import android.annotation.SuppressLint
1920
import android.content.Intent
2021
import android.net.Uri
22+
import android.os.Build
2123
import android.provider.Settings
2224
import androidx.appcompat.app.AppCompatActivity
2325

@@ -35,3 +37,14 @@ fun AppCompatActivity.launchApplicationInfoSettings(): Boolean {
3537

3638
return true
3739
}
40+
41+
@SuppressLint("InlinedApi")
42+
fun AppCompatActivity.launchAlwaysOnSystemSettings(sdkInt: Int) {
43+
val intent = if (sdkInt >= Build.VERSION_CODES.N) {
44+
Intent(Settings.ACTION_VPN_SETTINGS)
45+
} else {
46+
Intent("android.net.vpn.SETTINGS")
47+
}
48+
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
49+
startActivity(intent)
50+
}

network-protection/network-protection-impl/src/main/java/com/duckduckgo/networkprotection/impl/management/NetworkProtectionManagementActivity.kt

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,9 @@
1616

1717
package com.duckduckgo.networkprotection.impl.management
1818

19-
import android.annotation.SuppressLint
2019
import android.content.Intent
2120
import android.net.VpnService
22-
import android.os.Build
2321
import android.os.Bundle
24-
import android.provider.Settings
2522
import android.widget.CompoundButton.OnCheckedChangeListener
2623
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
2724
import androidx.core.view.isVisible
@@ -32,6 +29,7 @@ import androidx.lifecycle.lifecycleScope
3229
import com.duckduckgo.anvil.annotations.ContributeToActivityStarter
3330
import com.duckduckgo.anvil.annotations.InjectWith
3431
import com.duckduckgo.app.global.DuckDuckGoActivity
32+
import com.duckduckgo.app.global.extensions.launchAlwaysOnSystemSettings
3533
import com.duckduckgo.appbuildconfig.api.AppBuildConfig
3634
import com.duckduckgo.appbuildconfig.api.isInternalBuild
3735
import com.duckduckgo.di.scopes.ActivityScope
@@ -333,15 +331,8 @@ class NetworkProtectionManagementActivity : DuckDuckGoActivity() {
333331
openVPNSettings()
334332
}
335333

336-
@SuppressLint("InlinedApi")
337334
private fun openVPNSettings() {
338-
val intent = if (appBuildConfig.sdkInt >= Build.VERSION_CODES.N) {
339-
Intent(Settings.ACTION_VPN_SETTINGS)
340-
} else {
341-
Intent("android.net.vpn.SETTINGS")
342-
}
343-
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
344-
startActivity(intent)
335+
this.launchAlwaysOnSystemSettings(appBuildConfig.sdkInt)
345336
}
346337

347338
private fun resetToggle() {

network-protection/network-protection-impl/src/main/java/com/duckduckgo/networkprotection/impl/settings/NetPVpnSettingsActivity.kt

Lines changed: 2 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,14 @@
1616

1717
package com.duckduckgo.networkprotection.impl.settings
1818

19-
import android.annotation.SuppressLint
20-
import android.content.Intent
21-
import android.os.Build
2219
import android.os.Bundle
23-
import android.provider.Settings
2420
import androidx.lifecycle.Lifecycle
2521
import androidx.lifecycle.flowWithLifecycle
2622
import androidx.lifecycle.lifecycleScope
2723
import com.duckduckgo.anvil.annotations.ContributeToActivityStarter
2824
import com.duckduckgo.anvil.annotations.InjectWith
2925
import com.duckduckgo.app.global.DuckDuckGoActivity
26+
import com.duckduckgo.app.global.extensions.launchAlwaysOnSystemSettings
3027
import com.duckduckgo.appbuildconfig.api.AppBuildConfig
3128
import com.duckduckgo.di.scopes.ActivityScope
3229
import com.duckduckgo.mobile.android.ui.viewbinding.viewBinding
@@ -93,24 +90,13 @@ class NetPVpnSettingsActivity : DuckDuckGoActivity() {
9390
binding.secureDns.setSwitchEnabled(false)
9491

9592
binding.alwaysOn.setOnClickListener {
96-
openVPNSettings()
93+
this.launchAlwaysOnSystemSettings(appBuildConfig.sdkInt)
9794
}
9895

9996
binding.geoswitching.setOnClickListener {
10097
globalActivityStarter.start(this, NetpGeoswitchingScreenNoParams)
10198
}
10299
}
103-
104-
@SuppressLint("InlinedApi")
105-
private fun openVPNSettings() {
106-
val intent = if (appBuildConfig.sdkInt >= Build.VERSION_CODES.N) {
107-
Intent(Settings.ACTION_VPN_SETTINGS)
108-
} else {
109-
Intent("android.net.vpn.SETTINGS")
110-
}
111-
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
112-
startActivity(intent)
113-
}
114100
}
115101

116102
internal object NetPVpnSettingsScreenNoParams : GlobalActivityStarter.ActivityParams {
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<!--
2+
~ Copyright (c) 2023 DuckDuckGo
3+
~
4+
~ Licensed under the Apache License, Version 2.0 (the "License");
5+
~ you may not use this file except in compliance with the License.
6+
~ You may obtain a copy of the License at
7+
~
8+
~ http://www.apache.org/licenses/LICENSE-2.0
9+
~
10+
~ Unless required by applicable law or agreed to in writing, software
11+
~ distributed under the License is distributed on an "AS IS" BASIS,
12+
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
~ See the License for the specific language governing permissions and
14+
~ limitations under the License.
15+
-->
16+
17+
<vector xmlns:android="http://schemas.android.com/apk/res/android"
18+
android:width="24dp"
19+
android:height="24dp"
20+
android:viewportWidth="24"
21+
android:viewportHeight="24">
22+
<path
23+
android:pathData="M7,5C5.895,5 5,5.895 5,7V17C5,18.105 5.895,19 7,19H17C18.105,19 19,18.105 19,17V13C19,12.448 19.448,12 20,12C20.552,12 21,12.448 21,13V17C21,19.209 19.209,21 17,21H7C4.791,21 3,19.209 3,17V7C3,4.791 4.791,3 7,3H11C11.552,3 12,3.448 12,4C12,4.552 11.552,5 11,5H7Z"
24+
android:fillColor="?attr/daxColorPrimaryIcon"
25+
android:fillAlpha="0.84"/>
26+
<path
27+
android:pathData="M14,4C14,3.448 14.448,3 15,3H20C20.552,3 21,3.448 21,4V9C21,9.552 20.552,10 20,10C19.448,10 19,9.552 19,9V6.414L13.707,11.707C13.317,12.098 12.683,12.098 12.293,11.707C11.902,11.317 11.902,10.683 12.293,10.293L17.586,5H15C14.448,5 14,4.552 14,4Z"
28+
android:fillColor="?attr/daxColorPrimaryIcon"
29+
android:fillAlpha="0.84"/>
30+
</vector>

network-protection/network-protection-impl/src/main/res/layout/activity_netp_vpn_settings.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,11 @@
6868
android:id="@+id/always_on"
6969
android:layout_width="match_parent"
7070
android:layout_height="wrap_content"
71+
android:clickable="true"
72+
android:focusable="true"
7173
app:primaryText="@string/netpVpnSettingAlwaysOn"
7274
app:secondaryText="@string/netpVpnSettingAlwaysOnByline"
75+
app:trailingIcon="@drawable/ic_open_in_24"
7376
app:showSwitch="false"
7477
/>
7578

0 commit comments

Comments
 (0)