mirror of
https://github.com/ProtonMail/protoncore_android.git
synced 2026-05-15 09:50:41 +00:00
fix(auth-presentation): Crash in TermsConditionsDialogFragment.
If the user closed the fragment early, a callback from WebView would still be executed (`onPageStarted`/`onPageFinished`), after the fragment's view has been destroyed.
This commit is contained in:
@@ -2139,23 +2139,20 @@ public abstract class me/proton/core/auth/presentation/ui/signup/SignupFragment
|
||||
public final class me/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment : me/proton/core/presentation/ui/ProtonDialogFragment {
|
||||
public static final field Companion Lme/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment$Companion;
|
||||
public static final field TERMS_CONDITIONS_URL Ljava/lang/String;
|
||||
public field extraHeaderProvider Lme/proton/core/network/domain/client/ExtraHeaderProvider;
|
||||
public field networkPrefs Lme/proton/core/network/domain/NetworkPrefs;
|
||||
public fun <init> ()V
|
||||
public final fun getExtraHeaderProvider ()Lme/proton/core/network/domain/client/ExtraHeaderProvider;
|
||||
public final fun getNetworkPrefs ()Lme/proton/core/network/domain/NetworkPrefs;
|
||||
public fun onDestroyView ()V
|
||||
public fun onViewCreated (Landroid/view/View;Landroid/os/Bundle;)V
|
||||
public final fun setExtraHeaderProvider (Lme/proton/core/network/domain/client/ExtraHeaderProvider;)V
|
||||
public final fun setNetworkPrefs (Lme/proton/core/network/domain/NetworkPrefs;)V
|
||||
}
|
||||
|
||||
public final class me/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment$Companion {
|
||||
}
|
||||
|
||||
public final class me/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment$CustomWebViewClient : me/proton/core/presentation/ui/webview/ProtonWebViewClient {
|
||||
public fun <init> (Lme/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment;)V
|
||||
public fun onPageFinished (Landroid/webkit/WebView;Ljava/lang/String;)V
|
||||
public fun onPageStarted (Landroid/webkit/WebView;Ljava/lang/String;Landroid/graphics/Bitmap;)V
|
||||
public final class me/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment_CustomWebViewClient_Factory : dagger/internal/Factory {
|
||||
public fun <init> (Ljavax/inject/Provider;Ljavax/inject/Provider;)V
|
||||
public static fun create (Ljavax/inject/Provider;Ljavax/inject/Provider;)Lme/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment_CustomWebViewClient_Factory;
|
||||
public synthetic fun get ()Ljava/lang/Object;
|
||||
public fun get ()Lme/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment$CustomWebViewClient;
|
||||
public static fun newInstance (Lme/proton/core/network/domain/client/ExtraHeaderProvider;Lme/proton/core/network/domain/NetworkPrefs;)Lme/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment$CustomWebViewClient;
|
||||
}
|
||||
|
||||
public abstract interface class me/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment_GeneratedInjector {
|
||||
@@ -2163,12 +2160,11 @@ public abstract interface class me/proton/core/auth/presentation/ui/signup/Terms
|
||||
}
|
||||
|
||||
public final class me/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment_MembersInjector : dagger/MembersInjector {
|
||||
public fun <init> (Ljavax/inject/Provider;Ljavax/inject/Provider;)V
|
||||
public static fun create (Ljavax/inject/Provider;Ljavax/inject/Provider;)Ldagger/MembersInjector;
|
||||
public static fun injectExtraHeaderProvider (Lme/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment;Lme/proton/core/network/domain/client/ExtraHeaderProvider;)V
|
||||
public fun <init> (Ljavax/inject/Provider;)V
|
||||
public static fun create (Ljavax/inject/Provider;)Ldagger/MembersInjector;
|
||||
public static fun injectCustomWebViewClient (Lme/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment;Lme/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment$CustomWebViewClient;)V
|
||||
public synthetic fun injectMembers (Ljava/lang/Object;)V
|
||||
public fun injectMembers (Lme/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment;)V
|
||||
public static fun injectNetworkPrefs (Lme/proton/core/auth/presentation/ui/signup/TermsConditionsDialogFragment;Lme/proton/core/network/domain/NetworkPrefs;)V
|
||||
}
|
||||
|
||||
public final class me/proton/core/auth/presentation/viewmodel/AddAccountViewModel_Factory : dagger/internal/Factory {
|
||||
|
||||
+15
-8
@@ -43,10 +43,7 @@ import javax.inject.Inject
|
||||
class TermsConditionsDialogFragment : ProtonDialogFragment(R.layout.fragment_terms_conditions) {
|
||||
|
||||
@Inject
|
||||
lateinit var networkPrefs: NetworkPrefs
|
||||
|
||||
@Inject
|
||||
lateinit var extraHeaderProvider: ExtraHeaderProvider
|
||||
internal lateinit var customWebViewClient: CustomWebViewClient
|
||||
|
||||
private val viewModel by viewModels<TermsConditionsViewModel>()
|
||||
private val binding by viewBinding(FragmentTermsConditionsBinding::bind)
|
||||
@@ -56,13 +53,14 @@ class TermsConditionsDialogFragment : ProtonDialogFragment(R.layout.fragment_ter
|
||||
|
||||
binding.toolbar.setNavigationOnClickListener { dismissAllowingStateLoss() }
|
||||
binding.termsConditionsWebView.setAllowForceDark()
|
||||
customWebViewClient.progress = binding.progress
|
||||
|
||||
viewModel.networkState
|
||||
.flowWithLifecycle(viewLifecycleOwner.lifecycle)
|
||||
.onEach { connected ->
|
||||
if (connected) {
|
||||
binding.termsConditionsWebView.apply {
|
||||
webViewClient = CustomWebViewClient()
|
||||
webViewClient = customWebViewClient
|
||||
loadUrl(TERMS_CONDITIONS_URL)
|
||||
}
|
||||
} else {
|
||||
@@ -72,20 +70,29 @@ class TermsConditionsDialogFragment : ProtonDialogFragment(R.layout.fragment_ter
|
||||
.launchIn(lifecycleScope)
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
customWebViewClient.progress = null
|
||||
super.onDestroyView()
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
dismissAllowingStateLoss()
|
||||
}
|
||||
|
||||
inner class CustomWebViewClient : ProtonWebViewClient(networkPrefs, extraHeaderProvider) {
|
||||
internal class CustomWebViewClient @Inject constructor(
|
||||
extraHeaderProvider: ExtraHeaderProvider,
|
||||
networkPrefs: NetworkPrefs
|
||||
) : ProtonWebViewClient(networkPrefs, extraHeaderProvider) {
|
||||
var progress: View? = null
|
||||
|
||||
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
|
||||
super.onPageStarted(view, url, favicon)
|
||||
binding.progress.visibility = View.VISIBLE
|
||||
progress?.visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
override fun onPageFinished(view: WebView?, url: String?) {
|
||||
super.onPageFinished(view, url)
|
||||
binding.progress.visibility = View.GONE
|
||||
progress?.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user