GitLab is used only for code review, issue tracking and project management. Canonical locations for source code are still https://gitweb.torproject.org/ https://git.torproject.org/ and git-rw.torproject.org.

Commit 45924165 authored by Matthew Finkel's avatar Matthew Finkel
Browse files

Bug 40028: Implement new home screen

parent cf3e1c5b
......@@ -28,6 +28,7 @@ import androidx.constraintlayout.widget.ConstraintSet.PARENT_ID
import androidx.constraintlayout.widget.ConstraintSet.TOP
import androidx.coordinatorlayout.widget.CoordinatorLayout
import androidx.core.content.ContextCompat
import androidx.core.view.children
import androidx.core.view.doOnLayout
import androidx.core.view.isGone
import androidx.core.view.isVisible
......@@ -43,6 +44,7 @@ import androidx.navigation.fragment.navArgs
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.SCROLL_STATE_IDLE
import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.snackbar.Snackbar
import kotlinx.android.synthetic.main.fragment_home.*
import kotlinx.android.synthetic.main.fragment_home.view.*
......@@ -191,6 +193,15 @@ class HomeFragment : Fragment() {
val activity = activity as HomeActivity
val components = requireComponents
// Splits by full stops or commas and puts the parts in different lines.
// Ignoring separators at the end of the string, it is expected
// that there are at most two parts (e.g. "Explore. Privately.").
view.exploreprivately.text = view
.exploreprivately
.text
?.replace(" *([.,。।]) *".toRegex(), "$1\n")
?.trim()
currentMode = CurrentMode(
view.context,
onboarding,
......@@ -271,6 +282,7 @@ class HomeFragment : Fragment() {
activity.themeManager.applyStatusBarTheme(activity)
adjustHomeFragmentView(currentMode.getCurrentMode(), view)
showSessionControlView(view)
return view
}
......@@ -343,14 +355,29 @@ class HomeFragment : Fragment() {
}
}
// This function should be paired with showSessionControlView()
@SuppressWarnings("ComplexMethod", "NestedBlockDepth", "LongMethod")
private fun adjustHomeFragmentView(mode: Mode, view: View?) {
view?.sessionControlRecyclerView?.apply {
visibility = View.INVISIBLE
}
if (mode == Mode.Bootstrap) {
view?.sessionControlRecyclerView?.apply {
setPadding(0, 0, 0, 0)
(getLayoutParams() as ViewGroup.MarginLayoutParams).setMargins(0, 0, 0, 0)
(layoutParams as ViewGroup.MarginLayoutParams).setMargins(0, 0, 0, 0)
}
view?.homeAppBar?.apply {
visibility = View.GONE
// Reset this as SCROLL in case it was previously set as NO_SCROLL after bootstrap
children.forEach {
(it.layoutParams as AppBarLayout.LayoutParams).scrollFlags =
AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
}
}
view?.onion_pattern_image?.apply {
visibility = View.GONE
}
view?.toolbarLayout?.apply {
visibility = View.GONE
......@@ -365,22 +392,71 @@ class HomeFragment : Fragment() {
SESSION_CONTROL_VIEW_PADDING
)
// Default margin until it is re-set below (either set immediately or after Layout)
(getLayoutParams() as ViewGroup.MarginLayoutParams).setMargins(
(layoutParams as ViewGroup.MarginLayoutParams).setMargins(
0,
0,
0,
DEFAULT_ONBOARDING_FINISH_MARGIN
)
}
view?.homeAppBar?.apply {
view?.toolbarLayout?.apply {
visibility = View.VISIBLE
// If the Layout rendering pass was completed, then we have a |height| value,
// if it wasn't completed then we have 0.
if (height == 0) {
// Set the bottom margin after the toolbar height is defined during Layout
doOnLayout {
val toolbarLayoutHeight = view.toolbarLayout.height
view.sessionControlRecyclerView?.apply {
(layoutParams as ViewGroup.MarginLayoutParams).setMargins(
0,
0,
0,
toolbarLayoutHeight - SESSION_CONTROL_VIEW_PADDING
)
}
}
} else {
view.sessionControlRecyclerView?.apply {
(layoutParams as ViewGroup.MarginLayoutParams).setMargins(
0,
0,
0,
height - SESSION_CONTROL_VIEW_PADDING
)
}
}
}
view?.toolbarLayout?.apply {
// Hide the onion pattern during Onboarding, too.
view?.onion_pattern_image?.apply {
visibility = if (onboarding.userHasBeenOnboarded()) {
View.VISIBLE
} else {
View.GONE
}
}
view?.homeAppBar?.apply {
visibility = View.VISIBLE
children.forEach {
(it.layoutParams as AppBarLayout.LayoutParams).scrollFlags =
if (onboarding.userHasBeenOnboarded()) {
AppBarLayout.LayoutParams.SCROLL_FLAG_NO_SCROLL
} else {
AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
}
}
}
}
}
// This function should be paired with adjustHomeFragmentView()
private fun showSessionControlView(view: View?) {
view?.sessionControlRecyclerView?.apply {
visibility = View.VISIBLE
}
}
@Suppress("LongMethod", "ComplexMethod")
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
......@@ -675,9 +751,10 @@ class HomeFragment : Fragment() {
homeFragmentStore.dispatch(HomeFragmentAction.ModeChange(mode))
val localView = view
adjustHomeFragmentView(mode, view)
if (localView != null) {
adjustHomeFragmentView(mode, localView)
updateSessionControlView(localView)
showSessionControlView(localView)
}
}
......@@ -790,6 +867,11 @@ class HomeFragment : Fragment() {
mode = currentMode.getCurrentMode()
)
)
adjustHomeFragmentView(
currentMode.getCurrentMode(),
view
)
showSessionControlView(view)
}
}
......
......@@ -4,12 +4,10 @@
package org.mozilla.fenix.home.sessioncontrol.viewholders
import android.text.method.LinkMovementMethod
import android.view.View
import androidx.recyclerview.widget.RecyclerView
import kotlinx.android.synthetic.main.private_browsing_description.view.*
import org.mozilla.fenix.R
import org.mozilla.fenix.ext.addUnderline
import org.mozilla.fenix.home.sessioncontrol.TabSessionInteractor
class PrivateBrowsingDescriptionViewHolder(
......@@ -18,18 +16,18 @@ class PrivateBrowsingDescriptionViewHolder(
) : RecyclerView.ViewHolder(view) {
init {
val resources = view.resources
val appName = resources.getString(R.string.app_name)
view.private_session_description.text = resources.getString(
R.string.private_browsing_placeholder_description_2, appName
)
with(view.private_session_common_myths) {
movementMethod = LinkMovementMethod.getInstance()
addUnderline()
setOnClickListener {
interactor.onPrivateBrowsingLearnMoreClicked()
}
}
// val resources = view.resources
// val appName = resources.getString(R.string.app_name)
// view.private_session_description.text = resources.getString(
// R.string.private_browsing_placeholder_description_2, appName
// )
// with(view.private_session_common_myths) {
// movementMethod = LinkMovementMethod.getInstance()
// addUnderline()
// setOnClickListener {
// interactor.onPrivateBrowsingLearnMoreClicked()
// }
// }
}
companion object {
......
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="778dp"
android:height="243dp"
android:viewportWidth="778"
android:viewportHeight="243">
<path
android:pathData="M122.853,121m-39,0a39,39 0,1 1,78 0a39,39 0,1 1,-78 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M122.353,120.5m-29.5,0a29.5,29.5 0,1 1,59 0a29.5,29.5 0,1 1,-59 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M122.353,120.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M122.353,120.5m-11.5,0a11.5,11.5 0,1 1,23 0a11.5,11.5 0,1 1,-23 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M250.853,202m-39,0a39,39 0,1 1,78 0a39,39 0,1 1,-78 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M250.353,201.5m-29.5,0a29.5,29.5 0,1 1,59 0a29.5,29.5 0,1 1,-59 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M251.353,202.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M250.353,201.5m-11.5,0a11.5,11.5 0,1 1,23 0a11.5,11.5 0,1 1,-23 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M325.853,41m-39,0a39,39 0,1 1,78 0a39,39 0,1 1,-78 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M325.353,41.5m-29.5,0a29.5,29.5 0,1 1,59 0a29.5,29.5 0,1 1,-59 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M325.353,41.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M325.353,41.5m-11.5,0a11.5,11.5 0,1 1,23 0a11.5,11.5 0,1 1,-23 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M579.853,202m-39,0a39,39 0,1 1,78 0a39,39 0,1 1,-78 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M579.353,201.5m-29.5,0a29.5,29.5 0,1 1,59 0a29.5,29.5 0,1 1,-59 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M580.353,202.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M579.353,201.5m-11.5,0a11.5,11.5 0,1 1,23 0a11.5,11.5 0,1 1,-23 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M653.853,41m-39,0a39,39 0,1 1,78 0a39,39 0,1 1,-78 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M653.353,41.5m-29.5,0a29.5,29.5 0,1 1,59 0a29.5,29.5 0,1 1,-59 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M654.353,41.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M653.353,41.5m-11.5,0a11.5,11.5 0,1 1,23 0a11.5,11.5 0,1 1,-23 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M452.853,121m-39,0a39,39 0,1 1,78 0a39,39 0,1 1,-78 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M453.353,120.5m-29.5,0a29.5,29.5 0,1 1,59 0a29.5,29.5 0,1 1,-59 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M453.353,120.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M453.353,120.5m-11.5,0a11.5,11.5 0,1 1,23 0a11.5,11.5 0,1 1,-23 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M415.853,202m-39,0a39,39 0,1 1,78 0a39,39 0,1 1,-78 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M415.353,201.5m-29.5,0a29.5,29.5 0,1 1,59 0a29.5,29.5 0,1 1,-59 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M415.353,202.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M415.353,201.5m-11.5,0a11.5,11.5 0,1 1,23 0a11.5,11.5 0,1 1,-23 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M489.853,41m-39,0a39,39 0,1 1,78 0a39,39 0,1 1,-78 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M490.353,41.5m-29.5,0a29.5,29.5 0,1 1,59 0a29.5,29.5 0,1 1,-59 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M490.353,41.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M490.353,41.5m-11.5,0a11.5,11.5 0,1 1,23 0a11.5,11.5 0,1 1,-23 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M618.853,121m-39,0a39,39 0,1 1,78 0a39,39 0,1 1,-78 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M618.353,120.5m-29.5,0a29.5,29.5 0,1 1,59 0a29.5,29.5 0,1 1,-59 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M618.353,120.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M618.353,120.5m-11.5,0a11.5,11.5 0,1 1,23 0a11.5,11.5 0,1 1,-23 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M86.853,202m-39,0a39,39 0,1 1,78 0a39,39 0,1 1,-78 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M86.353,201.5m-29.5,0a29.5,29.5 0,1 1,59 0a29.5,29.5 0,1 1,-59 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M87.353,202.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M86.353,201.5m-11.5,0a11.5,11.5 0,1 1,23 0a11.5,11.5 0,1 1,-23 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M159.853,41m-39,0a39,39 0,1 1,78 0a39,39 0,1 1,-78 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M159.353,41.5m-29.5,0a29.5,29.5 0,1 1,59 0a29.5,29.5 0,1 1,-59 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M160.353,41.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M159.353,41.5m-11.5,0a11.5,11.5 0,1 1,23 0a11.5,11.5 0,1 1,-23 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M286.853,121m-39,0a39,39 0,1 1,78 0a39,39 0,1 1,-78 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M287.353,120.5m-29.5,0a29.5,29.5 0,1 1,59 0a29.5,29.5 0,1 1,-59 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M287.353,120.5m-20.5,0a20.5,20.5 0,1 1,41 0a20.5,20.5 0,1 1,-41 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M287.353,120.5m-11.5,0a11.5,11.5 0,1 1,23 0a11.5,11.5 0,1 1,-23 0"
android:strokeAlpha="0.1"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"/>
<path
android:pathData="M332.853,241C354.392,241 371.853,223.539 371.853,202C371.853,180.461 354.392,163 332.853,163C311.314,163 293.853,180.461 293.853,202C293.853,223.539 311.314,241 332.853,241Z"
android:strokeAlpha="0.1"
android:strokeLineJoin="round"
android:strokeWidth="4"
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:fillType="evenOdd"
android:fillAlpha="0.1"
android:strokeLineCap="round"/>