add (coarse!) analytics for preferences
This commit is contained in:
parent
fcf6abfec3
commit
3f4de8b9c6
|
@ -28,6 +28,9 @@ import org.sufficientlysecure.keychain.service.SaveKeyringParcel.SubkeyAdd;
|
|||
|
||||
import java.io.File;
|
||||
import java.net.Proxy;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public final class Constants {
|
||||
|
||||
|
@ -172,6 +175,14 @@ public final class Constants {
|
|||
public static final String TYPE_HTTP = "proxyHttp";
|
||||
public static final String TYPE_SOCKS = "proxySocks";
|
||||
}
|
||||
|
||||
// we generally only track booleans. never snoop around in the user's string settings!!
|
||||
public static final List<String> ANALYTICS_PREFS = Arrays.asList(USE_NORMAL_PROXY, USE_TOR_PROXY, THEME,
|
||||
SYNC_CONTACTS, SYNC_KEYSERVER, ENABLE_WIFI_SYNC_ONLY, EXPERIMENTAL_ENABLE_KEYBASE,
|
||||
EXPERIMENTAL_ENABLE_LINKED_IDENTITIES, EXPERIMENTAL_USB_ALLOW_UNTESTED,
|
||||
PASSPHRASE_CACHE_SUBS, SEARCH_KEYSERVER, SEARCH_KEYBASE, SEARCH_WEB_KEY_DIRECTORY,
|
||||
TEXT_USE_COMPRESSION, TEXT_SELF_ENCRYPT, FILE_USE_COMPRESSION, FILE_SELF_ENCRYPT, USE_ARMOR,
|
||||
USE_NUMKEYPAD_FOR_SECURITY_TOKEN_PIN, ENCRYPT_FILENAMES);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -5,6 +5,8 @@ import android.app.Activity;
|
|||
import android.app.Application;
|
||||
import android.app.Application.ActivityLifecycleCallbacks;
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||
import android.os.Bundle;
|
||||
|
||||
import org.piwik.sdk.Piwik;
|
||||
|
@ -12,10 +14,13 @@ import org.piwik.sdk.Tracker;
|
|||
import org.piwik.sdk.TrackerConfig;
|
||||
import org.piwik.sdk.extra.DownloadTracker.Extra.ApkChecksum;
|
||||
import org.piwik.sdk.extra.TrackHelper;
|
||||
import org.sufficientlysecure.keychain.Constants.Defaults;
|
||||
import org.sufficientlysecure.keychain.Constants.Pref;
|
||||
import org.sufficientlysecure.keychain.util.Preferences;
|
||||
import timber.log.Timber;
|
||||
|
||||
|
||||
public class AnalyticsManager {
|
||||
public class AnalyticsManager implements OnSharedPreferenceChangeListener {
|
||||
private Tracker piwikTracker;
|
||||
|
||||
public static AnalyticsManager getInstance(Context context) {
|
||||
|
@ -69,6 +74,42 @@ public class AnalyticsManager {
|
|||
|
||||
}
|
||||
});
|
||||
|
||||
Preferences preferences = Preferences.getPreferences(application);
|
||||
preferences.getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
|
||||
}
|
||||
|
||||
// we generally only track booleans. never snoop around in the user's string settings!!
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||
// small exception: check if the user uses a custom keyserver, or one of the well-known ones
|
||||
if (Pref.KEY_SERVERS.equals(key)) {
|
||||
Timber.d("Tracking pref %s", key);
|
||||
String keyServers = sharedPreferences.getString(Pref.KEY_SERVERS, Defaults.KEY_SERVERS);
|
||||
String current = keyServers.substring(keyServers.indexOf(','));
|
||||
|
||||
String coarseGranularityKeyserver;
|
||||
if (current.contains("keyserver.ubuntu.com")) {
|
||||
coarseGranularityKeyserver = "ubuntu";
|
||||
} else if (current.contains("pgp.mit.edu")) {
|
||||
coarseGranularityKeyserver = "mit";
|
||||
} else if (current.contains("pool.sks-keyservers.net")) {
|
||||
coarseGranularityKeyserver = "pool";
|
||||
} else {
|
||||
coarseGranularityKeyserver = "custom";
|
||||
}
|
||||
TrackHelper.track().interaction("pref_" + Pref.KEY_SERVERS, coarseGranularityKeyserver).with(piwikTracker);
|
||||
return;
|
||||
}
|
||||
if (Pref.ANALYTICS_PREFS.contains(key)) {
|
||||
Timber.d("Tracking pref %s", key);
|
||||
if (!sharedPreferences.contains(key)) {
|
||||
TrackHelper.track().interaction("pref_" + key, "empty").with(piwikTracker);
|
||||
return;
|
||||
}
|
||||
boolean value = sharedPreferences.getBoolean(key, false);
|
||||
TrackHelper.track().interaction("pref_" + key, value ? "true" : "false").with(piwikTracker);
|
||||
}
|
||||
}
|
||||
|
||||
public void trackFragmentImpression(String opClassName, String fragmentName) {
|
||||
|
|
|
@ -20,7 +20,6 @@ package org.sufficientlysecure.keychain.util;
|
|||
|
||||
import java.net.Proxy;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.ListIterator;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
|
@ -34,6 +33,7 @@ import android.support.annotation.Nullable;
|
|||
import com.google.auto.value.AutoValue;
|
||||
import org.sufficientlysecure.keychain.Constants;
|
||||
import org.sufficientlysecure.keychain.Constants.Pref;
|
||||
import org.sufficientlysecure.keychain.analytics.AnalyticsManager;
|
||||
import org.sufficientlysecure.keychain.keyimport.HkpKeyserverAddress;
|
||||
import timber.log.Timber;
|
||||
|
||||
|
@ -82,6 +82,10 @@ public class Preferences {
|
|||
mSharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, PREF_FILE_MODE);
|
||||
}
|
||||
|
||||
public SharedPreferences getSharedPreferences() {
|
||||
return mSharedPreferences;
|
||||
}
|
||||
|
||||
public String getLanguage() {
|
||||
return mSharedPreferences.getString(Constants.Pref.LANGUAGE, "");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue