Welcome to mirror list, hosted at ThFree Co, Russian Federation.

PlacePageTracker.java « statistics « util « mapswithme « com « src « android - github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: c67a11fffb967d54423e92bd9672434f361f8469 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
package com.mapswithme.util.statistics;

import android.graphics.Rect;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import android.view.View;

import com.mapswithme.maps.R;
import com.mapswithme.maps.ads.MwmNativeAd;
import com.mapswithme.maps.base.Savable;
import com.mapswithme.maps.bookmarks.data.MapObject;
import com.mapswithme.maps.taxi.TaxiType;
import com.mapswithme.maps.widget.placepage.PlacePageView;
import com.mapswithme.maps.widget.placepage.Sponsored;
import com.mapswithme.util.UiUtils;

import java.util.List;

import static com.mapswithme.util.statistics.Statistics.EventName.PP_BANNER_SHOW;
import static com.mapswithme.util.statistics.Statistics.PP_BANNER_STATE_DETAILS;
import static com.mapswithme.util.statistics.Statistics.PP_BANNER_STATE_PREVIEW;

public class PlacePageTracker implements Savable<Bundle>
{
  private static final float VISIBILITY_RATIO_TAXI = 0.6f;
  private static final String EXTRA_TAXI_TRACKED = "extra_taxi_tracked";
  private static final String EXTRA_SPONSORED_TRACKED = "extra_sponsored_tracked";
  private static final String EXTRA_BANNER_DETAILS_TRACKED = "extra_banner_details_tracked";
  private static final String EXTRA_BANNER_PREVIEW_TRACKED = "extra_banner_preview_tracked";
  private static final String EXTRA_PP_DETAILS_OPENED_TRACKED = "extra_pp_details_opened_tracked";
  @NonNull
  private final PlacePageView mPlacePageView;
  @NonNull
  private final View mBottomButtons;
  @NonNull
  private final View mTaxi;
  @Nullable
  private MapObject mMapObject;
  private boolean mTaxiTracked;
  private boolean mSponsoredTracked;
  private boolean mBannerDetailsTracked;
  private boolean mBannerPreviewTracked;
  private boolean mPpDetailsOpenedTracked;

  public PlacePageTracker(@NonNull PlacePageView placePageView, @NonNull View bottomButtons)
  {
    mPlacePageView = placePageView;
    mBottomButtons = bottomButtons;
    mTaxi = mPlacePageView.findViewById(R.id.ll__place_page_taxi);
  }

  public void setMapObject(@Nullable MapObject mapObject)
  {
    mMapObject = mapObject;
  }

  public void onMove()
  {
    trackTaxiVisibility();
  }

  public void onHidden()
  {
    mMapObject = null;
    mTaxiTracked = false;
    mSponsoredTracked = false;
    mBannerDetailsTracked = false;
    mBannerPreviewTracked = false;
    mPpDetailsOpenedTracked = false;
  }

  public void onBannerDetails(@Nullable MwmNativeAd ad)
  {
    if (mBannerDetailsTracked)
      return;

    Statistics.INSTANCE.trackPPBanner(PP_BANNER_SHOW, ad, PP_BANNER_STATE_DETAILS);
    mBannerDetailsTracked = true;
  }

  public void onBannerPreview(@Nullable MwmNativeAd ad)
  {
    if (mBannerPreviewTracked)
      return;

    Statistics.INSTANCE.trackPPBanner(PP_BANNER_SHOW, ad, PP_BANNER_STATE_PREVIEW);
    mBannerPreviewTracked = true;
  }

  public void onDetails()
  {
    if (!mSponsoredTracked)
    {
      Sponsored sponsored = mPlacePageView.getSponsored();
      if (sponsored != null)
      {
        Statistics.INSTANCE.trackSponsoredOpenEvent(sponsored);
        mSponsoredTracked = true;
      }
    }

    if (!mPpDetailsOpenedTracked)
    {
      Statistics.INSTANCE.trackEvent(Statistics.EventName.PP_DETAILS_OPEN);
      mPpDetailsOpenedTracked = true;
    }
  }

  private void trackTaxiVisibility()
  {
    if (!mTaxiTracked && isViewOnScreen(mTaxi, VISIBILITY_RATIO_TAXI) && mMapObject != null)
    {
      List<TaxiType> taxiTypes = mMapObject.getReachableByTaxiTypes();
      if (taxiTypes != null && !taxiTypes.isEmpty())
      {
        String providerName = taxiTypes.get(0).getProviderName();
        Statistics.INSTANCE.trackTaxiEvent(Statistics.EventName.ROUTING_TAXI_SHOW,
                                           providerName);
        mTaxiTracked = true;
      }
    }
  }

  /**
   *
   * @param visibilityRatio Describes what the portion of view should be visible before
   *                        the view is considered visible on the screen. It can be from 0 to 1.
   */
  @SuppressWarnings("SameParameterValue")
  private boolean isViewOnScreen(@NonNull View view, float visibilityRatio) {

    if (UiUtils.isInvisible(mPlacePageView))
      return false;

    Rect localRect = new Rect();
    boolean isVisible = view.getGlobalVisibleRect(localRect);
    if (isVisible)
    {
      int visibleHeight = localRect.height() - (localRect.bottom  - mBottomButtons.getTop());
      if ((float)visibleHeight / view.getHeight() >= visibilityRatio)
        return true;
    }
    return false;
  }

  @Override
  public void onSave(@NonNull Bundle outState)
  {
    outState.putBoolean(EXTRA_SPONSORED_TRACKED, mSponsoredTracked);
    outState.putBoolean(EXTRA_TAXI_TRACKED, mTaxiTracked);
    outState.putBoolean(EXTRA_BANNER_DETAILS_TRACKED, mBannerDetailsTracked);
    outState.putBoolean(EXTRA_BANNER_PREVIEW_TRACKED, mBannerPreviewTracked);
    outState.putBoolean(EXTRA_PP_DETAILS_OPENED_TRACKED, mPpDetailsOpenedTracked);
  }

  @Override
  public void onRestore(@NonNull Bundle inState)
  {
    mSponsoredTracked = inState.getBoolean(EXTRA_SPONSORED_TRACKED);
    mTaxiTracked = inState.getBoolean(EXTRA_TAXI_TRACKED);
    mBannerDetailsTracked = inState.getBoolean(EXTRA_BANNER_DETAILS_TRACKED);
    mBannerPreviewTracked = inState.getBoolean(EXTRA_BANNER_PREVIEW_TRACKED);
    mPpDetailsOpenedTracked = inState.getBoolean(EXTRA_PP_DETAILS_OPENED_TRACKED);
  }
}