jaba
A simple cli tool to convert your stock android project structure to MVVM architectural pattern. It also includes templates for splash and login screen. Basically, jaba is a time saver. :)
Install
```shell script wget "https://raw.githubusercontent.com/theapache64/jaba/master/install.sh" -q --show-progress -O install.sh && sh install.sh && source ~/.bash_aliases
## Usage
Simply run `jaba` in an android studio project, and you'll be prompted with an interactive shell.
Project : MyAwesomeProject Package : com.theapache64.myawesomeproject
Choose architecture 1) MVVM 2) MVP Response :1 Do you need google fonts? (y/N): y Response : yes Do you need network module ? (y/N): y Response : yes Enter base url : (empty to use default jaba api): http://myapi.com/api/v1/ Do you need splash screen? (y/N): y Response : yes Do you need login screen? (y/N): y Response : yes ⏳ Creating dirs... ✔️ Done ⏳ Modifying app.gradle ✔️ Done ⏳ Fixing XML style issue... ✔️ Done ⏳ Creating App.kt ... ✔️ Done Modifying manifest file... ✔️ Done ⏳ Creating MainViewModel.kt ... ✔️ Done ⏳ Modifying MainActivity.kt ... ✔️ Done ⏳ Adding data binding to main layout file... ✔️ Done ⏳ Updating content_main.xml to support data binding ✔️ Done ⏳ Creating dagger activity builder... ✔️ Done ⏳ Creating dagger AppComponent.kt ... ✔️ Done ⏳ Creating network module... ✔️ Done ⏳ Creating ApiInterface.kt ... ✔️ Done ⏳ Creating LogInRequest.kt ... ✔️ Done ⏳ Creating LogInResponse.kt ... ✔️ Done ⏳ Creating UserPrefRepository.kt ... ✔️ Done ⏳ Creating LogInActivity.kt ... ✔️ Done ⏳ Creating LogInViewModel.kt ... ✔️ Done ⏳ Creating LogInHandler.kt ... ✔️ Done ⏳ Creating AuthRepository.kt ... ✔️ Done ⏳ Creating login layout... ✔️ Done ⏳ Creating login related icons ✔️ Done ⏳ Adding login strings to strings.xml ✔️ Done ⏳ Modifying menu_main.xml file ✔️ Done ⏳ Creating dagger AppModule.kt ... ✔️ Done ⏳ Creating dagger ViewModelModule.kt ... ✔️ Done ⏳ Creating SplashViewModel.kt ✔️ Done ⏳ Creating SplashActivity.kt ... ✔️ Done ⏳ Modifying styles.xml to support splash theme ✔️ Done ⏳ Creating splash_bg.xml ... ✔️ Done ⏳ Creating logo icon... ✔️ Done ⏳ Adding color constants to colors.xml ✔️ Done ⏳ Finishing project setup... ✔️ Done
## Activity Support
Once you created a new activity, you'll want to create `ViewModel`, `Handler` and integrate them with the `DataBinding`, `Activity` and with `Dagger`. To solve this mundane task, you may use the `pas` flag to **Provide Activity Support**
Syntax
jaba -pas COMPONENT_NAME
For example,If you want activity support for `SomeActivity`, you may use below code
jaba -pas SomeActivity
Then it'll do the following
### Creation
- Create `ViewModel` named `SomeViewModel` with `dagger` injection
- Create `Handler` named `SomeHandler`
### Integration
- Integrate `SomeViewModel` with `SomeActivity` with `dagger-viewmodel-factory`
- Implement `SomeHandler` in `SomeActivity`
- Integrate `SomeViewModel` and `SomeHandler` with `activity_some.xml` (using data binding)
### Finalization
- Add `SomeActivity` builder in `ActivityBuilderModule`
- Add `SomeViewModel` in `ViewModelModule`
## Known Issues
**Code Alignment**
Once the code generation has been done, some files will have some alignment issues.
To fix this, you may do `Code Refactor`
- Click on the `Project` panel
- Click on `app`
- Press `Control + Alt + L` (linux)
- Check `Optimize Imports, Rearrange entries and Cleanup code`
- Click 'Run'
This will solve all alignment issues as well as optimization of imports.
## Project Structure
**Before**
. ├── MainActivity.kt
**After**
. ├── App.kt ├── data │ ├── local │ ├── remote │ │ ├── ApiInterface.kt │ │ └── login │ │ ├── LogInRequest.kt │ │ └── LogInResponse.kt │ └── repositories │ ├── AuthRepository.kt │ └── UserPrefRepository.kt ├── di │ ├── components │ │ └── AppComponent.kt │ └── modules │ ├── ActivitiesBuilderModule.kt │ ├── AppModule.kt │ ├── NetworkModule.kt │ └── ViewModelModule.kt ├── models ├── ui │ └── activities │ ├── login │ │ ├── LogInActivity.kt │ │ ├── LogInHandler.kt │ │ └── LogInViewModel.kt │ ├── main │ │ ├── MainActivity.kt │ │ └── MainViewModel.kt │ └── splash │ ├── SplashActivity.kt │ └── SplashViewModel.kt └── utils
```

