From 21c75ca1bbed24b2e0fce215fb03424637757497 Mon Sep 17 00:00:00 2001 From: Emily Kager Date: Fri, 14 Jun 2019 16:46:40 -0700 Subject: [PATCH] For #3478 - Add Tab sent snackbar confirmation for device sharing --- .../java/org/mozilla/fenix/HomeActivity.kt | 19 +++++++++++++++++-- .../mozilla/fenix/browser/BrowserFragment.kt | 3 +-- .../org/mozilla/fenix/home/HomeFragment.kt | 5 ++++- .../library/bookmarks/BookmarkFragment.kt | 4 ++-- .../fenix/library/history/HistoryFragment.kt | 5 ++++- .../org/mozilla/fenix/share/ShareFragment.kt | 7 ++++++- app/src/main/res/navigation/nav_graph.xml | 4 ++-- 7 files changed, 36 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt index 826df865d..18b9cb7d9 100644 --- a/app/src/main/java/org/mozilla/fenix/HomeActivity.kt +++ b/app/src/main/java/org/mozilla/fenix/HomeActivity.kt @@ -17,6 +17,7 @@ import androidx.navigation.NavController import androidx.navigation.fragment.NavHostFragment import androidx.navigation.ui.AppBarConfiguration import androidx.navigation.ui.NavigationUI +import com.google.android.material.snackbar.Snackbar import io.sentry.Sentry import io.sentry.event.Breadcrumb import io.sentry.event.BreadcrumbBuilder @@ -31,9 +32,11 @@ import mozilla.components.support.base.feature.BackHandler import mozilla.components.support.ktx.kotlin.isUrl import mozilla.components.support.ktx.kotlin.toNormalizedUrl import mozilla.components.support.utils.SafeIntent +import org.mozilla.fenix.components.FenixSnackbar import org.mozilla.fenix.components.isSentryEnabled import org.mozilla.fenix.components.metrics.Event import org.mozilla.fenix.ext.components +import org.mozilla.fenix.ext.getRootView import org.mozilla.fenix.ext.nav import org.mozilla.fenix.home.HomeFragmentDirections import org.mozilla.fenix.library.bookmarks.BookmarkFragmentDirections @@ -44,10 +47,11 @@ import org.mozilla.fenix.settings.AccountProblemFragmentDirections import org.mozilla.fenix.settings.PairFragmentDirections import org.mozilla.fenix.settings.SettingsFragmentDirections import org.mozilla.fenix.settings.TurnOnSyncFragmentDirections +import org.mozilla.fenix.share.ShareFragment import org.mozilla.fenix.utils.Settings -@SuppressWarnings("TooManyFunctions") -open class HomeActivity : AppCompatActivity() { +@SuppressWarnings("TooManyFunctions", "LargeClass") +open class HomeActivity : AppCompatActivity(), ShareFragment.TabsSharedCallback { open val isCustomTab = false private var sessionObserver: SessionManager.Observer? = null @@ -370,6 +374,17 @@ open class HomeActivity : AppCompatActivity() { }.also { components.core.sessionManager.register(it, this) } } + override fun onTabsShared(tabsSize: Int) { + this@HomeActivity.getRootView()?.let { + FenixSnackbar.make(it, Snackbar.LENGTH_SHORT).setText( + getString( + if (tabsSize == 1) R.string.sync_sent_tab_snackbar else + R.string.sync_sent_tabs_snackbar + ) + ).show() + } + } + companion object { const val OPEN_TO_BROWSER = "open_to_browser" } diff --git a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt index 464a77e26..8ffe3ae36 100644 --- a/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/browser/BrowserFragment.kt @@ -104,7 +104,6 @@ import java.net.URL @SuppressWarnings("TooManyFunctions", "LargeClass") class BrowserFragment : Fragment(), BackHandler { - private lateinit var toolbarComponent: ToolbarComponent private var tabCollectionObserver: Observer>? = null @@ -953,7 +952,7 @@ class BrowserFragment : Fragment(), BackHandler { } private fun shareUrl(url: String) { - val directions = BrowserFragmentDirections.actionBrowserFragmentToShareFragment(url) + val directions = BrowserFragmentDirections.actionBrowserFragmentToShareFragment(url = url) nav(R.id.browserFragment, directions) } diff --git a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt index e53e9fd28..4298d06fb 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -717,7 +717,10 @@ class HomeFragment : Fragment(), AccountObserver { private fun share(url: String? = null, tabs: List? = null) { val directions = - HomeFragmentDirections.actionHomeFragmentToShareFragment(url = url, tabs = tabs?.toTypedArray()) + HomeFragmentDirections.actionHomeFragmentToShareFragment( + url = url, + tabs = tabs?.toTypedArray() + ) nav(R.id.homeFragment, directions) } diff --git a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt index 92a045228..7f36d6697 100644 --- a/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/bookmarks/BookmarkFragment.kt @@ -217,8 +217,8 @@ class BookmarkFragment : Fragment(), BackHandler, AccountObserver { nav( R.id.bookmarkFragment, BookmarkFragmentDirections.actionBookmarkFragmentToShareFragment( - this, - it.item.title + url = this, + title = it.item.title ) ) metrics()?.track(Event.ShareBookmark) diff --git a/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt index 776c2a06b..3d6624cd0 100644 --- a/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/library/history/HistoryFragment.kt @@ -287,7 +287,10 @@ class HistoryFragment : Fragment(), BackHandler { private fun share(url: String? = null, tabs: List? = null) { val directions = - HistoryFragmentDirections.actionHistoryFragmentToShareFragment(url = url, tabs = tabs?.toTypedArray()) + HistoryFragmentDirections.actionHistoryFragmentToShareFragment( + url = url, + tabs = tabs?.toTypedArray() + ) nav(R.id.historyFragment, directions) } diff --git a/app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt b/app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt index 65c1dae5e..794e44257 100644 --- a/app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/share/ShareFragment.kt @@ -21,6 +21,7 @@ import kotlinx.android.synthetic.main.fragment_share.view.* import mozilla.components.concept.sync.DeviceEventOutgoing import mozilla.components.concept.sync.OAuthAccount import org.mozilla.fenix.FenixViewModelProvider +import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R import org.mozilla.fenix.ext.nav import org.mozilla.fenix.ext.requireComponents @@ -28,6 +29,10 @@ import org.mozilla.fenix.mvi.ActionBusFactory import org.mozilla.fenix.mvi.getAutoDisposeObservable class ShareFragment : AppCompatDialogFragment() { + interface TabsSharedCallback { + fun onTabsShared(tabsSize: Int) + } + private lateinit var component: ShareComponent private var tabs: Array = emptyArray() @@ -39,7 +44,6 @@ class ShareFragment : AppCompatDialogFragment() { override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { val view = inflater.inflate(R.layout.fragment_share, container, false) val args = ShareFragmentArgs.fromBundle(arguments!!) - if (args.url == null && args.tabs.isNullOrEmpty()) { throw IllegalStateException("URL and tabs cannot both be null.") } @@ -131,6 +135,7 @@ class ShareFragment : AppCompatDialogFragment() { ) } } + (activity as? HomeActivity)?.onTabsShared(tabs.size) } } diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index b49a8e739..075e64a79 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -419,8 +419,8 @@ + app:argType="org.mozilla.fenix.share.ShareTab[]" + app:nullable="true" />