add base activity & refactor