diff --git a/.travis.yml b/.travis.yml index 7fe9630e..65c4c57e 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,28 @@ language: android +sudo: required +jdk: oraclejdk8 env: global: - GRADLE_OPTS=-Xmx512m + - ANDROID_API_LEVEL=28 + - ANDROID_BUILD_TOOLS_VERSION=28.0.3 + - ANDROID_ABI=armeabi-v7a android: components: - tools - - build-tools-27.0.3 - - android-27 + - platform-tools + - tools - extra-android-m2repository licenses: + - 'android-sdk-preview-license-52d11cd2' - 'android-sdk-license-.+' + - 'google-gdk-license-.+' before_install: - yes | sdkmanager "platforms;android-28" - -jdk: - - oraclejdk8 + - yes | sdkmanager "build-tools;28.0.3" script: - - ./gradlew assemble anvil:check --stacktrace + - ./gradlew assemble anvil:check --stacktrace \ No newline at end of file diff --git a/anvil-appcompat-v7/build.gradle b/anvil-appcompat-v7/build.gradle index 2baf589b..2b8bf8e8 100644 --- a/anvil-appcompat-v7/build.gradle +++ b/anvil-appcompat-v7/build.gradle @@ -1,10 +1,3 @@ -buildscript { - dependencies { - classpath "com.android.tools.build:gradle:$agp_version" - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.5' - } -} - apply plugin: 'com.android.library' apply plugin: 'trikita.anvilgen' apply from: "$rootProject.projectDir/copyDeps.gradle" @@ -21,7 +14,7 @@ android { minSdkVersion 15 targetSdkVersion 27 - missingDimensionStrategy 'api', 'sdk15' + missingDimensionStrategy 'api', 'sdk21' } lintOptions { @@ -49,6 +42,7 @@ anvilgen { "android.arch.lifecycle-common": "1.1.0", ] quirks = QUIRKS + superclass = "BaseAppCompat" } dependencies { diff --git a/anvil-appcompat-v7/src/main/java/trikita/anvil/appcompat/v7/AppCompatv7DSL.java b/anvil-appcompat-v7/src/main/java/trikita/anvil/appcompat/v7/AppCompatv7DSL.java index 445104ab..de1f123e 100644 --- a/anvil-appcompat-v7/src/main/java/trikita/anvil/appcompat/v7/AppCompatv7DSL.java +++ b/anvil-appcompat-v7/src/main/java/trikita/anvil/appcompat/v7/AppCompatv7DSL.java @@ -65,7 +65,7 @@ * It contains views and their setters from the library appcompat-v7. * Please, don't edit it manually unless for debugging. */ -public final class AppCompatv7DSL implements Anvil.AttributeSetter { +public final class AppCompatv7DSL extends BaseAppCompat implements Anvil.AttributeSetter { static { Anvil.registerAttributeSetter(new AppCompatv7DSL()); } diff --git a/anvil-appcompat-v7/src/main/java/trikita/anvil/appcompat/v7/BaseAppCompat.java b/anvil-appcompat-v7/src/main/java/trikita/anvil/appcompat/v7/BaseAppCompat.java new file mode 100644 index 00000000..88491fd6 --- /dev/null +++ b/anvil-appcompat-v7/src/main/java/trikita/anvil/appcompat/v7/BaseAppCompat.java @@ -0,0 +1,27 @@ +package trikita.anvil.appcompat.v7; + +import android.support.v7.widget.Toolbar; +import android.view.View; +import trikita.anvil.Anvil; + +public class BaseAppCompat implements Anvil.AttributeSetter { + + static { + Anvil.registerAttributeSetter(new BaseAppCompat()); + } + + @Override + public boolean set(View v, String name, Object value, Object prevValue) { + switch (name) { + case "layoutGravity": + if (v.getLayoutParams() instanceof Toolbar.LayoutParams && value instanceof Integer) { + ((Toolbar.LayoutParams) v.getLayoutParams()).gravity = (int) value; + return true; + } + break; + } + + return false; + } + +} \ No newline at end of file diff --git a/anvil-cardview-v7/build.gradle b/anvil-cardview-v7/build.gradle index f2fb2e99..88cbc5b3 100644 --- a/anvil-cardview-v7/build.gradle +++ b/anvil-cardview-v7/build.gradle @@ -1,10 +1,3 @@ -buildscript { - dependencies { - classpath "com.android.tools.build:gradle:$agp_version" - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.5' - } -} - apply plugin: 'com.android.library' apply plugin: 'trikita.anvilgen' apply from: "$rootProject.projectDir/copyDeps.gradle" diff --git a/anvil-design/build.gradle b/anvil-design/build.gradle index 44307421..eb66eb83 100644 --- a/anvil-design/build.gradle +++ b/anvil-design/build.gradle @@ -1,10 +1,3 @@ -buildscript { - dependencies { - classpath "com.android.tools.build:gradle:$agp_version" - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.5' - } -} - apply plugin: 'com.android.library' apply plugin: 'trikita.anvilgen' apply from: "$rootProject.projectDir/copyDeps.gradle" @@ -52,6 +45,7 @@ anvilgen { "viewmodel": "1.1.0" ] quirks = QUIRKS + superclass = "BaseDesign" } dependencies { diff --git a/anvil-design/src/main/java/trikita/anvil/design/BaseDesign.java b/anvil-design/src/main/java/trikita/anvil/design/BaseDesign.java new file mode 100644 index 00000000..3e290a92 --- /dev/null +++ b/anvil-design/src/main/java/trikita/anvil/design/BaseDesign.java @@ -0,0 +1,76 @@ +package trikita.anvil.design; + +import android.animation.ObjectAnimator; +import android.animation.StateListAnimator; +import android.os.Build; +import android.support.annotation.RequiresApi; +import android.support.design.widget.AppBarLayout; +import android.support.design.widget.CollapsingToolbarLayout; +import android.support.design.widget.CoordinatorLayout; +import android.view.View; + +import trikita.anvil.Anvil; + +import static trikita.anvil.BaseDSL.attr; + +public class BaseDesign implements Anvil.AttributeSetter { + + static { + Anvil.registerAttributeSetter(new BaseDesign()); + } + + public static Void collapseMode(int collapseMode) { + return attr("collapseMode", collapseMode); + } + + public static Void scrollFlags(int collapseMode) { + return attr("scrollFlags", collapseMode); + } + + public static Void behavior(CoordinatorLayout.Behavior behavior) { + return attr("behavior", behavior); + } + + @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) + public static Void appBarElevation(float elevation) { + return attr("appBarElevation", elevation); + } + + @Override + public boolean set(View v, String name, Object value, Object prevValue) { + switch (name) { + + case "collapseMode": + if (v.getLayoutParams() instanceof CollapsingToolbarLayout.LayoutParams && value instanceof Integer) { + ((CollapsingToolbarLayout.LayoutParams) v.getLayoutParams()).setCollapseMode((int) value); + return true; + } + break; + case "scrollFlags": + if (v.getLayoutParams() instanceof AppBarLayout.LayoutParams && value instanceof Integer) { + ((AppBarLayout.LayoutParams) v.getLayoutParams()).setScrollFlags((int) value); + return true; + } + break; + case "behavior": + if (v.getLayoutParams() instanceof CoordinatorLayout.LayoutParams && (value == null || value instanceof CoordinatorLayout.Behavior)) { + ((CoordinatorLayout.LayoutParams) v.getLayoutParams()).setBehavior((CoordinatorLayout.Behavior) value); + return true; + } + break; + case "appBarElevation": + if (v instanceof AppBarLayout && (value == null || value instanceof Float)) { + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) { + StateListAnimator stateListAnimator = new StateListAnimator(); + stateListAnimator.addState(new int[0], ObjectAnimator.ofFloat(v, "elevation", (Float) value)); + v.setStateListAnimator(stateListAnimator); + } + return true; + } + break; + } + + return false; + } + +} diff --git a/anvil-design/src/main/java/trikita/anvil/design/DesignDSL.java b/anvil-design/src/main/java/trikita/anvil/design/DesignDSL.java index 7fc9e167..1ee1add8 100644 --- a/anvil-design/src/main/java/trikita/anvil/design/DesignDSL.java +++ b/anvil-design/src/main/java/trikita/anvil/design/DesignDSL.java @@ -43,7 +43,7 @@ * It contains views and their setters from the library design. * Please, don't edit it manually unless for debugging. */ -public final class DesignDSL implements Anvil.AttributeSetter { +public final class DesignDSL extends BaseDesign implements Anvil.AttributeSetter { static { Anvil.registerAttributeSetter(new DesignDSL()); } diff --git a/anvil-gridlayout-v7/build.gradle b/anvil-gridlayout-v7/build.gradle index cc93c68b..9f72e020 100644 --- a/anvil-gridlayout-v7/build.gradle +++ b/anvil-gridlayout-v7/build.gradle @@ -1,10 +1,3 @@ -buildscript { - dependencies { - classpath "com.android.tools.build:gradle:$agp_version" - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.5' - } -} - apply plugin: 'com.android.library' apply plugin: 'trikita.anvilgen' apply from: "$rootProject.projectDir/copyDeps.gradle" diff --git a/anvil-recyclerview-v7/build.gradle b/anvil-recyclerview-v7/build.gradle index ffd2f244..0bdce50e 100644 --- a/anvil-recyclerview-v7/build.gradle +++ b/anvil-recyclerview-v7/build.gradle @@ -1,10 +1,3 @@ -buildscript { - dependencies { - classpath "com.android.tools.build:gradle:$agp_version" - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.5' - } -} - apply plugin: 'com.android.library' apply plugin: 'trikita.anvilgen' apply from: "$rootProject.projectDir/copyDeps.gradle" diff --git a/anvil-support-v4/build.gradle b/anvil-support-v4/build.gradle index 6be521ca..3481fd15 100644 --- a/anvil-support-v4/build.gradle +++ b/anvil-support-v4/build.gradle @@ -1,10 +1,3 @@ -buildscript { - dependencies { - classpath "com.android.tools.build:gradle:$agp_version" - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.5' - } -} - apply plugin: 'com.android.library' apply plugin: 'trikita.anvilgen' apply from: "$rootProject.projectDir/copyDeps.gradle" @@ -21,7 +14,7 @@ android { minSdkVersion 15 targetSdkVersion 27 - missingDimensionStrategy 'api', 'sdk15' + missingDimensionStrategy 'api', 'sdk21' } lintOptions { diff --git a/anvil/build.gradle b/anvil/build.gradle index 9bec96bb..63fad4fb 100644 --- a/anvil/build.gradle +++ b/anvil/build.gradle @@ -1,10 +1,3 @@ -buildscript { - dependencies { - classpath "com.android.tools.build:gradle:$agp_version" - classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.5' - } -} - apply plugin: 'com.android.library' apply plugin: 'trikita.anvilgen' diff --git a/build.gradle b/build.gradle index 28632606..df9b7b23 100644 --- a/build.gradle +++ b/build.gradle @@ -1,3 +1,15 @@ +buildscript { + dependencies { + classpath "com.android.tools.build:gradle:3.3.2" + classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.5' + } + + repositories { + google() + jcenter() + } +} + subprojects { ext { mockito_version = '2.23.0' @@ -6,6 +18,11 @@ subprojects { } buildscript { + dependencies { + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.31" + classpath "com.android.tools.build:gradle:$agp_version" + } + repositories { google() jcenter() diff --git a/sample/.gitignore b/sample/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/sample/.gitignore @@ -0,0 +1 @@ +/build diff --git a/sample/build.gradle b/sample/build.gradle new file mode 100644 index 00000000..080e2323 --- /dev/null +++ b/sample/build.gradle @@ -0,0 +1,40 @@ +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' + +android { + compileSdkVersion 27 + + defaultConfig { + applicationId "trikita.anvil.sample" + minSdkVersion 21 + targetSdkVersion 27 + versionCode 1 + versionName "1.0" + + missingDimensionStrategy 'api', 'sdk21' + testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.31" + implementation "com.android.support:appcompat-v7:27.1.1" + implementation project(":anvil") + implementation project(":anvil-support-v4") + implementation project(":anvil-appcompat-v7") + + + testImplementation 'junit:junit:4.12' + androidTestImplementation 'com.android.support.test:runner:1.0.2' + androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' +} diff --git a/sample/proguard-rules.pro b/sample/proguard-rules.pro new file mode 100644 index 00000000..f1b42451 --- /dev/null +++ b/sample/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml new file mode 100644 index 00000000..466103a6 --- /dev/null +++ b/sample/src/main/AndroidManifest.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/sample/src/main/java/trikita/anvil/sample/MainActivity.kt b/sample/src/main/java/trikita/anvil/sample/MainActivity.kt new file mode 100644 index 00000000..da53854e --- /dev/null +++ b/sample/src/main/java/trikita/anvil/sample/MainActivity.kt @@ -0,0 +1,56 @@ +package trikita.anvil.sample + +import android.os.Bundle +import android.support.v7.app.AppCompatActivity +import android.widget.LinearLayout +import trikita.anvil.BaseDSL.MATCH +import trikita.anvil.BaseDSL.WRAP +import trikita.anvil.BaseDSL.dip +import trikita.anvil.BaseDSL.padding +import trikita.anvil.BaseDSL.size +import trikita.anvil.DSL.button +import trikita.anvil.DSL.frameLayout +import trikita.anvil.DSL.linearLayout +import trikita.anvil.DSL.onClick +import trikita.anvil.DSL.orientation +import trikita.anvil.DSL.text +import trikita.anvil.DSL.textView +import trikita.anvil.RenderableView + + +class MainActivity : AppCompatActivity() { + + var ticktock = 0 + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(object : RenderableView(this) { + override fun view() { + linearLayout { + size(MATCH, MATCH) + padding(dip(8)) + orientation(LinearLayout.VERTICAL) + + textView { + size(MATCH, WRAP) + text("Tick-tock: $ticktock") + } + + frameLayout { + size(MATCH, WRAP) + + button { + size(WRAP, WRAP) + text("Tick") + onClick { v -> + ticktock++ + } + } + } + + } + } + }) + } + +} diff --git a/sample/src/main/res/drawable-v24/ic_launcher_foreground.xml b/sample/src/main/res/drawable-v24/ic_launcher_foreground.xml new file mode 100644 index 00000000..1f6bb290 --- /dev/null +++ b/sample/src/main/res/drawable-v24/ic_launcher_foreground.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + diff --git a/sample/src/main/res/drawable/ic_launcher_background.xml b/sample/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..0d025f9b --- /dev/null +++ b/sample/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sample/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/sample/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..eca70cfe --- /dev/null +++ b/sample/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/sample/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/sample/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 00000000..eca70cfe --- /dev/null +++ b/sample/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/sample/src/main/res/mipmap-hdpi/ic_launcher.png b/sample/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..898f3ed5 Binary files /dev/null and b/sample/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/sample/src/main/res/mipmap-hdpi/ic_launcher_round.png b/sample/src/main/res/mipmap-hdpi/ic_launcher_round.png new file mode 100644 index 00000000..dffca360 Binary files /dev/null and b/sample/src/main/res/mipmap-hdpi/ic_launcher_round.png differ diff --git a/sample/src/main/res/mipmap-mdpi/ic_launcher.png b/sample/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..64ba76f7 Binary files /dev/null and b/sample/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/sample/src/main/res/mipmap-mdpi/ic_launcher_round.png b/sample/src/main/res/mipmap-mdpi/ic_launcher_round.png new file mode 100644 index 00000000..dae5e082 Binary files /dev/null and b/sample/src/main/res/mipmap-mdpi/ic_launcher_round.png differ diff --git a/sample/src/main/res/mipmap-xhdpi/ic_launcher.png b/sample/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..e5ed4659 Binary files /dev/null and b/sample/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/sample/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/sample/src/main/res/mipmap-xhdpi/ic_launcher_round.png new file mode 100644 index 00000000..14ed0af3 Binary files /dev/null and b/sample/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ diff --git a/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png b/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..b0907cac Binary files /dev/null and b/sample/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/sample/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/sample/src/main/res/mipmap-xxhdpi/ic_launcher_round.png new file mode 100644 index 00000000..d8ae0315 Binary files /dev/null and b/sample/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ diff --git a/sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..2c18de9e Binary files /dev/null and b/sample/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/sample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/sample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png new file mode 100644 index 00000000..beed3cdd Binary files /dev/null and b/sample/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ diff --git a/sample/src/main/res/values/colors.xml b/sample/src/main/res/values/colors.xml new file mode 100644 index 00000000..34e9269d --- /dev/null +++ b/sample/src/main/res/values/colors.xml @@ -0,0 +1,8 @@ + + + #008577 + #00574B + #D81B60 + #ffffff + #000000 + diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml new file mode 100644 index 00000000..cbdb06fa --- /dev/null +++ b/sample/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + Anvil Sample + diff --git a/sample/src/main/res/values/styles.xml b/sample/src/main/res/values/styles.xml new file mode 100644 index 00000000..5885930d --- /dev/null +++ b/sample/src/main/res/values/styles.xml @@ -0,0 +1,11 @@ + + + + + + diff --git a/settings.gradle b/settings.gradle index 9c28a352..fb64f53a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -5,4 +5,5 @@ include 'anvil-cardview-v7' include 'anvil-gridlayout-v7' include 'anvil-design' include 'anvil-recyclerview-v7' +include ':sample'