Skip to content
Snippets Groups Projects
Commit 839241ba authored by Drahomír Karchňák's avatar Drahomír Karchňák
Browse files

#421 Added ConnectionType to crash reports. Also added seed and difficulty if...

#421 Added ConnectionType to crash reports. Also added seed and difficulty if the crash occurs during any game.
parent ffe118a1
Branches
Tags
No related merge requests found
......@@ -95,23 +95,34 @@ public class AndroidLauncher extends AndroidApplication {
@Override
public boolean isUsingMobileData() {
return getConnectionType() == ConnectionType.Mobile;
}
@Override
public ConnectionType getConnectionType() {
ConnectivityManager conMan = (ConnectivityManager) androidContext.getSystemService(Context.CONNECTIVITY_SERVICE);
//We are not connected to the internet at all...
//We are not connected to the internet at all...
if(conMan == null || conMan.getActiveNetworkInfo() == null)
return false;
return ConnectionType.Unknown;
//Is user using any of mobile internet types ? Hope I didn't miss any...
//Is user using any of mobile internet types ? Hope I didn't miss any...
switch (conMan.getActiveNetworkInfo().getType()) {
case ConnectivityManager.TYPE_MOBILE:
case ConnectivityManager.TYPE_MOBILE_DUN:
case ConnectivityManager.TYPE_MOBILE_HIPRI:
case ConnectivityManager.TYPE_MOBILE_MMS:
case ConnectivityManager.TYPE_MOBILE_SUPL:
return true;
return ConnectionType.Mobile;
case ConnectivityManager.TYPE_ETHERNET:
return ConnectionType.Ethernet;
case ConnectivityManager.TYPE_WIFI:
return ConnectionType.Wifi;
default:
return false;
return ConnectionType.Unknown;
}
}
}
......
......@@ -8,17 +8,25 @@ import com.getsentry.raven.connection.EventSendFailureCallback;
import com.getsentry.raven.dsn.Dsn;
import com.getsentry.raven.event.Event;
import com.getsentry.raven.event.EventBuilder;
import com.getsentry.raven.event.helper.EventBuilderHelper;
import com.getsentry.raven.event.interfaces.ExceptionInterface;
import net.engio.mbassy.listener.Handler;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import cz.nic.tablexia.bus.ApplicationBus;
import cz.nic.tablexia.game.AbstractTablexiaGame;
import cz.nic.tablexia.loader.TablexiaAbstractFileManager;
import cz.nic.tablexia.screen.AbstractTablexiaScreen;
/**
* Created by drahomir on 7/28/16.
......@@ -51,18 +59,18 @@ public class TablexiaRaven {
private enum InfoType {
TAG {
@Override
protected void insertInfo(EventBuilder eventBuilder, String name, String value) {
eventBuilder.withTag(name, value);
protected void insertInfo(TablexiaEventBuilderHelper tablexiaEventBuilderHelper, String name, String value) {
tablexiaEventBuilderHelper.addTag(name, value);
}
},
EXTRA {
@Override
protected void insertInfo(EventBuilder eventBuilder, String name, String value) {
eventBuilder.withExtra(name, value);
protected void insertInfo(TablexiaEventBuilderHelper tablexiaEventBuilderHelper, String name, String value) {
tablexiaEventBuilderHelper.addExtra(name, value);
}
};
protected void insertInfo(EventBuilder eventBuilder, String name, String value) {}
protected void insertInfo(TablexiaEventBuilderHelper tablexiaEventBuilderHelper, String name, String value) {}
}
/**
......@@ -81,6 +89,18 @@ public class TablexiaRaven {
return TablexiaBuildConfig.VERSION_NAME;
}
}),
BuildType(InfoType.TAG, "BuildType", new StringRunnable() {
@Override
public String run() {
return TablexiaSettings.getInstance().getBuildType().toString();
}
}),
ConnectionType(InfoType.TAG, "ConnectionType", new StringRunnable() {
@Override
public String run() {
return Tablexia.getConnectionManager().getConnectionType().toString();
}
}),
Language(InfoType.EXTRA, "Language", new StringRunnable() {
@Override
public String run() {
......@@ -98,12 +118,6 @@ public class TablexiaRaven {
public String run() {
return TablexiaSettings.getInstance().getSelectedUser().getUuid();
}
}),
BuildType(InfoType.TAG, "BuildType", new StringRunnable() {
@Override
public String run() {
return TablexiaSettings.getInstance().getBuildType().toString();
}
});
private static final String DEFAULT_FALLBACK_VALUE = "UNDEFINED";
......@@ -124,8 +138,8 @@ public class TablexiaRaven {
this.stringRunnable = stringRunnable;
}
public void insert(EventBuilder eventBuilder) {
type.insertInfo(eventBuilder, name, getSafeValue(stringRunnable, fallBackValue));
public void insert(TablexiaEventBuilderHelper eventBuilderHelper) {
type.insertInfo(eventBuilderHelper, name, getSafeValue(stringRunnable, fallBackValue));
}
private String getSafeValue(StringRunnable runnable, String defaultValue) {
......@@ -218,9 +232,53 @@ public class TablexiaRaven {
}
}
public class TablexiaEventBuilderHelper implements EventBuilderHelper {
private HashMap<String, String> tablexiaTags;
private HashMap<String, String> tablexiaExtras;
public TablexiaEventBuilderHelper() {
tablexiaTags = new HashMap<String, String>();
tablexiaExtras = new HashMap<String, String>();
}
public void addTag(String key, String value) {
tablexiaTags.put(key, value);
}
public void addExtra(String key, String value) {
tablexiaExtras.put(key, value);
}
public void removeTag(String key) {
if(tablexiaTags.containsKey(key))
tablexiaTags.remove(key);
}
public void removeExtra(String key) {
if(tablexiaExtras.containsKey(key))
tablexiaExtras.remove(key);
}
@Override
public void helpBuildingEvent(EventBuilder eventBuilder) {
for(Map.Entry<String, String> tag : tablexiaTags.entrySet()) {
eventBuilder.withTag(tag.getKey(), tag.getValue());
}
for(Map.Entry<String, String> extra : tablexiaExtras.entrySet()) {
eventBuilder.withExtra(extra.getKey(), extra.getValue());
}
}
}
/**
* Actual Raven client
*/
private static final String[] SCREEN_INFO_EVENT_KEYS = new String [] {
AbstractTablexiaGame.RANDOM_SEED_SCREEN_INFO_LABEL,
AbstractTablexiaGame.GAME_DIFFICULTY_SCREEN_INFO_LABEL
};
private static TablexiaRaven instance;
private final EventSendFailureCallback DEFAULT_SEND_EVENT_FAILURE_CALLBACK = new EventSendFailureCallback() {
......@@ -235,11 +293,17 @@ public class TablexiaRaven {
private Raven raven;
private ReportsManager reportsManager;
private TablexiaEventBuilderHelper tablexiaEventBuilderHelper;
private TablexiaRaven(String DSN) {
this.raven = new TablexiaRavenFactory().ravenInstance(DSN, DEFAULT_SEND_EVENT_FAILURE_CALLBACK);
this.sendFailureCallbacks = new HashSet<EventSendFailureCallback>();
this.reportsManager = new ReportsManager();
this.tablexiaEventBuilderHelper = new TablexiaEventBuilderHelper();
raven.addBuilderHelper(tablexiaEventBuilderHelper);
ApplicationBus.getInstance().subscribe(this);
}
private static boolean isStarted() {
......@@ -287,7 +351,7 @@ public class TablexiaRaven {
.withLevel(Event.Level.ERROR);
for(Info info : Info.values()) {
info.insert(eventBuilder);
info.insert(tablexiaEventBuilderHelper);
}
raven.runBuilderHelpers(eventBuilder);
......@@ -299,4 +363,20 @@ public class TablexiaRaven {
private void sentEvent(Event e) {
if(isStarted() && e != null) instance.raven.sendEvent(e);
}
@Handler
public void handleScreenChangedEvent(TablexiaApplication.ScreenChangedEvent screenChangedEvent) {
for(String infoEventKey : SCREEN_INFO_EVENT_KEYS) {
tablexiaEventBuilderHelper.removeExtra(infoEventKey);
}
}
@Handler
public void handleScreenInfoEvent(AbstractTablexiaScreen.ScreenInfoEvent screenInfoEvent) {
for(String infoEventKey : SCREEN_INFO_EVENT_KEYS) {
if(infoEventKey.equals(screenInfoEvent.getInfoKey())) {
tablexiaEventBuilderHelper.addExtra(screenInfoEvent.getInfoKey(), screenInfoEvent.getInfoValue());
}
}
}
}
\ No newline at end of file
......@@ -4,5 +4,12 @@ package cz.nic.tablexia.screen.loader;
* Created by Drahomir Karchnak on 11/12/15.
*/
public interface IConnectionManager {
enum ConnectionType {
Wifi,
Mobile,
Ethernet,
Unknown;
}
boolean isUsingMobileData();
ConnectionType getConnectionType();
}
......@@ -69,8 +69,13 @@ public class DesktopLauncher {
private static class DesktopConnectionManager implements IConnectionManager {
@Override
public boolean isUsingMobileData() {
//TODO - return false.. its desktop ;)
return false;//TablexiaSettings.getInstance().getBuildType() == TablexiaSettings.BuildType.DEVEL;
return false; //Just desktop things...
}
@Override
public ConnectionType getConnectionType() {
//TODO - Wifi || Ethernet in Java?
return ConnectionType.Ethernet;
}
}
}
......@@ -74,14 +74,23 @@ public class IOSLauncher extends IOSApplication.Delegate {
private static class IOSConnectionManager implements IConnectionManager {
@Override
public boolean isUsingMobileData() {
return getConnectionType() == ConnectionType.Mobile;
}
@Override
public ConnectionType getConnectionType() {
InetSocketAddress socketAddress = new InetSocketAddress(CONNECTION_CHECK_HOST, CONNECTION_CHECK_PORT);
// RoboVM tries to retrive IP address using network connection. If we don't have it InetSocketAddress.getAddress() returns null
// in that case SCNetworkReachability.create(socketAddress) throws IllegalArgumentException
if (socketAddress.getAddress() == null) {
return false;
return ConnectionType.Unknown;
}
SCNetworkReachabilityFlags flags = SCNetworkReachability.create(socketAddress).getFlags();
return flags.compareTo(SCNetworkReachabilityFlags.IsWWAN) == 1;
if(flags.compareTo(SCNetworkReachabilityFlags.Reachable) == 0) return ConnectionType.Unknown;
if(flags.compareTo(SCNetworkReachabilityFlags.IsWWAN) == 1) return ConnectionType.Mobile;
else return ConnectionType.Wifi;
}
}
}
\ No newline at end of file
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment