diff --git a/app/build.gradle b/app/build.gradle
index bf1b748f..4bdd068a 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -15,65 +15,6 @@ repositories {
// }
//}
-ext {
- assertjVersion = '3.9.0'
- butterknifeVersion = '8.8.1'
- constraintLayoutVersion = '1.1.2'
- daggerVersion = '2.13'
- gsonVersion = '2.8.1'
- guavaVersion = '20.0'
- jsonVersion = '20170516'
- junitVersion = '4.12'
- materialDialogsVersion = '0.9.6.0' // Depends on the android support lib. Their version must match ours.
- multidexVersion = '1.0.3'
- osmbonuspackVersion = '6.5.2'
- osmdroidVersion = '6.0.2'
- picassoVersion = '2.5.2'
- playServicesVersion = '11.6.2'
- retrofitVersion = '2.3.0'
- robolectricVersion = '3.7'
- rxAndroidVersion = '2.0.2'
- rxJavaVersion = '2.1.7'
- supportLibVersion = '27.0.1'
-}
-
-dependencies {
- annotationProcessor "com.google.dagger:dagger-android-processor:$daggerVersion"
- annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
- annotationProcessor "com.jakewharton:butterknife-compiler:$butterknifeVersion"
- implementation "com.afollestad.material-dialogs:core:$materialDialogsVersion" // https://github.com/afollestad/material-dialogs
- implementation "com.afollestad.material-dialogs:commons:$materialDialogsVersion"
- implementation "com.android.support:appcompat-v7:$supportLibVersion"
- implementation "com.android.support:cardview-v7:$supportLibVersion"
- implementation "com.android.support.constraint:constraint-layout:$constraintLayoutVersion"
- implementation "com.android.support:design:$supportLibVersion"
- implementation "com.android.support:multidex:$multidexVersion"
- implementation "com.android.support:preference-v14:$supportLibVersion"
- implementation "com.android.support:support-v4:$supportLibVersion"
- implementation "com.github.MKergall:osmbonuspack:$osmbonuspackVersion"
- implementation "com.google.android.gms:play-services-analytics:$playServicesVersion"
- implementation "com.google.code.gson:gson:$gsonVersion"
- implementation "com.google.dagger:dagger:$daggerVersion"
- implementation "com.google.dagger:dagger-android:$daggerVersion"
- implementation "com.google.dagger:dagger-android-support:$daggerVersion"
- implementation "com.google.guava:guava:$guavaVersion"
- implementation "com.jakewharton:butterknife:$butterknifeVersion"
- implementation "com.squareup.picasso:picasso:$picassoVersion"
- implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion"
- implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
- implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"
- implementation "io.reactivex.rxjava2:rxandroid:$rxAndroidVersion"
- implementation "io.reactivex.rxjava2:rxjava:$rxJavaVersion"
- implementation "org.osmdroid:osmdroid-android:$osmdroidVersion"
-
- testImplementation "junit:junit:$junitVersion"
- testImplementation "org.assertj:assertj-core:$assertjVersion"
- testImplementation "org.json:json:$jsonVersion"
- testImplementation "org.robolectric:robolectric:$robolectricVersion"
- testImplementation "org.robolectric:shadows-multidex:$robolectricVersion"
- testImplementation "org.robolectric:shadows-supportv4:$robolectricVersion"
-}
-
android {
buildToolsVersion "27.0.3" // also update in .travis.yml
@@ -116,6 +57,16 @@ android {
}
}
+ flavorDimensions "mode"
+ productFlavors {
+ floss {
+ dimension "mode"
+ }
+ google {
+ dimension "mode"
+ }
+ }
+
lintOptions {
// FIXME(saemy): Make this an error for release builds on travis.
warning 'MissingTranslation'
@@ -145,8 +96,6 @@ android {
compileSdkVersion 27 // also update in .travis.yml
targetSdkVersion 22
- multiDexEnabled true
-
vectorDrawables.useSupportLibrary = true
}
@@ -155,3 +104,58 @@ android {
targetCompatibility JavaVersion.VERSION_1_8
}
}
+
+ext {
+ assertjVersion = '3.9.0'
+ butterknifeVersion = '8.8.1'
+ constraintLayoutVersion = '1.1.2'
+ daggerVersion = '2.13'
+ gsonVersion = '2.8.1'
+ jsonVersion = '20170516'
+ junitVersion = '4.12'
+ materialDialogsVersion = '0.9.6.0' // Depends on the android support lib. Their version must match ours.
+ osmbonuspackVersion = '6.5.2'
+ osmdroidVersion = '6.0.2'
+ picassoVersion = '2.5.2'
+ playServicesVersion = '11.6.2'
+ retrofitVersion = '2.3.0'
+ robolectricVersion = '3.7'
+ rxAndroidVersion = '2.0.2'
+ rxJavaVersion = '2.1.7'
+ supportLibVersion = '27.0.1'
+}
+
+dependencies {
+ annotationProcessor "com.google.dagger:dagger-android-processor:$daggerVersion"
+ annotationProcessor "com.google.dagger:dagger-compiler:$daggerVersion"
+ annotationProcessor "com.jakewharton:butterknife-compiler:$butterknifeVersion"
+ implementation "com.afollestad.material-dialogs:core:$materialDialogsVersion" // https://github.com/afollestad/material-dialogs
+ implementation "com.afollestad.material-dialogs:commons:$materialDialogsVersion"
+ implementation "com.android.support:appcompat-v7:$supportLibVersion"
+ implementation "com.android.support:cardview-v7:$supportLibVersion"
+ implementation "com.android.support.constraint:constraint-layout:$constraintLayoutVersion"
+ implementation "com.android.support:design:$supportLibVersion"
+ implementation "com.android.support:preference-v14:$supportLibVersion"
+ implementation "com.android.support:support-v4:$supportLibVersion"
+ implementation "com.github.MKergall:osmbonuspack:$osmbonuspackVersion"
+ implementation "com.google.code.gson:gson:$gsonVersion"
+ implementation "com.google.dagger:dagger:$daggerVersion"
+ implementation "com.google.dagger:dagger-android:$daggerVersion"
+ implementation "com.google.dagger:dagger-android-support:$daggerVersion"
+ implementation "com.jakewharton:butterknife:$butterknifeVersion"
+ implementation "com.squareup.picasso:picasso:$picassoVersion"
+ implementation "com.squareup.retrofit2:adapter-rxjava2:$retrofitVersion"
+ implementation "com.squareup.retrofit2:retrofit:$retrofitVersion"
+ implementation "com.squareup.retrofit2:converter-gson:$retrofitVersion"
+ implementation "io.reactivex.rxjava2:rxandroid:$rxAndroidVersion"
+ implementation "io.reactivex.rxjava2:rxjava:$rxJavaVersion"
+ implementation "org.osmdroid:osmdroid-android:$osmdroidVersion"
+
+ googleImplementation "com.google.android.gms:play-services-analytics:$playServicesVersion"
+
+ testImplementation "junit:junit:$junitVersion"
+ testImplementation "org.assertj:assertj-core:$assertjVersion"
+ testImplementation "org.json:json:$jsonVersion"
+ testImplementation "org.robolectric:robolectric:$robolectricVersion"
+ testImplementation "org.robolectric:shadows-supportv4:$robolectricVersion"
+}
diff --git a/app/src/floss/java/fi/bitrite/android/ws/WSAndroidApplication.java b/app/src/floss/java/fi/bitrite/android/ws/WSAndroidApplication.java
new file mode 100644
index 00000000..7ecc0934
--- /dev/null
+++ b/app/src/floss/java/fi/bitrite/android/ws/WSAndroidApplication.java
@@ -0,0 +1,9 @@
+package fi.bitrite.android.ws;
+
+import fi.bitrite.android.ws.di.AppInjector;
+
+public class WSAndroidApplication extends BaseWSAndroidApplication {
+ protected AppInjector inject() {
+ return AppInjector.create(this);
+ }
+}
diff --git a/app/src/floss/java/fi/bitrite/android/ws/repository/SettingsRepository.java b/app/src/floss/java/fi/bitrite/android/ws/repository/SettingsRepository.java
new file mode 100644
index 00000000..cbcc44c2
--- /dev/null
+++ b/app/src/floss/java/fi/bitrite/android/ws/repository/SettingsRepository.java
@@ -0,0 +1,16 @@
+package fi.bitrite.android.ws.repository;
+
+import android.content.Context;
+
+import javax.inject.Inject;
+
+import fi.bitrite.android.ws.di.AppScope;
+
+@AppScope
+public class SettingsRepository extends BaseSettingsRepository {
+
+ @Inject
+ SettingsRepository(Context context) {
+ super(context);
+ }
+}
diff --git a/app/src/floss/java/fi/bitrite/android/ws/util/Tools.java b/app/src/floss/java/fi/bitrite/android/ws/util/Tools.java
new file mode 100644
index 00000000..0535ae0c
--- /dev/null
+++ b/app/src/floss/java/fi/bitrite/android/ws/util/Tools.java
@@ -0,0 +1,14 @@
+package fi.bitrite.android.ws.util;
+
+import android.content.Context;
+
+/**
+ * General simple tools, mostly public methods.
+ */
+public class Tools extends BaseTools {
+
+ // Send a report to Google Analytics about category/action
+ static public void gaReportException(Context context, String category, String action) {
+ // This just does nothing.
+ }
+}
diff --git a/app/src/floss/res/values-de/strings.xml b/app/src/floss/res/values-de/strings.xml
new file mode 100644
index 00000000..5c5900f6
--- /dev/null
+++ b/app/src/floss/res/values-de/strings.xml
@@ -0,0 +1,4 @@
+
+
+ Version %1$s (FLOSS)
+
diff --git a/app/src/floss/res/values-es/strings.xml b/app/src/floss/res/values-es/strings.xml
new file mode 100644
index 00000000..cbabf4e5
--- /dev/null
+++ b/app/src/floss/res/values-es/strings.xml
@@ -0,0 +1,4 @@
+
+
+ Versión %1$s (FLOSS)
+
diff --git a/app/src/floss/res/values-fr/strings.xml b/app/src/floss/res/values-fr/strings.xml
new file mode 100644
index 00000000..5c5900f6
--- /dev/null
+++ b/app/src/floss/res/values-fr/strings.xml
@@ -0,0 +1,4 @@
+
+
+ Version %1$s (FLOSS)
+
diff --git a/app/src/floss/res/values/strings.xml b/app/src/floss/res/values/strings.xml
new file mode 100644
index 00000000..5c5900f6
--- /dev/null
+++ b/app/src/floss/res/values/strings.xml
@@ -0,0 +1,4 @@
+
+
+ Version %1$s (FLOSS)
+
diff --git a/app/src/google/AndroidManifest.xml b/app/src/google/AndroidManifest.xml
new file mode 100644
index 00000000..9a985212
--- /dev/null
+++ b/app/src/google/AndroidManifest.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
diff --git a/app/src/google/java/fi/bitrite/android/ws/WSAndroidApplication.java b/app/src/google/java/fi/bitrite/android/ws/WSAndroidApplication.java
new file mode 100644
index 00000000..8b4b922f
--- /dev/null
+++ b/app/src/google/java/fi/bitrite/android/ws/WSAndroidApplication.java
@@ -0,0 +1,55 @@
+package fi.bitrite.android.ws;
+
+import com.google.android.gms.analytics.GoogleAnalytics;
+import com.google.android.gms.analytics.Tracker;
+
+import java.util.HashMap;
+
+import javax.inject.Inject;
+
+import fi.bitrite.android.ws.di.AppInjector;
+import fi.bitrite.android.ws.repository.SettingsRepository;
+
+public class WSAndroidApplication extends BaseWSAndroidApplication {
+
+ @Inject SettingsRepository mSettingsRepository;
+
+ private final HashMap mTrackers = new HashMap<>();
+
+ public synchronized Tracker getTracker(TrackerName trackerId) {
+ final String TRACKING_ID = getString(R.string.ga_tracking_id);
+
+ if (!mTrackers.containsKey(trackerId)) {
+
+ GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
+ Tracker t = (trackerId == TrackerName.APP_TRACKER)
+ ? analytics.newTracker(R.xml.app_tracker)
+ : (trackerId == TrackerName.GLOBAL_TRACKER)
+ ? analytics.newTracker(R.xml.global_tracker)
+ : analytics.newTracker(TRACKING_ID);
+ mTrackers.put(trackerId, t);
+ }
+ return mTrackers.get(trackerId);
+ }
+
+ public void onCreate() {
+ super.onCreate();
+
+ // Set automatic activity reports, per http://stackoverflow.com/a/24983778/215713
+ GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
+ analytics.enableAutoActivityReports(this);
+ analytics.setAppOptOut(!mSettingsRepository.canCollectStats());
+ }
+
+ @Override
+ protected AppInjector inject() {
+ return AppInjector.create(this);
+ }
+
+
+ // Google Analytics Support
+ public enum TrackerName {
+ APP_TRACKER,
+ GLOBAL_TRACKER
+ }
+}
diff --git a/app/src/google/java/fi/bitrite/android/ws/repository/SettingsRepository.java b/app/src/google/java/fi/bitrite/android/ws/repository/SettingsRepository.java
new file mode 100644
index 00000000..b8aeaf7e
--- /dev/null
+++ b/app/src/google/java/fi/bitrite/android/ws/repository/SettingsRepository.java
@@ -0,0 +1,31 @@
+package fi.bitrite.android.ws.repository;
+
+import android.content.Context;
+import android.content.res.Resources;
+
+import javax.inject.Inject;
+
+import fi.bitrite.android.ws.R;
+import fi.bitrite.android.ws.di.AppScope;
+
+@AppScope
+public class SettingsRepository extends BaseSettingsRepository {
+ private final String mKeyGaCollectStats;
+ private final boolean mDefaultGaCollectStats;
+
+ @Inject
+ SettingsRepository(Context context) {
+ super(context);
+
+ final Resources res = context.getResources();
+ mKeyGaCollectStats = res.getString(R.string.prefs_ga_collect_stats_key);
+ mDefaultGaCollectStats = res.getBoolean(R.bool.prefs_ga_collect_stats_default);
+ }
+
+ public boolean canCollectStats() {
+ return mSharedPreferences.getBoolean(mKeyGaCollectStats, mDefaultGaCollectStats);
+ }
+ public String getCanCollectStatsKey() {
+ return mKeyGaCollectStats;
+ }
+}
diff --git a/app/src/google/java/fi/bitrite/android/ws/util/Tools.java b/app/src/google/java/fi/bitrite/android/ws/util/Tools.java
new file mode 100644
index 00000000..e4f986ca
--- /dev/null
+++ b/app/src/google/java/fi/bitrite/android/ws/util/Tools.java
@@ -0,0 +1,27 @@
+package fi.bitrite.android.ws.util;
+
+import android.content.Context;
+
+import com.google.android.gms.analytics.HitBuilders;
+import com.google.android.gms.analytics.Tracker;
+
+import fi.bitrite.android.ws.WSAndroidApplication;
+
+/**
+ * General simple tools, mostly public methods.
+ */
+public class Tools extends BaseTools {
+
+ // Send a report to Google Analytics about category/action
+ static public void gaReportException(Context context, String category, String action) {
+
+ Tracker exceptionTracker = ((WSAndroidApplication) context.getApplicationContext())
+ .getTracker(WSAndroidApplication.TrackerName.APP_TRACKER);
+
+ exceptionTracker.send(new HitBuilders.EventBuilder()
+ .setCategory(category)
+ .setAction(action)
+ .build()
+ );
+ }
+}
diff --git a/app/src/google/res/values-de/strings.xml b/app/src/google/res/values-de/strings.xml
new file mode 100644
index 00000000..e4c79983
--- /dev/null
+++ b/app/src/google/res/values-de/strings.xml
@@ -0,0 +1,6 @@
+
+
+ Anonyme Benutzungsstatistiken senden
+ Nutzungsstatistiken werden gelegentlich an Google Analytics gesendet, um den Entwickelnden die Verbesserung der App zu erleichtern
+ Gerade werden keine Statistiken zur Verbesserung der App an Google Analytics versandt
+
diff --git a/app/src/google/res/values-es/strings.xml b/app/src/google/res/values-es/strings.xml
new file mode 100644
index 00000000..ffcb6f95
--- /dev/null
+++ b/app/src/google/res/values-es/strings.xml
@@ -0,0 +1,6 @@
+
+
+ Enviar estadísticas anónimas
+ Enviar estadísticas a Google Analytics ayuda a los desarrolladores a entender el uso de la aplicación y a mejorarla, pero puedes desinscribirte.
+ Enviar estadísticas a Google Analytics ayuda a los desarrolladores a entender el uso de la aplicación y a mejorarla, pero puedes desinscribirte.
+
diff --git a/app/src/google/res/values-fr/strings.xml b/app/src/google/res/values-fr/strings.xml
new file mode 100644
index 00000000..4d6254c1
--- /dev/null
+++ b/app/src/google/res/values-fr/strings.xml
@@ -0,0 +1,6 @@
+
+
+ Envoyer des données statistiques à Google Analytics aide les développeurs à comprendre l\'usage de l\'application et à l\'améliorer, mais vous pouvez désactiver cette option.
+ Envoyer des données statistiques à Google Analytics aide les développeurs à comprendre l\'usage de l\'application et à l\'améliorer, mais vous pouvez désactiver cette option.
+ Envoyer des données anonymes
+
diff --git a/app/src/google/res/values/integers.xml b/app/src/google/res/values/integers.xml
new file mode 100644
index 00000000..c8d8614c
--- /dev/null
+++ b/app/src/google/res/values/integers.xml
@@ -0,0 +1,4 @@
+
+
+ true
+
diff --git a/app/src/google/res/values/strings.xml b/app/src/google/res/values/strings.xml
new file mode 100644
index 00000000..4ed2df67
--- /dev/null
+++ b/app/src/google/res/values/strings.xml
@@ -0,0 +1,8 @@
+
+
+ UA-13228014-2
+ ga_collect_stats
+ Send anonymous statistics
+ Sending statistics to Google Analytics helps the developers to understand usage and improve the app, but you can opt out
+ Currently, your usage is not tracked in order to be sent to Google Analytics to help developers in their improvement endeavours
+
diff --git a/app/src/main/res/xml/app_tracker.xml b/app/src/google/res/xml/app_tracker.xml
similarity index 88%
rename from app/src/main/res/xml/app_tracker.xml
rename to app/src/google/res/xml/app_tracker.xml
index 7aa771b2..04a966e6 100644
--- a/app/src/main/res/xml/app_tracker.xml
+++ b/app/src/google/res/xml/app_tracker.xml
@@ -4,8 +4,7 @@
tools:ignore="TypographyDashes">
-
- UA-13228014-2
+ @string/ga_tracking_id
100.0
@@ -25,4 +24,4 @@
specifying the canonical name, and the value the alias to use instead. -->
-
\ No newline at end of file
+
diff --git a/app/src/main/res/xml/global_tracker.xml b/app/src/google/res/xml/global_tracker.xml
similarity index 100%
rename from app/src/main/res/xml/global_tracker.xml
rename to app/src/google/res/xml/global_tracker.xml
diff --git a/app/src/google/res/xml/preferences.xml b/app/src/google/res/xml/preferences.xml
new file mode 100644
index 00000000..751b1ae1
--- /dev/null
+++ b/app/src/google/res/xml/preferences.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index af906f65..8a42fac3 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,7 +15,6 @@
-
-
diff --git a/app/src/main/java/fi/bitrite/android/ws/BaseWSAndroidApplication.java b/app/src/main/java/fi/bitrite/android/ws/BaseWSAndroidApplication.java
new file mode 100644
index 00000000..ad8e1bea
--- /dev/null
+++ b/app/src/main/java/fi/bitrite/android/ws/BaseWSAndroidApplication.java
@@ -0,0 +1,37 @@
+package fi.bitrite.android.ws;
+
+import android.app.Activity;
+import android.app.Application;
+
+import javax.inject.Inject;
+
+import dagger.android.DispatchingAndroidInjector;
+import dagger.android.HasActivityInjector;
+import fi.bitrite.android.ws.di.AppComponent;
+import fi.bitrite.android.ws.di.AppInjector;
+
+public abstract class BaseWSAndroidApplication extends Application implements HasActivityInjector {
+
+ public static final String TAG = "WSAndroidApplication";
+ private static AppInjector mAppInjector;
+
+ @Inject DispatchingAndroidInjector mDispatchingAndroidInjector;
+
+ public static AppComponent getAppComponent() {
+ return mAppInjector.getAppComponent();
+ }
+
+ public void onCreate() {
+ super.onCreate();
+
+ mAppInjector = inject();
+ // Injected variables are available from this point.
+ }
+
+ protected abstract AppInjector inject();
+
+ @Override
+ public DispatchingAndroidInjector activityInjector() {
+ return mDispatchingAndroidInjector;
+ }
+}
diff --git a/app/src/main/java/fi/bitrite/android/ws/WSAndroidApplication.java b/app/src/main/java/fi/bitrite/android/ws/WSAndroidApplication.java
deleted file mode 100644
index 10a026ed..00000000
--- a/app/src/main/java/fi/bitrite/android/ws/WSAndroidApplication.java
+++ /dev/null
@@ -1,82 +0,0 @@
-package fi.bitrite.android.ws;
-
-import android.app.Activity;
-import android.app.Application;
-import android.content.Context;
-import android.preference.PreferenceManager;
-import android.support.multidex.MultiDex;
-
-import com.google.android.gms.analytics.GoogleAnalytics;
-import com.google.android.gms.analytics.Tracker;
-
-import java.util.HashMap;
-
-import javax.inject.Inject;
-
-import dagger.android.DispatchingAndroidInjector;
-import dagger.android.HasActivityInjector;
-import fi.bitrite.android.ws.di.AppComponent;
-import fi.bitrite.android.ws.di.AppInjector;
-
-public class WSAndroidApplication extends Application implements HasActivityInjector {
-
- public static final String TAG = "WSAndroidApplication";
- private static AppInjector mAppInjector;
-
- @Inject DispatchingAndroidInjector mDispatchingAndroidInjector;
-
- private final HashMap mTrackers = new HashMap<>();
-
- public static AppComponent getAppComponent() {
- return mAppInjector.getAppComponent();
- }
-
- public synchronized Tracker getTracker(TrackerName trackerId) {
- String PROPERTY_ID = getString(R.string.ga_property_id);
-
- if (!mTrackers.containsKey(trackerId)) {
-
- GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
- Tracker t = (trackerId == TrackerName.APP_TRACKER)
- ? analytics.newTracker(R.xml.app_tracker)
- : (trackerId == TrackerName.GLOBAL_TRACKER)
- ? analytics.newTracker(R.xml.global_tracker)
- : analytics.newTracker(PROPERTY_ID);
- mTrackers.put(trackerId, t);
- }
- return mTrackers.get(trackerId);
- }
-
- public void onCreate() {
- super.onCreate();
-
- // Set automatic activity reports, per http://stackoverflow.com/a/24983778/215713
- GoogleAnalytics analytics = GoogleAnalytics.getInstance(this);
- analytics.enableAutoActivityReports(this);
-
- boolean gaOptOut = !PreferenceManager.getDefaultSharedPreferences(this)
- .getBoolean("ga_collect_stats", true);
- analytics.setAppOptOut(gaOptOut);
-
- mAppInjector = AppInjector.create(this);
-
- // Injected variables are available from this point.
- }
-
- @Override
- public DispatchingAndroidInjector activityInjector() {
- return mDispatchingAndroidInjector;
- }
-
- @Override
- protected void attachBaseContext(Context context) {
- super.attachBaseContext(context);
- MultiDex.install(this);
- }
-
- // Google Analytics Support
- public enum TrackerName {
- APP_TRACKER,
- GLOBAL_TRACKER
- }
-}
diff --git a/app/src/main/java/fi/bitrite/android/ws/repository/SettingsRepository.java b/app/src/main/java/fi/bitrite/android/ws/repository/BaseSettingsRepository.java
similarity index 90%
rename from app/src/main/java/fi/bitrite/android/ws/repository/SettingsRepository.java
rename to app/src/main/java/fi/bitrite/android/ws/repository/BaseSettingsRepository.java
index b50ce985..c81ba021 100644
--- a/app/src/main/java/fi/bitrite/android/ws/repository/SettingsRepository.java
+++ b/app/src/main/java/fi/bitrite/android/ws/repository/BaseSettingsRepository.java
@@ -8,20 +8,16 @@
import org.osmdroid.tileprovider.tilesource.TileSourceFactory;
-import javax.inject.Inject;
-
import fi.bitrite.android.ws.R;
-import fi.bitrite.android.ws.di.AppScope;
import fi.bitrite.android.ws.model.ZoomedLocation;
-@AppScope
-public class SettingsRepository {
+public abstract class BaseSettingsRepository {
public enum DistanceUnit {
KILOMETER,
MILES,
}
- private final SharedPreferences mSharedPreferences;
+ final SharedPreferences mSharedPreferences;
private final static String KEY_MAP_LAST_LOCATION = "map_last_location";
private final static String KEYSUFFIX_LOCATION_LATITUDE = "_latitude";
@@ -31,13 +27,11 @@ public enum DistanceUnit {
private final String mKeyDistanceUnit;
private final String mKeyTileSource;
private final String mKeyMessageRefreshInterval;
- private final String mKeyGaCollectStats;
private final String mKeyDevSimulateNoNetwork;
private final String mDefaultDistanceUnit;
private final String mDefaultTileSource = TileSourceFactory.DEFAULT_TILE_SOURCE.name();
private final int mDefaultMessageRefreshInterval;
- private final boolean mDefaultGaCollectStats;
private final boolean mDefaultDevSimulateNoNetwork;
private final float mDefaultMapLocationLatitude;
@@ -51,21 +45,18 @@ public enum DistanceUnit {
private final String mDistanceUnitKilometerLong;
private final String mDistanceUnitMilesLong;
- @Inject
- SettingsRepository(Context context) {
+ BaseSettingsRepository(Context context) {
mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
final Resources res = context.getResources();
mKeyDistanceUnit = res.getString(R.string.prefs_distance_unit_key);
mKeyTileSource = res.getString(R.string.prefs_tile_source_key);
mKeyMessageRefreshInterval = res.getString(R.string.prefs_message_refresh_interval_min_key);
- mKeyGaCollectStats = res.getString(R.string.prefs_ga_collect_stats_key);
mKeyDevSimulateNoNetwork = res.getString(R.string.prefs_dev_simulate_no_network_key);
mDefaultDistanceUnit = res.getString(R.string.prefs_distance_unit_default);
mDefaultMessageRefreshInterval =
res.getInteger(R.integer.prefs_message_refresh_interval_min_default);
- mDefaultGaCollectStats = res.getBoolean(R.bool.prefs_ga_collect_stats_default);
mDefaultDevSimulateNoNetwork = res.getBoolean(R.bool.prefs_dev_simulate_no_network_default);
mDefaultMapLocationLatitude =
@@ -153,10 +144,6 @@ public int getMessageRefreshIntervalMin() {
mKeyMessageRefreshInterval, Integer.toString(mDefaultMessageRefreshInterval)));
}
- public boolean canCollectStats() {
- return mSharedPreferences.getBoolean(mKeyGaCollectStats, mDefaultGaCollectStats);
- }
-
public boolean isDevSimulateNoNetwork() {
return mSharedPreferences.getBoolean(
mKeyDevSimulateNoNetwork, mDefaultDevSimulateNoNetwork);
@@ -181,9 +168,6 @@ public String getDistanceUnitKey() {
public String getMessageRefreshIntervalKey() {
return mKeyMessageRefreshInterval;
}
- public String getCanCollectStatsKey() {
- return mKeyGaCollectStats;
- }
public String getDevSimulateNoNetworkKey() {
return mKeyDevSimulateNoNetwork;
}
diff --git a/app/src/main/java/fi/bitrite/android/ws/ui/MapFragment.java b/app/src/main/java/fi/bitrite/android/ws/ui/MapFragment.java
index e6cbe78c..1bc47351 100644
--- a/app/src/main/java/fi/bitrite/android/ws/ui/MapFragment.java
+++ b/app/src/main/java/fi/bitrite/android/ws/ui/MapFragment.java
@@ -27,8 +27,6 @@
import android.widget.TextView;
import android.widget.Toast;
-import com.google.common.collect.Lists;
-
import org.osmdroid.api.IGeoPoint;
import org.osmdroid.api.IMapController;
import org.osmdroid.bonuspack.clustering.StaticCluster;
@@ -46,6 +44,7 @@
import org.osmdroid.views.overlay.mylocation.MyLocationNewOverlay;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.concurrent.TimeUnit;
@@ -498,7 +497,9 @@ private void addUserToCluster(SimpleUser user) {
marker.setAnchor(UserMarker.ANCHOR_CENTER, UserMarker.ANCHOR_BOTTOM);
marker.setIcon(getResources().getDrawable(R.drawable.map_markers_single));
marker.setOnMarkerClickListener((m, mapView) -> {
- new MultiUserSelectDialog().show(Lists.newArrayList(user));
+ // We need a new ArrayList here, as it gets sorted in {@link UserListAdapter} and
+ // Collections.singletonList() provides a non-mutable list.
+ new MultiUserSelectDialog().show(new ArrayList<>(Collections.singletonList(user)));
return true;
});
mMarkerClusterer.add(marker);
diff --git a/app/src/main/java/fi/bitrite/android/ws/util/Tools.java b/app/src/main/java/fi/bitrite/android/ws/util/BaseTools.java
similarity index 90%
rename from app/src/main/java/fi/bitrite/android/ws/util/Tools.java
rename to app/src/main/java/fi/bitrite/android/ws/util/BaseTools.java
index 23c13dcb..a66832ff 100644
--- a/app/src/main/java/fi/bitrite/android/ws/util/Tools.java
+++ b/app/src/main/java/fi/bitrite/android/ws/util/BaseTools.java
@@ -19,22 +19,18 @@
import android.widget.ImageView;
import android.widget.RelativeLayout;
-import com.google.android.gms.analytics.HitBuilders;
-import com.google.android.gms.analytics.Tracker;
-
import org.osmdroid.api.IGeoPoint;
import org.osmdroid.util.GeoPoint;
import java.util.Locale;
import fi.bitrite.android.ws.BuildConfig;
-import fi.bitrite.android.ws.WSAndroidApplication;
import fi.bitrite.android.ws.repository.SettingsRepository;
/**
* General simple tools, mostly public methods.
*/
-public class Tools {
+public class BaseTools {
// Convert text ("About me" == Comments from user data) to form to add to TextView
public static Spanned siteHtmlToHtml(String text) {
@@ -97,19 +93,6 @@ static public boolean isNetworkConnected(Context context) {
return isConnected;
}
- // Send a report to Google Analytics about category/action
- static public void gaReportException(Context context, String category, String action) {
-
- Tracker exceptionTracker = ((WSAndroidApplication) context.getApplicationContext())
- .getTracker(WSAndroidApplication.TrackerName.APP_TRACKER);
-
- exceptionTracker.send(new HitBuilders.EventBuilder()
- .setCategory(category)
- .setAction(action)
- .build()
- );
- }
-
/*
* Scale an image to its view
* From https://argillander.wordpress.com/2011/11/24/scale-image-into-imageview-then-resize-imageview-to-match-the-image/
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 9c1ac913..2e382785 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -112,10 +112,6 @@
Wähle aus, wie häufig deine Mitteilungen automatisch vom Server geladen werden sollen.
Intervall (in Minuten)
- Anonyme Benutzungsstatistiken senden
- Nutzungsstatistiken werden gelegentlich an Google Analytics gesendet, um den Entwickelnden die Verbesserung der App zu erleichtern
- Gerade werden keine Statistiken zur Verbesserung der App an Google Analytics versandt
-
Entwicklereinstellungen
Simuliere Kein Netz
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index 871dae2c..a2583323 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -99,10 +99,6 @@
km
mi
- Enviar estadísticas anónimas
- Enviar estadísticas a Google Analytics ayuda a los desarrolladores a entender el uso de la aplicación y a mejorarla, pero puedes desinscribirte.
- Enviar estadísticas a Google Analytics ayuda a los desarrolladores a entender el uso de la aplicación y a mejorarla, pero puedes desinscribirte.
-
40.0000
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index bfc57db5..069aef3c 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -99,10 +99,6 @@
km
mi
- Envoyer des données statistiques à Google Analytics aide les développeurs à comprendre l\'usage de l\'application et à l\'améliorer, mais vous pouvez désactiver cette option.
- Envoyer des données statistiques à Google Analytics aide les développeurs à comprendre l\'usage de l\'application et à l\'améliorer, mais vous pouvez désactiver cette option.
- Envoyer des données anonymes
-
40.0000
diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml
index e34bd18f..16cca977 100644
--- a/app/src/main/res/values/integers.xml
+++ b/app/src/main/res/values/integers.xml
@@ -23,6 +23,5 @@
false
5
- true
false
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 6f8e47be..f60930e1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -118,12 +118,6 @@
Specify how often your messages should be refreshed from the server.
Interval (minutes)
- UA-13228014-2
- ga_collect_stats
- Send anonymous statistics
- Sending statistics to Google Analytics helps the developers to understand usage and improve the app, but you can opt out
- Currently, your usage is not tracked in order to be sent to Google Analytics to help developers in their improvement endeavours
-
Developer settings
dev_simulate_no_network
Simulate No Service
diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml
index 86a43ed2..ff670eb5 100644
--- a/app/src/main/res/xml/preferences.xml
+++ b/app/src/main/res/xml/preferences.xml
@@ -22,10 +22,4 @@
android:key="@string/prefs_message_refresh_interval_min_key"
android:title="@string/prefs_message_refresh_interval_min_title" />
-