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" /> -