1
0
Fork 0

For #5304 - Align ETP Onboarding Tool Tip PopupWindow

master
ekager 2019-09-13 13:49:03 -07:00 committed by Emily Kager
parent 16ec5858ad
commit 8cd0d8faf3
3 changed files with 60 additions and 40 deletions

View File

@ -11,11 +11,12 @@ import android.view.Gravity
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.WindowManager
import android.widget.Button import android.widget.Button
import android.widget.ImageView import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.PopupWindow import android.widget.PopupWindow
import android.widget.RadioButton import android.widget.RadioButton
import androidx.appcompat.widget.AppCompatImageView
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.lifecycle.Observer import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
@ -37,7 +38,7 @@ import mozilla.components.feature.sitepermissions.SitePermissions
import mozilla.components.lib.state.ext.consumeFrom import mozilla.components.lib.state.ext.consumeFrom
import mozilla.components.support.base.feature.BackHandler import mozilla.components.support.base.feature.BackHandler
import mozilla.components.support.base.feature.ViewBoundFeatureWrapper import mozilla.components.support.base.feature.ViewBoundFeatureWrapper
import mozilla.components.support.ktx.android.util.dpToPx import org.jetbrains.anko.dimen
import org.mozilla.fenix.FeatureFlags import org.mozilla.fenix.FeatureFlags
import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.HomeActivity
import org.mozilla.fenix.R import org.mozilla.fenix.R
@ -155,8 +156,7 @@ class BrowserFragment : BaseBrowserFragment(), BackHandler {
private val toolbarSessionObserver = object : Session.Observer { private val toolbarSessionObserver = object : Session.Observer {
override fun onLoadingStateChanged(session: Session, loading: Boolean) { override fun onLoadingStateChanged(session: Session, loading: Boolean) {
if (!loading && if (!loading &&
context!!.settings.shouldShowTrackingProtectionOnboarding && shouldShowTrackingProtectionOnboarding(session)
session.trackerBlockingEnabled
) { ) {
showTrackingProtectionOnboarding() showTrackingProtectionOnboarding()
} }
@ -356,39 +356,58 @@ class BrowserFragment : BaseBrowserFragment(), BackHandler {
return return
} }
context?.let { context?.let {
it.settings.incrementTrackingProtectionOnboardingCount()
val layout = LayoutInflater.from(it) val layout = LayoutInflater.from(it)
.inflate(R.layout.tracking_protection_onboarding_popup, null) .inflate(R.layout.tracking_protection_onboarding_popup, null)
layout.onboarding_message.text = layout.onboarding_message.text =
it.getString(R.string.etp_onboarding_message, getString(R.string.app_name)) it.getString(R.string.etp_onboarding_message, getString(R.string.app_name))
val trackingOnboarding =
PopupWindow( val trackingOnboarding = PopupWindow(
layout, layout,
TP_ONBOARDING_WIDTH.dpToPx(resources.displayMetrics), it.dimen(R.dimen.tp_onboarding_width),
LinearLayout.LayoutParams.WRAP_CONTENT, WindowManager.LayoutParams.WRAP_CONTENT
true ).apply {
) setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))
isOutsideTouchable = true
isFocusable = true
elevation = view!!.resources.getDimension(R.dimen.mozac_browser_menu_elevation)
animationStyle = R.style.Mozac_Browser_Menu_Animation_OverflowMenuBottom
}
val closeButton = layout.findViewById<ImageView>(R.id.close_onboarding) val closeButton = layout.findViewById<ImageView>(R.id.close_onboarding)
closeButton.increaseTapArea(BUTTON_INCREASE_DPS) closeButton.increaseTapArea(BUTTON_INCREASE_DPS)
closeButton.setOnClickListener { closeButton.setOnClickListener {
trackingOnboarding.dismiss() trackingOnboarding.dismiss()
} }
trackingOnboarding.isOutsideTouchable = true
trackingOnboarding.setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT)) val tpIcon =
trackingOnboarding.showAtLocation( browserToolbarView
browserToolbarView.view, .view
Gravity.BOTTOM or Gravity.START, .findViewById<AppCompatImageView>(R.id.mozac_browser_toolbar_tracking_protection_icon_view)
TP_ONBOARDING_X_OFFSET.dpToPx(resources.displayMetrics),
browserToolbarView.view.height // Measure layout view
) val spec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)
layout.measure(spec, spec)
val containerHeight = layout.measuredHeight
val xOffset = it.dimen(R.dimen.tp_onboarding_x_offset)
// Positioning the popup above the tp anchor.
val yOffset = -containerHeight - (browserToolbarView.view.height / THREE * 2)
trackingOnboarding.showAsDropDown(tpIcon, xOffset, yOffset)
it.settings.incrementTrackingProtectionOnboardingCount()
} }
} }
private fun shouldShowTrackingProtectionOnboarding(session: Session) =
context?.settings?.shouldShowTrackingProtectionOnboarding ?: false &&
session.trackerBlockingEnabled && session.trackersBlocked.isNotEmpty()
companion object { companion object {
private const val THREE = 3
private const val BUTTON_INCREASE_DPS = 12 private const val BUTTON_INCREASE_DPS = 12
private const val TP_ONBOARDING_X_OFFSET = 4
private const val SHARED_TRANSITION_MS = 200L private const val SHARED_TRANSITION_MS = 200L
private const val TP_ONBOARDING_WIDTH = 256
private const val TAB_ITEM_TRANSITION_NAME = "tab_item" private const val TAB_ITEM_TRANSITION_NAME = "tab_item"
const val REPORT_SITE_ISSUE_URL = const val REPORT_SITE_ISSUE_URL =
"https://webcompat.com/issues/new?url=%s&label=browser-fenix" "https://webcompat.com/issues/new?url=%s&label=browser-fenix"

View File

@ -4,17 +4,30 @@
- file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="wrap_content"
android:layout_height="match_parent" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/message" android:id="@+id/message"
android:layout_width="match_parent" android:layout_width="@dimen/etp_onboarding_popup_width"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:background="@drawable/onboarding_popup_background" android:background="@drawable/onboarding_popup_background"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/close_onboarding"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginEnd="8dp"
android:clickable="true"
android:focusable="true"
android:src="@drawable/ic_close"
android:tint="@color/primary_text_dark_theme"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/onboarding_message" android:id="@+id/onboarding_message"
android:layout_width="0dp" android:layout_width="0dp"
@ -30,19 +43,6 @@
app:layout_constraintEnd_toStartOf="@id/close_onboarding" app:layout_constraintEnd_toStartOf="@id/close_onboarding"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/close_onboarding"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginEnd="8dp"
android:clickable="true"
android:focusable="true"
android:src="@drawable/ic_close"
android:tint="@color/primary_text_dark_theme"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<ImageView <ImageView
@ -52,6 +52,5 @@
android:importantForAccessibility="no" android:importantForAccessibility="no"
android:rotation="180" android:rotation="180"
android:src="@drawable/ic_triangle" android:src="@drawable/ic_triangle"
app:layout_constraintStart_toStartOf="parent" android:layout_gravity="start" />
app:layout_constraintTop_toBottomOf="@id/message" />
</LinearLayout> </LinearLayout>

View File

@ -34,6 +34,8 @@
<dimen name="context_menu_height">48dp</dimen> <dimen name="context_menu_height">48dp</dimen>
<dimen name="context_menu_x_offset">8dp</dimen> <dimen name="context_menu_x_offset">8dp</dimen>
<dimen name="tp_onboarding_width">256dp</dimen>
<dimen name="tp_onboarding_x_offset">4dp</dimen>
<!--Quick Settings--> <!--Quick Settings-->
<dimen name="quicksettings_item_height">46dp</dimen> <dimen name="quicksettings_item_height">46dp</dimen>