diff --git a/android/res/layout/place_page_preview.xml b/android/res/layout/place_page_preview.xml index 6531fe7e89..48a9209314 100644 --- a/android/res/layout/place_page_preview.xml +++ b/android/res/layout/place_page_preview.xml @@ -7,7 +7,8 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:gravity="center_vertical" android:background="?cardBackground" - android:paddingTop="@dimen/margin_base"> + android:paddingTop="@dimen/margin_base" + android:paddingBottom="@dimen/margin_quarter"> animateActionButton()); mBannerView = inflateBannerLayout(NativeAdWrapper.UiType.DEFAULT, mContainerView); - mListener = listener; mAdsLoader = loader; mAdTracker = tracker; Resources resources = mBannerView.getResources(); @@ -196,7 +189,7 @@ final class BannerController mError = value; } - boolean hasErrorOccurred() + private boolean hasErrorOccurred() { return mError; } @@ -206,7 +199,7 @@ final class BannerController if (mBanners == null) return; - UiUtils.showIf(!hasErrorOccurred(), mContainerView); + UiUtils.showIf(!hasErrorOccurred() && mCurrentAd != null, mContainerView); if ((mAdsLoader.isAdLoading() || hasErrorOccurred()) && mCurrentAd == null) { @@ -260,7 +253,7 @@ final class BannerController } } - boolean isBannerContainerVisible() + private boolean isBannerContainerVisible() { return UiUtils.isVisible(mContainerView); } @@ -300,11 +293,6 @@ final class BannerController return true; } - int getLastBannerHeight() - { - return mBannerView.getHeight(); - } - private void setFrameHeight(int height) { ViewGroup.LayoutParams lp = mBannerView.getLayoutParams(); @@ -374,11 +362,6 @@ final class BannerController } } - boolean isActionButtonTouched(@NonNull MotionEvent event) - { - return isTouched(mBannerView, event); - } - private void animateActionButton() { View view = mOpened ? mActionLarge : mActionSmall; @@ -407,11 +390,6 @@ final class BannerController return mOpened; } - interface BannerListener - { - void onSizeChanged(); - } - private class MyNativeAdsListener implements NativeAdListener { @Nullable @@ -420,7 +398,7 @@ final class BannerController @Override public void onAdLoaded(@NonNull MwmNativeAd ad) { -/* LOGGER.d(TAG, "onAdLoaded, ad = " + ad); + LOGGER.d("XXX", "onAdLoaded, ad = " + ad); if (mBanners == null) return; @@ -441,18 +419,13 @@ final class BannerController ad.registerView(mBannerView); - // TODO: - -// loadIconAndOpenIfNeeded(ad); + loadIconAndOpenIfNeeded(ad); if (mAdTracker != null) { onChangedVisibility(isBannerContainerVisible()); mAdTracker.onContentObtained(ad.getProvider(), ad.getBannerId()); } - - if (mListener != null && mOpened) - mListener.onSizeChanged();*/ } @Override @@ -465,9 +438,6 @@ final class BannerController setErrorStatus(isNotCached); updateVisibility(); - if (mListener != null && isNotCached) - mListener.onSizeChanged(); - Statistics.INSTANCE.trackPPBannerError(bannerId, provider, error, mOpened ? 1 : 0); } diff --git a/android/src/com/mapswithme/maps/widget/placepage/BottomSheetPlacePageController.java b/android/src/com/mapswithme/maps/widget/placepage/BottomSheetPlacePageController.java index ba4bf919f7..e37508faec 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/BottomSheetPlacePageController.java +++ b/android/src/com/mapswithme/maps/widget/placepage/BottomSheetPlacePageController.java @@ -11,9 +11,13 @@ import android.view.ViewGroup; import com.mapswithme.maps.Framework; import com.mapswithme.maps.R; +import com.mapswithme.maps.ads.CompoundNativeAdLoader; +import com.mapswithme.maps.ads.DefaultAdTracker; import com.mapswithme.maps.bookmarks.data.MapObject; import com.mapswithme.maps.location.LocationHelper; import com.mapswithme.maps.location.LocationListener; +import com.mapswithme.maps.purchase.AdsRemovalPurchaseControllerProvider; +import com.mapswithme.util.NetworkPolicy; import com.mapswithme.util.UiUtils; import com.mapswithme.util.log.Logger; import com.mapswithme.util.log.LoggerFactory; @@ -44,8 +48,12 @@ public class BottomSheetPlacePageController implements PlacePageController, Loca @SuppressWarnings("NullableProblems") @NonNull private Toolbar mToolbar; - private int mLastPeekHeight; private int mViewportMinHeight; + @SuppressWarnings("NullableProblems") + @NonNull + private BannerController mBannerController; + @NonNull + private final AdsRemovalPurchaseControllerProvider mPurchaseControllerProvider; @NonNull private final AnchorBottomSheetBehavior.BottomSheetCallback mSheetCallback = new AnchorBottomSheetBehavior.BottomSheetCallback() @@ -68,6 +76,8 @@ public class BottomSheetPlacePageController implements PlacePageController, Loca Framework.nativeDeactivatePopup(); UiUtils.invisible(mButtonsLayout); } + + setPeekHeight(); } @Override @@ -77,9 +87,11 @@ public class BottomSheetPlacePageController implements PlacePageController, Loca } }; - public BottomSheetPlacePageController(@NonNull Activity activity) + public BottomSheetPlacePageController(@NonNull Activity activity, + @NonNull AdsRemovalPurchaseControllerProvider provider) { mActivity = activity; + mPurchaseControllerProvider = provider; } @Override @@ -94,6 +106,12 @@ public class BottomSheetPlacePageController implements PlacePageController, Loca mPlacePageBehavior = AnchorBottomSheetBehavior.from(mPlacePage); mPlacePageBehavior.addBottomSheetCallback(mSheetCallback); mPlacePage.addOnLayoutChangeListener(this); + + ViewGroup bannerContainer = mPlacePage.findViewById(R.id.banner_container); + DefaultAdTracker tracker = new DefaultAdTracker(); + CompoundNativeAdLoader loader = com.mapswithme.maps.ads.Factory.createCompoundLoader(tracker, tracker); + mBannerController = new BannerController(bannerContainer, loader, tracker, mPurchaseControllerProvider); + mButtonsLayout = mActivity.findViewById(R.id.pp_buttons_layout); ViewGroup buttons = mButtonsLayout.findViewById(R.id.container); mPlacePage.initButtons(buttons); @@ -112,7 +130,7 @@ public class BottomSheetPlacePageController implements PlacePageController, Loca @Override public void openFor(@NonNull MapObject object) { - mPlacePage.setMapObject(object, false, () -> { + mPlacePage.setMapObject(object, false, policy -> { if (object.isExtendedView()) { mPlacePageBehavior.setState(AnchorBottomSheetBehavior.STATE_EXPANDED); @@ -121,12 +139,20 @@ public class BottomSheetPlacePageController implements PlacePageController, Loca UiUtils.show(mButtonsLayout); openPlacePage(); + showBanner(object, policy); }); + mToolbar.setTitle(object.getTitle()); mPlacePageTracker.setMapObject(object); Framework.logLocalAdsEvent(Framework.LocalAdsEventType.LOCAL_ADS_EVENT_OPEN_INFO, object); } + private void showBanner(@NonNull MapObject object, NetworkPolicy policy) + { + boolean canShowBanner = object.getMapObjectType() != MapObject.MY_POSITION && policy.сanUseNetwork(); + mBannerController.updateData(canShowBanner ? object.getBanners() : null); + } + private void openPlacePage() { mPlacePage.post(() -> { @@ -139,9 +165,18 @@ public class BottomSheetPlacePageController implements PlacePageController, Loca private void setPeekHeight() { int peekHeight = getPeekHeight(); - LOGGER.d(TAG, "Peek height = " + peekHeight); - mLastPeekHeight = peekHeight; - mPlacePageBehavior.setPeekHeight(mLastPeekHeight); + if (peekHeight == mPlacePageBehavior.getPeekHeight()) + return; + + if (mPlacePageBehavior.getState() == AnchorBottomSheetBehavior.STATE_SETTLING || + mPlacePageBehavior.getState() == AnchorBottomSheetBehavior.STATE_DRAGGING) + { + LOGGER.d(TAG, "Set new peek height ignored, sheet state inappropriate"); + return; + } + + LOGGER.d(TAG, "Set new peek height = " + peekHeight); + mPlacePageBehavior.setPeekHeight(peekHeight); } private void setPlacePageAnchor() @@ -192,20 +227,14 @@ public class BottomSheetPlacePageController implements PlacePageController, Loca oldTop, int oldRight, int oldBottom) { LOGGER.d(TAG, "Layout changed, current state = " + toString(mPlacePageBehavior.getState())); - if (mLastPeekHeight == 0) + if (mPlacePageBehavior.getPeekHeight() == 0) { - LOGGER.d(TAG, "Layout changed - ignoring, peek height not calculated yet"); + LOGGER.d(TAG, "Layout change ignored, peek height not calculated yet"); return; } updateViewPortRect(); - if (mPlacePageBehavior.getState() != AnchorBottomSheetBehavior.STATE_COLLAPSED) - return; - - if (getPeekHeight() == mLastPeekHeight) - return; - mPlacePage.post(this::setPeekHeight); } @@ -268,16 +297,61 @@ public class BottomSheetPlacePageController implements PlacePageController, Loca if (object == null) return; - mPlacePage.setMapObject(object, true, this::restorePlacePage); + mPlacePage.setMapObject(object, true, policy -> { + restorePlacePage(object, policy); + }); mToolbar.setTitle(object.getTitle()); } - private void restorePlacePage() + private void restorePlacePage(MapObject object, NetworkPolicy policy) { mPlacePage.post(() -> { + UiUtils.show(mButtonsLayout); setPeekHeight(); setPlacePageAnchor(); - UiUtils.show(mButtonsLayout); + showBanner(object, policy); }); } + + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) + { + // No op. + } + + @Override + public void onActivityStarted(Activity activity) + { + mBannerController.attach(); + } + + @Override + public void onActivityResumed(Activity activity) + { + mBannerController.onChangedVisibility(true); + } + + @Override + public void onActivityPaused(Activity activity) + { + mBannerController.onChangedVisibility(false); + } + + @Override + public void onActivityStopped(Activity activity) + { + mBannerController.detach(); + } + + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle outState) + { + // No op. + } + + @Override + public void onActivityDestroyed(Activity activity) + { + // No op. + } } diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageController.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageController.java index 33a09ca982..61726057db 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageController.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageController.java @@ -1,5 +1,6 @@ package com.mapswithme.maps.widget.placepage; +import android.app.Application; import android.os.Bundle; import android.support.annotation.NonNull; @@ -7,7 +8,8 @@ import com.mapswithme.maps.base.Initializable; import com.mapswithme.maps.base.Savable; import com.mapswithme.maps.bookmarks.data.MapObject; -public interface PlacePageController extends Initializable, Savable +public interface PlacePageController extends Initializable, Savable, + Application.ActivityLifecycleCallbacks { void openFor(@NonNull MapObject object); void close(); diff --git a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java index b7fb1f1467..aa42d617f9 100644 --- a/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java +++ b/android/src/com/mapswithme/maps/widget/placepage/PlacePageView.java @@ -1,6 +1,5 @@ package com.mapswithme.maps.widget.placepage; -import android.app.Activity; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; @@ -29,7 +28,6 @@ import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.webkit.WebView; @@ -44,8 +42,6 @@ import com.mapswithme.maps.Framework; import com.mapswithme.maps.MwmActivity; import com.mapswithme.maps.MwmApplication; import com.mapswithme.maps.R; -import com.mapswithme.maps.ads.CompoundNativeAdLoader; -import com.mapswithme.maps.ads.DefaultAdTracker; import com.mapswithme.maps.ads.LocalAdInfo; import com.mapswithme.maps.api.ParsedMwmRequest; import com.mapswithme.maps.bookmarks.PlaceDescriptionActivity; @@ -119,8 +115,7 @@ public class PlacePageView extends NestedScrollView LineCountTextView.OnLineCountCalculatedListener, RecyclerClickListener, NearbyAdapter.OnItemClickListener, - EditBookmarkFragment.EditBookmarkListener, - BannerController.BannerListener + EditBookmarkFragment.EditBookmarkListener { private static final Logger LOGGER = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.MISC); private static final String TAG = PlacePageView.class.getSimpleName(); @@ -216,9 +211,6 @@ public class PlacePageView extends NestedScrollView @NonNull private UGCController mUgcController; - @Nullable - BannerController mBannerController; - // Data @Nullable private MapObject mMapObject; @@ -242,8 +234,6 @@ public class PlacePageView extends NestedScrollView @Nullable private CountryItem mCurrentCountry; - private final int mMarginBase; - private final MapManager.StorageCallback mStorageCallback = new MapManager.StorageCallback() { @Override @@ -323,7 +313,7 @@ public class PlacePageView extends NestedScrollView public interface SetMapObjectListener { - void onSetMapObjectComplete(); + void onSetMapObjectComplete(@NonNull NetworkPolicy policy); } public PlacePageView(Context context) @@ -339,44 +329,11 @@ public class PlacePageView extends NestedScrollView public PlacePageView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs); - Activity activity = (Activity) context; mIsLatLonDms = MwmApplication.prefs().getBoolean(PREF_USE_DMS, false); mGalleryAdapter = new com.mapswithme.maps.widget.placepage.GalleryAdapter(context); - mMarginBase = (int) getResources().getDimension(R.dimen.margin_base); init(attrs, defStyleAttr); } - public ViewGroup GetPreview() { return mPreview; } - - public boolean isHorizontalScrollAreaTouched(@NonNull MotionEvent event) - { - return UiUtils.isViewTouched(event, mHotelGallery); - } - - public void onActivityResume() - { - if (mBannerController != null) - mBannerController.onChangedVisibility(true); - } - - public void onActivityPause() - { - if (mBannerController != null) - mBannerController.onChangedVisibility(false); - } - - public void onActivityStopped() - { - if (mBannerController != null) - mBannerController.detach(); - } - - public void onActivityStarted() - { - if (mBannerController != null) - mBannerController.attach(); - } - @Override protected void onFinishInflate() { @@ -468,15 +425,6 @@ public class PlacePageView extends NestedScrollView mUgcController = new UGCController(this); - ViewGroup bannerContainer = findViewById(R.id.banner_container); - if (bannerContainer != null) - { - DefaultAdTracker tracker = new DefaultAdTracker(); - CompoundNativeAdLoader loader = com.mapswithme.maps.ads.Factory.createCompoundLoader(tracker, tracker); - mBannerController = new BannerController(bannerContainer, this, loader, tracker, - getActivity()); - } - mDownloaderIcon = new DownloaderStatusIcon(mPreview.findViewById(R.id.downloader_status_frame)); mDownloaderInfo = mPreview.findViewById(R.id.tv__downloader_details); @@ -775,7 +723,7 @@ public class PlacePageView extends NestedScrollView LOGGER.e(TAG, "A sponsored info cannot be updated, mMapObject is null!"); return; } - refreshPreview(mMapObject, NetworkPolicy.newInstance(true), priceInfo); + refreshPreview(mMapObject, priceInfo); } @Override @@ -1031,7 +979,10 @@ public class PlacePageView extends NestedScrollView if (!force && MapObject.same(mMapObject, mapObject)) { if (listener != null) - listener.onSetMapObjectComplete(); + { + NetworkPolicy policy = NetworkPolicy.newInstance(NetworkPolicy.getCurrentNetworkUsageStatus()); + listener.onSetMapObjectComplete(policy); + } return; } @@ -1048,15 +999,16 @@ public class PlacePageView extends NestedScrollView { setMapObjectInternal(policy); if (listener != null) - listener.onSetMapObjectComplete(); + listener.onSetMapObjectComplete(policy); } }); } else { - setMapObjectInternal(NetworkPolicy.newInstance(false)); + NetworkPolicy policy = NetworkPolicy.newInstance(false); + setMapObjectInternal(policy); if (listener != null) - listener.onSetMapObjectComplete(); + listener.onSetMapObjectComplete(policy); } } @@ -1112,7 +1064,7 @@ public class PlacePageView extends NestedScrollView return; } - refreshPreview(mMapObject, policy, null); + refreshPreview(mMapObject, null); refreshViewsInternal(mMapObject); } @@ -1185,19 +1137,6 @@ public class PlacePageView extends NestedScrollView } } - private void refreshPreview(@NonNull MapObject mapObject, @NonNull NetworkPolicy policy, - @Nullable HotelPriceInfo priceInfo) - { - if (mBannerController != null) - { - boolean canShow = mapObject.getMapObjectType() != MapObject.MY_POSITION - && policy.сanUseNetwork(); - mBannerController.updateData(canShow ? mapObject.getBanners() : null); - } - - refreshPreview(mapObject, priceInfo); - } - private void refreshPreview(@NonNull MapObject mapObject, @Nullable HotelPriceInfo priceInfo) { UiUtils.setTextAndHideIfEmpty(mTvTitle, mapObject.getTitle()); @@ -1987,32 +1926,6 @@ public class PlacePageView extends NestedScrollView setMapObject(BookmarkManager.INSTANCE.getBookmark(bookmarkId), true, null); } - public boolean isBannerTouched(@NonNull MotionEvent event) - { - return mBannerController != null && mBannerController.isActionButtonTouched(event); - } - -/* public boolean isLeaveReviewButtonTouched(@NonNull MotionEvent event) - { - return mUgcController != null && mUgcController.isLeaveReviewButtonTouched(event); - }*/ - - public boolean isSearchSimilarHotelsButtonTouched(@NonNull MotionEvent event) - { - return UiUtils.isViewTouched(event, mPreview.findViewById(R.id.search_hotels_btn)); - } - - @Override - public void onSizeChanged() - { -/* if (mBannerController != null && mBannerController.hasErrorOccurred()) - { - mPreview.setPadding(mPreview.getPaddingLeft(), mPreview.getPaddingTop(), - getPaddingRight(), mMarginBase); - }*/ - } - - int getPreviewHeight() { return mPreview.getHeight();