package de.blau.android;
import java.io.File;
import java.util.Date;
import org.acra.ACRA;
import android.annotation.SuppressLint;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import de.blau.android.osm.StorageDelegator;
import de.blau.android.prefs.Preferences;
import de.blau.android.tasks.TaskStorage;
import de.blau.android.util.DateFormatter;
import de.blau.android.views.overlay.MapOverlayTilesOverlay;
import de.blau.android.views.overlay.MapTilesOverlay;
import de.blau.android.views.overlay.MapViewOverlay;
public class DebugInformation extends AppCompatActivity {
private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
@SuppressLint("NewApi")
@Override
protected void onCreate(Bundle savedInstanceState) {
Preferences prefs = new Preferences(this);
if (prefs.lightThemeEnabled()) {
setTheme(R.style.Theme_customLight);
}
super.onCreate(savedInstanceState);
View container = View.inflate(this, R.layout.debug_viewer, null);
TextView textFull = (TextView)container.findViewById(R.id.debugText);
Button send = (Button)container.findViewById(R.id.sendDebug);
send.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
ACRA.getErrorReporter().putCustomData("DEBUGINFO", getDebugText("<BR>"));
ACRA.getErrorReporter().handleException(null);
}
});
textFull.setAutoLinkMask(0);
textFull.setText(getDebugText("\n"));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
textFull.setTextIsSelectable(true);
}
setContentView(container);
}
String getDebugText(String eol) {
StringBuilder builder = new StringBuilder();
builder.append(getString(R.string.app_name_version) + eol);
builder.append("Maximum avaliable memory " + Runtime.getRuntime().maxMemory() + eol);
builder.append("Total memory used " + Runtime.getRuntime().totalMemory() + eol);
Map map = App.getLogic().getMap();
if (map != null) {
synchronized(map.mOverlays) {
for (MapViewOverlay ov:map.mOverlays) {
if (ov instanceof MapTilesOverlay || ov instanceof MapOverlayTilesOverlay) {
builder.append("Tile Cache " + ((MapTilesOverlay)ov).getRendererInfo().getId() + " usage " + ((MapTilesOverlay)ov).getTileProvider().getCacheUsageInfo() + eol);
}
}
}
} else {
builder.append("Main not available\n");
}
File stateFile = new File(getFilesDir(), StorageDelegator.FILENAME);
if (stateFile.exists()) {
builder.append("State file size " + stateFile.length() + " last changed " + DateFormatter.getFormattedString(DATE_TIME_PATTERN, new Date(stateFile.lastModified())) + eol);
} else {
builder.append("No state file found\n");
}
File bugStateFile = new File(getFilesDir(), TaskStorage.FILENAME);
if (bugStateFile.exists()) {
builder.append("Bug state file size " + bugStateFile.length() + " last changed " + DateFormatter.getFormattedString(DATE_TIME_PATTERN, new Date(bugStateFile.lastModified())) + eol);
} else {
builder.append("No bug state file found\n");
}
StorageDelegator delegator = App.getDelegator();
builder.append("Relations (current/API): " + delegator.getCurrentStorage().getRelations().size() + "/"
+ delegator.getApiRelationCount()+eol);
builder.append("Ways (current/API): " + delegator.getCurrentStorage().getWays().size() + "/"
+ delegator.getApiWayCount()+eol);
builder.append("Nodes (current/Waynodes/API): " + delegator.getCurrentStorage().getNodes().size() + "/"
+ delegator.getCurrentStorage().getWaynodes().size() + "/" + delegator.getApiNodeCount()+eol);
builder.append("Available location providers\n");
LocationManager locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
for (String providerName:locationManager.getAllProviders()) {
builder.append(providerName + " enabled " + locationManager.isProviderEnabled(providerName) + eol);
}
return builder.toString();
}
}