Skip to content

Commit 8de1097

Browse files
authored
๐Ÿ”€ :: (#17) vpn_service to dev
VPN ์„œ๋น„์Šค๋กœ ์›น URL ๊ฐ€์ ธ์˜ค๊ธฐ
2 parents ae9b181 + 32a45de commit 8de1097

3 files changed

Lines changed: 453 additions & 0 deletions

File tree

โ€Žapp/src/main/AndroidManifest.xmlโ€Ž

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:tools="http://schemas.android.com/tools">
44

5+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
6+
<uses-permission android:name="android.permission.INTERNET" />
7+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
8+
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" />
9+
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
10+
511
<application
612
android:allowBackup="true"
713
android:dataExtractionRules="@xml/data_extraction_rules"
@@ -12,6 +18,14 @@
1218
android:supportsRtl="true"
1319
android:theme="@style/Theme.NoBet"
1420
tools:targetApi="31">
21+
<service android:name=".utils.NoBetVpnService"
22+
android:permission="android.permission.BIND_VPN_SERVICE"
23+
android:exported="true"
24+
android:foregroundServiceType="dataSync">
25+
<intent-filter>
26+
<action android:name="android.net.VpnService"/>
27+
</intent-filter>
28+
</service>
1529
<activity
1630
android:name=".presentation.screen.splash.SplashActivity"
1731
android:exported="true" >

โ€Žapp/src/main/java/kr/hs/anu/nobet/presentation/screen/main/MainActivity.ktโ€Ž

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package kr.hs.anu.nobet.presentation.screen.main
22

3+
import android.app.Activity
34
import android.content.Intent
45
import android.graphics.Color
56
import android.graphics.PorterDuff
7+
import android.net.VpnService
68
import android.os.Bundle
79
import android.view.LayoutInflater
810
import android.view.View
@@ -22,10 +24,12 @@ import kr.hs.anu.nobet.presentation.screen.allow.AllowActivity
2224
import kr.hs.anu.nobet.presentation.screen.blockList.BlockListActivity
2325
import kr.hs.anu.nobet.presentation.screen.login.LoginActivity
2426
import kr.hs.anu.nobet.presentation.screen.report.ReportActivity
27+
import kr.hs.anu.nobet.utils.NoBetVpnService
2528
import kr.hs.anu.nobet.utils.openPage
2629

2730
class MainActivity : AppCompatActivity() {
2831

32+
private val REQ_PREPARE_VPN = 1001
2933
private val viewModel: MainViewModel by viewModels()
3034
private lateinit var binding: ActivityMainBinding
3135

@@ -42,6 +46,8 @@ class MainActivity : AppCompatActivity() {
4246

4347
// ๋ฒ„ํŠผ ์ƒํƒœ๊ฐ’ ์ฝ๊ณ  ๊ฐ’์— ๋”ฐ๋ผ ์ƒํƒœ ๋ฐ”๊พธ๊ธฐ
4448
viewModel.btnState.observe(this) { btnState ->
49+
if (btnState) startVpn() else stopVpn()
50+
4551
// ์ฐจ๋‹จ ์ „์› ๋ฒ„ํŠผ ์ƒ‰ ๋ณ€๊ฒฝ
4652
binding.layoutBlockBtn.setBackgroundResource(
4753
if (btnState) R.drawable.block_btn_on else R.drawable.block_btn_background
@@ -129,4 +135,37 @@ class MainActivity : AppCompatActivity() {
129135
popupWindow.dismiss()
130136
}
131137
}
138+
139+
private fun startVpn() {
140+
val intent = VpnService.prepare(this)
141+
if (intent != null) {
142+
startActivityForResult(intent, REQ_PREPARE_VPN)
143+
} else {
144+
onActivityResult(REQ_PREPARE_VPN, Activity.RESULT_OK, null)
145+
}
146+
}
147+
148+
@Deprecated("Deprecated in Java")
149+
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
150+
super.onActivityResult(requestCode, resultCode, data)
151+
if (requestCode == REQ_PREPARE_VPN && resultCode == Activity.RESULT_OK) {
152+
ContextCompat.startForegroundService(
153+
this,
154+
Intent(this, NoBetVpnService::class.java)
155+
)
156+
}
157+
}
158+
159+
private fun stopVpn() {
160+
// ์„œ๋น„์Šค๊ฐ€ ๋–  ์žˆ์„ ๋•Œ๋งŒ STOP ์•ก์…˜ ์ „๋‹ฌ (foregroundService ๊ธˆ์ง€!)
161+
if (NoBetVpnService.isRunning) {
162+
startService(
163+
Intent(this, NoBetVpnService::class.java).apply {
164+
action = NoBetVpnService.ACTION_STOP
165+
}
166+
)
167+
}
168+
// ๋ณด์กฐ: ์‹คํ–‰ ์ค‘์ด๋ฉด ์ข…๋ฃŒ, ์•„๋‹ˆ๋ฉด ๊ทธ๋ƒฅ ๋ฌด์‹œ๋จ
169+
stopService(Intent(this, NoBetVpnService::class.java))
170+
}
132171
}

0 commit comments

Comments
ย (0)