diff --git a/OsmAnd/res/layout/wikivoyage_base_card.xml b/OsmAnd/res/layout/wikivoyage_open_beta_card.xml
similarity index 93%
rename from OsmAnd/res/layout/wikivoyage_base_card.xml
rename to OsmAnd/res/layout/wikivoyage_open_beta_card.xml
index 53aa729cd3..833e48bb06 100644
--- a/OsmAnd/res/layout/wikivoyage_base_card.xml
+++ b/OsmAnd/res/layout/wikivoyage_open_beta_card.xml
@@ -42,7 +42,7 @@
android:layout_marginLeft="@dimen/list_content_padding"
android:layout_marginRight="@dimen/list_content_padding"
android:layout_marginStart="@dimen/list_content_padding"
- tools:text="Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard." />
+ tools:text="@string/welcome_to_open_beta_description" />
+ android:textColor="@color/primary_text_dark"
+ tools:text="@string/start_editing_card_image_text" />
@@ -51,7 +51,7 @@
android:layout_marginRight="@dimen/list_content_padding"
android:layout_marginStart="@dimen/list_content_padding"
android:layout_marginTop="@dimen/list_content_padding"
- android:text="@string/start_editing_card_description" />
+ tools:text="@string/start_editing_card_description" />
items = new ArrayList<>();
- BaseTravelCard openBeta = new BaseTravelCard.Builder()
- .setLayoutId(R.layout.wikivoyage_base_card)
- .setBackgroundImage(getIconsCache().getIcon(R.drawable.img_help_wikivoyage_articles))
- .setLeftButtonText(getString(R.string.get_unlimited_access))
- .setDescription(getString(R.string.welcome_to_open_beta_description))
- .setTitle(getString(R.string.welcome_to_open_beta))
- .create();
- items.add(openBeta);
-
- BaseTravelCard startEditing = new BaseTravelCard.Builder()
- .setLayoutId(R.layout.wikivoyage_start_editing_card)
- .setBackgroundImage(getIconsCache().getIcon(R.drawable.img_help_wikivoyage_contribute))
- .setLeftButtonText(getString(R.string.start_editing))
- .setDescription(getString(R.string.start_editing_card_description))
- .create();
- items.add(startEditing);
+ BaseTravelCard openBetaTravelCard = new OpenBetaTravelCard(getMyActivity());
+ BaseTravelCard startEditingTravelCard = new StartEditingTravelCard(getMyActivity());
+ items.add(openBetaTravelCard);
+ items.add(startEditingTravelCard);
for (BaseTravelCard item : items) {
item.inflate(app, linearLayout, nightMode);
diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/BaseTravelCard.java b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/BaseTravelCard.java
index 47ace4950d..0f3a43df2c 100644
--- a/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/BaseTravelCard.java
+++ b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/BaseTravelCard.java
@@ -3,231 +3,82 @@ package net.osmand.plus.wikivoyage.explore.travelcards;
import android.graphics.drawable.Drawable;
import android.support.annotation.ColorInt;
import android.support.annotation.ColorRes;
+import android.support.annotation.DrawableRes;
import android.support.annotation.LayoutRes;
+import android.support.annotation.StringRes;
import android.support.v4.content.ContextCompat;
-import android.view.ContextThemeWrapper;
-import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.TextView;
import net.osmand.plus.OsmandApplication;
-import net.osmand.plus.R;
+import net.osmand.plus.activities.OsmandActionBarActivity;
-public class BaseTravelCard {
+public abstract class BaseTravelCard {
- private static final int INVALID_POSITION = -1;
- private static final int DEFAULT_VALUE = -1;
+ protected static final int INVALID_POSITION = -1;
+ protected static final int DEFAULT_VALUE = -1;
protected View view;
- private View.OnClickListener onLeftButtonClickListener;
- private View.OnClickListener onRightButtonClickListener;
+ protected OsmandActionBarActivity activity;
- @LayoutRes
- protected int layoutId;
- @ColorRes
- protected int bottomDividerColorId;
+ protected int position = INVALID_POSITION;
- private Object tag;
- private OsmandApplication app;
+ public abstract void inflate(OsmandApplication app, ViewGroup container, boolean nightMode);
- protected Drawable image;
- protected String rightBottomButtonText;
- protected String leftBottomButtonText;
- protected String description;
- protected String title;
-
- protected int position;
-
- public View getView() {
- return view;
- }
-
- public Object getTag() {
- return tag;
- }
-
- public BaseTravelCard(View view,
- @LayoutRes int layoutId,
- Object tag,
- Drawable image,
- View.OnClickListener onLeftButtonClickListener,
- View.OnClickListener onRightButtonClickListener,
- int position,
- String rightBottomButtonText,
- String leftBottomButtonText,
- @ColorRes int bottomDividerColorId,
- String description,
- String title) {
- this.view = view;
- this.layoutId = layoutId;
- this.image = image;
- this.tag = tag;
- this.onLeftButtonClickListener = onLeftButtonClickListener;
- this.onRightButtonClickListener = onRightButtonClickListener;
- this.position = position;
- this.rightBottomButtonText = rightBottomButtonText;
- this.leftBottomButtonText = leftBottomButtonText;
- this.bottomDividerColorId = bottomDividerColorId;
- this.description = description;
- this.title = title;
- }
-
- protected BaseTravelCard() {
-
- }
-
- public void inflate(OsmandApplication app, ViewGroup container, boolean nightMode) {
- View view = getView(app, container, nightMode);
- if (image != null) {
- ImageView imageView = (ImageView) view.findViewById(R.id.background_image);
- imageView.setImageDrawable(image);
- }
- if (title != null) {
- ((TextView) view.findViewById(R.id.title)).setText(title);
- }
- if (description != null) {
- ((TextView) view.findViewById(R.id.description)).setText(description);
- }
- if (bottomDividerColorId != DEFAULT_VALUE) {
- view.findViewById(R.id.bottom_divider).setBackgroundColor(getResolvedColor(bottomDividerColorId));
- }
- if (leftBottomButtonText != null) {
- view.findViewById(R.id.left_bottom_button).setOnClickListener(onLeftButtonClickListener);
- ((TextView) view.findViewById(R.id.left_bottom_button_text)).setText(leftBottomButtonText);
- }
- if (rightBottomButtonText != null) {
-
- if (bottomDividerColorId != DEFAULT_VALUE) {
- View buttonsDivider = view.findViewById(R.id.bottom_buttons_divider);
- buttonsDivider.setVisibility(View.VISIBLE);
- buttonsDivider.setBackgroundColor(getResolvedColor(bottomDividerColorId));
- }
-
- View rightButton = view.findViewById(R.id.right_bottom_button);
- rightButton.setVisibility(View.VISIBLE);
- rightButton.setOnClickListener(onRightButtonClickListener);
- ((TextView) rightButton.findViewById(R.id.right_bottom_button_text)).setText(rightBottomButtonText);
- }
- if (position != INVALID_POSITION) {
- container.addView(view, position);
- } else {
- container.addView(view);
- }
- }
-
- private View getView(OsmandApplication app, ViewGroup parent, boolean nightMode) {
- if (view != null) {
- return view;
- }
- this.app = app;
- if (layoutId != DEFAULT_VALUE) {
- final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
- return view = LayoutInflater.from(new ContextThemeWrapper(app, themeRes))
- .inflate(layoutId, parent, false);
- }
- throw new RuntimeException("BaseTravelCard must have specified view or layoutId.");
- }
+ protected abstract View getView(OsmandApplication app, ViewGroup parent, boolean nightMode);
@ColorInt
protected int getResolvedColor(@ColorRes int colorId) {
- return ContextCompat.getColor(app, colorId);
+ return ContextCompat.getColor(activity, colorId);
}
- public static class Builder {
+ protected Drawable getIcon(@DrawableRes int drawableRes, @ColorRes int color) {
+ return activity.getMyApplication().getIconsCache().getIcon(drawableRes, color);
+ }
- protected View customView;
- protected View.OnClickListener onLeftButtonClickListener;
- protected View.OnClickListener onRightButtonClickListener;
+ protected Drawable getBackgroundIcon(@DrawableRes int drawableRes) {
+ return activity.getMyApplication().getIconsCache().getIcon(drawableRes);
+ }
- @LayoutRes
- protected int layoutId = DEFAULT_VALUE;
- @ColorRes
- protected int dividerColorId = DEFAULT_VALUE;
+ @StringRes
+ protected int getTitleId() {
+ return DEFAULT_VALUE;
+ }
- protected Drawable image;
- protected String rightBottomButtonText;
- protected String leftBottomButtonText;
- protected String description;
- protected String title;
- protected Object tag;
+ @StringRes
+ protected int getDescriptionId() {
+ return DEFAULT_VALUE;
+ }
- protected int position = INVALID_POSITION;
+ @StringRes
+ protected int getLeftButtonTextId() {
+ return DEFAULT_VALUE;
+ }
- public Builder setCustomView(View customView) {
- this.customView = customView;
- return this;
- }
+ protected void onLeftButtonClickAction() {
- public Builder setTag(Object tag) {
- this.tag = tag;
- return this;
- }
+ }
- public Builder setLayoutId(@LayoutRes int layoutId) {
- this.layoutId = layoutId;
- return this;
- }
+ @StringRes
+ protected int getRightButtonTextId() {
+ return DEFAULT_VALUE;
+ }
- public Builder setBackgroundImage(Drawable image) {
- this.image = image;
- return this;
- }
+ protected void onRightButtonClickAction() {
- public Builder setOnLeftButtonClickListener(View.OnClickListener onLeftButtonClickListener) {
- this.onLeftButtonClickListener = onLeftButtonClickListener;
- return this;
- }
+ }
- public Builder setOnRightButtonClickListener(View.OnClickListener onRightButtonClickListener) {
- this.onRightButtonClickListener = onRightButtonClickListener;
- return this;
- }
+ @ColorRes
+ protected int getBottomDividerColorId() {
+ return DEFAULT_VALUE;
+ }
- public Builder setRightButtonText(String rightBottomButtonText) {
- this.rightBottomButtonText = rightBottomButtonText;
- return this;
- }
+ @LayoutRes
+ protected int getLayoutId() {
+ return DEFAULT_VALUE;
+ }
- public Builder setLeftButtonText(String leftBottomButtonText) {
- this.leftBottomButtonText = leftBottomButtonText;
- return this;
- }
-
- public Builder setTitle(String title) {
- this.title = title;
- return this;
- }
-
- public Builder setDescription(String description) {
- this.description = description;
- return this;
- }
-
- public Builder setPosition(int position) {
- this.position = position;
- return this;
- }
-
- public Builder setBottomDividerColorId(@ColorRes int dividerColorId) {
- this.dividerColorId = dividerColorId;
- return this;
- }
-
- public BaseTravelCard create() {
- return new BaseTravelCard(customView,
- layoutId,
- tag,
- image,
- onLeftButtonClickListener,
- onRightButtonClickListener,
- position,
- rightBottomButtonText,
- leftBottomButtonText,
- dividerColorId,
- description,
- title);
- }
+ protected boolean isNightMode() {
+ return !activity.getMyApplication().getSettings().isLightContent();
}
}
diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/OpenBetaTravelCard.java b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/OpenBetaTravelCard.java
new file mode 100644
index 0000000000..6e1ef1a1ba
--- /dev/null
+++ b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/OpenBetaTravelCard.java
@@ -0,0 +1,90 @@
+package net.osmand.plus.wikivoyage.explore.travelcards;
+
+import android.graphics.drawable.Drawable;
+import android.view.ContextThemeWrapper;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import net.osmand.plus.OsmandApplication;
+import net.osmand.plus.R;
+import net.osmand.plus.activities.OsmandActionBarActivity;
+import net.osmand.plus.dialogs.ChoosePlanDialogFragment;
+
+public class OpenBetaTravelCard extends BaseTravelCard {
+
+
+ public OpenBetaTravelCard(OsmandActionBarActivity activity) {
+ this.activity = activity;
+ }
+
+ public OpenBetaTravelCard(OsmandActionBarActivity activity, int position) {
+ this.activity = activity;
+ this.position = position;
+ }
+
+ @Override
+ public void inflate(OsmandApplication app, ViewGroup container, boolean nightMode) {
+ View view = getView(app, container, isNightMode());
+ ImageView imageView = (ImageView) view.findViewById(R.id.background_image);
+ imageView.setImageDrawable(getBackgroundIcon(R.drawable.img_help_wikivoyage_articles));
+ ((TextView) view.findViewById(R.id.title)).setText(getTitleId());
+ ((TextView) view.findViewById(R.id.description)).setText(getDescriptionId());
+
+ ((TextView) view.findViewById(R.id.left_bottom_button_text)).setText(getLeftButtonTextId());
+
+ view.findViewById(R.id.left_bottom_button).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onLeftButtonClickAction();
+ }
+ });
+ if (position != INVALID_POSITION) {
+ container.addView(view, position);
+ } else {
+ container.addView(view);
+ }
+ }
+
+ protected View getView(OsmandApplication app, ViewGroup parent, boolean nightMode) {
+ if (view != null) {
+ return view;
+ }
+ final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
+ return view = LayoutInflater.from(new ContextThemeWrapper(app, themeRes))
+ .inflate(getLayoutId(), parent, false);
+ }
+
+ @Override
+ protected int getTitleId() {
+ return R.string.welcome_to_open_beta;
+ }
+
+ @Override
+ protected int getDescriptionId() {
+ return R.string.welcome_to_open_beta_description;
+ }
+
+ @Override
+ protected Drawable getBackgroundIcon(int drawableRes) {
+ return super.getBackgroundIcon(drawableRes);
+ }
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.wikivoyage_open_beta_card;
+ }
+
+ @Override
+ protected int getLeftButtonTextId() {
+ return R.string.get_unlimited_access;
+ }
+
+ @Override
+ protected void onLeftButtonClickAction() {
+ ChoosePlanDialogFragment.showFreeVersionInstance(activity.getSupportFragmentManager());
+
+ }
+}
diff --git a/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/StartEditingTravelCard.java b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/StartEditingTravelCard.java
new file mode 100644
index 0000000000..5d0d89b689
--- /dev/null
+++ b/OsmAnd/src/net/osmand/plus/wikivoyage/explore/travelcards/StartEditingTravelCard.java
@@ -0,0 +1,96 @@
+package net.osmand.plus.wikivoyage.explore.travelcards;
+
+
+import android.graphics.drawable.Drawable;
+import android.net.Uri;
+import android.support.customtabs.CustomTabsIntent;
+import android.support.v4.content.ContextCompat;
+import android.view.ContextThemeWrapper;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+
+import net.osmand.plus.OsmandApplication;
+import net.osmand.plus.R;
+import net.osmand.plus.activities.OsmandActionBarActivity;
+
+public class StartEditingTravelCard extends BaseTravelCard {
+
+ public StartEditingTravelCard(OsmandActionBarActivity activity) {
+ this.activity = activity;
+
+ }
+
+ public StartEditingTravelCard(OsmandActionBarActivity activity, int position) {
+ this.activity = activity;
+ this.position = position;
+ }
+
+ @Override
+ public void inflate(OsmandApplication app, ViewGroup container, boolean nightMode) {
+ View view = getView(app, container, isNightMode());
+ ImageView imageView = (ImageView) view.findViewById(R.id.background_image);
+ imageView.setImageDrawable(getBackgroundIcon(R.drawable.img_help_wikivoyage_contribute));
+ ((TextView) view.findViewById(R.id.title)).setText(getTitleId());
+ ((TextView) view.findViewById(R.id.description)).setText(getDescriptionId());
+
+ ((TextView) view.findViewById(R.id.left_bottom_button_text)).setText(getLeftButtonTextId());
+
+ view.findViewById(R.id.left_bottom_button).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ onLeftButtonClickAction();
+ }
+ });
+ if (position != INVALID_POSITION) {
+ container.addView(view, position);
+ } else {
+ container.addView(view);
+ }
+ }
+
+ protected View getView(OsmandApplication app, ViewGroup parent, boolean nightMode) {
+ if (view != null) {
+ return view;
+ }
+ final int themeRes = nightMode ? R.style.OsmandDarkTheme : R.style.OsmandLightTheme;
+ return view = LayoutInflater.from(new ContextThemeWrapper(app, themeRes))
+ .inflate(getLayoutId(), parent, false);
+ }
+
+ @Override
+ protected int getTitleId() {
+ return R.string.start_editing_card_image_text;
+ }
+
+ @Override
+ protected int getDescriptionId() {
+ return R.string.start_editing_card_description;
+ }
+
+ @Override
+ protected Drawable getBackgroundIcon(int drawableRes) {
+ return super.getBackgroundIcon(drawableRes);
+ }
+
+ @Override
+ protected int getLayoutId() {
+ return R.layout.wikivoyage_start_editing_card;
+ }
+
+ @Override
+ protected int getLeftButtonTextId() {
+ return R.string.start_editing;
+ }
+
+ @Override
+ protected void onLeftButtonClickAction() {
+ CustomTabsIntent customTabsIntent = new CustomTabsIntent.Builder()
+ .setToolbarColor(ContextCompat.getColor(activity, isNightMode() ? R.color.actionbar_dark_color : R.color.actionbar_light_color))
+ .build();
+ String text = "https://" + activity.getMyApplication().getLanguage().toLowerCase() + ".m.wikivoyage.org";
+ customTabsIntent.launchUrl(activity, Uri.parse(text));
+ }
+}