summaryrefslogtreecommitdiff
path: root/app/src/main/java/foundation/e/advancedprivacy/common/WarningDialog.kt
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/foundation/e/advancedprivacy/common/WarningDialog.kt')
-rw-r--r--app/src/main/java/foundation/e/advancedprivacy/common/WarningDialog.kt64
1 files changed, 41 insertions, 23 deletions
diff --git a/app/src/main/java/foundation/e/advancedprivacy/common/WarningDialog.kt b/app/src/main/java/foundation/e/advancedprivacy/common/WarningDialog.kt
index 1a83692..80fc760 100644
--- a/app/src/main/java/foundation/e/advancedprivacy/common/WarningDialog.kt
+++ b/app/src/main/java/foundation/e/advancedprivacy/common/WarningDialog.kt
@@ -23,23 +23,23 @@ import android.content.Context
import android.content.Intent
import android.graphics.drawable.ColorDrawable
import android.os.Bundle
-import android.util.Log
import android.view.View
import android.widget.CheckBox
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AlertDialog
+import androidx.appcompat.app.AppCompatActivity
import foundation.e.advancedprivacy.R
-import foundation.e.advancedprivacy.domain.entities.MainFeatures
-import foundation.e.advancedprivacy.domain.entities.MainFeatures.FAKE_LOCATION
-import foundation.e.advancedprivacy.domain.entities.MainFeatures.IP_SCRAMBLING
-import foundation.e.advancedprivacy.domain.entities.MainFeatures.TRACKERS_CONTROL
+import foundation.e.advancedprivacy.domain.entities.ShowFeaturesWarning
+import foundation.e.advancedprivacy.domain.usecases.IpScramblingStateUseCase
import foundation.e.advancedprivacy.domain.usecases.ShowFeaturesWarningUseCase
import foundation.e.advancedprivacy.main.MainActivity
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.map
import org.koin.java.KoinJavaComponent.get
+import timber.log.Timber
-class WarningDialog : Activity() {
+class WarningDialog : AppCompatActivity() {
companion object {
private const val PARAM_FEATURE = "feature"
@@ -57,33 +57,34 @@ class WarningDialog : Activity() {
private fun createIntent(
context: Context,
- feature: MainFeatures,
+ feature: ShowFeaturesWarning,
): Intent {
val intent = Intent(context, WarningDialog::class.java)
- intent.putExtra(PARAM_FEATURE, feature.name)
+ intent.putExtra(PARAM_FEATURE, feature)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
return intent
}
}
+ private var isWaitingForResult = false
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- getWindow().setBackgroundDrawable(ColorDrawable(0))
+ window.setBackgroundDrawable(ColorDrawable(0))
val feature = try {
- MainFeatures.valueOf(intent.getStringExtra(PARAM_FEATURE) ?: "")
+ intent.getParcelableExtra<ShowFeaturesWarning>(PARAM_FEATURE)!!
} catch (e: Exception) {
- Log.e("WarningDialog", "Missing mandatory activity parameter", e)
+ Timber.e("Missing mandatory activity parameter", e)
finish()
return
}
-
showWarningDialog(feature)
}
- private fun showWarningDialog(feature: MainFeatures) {
+ private fun showWarningDialog(feature: ShowFeaturesWarning) {
val builder = AlertDialog.Builder(this)
- builder.setOnDismissListener { finish() }
+ builder.setOnDismissListener { if (!isWaitingForResult) finish() }
val content: View = layoutInflater.inflate(R.layout.alertdialog_do_not_show_again, null)
val checkbox = content.findViewById<CheckBox>(R.id.checkbox)
@@ -91,23 +92,23 @@ class WarningDialog : Activity() {
builder.setMessage(
when (feature) {
- TRACKERS_CONTROL -> R.string.warningdialog_trackers_message
- FAKE_LOCATION -> R.string.warningdialog_location_message
- IP_SCRAMBLING -> R.string.warningdialog_ipscrambling_message
+ ShowFeaturesWarning.TrackersControl -> R.string.warningdialog_trackers_message
+ ShowFeaturesWarning.FakeLocation -> R.string.warningdialog_location_message
+ is ShowFeaturesWarning.IpScrambling -> R.string.warningdialog_ipscrambling_message
}
)
builder.setTitle(
when (feature) {
- TRACKERS_CONTROL -> R.string.warningdialog_trackers_title
- FAKE_LOCATION -> R.string.warningdialog_location_title
- IP_SCRAMBLING -> R.string.warningdialog_ipscrambling_title
+ ShowFeaturesWarning.TrackersControl -> R.string.warningdialog_trackers_title
+ ShowFeaturesWarning.FakeLocation -> R.string.warningdialog_location_title
+ is ShowFeaturesWarning.IpScrambling -> R.string.warningdialog_ipscrambling_title
}
)
builder.setPositiveButton(
when (feature) {
- IP_SCRAMBLING -> R.string.warningdialog_ipscrambling_cta
+ is ShowFeaturesWarning.IpScrambling -> R.string.warningdialog_ipscrambling_cta
else -> R.string.ok
}
) { _, _ ->
@@ -115,10 +116,17 @@ class WarningDialog : Activity() {
get<ShowFeaturesWarningUseCase>(ShowFeaturesWarningUseCase::class.java)
.doNotShowAgain(feature)
}
- finish()
+
+ val vpnDisclaimerIntent = (feature as? ShowFeaturesWarning.IpScrambling)
+ ?.startVpnDisclaimer
+
+ if (vpnDisclaimerIntent != null) {
+ isWaitingForResult = true
+ launchAndroidVpnDisclaimer.launch(vpnDisclaimerIntent)
+ } else finish()
}
- if (feature == TRACKERS_CONTROL) {
+ if (feature == ShowFeaturesWarning.TrackersControl) {
builder.setNeutralButton(R.string.warningdialog_trackers_secondary_cta) { _, _ ->
MainActivity.deepLinkBuilder(this)
.setDestination(R.id.trackersFragment)
@@ -130,4 +138,14 @@ class WarningDialog : Activity() {
builder.show()
}
+
+ private val launchAndroidVpnDisclaimer = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
+ val ipScramblingStateUseCase = get<IpScramblingStateUseCase>(IpScramblingStateUseCase::class.java)
+ if (result.resultCode == Activity.RESULT_OK) {
+ ipScramblingStateUseCase.startIpScrambling()
+ } else {
+ ipScramblingStateUseCase.toggle(false)
+ }
+ finish()
+ }
}