From 000d5a2e5494d887b3211147604ece2155db8594 Mon Sep 17 00:00:00 2001 From: Jeff Boek Date: Tue, 26 Feb 2019 15:32:18 -0800 Subject: [PATCH] Fixes #672 - Moves private browsing description out of sessions --- .../org/mozilla/fenix/home/HomeFragment.kt | 40 +++++++++++++++++++ .../fenix/home/sessions/SessionsAdapter.kt | 29 -------------- app/src/main/res/layout/fragment_home.xml | 28 ++++++++++++- .../res/layout/session_list_empty_private.xml | 24 ----------- 4 files changed, 67 insertions(+), 54 deletions(-) delete mode 100644 app/src/main/res/layout/session_list_empty_private.xml 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 2a788ba58..12bd9080d 100644 --- a/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/home/HomeFragment.kt @@ -7,6 +7,9 @@ package org.mozilla.fenix.home import android.content.res.Resources import android.graphics.drawable.BitmapDrawable import android.os.Bundle +import android.text.SpannableString +import android.text.style.ClickableSpan +import android.text.style.ForegroundColorSpan import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -68,6 +71,8 @@ class HomeFragment : Fragment() { super.onViewCreated(view, savedInstanceState) setupHomeMenu() + setupPrivateBrowsingDescription() + updatePrivateSessionDescriptionVisibility() sessionsComponent.view.visibility = if ((activity as HomeActivity).browsingModeManager.isPrivate) View.GONE else View.VISIBLE @@ -206,31 +211,66 @@ class HomeFragment : Fragment() { } } + private fun setupPrivateBrowsingDescription() { + // Format the description text to include a hyperlink + val descriptionText = String + .format(private_session_description.text.toString(), System.getProperty("line.separator")) + val linkStartIndex = descriptionText.indexOf("\n\n") + 2 + val linkAction = object : ClickableSpan() { + override fun onClick(widget: View?) { + // TODO Go to SUMO page + } + } + val textWithLink = SpannableString(descriptionText).apply { + setSpan(linkAction, linkStartIndex, descriptionText.length, 0) + + val colorSpan = ForegroundColorSpan(private_session_description.currentTextColor) + setSpan(colorSpan, linkStartIndex, descriptionText.length, 0) + } + private_session_description.text = textWithLink + } + + private fun updatePrivateSessionDescriptionVisibility() { + val isPrivate = (activity as HomeActivity).browsingModeManager.isPrivate + val hasNoTabs = requireComponents.core.sessionManager.all.none { it.private } + + private_session_description_wrapper.visibility = if (isPrivate && hasNoTabs) { + View.VISIBLE + } else { + View.GONE + } + } + private fun subscribeToSessions(): SessionManager.Observer { val observer = object : SessionManager.Observer { override fun onSessionAdded(session: Session) { super.onSessionAdded(session) emitSessionChanges() + updatePrivateSessionDescriptionVisibility() } override fun onSessionRemoved(session: Session) { super.onSessionRemoved(session) emitSessionChanges() + updatePrivateSessionDescriptionVisibility() } override fun onSessionSelected(session: Session) { super.onSessionSelected(session) emitSessionChanges() + updatePrivateSessionDescriptionVisibility() } override fun onSessionsRestored() { super.onSessionsRestored() emitSessionChanges() + updatePrivateSessionDescriptionVisibility() } override fun onAllSessionsRemoved() { super.onAllSessionsRemoved() emitSessionChanges() + updatePrivateSessionDescriptionVisibility() } } requireComponents.core.sessionManager.register(observer) diff --git a/app/src/main/java/org/mozilla/fenix/home/sessions/SessionsAdapter.kt b/app/src/main/java/org/mozilla/fenix/home/sessions/SessionsAdapter.kt index 3c6a99cb1..468954c6a 100644 --- a/app/src/main/java/org/mozilla/fenix/home/sessions/SessionsAdapter.kt +++ b/app/src/main/java/org/mozilla/fenix/home/sessions/SessionsAdapter.kt @@ -5,9 +5,6 @@ package org.mozilla.fenix.home.sessions import android.graphics.PorterDuff -import android.text.SpannableString -import android.text.style.ClickableSpan -import android.text.style.ForegroundColorSpan import android.view.LayoutInflater import android.view.View import android.view.ViewGroup @@ -62,7 +59,6 @@ class SessionsAdapter( HeaderViewHolder.LAYOUT_ID -> HeaderViewHolder(view) EmptyListViewHolder.LAYOUT_ID -> EmptyListViewHolder(view) SessionItemViewHolder.LAYOUT_ID -> SessionItemViewHolder(view, actionEmitter) - PrivateEmptyListViewHolder.LAYOUT_ID -> PrivateEmptyListViewHolder(view) else -> EmptyListViewHolder(view) } } @@ -82,24 +78,6 @@ class SessionsAdapter( when (holder) { is HeaderViewHolder -> holder.headerText.text = "Today" is SessionItemViewHolder -> holder.bind(state.items[position - 1]) - is PrivateEmptyListViewHolder -> { - // Format the description text to include a hyperlink - val descriptionText = String - .format(holder.description.text.toString(), System.getProperty("line.separator")) - val linkStartIndex = descriptionText.indexOf("\n\n") + 2 - val linkAction = object : ClickableSpan() { - override fun onClick(widget: View?) { - // TODO Go to SUMO page - } - } - val textWithLink = SpannableString(descriptionText).apply { - setSpan(linkAction, linkStartIndex, descriptionText.length, 0) - - val colorSpan = ForegroundColorSpan(holder.description.currentTextColor) - setSpan(colorSpan, linkStartIndex, descriptionText.length, 0) - } - holder.description.text = textWithLink - } } } @@ -110,13 +88,6 @@ class SessionsAdapter( } } - private class PrivateEmptyListViewHolder(view: View) : RecyclerView.ViewHolder(view) { - val description = view.findViewById(R.id.session_description) - companion object { - const val LAYOUT_ID = R.layout.session_list_empty_private - } - } - private class SessionItemViewHolder( view: View, private val actionEmitter: Observer, diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 258211fa2..63a4e72da 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -102,7 +102,33 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:descendantFocusability="blocksDescendants"/> + android:descendantFocusability="blocksDescendants"> + + + + + diff --git a/app/src/main/res/layout/session_list_empty_private.xml b/app/src/main/res/layout/session_list_empty_private.xml deleted file mode 100644 index 61e817f7e..000000000 --- a/app/src/main/res/layout/session_list_empty_private.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - \ No newline at end of file