[android] Implemented 'Explanation' state in ads removal dialog

This commit is contained in:
Alexander Zatsepin 2018-09-20 15:11:51 +03:00 committed by yoksnod
parent 7f8f5d3231
commit 4cc362ad1e
11 changed files with 124 additions and 9 deletions

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="@dimen/dot_size" android:height="@dimen/dot_size"/>
<solid android:color="@color/base_accent"/>
</shape>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<size android:width="@dimen/dot_size" android:height="@dimen/dot_size"/>
<solid android:color="@color/base_accent_night"/>
</shape>

View file

@ -22,17 +22,30 @@
android:textAppearance="@style/MwmTextAppearance.Title"
android:visibility="invisible"
tools:visibility="visible"/>
<include
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@id/title"
android:layout_marginTop="@dimen/margin_base"
layout="@layout/ads_removal_explanation_items"/>
<include
layout="@layout/ads_removal_pay_button_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@id/title"
android:layout_marginTop="@dimen/margin_double_plus"/>
android:layout_marginTop="@dimen/margin_base_plus"/>
<include
layout="@layout/ads_removal_progress_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
<include
layout="@layout/ads_removal_progress_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
<include layout="@layout/ads_removal_explanation_button"/>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>

View file

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/explanation"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/why_support"
android:textAllCaps="true"
android:background="?attr/clickableBackground"
android:textAppearance="@style/MwmTextAppearance.Body3"
tools:showIn="@layout/fragment_ads_removal_purchase_dialog"/>

View file

@ -0,0 +1,37 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/explanation_items"
android:orientation="vertical"
android:gravity="start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:showIn="@layout/fragment_ads_removal_purchase_dialog">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableLeft="?attr/accentDot"
android:drawableStart="?attr/accentDot"
android:drawablePadding="@dimen/margin_half"
android:text="@string/why_support_item1"
android:textAppearance="@style/MwmTextAppearance.Body3.Primary"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_half_plus"
android:drawableLeft="?attr/accentDot"
android:drawableStart="?attr/accentDot"
android:drawablePadding="@dimen/margin_half"
android:text="@string/why_support_item2"
android:textAppearance="@style/MwmTextAppearance.Body3.Primary"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/margin_half_plus"
android:drawableLeft="?attr/accentDot"
android:drawableStart="?attr/accentDot"
android:drawablePadding="@dimen/margin_half"
android:text="@string/why_support_item3"
android:textAppearance="@style/MwmTextAppearance.Body3.Primary"/>
</LinearLayout>

View file

@ -22,6 +22,13 @@
android:textAppearance="@style/MwmTextAppearance.Title"
android:visibility="invisible"
tools:visibility="visible"/>
<include
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@id/title"
android:layout_marginTop="@dimen/margin_base"
layout="@layout/ads_removal_explanation_items"/>
<ImageView
android:id="@+id/image"
android:layout_centerHorizontal="true"
@ -45,5 +52,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"/>
<include layout="@layout/ads_removal_explanation_button"/>
</RelativeLayout>
</android.support.v4.widget.NestedScrollView>

View file

@ -97,4 +97,5 @@
<attr name="trafficMenuDisabled" format="reference"/>
<attr name="subwayMenuDisabled" format="reference"/>
<attr name="accentTextColorSelector" format="color"/>
<attr name="accentDot" format="reference"/>
</resources>

View file

@ -255,4 +255,5 @@
<!-- Purchases-->
<dimen name="ads_removal_dialog_min_height">508dp</dimen>
<dimen name="ads_removal_pay_button_min_width">252dp</dimen>
<dimen name="dot_size">6dp</dimen>
</resources>

View file

@ -136,6 +136,7 @@
<item name="tipsBgColor">@color/tips_and_triks_bg_night</item>
<item name="tipsPrimaryTextColor">@color/tips_and_triks_primary_text</item>
<item name="tipsSecondaryTextColor">@color/tips_and_triks_secondary_text</item>
<item name="accentDot">@drawable/dot</item>
</style>
<!-- Night theme -->
@ -275,5 +276,6 @@
<item name="tipsBgColor">@color/tips_and_triks_bg</item>
<item name="tipsPrimaryTextColor">@color/tips_and_triks_primary_text_night</item>
<item name="tipsSecondaryTextColor">@color/tips_and_triks_secondary_text_night</item>
<item name="accentDot">@drawable/dot_night</item>
</style>
</resources>

View file

@ -1,8 +1,10 @@
package com.mapswithme.maps.purchase;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.view.View;
import android.widget.RelativeLayout;
import android.widget.TextView;
import com.mapswithme.maps.R;
@ -24,8 +26,9 @@ enum AdsRemovalPaymentState
@Override
void activate(@NonNull AdsRemovalPurchaseDialog dialog)
{
View view = AdsRemovalPaymentState.getDialogViewOrThrow(dialog);
UiUtils.hide(view, R.id.title, R.id.image, R.id.pay_button_container);
View view = getDialogViewOrThrow(dialog);
UiUtils.hide(view, R.id.title, R.id.image, R.id.pay_button_container, R.id.explanation,
R.id.explanation_items);
View progressLayout = view.findViewById(R.id.progress_layout);
TextView message = progressLayout.findViewById(R.id.message);
message.setText(R.string.purchase_loading);
@ -38,11 +41,13 @@ enum AdsRemovalPaymentState
@Override
void activate(@NonNull AdsRemovalPurchaseDialog dialog)
{
View view = AdsRemovalPaymentState.getDialogViewOrThrow(dialog);
UiUtils.hide(view, R.id.progress_layout);
UiUtils.show(view, R.id.title, R.id.image, R.id.pay_button_container);
View view = getDialogViewOrThrow(dialog);
UiUtils.hide(view, R.id.progress_layout, R.id.explanation_items);
UiUtils.show(view, R.id.title, R.id.image, R.id.pay_button_container, R.id.explanation);
TextView title = view.findViewById(R.id.title);
title.setText(R.string.remove_ads_title);
View image = view.findViewById(R.id.image);
alignPayButtonBelow(view, image == null ? R.id.title : R.id.image);
dialog.updateYearlyButton();
}
},
@ -51,7 +56,13 @@ enum AdsRemovalPaymentState
@Override
void activate(@NonNull AdsRemovalPurchaseDialog dialog)
{
View view = getDialogViewOrThrow(dialog);
UiUtils.hide(view, R.id.image, R.id.explanation, R.id.progress_layout);
UiUtils.show(view, R.id.title, R.id.explanation_items, R.id.pay_button_container);
TextView title = view.findViewById(R.id.title);
title.setText(R.string.why_support);
alignPayButtonBelow(view, R.id.explanation_items);
dialog.updateYearlyButton();
}
},
VALIDATION
@ -59,8 +70,9 @@ enum AdsRemovalPaymentState
@Override
void activate(@NonNull AdsRemovalPurchaseDialog dialog)
{
View view = AdsRemovalPaymentState.getDialogViewOrThrow(dialog);
UiUtils.hide(view, R.id.title, R.id.image, R.id.pay_button_container);
View view = getDialogViewOrThrow(dialog);
UiUtils.hide(view, R.id.title, R.id.image, R.id.pay_button_container, R.id.explanation,
R.id.explanation_items);
View progressLayout = view.findViewById(R.id.progress_layout);
TextView message = progressLayout.findViewById(R.id.message);
message.setText(R.string.please_wait);
@ -105,6 +117,13 @@ enum AdsRemovalPaymentState
}
};
private static void alignPayButtonBelow(@NonNull View view, @IdRes int anchor)
{
View payButton = view.findViewById(R.id.pay_button_container);
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) payButton.getLayoutParams();
params.addRule(RelativeLayout.BELOW, anchor);
}
@NonNull
private static View getDialogViewOrThrow(@NonNull DialogFragment dialog)
{

View file

@ -70,6 +70,7 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A
View view = inflater.inflate(R.layout.fragment_ads_removal_purchase_dialog, container, false);
mPayButtonContainer = view.findViewById(R.id.pay_button_container);
mPayButtonContainer.setOnClickListener(v -> onYearlyProductClicked());
view.findViewById(R.id.explanation).setOnClickListener(v -> onExplanationClick());
return view;
}
@ -119,6 +120,11 @@ public class AdsRemovalPurchaseDialog extends BaseMwmDialogFragment implements A
mController.launchPurchaseFlow(details.getProductId());
}
void onExplanationClick()
{
activateState(AdsRemovalPaymentState.EXPLANATION);
}
private void activateState(@NonNull AdsRemovalPaymentState state)
{
if (state == mState)