forked from organicmaps/organicmaps
[android] Implemented 'Explanation' state in ads removal dialog
This commit is contained in:
parent
7f8f5d3231
commit
4cc362ad1e
11 changed files with 124 additions and 9 deletions
7
android/res/drawable/dot.xml
Normal file
7
android/res/drawable/dot.xml
Normal 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>
|
7
android/res/drawable/dot_night.xml
Normal file
7
android/res/drawable/dot_night.xml
Normal 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>
|
|
@ -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>
|
||||
|
|
14
android/res/layout/ads_removal_explanation_button.xml
Normal file
14
android/res/layout/ads_removal_explanation_button.xml
Normal 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"/>
|
37
android/res/layout/ads_removal_explanation_items.xml
Normal file
37
android/res/layout/ads_removal_explanation_items.xml
Normal 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>
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Add table
Reference in a new issue