diff options
9 files changed, 54 insertions, 164 deletions
diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel8.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel8.java deleted file mode 100644 index 1189ff5..0000000 --- a/main/src/cgeo/geocaching/compatibility/AndroidLevel8.java +++ /dev/null @@ -1,41 +0,0 @@ -package cgeo.geocaching.compatibility; - -import cgeo.geocaching.utils.Log; - -import android.annotation.TargetApi; -import android.app.Activity; -import android.app.backup.BackupManager; -import android.os.Environment; -import android.view.Surface; - -import java.io.File; - -@TargetApi(8) -public class AndroidLevel8 implements AndroidLevel8Interface { - - @Override - public void dataChanged(final String name) { - Log.i("Requesting settings backup with settings manager"); - BackupManager.dataChanged(name); - } - - @Override - public int getRotationOffset(final Activity activity) { - switch (activity.getWindowManager().getDefaultDisplay().getRotation()) { - case Surface.ROTATION_90: - return 90; - case Surface.ROTATION_180: - return 180; - case Surface.ROTATION_270: - return 270; - default: - return 0; - } - } - - @Override - public File getExternalPictureDir() { - return Environment.getExternalStoragePublicDirectory( - Environment.DIRECTORY_PICTURES); - } -} diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel8Emulation.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel8Emulation.java deleted file mode 100644 index 6d5781f..0000000 --- a/main/src/cgeo/geocaching/compatibility/AndroidLevel8Emulation.java +++ /dev/null @@ -1,38 +0,0 @@ -package cgeo.geocaching.compatibility; - -import android.annotation.TargetApi; -import android.app.Activity; -import android.content.res.Configuration; -import android.os.Environment; -import android.view.Display; - -import java.io.File; - -@TargetApi(value = 7) -public class AndroidLevel8Emulation implements AndroidLevel8Interface { - - @Override - public void dataChanged(final String name) { - // do nothing - } - - @Override - public int getRotationOffset(Activity activity) { - final Display display = activity.getWindowManager().getDefaultDisplay(); - - // the non deprecated method is available in API 8+ only, so we cannot deal better with this - @SuppressWarnings("deprecation") - final int rotation = display.getOrientation(); - - if (rotation == Configuration.ORIENTATION_LANDSCAPE) { - return 90; - } - return 0; - } - - @Override - public File getExternalPictureDir() { - // Use externalStorage/Pictures as default - return new File(Environment.getExternalStorageDirectory(), "Pictures"); - } -} diff --git a/main/src/cgeo/geocaching/compatibility/AndroidLevel8Interface.java b/main/src/cgeo/geocaching/compatibility/AndroidLevel8Interface.java deleted file mode 100644 index 2ba3708..0000000 --- a/main/src/cgeo/geocaching/compatibility/AndroidLevel8Interface.java +++ /dev/null @@ -1,11 +0,0 @@ -package cgeo.geocaching.compatibility; - -import android.app.Activity; - -import java.io.File; - -public interface AndroidLevel8Interface { - public void dataChanged(final String name); - public int getRotationOffset(final Activity activity); - public File getExternalPictureDir(); -}
\ No newline at end of file diff --git a/main/src/cgeo/geocaching/compatibility/Compatibility.java b/main/src/cgeo/geocaching/compatibility/Compatibility.java index 8fbc110..a293cfd 100644 --- a/main/src/cgeo/geocaching/compatibility/Compatibility.java +++ b/main/src/cgeo/geocaching/compatibility/Compatibility.java @@ -1,49 +1,25 @@ package cgeo.geocaching.compatibility; -import cgeo.geocaching.utils.AngleUtils; - import org.eclipse.jdt.annotation.NonNull; import android.app.Activity; import android.graphics.Point; import android.os.Build; -import java.io.File; - public final class Compatibility { private final static int sdkVersion = Build.VERSION.SDK_INT; - private final static boolean isLevel8 = sdkVersion >= 8; - private final static AndroidLevel8Interface level8; private final static AndroidLevel11Interface level11; private final static AndroidLevel13Interface level13; private final static AndroidLevel19Interface level19; static { - level8 = isLevel8 ? new AndroidLevel8() : new AndroidLevel8Emulation(); level11 = sdkVersion >= 11 ? new AndroidLevel11() : new AndroidLevel11Emulation(); level13 = sdkVersion >= 13 ? new AndroidLevel13() : new AndroidLevel13Emulation(); level19 = sdkVersion >= 19 ? new AndroidLevel19() : new AndroidLevel19Emulation(); } - /** - * Add 90, 180 or 270 degrees to the given rotation. - * - * @param directionNowPre - * the direction in degrees before adjustment - * @param activity - * the activity whose rotation is used to adjust the direction - * @return the adjusted direction, in the [0, 360[ range - */ - public static float getDirectionNow(final float directionNowPre, final Activity activity) { - return AngleUtils.normalize(directionNowPre + level8.getRotationOffset(activity)); - } - - public static void dataChanged(final String name) { - level8.dataChanged(name); - } - public static void invalidateOptionsMenu(final Activity activity) { level11.invalidateOptionsMenu(activity); } @@ -56,10 +32,6 @@ public final class Compatibility { return level13.getDisplaySize(); } - public static File getExternalPictureDir() { - return level8.getExternalPictureDir(); - } - public static void importGpxFromStorageAccessFramework(final @NonNull Activity activity, int requestCodeImportGpx) { level19.importGpxFromStorageAccessFramework(activity, requestCodeImportGpx); } diff --git a/main/src/cgeo/geocaching/sensors/DirectionProvider.java b/main/src/cgeo/geocaching/sensors/DirectionProvider.java index 8efbc1f..44732f7 100644 --- a/main/src/cgeo/geocaching/sensors/DirectionProvider.java +++ b/main/src/cgeo/geocaching/sensors/DirectionProvider.java @@ -1,9 +1,8 @@ package cgeo.geocaching.sensors; -import android.os.Process; -import cgeo.geocaching.compatibility.Compatibility; - +import cgeo.geocaching.utils.AngleUtils; import cgeo.geocaching.utils.StartableHandlerThread; + import rx.Observable; import rx.Observable.OnSubscribe; import rx.Subscriber; @@ -15,7 +14,9 @@ import android.hardware.Sensor; import android.hardware.SensorEvent; import android.hardware.SensorEventListener; import android.hardware.SensorManager; -import android.os.*; +import android.os.Handler; +import android.os.Process; +import android.view.Surface; public class DirectionProvider { @@ -24,8 +25,8 @@ public class DirectionProvider { static class Listener implements SensorEventListener, StartableHandlerThread.Callback { private int count = 0; - private SensorManager sensorManager; + private SensorManager sensorManager; @Override public void onSensorChanged(final SensorEvent event) { subject.onNext(event.values[0]); @@ -67,10 +68,10 @@ public class DirectionProvider { private static final StartableHandlerThread handlerThread = new StartableHandlerThread("DirectionProvider thread", Process.THREAD_PRIORITY_BACKGROUND, new Listener()); + static { handlerThread.start(); } - static public Observable<Float> create(final Context context) { return Observable.create(new OnSubscribe<Float>() { @Override @@ -90,7 +91,20 @@ public class DirectionProvider { */ public static float getDirectionNow(final Activity activity, final float direction) { - return Compatibility.getDirectionNow(direction, activity); + return AngleUtils.normalize(direction + getRotationOffset(activity)); + } + + private static int getRotationOffset(final Activity activity) { + switch (activity.getWindowManager().getDefaultDisplay().getRotation()) { + case Surface.ROTATION_90: + return 90; + case Surface.ROTATION_180: + return 180; + case Surface.ROTATION_270: + return 270; + default: + return 0; + } } } diff --git a/main/src/cgeo/geocaching/settings/SettingsActivity.java b/main/src/cgeo/geocaching/settings/SettingsActivity.java index 76f48e2..8834a3b 100644 --- a/main/src/cgeo/geocaching/settings/SettingsActivity.java +++ b/main/src/cgeo/geocaching/settings/SettingsActivity.java @@ -8,7 +8,6 @@ import cgeo.geocaching.SelectMapfileActivity; import cgeo.geocaching.activity.ActivityMixin; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory; import cgeo.geocaching.apps.cache.navi.NavigationAppFactory.NavigationAppsEnum; -import cgeo.geocaching.compatibility.Compatibility; import cgeo.geocaching.connector.gc.GCConnector; import cgeo.geocaching.connector.gc.GCLogin; import cgeo.geocaching.files.SimpleDirChooser; @@ -21,6 +20,7 @@ import org.apache.commons.lang3.StringUtils; import org.openintents.intents.FileManagerIntents; import android.app.ProgressDialog; +import android.app.backup.BackupManager; import android.content.Context; import android.content.Intent; import android.content.res.Resources; @@ -111,7 +111,8 @@ public class SettingsActivity extends PreferenceActivity { @Override protected void onPause() { - Compatibility.dataChanged(getPackageName()); + Log.i("Requesting settings backup with settings manager"); + BackupManager.dataChanged(getPackageName()); super.onPause(); } diff --git a/main/src/cgeo/geocaching/utils/ImageUtils.java b/main/src/cgeo/geocaching/utils/ImageUtils.java index eb91724..671ded9 100644 --- a/main/src/cgeo/geocaching/utils/ImageUtils.java +++ b/main/src/cgeo/geocaching/utils/ImageUtils.java @@ -15,6 +15,7 @@ import android.graphics.Rect; import android.graphics.drawable.BitmapDrawable; import android.media.ExifInterface; import android.net.Uri; +import android.os.Environment; import java.io.BufferedOutputStream; import java.io.File; @@ -200,8 +201,8 @@ public final class ImageUtils { public static File getOutputImageFile() { // To be safe, you should check that the SDCard is mounted // using Environment.getExternalStorageState() before doing this. + final File mediaStorageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "cgeo"); - File mediaStorageDir = new File(Compatibility.getExternalPictureDir(), "cgeo"); // This location works best if you want the created images to be shared // between applications and persist after your app has been uninstalled. diff --git a/tests/src/cgeo/geocaching/compatibility/CompatibilityTest.java b/tests/src/cgeo/geocaching/compatibility/CompatibilityTest.java deleted file mode 100644 index 92a5f9d..0000000 --- a/tests/src/cgeo/geocaching/compatibility/CompatibilityTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package cgeo.geocaching.compatibility; - -import cgeo.geocaching.MainActivity; - -import android.annotation.TargetApi; -import android.os.Build; -import android.test.ActivityInstrumentationTestCase2; - -import junit.framework.Assert; - -public class CompatibilityTest extends ActivityInstrumentationTestCase2<MainActivity> { - - private MainActivity activity; - - @TargetApi(Build.VERSION_CODES.FROYO) - public CompatibilityTest() { - super(MainActivity.class); - } - - @Override - protected void setUp() throws Exception { - super.setUp(); - activity = getActivity(); - } - - public static void testDataChanged() { - // This should not raise an exception in any Android version - Compatibility.dataChanged("cgeo.geocaching"); - } - - public void testGetDirectionNow() { - final float angle = Compatibility.getDirectionNow(1.0f, activity); - Assert.assertTrue(angle == 1.0f || angle == 91.0f || angle == 181.0f || angle == 271.0f); - } - -} diff --git a/tests/src/cgeo/geocaching/sensors/SensorsTest.java b/tests/src/cgeo/geocaching/sensors/SensorsTest.java new file mode 100644 index 0000000..7bf723a --- /dev/null +++ b/tests/src/cgeo/geocaching/sensors/SensorsTest.java @@ -0,0 +1,28 @@ +package cgeo.geocaching.sensors; + +import cgeo.geocaching.MainActivity; + +import junit.framework.Assert; + +import android.test.ActivityInstrumentationTestCase2; + +public class SensorsTest extends ActivityInstrumentationTestCase2<MainActivity> { + + private MainActivity activity; + + public SensorsTest() { + super(MainActivity.class); + } + + @Override + protected void setUp() throws Exception { + super.setUp(); + activity = getActivity(); + } + + public void testGetDirectionNow() { + final float angle = DirectionProvider.getDirectionNow(activity, 1.0f); + Assert.assertTrue(angle == 1.0f || angle == 91.0f || angle == 181.0f || angle == 271.0f); + } + +} |
