TurnOnSyncFragment.kt 3.88 KB
Newer Older
1
2
3
4
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */

5
package org.mozilla.fenix.settings.account
6
7

import android.os.Bundle
8
9
10
11
12
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.text.HtmlCompat
import androidx.fragment.app.Fragment
13
14
import androidx.navigation.findNavController
import androidx.navigation.fragment.findNavController
15
import kotlinx.android.synthetic.main.fragment_turn_on_sync.view.*
16
import mozilla.components.concept.sync.AccountObserver
17
import mozilla.components.concept.sync.AuthType
18
import mozilla.components.concept.sync.OAuthAccount
19
import org.mozilla.fenix.R
20
import org.mozilla.fenix.components.FenixSnackbar
21
import org.mozilla.fenix.components.metrics.Event
22
import org.mozilla.fenix.ext.requireComponents
Tiger Oakes's avatar
Tiger Oakes committed
23
import org.mozilla.fenix.ext.showToolbar
24

25
@SuppressWarnings("TooManyFunctions")
26
class TurnOnSyncFragment : Fragment(), AccountObserver {
27

28
29
30
    private val safeArguments get() = requireNotNull(arguments)
    private val args get() = TurnOnSyncFragmentArgs.fromBundle(safeArguments)

31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
    private val signInClickListener = View.OnClickListener {
        requireComponents.services.accountsAuthFeature.beginAuthentication(requireContext())
        // TODO The sign-in web content populates session history,
        // so pressing "back" after signing in won't take us back into the settings screen, but rather up the
        // session history stack.
        // We could auto-close this tab once we get to the end of the authentication process?
        // Via an interceptor, perhaps.
    }

    private val paringClickListener = View.OnClickListener {
        val directions = TurnOnSyncFragmentDirections.actionTurnOnSyncFragmentToPairFragment()
        view!!.findNavController().navigate(directions)
        requireComponents.analytics.metrics.track(Event.SyncAuthScanPairing)
    }

46
47
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
48
        requireComponents.analytics.metrics.track(Event.SyncAuthOpened)
49
50
51
52
    }

    override fun onDestroy() {
        super.onDestroy()
53
        requireComponents.analytics.metrics.track(Event.SyncAuthClosed)
54
55
    }

56
57
    override fun onResume() {
        super.onResume()
58
        if (requireComponents.backgroundServices.accountManager.authenticatedAccount() != null) {
59
            findNavController().popBackStack()
60
            return
61
62
63
        }

        requireComponents.backgroundServices.accountManager.register(this, owner = this)
Tiger Oakes's avatar
Tiger Oakes committed
64
        showToolbar(getString(R.string.preferences_sync))
65
66
    }

67
68
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val view = inflater.inflate(R.layout.fragment_turn_on_sync, container, false)
69
70
        view.signInScanButton.setOnClickListener(paringClickListener)
        view.signInEmailButton.setOnClickListener(signInClickListener)
71
        view.signInInstructions.text = HtmlCompat.fromHtml(
72
73
74
75
            getString(R.string.sign_in_instructions),
            HtmlCompat.FROM_HTML_MODE_LEGACY
        )
        return view
76
77
    }

78
    override fun onAuthenticated(account: OAuthAccount, authType: AuthType) {
79
80
81
82
83
84
85
86
87
88
89
90
91
92
        val snackbarText = requireContext().getString(R.string.sync_syncing_in_progress)
        val snackbarLength = FenixSnackbar.LENGTH_SHORT

        // Since the snackbar can be presented in BrowserFragment or in SettingsFragment we must
        // base our display method on the padSnackbar argument
        if (args.padSnackbar) {
            FenixSnackbar.makeWithToolbarPadding(requireView(), snackbarLength)
                .setText(snackbarText)
                .show()
        } else {
            FenixSnackbar.make(requireView(), snackbarLength)
                .setText(snackbarText)
                .show()
        }
93
    }
94
}