diff --git a/app/src/main/java/com/vk/libvideo/VideoTracker.java b/app/src/main/java/com/vk/libvideo/VideoTracker.java index 8bc2e9cb8..a7c24ba90 100644 --- a/app/src/main/java/com/vk/libvideo/VideoTracker.java +++ b/app/src/main/java/com/vk/libvideo/VideoTracker.java @@ -15,7 +15,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import ru.vtosters.hooks.other.Preferences; -import ru.vtosters.lite.music.Metrics; +import ru.vtosters.lite.utils.Metrics; import java.util.Locale; import java.util.Objects; @@ -324,8 +324,6 @@ public class VideoTracker { } public void sendMetrics(String event) throws JSONException { - JSONArray arr = new JSONArray(); - JSONObject jsonObject = new JSONObject(); jsonObject.put("e", event); jsonObject.put("source", this.f15639c); @@ -335,10 +333,6 @@ public class VideoTracker { jsonObject.put("position_sec", 0); jsonObject.put("cur_quality", "auto"); - arr.put(jsonObject); - - Log.d("VideoTracker", arr.toString()); - - Metrics.trackEvents(arr.toString()); + Metrics.trackEvents(jsonObject); } } \ No newline at end of file diff --git a/app/src/main/java/com/vk/music/stats/VKMusicStatsTracker.java b/app/src/main/java/com/vk/music/stats/VKMusicStatsTracker.java index 11755c761..496da1af6 100644 --- a/app/src/main/java/com/vk/music/stats/VKMusicStatsTracker.java +++ b/app/src/main/java/com/vk/music/stats/VKMusicStatsTracker.java @@ -15,7 +15,7 @@ import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import ru.vtosters.hooks.other.Preferences; -import ru.vtosters.lite.music.Metrics; +import ru.vtosters.lite.utils.Metrics; import java.util.Objects; import java.util.UUID; @@ -161,7 +161,6 @@ public final class VKMusicStatsTracker implements MusicStatsTracker { } private void makeMetricsRequest(MusicPlaybackParams musicPlaybackParams, String str) throws JSONException { - JSONArray events = new JSONArray(); JSONObject event = new JSONObject(); if (str.equals("music_stop_playback")) { @@ -173,7 +172,6 @@ public final class VKMusicStatsTracker implements MusicStatsTracker { event.put("reason", "new"); event.put("state", "app"); event.put("duration", musicPlaybackParams.a()); - events.put(event); } else { event.put("e", str); event.put("audio_id", musicPlaybackParams.c()); @@ -185,11 +183,9 @@ public final class VKMusicStatsTracker implements MusicStatsTracker { if (StringExt.a((CharSequence) musicPlaybackParams.e())) { event.put("prev_audio_id", musicPlaybackParams.e()); } - - events.put(event); } - Metrics.trackEvents(events.toString()); + Metrics.trackEvents(event); } private Analytics.l a(MusicPlaybackParams musicPlaybackParams, String str) { diff --git a/app/src/main/java/ru/vtosters/lite/music/Metrics.java b/app/src/main/java/ru/vtosters/lite/music/Metrics.java deleted file mode 100644 index 3601bcca1..000000000 --- a/app/src/main/java/ru/vtosters/lite/music/Metrics.java +++ /dev/null @@ -1,38 +0,0 @@ -package ru.vtosters.lite.music; - -import android.util.Log; -import com.vk.core.network.Network; -import okhttp3.Call; -import okhttp3.Callback; -import okhttp3.Request; -import okhttp3.Response; - -import java.io.IOException; - -import static com.vk.core.network.Network.ClientType.CLIENT_API; -import static ru.vtosters.lite.proxy.ProxyUtils.getApi; -import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken; - -public class Metrics { - public static void trackEvents(String object) { - trackEventsRequest(object); - } - - private static void trackEventsRequest(String object) { - Request req = new Request.a() - .b("https://" + getApi() + "/method/stats.trackEvents?events=" + object + "&v=5.119&access_token=" + getUserToken()) - .a(); - - Network.b(CLIENT_API).a(req).a(new Callback() { - @Override - public void a(Call call, IOException e) { - e.fillInStackTrace(); - } - - @Override - public void a(Call call, Response response) throws IOException { - Log.d("MusicMetrics", response.a().g()); - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/ru/vtosters/lite/utils/Metrics.java b/app/src/main/java/ru/vtosters/lite/utils/Metrics.java new file mode 100644 index 000000000..22b46dad7 --- /dev/null +++ b/app/src/main/java/ru/vtosters/lite/utils/Metrics.java @@ -0,0 +1,93 @@ +package ru.vtosters.lite.utils; + +import android.content.Context; +import android.net.ConnectivityManager; +import android.net.NetworkCapabilities; +import android.net.NetworkInfo; +import android.os.Build; +import android.util.Log; +import com.vk.core.network.Network; +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Request; +import okhttp3.Response; +import org.json.JSONArray; +import org.json.JSONObject; + +import java.io.IOException; + +import static com.vk.core.network.Network.ClientType.CLIENT_API; +import static ru.vtosters.hooks.other.Preferences.getBoolValue; +import static ru.vtosters.lite.proxy.ProxyUtils.getApi; +import static ru.vtosters.lite.utils.AccountManagerUtils.getUserToken; + +public class Metrics { + private static JSONArray events = new JSONArray(); + + public static void trackEvents(JSONObject object) { + if (shouldSaveUserTraffic()) { + trackEventList(object); + } else { + trackEventsImmediately(object); + } + } + + private static boolean shouldSaveUserTraffic() { + return getBoolValue("isRoamingState", false) || isMobileNetwork(); + } + + private static void trackEventList(JSONObject object) { + events.put(object); + + if (events.length() > 2) { + trackEventsRequest(events); + resetEvents(); + } + } + + private static void trackEventsImmediately(JSONObject object) { + JSONArray eventsToTrack = new JSONArray(); + eventsToTrack.put(object); + trackEventsRequest(eventsToTrack); + } + + private static void resetEvents() { + events = new JSONArray(); + } + + @SuppressWarnings("deprecation") + private static boolean isMobileNetwork() { + ConnectivityManager connectivityManager = (ConnectivityManager) AndroidUtils.getGlobalContext().getSystemService(Context.CONNECTIVITY_SERVICE); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + android.net.Network network = connectivityManager.getActiveNetwork(); + if (network != null) { + NetworkCapabilities networkCapabilities = connectivityManager.getNetworkCapabilities(network); + return networkCapabilities != null && networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR); + } + } else { + NetworkInfo networkInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); + return networkInfo != null && networkInfo.isConnected(); + } + + return false; + } + + private static void trackEventsRequest(JSONArray object) { + Request req = new Request.a() + .b("https://" + getApi() + "/method/stats.trackEvents?events=" + object.toString() + "&v=5.119&access_token=" + getUserToken()) + .a(); + + Network.b(CLIENT_API).a(req).a(new Callback() { + @Override + public void a(Call call, IOException e) { + e.fillInStackTrace(); + } + + @Override + public void a(Call call, Response response) throws IOException { + Log.d("Metrics", response.a().g()); + } + }); + } +} \ No newline at end of file