Модуль для сбора пользовательского поведения

Модуль находится в директории tracker

Инициализация

Для инициализации Трекинга пользовательского поведения вам нужно добавить следующий код в ваш класс Application в метод onCreate():

public class App extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        new UserBehaviourTracker.Builder(this).build();
    }
}

Инициализацию в приложении также можно выполнить с помощью дополнительных свойств.

  • Добавление дополнительной метаинформации о графических элементах
  • Расширение функциональности трекера для сбора других данных о пользовательском поведении с помощью кастомных реализаций интерфейса DataCollector
  • Дополнительные опции. Например, включение/отключение логирования
  ViewMetaInfoDictionary viewMetaInfoDictionary = new ViewMetaInfoDictionary()
        .add(R.id.recycler_view_button, new ViewMetaProperty("text", "Activity with RecyclerView"), new ViewMetaProperty("color", "purple"))
        .add(R.id.text_view_bottom, new ViewMetaProperty("other", "this is important meta information"));

        new UserBehaviourTracker
                .Builder(this)
                .setMetaDictionary(viewMetaInfoDictionary)
                .addDataCollector(new CustomDataCollector()
                .setOptions(new TrackerOptions(true, false, false))
        .build();

Сбор данных

После инициализации UserBehaviourTracker подписываеться на жизненый цикл каждой активити в приложении с помощью класса AppActivityLifecycleCallback и начинает отслеживать клики в методе onActivityCreated

@Override
    public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
        final Window activityWindow = activity.getWindow();
        final Window.Callback localCallback = activityWindow.getCallback();
        activityWindow.setCallback(new AndroidWindowCallback(localCallback, touchEventHandler));
    }

Сохранение элементов экрана происходит в следующих колбеков жизненого цикла активити

    @Override
    public void onActivityResumed(@NonNull Activity activity) {
        rootView = activity.findViewById(android.R.id.content);
        listener = () -> {
            viewElementsSaver.saveView(rootView);
        };
        rootView.getViewTreeObserver().addOnDrawListener(listener);
    }

    @Override
    public void onActivityPaused(@NonNull Activity activity) {
        rootView.getViewTreeObserver().removeOnDrawListener(listener);
    }

Структура проекта

  • activitylifecycle - классы для отслеживания жизненого цикла активити
  • clickhandler - классы для обработки кликов
  • datacollector - сбора данных о пользовательском поведении
  • repository - репозиторий для хранения или отправки данных. На данный момент используется для логирования кликов
  • utils - вспомогательные классы

Дополнительно

  • Пример приложения с инициализацией модуля можно найти здесь или просто запустить приложение из Android Studio.

TODO

  • Добавить тесты (Unit, Instrumented)