From fae893f47f17a1244979dd6b0ddaf3a8f7f9d4b4 Mon Sep 17 00:00:00 2001 From: Hussein Habibi Juybari Date: Wed, 15 Nov 2023 16:38:38 +0100 Subject: [PATCH 01/13] Rename .java to .kt --- .../in/goodiebag/example/{MainActivity.java => MainActivity.kt} | 0 .../carouselpicker/{CarouselPicker.java => CarouselPicker.kt} | 0 .../{CustomPageTransformer.java => CustomPageTransformer.kt} | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename app/src/main/java/in/goodiebag/example/{MainActivity.java => MainActivity.kt} (100%) rename carouselpicker/src/main/java/in/goodiebag/carouselpicker/{CarouselPicker.java => CarouselPicker.kt} (100%) rename carouselpicker/src/main/java/in/goodiebag/carouselpicker/{CustomPageTransformer.java => CustomPageTransformer.kt} (100%) diff --git a/app/src/main/java/in/goodiebag/example/MainActivity.java b/app/src/main/java/in/goodiebag/example/MainActivity.kt similarity index 100% rename from app/src/main/java/in/goodiebag/example/MainActivity.java rename to app/src/main/java/in/goodiebag/example/MainActivity.kt diff --git a/carouselpicker/src/main/java/in/goodiebag/carouselpicker/CarouselPicker.java b/carouselpicker/src/main/java/in/goodiebag/carouselpicker/CarouselPicker.kt similarity index 100% rename from carouselpicker/src/main/java/in/goodiebag/carouselpicker/CarouselPicker.java rename to carouselpicker/src/main/java/in/goodiebag/carouselpicker/CarouselPicker.kt diff --git a/carouselpicker/src/main/java/in/goodiebag/carouselpicker/CustomPageTransformer.java b/carouselpicker/src/main/java/in/goodiebag/carouselpicker/CustomPageTransformer.kt similarity index 100% rename from carouselpicker/src/main/java/in/goodiebag/carouselpicker/CustomPageTransformer.java rename to carouselpicker/src/main/java/in/goodiebag/carouselpicker/CustomPageTransformer.kt From 4667165a8de8316e02810353290f960909c89b32 Mon Sep 17 00:00:00 2001 From: Hussein Habibi Juybari Date: Wed, 15 Nov 2023 16:38:38 +0100 Subject: [PATCH 02/13] Moved java code to kotlin and support selected index, selected color, selected item tint color --- app/build.gradle | 19 +- .../example/ExampleInstrumentedTest.java | 26 - app/src/main/AndroidManifest.xml | 6 +- .../java/in/goodiebag/example/MainActivity.kt | 207 +++--- app/src/main/res/layout/activity_main.xml | 10 + build.gradle | 7 +- carouselpicker/build.gradle | 20 +- .../ExampleInstrumentedTest.java | 26 - carouselpicker/src/main/AndroidManifest.xml | 3 +- .../carouselpicker/CarouselPicker.kt | 673 +++++++++--------- .../carouselpicker/CustomPageTransformer.kt | 40 +- carouselpicker/src/main/res/values/attrs.xml | 6 + gradle/wrapper/gradle-wrapper.jar | Bin 53636 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 290 +++++--- gradlew.bat | 53 +- 16 files changed, 736 insertions(+), 654 deletions(-) delete mode 100644 app/src/androidTest/java/in/goodiebag/example/ExampleInstrumentedTest.java delete mode 100644 carouselpicker/src/androidTest/java/in/goodiebag/carouselpicker/ExampleInstrumentedTest.java diff --git a/app/build.gradle b/app/build.gradle index e177f06..4974d5a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,11 +1,13 @@ apply plugin: 'com.android.application' +apply plugin: 'org.jetbrains.kotlin.android' android { - compileSdkVersion 29 + compileSdk 34 + namespace "in.goodiebag.example" defaultConfig { applicationId "in.goodiebag.example" minSdkVersion 15 - targetSdkVersion 29 + targetSdk 34 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -17,15 +19,18 @@ android { } } compileOptions { - sourceCompatibility = 1.7 - targetCompatibility = 1.7 + sourceCompatibility = 17 + targetCompatibility = 17 + } + kotlinOptions { + jvmTarget = '17' } - buildToolsVersion = '29.0.2' } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') - implementation 'androidx.appcompat:appcompat:1.1.0' - testImplementation 'junit:junit:4.12' + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'androidx.core:core-ktx:1.12.0' + testImplementation 'junit:junit:4.13.2' implementation project(':carouselpicker') } diff --git a/app/src/androidTest/java/in/goodiebag/example/ExampleInstrumentedTest.java b/app/src/androidTest/java/in/goodiebag/example/ExampleInstrumentedTest.java deleted file mode 100644 index 555e667..0000000 --- a/app/src/androidTest/java/in/goodiebag/example/ExampleInstrumentedTest.java +++ /dev/null @@ -1,26 +0,0 @@ -package in.goodiebag.example; - -import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; - -import org.junit.Test; -import org.junit.runner.RunWith; - -import static org.junit.Assert.*; - -/** - * Instrumentation test, which will execute on an Android device. - * - * @see Testing documentation - */ -@RunWith(AndroidJUnit4.class) -public class ExampleInstrumentedTest { - @Test - public void useAppContext() throws Exception { - // Context of the app under test. - Context appContext = InstrumentationRegistry.getTargetContext(); - - assertEquals("in.goodiebag.example.carouselview", appContext.getPackageName()); - } -} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 479e57c..db1f91c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + - + diff --git a/app/src/main/java/in/goodiebag/example/MainActivity.kt b/app/src/main/java/in/goodiebag/example/MainActivity.kt index 8cbf09d..187eafd 100644 --- a/app/src/main/java/in/goodiebag/example/MainActivity.kt +++ b/app/src/main/java/in/goodiebag/example/MainActivity.kt @@ -1,112 +1,131 @@ -package in.goodiebag.example; - -import android.graphics.Typeface; -import android.os.Bundle; -import android.widget.TextView; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.viewpager.widget.ViewPager; - -import java.util.ArrayList; -import java.util.List; - -import in.goodiebag.carouselpicker.CarouselPicker; - -public class MainActivity extends AppCompatActivity { - CarouselPicker imageCarousel, textCarousel, mixCarousel; - TextView tvSelected; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - imageCarousel = findViewById(R.id.imageCarousel); - textCarousel = findViewById(R.id.textCarousel); - mixCarousel = findViewById(R.id.mixCarousel); - tvSelected = findViewById(R.id.tvSelectedItem); - - List imageItems = new ArrayList<>(); - imageItems.add(new CarouselPicker.DrawableItem(R.drawable.i1)); - imageItems.add(new CarouselPicker.DrawableItem(R.drawable.i2, getResources().getColor(android.R.color.holo_red_light))); - imageItems.add(new CarouselPicker.DrawableItem(R.drawable.i3)); - imageItems.add(new CarouselPicker.DrawableItem(R.drawable.i4)); - CarouselPicker.CarouselViewAdapter imageAdapter = new CarouselPicker.CarouselViewAdapter(this, imageItems, 0); - imageCarousel.setAdapter(imageAdapter); - - List textItems = new ArrayList<>(); - textItems.add(new CarouselPicker.TextItem("hi", 20, +package `in`.goodiebag.example + +import android.graphics.Color +import android.os.Bundle +import android.widget.TextView +import android.graphics.Typeface +import android.os.Build +import android.widget.Button +import androidx.appcompat.app.AppCompatActivity +import `in`.goodiebag.carouselpicker.CarouselPicker +import androidx.viewpager.widget.ViewPager.OnPageChangeListener + +class MainActivity : AppCompatActivity() { + + private lateinit var tvSelected: TextView + private lateinit var mixCarousel: CarouselPicker + private lateinit var imageCarousel: CarouselPicker + private lateinit var textCarousel: CarouselPicker + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_main) + + imageCarousel = findViewById(R.id.imageCarousel) + textCarousel = findViewById(R.id.textCarousel) + mixCarousel = findViewById(R.id.mixCarousel) + tvSelected = findViewById(R.id.tvSelectedItem) + + val imageItems: MutableList = ArrayList() + imageItems.add(CarouselPicker.DrawableItem(R.drawable.i1)) + imageItems.add( + CarouselPicker.DrawableItem( + R.drawable.i2, + getResources().getColor(android.R.color.holo_red_light) + ) + ) + + imageItems.add(CarouselPicker.DrawableItem(R.drawable.i3)) + imageItems.add(CarouselPicker.DrawableItem(R.drawable.i4)) + + val imageAdapter = CarouselPicker.CarouselViewAdapter(this, imageItems, 0) + imageCarousel.setAdapter(imageAdapter) + val textItems: MutableList = ArrayList() + textItems.add( + CarouselPicker.TextItem( + "hi", 20, getResources().getColor(android.R.color.holo_blue_bright), Typeface.MONOSPACE, - CarouselPicker.TextItem.FontStyle.BOLD_ITALIC)); - textItems.add(new CarouselPicker.TextItem("hi, welcome to the carousel picker", 20, + CarouselPicker.TextItem.FontStyle.BOLD_ITALIC + ) + ) + textItems.add( + CarouselPicker.TextItem( + "hi, welcome to the carousel picker", 20, getResources().getColor(android.R.color.holo_red_light), - Typeface.SANS_SERIF, CarouselPicker.TextItem.FontStyle.NORMAL)); - textItems.add(new CarouselPicker.TextItem("hi", 20, - Typeface.SERIF, CarouselPicker.TextItem.FontStyle.ITALIC)); - textItems.add(new CarouselPicker.TextItem("hi", 20)); - CarouselPicker.CarouselViewAdapter textAdapter = new CarouselPicker.CarouselViewAdapter(this, textItems, 0); - textCarousel.setAdapter(textAdapter); + Typeface.SANS_SERIF, CarouselPicker.TextItem.FontStyle.NORMAL + ) + ) + textItems.add( + CarouselPicker.TextItem( + "hi", 20, + Typeface.SERIF, CarouselPicker.TextItem.FontStyle.ITALIC + ) + ) + textItems.add(CarouselPicker.TextItem("hi", 20)) + val textAdapter = CarouselPicker.CarouselViewAdapter(this, textItems, 0) + textCarousel.setAdapter(textAdapter) // set default color - textAdapter.setTextColor(getResources().getColor(android.R.color.holo_green_light)); - - List mixItems = new ArrayList<>(); - mixItems.add(new CarouselPicker.DrawableItem(R.drawable.i1)); - mixItems.add(new CarouselPicker.TextItem("hi", 20)); - mixItems.add(new CarouselPicker.DrawableItem(R.drawable.i2)); - mixItems.add(new CarouselPicker.TextItem("hi", 20)); - - CarouselPicker.CarouselViewAdapter mixAdapter = new CarouselPicker.CarouselViewAdapter(this, mixItems, 0); - mixAdapter.setTextColor(getResources().getColor(R.color.colorPrimary)); - mixCarousel.setAdapter(mixAdapter); - - imageCarousel.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { - + textAdapter.textColor = getResources().getColor(android.R.color.holo_green_light) + textAdapter.selectedItemTextColor = Color.GREEN + textAdapter.selectedIndex = 1 + + val mixItems: MutableList = ArrayList() + mixItems.add(CarouselPicker.DrawableItem(R.drawable.i1)) + mixItems.add(CarouselPicker.TextItem("hi", 20)) + mixItems.add(CarouselPicker.DrawableItem(R.drawable.i2)) + mixItems.add(CarouselPicker.TextItem("hi", 20)) + val mixAdapter = CarouselPicker.CarouselViewAdapter(this, mixItems, 0) + mixAdapter.textColor = getResources().getColor(R.color.colorPrimary) + mixAdapter.selectedItemTextColor = Color.RED + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + mixAdapter.selectedItemTintColor = Color.RED + } + mixCarousel.setAdapter(mixAdapter) + imageCarousel.addOnPageChangeListener(object : OnPageChangeListener { + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int, + ) { } - @Override - public void onPageSelected(int position) { - tvSelected.setText("Selected item in image carousel is : "+position); + override fun onPageSelected(position: Int) { + tvSelected.setText("Selected item in image carousel is : $position") } - @Override - public void onPageScrollStateChanged(int state) { - + override fun onPageScrollStateChanged(state: Int) {} + }) + textCarousel.addOnPageChangeListener(object : OnPageChangeListener { + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int, + ) { } - }); - - textCarousel.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + override fun onPageSelected(position: Int) { + tvSelected.setText("Selected item in text carousel is : $position") } - @Override - public void onPageSelected(int position) { - tvSelected.setText("Selected item in text carousel is : "+position); + override fun onPageScrollStateChanged(state: Int) {} + }) + mixCarousel.addOnPageChangeListener(object : OnPageChangeListener { + override fun onPageScrolled( + position: Int, + positionOffset: Float, + positionOffsetPixels: Int, + ) { } - @Override - public void onPageScrollStateChanged(int state) { - + override fun onPageSelected(position: Int) { + tvSelected.setText("Selected item in mix carousel is : $position") } - }); - mixCarousel.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { - @Override - public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { + override fun onPageScrollStateChanged(state: Int) {} + }) - } - - @Override - public void onPageSelected(int position) { - tvSelected.setText("Selected item in mix carousel is : "+position); - } - - @Override - public void onPageScrollStateChanged(int state) { - - } - }); + findViewById