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 { ...@@ -95,23 +95,34 @@ public class AndroidLauncher extends AndroidApplication {
@Override @Override
public boolean isUsingMobileData() { public boolean isUsingMobileData() {
return getConnectionType() == ConnectionType.Mobile;
}
@Override
public ConnectionType getConnectionType() {
ConnectivityManager conMan = (ConnectivityManager) androidContext.getSystemService(Context.CONNECTIVITY_SERVICE); 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) 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()) { switch (conMan.getActiveNetworkInfo().getType()) {
case ConnectivityManager.TYPE_MOBILE: case ConnectivityManager.TYPE_MOBILE:
case ConnectivityManager.TYPE_MOBILE_DUN: case ConnectivityManager.TYPE_MOBILE_DUN:
case ConnectivityManager.TYPE_MOBILE_HIPRI: case ConnectivityManager.TYPE_MOBILE_HIPRI:
case ConnectivityManager.TYPE_MOBILE_MMS: case ConnectivityManager.TYPE_MOBILE_MMS:
case ConnectivityManager.TYPE_MOBILE_SUPL: 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: default:
return false; return ConnectionType.Unknown;
} }
} }
} }
......
...@@ -8,17 +8,25 @@ import com.getsentry.raven.connection.EventSendFailureCallback; ...@@ -8,17 +8,25 @@ import com.getsentry.raven.connection.EventSendFailureCallback;
import com.getsentry.raven.dsn.Dsn; import com.getsentry.raven.dsn.Dsn;
import com.getsentry.raven.event.Event; import com.getsentry.raven.event.Event;
import com.getsentry.raven.event.EventBuilder; import com.getsentry.raven.event.EventBuilder;
import com.getsentry.raven.event.helper.EventBuilderHelper;
import com.getsentry.raven.event.interfaces.ExceptionInterface; import com.getsentry.raven.event.interfaces.ExceptionInterface;
import net.engio.mbassy.listener.Handler;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.Map;
import java.util.Set; 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.loader.TablexiaAbstractFileManager;
import cz.nic.tablexia.screen.AbstractTablexiaScreen;
/** /**
* Created by drahomir on 7/28/16. * Created by drahomir on 7/28/16.
...@@ -51,18 +59,18 @@ public class TablexiaRaven { ...@@ -51,18 +59,18 @@ public class TablexiaRaven {
private enum InfoType { private enum InfoType {
TAG { TAG {
@Override @Override
protected void insertInfo(EventBuilder eventBuilder, String name, String value) { protected void insertInfo(TablexiaEventBuilderHelper tablexiaEventBuilderHelper, String name, String value) {
eventBuilder.withTag(name, value); tablexiaEventBuilderHelper.addTag(name, value);
} }
}, },
EXTRA { EXTRA {
@Override @Override
protected void insertInfo(EventBuilder eventBuilder, String name, String value) { protected void insertInfo(TablexiaEventBuilderHelper tablexiaEventBuilderHelper, String name, String value) {
eventBuilder.withExtra(name, 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 { ...@@ -81,6 +89,18 @@ public class TablexiaRaven {
return TablexiaBuildConfig.VERSION_NAME; 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() { Language(InfoType.EXTRA, "Language", new StringRunnable() {
@Override @Override
public String run() { public String run() {
...@@ -98,12 +118,6 @@ public class TablexiaRaven { ...@@ -98,12 +118,6 @@ public class TablexiaRaven {
public String run() { public String run() {
return TablexiaSettings.getInstance().getSelectedUser().getUuid(); 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"; private static final String DEFAULT_FALLBACK_VALUE = "UNDEFINED";
...@@ -124,8 +138,8 @@ public class TablexiaRaven { ...@@ -124,8 +138,8 @@ public class TablexiaRaven {
this.stringRunnable = stringRunnable; this.stringRunnable = stringRunnable;
} }
public void insert(EventBuilder eventBuilder) { public void insert(TablexiaEventBuilderHelper eventBuilderHelper) {
type.insertInfo(eventBuilder, name, getSafeValue(stringRunnable, fallBackValue)); type.insertInfo(eventBuilderHelper, name, getSafeValue(stringRunnable, fallBackValue));
} }
private String getSafeValue(StringRunnable runnable, String defaultValue) { private String getSafeValue(StringRunnable runnable, String defaultValue) {
...@@ -218,9 +232,53 @@ public class TablexiaRaven { ...@@ -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 * 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 static TablexiaRaven instance;
private final EventSendFailureCallback DEFAULT_SEND_EVENT_FAILURE_CALLBACK = new EventSendFailureCallback() { private final EventSendFailureCallback DEFAULT_SEND_EVENT_FAILURE_CALLBACK = new EventSendFailureCallback() {
...@@ -235,11 +293,17 @@ public class TablexiaRaven { ...@@ -235,11 +293,17 @@ public class TablexiaRaven {
private Raven raven; private Raven raven;
private ReportsManager reportsManager; private ReportsManager reportsManager;
private TablexiaEventBuilderHelper tablexiaEventBuilderHelper;
private TablexiaRaven(String DSN) { private TablexiaRaven(String DSN) {
this.raven = new TablexiaRavenFactory().ravenInstance(DSN, DEFAULT_SEND_EVENT_FAILURE_CALLBACK); this.raven = new TablexiaRavenFactory().ravenInstance(DSN, DEFAULT_SEND_EVENT_FAILURE_CALLBACK);
this.sendFailureCallbacks = new HashSet<EventSendFailureCallback>(); this.sendFailureCallbacks = new HashSet<EventSendFailureCallback>();
this.reportsManager = new ReportsManager(); this.reportsManager = new ReportsManager();
this.tablexiaEventBuilderHelper = new TablexiaEventBuilderHelper();
raven.addBuilderHelper(tablexiaEventBuilderHelper);
ApplicationBus.getInstance().subscribe(this);
} }
private static boolean isStarted() { private static boolean isStarted() {
...@@ -287,7 +351,7 @@ public class TablexiaRaven { ...@@ -287,7 +351,7 @@ public class TablexiaRaven {
.withLevel(Event.Level.ERROR); .withLevel(Event.Level.ERROR);
for(Info info : Info.values()) { for(Info info : Info.values()) {
info.insert(eventBuilder); info.insert(tablexiaEventBuilderHelper);
} }
raven.runBuilderHelpers(eventBuilder); raven.runBuilderHelpers(eventBuilder);
...@@ -299,4 +363,20 @@ public class TablexiaRaven { ...@@ -299,4 +363,20 @@ public class TablexiaRaven {
private void sentEvent(Event e) { private void sentEvent(Event e) {
if(isStarted() && e != null) instance.raven.sendEvent(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; ...@@ -4,5 +4,12 @@ package cz.nic.tablexia.screen.loader;
* Created by Drahomir Karchnak on 11/12/15. * Created by Drahomir Karchnak on 11/12/15.
*/ */
public interface IConnectionManager { public interface IConnectionManager {
enum ConnectionType {
Wifi,
Mobile,
Ethernet,
Unknown;
}
boolean isUsingMobileData(); boolean isUsingMobileData();
ConnectionType getConnectionType();
} }
...@@ -69,8 +69,13 @@ public class DesktopLauncher { ...@@ -69,8 +69,13 @@ public class DesktopLauncher {
private static class DesktopConnectionManager implements IConnectionManager { private static class DesktopConnectionManager implements IConnectionManager {
@Override @Override
public boolean isUsingMobileData() { public boolean isUsingMobileData() {
//TODO - return false.. its desktop ;) return false; //Just desktop things...
return false;//TablexiaSettings.getInstance().getBuildType() == TablexiaSettings.BuildType.DEVEL;
} }
@Override
public ConnectionType getConnectionType() {
//TODO - Wifi || Ethernet in Java?
return ConnectionType.Ethernet;
}
} }
} }
...@@ -74,14 +74,23 @@ public class IOSLauncher extends IOSApplication.Delegate { ...@@ -74,14 +74,23 @@ public class IOSLauncher extends IOSApplication.Delegate {
private static class IOSConnectionManager implements IConnectionManager { private static class IOSConnectionManager implements IConnectionManager {
@Override @Override
public boolean isUsingMobileData() { public boolean isUsingMobileData() {
return getConnectionType() == ConnectionType.Mobile;
}
@Override
public ConnectionType getConnectionType() {
InetSocketAddress socketAddress = new InetSocketAddress(CONNECTION_CHECK_HOST, CONNECTION_CHECK_PORT); 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 // 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 // in that case SCNetworkReachability.create(socketAddress) throws IllegalArgumentException
if (socketAddress.getAddress() == null) { if (socketAddress.getAddress() == null) {
return false; return ConnectionType.Unknown;
} }
SCNetworkReachabilityFlags flags = SCNetworkReachability.create(socketAddress).getFlags(); 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