@@ -17,6 +17,7 @@ import android.view.LayoutInflater
1717import android.view.View
1818import android.view.View.*
1919import android.view.ViewGroup
20+ import android.widget.Toast
2021import androidx.appcompat.app.AppCompatDelegate
2122import androidx.fragment.app.activityViewModels
2223import androidx.navigation.fragment.findNavController
@@ -26,8 +27,10 @@ import io.simplelogin.android.databinding.DialogViewEditTextBinding
2627import io.simplelogin.android.databinding.FragmentSettingsBinding
2728import io.simplelogin.android.module.home.HomeActivity
2829import io.simplelogin.android.module.home.HomeViewModel
30+ import io.simplelogin.android.utils.LoginWithProtonUtils
2931import io.simplelogin.android.utils.SLSharedPreferences
3032import io.simplelogin.android.utils.baseclass.BaseFragment
33+ import io.simplelogin.android.utils.extension.runOnUiThread
3134import io.simplelogin.android.utils.extension.toastError
3235import io.simplelogin.android.utils.extension.toastShortly
3336import io.simplelogin.android.utils.model.UserInfo
@@ -88,6 +91,15 @@ class SettingsFragment : BaseFragment(), HomeActivity.OnBackPressed {
8891 binding.contactsAccessView.updateSwitchState()
8992 }
9093
94+ fun onNewIntent (intent : Intent ? ) {
95+ // Update the user info
96+ viewModel.refreshUserInfo {
97+ runOnUiThread {
98+ Toast .makeText(requireContext(), R .string.your_proton_account_has_been_linked, Toast .LENGTH_SHORT ).show()
99+ }
100+ }
101+ }
102+
91103 private fun bind (userInfo : UserInfo ) {
92104 binding.profileInfoCardView.visibility = VISIBLE
93105 binding.profileInfoCardView.bind(userInfo)
@@ -96,6 +108,22 @@ class SettingsFragment : BaseFragment(), HomeActivity.OnBackPressed {
96108 SettingsFragmentDirections .actionSettingsFragmentToPremiumFragment()
97109 )
98110 }
111+
112+ // Connected with Proton
113+ binding.connectWithProtonCardView.bind(userInfo.connectedProtonAddress)
114+ binding.connectWithProtonCardView.setOnConnectButtonClickListener {
115+ viewModel.getTemporaryToken { token ->
116+ context?.let { context ->
117+ LoginWithProtonUtils .launchLinkWithProton(context, token)
118+ }
119+ }
120+ }
121+
122+ binding.connectWithProtonCardView.setOnUnlinkButtonClickListener {
123+ alertUnlinkProtonAccount {
124+ viewModel.unlinkProtonAccount()
125+ }
126+ }
99127 }
100128
101129 private fun bind (userSettings : UserSettings ) {
@@ -203,6 +231,12 @@ class SettingsFragment : BaseFragment(), HomeActivity.OnBackPressed {
203231 viewModel.onHandleUserSettingsUpdatedComplete()
204232 }
205233 }
234+
235+ viewModel.eventProtonAccountUnlinked.observe(viewLifecycleOwner) { updated ->
236+ if (updated) {
237+ Toast .makeText(requireContext(), R .string.your_proton_account_has_been_unlinked, Toast .LENGTH_SHORT ).show()
238+ }
239+ }
206240 }
207241
208242 private fun alertModificationOptions () {
@@ -233,6 +267,15 @@ class SettingsFragment : BaseFragment(), HomeActivity.OnBackPressed {
233267 .show()
234268 }
235269
270+ private fun alertUnlinkProtonAccount (onConfirm : () -> Unit ) {
271+ MaterialAlertDialogBuilder (requireContext(), R .style.SlAlertDialogTheme )
272+ .setTitle(R .string.proton_unlink_account_confirmation_title)
273+ .setMessage(R .string.proton_unlink_account_confirmation_content)
274+ .setNegativeButton(R .string.dialog_cancel_button, null )
275+ .setPositiveButton(R .string.dialog_confirm_button) { _, _ -> onConfirm()}
276+ .show()
277+ }
278+
236279 private fun askForPhotoLibraryPermission () {
237280 if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .M ) {
238281 val readPermission = Manifest .permission.READ_EXTERNAL_STORAGE
0 commit comments