1
0
Fork 0

For #7506: show highlight on home 3-dot button (#7665)

master
Severin Rudie 2020-01-21 13:02:14 -08:00 committed by GitHub
parent 8274ff6f2b
commit 2dc5b397b6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 29 deletions

View File

@ -5,6 +5,7 @@
package org.mozilla.fenix.home package org.mozilla.fenix.home
import android.animation.Animator import android.animation.Animator
import android.content.Context
import android.content.DialogInterface import android.content.DialogInterface
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.drawable.BitmapDrawable import android.graphics.drawable.BitmapDrawable
@ -25,6 +26,7 @@ import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
import androidx.constraintlayout.widget.ConstraintSet.START import androidx.constraintlayout.widget.ConstraintSet.START
import androidx.constraintlayout.widget.ConstraintSet.TOP import androidx.constraintlayout.widget.ConstraintSet.TOP
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels import androidx.fragment.app.activityViewModels
import androidx.lifecycle.Lifecycle import androidx.lifecycle.Lifecycle
@ -49,7 +51,7 @@ import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import mozilla.appservices.places.BookmarkRoot import mozilla.appservices.places.BookmarkRoot
import mozilla.components.browser.menu.BrowserMenu import mozilla.components.browser.menu.ext.getHighlight
import mozilla.components.browser.session.Session import mozilla.components.browser.session.Session
import mozilla.components.browser.session.SessionManager import mozilla.components.browser.session.SessionManager
import mozilla.components.concept.sync.AccountObserver import mozilla.components.concept.sync.AccountObserver
@ -84,6 +86,7 @@ import org.mozilla.fenix.home.sessioncontrol.viewholders.CollectionViewHolder
import org.mozilla.fenix.onboarding.FenixOnboarding import org.mozilla.fenix.onboarding.FenixOnboarding
import org.mozilla.fenix.settings.SupportUtils import org.mozilla.fenix.settings.SupportUtils
import org.mozilla.fenix.settings.deletebrowsingdata.deleteAndQuit import org.mozilla.fenix.settings.deletebrowsingdata.deleteAndQuit
import org.mozilla.fenix.theme.ThemeManager
import org.mozilla.fenix.utils.FragmentPreDrawManager import org.mozilla.fenix.utils.FragmentPreDrawManager
import org.mozilla.fenix.utils.allowUndo import org.mozilla.fenix.utils.allowUndo
import org.mozilla.fenix.whatsnew.WhatsNew import org.mozilla.fenix.whatsnew.WhatsNew
@ -118,8 +121,6 @@ class HomeFragment : Fragment() {
} }
} }
private var homeMenu: HomeMenu? = null
private val sessionManager: SessionManager private val sessionManager: SessionManager
get() = requireComponents.core.sessionManager get() = requireComponents.core.sessionManager
@ -234,8 +235,6 @@ class HomeFragment : Fragment() {
homeViewModel.layoutManagerState = null homeViewModel.layoutManagerState = null
} }
setupHomeMenu()
viewLifecycleOwner.lifecycleScope.launch(IO) { viewLifecycleOwner.lifecycleScope.launch(IO) {
// This is necessary due to a bug in viewLifecycleOwner. See: // This is necessary due to a bug in viewLifecycleOwner. See:
// https://github.com/mozilla-mobile/android-components/blob/master/components/lib/state/src/main/java/mozilla/components/lib/state/ext/Fragment.kt#L32-L56 // https://github.com/mozilla-mobile/android-components/blob/master/components/lib/state/src/main/java/mozilla/components/lib/state/ext/Fragment.kt#L32-L56
@ -254,18 +253,18 @@ class HomeFragment : Fragment() {
} }
with(view.menuButton) { with(view.menuButton) {
var menu: PopupWindow? = null menuBuilder = createHomeMenu(context!!).menuBuilder
setOnClickListener {
if (menu == null) { val primaryTextColor = ContextCompat.getColor(
menu = homeMenu?.menuBuilder?.build(requireContext())?.show( context,
anchor = it, ThemeManager.resolveAttribute(R.attr.primaryText, context)
orientation = BrowserMenu.Orientation.UP, )
onDismiss = { menu = null }
) setColorFilter(primaryTextColor)
} else {
menu?.dismiss() // Immediately check for `What's new` highlight. If home items that change over time
} // are added, this will need to be called repeatedly.
} setHighlight(menuBuilder?.items?.getHighlight())
} }
view.toolbar.compoundDrawablePadding = view.toolbar.compoundDrawablePadding =
view.resources.getDimensionPixelSize(R.dimen.search_bar_search_engine_icon_padding) view.resources.getDimensionPixelSize(R.dimen.search_bar_search_engine_icon_padding)
@ -312,11 +311,6 @@ class HomeFragment : Fragment() {
bottomBarShadow.bringToFront() bottomBarShadow.bringToFront()
} }
override fun onDestroyView() {
homeMenu = null
super.onDestroyView()
}
override fun onStart() { override fun onStart() {
super.onStart() super.onStart()
subscribeToTabCollections() subscribeToTabCollections()
@ -499,9 +493,8 @@ class HomeFragment : Fragment() {
tabs = getListOfSessions().toTabs())) tabs = getListOfSessions().toTabs()))
} }
private fun setupHomeMenu() { private fun createHomeMenu(context: Context): HomeMenu {
val context = requireContext() return HomeMenu(context) {
homeMenu = HomeMenu(context) {
when (it) { when (it) {
HomeMenu.Item.Settings -> { HomeMenu.Item.Settings -> {
invokePendingDeleteJobs() invokePendingDeleteJobs()

View File

@ -115,13 +115,10 @@
app:layout_constraintStart_toEndOf="@id/toolbar_wrapper" app:layout_constraintStart_toEndOf="@id/toolbar_wrapper"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<ImageButton <mozilla.components.browser.menu.view.MenuButton
android:id="@+id/menuButton" android:id="@+id/menuButton"
android:layout_width="36dp" android:layout_width="36dp"
android:layout_height="48dp" android:layout_height="48dp"
android:background="?android:attr/selectableItemBackgroundBorderless"
android:contentDescription="@string/content_description_menu"
app:srcCompat="@drawable/ic_menu"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"/> app:layout_constraintBottom_toBottomOf="parent"/>