diff --git a/commons/src/main/java/org/wikimedia/commons/CommonsApplication.java b/commons/src/main/java/org/wikimedia/commons/CommonsApplication.java index faa563601..3a3d0a1df 100644 --- a/commons/src/main/java/org/wikimedia/commons/CommonsApplication.java +++ b/commons/src/main/java/org/wikimedia/commons/CommonsApplication.java @@ -55,6 +55,7 @@ public class CommonsApplication extends Application { public static final Object[] EVENT_LOGIN_ATTEMPT = {"MobileAppLoginAttempts", 5257721L}; public static final Object[] EVENT_SHARE_ATTEMPT = {"MobileAppShareAttempts", 5346170L}; public static final Object[] EVENT_CATEGORIZATION_ATTEMPT = {"MobileAppCategorizationAttempts", 5359208L}; + public static final Object[] EVENT_EVENTLOGGING_CHANGE = {"MobileAppTrackingChange", 5369400L}; public static final String DEFAULT_EDIT_SUMMARY = "Uploaded using Android Commons app"; diff --git a/commons/src/main/java/org/wikimedia/commons/EventLog.java b/commons/src/main/java/org/wikimedia/commons/EventLog.java index dee4663c1..96421bddd 100644 --- a/commons/src/main/java/org/wikimedia/commons/EventLog.java +++ b/commons/src/main/java/org/wikimedia/commons/EventLog.java @@ -96,15 +96,22 @@ public class EventLog { } } - public void log() { + // force param disregards user preference + // Use *only* for tracking the user preference change for EventLogging + // Attempting to use anywhere else will cause kitten explosions + public void log(boolean force) { SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(app); - if(!settings.getBoolean(Prefs.TRACKING_ENABLED, true)) { + if(!settings.getBoolean(Prefs.TRACKING_ENABLED, true) && !force) { return; // User has disabled tracking } LogTask logTask = new LogTask(); Utils.executeAsyncTask(logTask, this); } + public void log() { + log(false); + } + } public static LogBuilder schema(String schema, long revision) { diff --git a/commons/src/main/java/org/wikimedia/commons/SettingsActivity.java b/commons/src/main/java/org/wikimedia/commons/SettingsActivity.java index 074811e43..9c59c8639 100644 --- a/commons/src/main/java/org/wikimedia/commons/SettingsActivity.java +++ b/commons/src/main/java/org/wikimedia/commons/SettingsActivity.java @@ -1,13 +1,42 @@ package org.wikimedia.commons; +import android.content.SharedPreferences; import android.os.Bundle; +import android.preference.Preference; import com.actionbarsherlock.app.SherlockPreferenceActivity; -public class SettingsActivity extends SherlockPreferenceActivity { +public class SettingsActivity extends SherlockPreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener { + CommonsApplication app; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.preferences); + app = (CommonsApplication)getApplicationContext(); + } + + @Override + protected void onResume() { + super.onResume(); + getPreferenceScreen().getSharedPreferences() + .registerOnSharedPreferenceChangeListener(this); + } + + @Override + protected void onPause() { + super.onPause(); + getPreferenceScreen().getSharedPreferences() + .unregisterOnSharedPreferenceChangeListener(this); + } + + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { + if(key.equals(Prefs.TRACKING_ENABLED)) { + // We force log this, so it is logged even if EL is turned off + EventLog.schema(CommonsApplication.EVENT_EVENTLOGGING_CHANGE) + .param("username", app.getCurrentAccount().name) + .param("state", sharedPreferences.getBoolean(key, true)) + .log(true); + } + } }