use dagger singleton injection instead of static field
add google's truth test dependency
add javadoc & improve corner case checking for protocol object
write unit test for protocol object