diff --git a/README.md b/README.md index 77ac134..a011cfc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# Android ViewModelBinding 2.0 ALPHA +# Android ViewModelBinding 2.0 [![Build Status](https://travis-ci.org/jakubkinst/Android-ViewModelBinding.svg?branch=master)](https://travis-ci.org/jakubkinst/Android-ViewModelBinding) [![Android Arsenal](https://img.shields.io/badge/Android%20Arsenal-ViewModelBinding-green.svg?style=true)](https://android-arsenal.com/details/1/3240) [ ![Download](https://api.bintray.com/packages/jakubkinst/cz.kinst.jakub/android-viewmodelbinding/images/download.svg) ](https://bintray.com/jakubkinst/cz.kinst.jakub/android-viewmodelbinding/_latestVersion) ## Intro A lightweight library aiming to speed up Android app development by leveraging the new [Android Data Binding](http://developer.android.com/tools/data-binding/guide.html) and taking the best from the [Model-View-ViewModel](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93viewmodel) design pattern. @@ -23,15 +23,13 @@ ViewModel instances are stored in a global static Map and reattached automatical ## Installation ```groovy -compile 'cz.kinst.jakub:viewmodelbinding:2.0.0-alpha2' +compile 'cz.kinst.jakub:viewmodelbinding:2.0.0' ``` Don't forget to **enable Data Binding** in your module: ```groovy android { - dataBinding { - enabled = true; - } + dataBinding.enabled = true } ``` ## Usage @@ -156,10 +154,11 @@ To deploy new screens even faster, use the included [Android Studio Template](/e - New way of configuring Activity/Fragment (call `setupViewModel()` before `super.onCreate()`) - Added `onViewModelInitialized()` callback to Activity/Fragment to be able to setup ViewModel before `onViewModelCreated()` is called (example: feeding ViewModel with Extras/Arguments - see `ArgumentDialogFragment` in sample) - Optional automatic binding of Activity/Fragment into layout file next to the ViewModel instance (add variable of name `view` and appropriate type) +- Added simple permission handling (PermissionManager) to ViewModel - see sample ## Changelog -#### v2.0.0-alpha1 +#### v2.0.0 - First 2.0.0 version #### v0.9.4 (Jul 18, 2016) diff --git a/build.gradle b/build.gradle index 1c24735..7054049 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ buildscript { jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0-beta3' - classpath 'me.tatarka:gradle-retrolambda:3.5.0' + classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'me.tatarka:gradle-retrolambda:3.6.0' classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4' classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' diff --git a/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/recipe.xml.ftl b/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/recipe.xml.ftl index fbe82db..3290af5 100644 --- a/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/recipe.xml.ftl +++ b/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/recipe.xml.ftl @@ -2,10 +2,10 @@ <#if appCompat && !(hasDependency('cz.kinst.jakub:viewmodelbinding'))> - + - <#if useStatefulLayout && !(hasDependency('cz.kinst.jakub:stateful-layout'))> - + <#if useStatefulLayout && !(hasDependency('cz.kinst.jakub:android-stateful-layout-simple'))> + <#if screenType == "Activity"> diff --git a/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/root/src/app_package/Screen.java.ftl b/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/root/src/app_package/Screen.java.ftl index 2e2760f..9f5909d 100644 --- a/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/root/src/app_package/Screen.java.ftl +++ b/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/root/src/app_package/Screen.java.ftl @@ -1,8 +1,6 @@ package ${packageName}<#if scrPackage != "">.${scrPackage}; -<#if screenType == "Fragment"> import android.os.Bundle; - import cz.kinst.jakub.viewmodelbinding.ViewModelActivity; import cz.kinst.jakub.viewmodelbinding.ViewModelBindingConfig; @@ -18,9 +16,9 @@ public class ${screenClass} extends ViewModel${screenType}<${underscoreToCamelCa } - - @Override - public ViewModelBindingConfig<${viewModelClass}> getViewModelBindingConfig() { - return new ViewModelBindingConfig<>(R.layout.${layoutName}, ${classToResource(screenClass)?cap_first}ViewModel.class, BR.viewModel); + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + setupViewModel(R.layout.${layoutName}, ${classToResource(screenClass)?cap_first}ViewModel.class); + super.onCreate(savedInstanceState); } } diff --git a/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/root/src/app_package/ViewModel.java.ftl b/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/root/src/app_package/ViewModel.java.ftl index 2854664..a1bc986 100644 --- a/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/root/src/app_package/ViewModel.java.ftl +++ b/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/root/src/app_package/ViewModel.java.ftl @@ -4,16 +4,16 @@ import android.databinding.ObservableField; import android.view.View; <#if useStatefulLayout> -import cz.kinst.jakub.view.StatefulLayout; +import cz.kinst.jakub.view.SimpleStatefulLayout; import cz.kinst.jakub.viewmodelbinding.ViewModel; -public class ${viewModelClass} extends ViewModel<${underscoreToCamelCase(layoutName)}Binding> { +public class ${viewModelClass} extends ViewModel { <#if useStatefulLayout> - public final ObservableField state = new ObservableField<>(StatefulLayout.State.PROGRESS); + public final ObservableField state = new ObservableField<>(SimpleStatefulLayout.State.PROGRESS); @Override @@ -21,7 +21,7 @@ public class ${viewModelClass} extends ViewModel<${underscoreToCamelCase(layoutN super.onViewModelCreated(); // Do initial setup <#if useStatefulLayout> - state.set(StatefulLayout.State.CONTENT); + state.set(SimpleStatefulLayout.State.CONTENT); } } diff --git a/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/root/src/app_package/layout.xml.ftl b/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/root/src/app_package/layout.xml.ftl index d518ef2..cfe0b9b 100644 --- a/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/root/src/app_package/layout.xml.ftl +++ b/extras/AndroidStudioTemplate/templates/viewmodelbinding/ViewModelBindingActivity/root/src/app_package/layout.xml.ftl @@ -10,7 +10,7 @@ type="${packageName}.<#if vmPackage != "">${vmPackage}.${viewModelClass}"/> <#if useStatefulLayout> - @@ -21,6 +21,6 @@ android:orientation="vertical"> <#if useStatefulLayout> - + diff --git a/sample/build.gradle b/sample/build.gradle index 646c5bd..32f2e38 100644 --- a/sample/build.gradle +++ b/sample/build.gradle @@ -35,5 +35,5 @@ dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile project(':viewmodelbinding') - compile 'com.android.support:design:25.1.1' + compile 'com.android.support:design:25.2.0' } diff --git a/viewmodelbinding/build.gradle b/viewmodelbinding/build.gradle index 11a791c..f03379c 100644 --- a/viewmodelbinding/build.gradle +++ b/viewmodelbinding/build.gradle @@ -61,8 +61,8 @@ android { dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' - compile 'com.android.support:appcompat-v7:25.1.1' - provided 'com.squareup.retrofit2:retrofit:2.1.0' + compile 'com.android.support:appcompat-v7:25.2.0' + provided 'com.squareup.retrofit2:retrofit:2.2.0' } apply from: '../publish.gradle'