package org.bookdash.android.data.tracking;
import android.os.Bundle;
import android.support.annotation.NonNull;
import com.google.firebase.analytics.FirebaseAnalytics;
import org.bookdash.android.domain.model.firebase.FireBookDetails;
/**
* @author rebeccafranks
* @since 2016/12/05
*/
public class BookDashFirebaseAnalytics implements Analytics {
private static final String EVENT_VIEW_DOWNLOADS = "view_downloads";
private static final String EVENT_VIEW_BOOK = "view_single_book";
private static final String PARAM_BOOK_ID = "book_id";
private static final String PARAM_BOOK_NAME = "book_name";
private static final String EVENT_DELETE_BOOK = "delete_book";
private static final String EVENT_RATE_APP = "rate_app";
private static final String EVENT_VIEW_CONTRIBUTORS = "view_contributors";
private static final String EVENT_CHANGE_LANGUAGE = "change_language";
private static final String PARAM_NEW_LANGUAGE = "new_language";
private static final String PARAM_CURRENT_LANGUAGE = "current_language";
private static final String EVENT_VIEW_ALL_BOOKS = "view_all_books";
private static final String PARAM_ERROR_MESSAGE = "error_msg";
private static final String EVENT_DOWNLOAD_BOOK_FAILED = "download_book_failed";
private static final String EVENT_DOWNLOAD_BOOK_STARTED = "download_book_started";
private static final String EVENT_SHARE_BOOK = "share_book";
private static final String EVENT_INVITE_PEOPLE = "invite_friends";
private static final String PARAM_SEARCH_TERM = "search_term";
private static final String EVENT_SEARCH_BOOKS = "search_books";
private static final String EVENT_SEARCH_BOOKS_ERROR = "search_books_error";
private static final String EVENT_SEARCH_BOOKS_SUCCESS = "search_books_success";
private static final String PARAM_SEARCH_RESULTS_COUNT = "search_results_count";
private static final String EVENT_SEARCH_BOOKS_NO_RESULTS = "search_books_no_results";
private static final String EVENT_VIEW_TUTORIAL = "view_tutorial";
private static final String PARAM_ON_OFF = "notification_pref_value";
private static final String EVENT_TOGGLE_NOTIFICATIONS = "toggle_new_book_notification";
private FirebaseAnalytics firebaseAnalytics;
public BookDashFirebaseAnalytics(FirebaseAnalytics firebaseAnalytics) {
this.firebaseAnalytics = firebaseAnalytics;
}
@Override
public void trackLanguageChange(final String newLanguage) {
Bundle bundle = new Bundle();
bundle.putString(PARAM_NEW_LANGUAGE, newLanguage);
firebaseAnalytics.logEvent(EVENT_CHANGE_LANGUAGE, bundle);
setUserLanguage(newLanguage);
}
@Override
public void trackViewBooksDownloaded() {
firebaseAnalytics.logEvent(EVENT_VIEW_DOWNLOADS, null);
}
@Override
public void trackViewBook(final FireBookDetails book) {
Bundle bundle = getBookInfoBundle(book);
firebaseAnalytics.logEvent(EVENT_VIEW_BOOK, bundle);
}
@Override
public void trackDeleteBook(final FireBookDetails book) {
Bundle bundle = getBookInfoBundle(book);
firebaseAnalytics.logEvent(EVENT_DELETE_BOOK, bundle);
}
@Override
public void trackRateAppClick() {
firebaseAnalytics.logEvent(EVENT_RATE_APP, null);
}
@Override
public void trackViewContributors() {
firebaseAnalytics.logEvent(EVENT_VIEW_CONTRIBUTORS, null);
}
@Override
public void trackViewAllBooks() {
firebaseAnalytics.logEvent(EVENT_VIEW_ALL_BOOKS, null);
}
@Override
public void trackDeleteBookFailed(final FireBookDetails book, final String message) {
Bundle bundle = getBookInfoBundle(book);
bundle.putString(PARAM_ERROR_MESSAGE, message);
firebaseAnalytics.logEvent(EVENT_DELETE_BOOK, bundle);
}
@Override
public void trackDownloadBookStarted(final FireBookDetails book) {
Bundle bundle = getBookInfoBundle(book);
firebaseAnalytics.logEvent(EVENT_DOWNLOAD_BOOK_STARTED, bundle);
}
@Override
public void trackDownloadBookFailed(final FireBookDetails book, String errorMsg) {
Bundle bundle = getBookInfoBundle(book);
bundle.putString(PARAM_ERROR_MESSAGE, errorMsg);
firebaseAnalytics.logEvent(EVENT_DOWNLOAD_BOOK_FAILED, bundle);
}
@Override
public void trackShareBook(final FireBookDetails book) {
Bundle bundle = getBookInfoBundle(book);
firebaseAnalytics.logEvent(EVENT_SHARE_BOOK, bundle);
}
@Override
public void trackInvitePeople() {
firebaseAnalytics.logEvent(EVENT_INVITE_PEOPLE, null);
}
public void setUserLanguage(String language) {
firebaseAnalytics.setUserProperty(PARAM_CURRENT_LANGUAGE, language);
}
@Override
public void trackSearchBooks(final String searchTerm) {
Bundle bundle = new Bundle();
bundle.putString(PARAM_SEARCH_TERM, searchTerm);
firebaseAnalytics.logEvent(EVENT_SEARCH_BOOKS, bundle);
}
@Override
public void trackSearchError(final String searchTerm, final String message) {
Bundle bundle = new Bundle();
bundle.putString(PARAM_SEARCH_TERM, searchTerm);
firebaseAnalytics.logEvent(EVENT_SEARCH_BOOKS_ERROR, bundle);
}
@Override
public void trackSearchBooksSuccess(final String searchTerm, final int numberSearchResults) {
Bundle bundle = new Bundle();
bundle.putString(PARAM_SEARCH_TERM, searchTerm);
bundle.putInt(PARAM_SEARCH_RESULTS_COUNT, numberSearchResults);
firebaseAnalytics.logEvent(EVENT_SEARCH_BOOKS_SUCCESS, bundle);
}
@Override
public void trackSearchBooksNoResults(final String searchTerm) {
Bundle bundle = new Bundle();
bundle.putString(PARAM_SEARCH_TERM, searchTerm);
firebaseAnalytics.logEvent(EVENT_SEARCH_BOOKS_NO_RESULTS, bundle);
}
@Override
public void trackViewHelpTutorialAgain() {
firebaseAnalytics.logEvent(EVENT_VIEW_TUTORIAL, null);
}
@Override
public void trackUserToggleNewBookNotifications(final boolean onOff) {
Bundle bundle = new Bundle();
bundle.putBoolean(PARAM_ON_OFF, onOff);
firebaseAnalytics.logEvent(EVENT_TOGGLE_NOTIFICATIONS, bundle);
}
@NonNull
private Bundle getBookInfoBundle(final FireBookDetails book) {
Bundle bundle = new Bundle();
bundle.putString(PARAM_BOOK_NAME, book.getBookTitle());
bundle.putString(PARAM_BOOK_ID, book.getId());
return bundle;
}
}