From 52c7da906aefa0f1302549af9840f8174ea7597b Mon Sep 17 00:00:00 2001 From: Thang Nguyen Date: Thu, 22 Aug 2024 17:12:20 +0700 Subject: [PATCH 1/6] Make the gradle can sync with new idea version --- app/build.gradle | 1 - build.gradle | 11 ++- gradle/wrapper/gradle-wrapper.properties | 3 +- loopingviewpager/build.gradle | 3 - loopingviewpager/publish.gradle | 92 ------------------------ 5 files changed, 5 insertions(+), 105 deletions(-) delete mode 100644 loopingviewpager/publish.gradle diff --git a/app/build.gradle b/app/build.gradle index 4dbefa5..be08b27 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,6 +1,5 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' android { compileSdkVersion 30 diff --git a/build.gradle b/build.gradle index 3b9b02f..c717466 100644 --- a/build.gradle +++ b/build.gradle @@ -1,17 +1,14 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.4.30' + ext.kotlin_version = '1.9.25' repositories { google() - jcenter() + mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.2' + classpath 'com.android.tools.build:gradle:4.2.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - // Bintray and Maven Gradle Classpaths - classpath "com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.4" - 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 @@ -21,7 +18,7 @@ buildscript { allprojects { repositories { google() - jcenter() + mavenCentral() } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 609bb62..ffed3a2 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Tue Mar 02 17:49:39 ICT 2021 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-all.zip diff --git a/loopingviewpager/build.gradle b/loopingviewpager/build.gradle index 063a6ad..3db3acb 100644 --- a/loopingviewpager/build.gradle +++ b/loopingviewpager/build.gradle @@ -1,6 +1,5 @@ apply plugin: 'com.android.library' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' apply from: "$project.rootDir/tools/script-git-version.gradle" @@ -65,5 +64,3 @@ dependencies { tasks.withType(Javadoc).all { enabled = false } - -apply from: 'publish.gradle' diff --git a/loopingviewpager/publish.gradle b/loopingviewpager/publish.gradle deleted file mode 100644 index c25a350..0000000 --- a/loopingviewpager/publish.gradle +++ /dev/null @@ -1,92 +0,0 @@ -apply plugin: 'com.jfrog.bintray' -apply plugin: 'com.github.dcendents.android-maven' - -version = libraryVersion -group = publishedGroupId // Maven Group ID for the artifact - -install { - repositories.mavenInstaller { - // This generates POM.xml with proper parameters - pom { - project { - packaging 'aar' - groupId publishedGroupId - artifactId artifact - - // Add your description here - name libraryName - description libraryDescription - url siteUrl - - // Set your license - licenses { - license { - name licenseName - url licenseUrl - } - } - developers { - developer { - id developerId - name developerName - email developerEmail - } - } - scm { - connection gitUrl - developerConnection gitUrl - url siteUrl - - } - } - } - } -} - -task sourcesJar(type: Jar) { - from android.sourceSets.main.java.srcDirs - classifier = 'sources' -} - -task javadoc(type: Javadoc) { - source = android.sourceSets.main.java.srcDirs - classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir -} -artifacts { - archives javadocJar - archives sourcesJar -} - -// Bintray -Properties properties = new Properties() -properties.load(project.rootProject.file('local.properties').newDataInputStream()) - -bintray { - user = properties.getProperty("bintray.user") - key = properties.getProperty("bintray.apikey") - - configurations = ['archives'] - pkg { - repo = bintrayRepo - name = bintrayName - desc = libraryDescription - websiteUrl = siteUrl - vcsUrl = gitUrl - licenses = allLicenses - publish = true - publicDownloadNumbers = true - version { - desc = libraryDescription - // Uncomment 4 lines below to enable gpg auto signing - //gpg { - // sign = true //Determines whether to GPG sign the files. The default is false - // passphrase = properties.getProperty("bintray.gpg.password") - //} - } - } -} From 2f68edd0a8bd442f72d873c6d7087c619de73c57 Mon Sep 17 00:00:00 2001 From: Thang Nguyen Date: Thu, 22 Aug 2024 17:13:07 +0700 Subject: [PATCH 2/6] Update the gitignore --- .gitignore | 1 + .idea/codeStyles/Project.xml | 122 --------------------------- .idea/codeStyles/codeStyleConfig.xml | 5 -- .idea/compiler.xml | 6 -- .idea/jarRepositories.xml | 30 ------- .idea/markdown-navigator-enh.xml | 29 ------- .idea/markdown-navigator.xml | 55 ------------ .idea/misc.xml | 4 - 8 files changed, 1 insertion(+), 251 deletions(-) delete mode 100644 .idea/codeStyles/Project.xml delete mode 100644 .idea/codeStyles/codeStyleConfig.xml delete mode 100644 .idea/compiler.xml delete mode 100644 .idea/jarRepositories.xml delete mode 100644 .idea/markdown-navigator-enh.xml delete mode 100644 .idea/markdown-navigator.xml delete mode 100644 .idea/misc.xml diff --git a/.gitignore b/.gitignore index d99ff88..4e329ef 100644 --- a/.gitignore +++ b/.gitignore @@ -83,3 +83,4 @@ lint/generated/ lint/outputs/ lint/tmp/ # lint/reports/ +.idea diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml deleted file mode 100644 index 88ea3aa..0000000 --- a/.idea/codeStyles/Project.xml +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - -
- - - - xmlns:android - - ^$ - - - -
-
- - - - xmlns:.* - - ^$ - - - BY_NAME - -
-
- - - - .*:id - - http://schemas.android.com/apk/res/android - - - -
-
- - - - .*:name - - http://schemas.android.com/apk/res/android - - - -
-
- - - - name - - ^$ - - - -
-
- - - - style - - ^$ - - - -
-
- - - - .* - - ^$ - - - BY_NAME - -
-
- - - - .* - - http://schemas.android.com/apk/res/android - - - ANDROID_ATTRIBUTE_ORDER - -
-
- - - - .* - - .* - - - BY_NAME - -
-
-
-
- - -
-
\ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml deleted file mode 100644 index 79ee123..0000000 --- a/.idea/codeStyles/codeStyleConfig.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml deleted file mode 100644 index 61a9130..0000000 --- a/.idea/compiler.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml deleted file mode 100644 index 0380d8d..0000000 --- a/.idea/jarRepositories.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/markdown-navigator-enh.xml b/.idea/markdown-navigator-enh.xml deleted file mode 100644 index 12fb99d..0000000 --- a/.idea/markdown-navigator-enh.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/markdown-navigator.xml b/.idea/markdown-navigator.xml deleted file mode 100644 index 4463382..0000000 --- a/.idea/markdown-navigator.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 58918f5..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file From 39e7cc82448a10f8fa857b8195465499f900a90c Mon Sep 17 00:00:00 2001 From: Thang Nguyen Date: Fri, 23 Aug 2024 17:35:06 +0700 Subject: [PATCH 3/6] Update the libraries and fix the outdated --- app/build.gradle | 37 ++++++++----- app/src/main/AndroidManifest.xml | 6 +-- .../FragmentPagerExampleActivity.kt | 22 +++++++- .../example/fragmentPager/PageFragment.kt | 7 +-- .../FragmentStatePagerExampleActivity.kt | 22 +++++++- .../IndicatorExampleActivity.kt | 24 +++++++-- .../ShowHideFragmentActivity.kt | 6 ++- .../SimpleExampleFragment.kt | 40 ++++++++++---- .../simpleExample/ExamplePagerAdapter.kt | 9 ++-- .../simpleExample/SimpleExampleActivity.kt | 22 +++++++- build.gradle | 3 +- gradle.properties | 2 + gradle/wrapper/gradle-wrapper.properties | 2 +- loopingviewpager/build.gradle | 52 ++++++------------- loopingviewpager/src/main/AndroidManifest.xml | 3 +- .../loopingviewpager/scroller/AutoScroller.kt | 4 +- 16 files changed, 178 insertions(+), 83 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index be08b27..e4e1c34 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,12 +2,12 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' android { - compileSdkVersion 30 + compileSdk 34 defaultConfig { applicationId "com.kenilt.loopingviewpager.example" - minSdkVersion 16 - targetSdkVersion 30 + minSdkVersion 21 + targetSdkVersion 34 versionCode 1 versionName "1.0" @@ -20,26 +20,35 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + namespace 'com.kenilt.loopingviewpager.example' + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + + kotlinOptions { + jvmTarget = '17' + } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation project(':loopingviewpager') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.3.0-beta01' - implementation 'androidx.core:core-ktx:1.3.2' - implementation 'androidx.constraintlayout:constraintlayout:2.0.4' - implementation 'me.relex:circleindicator:2.1.4' - implementation 'com.kenilt.circleindicator:circleindicator:1.0.1' - implementation "com.psoffritti.librarysampleapptemplate:core:1.0.2" - implementation 'com.tbuonomo.andrui:viewpagerdotsindicator:4.1.2' - implementation 'com.romandanylyk:pageindicatorview:1.0.3' + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'androidx.core:core-ktx:1.13.1' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'me.relex:circleindicator:2.1.6' + implementation 'io.github.kenilt:circleindicator:1.0.1' + implementation 'com.github.PierfrancescoSoffritti:library-sample-app-template:v1.0.3' + implementation("com.tbuonomo:dotsindicator:5.0") + implementation 'com.github.romandanylyk:PageIndicatorView:v.1.0.3' implementation 'com.ogaclejapan.smarttablayout:library:2.0.0@aar' implementation 'androidx.legacy:legacy-support-v4:1.0.0' - testImplementation 'junit:junit:4.13' - androidTestImplementation 'androidx.test.ext:junit:1.1.2' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.2.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index caac727..4656908 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + - + diff --git a/app/src/main/java/com/kenilt/loopingviewpager/example/fragmentPager/FragmentPagerExampleActivity.kt b/app/src/main/java/com/kenilt/loopingviewpager/example/fragmentPager/FragmentPagerExampleActivity.kt index 620097a..866564b 100644 --- a/app/src/main/java/com/kenilt/loopingviewpager/example/fragmentPager/FragmentPagerExampleActivity.kt +++ b/app/src/main/java/com/kenilt/loopingviewpager/example/fragmentPager/FragmentPagerExampleActivity.kt @@ -1,20 +1,40 @@ package com.kenilt.loopingviewpager.example.fragmentPager import android.os.Bundle +import android.widget.Button import android.widget.SeekBar +import android.widget.Switch +import android.widget.TextView +import com.kenilt.circleindicator.CirclePageIndicator import com.kenilt.loopingviewpager.example.BaseExampleActivity import com.kenilt.loopingviewpager.example.R import com.kenilt.loopingviewpager.example.model.DataGenerator import com.kenilt.loopingviewpager.example.simpleExample.ExamplePagerAdapter import com.kenilt.loopingviewpager.scroller.AutoScroller -import kotlinx.android.synthetic.main.activity_fragment_pager_example.* +import com.kenilt.loopingviewpager.widget.LoopingViewPager class FragmentPagerExampleActivity : BaseExampleActivity() { + private lateinit var vpPager: LoopingViewPager + private lateinit var indicator: CirclePageIndicator + private lateinit var swAutoScroll: Switch + private lateinit var btnPrevious: Button + private lateinit var btnNext: Button + private lateinit var seekBar: SeekBar + private lateinit var txtItemCount: TextView + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_fragment_pager_example) + vpPager = findViewById(R.id.vpPager) + indicator = findViewById(R.id.indicator) + swAutoScroll = findViewById(R.id.swAutoScroll) + btnPrevious = findViewById(R.id.btnPrevious) + btnNext = findViewById(R.id.btnNext) + seekBar = findViewById(R.id.seekBar) + txtItemCount = findViewById(R.id.txtItemCount) + // View pager adapter and indicator vpPager.setAdapter( ExampleFragmentPagerAdapter( diff --git a/app/src/main/java/com/kenilt/loopingviewpager/example/fragmentPager/PageFragment.kt b/app/src/main/java/com/kenilt/loopingviewpager/example/fragmentPager/PageFragment.kt index 76c0812..246fe23 100644 --- a/app/src/main/java/com/kenilt/loopingviewpager/example/fragmentPager/PageFragment.kt +++ b/app/src/main/java/com/kenilt/loopingviewpager/example/fragmentPager/PageFragment.kt @@ -5,11 +5,11 @@ import androidx.fragment.app.Fragment import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.TextView import androidx.core.content.ContextCompat import com.kenilt.loopingviewpager.example.R import com.kenilt.loopingviewpager.example.model.PageModel -import kotlinx.android.synthetic.main.fragment_page.view.* // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER private const val ARG_PAGE_MODEL = "arg_page" @@ -36,8 +36,9 @@ class PageFragment : Fragment() { // Inflate the layout for this fragment val layout = inflater.inflate(R.layout.fragment_page, container, false) pageModel?.let { pageModel -> - layout.item_txtText.text = pageModel.text - layout.item_txtText.setBackgroundColor(ContextCompat.getColor(requireContext(), pageModel.color)) + val txtText = layout.findViewById(R.id.item_txtText) + txtText.text = pageModel.text + txtText.setBackgroundColor(ContextCompat.getColor(requireContext(), pageModel.color)) } return layout } diff --git a/app/src/main/java/com/kenilt/loopingviewpager/example/fragmentStatePager/FragmentStatePagerExampleActivity.kt b/app/src/main/java/com/kenilt/loopingviewpager/example/fragmentStatePager/FragmentStatePagerExampleActivity.kt index 8b2ff7f..aeaac79 100644 --- a/app/src/main/java/com/kenilt/loopingviewpager/example/fragmentStatePager/FragmentStatePagerExampleActivity.kt +++ b/app/src/main/java/com/kenilt/loopingviewpager/example/fragmentStatePager/FragmentStatePagerExampleActivity.kt @@ -1,20 +1,40 @@ package com.kenilt.loopingviewpager.example.fragmentStatePager import android.os.Bundle +import android.widget.Button import android.widget.SeekBar +import android.widget.Switch +import android.widget.TextView +import com.kenilt.circleindicator.CirclePageIndicator import com.kenilt.loopingviewpager.example.BaseExampleActivity import com.kenilt.loopingviewpager.example.R import com.kenilt.loopingviewpager.example.model.DataGenerator import com.kenilt.loopingviewpager.example.simpleExample.ExamplePagerAdapter import com.kenilt.loopingviewpager.scroller.AutoScroller -import kotlinx.android.synthetic.main.activity_fragment_state_pager_example.* +import com.kenilt.loopingviewpager.widget.LoopingViewPager class FragmentStatePagerExampleActivity : BaseExampleActivity() { + private lateinit var vpPager: LoopingViewPager + private lateinit var indicator: CirclePageIndicator + private lateinit var swAutoScroll: Switch + private lateinit var btnPrevious: Button + private lateinit var btnNext: Button + private lateinit var seekBar: SeekBar + private lateinit var txtItemCount: TextView + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_fragment_state_pager_example) + vpPager = findViewById(R.id.vpPager) + indicator = findViewById(R.id.indicator) + swAutoScroll = findViewById(R.id.swAutoScroll) + btnPrevious = findViewById(R.id.btnPrevious) + btnNext = findViewById(R.id.btnNext) + seekBar = findViewById(R.id.seekBar) + txtItemCount = findViewById(R.id.txtItemCount) + // View pager adapter and indicator vpPager.setAdapter( ExampleFragmentStatePagerAdapter( diff --git a/app/src/main/java/com/kenilt/loopingviewpager/example/indicatorExample/IndicatorExampleActivity.kt b/app/src/main/java/com/kenilt/loopingviewpager/example/indicatorExample/IndicatorExampleActivity.kt index 74924b4..2df6e17 100644 --- a/app/src/main/java/com/kenilt/loopingviewpager/example/indicatorExample/IndicatorExampleActivity.kt +++ b/app/src/main/java/com/kenilt/loopingviewpager/example/indicatorExample/IndicatorExampleActivity.kt @@ -5,21 +5,37 @@ import com.kenilt.loopingviewpager.example.BaseExampleActivity import com.kenilt.loopingviewpager.example.R import com.kenilt.loopingviewpager.example.model.DataGenerator import com.kenilt.loopingviewpager.example.simpleExample.ExamplePagerAdapter -import kotlinx.android.synthetic.main.activity_indicator_example.* +import com.kenilt.loopingviewpager.widget.LoopingViewPager +import com.ogaclejapan.smarttablayout.SmartTabLayout +import com.rd.PageIndicatorView +import com.tbuonomo.viewpagerdotsindicator.DotsIndicator +import me.relex.circleindicator.CircleIndicator class IndicatorExampleActivity : BaseExampleActivity() { + private lateinit var vpPager: LoopingViewPager + private lateinit var viewpagerTab: SmartTabLayout + private lateinit var circleIndicator: CircleIndicator + private lateinit var dotsIndicator: DotsIndicator + private lateinit var pageIndicatorView: PageIndicatorView + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_indicator_example) + vpPager = findViewById(R.id.vpPager) + viewpagerTab = findViewById(R.id.viewpagertab) + circleIndicator = findViewById(R.id.circle_indicator) + dotsIndicator = findViewById(R.id.dots_indicator) + pageIndicatorView = findViewById(R.id.pageIndicatorView) + vpPager.adapter = ExamplePagerAdapter( this, DataGenerator.generateList() ) - viewpagertab.setViewPager(vpPager) - circle_indicator.setViewPager(vpPager) - dots_indicator.setViewPager(vpPager) + viewpagerTab.setViewPager(vpPager) + circleIndicator.setViewPager(vpPager) + dotsIndicator.setViewPager(vpPager) pageIndicatorView.setViewPager(vpPager) } diff --git a/app/src/main/java/com/kenilt/loopingviewpager/example/showHideFragmentExample/ShowHideFragmentActivity.kt b/app/src/main/java/com/kenilt/loopingviewpager/example/showHideFragmentExample/ShowHideFragmentActivity.kt index dc06e6d..1e2670b 100644 --- a/app/src/main/java/com/kenilt/loopingviewpager/example/showHideFragmentExample/ShowHideFragmentActivity.kt +++ b/app/src/main/java/com/kenilt/loopingviewpager/example/showHideFragmentExample/ShowHideFragmentActivity.kt @@ -1,16 +1,20 @@ package com.kenilt.loopingviewpager.example.showHideFragmentExample import android.os.Bundle +import android.widget.Button import com.kenilt.loopingviewpager.example.BaseExampleActivity import com.kenilt.loopingviewpager.example.R -import kotlinx.android.synthetic.main.activity_show_hide_fragment.* class ShowHideFragmentActivity : BaseExampleActivity() { + private lateinit var button: Button + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_show_hide_fragment) + button = findViewById(R.id.button) + val simpleExampleFragment = SimpleExampleFragment.newInstance() supportFragmentManager.beginTransaction() .replace(R.id.flFrame, simpleExampleFragment) diff --git a/app/src/main/java/com/kenilt/loopingviewpager/example/showHideFragmentExample/SimpleExampleFragment.kt b/app/src/main/java/com/kenilt/loopingviewpager/example/showHideFragmentExample/SimpleExampleFragment.kt index a999b1a..7d1930e 100644 --- a/app/src/main/java/com/kenilt/loopingviewpager/example/showHideFragmentExample/SimpleExampleFragment.kt +++ b/app/src/main/java/com/kenilt/loopingviewpager/example/showHideFragmentExample/SimpleExampleFragment.kt @@ -4,14 +4,18 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Button import android.widget.SeekBar +import android.widget.Switch +import android.widget.TextView import androidx.fragment.app.Fragment +import com.kenilt.circleindicator.CirclePageIndicator import com.kenilt.loopingviewpager.example.R import com.kenilt.loopingviewpager.example.model.DataGenerator import com.kenilt.loopingviewpager.example.simpleExample.ExamplePagerAdapter import com.kenilt.loopingviewpager.scroller.AutoScroller import com.kenilt.loopingviewpager.scroller.ScrollerCycle -import kotlinx.android.synthetic.main.activity_simple_example.view.* +import com.kenilt.loopingviewpager.widget.LoopingViewPager /** * A simple [Fragment] subclass. @@ -20,26 +24,42 @@ import kotlinx.android.synthetic.main.activity_simple_example.view.* */ class SimpleExampleFragment : Fragment() { + private lateinit var vpPager: LoopingViewPager + private lateinit var indicator: CirclePageIndicator + private lateinit var swAutoScroll: Switch + private lateinit var btnPrevious: Button + private lateinit var btnNext: Button + private lateinit var seekBar: SeekBar + private lateinit var txtItemCount: TextView + private val scrollerCycle = ScrollerCycle() override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { // Inflate the layout for this fragment val layout = inflater.inflate(R.layout.activity_simple_example, container, false) - layout.vpPager.adapter = ExamplePagerAdapter( + vpPager = layout.findViewById(R.id.vpPager) + indicator = layout.findViewById(R.id.indicator) + swAutoScroll = layout.findViewById(R.id.swAutoScroll) + btnPrevious = layout.findViewById(R.id.btnPrevious) + btnNext = layout.findViewById(R.id.btnNext) + seekBar = layout.findViewById(R.id.seekBar) + txtItemCount = layout.findViewById(R.id.txtItemCount) + + vpPager.adapter = ExamplePagerAdapter( requireContext(), DataGenerator.generateList() ) - layout.indicator.setViewPager(layout.vpPager) + indicator.setViewPager(vpPager) - layout.btnPrevious.setOnClickListener { layout.vpPager.setCurrentItem(layout.vpPager.currentItem - 1, true) } - layout.btnNext.setOnClickListener { layout.vpPager.setCurrentItem(layout.vpPager.currentItem + 1, true) } + btnPrevious.setOnClickListener { vpPager.setCurrentItem(vpPager.currentItem - 1, true) } + btnNext.setOnClickListener { vpPager.setCurrentItem(vpPager.currentItem + 1, true) } - layout.seekBar.setOnSeekBarChangeListener(object: SeekBar.OnSeekBarChangeListener { + seekBar.setOnSeekBarChangeListener(object: SeekBar.OnSeekBarChangeListener { override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { val count = progress + 1 - layout.txtItemCount.text = "Item count: $count" - layout.vpPager.adapter = ExamplePagerAdapter( + txtItemCount.text = "Item count: $count" + vpPager.adapter = ExamplePagerAdapter( requireContext(), DataGenerator.generateList(count) ) @@ -51,8 +71,8 @@ class SimpleExampleFragment : Fragment() { }) // auto scroll - val autoScroller = AutoScroller(layout.vpPager, lifecycle, 2000) - layout.swAutoScroll.setOnCheckedChangeListener { _, isChecked -> + val autoScroller = AutoScroller(vpPager, lifecycle, 2000) + swAutoScroll.setOnCheckedChangeListener { _, isChecked -> autoScroller.isAutoScroll = isChecked } autoScroller.scrollerCycle = scrollerCycle diff --git a/app/src/main/java/com/kenilt/loopingviewpager/example/simpleExample/ExamplePagerAdapter.kt b/app/src/main/java/com/kenilt/loopingviewpager/example/simpleExample/ExamplePagerAdapter.kt index 9bae789..77f41df 100644 --- a/app/src/main/java/com/kenilt/loopingviewpager/example/simpleExample/ExamplePagerAdapter.kt +++ b/app/src/main/java/com/kenilt/loopingviewpager/example/simpleExample/ExamplePagerAdapter.kt @@ -4,12 +4,12 @@ import android.content.Context import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.TextView import android.widget.Toast import androidx.core.content.ContextCompat import androidx.viewpager.widget.PagerAdapter import com.kenilt.loopingviewpager.example.R import com.kenilt.loopingviewpager.example.model.PageModel -import kotlinx.android.synthetic.main.item_page.view.* /** @@ -20,9 +20,10 @@ class ExamplePagerAdapter(private var mContext: Context, private var dataList: L override fun instantiateItem(collection: ViewGroup, position: Int): Any { val inflater = LayoutInflater.from(mContext) val layout = inflater.inflate(R.layout.item_page, collection, false) as ViewGroup - layout.item_txtText.text = dataList[position].text - layout.item_txtText.setBackgroundColor(ContextCompat.getColor(mContext, dataList[position].color)) - layout.item_txtText.setOnClickListener { + val txtText = layout.findViewById(R.id.item_txtText) + txtText.text = dataList[position].text + txtText.setBackgroundColor(ContextCompat.getColor(mContext, dataList[position].color)) + txtText.setOnClickListener { Toast.makeText(mContext, "Item $position clicked", Toast.LENGTH_SHORT).show() } collection.addView(layout) diff --git a/app/src/main/java/com/kenilt/loopingviewpager/example/simpleExample/SimpleExampleActivity.kt b/app/src/main/java/com/kenilt/loopingviewpager/example/simpleExample/SimpleExampleActivity.kt index 27a1398..4553dea 100644 --- a/app/src/main/java/com/kenilt/loopingviewpager/example/simpleExample/SimpleExampleActivity.kt +++ b/app/src/main/java/com/kenilt/loopingviewpager/example/simpleExample/SimpleExampleActivity.kt @@ -1,19 +1,39 @@ package com.kenilt.loopingviewpager.example.simpleExample import android.os.Bundle +import android.widget.Button import android.widget.SeekBar +import android.widget.Switch +import android.widget.TextView +import com.kenilt.circleindicator.CirclePageIndicator import com.kenilt.loopingviewpager.example.BaseExampleActivity import com.kenilt.loopingviewpager.example.R import com.kenilt.loopingviewpager.example.model.DataGenerator import com.kenilt.loopingviewpager.scroller.AutoScroller -import kotlinx.android.synthetic.main.activity_simple_example.* +import com.kenilt.loopingviewpager.widget.LoopingViewPager class SimpleExampleActivity : BaseExampleActivity() { + private lateinit var vpPager: LoopingViewPager + private lateinit var indicator: CirclePageIndicator + private lateinit var swAutoScroll: Switch + private lateinit var btnPrevious: Button + private lateinit var btnNext: Button + private lateinit var seekBar: SeekBar + private lateinit var txtItemCount: TextView + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_simple_example) + vpPager = findViewById(R.id.vpPager) + indicator = findViewById(R.id.indicator) + swAutoScroll = findViewById(R.id.swAutoScroll) + btnPrevious = findViewById(R.id.btnPrevious) + btnNext = findViewById(R.id.btnNext) + seekBar = findViewById(R.id.seekBar) + txtItemCount = findViewById(R.id.txtItemCount) + // View pager adapter and indicator vpPager.adapter = ExamplePagerAdapter( this, diff --git a/build.gradle b/build.gradle index c717466..012ff82 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.2.2' + classpath 'com.android.tools.build:gradle:8.2.2' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong @@ -19,6 +19,7 @@ allprojects { repositories { google() mavenCentral() + maven { url 'https://jitpack.io' } } } diff --git a/gradle.properties b/gradle.properties index 23339e0..4795480 100644 --- a/gradle.properties +++ b/gradle.properties @@ -19,3 +19,5 @@ android.useAndroidX=true android.enableJetifier=true # Kotlin code style for this project: "official" or "obsolete": kotlin.code.style=official +android.nonTransitiveRClass=false +android.nonFinalResIds=false diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ffed3a2..15de902 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/loopingviewpager/build.gradle b/loopingviewpager/build.gradle index 3db3acb..eb362f2 100644 --- a/loopingviewpager/build.gradle +++ b/loopingviewpager/build.gradle @@ -3,39 +3,12 @@ apply plugin: 'kotlin-android' apply from: "$project.rootDir/tools/script-git-version.gradle" -ext { - bintrayRepo = 'LoopingViewPager' // Repo name in bintray dashboard - bintrayName = 'com.kenilt.loopingviewpager' // package name of the bintray repo - - publishedGroupId = 'com.kenilt.loopingviewpager' // this is the ID we want to see in implementation line - libraryName = 'loopingviewpager' // this is the module name of library - artifact = 'loopingviewpager' // this is the artifact we want to see in implementation line - - libraryDescription = 'A ViewPager which support infinite looping effect, smart auto-scroll, compatible with any indicators and easily for usage' // description of library - - siteUrl = 'https://github.com/kenilt/LoopingViewPager' // git repo url - gitUrl = 'https://github.com/kenilt/LoopingViewPager.git' // git repo vcs url - - libraryVersion = appVersionName // library version - - developerId = 'kenilt' // This is your bintray username - developerName = 'Kenilt Nguyen' // Developer's name - developerEmail = 'nhthang.khtn@gmail.com' // Developer's email - - licenseName = 'The MIT License (MIT)' // for example, The Apache Software License, Version 2.0 - licenseUrl = 'https://opensource.org/licenses/MIT' // for example, http://www.apache.org/licenses/LICENSE-2.0.txt - allLicenses = ["MIT"] // array of licenses, for example, ["Apache-2.0"] -} - android { - compileSdkVersion 29 - buildToolsVersion "29.0.2" + compileSdk 34 defaultConfig { - minSdkVersion 16 - targetSdkVersion 29 - versionCode 1 - versionName "1.0" + minSdkVersion 21 + targetSdkVersion 34 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles 'consumer-rules.pro' @@ -47,17 +20,26 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + namespace 'com.kenilt.loopingviewpager' + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + + kotlinOptions { + jvmTarget = '17' + } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.2.0' - implementation 'androidx.core:core-ktx:1.3.2' - testImplementation 'junit:junit:4.13' - androidTestImplementation 'androidx.test.ext:junit:1.1.2' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'androidx.core:core-ktx:1.13.1' + testImplementation 'junit:junit:4.13.2' + androidTestImplementation 'androidx.test.ext:junit:1.2.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' } // Avoid Kotlin docs error diff --git a/loopingviewpager/src/main/AndroidManifest.xml b/loopingviewpager/src/main/AndroidManifest.xml index ffcbaf9..94cbbcf 100644 --- a/loopingviewpager/src/main/AndroidManifest.xml +++ b/loopingviewpager/src/main/AndroidManifest.xml @@ -1,2 +1 @@ - + diff --git a/loopingviewpager/src/main/java/com/kenilt/loopingviewpager/scroller/AutoScroller.kt b/loopingviewpager/src/main/java/com/kenilt/loopingviewpager/scroller/AutoScroller.kt index 9923b2f..f4f2ed8 100644 --- a/loopingviewpager/src/main/java/com/kenilt/loopingviewpager/scroller/AutoScroller.kt +++ b/loopingviewpager/src/main/java/com/kenilt/loopingviewpager/scroller/AutoScroller.kt @@ -71,11 +71,11 @@ class AutoScroller(val viewPager: ViewPager, lifecycle: Lifecycle? = null, scrol } }) viewPager.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener{ - override fun onViewDetachedFromWindow(v: View?) { + override fun onViewDetachedFromWindow(v: View) { removeAutoScrollCallback() } - override fun onViewAttachedToWindow(v: View?) { + override fun onViewAttachedToWindow(v: View) { resumeAutoScrollWhenNeeded() } }) From 9248532976a6c6272610a1e41c15333339c45e7c Mon Sep 17 00:00:00 2001 From: Thang Nguyen Date: Fri, 23 Aug 2024 17:36:33 +0700 Subject: [PATCH 4/6] Remove unused libraries for the looping viewpager --- loopingviewpager/build.gradle | 3 --- 1 file changed, 3 deletions(-) diff --git a/loopingviewpager/build.gradle b/loopingviewpager/build.gradle index eb362f2..919769e 100644 --- a/loopingviewpager/build.gradle +++ b/loopingviewpager/build.gradle @@ -33,10 +33,7 @@ android { } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'androidx.appcompat:appcompat:1.7.0' - implementation 'androidx.core:core-ktx:1.13.1' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.2.1' androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' From 20c338829e275e055fef6d87b82d170e36dc6d11 Mon Sep 17 00:00:00 2001 From: Thang Nguyen Date: Fri, 23 Aug 2024 17:43:16 +0700 Subject: [PATCH 5/6] Add the content to submit the library to maven central --- app/build.gradle | 3 +++ gradle.properties | 26 ++++++++++++++++++++++++++ loopingviewpager/build.gradle | 3 +++ 3 files changed, 32 insertions(+) diff --git a/app/build.gradle b/app/build.gradle index e4e1c34..d122880 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,3 +1,6 @@ +plugins { + id("com.vanniktech.maven.publish") version "0.29.0" +} apply plugin: 'com.android.application' apply plugin: 'kotlin-android' diff --git a/gradle.properties b/gradle.properties index 4795480..338b6f7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,3 +21,29 @@ android.enableJetifier=true kotlin.code.style=official android.nonTransitiveRClass=false android.nonFinalResIds=false + + +# Publish to Maven central +SONATYPE_HOST=CENTRAL_PORTAL +RELEASE_SIGNING_ENABLED=true + +GROUP=io.github.kenilt +POM_ARTIFACT_ID=loopingviewpager +VERSION_NAME=0.3.0 + +POM_NAME=LoopingViewPager +POM_DESCRIPTION=A ViewPager which support infinite looping effect, smart auto-scroll, compatible with any indicators and easily for usage +POM_URL=https://github.com/kenilt/LoopingViewPager + +POM_LICENSE_NAME=The MIT License (MIT) +POM_LICENSE_URL=https://opensource.org/licenses/MIT +POM_LICENSE_DIST=repo + +POM_SCM_URL=https://github.com/kenilt/LoopingViewPager +POM_SCM_CONNECTION=scm:git:git://github.com/kenilt/LoopingViewPager.git +POM_SCM_DEV_CONNECTION=scm:git:ssh://git@github.com/kenilt/LoopingViewPager.git + +POM_DEVELOPER_ID=kenilt +POM_DEVELOPER_NAME=Kenilt Nguyen +POM_DEVELOPER_URL=https://github.com/kenilt/ +POM_DEVELOPER_EMAIL=nhthang.khtn@gmail.com diff --git a/loopingviewpager/build.gradle b/loopingviewpager/build.gradle index 919769e..b5a2ad2 100644 --- a/loopingviewpager/build.gradle +++ b/loopingviewpager/build.gradle @@ -1,3 +1,6 @@ +plugins { + id("com.vanniktech.maven.publish") version "0.29.0" +} apply plugin: 'com.android.library' apply plugin: 'kotlin-android' From 0c48beef3f9de950f5ae576b8a7d07a2e2c675a5 Mon Sep 17 00:00:00 2001 From: Thang Nguyen Date: Fri, 23 Aug 2024 17:44:33 +0700 Subject: [PATCH 6/6] Update the circle indicator to the latest version --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index d122880..a302cf4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -43,7 +43,7 @@ dependencies { implementation 'androidx.core:core-ktx:1.13.1' implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'me.relex:circleindicator:2.1.6' - implementation 'io.github.kenilt:circleindicator:1.0.1' + implementation 'io.github.kenilt:circleindicator:1.1.0' implementation 'com.github.PierfrancescoSoffritti:library-sample-app-template:v1.0.3' implementation("com.tbuonomo:dotsindicator:5.0") implementation 'com.github.romandanylyk:PageIndicatorView:v.1.0.3'