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

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Donskoy <donskdmitry@mail.ru>2018-07-04 13:53:28 +0300
committerVlad Mihaylenko <vxmihaylenko@gmail.com>2018-07-20 14:51:41 +0300
commit7a72e3c66c895f68ff631059f7fecd42c339af02 (patch)
tree88ec904c28d7cfaede366826364c4ffdfda405c1 /android/src/com/mapswithme
parentc9649224f9777c5ad206f3aa95e3bfa723deff73 (diff)
[android] Added stats for maplayers, refactored traffic state types
Diffstat (limited to 'android/src/com/mapswithme')
-rw-r--r--android/src/com/mapswithme/maps/maplayer/subway/OnTransitSchemeChangedListener.java7
-rw-r--r--android/src/com/mapswithme/maps/maplayer/subway/TransitSchemeState.java29
-rw-r--r--android/src/com/mapswithme/maps/maplayer/traffic/TrafficManager.java72
-rw-r--r--android/src/com/mapswithme/maps/maplayer/traffic/TrafficState.java153
-rw-r--r--android/src/com/mapswithme/util/statistics/Statistics.java26
5 files changed, 186 insertions, 101 deletions
diff --git a/android/src/com/mapswithme/maps/maplayer/subway/OnTransitSchemeChangedListener.java b/android/src/com/mapswithme/maps/maplayer/subway/OnTransitSchemeChangedListener.java
index a7191d4149..358c3fe21f 100644
--- a/android/src/com/mapswithme/maps/maplayer/subway/OnTransitSchemeChangedListener.java
+++ b/android/src/com/mapswithme/maps/maplayer/subway/OnTransitSchemeChangedListener.java
@@ -2,10 +2,8 @@ package com.mapswithme.maps.maplayer.subway;
import android.support.annotation.MainThread;
import android.support.annotation.NonNull;
-import android.widget.Toast;
import com.mapswithme.maps.MwmApplication;
-import com.mapswithme.maps.R;
import com.mapswithme.maps.content.AbstractContextualListener;
public interface OnTransitSchemeChangedListener
@@ -29,10 +27,7 @@ public interface OnTransitSchemeChangedListener
return;
TransitSchemeState state = TransitSchemeState.makeInstance(index);
- if (state != TransitSchemeState.NO_DATA)
- return;
-
- Toast.makeText(app, R.string.subway_data_unavailable, Toast.LENGTH_SHORT).show();
+ state.onReceived(app);
}
}
}
diff --git a/android/src/com/mapswithme/maps/maplayer/subway/TransitSchemeState.java b/android/src/com/mapswithme/maps/maplayer/subway/TransitSchemeState.java
index 55a36e5063..aec8f96b42 100644
--- a/android/src/com/mapswithme/maps/maplayer/subway/TransitSchemeState.java
+++ b/android/src/com/mapswithme/maps/maplayer/subway/TransitSchemeState.java
@@ -1,12 +1,32 @@
package com.mapswithme.maps.maplayer.subway;
import android.support.annotation.NonNull;
+import android.widget.Toast;
+
+import com.mapswithme.maps.MwmApplication;
+import com.mapswithme.maps.R;
+import com.mapswithme.util.statistics.Statistics;
public enum TransitSchemeState
{
DISABLED,
- ENABLED,
- NO_DATA;
+ ENABLED
+ {
+ @Override
+ public void onReceived(@NonNull MwmApplication app)
+ {
+ Statistics.INSTANCE.trackSubwayEvent(Statistics.ParamValue.SUCCESS);
+ }
+ },
+ NO_DATA
+ {
+ @Override
+ public void onReceived(@NonNull MwmApplication app)
+ {
+ Toast.makeText(app, R.string.subway_data_unavailable, Toast.LENGTH_SHORT).show();
+ Statistics.INSTANCE.trackSubwayEvent(Statistics.ParamValue.UNAVAILABLE);
+ }
+ };
@NonNull
public static TransitSchemeState makeInstance(int index)
@@ -15,4 +35,9 @@ public enum TransitSchemeState
throw new IllegalArgumentException("No value for index = " + index);
return TransitSchemeState.values()[index];
}
+
+ public void onReceived(@NonNull MwmApplication app)
+ {
+ /* Do nothing by default */
+ }
}
diff --git a/android/src/com/mapswithme/maps/maplayer/traffic/TrafficManager.java b/android/src/com/mapswithme/maps/maplayer/traffic/TrafficManager.java
index 1850e2f877..e2eeb2fb76 100644
--- a/android/src/com/mapswithme/maps/maplayer/traffic/TrafficManager.java
+++ b/android/src/com/mapswithme/maps/maplayer/traffic/TrafficManager.java
@@ -3,7 +3,6 @@ package com.mapswithme.maps.maplayer.traffic;
import android.support.annotation.MainThread;
import android.support.annotation.NonNull;
-import com.mapswithme.util.Utils;
import com.mapswithme.util.log.Logger;
import com.mapswithme.util.log.LoggerFactory;
@@ -17,14 +16,16 @@ public enum TrafficManager
private final String mTag = TrafficManager.class.getSimpleName();
@NonNull
private final Logger mLogger = LoggerFactory.INSTANCE.getLogger(LoggerFactory.Type.TRAFFIC);
+
@NonNull
private final TrafficState.StateChangeListener mStateChangeListener = new TrafficStateListener();
- @TrafficState.Value
- private int mState = TrafficState.DISABLED;
- @TrafficState.Value
- private int mLastPostedState = mState;
+
+ @NonNull
+ private TrafficState.Type mState = TrafficState.Type.DISABLED;
+
@NonNull
private final List<TrafficCallback> mCallbacks = new ArrayList<>();
+
private boolean mInitialized = false;
public void initialize()
@@ -80,7 +81,7 @@ public enum TrafficManager
private void postPendingState()
{
- mStateChangeListener.onTrafficStateChanged(mState);
+ mStateChangeListener.onTrafficStateChanged(mState.ordinal());
}
public void detachAll()
@@ -124,61 +125,12 @@ public enum TrafficManager
@MainThread
public void onTrafficStateChanged(@TrafficState.Value int state)
{
- mLogger.d(mTag, "onTrafficStateChanged current state = " + TrafficState.nameOf(mState)
- + " new value = " + TrafficState.nameOf(state));
- mState = state;
-
- iterateOverCallbacks(new Utils.Proc<TrafficCallback>()
- {
- @Override
- public void invoke(@NonNull TrafficCallback callback)
- {
- switch (mState)
- {
- case TrafficState.DISABLED:
- callback.onDisabled();
- break;
-
- case TrafficState.ENABLED:
- callback.onEnabled();
- break;
-
- case TrafficState.WAITING_DATA:
- callback.onWaitingData();
- break;
-
- case TrafficState.NO_DATA:
- callback.onNoData(mLastPostedState != mState);
- break;
-
- case TrafficState.OUTDATED:
- callback.onOutdated();
- break;
-
- case TrafficState.NETWORK_ERROR:
- callback.onNetworkError();
- break;
-
- case TrafficState.EXPIRED_DATA:
- callback.onExpiredData(mLastPostedState != mState);
- break;
-
- case TrafficState.EXPIRED_APP:
- callback.onExpiredApp(mLastPostedState != mState);
- break;
-
- default:
- throw new IllegalArgumentException("Unsupported traffic state: " + mState);
- }
- mLastPostedState = mState;
- }
- });
- }
+ TrafficState.Type newTrafficState = TrafficState.getType(state);
+ mLogger.d(mTag, "onTrafficStateChanged current state = " + mState
+ + " new value = " + newTrafficState);
- private void iterateOverCallbacks(@NonNull Utils.Proc<TrafficCallback> proc)
- {
- for (TrafficCallback callback : mCallbacks)
- proc.invoke(callback);
+ newTrafficState.onReceived(mCallbacks, mState);
+ mState = newTrafficState;
}
}
diff --git a/android/src/com/mapswithme/maps/maplayer/traffic/TrafficState.java b/android/src/com/mapswithme/maps/maplayer/traffic/TrafficState.java
index 8f24f16d66..c1926b3d07 100644
--- a/android/src/com/mapswithme/maps/maplayer/traffic/TrafficState.java
+++ b/android/src/com/mapswithme/maps/maplayer/traffic/TrafficState.java
@@ -4,8 +4,11 @@ import android.support.annotation.IntDef;
import android.support.annotation.MainThread;
import android.support.annotation.NonNull;
+import com.mapswithme.util.statistics.Statistics;
+
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.List;
final class TrafficState
{
@@ -24,14 +27,16 @@ final class TrafficState
// These values should correspond to
// TrafficManager::TrafficState enum (from map/traffic_manager.hpp)
- static final int DISABLED = 0;
- static final int ENABLED = 1;
- static final int WAITING_DATA = 2;
- static final int OUTDATED = 3;
- static final int NO_DATA = 4;
- static final int NETWORK_ERROR = 5;
- static final int EXPIRED_DATA = 6;
- static final int EXPIRED_APP = 7;
+ private static final int DISABLED = 0;
+ private static final int ENABLED = 1;
+ private static final int WAITING_DATA = 2;
+ private static final int OUTDATED = 3;
+ private static final int NO_DATA = 4;
+ private static final int NETWORK_ERROR = 5;
+ private static final int EXPIRED_DATA = 6;
+ private static final int EXPIRED_APP = 7;
+
+ private TrafficState() {}
@MainThread
static native void nativeSetListener(@NonNull StateChangeListener listener);
@@ -40,38 +45,120 @@ final class TrafficState
static native void nativeDisable();
static native boolean nativeIsEnabled();
- private TrafficState() {}
-
- static String nameOf(int state)
+ public enum Type
{
- switch (state)
+ DISABLED
+ {
+ @Override
+ protected void onReceivedInternal(@NonNull TrafficManager.TrafficCallback param,
+ @NonNull Type lastPostedState)
+ {
+ param.onDisabled();
+ }
+ },
+ ENABLED(Statistics.ParamValue.SUCCESS)
+ {
+ @Override
+ protected void onReceivedInternal(@NonNull TrafficManager.TrafficCallback param,
+ @NonNull Type lastPostedState)
+ {
+ param.onEnabled();
+ }
+ },
+
+ WAITING_DATA
+ {
+ @Override
+ protected void onReceivedInternal(@NonNull TrafficManager.TrafficCallback param,
+ @NonNull Type lastPostedState)
+ {
+ param.onWaitingData();
+ }
+ },
+ OUTDATED
+ {
+ @Override
+ protected void onReceivedInternal(@NonNull TrafficManager.TrafficCallback param,
+ @NonNull Type lastPostedState)
+ {
+ param.onOutdated();
+ }
+ },
+ NO_DATA(Statistics.ParamValue.UNAVAILABLE)
+ {
+ @Override
+ protected void onReceivedInternal(@NonNull TrafficManager.TrafficCallback param,
+ @NonNull Type lastPostedState)
+ {
+ param.onNoData(lastPostedState != NO_DATA);
+ }
+ },
+ NETWORK_ERROR(Statistics.ParamValue.ERROR)
+ {
+ @Override
+ protected void onReceivedInternal(@NonNull TrafficManager.TrafficCallback param,
+ @NonNull Type lastPostedState)
+ {
+ param.onNetworkError();
+ }
+ },
+ EXPIRED_DATA
+ {
+ @Override
+ protected void onReceivedInternal(@NonNull TrafficManager.TrafficCallback param,
+ @NonNull Type lastPostedState)
+ {
+ param.onExpiredData(lastPostedState != EXPIRED_DATA);
+ }
+ },
+ EXPIRED_APP
+ {
+ @Override
+ protected void onReceivedInternal(@NonNull TrafficManager.TrafficCallback param,
+ @NonNull Type lastPostedState)
+ {
+ param.onExpiredApp(lastPostedState != EXPIRED_APP);
+ }
+ };
+
+ @NonNull
+ private final String mAnalyticsParamName;
+
+ Type()
{
- case DISABLED:
- return "DISABLED";
-
- case ENABLED:
- return "ENABLED";
-
- case WAITING_DATA:
- return "WAITING_DATA";
+ mAnalyticsParamName = name();
+ }
- case OUTDATED:
- return "OUTDATED";
+ Type(@NonNull String analyticsParamName)
+ {
+ mAnalyticsParamName = analyticsParamName;
+ }
- case NO_DATA:
- return "NO_DATA";
+ @NonNull
+ private String getAnalyticsParamName()
+ {
+ return mAnalyticsParamName;
+ }
- case NETWORK_ERROR:
- return "NETWORK_ERROR";
+ public void onReceived(@NonNull List<TrafficManager.TrafficCallback> trafficCallbacks,
+ @NonNull Type lastPostedState)
+ {
+ for (TrafficManager.TrafficCallback callback : trafficCallbacks)
+ {
+ onReceivedInternal(callback, lastPostedState);
+ Statistics.INSTANCE.trackTrafficEvent(getAnalyticsParamName());
+ }
+ }
- case EXPIRED_DATA:
- return "EXPIRED_DATA";
+ protected abstract void onReceivedInternal(@NonNull TrafficManager.TrafficCallback param,
+ @NonNull Type lastPostedState);
+ }
- case EXPIRED_APP:
- return "EXPIRED_APP";
+ public static Type getType(int index)
+ {
+ if (index < 0 || index >= Type.values().length)
+ throw new IllegalArgumentException("Not found value for index = " + index);
- default:
- return "Unknown: " + state;
- }
+ return Type.values()[index];
}
}
diff --git a/android/src/com/mapswithme/util/statistics/Statistics.java b/android/src/com/mapswithme/util/statistics/Statistics.java
index 44d2acf5fc..884314d831 100644
--- a/android/src/com/mapswithme/util/statistics/Statistics.java
+++ b/android/src/com/mapswithme/util/statistics/Statistics.java
@@ -306,6 +306,7 @@ public enum Statistics
public static final String UGC_AUTH_DECLINED = "UGC_Auth_declined";
public static final String UGC_AUTH_EXTERNAL_REQUEST_SUCCESS = "UGC_Auth_external_request_success";
public static final String UGC_AUTH_ERROR = "UGC_Auth_error";
+ public static final String MAP_LAYER = "Map_Layers_activate";
public static class Settings
{
@@ -392,6 +393,9 @@ public enum Statistics
public static final String PRICE_CATEGORY = "price_category";
public static final String DATE = "date";
static final String HAS_AUTH = "has_auth";
+ public static final String NAME_LOWER_CASE = "name";
+ public static final String STATUS = "status";
+
private EventParam() {}
}
@@ -435,6 +439,11 @@ public enum Statistics
static final String DISK_NO_SPACE = "disk_no_space";
static final String BACKUP = "backup";
static final String RESTORE = "restore";
+ static final String SUBWAY = "subway";
+ static final String TRAFFIC = "traffic";
+ public static final String SUCCESS = "success";
+ public static final String UNAVAILABLE = "unavailable";
+ public static final String ERROR = "error";
}
// Initialized once in constructor and does not change until the process restarts.
@@ -630,6 +639,23 @@ public enum Statistics
PushwooshHelper.nativeSendEditorEditObjectTag();
}
+ public void trackSubwayEvent(@NonNull String status)
+ {
+ trackMapLayerEvent(ParamValue.SUBWAY, status);
+ }
+
+ public void trackTrafficEvent(@NonNull String status)
+ {
+ trackMapLayerEvent(ParamValue.TRAFFIC, status);
+ }
+
+ private void trackMapLayerEvent(@NonNull String eventName, @NonNull String status)
+ {
+ ParameterBuilder builder = new ParameterBuilder().add(EventParam.NAME_LOWER_CASE, eventName)
+ .add(EventParam.STATUS, status);
+ trackEvent(EventName.MAP_LAYER, builder);
+ }
+
public void trackEditorSuccess(boolean newObject)
{
trackEvent(newObject ? EventName.EDITOR_SUCCESS_CREATE : EventName.EDITOR_SUCCESS_EDIT,