diff --git a/.gitignore b/.gitignore
index 948ff57..59ea13e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,6 @@
+# Idea
+/.idea
+
# Built application files
*.apk
*.ap_
diff --git a/build.gradle b/build.gradle
index 9dc9efe..cd40eb5 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,15 +1,14 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
- ext.kotlin_version = '1.3.41'
+ ext.kotlin_version = '1.6.10'
repositories {
google()
- jcenter()
+ mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:3.4.2'
+ classpath 'com.android.tools.build:gradle:7.0.4'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- classpath 'com.github.dcendents:android-maven-gradle-plugin:2.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
@@ -19,7 +18,7 @@ buildscript {
allprojects {
repositories {
google()
- jcenter()
+ mavenCentral()
}
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index a1e6491..493bae0 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.1-bin.zip
diff --git a/library/build.gradle b/library/build.gradle
index b88a3a2..d1025a1 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -1,15 +1,15 @@
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
-apply plugin: 'com.github.dcendents.android-maven'
+apply plugin: 'maven-publish'
group='com.erkutaras.statelayout'
android {
- compileSdkVersion 28
+ compileSdkVersion 31
defaultConfig {
minSdkVersion 14
- targetSdkVersion 28
+ targetSdkVersion 31
versionCode 26
versionName "1.4.4"
@@ -23,13 +23,27 @@ android {
}
}
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- implementation 'androidx.appcompat:appcompat:1.0.2'
+ implementation 'androidx.core:core-ktx:1.7.0'
+ implementation 'androidx.appcompat:appcompat:1.4.1'
}
-repositories {
- mavenCentral()
+
+project.afterEvaluate {
+ publishing {
+ publications {
+ release(MavenPublication) {
+ from components.release
+ groupId = 'com.erkutaras.statelayout'
+ artifactId = 'StateLayout'
+ version = '1.4.4'
+ }
+ }
+ }
}
diff --git a/library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml
index df0879e..28a7a4f 100644
--- a/library/src/main/AndroidManifest.xml
+++ b/library/src/main/AndroidManifest.xml
@@ -1 +1,3 @@
-
+
+
+
diff --git a/library/src/main/java/com/erkutaras/statelayout/StateLayout.kt b/library/src/main/java/com/erkutaras/statelayout/StateLayout.kt
index bff720e..c43ce5e 100644
--- a/library/src/main/java/com/erkutaras/statelayout/StateLayout.kt
+++ b/library/src/main/java/com/erkutaras/statelayout/StateLayout.kt
@@ -320,6 +320,10 @@ class StateLayout: FrameLayout {
}
}
+ fun getInfoLayout(): View? {
+ return infoLayout
+ }
+
companion object {
@JvmStatic
fun provideLoadingStateInfo() = StateInfo(state = LOADING)
diff --git a/lottie-ext/.gitignore b/lottie-ext/.gitignore
new file mode 100644
index 0000000..42afabf
--- /dev/null
+++ b/lottie-ext/.gitignore
@@ -0,0 +1 @@
+/build
\ No newline at end of file
diff --git a/lottie-ext/build.gradle b/lottie-ext/build.gradle
new file mode 100644
index 0000000..76124b7
--- /dev/null
+++ b/lottie-ext/build.gradle
@@ -0,0 +1,53 @@
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+apply plugin: 'kotlin-kapt'
+apply plugin: 'maven-publish'
+
+group='com.erkutaras.statelayout'
+
+android {
+ compileSdkVersion 31
+
+ defaultConfig {
+ minSdkVersion 16
+ targetSdkVersion 31
+ versionCode 26
+ versionName "1.4.4"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ dataBinding {
+ enabled true
+ }
+}
+
+dependencies {
+ implementation project(':library')
+ implementation 'androidx.core:core-ktx:1.7.0'
+ implementation 'androidx.appcompat:appcompat:1.4.1'
+ api 'com.airbnb.android:lottie:4.2.2'
+}
+
+project.afterEvaluate {
+ publishing {
+ publications {
+ release(MavenPublication) {
+ from components.release
+ groupId = 'com.erkutaras.statelayout'
+ artifactId = 'LottieExt'
+ version = '1.4.4'
+ }
+ }
+ }
+}
diff --git a/lottie-ext/proguard-rules.pro b/lottie-ext/proguard-rules.pro
new file mode 100644
index 0000000..481bb43
--- /dev/null
+++ b/lottie-ext/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
\ No newline at end of file
diff --git a/lottie-ext/src/main/AndroidManifest.xml b/lottie-ext/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..c34f7f4
--- /dev/null
+++ b/lottie-ext/src/main/AndroidManifest.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/lottie-ext/src/main/java/com/erkutaras/statelayout/lottieext/Extension.kt b/lottie-ext/src/main/java/com/erkutaras/statelayout/lottieext/Extension.kt
new file mode 100644
index 0000000..c2465b0
--- /dev/null
+++ b/lottie-ext/src/main/java/com/erkutaras/statelayout/lottieext/Extension.kt
@@ -0,0 +1,21 @@
+package com.erkutaras.statelayout.lottieext
+
+import android.view.View
+import com.airbnb.lottie.LottieAnimationView
+import com.erkutaras.statelayout.StateLayout
+
+fun StateLayout.infoLottie(assetName: String): StateLayout {
+ getInfoLayout()?.findViewById(R.id.imageView_state_layout_info)?.run {
+ setAnimation(assetName)
+ visibility = View.VISIBLE
+ }
+ return this
+}
+
+fun StateLayout.infoLottie(rawRes: Int): StateLayout {
+ getInfoLayout()?.findViewById(R.id.imageView_state_layout_info)?.run {
+ setAnimation(rawRes)
+ visibility = View.VISIBLE
+ }
+ return this
+}
diff --git a/lottie-ext/src/main/java/com/erkutaras/statelayout/lottieext/databinding/Adapter.kt b/lottie-ext/src/main/java/com/erkutaras/statelayout/lottieext/databinding/Adapter.kt
new file mode 100644
index 0000000..7e75c69
--- /dev/null
+++ b/lottie-ext/src/main/java/com/erkutaras/statelayout/lottieext/databinding/Adapter.kt
@@ -0,0 +1,15 @@
+package com.erkutaras.statelayout.lottieext.databinding
+
+import androidx.databinding.BindingAdapter
+import com.erkutaras.statelayout.StateLayout
+import com.erkutaras.statelayout.lottieext.infoLottie
+
+@BindingAdapter("sl_infoLottieAsset")
+fun setInfoLottieAsset(view: StateLayout, assetName: String) {
+ view.infoLottie(assetName)
+}
+
+@BindingAdapter("sl_infoLottieRawRes")
+fun setInfoLottieRawRes(view: StateLayout, rawRes: Int) {
+ view.infoLottie(rawRes)
+}
diff --git a/sample/build.gradle b/sample/build.gradle
index 358b60e..745b109 100644
--- a/sample/build.gradle
+++ b/sample/build.gradle
@@ -1,13 +1,13 @@
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
-apply plugin: 'kotlin-android-extensions'
+apply plugin: 'kotlin-kapt'
android {
- compileSdkVersion 28
+ compileSdkVersion 31
defaultConfig {
applicationId "com.erkutaras.statelayout.sample"
- minSdkVersion 14
- targetSdkVersion 28
+ minSdkVersion 16
+ targetSdkVersion 31
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -19,15 +19,22 @@ android {
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ viewBinding {
+ enabled true
+ }
}
dependencies {
implementation project(':library')
- implementation fileTree(include: ['*.jar'], dir: 'libs')
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
- implementation 'androidx.appcompat:appcompat:1.0.2'
- implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
- implementation 'com.google.android.material:material:1.1.0-alpha06'
- implementation 'androidx.vectordrawable:vectordrawable:1.1.0-rc01'
+ implementation project(':lottie-ext')
+ implementation 'androidx.core:core-ktx:1.7.0'
+ implementation 'androidx.appcompat:appcompat:1.4.1'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
+ implementation 'com.google.android.material:material:1.6.0-alpha02'
+ implementation 'androidx.vectordrawable:vectordrawable:1.2.0-alpha02'
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
}
diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml
index 4f64810..77431fa 100644
--- a/sample/src/main/AndroidManifest.xml
+++ b/sample/src/main/AndroidManifest.xml
@@ -1,9 +1,10 @@
-
+
-
+
-
+
+
+
-
+
-
+
-
-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/assets/like_heart.json b/sample/src/main/assets/like_heart.json
new file mode 100644
index 0000000..c2ce222
--- /dev/null
+++ b/sample/src/main/assets/like_heart.json
@@ -0,0 +1 @@
+{"v":"4.6.6","fr":25,"ip":0,"op":50,"w":18,"h":18,"nm":"2.0 A-首页-inline播放","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":4,"nm":"形状图层 1","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[9,9,0]},"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[3.0405405405405403,3.0405405405405403,100]}},"ao":0,"shapes":[{"d":1,"ty":"el","s":{"a":1,"k":[{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0"],"t":2,"s":[0,0],"e":[29,29]},{"i":{"x":[0.667,0.667],"y":[1,1]},"o":{"x":[0.333,0.333],"y":[0,0]},"n":["0p667_1_0p333_0","0p667_1_0p333_0"],"t":7,"s":[29,29],"e":[0,0]},{"t":16}]},"p":{"a":1,"k":[{"i":{"x":0.52,"y":1},"o":{"x":0.6,"y":0},"n":"0p52_1_0p6_0","t":1,"s":[0,0],"e":[0,189],"to":[0,31.5],"ti":[0,-40]},{"i":{"x":0.38,"y":1},"o":{"x":0.333,"y":0},"n":"0p38_1_0p333_0","t":6,"s":[0,189],"e":[0,240],"to":[0,40],"ti":[0,-8.5]},{"t":15}]},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"fl","c":{"a":0,"k":[0.2901960784313726,0.5647058823529412,0.8862745098039215,1]},"o":{"a":0,"k":100},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"rp","c":{"a":0,"k":8,"ix":1},"o":{"a":0,"k":0,"ix":2},"m":1,"ix":3,"tr":{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":45,"ix":4},"so":{"a":0,"k":100,"ix":5},"eo":{"a":0,"k":100,"ix":6},"nm":"变换"},"nm":"中继器 1","mn":"ADBE Vector Filter - Repeater"}],"ip":0,"op":250,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":2,"ty":4,"nm":"Explosion Vol.1 08 / 1","cl":"1","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0},"p":{"a":0,"k":[9,9,0]},"a":{"a":0,"k":[-120.395,32.605,0]},"s":{"a":1,"k":[{"i":{"x":[0,0,0.667],"y":[1.002,1.002,0.667]},"o":{"x":[1,1,0.333],"y":[0,0,0.333]},"n":["0_1p002_1_0","0_1p002_1_0","0p667_0p667_0p333_0p333"],"t":2,"s":[0,0,100],"e":[2.9189189189189184,2.9189189189189184,100]},{"t":14}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"d":1,"ty":"el","s":{"a":0,"k":[367.211,367.211]},"p":{"a":0,"k":[0,0]},"nm":"椭圆路径 1","mn":"ADBE Vector Shape - Ellipse"},{"ty":"st","c":{"a":0,"k":[0.2901960784313726,0.5647058823529412,0.8862745098039215,1]},"o":{"a":0,"k":100},"w":{"a":1,"k":[{"i":{"x":[0.297],"y":[1]},"o":{"x":[0.588],"y":[0]},"n":["0p297_1_0p588_0"],"t":2,"s":[240],"e":[0]},{"t":14}]},"lc":1,"lj":1,"ml":4,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"tr","p":{"a":0,"k":[-120.395,32.605],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"Ellipse 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":30,"st":0,"bm":0,"sr":1},{"ddd":0,"ind":3,"ty":4,"nm":"“喜欢”轮廓","ks":{"o":{"a":0,"k":100},"r":{"a":0,"k":0,"x":"var $bm_rt;\n$bm_rt = transform.rotation;"},"p":{"a":0,"k":[9,9,0],"x":"var $bm_rt;\n$bm_rt = transform.position;"},"a":{"a":0,"k":[25,22.5,0]},"s":{"a":1,"k":[{"i":{"x":[0.48,0.48,0.667],"y":[1,1,0.667]},"o":{"x":[0.333,0.333,0.167],"y":[0.115,0.115,0.167]},"n":["0p48_1_0p333_0p115","0p48_1_0p333_0p115","0p667_0p667_0p167_0p167"],"t":0,"s":[12.162162162162161,12.162162162162161,100],"e":[7.2972972972972965,7.2972972972972965,100]},{"i":{"x":[0.516,0.516,0.667],"y":[1,1,0.667]},"o":{"x":[0.264,0.264,0.333],"y":[0,0,0.333]},"n":["0p516_1_0p264_0","0p516_1_0p264_0","0p667_0p667_0p333_0p333"],"t":2,"s":[7.2972972972972965,7.2972972972972965,100],"e":[15.81081081081081,15.81081081081081,100]},{"i":{"x":[0.605,0.605,0.667],"y":[1.005,1.005,0.667]},"o":{"x":[0.373,0.373,0.333],"y":[0,0,0.333]},"n":["0p605_1p005_0p373_0","0p605_1p005_0p373_0","0p667_0p667_0p333_0p333"],"t":7,"s":[15.81081081081081,15.81081081081081,100],"e":[12.162162162162161,12.162162162162161,100]},{"i":{"x":[0.663,0.663,0.833],"y":[0.978,0.978,0.833]},"o":{"x":[0.32,0.32,0.167],"y":[0,0,0.167]},"n":["0p663_0p978_0p32_0","0p663_0p978_0p32_0","0p833_0p833_0p167_0p167"],"t":11,"s":[12.162162162162161,12.162162162162161,100],"e":[12.77027027027027,12.77027027027027,100]},{"i":{"x":[0.64,0.64,0.833],"y":[0.973,0.973,0.833]},"o":{"x":[0.29,0.29,0.167],"y":[0.002,0.002,0.167]},"n":["0p64_0p973_0p29_0p002","0p64_0p973_0p29_0p002","0p833_0p833_0p167_0p167"],"t":14,"s":[12.77027027027027,12.77027027027027,100],"e":[12.162162162162161,12.162162162162161,100]},{"t":19}]}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[7.401,0],[2.068,-3.674],[4.874,0],[0,-6.245],[-0.912,-0.537],[-0.234,0],[-0.209,0.124],[0,14.79]],"o":[[-4.875,0],[-2.067,-3.674],[-7.402,0],[0,14.79],[0.209,0.124],[0.234,0],[0.912,-0.537],[0,-6.245]],"v":[[11.176,-20.5],[0,-14.302],[-11.175,-20.5],[-23,-7.795],[-0.676,20.315],[0,20.5],[0.676,20.315],[23,-7.795]],"c":true}},"nm":"路径 1","mn":"ADBE Vector Shape - Group"},{"ty":"fl","c":{"a":0,"k":[0.2901960784313726,0.5647058823529412,0.8862745098039215,1]},"o":{"a":0,"k":100},"r":1,"nm":"填充 1","mn":"ADBE Vector Graphic - Fill"},{"ty":"st","c":{"a":0,"k":[0.2901960784313726,0.5647058823529412,0.8862745098039215,1]},"o":{"a":0,"k":100},"w":{"a":0,"k":3.6},"lc":2,"lj":2,"nm":"描边 1","mn":"ADBE Vector Graphic - Stroke"},{"ty":"tr","p":{"a":0,"k":[25,22.5],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"变换"}],"nm":"组 1","np":3,"cix":2,"ix":1,"mn":"ADBE Vector Group"}],"ip":0,"op":250,"st":0,"bm":0,"sr":1}]}
\ No newline at end of file
diff --git a/sample/src/main/java/com/erkutaras/statelayout/sample/AnimationLoadingSampleActivity.kt b/sample/src/main/java/com/erkutaras/statelayout/sample/AnimationLoadingSampleActivity.kt
index d5ecbc2..32ded2d 100644
--- a/sample/src/main/java/com/erkutaras/statelayout/sample/AnimationLoadingSampleActivity.kt
+++ b/sample/src/main/java/com/erkutaras/statelayout/sample/AnimationLoadingSampleActivity.kt
@@ -8,7 +8,7 @@ import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.Toast
import com.erkutaras.statelayout.StateLayout
-import kotlinx.android.synthetic.main.activity_state_layout_sample.*
+import com.erkutaras.statelayout.sample.databinding.ActivityAnimationLoadingSampleBinding
/**
* Created by erkutaras on 2.02.2019.
@@ -17,23 +17,26 @@ private const val WEB_URL = "https://github.com/erkutaras"
class AnimationLoadingSampleActivity : SampleBaseActivity(), StateLayout.OnStateLayoutListener {
+ private lateinit var binding: ActivityAnimationLoadingSampleBinding
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_animation_loading_sample)
+ binding = ActivityAnimationLoadingSampleBinding.inflate(layoutInflater)
+ setContentView(binding.root)
- webView.webViewClient = SampleWebViewClient(stateLayout, this)
- webView.loadUrl(WEB_URL)
+ binding.webView.webViewClient = SampleWebViewClient(binding.stateLayout, this)
+ binding.webView.loadUrl(WEB_URL)
}
override fun getMenuResId(): Int = R.menu.menu_animation_loading
override fun onStateLayoutInfoButtonClick() {
- webView.loadUrl(WEB_URL)
+ binding.webView.loadUrl(WEB_URL)
Toast.makeText(this, "Refreshing Page...", Toast.LENGTH_SHORT).show()
}
override fun onBackPressed() {
- if (webView.canGoBack()) webView.goBack()
+ if (binding.webView.canGoBack()) binding.webView.goBack()
else super.onBackPressed()
}
@@ -66,6 +69,5 @@ class AnimationLoadingSampleActivity : SampleBaseActivity(), StateLayout.OnState
onStateLayoutListener.onStateLayoutInfoButtonClick()
}
}
-
}
-}
\ No newline at end of file
+}
diff --git a/sample/src/main/java/com/erkutaras/statelayout/sample/CustomSampleActivity.kt b/sample/src/main/java/com/erkutaras/statelayout/sample/CustomSampleActivity.kt
index 17f7bbf..f028761 100644
--- a/sample/src/main/java/com/erkutaras/statelayout/sample/CustomSampleActivity.kt
+++ b/sample/src/main/java/com/erkutaras/statelayout/sample/CustomSampleActivity.kt
@@ -8,9 +8,9 @@ import android.webkit.*
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.erkutaras.statelayout.StateLayout
-import kotlinx.android.synthetic.main.activity_custom_sample.*
-import kotlinx.android.synthetic.main.layout_custom_info.*
-import kotlinx.android.synthetic.main.layout_custom_loading.*
+import com.erkutaras.statelayout.sample.databinding.ActivityCustomSampleBinding
+import com.erkutaras.statelayout.sample.databinding.LayoutCustomInfoBinding
+import com.erkutaras.statelayout.sample.databinding.LayoutCustomLoadingBinding
/**
* Created by erkutaras on 21.12.2018.
@@ -19,19 +19,29 @@ private const val WEB_URL = "https://medium.com/@erkutaras"
class CustomSampleActivity : SampleBaseActivity() {
+ private lateinit var binding: ActivityCustomSampleBinding
+
+ private lateinit var layoutCustomInfoBinding: LayoutCustomInfoBinding
+
+ private lateinit var layoutCustomLoadingBinding: LayoutCustomLoadingBinding
+
private var hasError: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_custom_sample)
+ binding = ActivityCustomSampleBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ layoutCustomInfoBinding = LayoutCustomInfoBinding.inflate(layoutInflater)
+ layoutCustomLoadingBinding = LayoutCustomLoadingBinding.inflate(layoutInflater)
- webView.webViewClient = object : WebViewClient() {
+ binding.webView.webViewClient = object : WebViewClient() {
override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) {
super.onPageStarted(view, url, favicon)
hasError = false
- if (url.equals(WEB_URL)) stateLayout.loading()
- else stateLayout.loadingWithContent()
+ if (url.equals(WEB_URL)) binding.stateLayout.loading()
+ else binding.stateLayout.loadingWithContent()
}
override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) {
@@ -40,13 +50,13 @@ class CustomSampleActivity : SampleBaseActivity() {
showInfoState()
}
}
- webView.webChromeClient = object : WebChromeClient() {
+ binding.webView.webChromeClient = object : WebChromeClient() {
override fun onProgressChanged(view: WebView?, newProgress: Int) {
super.onProgressChanged(view, newProgress)
- contentLoadingProgressBar.progress = newProgress
- textView_progress.text = "$newProgress%"
+ layoutCustomLoadingBinding.contentLoadingProgressBar.progress = newProgress
+ layoutCustomLoadingBinding.textViewProgress.text = "$newProgress%"
- if (!hasError && newProgress == 100) stateLayout.content()
+ if (!hasError && newProgress == 100) binding.stateLayout.content()
if (hasError && newProgress == 100) showInfoState()
}
}
@@ -56,17 +66,17 @@ class CustomSampleActivity : SampleBaseActivity() {
override fun getMenuResId(): Int = R.menu.menu_custom
private fun showInfoState() {
- stateLayout.info()
- button_refresh.setOnClickListener { loadUrl() }
- button_close.setOnClickListener { finish() }
+ binding.stateLayout.info()
+ layoutCustomInfoBinding.buttonRefresh.setOnClickListener { loadUrl() }
+ layoutCustomInfoBinding.buttonClose.setOnClickListener { finish() }
}
private fun loadUrl() {
- webView.loadUrl(WEB_URL)
+ binding.webView.loadUrl(WEB_URL)
}
override fun onBackPressed() {
- if (webView.canGoBack()) webView.goBack()
+ if (binding.webView.canGoBack()) binding.webView.goBack()
else super.onBackPressed()
}
-}
\ No newline at end of file
+}
diff --git a/sample/src/main/java/com/erkutaras/statelayout/sample/InfoLottieSampleActivity.kt b/sample/src/main/java/com/erkutaras/statelayout/sample/InfoLottieSampleActivity.kt
new file mode 100644
index 0000000..cfe8354
--- /dev/null
+++ b/sample/src/main/java/com/erkutaras/statelayout/sample/InfoLottieSampleActivity.kt
@@ -0,0 +1,33 @@
+package com.erkutaras.statelayout.sample
+
+import android.os.Bundle
+import android.widget.Toast
+import com.erkutaras.statelayout.StateLayout
+import com.erkutaras.statelayout.lottieext.infoLottie
+import com.erkutaras.statelayout.sample.databinding.ActivityInfoLottieSampleBinding
+
+class InfoLottieSampleActivity : SampleBaseActivity(), StateLayout.OnStateLayoutListener {
+
+ private lateinit var binding: ActivityInfoLottieSampleBinding
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ binding = ActivityInfoLottieSampleBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ binding.stateLayout
+ .infoTitle("Ooops.... :(")
+ .infoMessage("Unexpected error occurred. Please refresh the page!")
+ .infoButtonText("Refresh")
+ .infoLottie("like_heart.json")
+ .infoButtonListener {
+ onStateLayoutInfoButtonClick()
+ }
+ }
+
+ override fun getMenuResId(): Int = R.menu.menu_sample
+
+ override fun onStateLayoutInfoButtonClick() {
+ Toast.makeText(this, "Refreshing Page...", Toast.LENGTH_SHORT).show()
+ }
+}
diff --git a/sample/src/main/java/com/erkutaras/statelayout/sample/SampleBaseActivity.kt b/sample/src/main/java/com/erkutaras/statelayout/sample/SampleBaseActivity.kt
index 84e9c31..90e1a80 100644
--- a/sample/src/main/java/com/erkutaras/statelayout/sample/SampleBaseActivity.kt
+++ b/sample/src/main/java/com/erkutaras/statelayout/sample/SampleBaseActivity.kt
@@ -33,7 +33,11 @@ abstract class SampleBaseActivity : AppCompatActivity() {
startActivity(Intent(this, AnimationLoadingSampleActivity::class.java))
return true
}
+ R.id.menu_info_lottie -> {
+ startActivity(Intent(this, InfoLottieSampleActivity::class.java))
+ return true
+ }
}
return super.onOptionsItemSelected(item)
}
-}
\ No newline at end of file
+}
diff --git a/sample/src/main/java/com/erkutaras/statelayout/sample/StateLayoutSampleActivity.kt b/sample/src/main/java/com/erkutaras/statelayout/sample/StateLayoutSampleActivity.kt
index e883022..1b9aacb 100644
--- a/sample/src/main/java/com/erkutaras/statelayout/sample/StateLayoutSampleActivity.kt
+++ b/sample/src/main/java/com/erkutaras/statelayout/sample/StateLayoutSampleActivity.kt
@@ -8,35 +8,39 @@ import android.webkit.WebView
import android.webkit.WebViewClient
import android.widget.Toast
import com.erkutaras.statelayout.StateLayout
-import kotlinx.android.synthetic.main.activity_state_layout_sample.*
+import com.erkutaras.statelayout.sample.databinding.ActivityStateLayoutSampleBinding
private const val WEB_URL = "http://www.erkutaras.com/"
class StateLayoutSampleActivity : SampleBaseActivity(), StateLayout.OnStateLayoutListener {
+ private lateinit var binding: ActivityStateLayoutSampleBinding
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_state_layout_sample)
+ binding = ActivityStateLayoutSampleBinding.inflate(layoutInflater)
+ setContentView(binding.root)
- webView.webViewClient = SampleWebViewClient(stateLayout, this)
- webView.loadUrl(WEB_URL)
+ binding.webView.webViewClient = SampleWebViewClient(binding.stateLayout, this)
+ binding.webView.loadUrl(WEB_URL)
}
override fun getMenuResId(): Int = R.menu.menu_sample
override fun onStateLayoutInfoButtonClick() {
- webView.loadUrl(WEB_URL)
+ binding.webView.loadUrl(WEB_URL)
Toast.makeText(this, "Refreshing Page...", Toast.LENGTH_SHORT).show()
}
override fun onBackPressed() {
- if (webView.canGoBack()) webView.goBack()
+ if (binding.webView.canGoBack()) binding.webView.goBack()
else super.onBackPressed()
}
- private class SampleWebViewClient(val stateLayout: StateLayout,
- val onStateLayoutListener: StateLayout.OnStateLayoutListener)
- : WebViewClient() {
+ private class SampleWebViewClient(
+ val stateLayout: StateLayout,
+ val onStateLayoutListener: StateLayout.OnStateLayoutListener,
+ ) : WebViewClient() {
var hasError: Boolean = false
@@ -63,6 +67,5 @@ class StateLayoutSampleActivity : SampleBaseActivity(), StateLayout.OnStateLayou
onStateLayoutListener.onStateLayoutInfoButtonClick()
}
}
-
}
}
diff --git a/sample/src/main/res/layout/activity_info_lottie_sample.xml b/sample/src/main/res/layout/activity_info_lottie_sample.xml
new file mode 100644
index 0000000..eba1108
--- /dev/null
+++ b/sample/src/main/res/layout/activity_info_lottie_sample.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/layout/layout_custom_info.xml b/sample/src/main/res/layout/layout_custom_info.xml
index 5926e58..71c085c 100644
--- a/sample/src/main/res/layout/layout_custom_info.xml
+++ b/sample/src/main/res/layout/layout_custom_info.xml
@@ -2,8 +2,8 @@
-
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/sample/src/main/res/menu/menu_sample.xml b/sample/src/main/res/menu/menu_sample.xml
index 2889fee..b7abfea 100644
--- a/sample/src/main/res/menu/menu_sample.xml
+++ b/sample/src/main/res/menu/menu_sample.xml
@@ -9,4 +9,9 @@
android:id="@+id/menu_loading_animation"
android:title="@string/loading_animation"
app:showAsAction="never"/>
+
+
\ No newline at end of file
diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml
index 6d25a08..8ee1784 100644
--- a/sample/src/main/res/values/strings.xml
+++ b/sample/src/main/res/values/strings.xml
@@ -4,4 +4,5 @@
Simple Usage
Custom Usage
Loading Animation
+ Info Lottie
diff --git a/settings.gradle b/settings.gradle
index 52baf7e..c8378f5 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1 +1 @@
-include ':sample', ':library'
+include ':sample', ':library', ':lottie-ext'