added list of events to send them later

This commit is contained in:
gdlbo
2024-03-25 18:04:15 +03:00
parent 4a3e13939f
commit d17bdef23a
4 changed files with 97 additions and 52 deletions
@@ -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);
}
}
@@ -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) {
@@ -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());
}
});
}
}
@@ -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());
}
});
}
}