Skip to content

Commit 88d5367

Browse files
committed
Refactor Tor/VPN actions to use ViewModel events
1 parent 1521f47 commit 88d5367

File tree

3 files changed

+36
-16
lines changed

3 files changed

+36
-16
lines changed

app/src/main/java/org/torproject/android/ui/connect/ConfigConnectionBottomSheet.kt

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import android.widget.RadioButton
1010
import android.widget.Toast
1111
import androidx.appcompat.content.res.AppCompatResources
1212
import androidx.core.net.toUri
13+
import androidx.fragment.app.activityViewModels
1314
import androidx.lifecycle.lifecycleScope
14-
import androidx.navigation.fragment.NavHostFragment
1515
import kotlinx.coroutines.Dispatchers
1616
import kotlinx.coroutines.delay
1717
import kotlinx.coroutines.launch
@@ -28,6 +28,7 @@ class ConfigConnectionBottomSheet :
2828
OrbotBottomSheetDialogFragment(), CompoundButton.OnCheckedChangeListener {
2929

3030
private lateinit var binding: ConfigConnectionBottomSheetBinding
31+
private val viewModel: ConnectViewModel by activityViewModels()
3132

3233
private lateinit var radios: List<RadioButton>
3334
private lateinit var radioSubtitleMap: Map<CompoundButton, View>
@@ -177,9 +178,7 @@ class ConfigConnectionBottomSheet :
177178

178179
private fun closeAndConnect() {
179180
dismiss()
180-
val navHostFragment = requireActivity().supportFragmentManager.fragments[0] as NavHostFragment
181-
val connectFrag = navHostFragment.childFragmentManager.fragments.last() as ConnectFragment
182-
connectFrag.startTorAndVpn()
181+
viewModel.triggerStartTorAndVpn()
183182
}
184183

185184
private fun selectRadioButtonFromPreference() {

app/src/main/java/org/torproject/android/ui/connect/ConnectFragment.kt

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,15 @@ class ConnectFragment : Fragment(),
5353
private val startTorResultLauncher =
5454
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
5555
if (result.resultCode == AppCompatActivity.RESULT_OK) {
56-
startTorAndVpn()
56+
viewModel.triggerStartTorAndVpn()
5757
}
5858
}
5959

6060
private val restartTorResultLauncher =
6161
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
6262
if (result.resultCode == AppCompatActivity.RESULT_OK) {
6363
requireContext().sendIntentToService(OrbotConstants.ACTION_RESTART_VPN) // is this enough todo?
64-
refreshMenuList(requireContext())
64+
viewModel.triggerRefreshMenuList()
6565
}
6666
}
6767

@@ -80,7 +80,6 @@ class ConnectFragment : Fragment(),
8080
binding.progressBar.progress = it
8181
}
8282
}
83-
8483
is ConnectUiState.On -> doLayoutOn(requireContext())
8584
is ConnectUiState.Stopping -> {}
8685
}
@@ -93,6 +92,8 @@ class ConnectFragment : Fragment(),
9392
when (event) {
9493
is ConnectEvent.StartTorAndVpn -> startTorAndVpn()
9594
is ConnectEvent.RefreshMenuList -> refreshMenuList(requireContext())
95+
is ConnectEvent.StopTorAndVpn -> stopTorAndVpn()
96+
is ConnectEvent.SendNewnymSignal -> sendNewnymSignal()
9697
}
9798
}
9899
}
@@ -119,7 +120,6 @@ class ConnectFragment : Fragment(),
119120

120121
private fun stopTorAndVpn() {
121122
requireContext().sendIntentToService(OrbotConstants.ACTION_STOP)
122-
doLayoutOff()
123123
}
124124

125125
private fun stopAnimations() {
@@ -178,8 +178,13 @@ class ConnectFragment : Fragment(),
178178
"ExitNodeBottomSheet"
179179
)
180180
},
181-
OrbotMenuAction(R.string.btn_refresh, R.drawable.ic_refresh) { sendNewnymSignal() },
182-
OrbotMenuAction(R.string.btn_tor_off, R.drawable.ic_power) { stopTorAndVpn() })
181+
OrbotMenuAction(R.string.btn_refresh, R.drawable.ic_refresh) {
182+
viewModel.triggerSendNewnymSignal()
183+
},
184+
OrbotMenuAction(R.string.btn_tor_off, R.drawable.ic_power) {
185+
viewModel.triggerStopTorAndVpn()
186+
}
187+
)
183188
if (!Prefs.isPowerUserMode) listItems.add(
184189
0,
185190
OrbotMenuAction(R.string.btn_choose_apps, R.drawable.ic_choose_apps) {
@@ -223,7 +228,7 @@ class ConnectFragment : Fragment(),
223228
binding.swSmartConnect.visibility = View.GONE
224229
binding.tvConfigure.visibility = View.GONE
225230

226-
refreshMenuList(context)
231+
viewModel.triggerRefreshMenuList()
227232

228233
binding.ivStatus.setOnClickListener {}
229234
}
@@ -241,7 +246,7 @@ class ConnectFragment : Fragment(),
241246
binding.swSmartConnect.isChecked = Prefs.smartConnect
242247
binding.swSmartConnect.setOnCheckedChangeListener { _, value ->
243248
Prefs.smartConnect = value
244-
doLayoutOff()
249+
viewModel.updateState(requireContext(), lastStatus)
245250
}
246251

247252
binding.tvConfigure.visibility = View.VISIBLE
@@ -323,11 +328,13 @@ class ConnectFragment : Fragment(),
323328
backgroundTintList = ColorStateList.valueOf(
324329
ContextCompat.getColor(requireContext(), R.color.orbot_btn_enabled_purple)
325330
)
326-
setOnClickListener { startTorAndVpn() }
331+
setOnClickListener {
332+
viewModel.triggerStartTorAndVpn()
333+
}
327334
}
328335

329336
binding.ivStatus.setOnClickListener {
330-
startTorAndVpn()
337+
viewModel.triggerStartTorAndVpn()
331338
}
332339
}
333340

@@ -361,7 +368,7 @@ class ConnectFragment : Fragment(),
361368
)
362369
)
363370
setOnClickListener {
364-
stopTorAndVpn()
371+
viewModel.triggerStopTorAndVpn()
365372
}
366373
}
367374

@@ -385,6 +392,6 @@ class ConnectFragment : Fragment(),
385392
.setAction(OrbotConstants.CMD_SET_EXIT).putExtra("exit", countryCode)
386393
)
387394

388-
refreshMenuList(requireContext())
395+
viewModel.triggerRefreshMenuList()
389396
}
390397
}

app/src/main/java/org/torproject/android/ui/connect/ConnectViewModel.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,23 @@ class ConnectViewModel : ViewModel() {
5050
_eventChannel.send(ConnectEvent.RefreshMenuList)
5151
}
5252
}
53+
54+
fun triggerStopTorAndVpn() {
55+
viewModelScope.launch {
56+
_eventChannel.send(ConnectEvent.StopTorAndVpn)
57+
}
58+
}
59+
60+
fun triggerSendNewnymSignal() {
61+
viewModelScope.launch {
62+
_eventChannel.send(ConnectEvent.SendNewnymSignal)
63+
}
64+
}
5365
}
5466

5567
sealed class ConnectEvent {
5668
object StartTorAndVpn : ConnectEvent()
5769
object RefreshMenuList : ConnectEvent()
70+
object StopTorAndVpn : ConnectEvent()
71+
object SendNewnymSignal : ConnectEvent()
5872
}

0 commit comments

Comments
 (0)