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:
authorAleksandr Zatsepin <alexzatsepin@users.noreply.github.com>2017-06-02 17:36:04 +0300
committerGitHub <noreply@github.com>2017-06-02 17:36:04 +0300
commit02bc7f892c133995c45e00077ccbf773ac991df5 (patch)
tree298a7a658e71b3ef591a1642cac819b41d27cae5
parenta3963ec60b4e9dcb51e18282438e884bb35d2281 (diff)
parentf172a5182f1b1a54d0d6e720448af104d54216e3 (diff)
Merge pull request #6187 from goblinr/MAPSME-4639-cold-startup-statistics-cherry-pickbeta-844beta-843beta-842
[cherry-pick][android] Cold startup info statistics tracking
-rw-r--r--android/AndroidManifest.xml1
-rw-r--r--android/src/com/mapswithme/maps/MwmApplication.java18
-rw-r--r--android/src/com/mapswithme/maps/background/AppBackgroundTracker.java39
-rw-r--r--android/src/com/mapswithme/util/statistics/Statistics.java49
4 files changed, 99 insertions, 8 deletions
diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml
index bcc4493793..8262e318de 100644
--- a/android/AndroidManifest.xml
+++ b/android/AndroidManifest.xml
@@ -34,6 +34,7 @@
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
+ <uses-permission android:name="android.permission.BATTERY_STATS"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
diff --git a/android/src/com/mapswithme/maps/MwmApplication.java b/android/src/com/mapswithme/maps/MwmApplication.java
index 21a8c0d89a..a55b55fd4b 100644
--- a/android/src/com/mapswithme/maps/MwmApplication.java
+++ b/android/src/com/mapswithme/maps/MwmApplication.java
@@ -2,6 +2,8 @@ package com.mapswithme.maps;
import android.app.Application;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Environment;
@@ -101,6 +103,20 @@ public class MwmApplication extends Application
}
};
+ @NonNull
+ private final AppBackgroundTracker.OnVisibleAppLaunchListener mVisibleAppLaunchListener =
+ new AppBackgroundTracker.OnVisibleAppLaunchListener()
+ {
+ @Override
+ public void onVisibleAppLaunch()
+ {
+ IntentFilter filter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+ Intent batteryStatus = registerReceiver(null, filter);
+ if (batteryStatus != null)
+ Statistics.INSTANCE.trackColdStartupInfo(batteryStatus);
+ }
+ };
+
public MwmApplication()
{
super();
@@ -152,6 +168,7 @@ public class MwmApplication extends Application
mPrefs = getSharedPreferences(getString(R.string.pref_file_name), MODE_PRIVATE);
mBackgroundTracker = new AppBackgroundTracker();
+ mBackgroundTracker.addListener(mVisibleAppLaunchListener);
}
public void initNativePlatform()
@@ -180,7 +197,6 @@ public class MwmApplication extends Application
if (!isInstallationIdFound)
setInstallationIdToCrashlytics();
- mBackgroundTracker = new AppBackgroundTracker();
mBackgroundTracker.addListener(mBackgroundListener);
TrackRecorder.init();
Editor.init();
diff --git a/android/src/com/mapswithme/maps/background/AppBackgroundTracker.java b/android/src/com/mapswithme/maps/background/AppBackgroundTracker.java
index 3c88fa8ee2..76a8463aa7 100644
--- a/android/src/com/mapswithme/maps/background/AppBackgroundTracker.java
+++ b/android/src/com/mapswithme/maps/background/AppBackgroundTracker.java
@@ -23,7 +23,8 @@ public final class AppBackgroundTracker
private static final String TAG = AppBackgroundTracker.class.getSimpleName();
private static final int TRANSITION_DELAY_MS = 1000;
- private final Listeners<OnTransitionListener> mListeners = new Listeners<>();
+ private final Listeners<OnTransitionListener> mTransitionListeners = new Listeners<>();
+ private final Listeners<OnVisibleAppLaunchListener> mVisibleAppLaunchListeners = new Listeners<>();
private SparseArray<WeakReference<Activity>> mActivities = new SparseArray<>();
private boolean mForeground;
@@ -47,7 +48,7 @@ public final class AppBackgroundTracker
mForeground = (mActivities.size() > 0);
if (mForeground != old)
- notifyListeners();
+ notifyTransitionListeners();
}
};
@@ -64,6 +65,8 @@ public final class AppBackgroundTracker
public void onActivityStarted(Activity activity)
{
LOGGER.d(TAG, "onActivityStarted activity = " + activity);
+ if (mActivities.size() == 0)
+ notifyVisibleAppLaunchListeners();
mActivities.put(activity.hashCode(), new WeakReference<>(activity));
onActivityChanged();
}
@@ -112,6 +115,11 @@ public final class AppBackgroundTracker
void onTransit(boolean foreground);
}
+ public interface OnVisibleAppLaunchListener
+ {
+ void onVisibleAppLaunch();
+ }
+
public AppBackgroundTracker()
{
MwmApplication.get().registerActivityLifecycleCallbacks(mAppLifecycleCallbacks);
@@ -122,21 +130,38 @@ public final class AppBackgroundTracker
return mForeground;
}
- private void notifyListeners()
+ private void notifyTransitionListeners()
{
- for (OnTransitionListener listener : mListeners)
+ for (OnTransitionListener listener : mTransitionListeners)
listener.onTransit(mForeground);
- mListeners.finishIterate();
+ mTransitionListeners.finishIterate();
+ }
+
+ private void notifyVisibleAppLaunchListeners()
+ {
+ for (OnVisibleAppLaunchListener listener : mVisibleAppLaunchListeners)
+ listener.onVisibleAppLaunch();
+ mVisibleAppLaunchListeners.finishIterate();
}
public void addListener(OnTransitionListener listener)
{
- mListeners.register(listener);
+ mTransitionListeners.register(listener);
}
public void removeListener(OnTransitionListener listener)
{
- mListeners.unregister(listener);
+ mTransitionListeners.unregister(listener);
+ }
+
+ public void addListener(OnVisibleAppLaunchListener listener)
+ {
+ mVisibleAppLaunchListeners.register(listener);
+ }
+
+ public void removeListener(OnVisibleAppLaunchListener listener)
+ {
+ mVisibleAppLaunchListeners.unregister(listener);
}
@android.support.annotation.UiThread
diff --git a/android/src/com/mapswithme/util/statistics/Statistics.java b/android/src/com/mapswithme/util/statistics/Statistics.java
index fe5dd92f8a..0975ef599c 100644
--- a/android/src/com/mapswithme/util/statistics/Statistics.java
+++ b/android/src/com/mapswithme/util/statistics/Statistics.java
@@ -2,9 +2,11 @@ package com.mapswithme.util.statistics;
import android.app.Activity;
import android.content.Context;
+import android.content.Intent;
import android.location.Location;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
+import android.os.BatteryManager;
import android.os.Build;
import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
@@ -39,6 +41,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import static com.mapswithme.util.statistics.Statistics.EventName.APPLICATION_COLD_STARTUP_INFO;
import static com.mapswithme.util.statistics.Statistics.EventName.DOWNLOADER_DIALOG_ERROR;
import static com.mapswithme.util.statistics.Statistics.EventName.PP_BANNER_BLANK;
import static com.mapswithme.util.statistics.Statistics.EventName.PP_BANNER_ERROR;
@@ -47,6 +50,8 @@ import static com.mapswithme.util.statistics.Statistics.EventName.PP_OWNERSHIP_B
import static com.mapswithme.util.statistics.Statistics.EventName.PP_SPONSORED_BOOK;
import static com.mapswithme.util.statistics.Statistics.EventParam.BANNER;
import static com.mapswithme.util.statistics.Statistics.EventParam.BANNER_STATE;
+import static com.mapswithme.util.statistics.Statistics.EventParam.BATTERY;
+import static com.mapswithme.util.statistics.Statistics.EventParam.CHARGING;
import static com.mapswithme.util.statistics.Statistics.EventParam.ERROR_CODE;
import static com.mapswithme.util.statistics.Statistics.EventParam.ERROR_MESSAGE;
import static com.mapswithme.util.statistics.Statistics.EventParam.FEATURE_ID;
@@ -56,6 +61,7 @@ import static com.mapswithme.util.statistics.Statistics.EventParam.HOTEL_LON;
import static com.mapswithme.util.statistics.Statistics.EventParam.MAP_DATA_SIZE;
import static com.mapswithme.util.statistics.Statistics.EventParam.MWM_NAME;
import static com.mapswithme.util.statistics.Statistics.EventParam.MWM_VERSION;
+import static com.mapswithme.util.statistics.Statistics.EventParam.NETWORK;
import static com.mapswithme.util.statistics.Statistics.EventParam.PROVIDER;
import static com.mapswithme.util.statistics.Statistics.EventParam.RESTAURANT;
import static com.mapswithme.util.statistics.Statistics.EventParam.RESTAURANT_LAT;
@@ -201,6 +207,9 @@ public enum Statistics
public static final String EDITOR_SHARE_CLICK = "Editor_SecondTimeShare_click";
public static final String EDITOR_REPORT = "Editor_Problem_report";
+ // Cold start
+ public static final String APPLICATION_COLD_STARTUP_INFO = "Application_ColdStartup_info";
+
public static class Settings
{
public static final String WEB_SITE = "Setings. Go to website";
@@ -286,6 +295,9 @@ public enum Statistics
static final String ERROR_CODE = "error_code";
static final String ERROR_MESSAGE = "error_message";
static final String MAP_DATA_SIZE = "map_data_size:";
+ static final String BATTERY = "battery";
+ static final String CHARGING = "charging";
+ static final String NETWORK = "network";
private EventParam() {}
}
@@ -609,6 +621,43 @@ public enum Statistics
.get());
}
+ public void trackColdStartupInfo(@NonNull Intent batteryStatus)
+ {
+ int level = batteryStatus.getIntExtra(BatteryManager.EXTRA_LEVEL, 0);
+ int chargePlug = batteryStatus.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+ final String charging;
+ if (chargePlug > 0)
+ charging = "on";
+ else if (chargePlug < 0)
+ charging = "unknown";
+ else
+ charging = "off";
+
+ final String network;
+ if (ConnectionState.isWifiConnected())
+ {
+ network = "wifi";
+ }
+ else if (ConnectionState.isMobileConnected())
+ {
+ if (ConnectionState.isInRoaming())
+ network = "roaming (android)";
+ else
+ network = "mobile";
+ }
+ else
+ {
+ network = "off";
+ }
+
+ trackEvent(APPLICATION_COLD_STARTUP_INFO,
+ params()
+ .add(BATTERY, level)
+ .add(CHARGING, charging)
+ .add(NETWORK, network)
+ .get());
+ }
+
public static ParameterBuilder params()
{
return new ParameterBuilder();