diff options
| -rw-r--r-- | main/res/layout/about_system_page.xml | 40 | ||||
| -rw-r--r-- | main/res/values/strings.xml | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/AboutActivity.java | 52 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/sensors/OrientationProvider.java | 5 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/sensors/RotationProvider.java | 8 |
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 |
