Skip to content

Commit

Permalink
Add a FLOSS variant
Browse files Browse the repository at this point in the history
Moves all the Google Analytics code into the google variant and adds a
floss variant that avoids any non-free libraries.

Closes: #279
  • Loading branch information
saemy committed Aug 28, 2018
1 parent f55ec95 commit c560ce2
Show file tree
Hide file tree
Showing 32 changed files with 347 additions and 215 deletions.
126 changes: 65 additions & 61 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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'
Expand Down Expand Up @@ -145,8 +96,6 @@ android {
compileSdkVersion 27 // also update in .travis.yml
targetSdkVersion 22

multiDexEnabled true

vectorDrawables.useSupportLibrary = true
}

Expand All @@ -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"
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
14 changes: 14 additions & 0 deletions app/src/floss/java/fi/bitrite/android/ws/util/Tools.java
Original file line number Diff line number Diff line change
@@ -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.
}
}
4 changes: 4 additions & 0 deletions app/src/floss/res/values-de/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_version">Version %1$s (FLOSS)</string>
</resources>
4 changes: 4 additions & 0 deletions app/src/floss/res/values-es/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_version">Versión %1$s (FLOSS)</string>
</resources>
4 changes: 4 additions & 0 deletions app/src/floss/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_version">Version %1$s (FLOSS)</string>
</resources>
4 changes: 4 additions & 0 deletions app/src/floss/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_version">Version %1$s (FLOSS)</string>
</resources>
11 changes: 11 additions & 0 deletions app/src/google/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="fi.bitrite.android.ws">

<application>
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
</application>
</manifest>
Original file line number Diff line number Diff line change
@@ -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<TrackerName, Tracker> 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
}
}
Original file line number Diff line number Diff line change
@@ -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;
}
}
27 changes: 27 additions & 0 deletions app/src/google/java/fi/bitrite/android/ws/util/Tools.java
Original file line number Diff line number Diff line change
@@ -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()
);
}
}
6 changes: 6 additions & 0 deletions app/src/google/res/values-de/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="prefs_ga_collect_stats_title">Anonyme Benutzungsstatistiken senden</string>
<string name="prefs_ga_collect_stats_summary_on">Nutzungsstatistiken werden gelegentlich an Google Analytics gesendet, um den Entwickelnden die Verbesserung der App zu erleichtern</string>
<string name="prefs_ga_collect_stats_summary_off">Gerade werden keine Statistiken zur Verbesserung der App an Google Analytics versandt</string>
</resources>
6 changes: 6 additions & 0 deletions app/src/google/res/values-es/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="prefs_ga_collect_stats_title">Enviar estadísticas anónimas</string>
<string name="prefs_ga_collect_stats_summary_on">Enviar estadísticas a Google Analytics ayuda a los desarrolladores a entender el uso de la aplicación y a mejorarla, pero puedes desinscribirte.</string>
<string name="prefs_ga_collect_stats_summary_off">Enviar estadísticas a Google Analytics ayuda a los desarrolladores a entender el uso de la aplicación y a mejorarla, pero puedes desinscribirte.</string>
</resources>
6 changes: 6 additions & 0 deletions app/src/google/res/values-fr/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="prefs_ga_collect_stats_summary_on">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.</string>
<string name="prefs_ga_collect_stats_summary_off">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.</string>
<string name="prefs_ga_collect_stats_title">Envoyer des données anonymes</string>
</resources>
4 changes: 4 additions & 0 deletions app/src/google/res/values/integers.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<bool name="prefs_ga_collect_stats_default">true</bool>
</resources>
8 changes: 8 additions & 0 deletions app/src/google/res/values/strings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="ga_tracking_id" translatable="false">UA-13228014-2</string>
<string name="prefs_ga_collect_stats_key" translatable="false">ga_collect_stats</string>
<string name="prefs_ga_collect_stats_title">Send anonymous statistics</string>
<string name="prefs_ga_collect_stats_summary_on">Sending statistics to Google Analytics helps the developers to understand usage and improve the app, but you can opt out</string>
<string name="prefs_ga_collect_stats_summary_off">Currently, your usage is not tracked in order to be sent to Google Analytics to help developers in their improvement endeavours</string>
</resources>
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@
tools:ignore="TypographyDashes">

<!-- The apps Analytics Tracking Id -->
<!-- TODO: Figure out how to use the strings version of this -->
<string name="ga_trackingId">UA-13228014-2</string>
<string name="ga_trackingId">@string/ga_tracking_id</string>

<!-- Percentage of events to include in reports -->
<string name="ga_sampleFrequency">100.0</string>
Expand All @@ -25,4 +24,4 @@
specifying the canonical name, and the value the alias to use instead. -->
<!--<screenName name="fi.bitrite.android.ws">Warmshowers App</screenName>-->

</resources>
</resources>
File renamed without changes.
Loading

0 comments on commit c560ce2

Please sign in to comment.