Dan Ballard pushed to branch firefox-android-115.2.1-13.5-1 at The Tor Project / Applications / firefox-android
Commits:
-
a00861a6
by clairehurst at 2024-05-09T14:47:16-06:00
4 changed files:
- fenix/app/src/main/java/org/mozilla/fenix/tor/ConnectAssistUiState.kt
- fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistFragment.kt
- fenix/app/src/main/java/org/mozilla/fenix/tor/TorConnectionAssistViewModel.kt
- fenix/app/src/main/res/layout/fragment_tor_connection_assist.xml
Changes:
| ... | ... | @@ -31,7 +31,8 @@ enum class ConnectAssistUiState( |
| 31 | 31 | val torBootstrapButton2Visible: Boolean,
|
| 32 | 32 | @StringRes val torBootstrapButton2TextStringResource: Int? = R.string.connection_assist_configure_connection_button,
|
| 33 | 33 | val torBootstrapButton2ShouldOpenSettings: Boolean = true,
|
| 34 | - val wordmarkLogoVisible: Boolean,
|
|
| 34 | + val wordmarkLogoVisible: Boolean = false,
|
|
| 35 | + val torBootstrapButton2ShouldRestartApp: Boolean = false,
|
|
| 35 | 36 | ) {
|
| 36 | 37 | Splash(
|
| 37 | 38 | progressBarVisible = false,
|
| ... | ... | @@ -65,9 +66,8 @@ enum class ConnectAssistUiState( |
| 65 | 66 | torBootstrapButton2Visible = true,
|
| 66 | 67 | torBootstrapButton2TextStringResource = R.string.connection_assist_configure_connection_button,
|
| 67 | 68 | torBootstrapButton2ShouldOpenSettings = true,
|
| 68 | - wordmarkLogoVisible = false,
|
|
| 69 | 69 | ),
|
| 70 | - Bootstrapping(
|
|
| 70 | + Connecting(
|
|
| 71 | 71 | progressBarVisible = true,
|
| 72 | 72 | progress = 0,
|
| 73 | 73 | backButtonVisible = false,
|
| ... | ... | @@ -85,7 +85,6 @@ enum class ConnectAssistUiState( |
| 85 | 85 | torBootstrapButton2Visible = true,
|
| 86 | 86 | torBootstrapButton2TextStringResource = R.string.btn_cancel,
|
| 87 | 87 | torBootstrapButton2ShouldOpenSettings = false,
|
| 88 | - wordmarkLogoVisible = false,
|
|
| 89 | 88 | ),
|
| 90 | 89 | InternetError(
|
| 91 | 90 | progressBarVisible = true,
|
| ... | ... | @@ -109,7 +108,6 @@ enum class ConnectAssistUiState( |
| 109 | 108 | torBootstrapButton2Visible = true,
|
| 110 | 109 | torBootstrapButton2TextStringResource = R.string.connection_assist_configure_connection_button,
|
| 111 | 110 | torBootstrapButton2ShouldOpenSettings = true,
|
| 112 | - wordmarkLogoVisible = false,
|
|
| 113 | 111 | ),
|
| 114 | 112 | TryingAgain(
|
| 115 | 113 | progressBarVisible = true,
|
| ... | ... | @@ -132,9 +130,8 @@ enum class ConnectAssistUiState( |
| 132 | 130 | torBootstrapButton2Visible = true,
|
| 133 | 131 | torBootstrapButton2TextStringResource = R.string.btn_cancel,
|
| 134 | 132 | torBootstrapButton2ShouldOpenSettings = false,
|
| 135 | - wordmarkLogoVisible = false,
|
|
| 136 | 133 | ),
|
| 137 | - TryABridge(
|
|
| 134 | + ConnectionAssist(
|
|
| 138 | 135 | progressBarVisible = true,
|
| 139 | 136 | progress = 100,
|
| 140 | 137 | progressTintColorResource = R.color.warning_yellow,
|
| ... | ... | @@ -157,7 +154,6 @@ enum class ConnectAssistUiState( |
| 157 | 154 | torBootstrapButton2Visible = false,
|
| 158 | 155 | torBootstrapButton2TextStringResource = null,
|
| 159 | 156 | torBootstrapButton2ShouldOpenSettings = true,
|
| 160 | - wordmarkLogoVisible = false,
|
|
| 161 | 157 | ),
|
| 162 | 158 | TryingABridge(
|
| 163 | 159 | progressBarVisible = true,
|
| ... | ... | @@ -180,7 +176,6 @@ enum class ConnectAssistUiState( |
| 180 | 176 | torBootstrapButton2Visible = true,
|
| 181 | 177 | torBootstrapButton2TextStringResource = R.string.btn_cancel,
|
| 182 | 178 | torBootstrapButton2ShouldOpenSettings = false,
|
| 183 | - wordmarkLogoVisible = false,
|
|
| 184 | 179 | ),
|
| 185 | 180 | LocationError(
|
| 186 | 181 | progressBarVisible = true,
|
| ... | ... | @@ -207,7 +202,6 @@ enum class ConnectAssistUiState( |
| 207 | 202 | torBootstrapButton2Visible = false,
|
| 208 | 203 | torBootstrapButton2TextStringResource = null,
|
| 209 | 204 | torBootstrapButton2ShouldOpenSettings = true,
|
| 210 | - wordmarkLogoVisible = false,
|
|
| 211 | 205 | ),
|
| 212 | 206 | LocationCheck(
|
| 213 | 207 | progressBarVisible = true,
|
| ... | ... | @@ -234,7 +228,6 @@ enum class ConnectAssistUiState( |
| 234 | 228 | torBootstrapButton2Visible = false,
|
| 235 | 229 | torBootstrapButton2TextStringResource = null,
|
| 236 | 230 | torBootstrapButton2ShouldOpenSettings = true,
|
| 237 | - wordmarkLogoVisible = false,
|
|
| 238 | 231 | ),
|
| 239 | 232 | LastTry(
|
| 240 | 233 | progressBarVisible = true,
|
| ... | ... | @@ -258,7 +251,6 @@ enum class ConnectAssistUiState( |
| 258 | 251 | torBootstrapButton2Visible = true,
|
| 259 | 252 | torBootstrapButton2TextStringResource = R.string.btn_cancel,
|
| 260 | 253 | torBootstrapButton2ShouldOpenSettings = false,
|
| 261 | - wordmarkLogoVisible = false,
|
|
| 262 | 254 | ),
|
| 263 | 255 | FinalError(
|
| 264 | 256 | progressBarVisible = true,
|
| ... | ... | @@ -279,10 +271,10 @@ enum class ConnectAssistUiState( |
| 279 | 271 | unblockTheInternetInCountryDescriptionVisible = false,
|
| 280 | 272 | countryDropDownVisible = false,
|
| 281 | 273 | torBootstrapButton1Visible = true,
|
| 282 | - torBootstrapButton1TextStringResource = R.string.connection_assist_internet_error_try_again,
|
|
| 274 | + torBootstrapButton1TextStringResource = R.string.connection_assist_configure_connection_button,
|
|
| 283 | 275 | torBootstrapButton2Visible = true,
|
| 284 | - torBootstrapButton2TextStringResource = R.string.connection_assist_configure_connection_button,
|
|
| 285 | - torBootstrapButton2ShouldOpenSettings = true,
|
|
| 286 | - wordmarkLogoVisible = false,
|
|
| 276 | + torBootstrapButton2TextStringResource = R.string.mozac_lib_crash_dialog_button_restart,
|
|
| 277 | + torBootstrapButton2ShouldOpenSettings = false,
|
|
| 278 | + torBootstrapButton2ShouldRestartApp = true,
|
|
| 287 | 279 | )
|
| 288 | 280 | } |
| ... | ... | @@ -4,6 +4,7 @@ |
| 4 | 4 | |
| 5 | 5 | package org.mozilla.fenix.tor
|
| 6 | 6 | |
| 7 | +import android.content.Intent
|
|
| 7 | 8 | import android.graphics.Color
|
| 8 | 9 | import android.os.Build
|
| 9 | 10 | import android.os.Bundle
|
| ... | ... | @@ -25,6 +26,7 @@ import androidx.lifecycle.repeatOnLifecycle |
| 25 | 26 | import androidx.navigation.fragment.findNavController
|
| 26 | 27 | import kotlinx.coroutines.launch
|
| 27 | 28 | import mozilla.components.support.base.feature.UserInteractionHandler
|
| 29 | +import org.mozilla.fenix.HomeActivity
|
|
| 28 | 30 | import org.mozilla.fenix.R
|
| 29 | 31 | import org.mozilla.fenix.databinding.FragmentTorConnectionAssistBinding
|
| 30 | 32 | import org.mozilla.fenix.ext.hideToolbar
|
| ... | ... | @@ -33,14 +35,15 @@ class TorConnectionAssistFragment : Fragment(), UserInteractionHandler { |
| 33 | 35 | |
| 34 | 36 | private val TAG = "TorConnectionAssistFrag"
|
| 35 | 37 | private val viewModel: TorConnectionAssistViewModel by viewModels()
|
| 36 | - private lateinit var binding: FragmentTorConnectionAssistBinding
|
|
| 38 | + private var _binding: FragmentTorConnectionAssistBinding? = null
|
|
| 39 | + private val binding get() = _binding!!
|
|
| 37 | 40 | |
| 38 | 41 | override fun onCreateView(
|
| 39 | 42 | inflater: LayoutInflater,
|
| 40 | 43 | container: ViewGroup?,
|
| 41 | 44 | savedInstanceState: Bundle?,
|
| 42 | 45 | ): View {
|
| 43 | - binding = FragmentTorConnectionAssistBinding.inflate(
|
|
| 46 | + _binding = FragmentTorConnectionAssistBinding.inflate(
|
|
| 44 | 47 | inflater, container, false,
|
| 45 | 48 | )
|
| 46 | 49 | |
| ... | ... | @@ -90,96 +93,148 @@ class TorConnectionAssistFragment : Fragment(), UserInteractionHandler { |
| 90 | 93 | |
| 91 | 94 | }
|
| 92 | 95 | |
| 93 | - override fun onDestroyView() {
|
|
| 94 | - super.onDestroyView()
|
|
| 95 | - }
|
|
| 96 | - |
|
| 97 | 96 | private fun showScreen(screen: ConnectAssistUiState) {
|
| 98 | - binding.apply {
|
|
| 99 | - torBootstrapProgressBar.visibility = if (screen.progressBarVisible) View.VISIBLE else View.GONE
|
|
| 100 | - torBootstrapProgressBar.progress = screen.progress
|
|
| 101 | - torBootstrapProgressBar.progressTintList =
|
|
| 102 | - screen.progressTintColorResource?.let {
|
|
| 103 | - AppCompatResources.getColorStateList(requireContext(),
|
|
| 104 | - it
|
|
| 105 | - )
|
|
| 106 | - }
|
|
| 107 | - |
|
| 108 | - settingsButton.visibility = if (screen.settingsButtonVisible) View.VISIBLE else View.GONE
|
|
| 109 | - settingsButton.setOnClickListener {
|
|
| 110 | - viewModel.cancelTorBootstrap()
|
|
| 111 | - openSettings()
|
|
| 112 | - }
|
|
| 97 | + setProgressBar(screen)
|
|
| 98 | + setSettingsButton(screen)
|
|
| 99 | + setBackButton(screen)
|
|
| 100 | + setTorConnectImage(screen)
|
|
| 101 | + setTitle(screen)
|
|
| 102 | + setQuickStart(screen)
|
|
| 103 | + setCountryDropDown(screen)
|
|
| 104 | + setButton1(screen)
|
|
| 105 | + setButton2(screen)
|
|
| 106 | + setSplashLogo(screen)
|
|
| 107 | + }
|
|
| 113 | 108 | |
| 114 | - backButton.visibility = if (screen.backButtonVisible) View.VISIBLE else View.INVISIBLE
|
|
| 115 | - backButton.setOnClickListener {
|
|
| 116 | - viewModel.handleBackButtonPressed()
|
|
| 109 | + private fun setProgressBar(screen: ConnectAssistUiState) {
|
|
| 110 | + binding.torBootstrapProgressBar.visibility =
|
|
| 111 | + if (screen.progressBarVisible) View.VISIBLE else View.GONE
|
|
| 112 | + binding.torBootstrapProgressBar.progress = screen.progress
|
|
| 113 | + binding.torBootstrapProgressBar.progressTintList =
|
|
| 114 | + screen.progressTintColorResource?.let {
|
|
| 115 | + AppCompatResources.getColorStateList(
|
|
| 116 | + requireContext(),
|
|
| 117 | + it,
|
|
| 118 | + )
|
|
| 117 | 119 | }
|
| 120 | + }
|
|
| 118 | 121 | |
| 119 | - torConnectImage.visibility = if (screen.torConnectImageVisible) View.VISIBLE else View.GONE
|
|
| 120 | - torConnectImage.setImageResource(screen.torConnectImageResource)
|
|
| 121 | - |
|
| 122 | - titleLargeTextView.visibility = if (screen.titleLargeTextViewVisible) View.VISIBLE else View.GONE
|
|
| 123 | - titleLargeTextView.text = getString(screen.titleLargeTextViewTextStringResource)
|
|
| 124 | - titleDescription.visibility = if (screen.titleDescriptionVisible) View.VISIBLE else View.GONE
|
|
| 125 | - if (screen.learnMoreStringResource != null && screen.internetErrorDescription != null) {
|
|
| 126 | - val learnMore: String = getString(screen.learnMoreStringResource)
|
|
| 127 | - val internetErrorDescription: String =
|
|
| 128 | - if (screen.internetErrorDescription1 == null) {
|
|
| 129 | - getString(
|
|
| 130 | - screen.internetErrorDescription,
|
|
| 131 | - learnMore,
|
|
| 132 | - )
|
|
| 133 | - } else if (screen.internetErrorDescription2 == null) {
|
|
| 134 | - getString(
|
|
| 135 | - screen.internetErrorDescription,
|
|
| 136 | - getString(screen.internetErrorDescription1),
|
|
| 137 | - learnMore,
|
|
| 138 | - )
|
|
| 139 | - } else {
|
|
| 140 | - getString(
|
|
| 141 | - screen.internetErrorDescription,
|
|
| 142 | - getString(screen.internetErrorDescription1),
|
|
| 143 | - getString(screen.internetErrorDescription2),
|
|
| 144 | - learnMore,
|
|
| 145 | - )
|
|
| 146 | - }
|
|
| 147 | - handleDescriptionWithClickable(internetErrorDescription, learnMore)
|
|
| 148 | - } else if (screen.titleDescriptionTextStringResource != null) {
|
|
| 149 | - titleDescription.text = getString(screen.titleDescriptionTextStringResource)
|
|
| 150 | - }
|
|
| 151 | - quickstartSwitch.visibility = if (screen.quickstartSwitchVisible) View.VISIBLE else View.GONE
|
|
| 152 | - quickstartSwitch.isChecked = viewModel.quickstartToggle().value == true
|
|
| 153 | - quickstartSwitch.setOnCheckedChangeListener { _, isChecked ->
|
|
| 154 | - viewModel.handleQuickstartChecked(isChecked)
|
|
| 155 | - }
|
|
| 122 | + private fun setSettingsButton(screen: ConnectAssistUiState) {
|
|
| 123 | + binding.settingsButton.visibility = if (screen.settingsButtonVisible) View.VISIBLE else View.GONE
|
|
| 124 | + binding.settingsButton.setOnClickListener {
|
|
| 125 | + viewModel.cancelTorBootstrap()
|
|
| 126 | + openSettings()
|
|
| 127 | + }
|
|
| 128 | + }
|
|
| 156 | 129 | |
| 157 | - unblockTheInternetInCountryDescription.visibility = if (screen.unblockTheInternetInCountryDescriptionVisible) View.VISIBLE else View.GONE
|
|
| 158 | - countryDropDown.visibility = if (screen.countryDropDownVisible) View.VISIBLE else View.GONE
|
|
| 130 | + private fun setBackButton(screen: ConnectAssistUiState) {
|
|
| 131 | + binding.backButton.visibility = if (screen.backButtonVisible) View.VISIBLE else View.INVISIBLE
|
|
| 132 | + binding.backButton.setOnClickListener {
|
|
| 133 | + viewModel.handleBackButtonPressed()
|
|
| 134 | + }
|
|
| 135 | + }
|
|
| 159 | 136 | |
| 160 | - torBootstrapButton1.visibility = if (screen.torBootstrapButton1Visible) View.VISIBLE else View.GONE
|
|
| 161 | - torBootstrapButton1.text = getString(screen.torBootstrapButton1TextStringResource)
|
|
| 162 | - torBootstrapButton1.setOnClickListener { viewModel.handleButton1Pressed(screen, lifecycleScope) }
|
|
| 137 | + private fun setTorConnectImage(screen: ConnectAssistUiState) {
|
|
| 138 | + binding.torConnectImage.visibility = if (screen.torConnectImageVisible) View.VISIBLE else View.GONE
|
|
| 139 | + binding.torConnectImage.setImageResource(screen.torConnectImageResource)
|
|
| 140 | + }
|
|
| 163 | 141 | |
| 164 | - torBootstrapButton2.visibility = if (screen.torBootstrapButton2Visible) View.VISIBLE else View.GONE
|
|
| 165 | - torBootstrapButton2.text = screen.torBootstrapButton2TextStringResource?.let {
|
|
| 166 | - getString(
|
|
| 167 | - it
|
|
| 168 | - )
|
|
| 169 | - }
|
|
| 170 | - torBootstrapButton2.setOnClickListener {
|
|
| 171 | - viewModel.cancelTorBootstrap()
|
|
| 172 | - if (screen.torBootstrapButton2ShouldOpenSettings){
|
|
| 173 | - openTorConnectionSettings()
|
|
| 142 | + private fun setTitle(screen: ConnectAssistUiState) {
|
|
| 143 | + binding.titleLargeTextView.visibility =
|
|
| 144 | + if (screen.titleLargeTextViewVisible) View.VISIBLE else View.GONE
|
|
| 145 | + binding.titleLargeTextView.text = getString(screen.titleLargeTextViewTextStringResource)
|
|
| 146 | + binding.titleDescription.visibility =
|
|
| 147 | + if (screen.titleDescriptionVisible) View.VISIBLE else View.GONE
|
|
| 148 | + if (screen.learnMoreStringResource != null && screen.internetErrorDescription != null) {
|
|
| 149 | + val learnMore: String = getString(screen.learnMoreStringResource)
|
|
| 150 | + val internetErrorDescription: String =
|
|
| 151 | + if (screen.internetErrorDescription1 == null) {
|
|
| 152 | + getString(
|
|
| 153 | + screen.internetErrorDescription,
|
|
| 154 | + learnMore,
|
|
| 155 | + )
|
|
| 156 | + } else if (screen.internetErrorDescription2 == null) {
|
|
| 157 | + getString(
|
|
| 158 | + screen.internetErrorDescription,
|
|
| 159 | + getString(screen.internetErrorDescription1),
|
|
| 160 | + learnMore,
|
|
| 161 | + )
|
|
| 174 | 162 | } else {
|
| 175 | - showScreen(ConnectAssistUiState.Configuring)
|
|
| 163 | + getString(
|
|
| 164 | + screen.internetErrorDescription,
|
|
| 165 | + getString(screen.internetErrorDescription1),
|
|
| 166 | + getString(screen.internetErrorDescription2),
|
|
| 167 | + learnMore,
|
|
| 168 | + )
|
|
| 176 | 169 | }
|
| 177 | - }
|
|
| 170 | + handleDescriptionWithClickable(internetErrorDescription, learnMore)
|
|
| 171 | + } else if (screen.titleDescriptionTextStringResource != null) {
|
|
| 172 | + binding.titleDescription.text = getString(screen.titleDescriptionTextStringResource)
|
|
| 173 | + }
|
|
| 174 | + }
|
|
| 175 | + |
|
| 176 | + private fun setQuickStart(screen: ConnectAssistUiState) {
|
|
| 177 | + binding.quickstartSwitch.visibility =
|
|
| 178 | + if (screen.quickstartSwitchVisible) View.VISIBLE else View.GONE
|
|
| 179 | + binding.quickstartSwitch.isChecked = viewModel.quickstartToggle().value == true
|
|
| 180 | + binding.quickstartSwitch.setOnCheckedChangeListener { _, isChecked ->
|
|
| 181 | + viewModel.handleQuickstartChecked(isChecked)
|
|
| 182 | + }
|
|
| 183 | + }
|
|
| 184 | + |
|
| 185 | + private fun setCountryDropDown(screen: ConnectAssistUiState) {
|
|
| 186 | + binding.unblockTheInternetInCountryDescription.visibility =
|
|
| 187 | + if (screen.unblockTheInternetInCountryDescriptionVisible) View.VISIBLE else View.GONE
|
|
| 188 | + binding.countryDropDown.visibility = if (screen.countryDropDownVisible) View.VISIBLE else View.GONE
|
|
| 189 | + }
|
|
| 178 | 190 | |
| 179 | - wordmarkLogo.visibility = if(screen.wordmarkLogoVisible) View.VISIBLE else View.GONE
|
|
| 191 | + private fun setButton1(screen: ConnectAssistUiState) {
|
|
| 192 | + binding.torBootstrapButton1.visibility =
|
|
| 193 | + if (screen.torBootstrapButton1Visible) View.VISIBLE else View.GONE
|
|
| 194 | + binding.torBootstrapButton1.text = getString(screen.torBootstrapButton1TextStringResource)
|
|
| 195 | + binding.torBootstrapButton1.setOnClickListener {
|
|
| 196 | + viewModel.handleButton1Pressed(
|
|
| 197 | + screen,
|
|
| 198 | + lifecycleScope,
|
|
| 199 | + )
|
|
| 200 | + }
|
|
| 201 | + }
|
|
| 202 | + |
|
| 203 | + private fun setButton2(screen: ConnectAssistUiState) {
|
|
| 204 | + binding.torBootstrapButton2.visibility =
|
|
| 205 | + if (screen.torBootstrapButton2Visible) View.VISIBLE else View.GONE
|
|
| 206 | + if (screen.torBootstrapButton2ShouldRestartApp) {
|
|
| 207 | + binding.torBootstrapButton2.text =
|
|
| 208 | + screen.torBootstrapButton2TextStringResource?.let {
|
|
| 209 | + getString(
|
|
| 210 | + it,
|
|
| 211 | + getString(R.string.app_name),
|
|
| 212 | + )
|
|
| 213 | + }
|
|
| 214 | + } else {
|
|
| 215 | + binding.torBootstrapButton2.text =
|
|
| 216 | + screen.torBootstrapButton2TextStringResource?.let {
|
|
| 217 | + getString(
|
|
| 218 | + it,
|
|
| 219 | + )
|
|
| 220 | + }
|
|
| 221 | + }
|
|
| 222 | + binding.torBootstrapButton2.setOnClickListener {
|
|
| 223 | + viewModel.cancelTorBootstrap()
|
|
| 224 | + if (screen.torBootstrapButton2ShouldOpenSettings) {
|
|
| 225 | + openTorConnectionSettings()
|
|
| 226 | + } else if (screen.torBootstrapButton2ShouldRestartApp) {
|
|
| 227 | + restartApplication()
|
|
| 228 | + } else {
|
|
| 229 | + showScreen(ConnectAssistUiState.Configuring)
|
|
| 230 | + }
|
|
| 180 | 231 | }
|
| 181 | 232 | }
|
| 182 | 233 | |
| 234 | + private fun setSplashLogo(screen: ConnectAssistUiState) {
|
|
| 235 | + binding.wordmarkLogo.visibility = if (screen.wordmarkLogoVisible) View.VISIBLE else View.GONE
|
|
| 236 | + }
|
|
| 237 | + |
|
| 183 | 238 | /**
|
| 184 | 239 | * from https://stackoverflow.com/questions/10696986/how-to-set-the-part-of-the-text-view-is-clickable
|
| 185 | 240 | */
|
| ... | ... | @@ -207,6 +262,7 @@ class TorConnectionAssistFragment : Fragment(), UserInteractionHandler { |
| 207 | 262 | }
|
| 208 | 263 | |
| 209 | 264 | private fun showLearnMore() {
|
| 265 | + Log.d(TAG, "showLearnMore() tapped")
|
|
| 210 | 266 | //TODO("Not yet implemented")
|
| 211 | 267 | }
|
| 212 | 268 | |
| ... | ... | @@ -231,6 +287,15 @@ class TorConnectionAssistFragment : Fragment(), UserInteractionHandler { |
| 231 | 287 | )
|
| 232 | 288 | }
|
| 233 | 289 | |
| 290 | + private fun restartApplication() {
|
|
| 291 | + startActivity(
|
|
| 292 | + Intent(requireContext(), HomeActivity::class.java).addFlags(
|
|
| 293 | + Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK,
|
|
| 294 | + ),
|
|
| 295 | + )
|
|
| 296 | + Runtime.getRuntime().exit(0)
|
|
| 297 | + }
|
|
| 298 | + |
|
| 234 | 299 | override fun onBackPressed(): Boolean {
|
| 235 | 300 | return viewModel.handleBackButtonPressed()
|
| 236 | 301 | }
|
| ... | ... | @@ -124,7 +124,7 @@ class TorConnectionAssistViewModel( |
| 124 | 124 | /** stay here */
|
| 125 | 125 | }
|
| 126 | 126 | |
| 127 | - ConnectAssistUiState.TryABridge -> {
|
|
| 127 | + ConnectAssistUiState.ConnectionAssist -> {
|
|
| 128 | 128 | _torConnectScreen.value = ConnectAssistUiState.TryingABridge
|
| 129 | 129 | }
|
| 130 | 130 | |
| ... | ... | @@ -144,7 +144,7 @@ class TorConnectionAssistViewModel( |
| 144 | 144 | /** stay here */
|
| 145 | 145 | }
|
| 146 | 146 | |
| 147 | - else -> _torConnectScreen.value = ConnectAssistUiState.Bootstrapping
|
|
| 147 | + else -> _torConnectScreen.value = ConnectAssistUiState.Connecting
|
|
| 148 | 148 | }
|
| 149 | 149 | }
|
| 150 | 150 | |
| ... | ... | @@ -155,28 +155,58 @@ class TorConnectionAssistViewModel( |
| 155 | 155 | "TorError(message = $message, details = $details, phase = $phase, reason = $reason",
|
| 156 | 156 | )
|
| 157 | 157 | // TODO better error handling
|
| 158 | - _torConnectScreen.value = ConnectAssistUiState.InternetError
|
|
| 158 | + when (reason) {
|
|
| 159 | +// "noroute" -> handleNoRoute() TODO re-add when working better
|
|
| 160 | + else -> handleUnknownError()
|
|
| 161 | + }
|
|
| 162 | + }
|
|
| 163 | + }
|
|
| 164 | + |
|
| 165 | + private fun handleNoRoute() {
|
|
| 166 | + Log.d(TAG, "handleNoRoute(), _torConnectScreen.value = ${_torConnectScreen.value}")
|
|
| 167 | + when (_torConnectScreen.value) {
|
|
| 168 | + ConnectAssistUiState.Connecting -> _torConnectScreen.value = ConnectAssistUiState.ConnectionAssist
|
|
| 169 | + ConnectAssistUiState.ConnectionAssist -> {/** no op, likely a duplicate error */}
|
|
| 170 | + ConnectAssistUiState.TryingABridge -> _torConnectScreen.value = ConnectAssistUiState.LocationCheck
|
|
| 171 | + ConnectAssistUiState.LocationCheck -> {/** no op, likely a duplicate error */}
|
|
| 172 | + ConnectAssistUiState.LastTry -> _torConnectScreen.value = ConnectAssistUiState.FinalError
|
|
| 173 | + ConnectAssistUiState.FinalError -> {/** no op, likely a duplicate error */}
|
|
| 174 | + else -> _torConnectScreen.value = ConnectAssistUiState.InternetError
|
|
| 159 | 175 | }
|
| 160 | 176 | }
|
| 161 | 177 | |
| 178 | + private fun handleUnknownError() {
|
|
| 179 | + // TODO should we have a dedicated screen for unknown errors?
|
|
| 180 | + _torConnectScreen.value = ConnectAssistUiState.InternetError
|
|
| 181 | + }
|
|
| 182 | + |
|
| 162 | 183 | override fun onTorStopped() {
|
| 163 | 184 | Log.d(TAG, "onTorStopped()")
|
| 164 | 185 | }
|
| 165 | 186 | |
| 166 | 187 | private fun tryABridge() {
|
| 188 | + if (!locationFound()) {
|
|
| 189 | + _torConnectScreen.value = ConnectAssistUiState.LocationError
|
|
| 190 | + return
|
|
| 191 | + }
|
|
| 167 | 192 | if (!_torController.bridgesEnabled) {
|
| 168 | 193 | _torController.bridgesEnabled = true
|
| 169 | 194 | _torController.bridgeTransport =
|
| 170 | - TorBridgeTransportConfig.BUILTIN_OBFS4 // TODO select based on country
|
|
| 195 | + TorBridgeTransportConfig.BUILTIN_SNOWFLAKE // TODO select based on country
|
|
| 171 | 196 | }
|
| 172 | 197 | handleConnect(withDebugLogging = true)
|
| 173 | 198 | }
|
| 174 | 199 | |
| 200 | + private fun locationFound(): Boolean {
|
|
| 201 | + // TODO try to find location
|
|
| 202 | + return true
|
|
| 203 | + }
|
|
| 204 | + |
|
| 175 | 205 | fun handleBackButtonPressed(): Boolean {
|
| 176 | 206 | when (torConnectScreen.value) {
|
| 177 | 207 | ConnectAssistUiState.Splash -> return false
|
| 178 | 208 | ConnectAssistUiState.Configuring -> return false
|
| 179 | - ConnectAssistUiState.Bootstrapping -> cancelTorBootstrap()
|
|
| 209 | + ConnectAssistUiState.Connecting -> cancelTorBootstrap()
|
|
| 180 | 210 | ConnectAssistUiState.InternetError -> {
|
| 181 | 211 | _torController.lastKnownError = null
|
| 182 | 212 | _torConnectScreen.value = ConnectAssistUiState.Configuring
|
| ... | ... | @@ -186,18 +216,18 @@ class TorConnectionAssistViewModel( |
| 186 | 216 | cancelTorBootstrap()
|
| 187 | 217 | }
|
| 188 | 218 | |
| 189 | - ConnectAssistUiState.TryABridge -> {
|
|
| 219 | + ConnectAssistUiState.ConnectionAssist -> {
|
|
| 190 | 220 | _torController.lastKnownError = null
|
| 191 | 221 | _torConnectScreen.value = ConnectAssistUiState.Configuring
|
| 192 | 222 | }
|
| 193 | 223 | |
| 194 | 224 | ConnectAssistUiState.TryingABridge -> {
|
| 195 | 225 | _torController.stopTor()
|
| 196 | - _torConnectScreen.value = ConnectAssistUiState.TryABridge
|
|
| 226 | + _torConnectScreen.value = ConnectAssistUiState.ConnectionAssist
|
|
| 197 | 227 | }
|
| 198 | 228 | |
| 199 | 229 | ConnectAssistUiState.LocationError -> {
|
| 200 | - _torConnectScreen.value = ConnectAssistUiState.TryABridge
|
|
| 230 | + _torConnectScreen.value = ConnectAssistUiState.ConnectionAssist
|
|
| 201 | 231 | }
|
| 202 | 232 | |
| 203 | 233 | ConnectAssistUiState.LocationCheck -> {
|
| ... | ... | @@ -126,7 +126,6 @@ |
| 126 | 126 | android:layout_marginTop="8dp"
|
| 127 | 127 | android:layout_marginEnd="24dp"
|
| 128 | 128 | android:textColor="@color/photonLightGrey05"
|
| 129 | - android:tooltipText="@string/connection_assist_share_my_location_country_or_region"
|
|
| 130 | 129 | android:visibility="gone"
|
| 131 | 130 | app:layout_constraintEnd_toEndOf="parent"
|
| 132 | 131 | app:layout_constraintStart_toStartOf="parent"
|