refactor the androidpn client to decoupling.