From ab34e31f14a5bf8bfc8c69c65349b68fa0e2ee3e Mon Sep 17 00:00:00 2001 From: alexzatsepin Date: Mon, 17 Apr 2017 18:38:41 +0300 Subject: [PATCH 1/2] [andorid] Make 'Ads' view clickable in native ad in PP --- .../src/com/mapswithme/maps/ads/FacebookNativeAd.java | 8 ++++++++ .../src/com/mapswithme/maps/ads/MopubNativeAd.java | 8 ++++++++ android/src/com/mapswithme/maps/ads/MwmNativeAd.java | 7 +++++++ .../src/com/mapswithme/maps/ads/MyTargetNativeAd.java | 8 ++++++++ .../maps/widget/placepage/BannerController.java | 11 +++++++++++ android/src/com/mapswithme/util/Utils.java | 5 +++++ 6 files changed, 47 insertions(+) diff --git a/android/src/com/mapswithme/maps/ads/FacebookNativeAd.java b/android/src/com/mapswithme/maps/ads/FacebookNativeAd.java index 02f7391c60..318dd9bced 100644 --- a/android/src/com/mapswithme/maps/ads/FacebookNativeAd.java +++ b/android/src/com/mapswithme/maps/ads/FacebookNativeAd.java @@ -1,6 +1,7 @@ package com.mapswithme.maps.ads; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.view.View; import android.widget.ImageView; @@ -75,4 +76,11 @@ class FacebookNativeAd extends CachedMwmNativeAd { return Providers.FACEBOOK; } + + @Nullable + @Override + public String getPrivacyInfoUrl() + { + return mAd.getAdChoicesLinkUrl(); + } } diff --git a/android/src/com/mapswithme/maps/ads/MopubNativeAd.java b/android/src/com/mapswithme/maps/ads/MopubNativeAd.java index c9690a75fd..ebe8eb355d 100644 --- a/android/src/com/mapswithme/maps/ads/MopubNativeAd.java +++ b/android/src/com/mapswithme/maps/ads/MopubNativeAd.java @@ -1,6 +1,7 @@ package com.mapswithme.maps.ads; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.text.TextUtils; import android.view.View; import android.widget.ImageView; @@ -74,4 +75,11 @@ class MopubNativeAd extends CachedMwmNativeAd { mNativeAd.prepare(view); } + + @Nullable + @Override + public String getPrivacyInfoUrl() + { + return mAd.getPrivacyInformationIconClickThroughUrl(); + } } diff --git a/android/src/com/mapswithme/maps/ads/MwmNativeAd.java b/android/src/com/mapswithme/maps/ads/MwmNativeAd.java index fd25612e95..3ebeb6715c 100644 --- a/android/src/com/mapswithme/maps/ads/MwmNativeAd.java +++ b/android/src/com/mapswithme/maps/ads/MwmNativeAd.java @@ -1,6 +1,7 @@ package com.mapswithme.maps.ads; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.view.View; /** @@ -44,4 +45,10 @@ public interface MwmNativeAd */ @NonNull String getProvider(); + + /** + * Returns a privacy information url, or null if not set. + */ + @Nullable + String getPrivacyInfoUrl(); } diff --git a/android/src/com/mapswithme/maps/ads/MyTargetNativeAd.java b/android/src/com/mapswithme/maps/ads/MyTargetNativeAd.java index 44afdefd1e..10f81e6050 100644 --- a/android/src/com/mapswithme/maps/ads/MyTargetNativeAd.java +++ b/android/src/com/mapswithme/maps/ads/MyTargetNativeAd.java @@ -1,6 +1,7 @@ package com.mapswithme.maps.ads; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.view.View; import android.widget.ImageView; @@ -82,4 +83,11 @@ class MyTargetNativeAd extends CachedMwmNativeAd { return Providers.MY_TARGET; } + + @Nullable + @Override + public String getPrivacyInfoUrl() + { + return null; + } } diff --git a/android/src/com/mapswithme/maps/widget/placepage/BannerController.java b/android/src/com/mapswithme/maps/widget/placepage/BannerController.java index 27fd71546d..40e9457362 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/BannerController.java +++ b/android/src/com/mapswithme/maps/widget/placepage/BannerController.java @@ -6,6 +6,7 @@ import android.content.Context; import android.content.res.Resources; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.text.TextUtils; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; @@ -22,6 +23,7 @@ import com.mapswithme.maps.ads.NativeAdListener; import com.mapswithme.util.Config; import com.mapswithme.util.ThemeUtils; import com.mapswithme.util.UiUtils; +import com.mapswithme.util.Utils; import com.mapswithme.util.log.Logger; import com.mapswithme.util.log.LoggerFactory; import com.mapswithme.util.statistics.Statistics; @@ -94,6 +96,15 @@ final class BannerController mActionSmall = (TextView) bannerView.findViewById(R.id.tv__action_small); mActionLarge = (TextView) bannerView.findViewById(R.id.tv__action_large); mAds = bannerView.findViewById(R.id.tv__ads); + mAds.setOnClickListener(new View.OnClickListener() + { + @Override + public void onClick(View v) + { + if (mCurrentAd != null && !TextUtils.isEmpty(mCurrentAd.getPrivacyInfoUrl())) + Utils.openUrl(mFrame.getContext(), mCurrentAd.getPrivacyInfoUrl()); + } + }); loader.setAdListener(new MyNativeAdsListener()); mAdsLoader = loader; mAdTracker = tracker; diff --git a/android/src/com/mapswithme/util/Utils.java b/android/src/com/mapswithme/util/Utils.java index bbf49491de..45040931aa 100644 --- a/android/src/com/mapswithme/util/Utils.java +++ b/android/src/com/mapswithme/util/Utils.java @@ -202,6 +202,11 @@ public class Utils activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(Constants.Url.TWITTER_MAPSME_HTTP))); } + public static void openUrl(@NonNull Context activity, @NonNull String url) + { + activity.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url))); + } + public static void sendSupportMail(@NonNull Activity activity, @NonNull String subject) { LoggerFactory.INSTANCE.zipLogs(new OnZipCompletedCallback(activity, subject)); From c1a9559c737296fa1997c48884499702d7b389a7 Mon Sep 17 00:00:00 2001 From: alexzatsepin Date: Mon, 17 Apr 2017 19:07:24 +0300 Subject: [PATCH 2/2] [android] Expanded the tap area for 'Ads' view in native ad --- .../widget/placepage/BannerController.java | 17 ++++++++++++++-- android/src/com/mapswithme/util/UiUtils.java | 20 +++++++++++++++++++ 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/android/src/com/mapswithme/maps/widget/placepage/BannerController.java b/android/src/com/mapswithme/maps/widget/placepage/BannerController.java index 40e9457362..6fb12554f5 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/BannerController.java +++ b/android/src/com/mapswithme/maps/widget/placepage/BannerController.java @@ -101,10 +101,11 @@ final class BannerController @Override public void onClick(View v) { - if (mCurrentAd != null && !TextUtils.isEmpty(mCurrentAd.getPrivacyInfoUrl())) - Utils.openUrl(mFrame.getContext(), mCurrentAd.getPrivacyInfoUrl()); + handlePrivacyInfoUrl(); } }); + Resources res = mFrame.getResources(); + UiUtils.expandTouchAreaForView(mAds, (int) res.getDimension(R.dimen.margin_quarter_plus)); loader.setAdListener(new MyNativeAdsListener()); mAdsLoader = loader; mAdTracker = tracker; @@ -118,6 +119,18 @@ final class BannerController }); } + private void handlePrivacyInfoUrl() + { + if (mCurrentAd == null) + return; + + String privacyUrl = mCurrentAd.getPrivacyInfoUrl(); + if (TextUtils.isEmpty(privacyUrl)) + return; + + Utils.openUrl(mFrame.getContext(), privacyUrl); + } + private void setErrorStatus(boolean value) { mError = value; diff --git a/android/src/com/mapswithme/util/UiUtils.java b/android/src/com/mapswithme/util/UiUtils.java index 38a0f06e6a..e1f09e13a8 100644 --- a/android/src/com/mapswithme/util/UiUtils.java +++ b/android/src/com/mapswithme/util/UiUtils.java @@ -29,6 +29,7 @@ import android.text.TextUtils; import android.view.Gravity; import android.view.MotionEvent; import android.view.Surface; +import android.view.TouchDelegate; import android.view.View; import android.view.ViewGroup; import android.view.ViewTreeObserver; @@ -469,6 +470,25 @@ public final class UiUtils view.setBackgroundResource(getStyledResourceId(view.getContext(), res)); } + public static void expandTouchAreaForView(@NonNull final View view, final int extraArea) + { + final View parent = (View) view.getParent(); + parent.post(new Runnable() + { + @Override + public void run() + { + Rect rect = new Rect(); + view.getHitRect(rect); + rect.top -= extraArea; + rect.left -= extraArea; + rect.right += extraArea; + rect.bottom += extraArea; + parent.setTouchDelegate(new TouchDelegate(rect, view)); + } + }); + } + // utility class private UiUtils() {} }