diff options
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.kt | 64 |
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() + } } |