aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--main/res/layout/about_system_page.xml40
-rw-r--r--main/res/values/strings.xml2
-rw-r--r--main/src/cgeo/geocaching/AboutActivity.java52
-rw-r--r--main/src/cgeo/geocaching/sensors/OrientationProvider.java5
-rw-r--r--main/src/cgeo/geocaching/sensors/RotationProvider.java8
5 files changed, 106 insertions, 1 deletions
diff --git a/main/res/layout/about_system_page.xml b/main/res/layout/about_system_page.xml
new file mode 100644
index 0000000..7c98ca6
--- /dev/null
+++ b/main/res/layout/about_system_page.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"
+ android:orientation="vertical"
+ android:padding="4dip"
+ tools:context=".AboutActivity$SystemViewCreator" >
+
+ <LinearLayout
+ android:layout_width="fill_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical" >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="left"
+ android:layout_margin="7dip"
+ android:linksClickable="true"
+ android:paddingLeft="3dip"
+ android:text="@string/about_system_include"
+ android:textColor="?text_color"
+ android:textColorLink="?text_color_link"
+ android:textSize="14sp" />
+
+ <TextView
+ android:id="@+id/system"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="left"
+ android:layout_margin="7dip"
+ android:linksClickable="true"
+ android:paddingLeft="3dip"
+ android:textColor="?text_color"
+ android:textColorLink="?text_color_link"
+ android:textIsSelectable="true"
+ android:textSize="12sp" />
+ </LinearLayout>
+
+</ScrollView>
diff --git a/main/res/values/strings.xml b/main/res/values/strings.xml
index df7c7bd..77a0176 100644
--- a/main/res/values/strings.xml
+++ b/main/res/values/strings.xml
@@ -356,12 +356,14 @@
<!-- about -->
<string name="about_version">Version</string>
<string name="about_changelog">Changelog</string>
+ <string name="about_system">System</string>
<string name="about_donate">Donate</string>
<string name="about_donation_more">Donate\ndevelopment</string>
<string name="about_contributors">Contributors</string>
<string name="about_license">License</string>
<string name="about_apache_license"><a href="">Apache License, Version 2.0</a></string>
<string name="about_help">Help</string>
+ <string name="about_system_include">Please include the following system information when sending a bug report or asking for more information about c:geo:</string>
<!-- settings -->
<string name="settings_title_services">Services</string>
diff --git a/main/src/cgeo/geocaching/AboutActivity.java b/main/src/cgeo/geocaching/AboutActivity.java
index f6d204b..d7d60d2 100644
--- a/main/src/cgeo/geocaching/AboutActivity.java
+++ b/main/src/cgeo/geocaching/AboutActivity.java
@@ -4,6 +4,10 @@ import butterknife.ButterKnife;
import butterknife.InjectView;
import cgeo.geocaching.activity.AbstractViewPagerActivity;
+import cgeo.geocaching.sensors.OrientationProvider;
+import cgeo.geocaching.sensors.RotationProvider;
+import cgeo.geocaching.sensors.Sensors;
+import cgeo.geocaching.settings.Settings;
import cgeo.geocaching.ui.AbstractCachingPageViewCreator;
import cgeo.geocaching.ui.AnchorAwareLinkMovementMethod;
import cgeo.geocaching.utils.Version;
@@ -17,6 +21,8 @@ import org.apache.commons.lang3.tuple.Pair;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
+import android.os.Build;
+import android.os.Build.VERSION;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
@@ -82,6 +88,20 @@ public class AboutActivity extends AbstractViewPagerActivity<AboutActivity.Page>
}
+ class SystemViewCreator extends AbstractCachingPageViewCreator<ScrollView> {
+
+ @InjectView(R.id.system) protected TextView system;
+
+ @Override
+ public ScrollView getDispatchedView(final ViewGroup parentView) {
+ final ScrollView view = (ScrollView) getLayoutInflater().inflate(R.layout.about_system_page, parentView, false);
+ ButterKnife.inject(this, view);
+ system.setText(systemInformation(AboutActivity.this));
+ system.setMovementMethod(AnchorAwareLinkMovementMethod.getInstance());
+ return view;
+ }
+ }
+
class HelpViewCreator extends AbstractCachingPageViewCreator<ScrollView> {
@InjectView(R.id.support) protected TextView support;
@@ -95,7 +115,8 @@ public class AboutActivity extends AbstractViewPagerActivity<AboutActivity.Page>
public ScrollView getDispatchedView(final ViewGroup parentView) {
final ScrollView view = (ScrollView) getLayoutInflater().inflate(R.layout.about_help_page, parentView, false);
ButterKnife.inject(this, view);
- setClickListener(support, "mailto:support@cgeo.org?subject=" + Uri.encode("cgeo " + Version.getVersionName(AboutActivity.this)));
+ setClickListener(support, "mailto:support@cgeo.org?subject=" + Uri.encode("cgeo " + Version.getVersionName(AboutActivity.this)) +
+ "&body=" + Uri.encode(systemInformation(AboutActivity.this)) + "\n");
setClickListener(website, "http://www.cgeo.org/");
setClickListener(facebook, "http://www.facebook.com/pages/cgeo/297269860090");
setClickListener(twitter, "http://twitter.com/android_gc");
@@ -131,6 +152,7 @@ public class AboutActivity extends AbstractViewPagerActivity<AboutActivity.Page>
VERSION(R.string.about_version),
HELP(R.string.about_help),
CHANGELOG(R.string.about_changelog),
+ SYSTEM(R.string.about_system),
CONTRIBUTORS(R.string.about_contributors),
LICENSE(R.string.about_license);
@@ -183,6 +205,8 @@ public class AboutActivity extends AbstractViewPagerActivity<AboutActivity.Page>
return new HelpViewCreator();
case CHANGELOG:
return new ChangeLogViewCreator();
+ case SYSTEM:
+ return new SystemViewCreator();
case CONTRIBUTORS:
return new ContributorsViewCreator();
case LICENSE:
@@ -224,4 +248,30 @@ public class AboutActivity extends AbstractViewPagerActivity<AboutActivity.Page>
fromActivity.startActivity(intent);
}
+
+ private static String presence(final Boolean present) {
+ return present ? "present" : "absent";
+ }
+
+ private static String systemInformation(final Context context) {
+ final boolean googlePlayServicesAvailable = CgeoApplication.getInstance().isGooglePlayServicesAvailable();
+ final StringBuilder body = new StringBuilder("--- System information ---")
+ .append("\nDevice: ").append(Build.MODEL).append(" (").append(Build.PRODUCT).append(", ").append(Build.BRAND).append(")")
+ .append("\nAndroid version: ").append(VERSION.RELEASE)
+ .append("\nAndroid build: ").append(Build.DISPLAY)
+ .append("\nCgeo version: ").append(Version.getVersionName(context))
+ .append("\nPlay services: ").append(presence(googlePlayServicesAvailable));
+ if (googlePlayServicesAvailable) {
+ body.append("\nUse Play services: ").append(Settings.useGooglePlayServices() ? "yes" : "no");
+ }
+ body
+ .append("\nLow power mode: ").append(Settings.useLowPowerMode() ? "active" : "inactive")
+ .append("\nMagnetic field sensor: ").append(presence(Sensors.getInstance().hasMagneticFieldSensor()))
+ .append("\nRotation sensor: ").append(presence(RotationProvider.hasRotationSensor(context)))
+ .append("\nGeomagnetic rotation sensor: ").append(presence(RotationProvider.hasGeomagneticRotationSensor(context)))
+ .append("\nOrientation sensor: ").append(presence(OrientationProvider.hasOrientationSensor(context)))
+ .append("\n--- End of system information ---\n");
+ return body.toString();
+ }
+
}
diff --git a/main/src/cgeo/geocaching/sensors/OrientationProvider.java b/main/src/cgeo/geocaching/sensors/OrientationProvider.java
index db23c1f..ce84ffb 100644
--- a/main/src/cgeo/geocaching/sensors/OrientationProvider.java
+++ b/main/src/cgeo/geocaching/sensors/OrientationProvider.java
@@ -27,6 +27,11 @@ public class OrientationProvider extends LooperCallbacks<Float> implements Senso
}
}
+ @SuppressWarnings("deprecation")
+ public static boolean hasOrientationSensor(final Context context) {
+ return ((SensorManager) context.getSystemService(Context.SENSOR_SERVICE)).getDefaultSensor(Sensor.TYPE_ORIENTATION) != null;
+ }
+
@Override
public void onSensorChanged(final SensorEvent event) {
subject.onNext(event.values[0]);
diff --git a/main/src/cgeo/geocaching/sensors/RotationProvider.java b/main/src/cgeo/geocaching/sensors/RotationProvider.java
index 5b5d288..02dbc8c 100644
--- a/main/src/cgeo/geocaching/sensors/RotationProvider.java
+++ b/main/src/cgeo/geocaching/sensors/RotationProvider.java
@@ -39,6 +39,14 @@ public class RotationProvider extends LooperCallbacks<Float> implements SensorEv
}
}
+ public static boolean hasRotationSensor(final Context context) {
+ return ((SensorManager) context.getSystemService(Context.SENSOR_SERVICE)).getDefaultSensor(Sensor.TYPE_ROTATION_VECTOR) != null;
+ }
+
+ public static boolean hasGeomagneticRotationSensor(final Context context) {
+ return ((SensorManager) context.getSystemService(Context.SENSOR_SERVICE)).getDefaultSensor(Sensor.TYPE_GEOMAGNETIC_ROTATION_VECTOR) != null;
+ }
+
@Override
public void onSensorChanged(final SensorEvent event) {
// On some Samsung devices, SensorManager#getRotationMatrixFromVector throws an exception if the rotation