package org.solovyev.android.calculator.ga; import android.app.Application; import android.content.SharedPreferences; import android.text.TextUtils; import com.google.android.gms.analytics.GoogleAnalytics; import com.google.android.gms.analytics.HitBuilders; import com.google.android.gms.analytics.Tracker; import org.solovyev.android.calculator.Preferences; import org.solovyev.android.calculator.R; import javax.annotation.Nonnull; import javax.annotation.Nullable; import javax.inject.Inject; import javax.inject.Singleton; @Singleton public final class Ga implements SharedPreferences.OnSharedPreferenceChangeListener { private static final int LAYOUT = 1; private static final int THEME = 2; @Nonnull private final GoogleAnalytics analytics; @Nonnull private final Tracker tracker; @Inject public Ga(@Nonnull Application application, @Nonnull SharedPreferences preferences) { analytics = GoogleAnalytics.getInstance(application); tracker = analytics.newTracker(R.xml.ga); preferences.registerOnSharedPreferenceChangeListener(this); } private void reportLayout(@Nonnull Preferences.Gui.Mode mode) { tracker.send(new HitBuilders.EventBuilder().setCustomDimension(LAYOUT, mode.name()).build()); } private void reportTheme(@Nonnull Preferences.Gui.Theme theme) { tracker.send(new HitBuilders.EventBuilder().setCustomDimension(THEME, theme.name()).build()); } @Nonnull public GoogleAnalytics getAnalytics() { return analytics; } @Nonnull public Tracker getTracker() { return tracker; } public void onButtonPressed(@Nullable String text) { if (TextUtils.isEmpty(text)) { return; } final HitBuilders.EventBuilder b = new HitBuilders.EventBuilder(); b.setCategory("ui"); b.setAction("click"); b.setLabel(text); tracker.send(b.build()); } @Override public void onSharedPreferenceChanged(SharedPreferences preferences, String key) { if (TextUtils.equals(key, Preferences.Gui.mode.getKey())) { reportLayout(Preferences.Gui.mode.getPreferenceNoError(preferences)); } else if (TextUtils.equals(key, Preferences.Gui.theme.getKey())) { reportTheme(Preferences.Gui.theme.getPreferenceNoError(preferences)); } } public void reportInitially(@Nonnull SharedPreferences preferences) { reportLayout(Preferences.Gui.mode.getPreferenceNoError(preferences)); reportTheme(Preferences.Gui.theme.getPreferenceNoError(preferences)); } public void onFloatingCalculatorOpened() { final HitBuilders.EventBuilder b = new HitBuilders.EventBuilder(); b.setCategory("lifecycle"); b.setAction("floating_calculator"); b.setLabel("start"); tracker.send(b.build()); } }