diff --git a/.gitignore b/.gitignore index 39fb081..11b45d2 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,10 @@ /build /captures .externalNativeBuild +.idea/vcs.xml +.idea/runConfigurations.xml +.idea/modules.xml +.idea/misc.xml +.idea/gradle.xml +.idea/dictionaries/shrikanthravi.xml +.idea/caches/build_file_checksums.ser diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser deleted file mode 100644 index 97e2d1b..0000000 Binary files a/.idea/caches/build_file_checksums.ser and /dev/null differ diff --git a/.idea/dictionaries/shrikanthravi.xml b/.idea/dictionaries/shrikanthravi.xml deleted file mode 100644 index 96755bd..0000000 --- a/.idea/dictionaries/shrikanthravi.xml +++ /dev/null @@ -1,3 +0,0 @@ - - - \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml deleted file mode 100644 index 78693c7..0000000 --- a/.idea/gradle.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml deleted file mode 100644 index 3aa0ad5..0000000 --- a/.idea/misc.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - Android - - - - - Android - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml deleted file mode 100644 index afcb1bd..0000000 --- a/.idea/modules.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml deleted file mode 100644 index 7f68460..0000000 --- a/.idea/runConfigurations.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml deleted file mode 100644 index 94a25f7..0000000 --- a/.idea/vcs.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 66432e0..78e765a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -2,14 +2,14 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 27 + compileSdkVersion 28 defaultConfig { applicationId "com.shrikanthravi.collapsiblecalendarview" minSdkVersion 21 - targetSdkVersion 27 + targetSdkVersion 28 versionCode 1 versionName "1.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } dexOptions { preDexLibraries = false @@ -20,14 +20,20 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + compileOptions { + sourceCompatibility = '1.8' + targetCompatibility = '1.8' + } } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) - implementation 'com.android.support:appcompat-v7:27.0.2' - implementation 'com.android.support.constraint:constraint-layout:1.0.2' - testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.1' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' implementation project(':collapsiblecalendarview2') + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha2' + implementation 'com.jakewharton.threetenabp:threetenabp:1.1.1' + + testImplementation 'junit:junit:4.12' + + androidTestImplementation 'androidx.test:runner:1.1.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' } diff --git a/app/src/androidTest/java/com/shrikanthravi/collapsiblecalendarview/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/shrikanthravi/collapsiblecalendarview/ExampleInstrumentedTest.java index 5762c9f..b0c94c2 100644 --- a/app/src/androidTest/java/com/shrikanthravi/collapsiblecalendarview/ExampleInstrumentedTest.java +++ b/app/src/androidTest/java/com/shrikanthravi/collapsiblecalendarview/ExampleInstrumentedTest.java @@ -1,8 +1,8 @@ package com.shrikanthravi.collapsiblecalendarview; import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/app/src/main/java/com/shrikanthravi/collapsiblecalendarview/MainActivity.java b/app/src/main/java/com/shrikanthravi/collapsiblecalendarview/MainActivity.java index 73495d7..b630aaa 100644 --- a/app/src/main/java/com/shrikanthravi/collapsiblecalendarview/MainActivity.java +++ b/app/src/main/java/com/shrikanthravi/collapsiblecalendarview/MainActivity.java @@ -1,15 +1,15 @@ package com.shrikanthravi.collapsiblecalendarview; import android.graphics.Color; -import android.support.v7.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; +import android.util.Log; import android.view.View; import com.shrikanthravi.collapsiblecalendarview.widget.CollapsibleCalendar; -import com.shrikanthravi.collapsiblecalendarview.widget.UICalendar; -import java.util.Calendar; -import java.util.Date; +import org.threeten.bp.LocalDate; + import java.util.GregorianCalendar; @@ -23,12 +23,12 @@ protected void onCreate(Bundle savedInstanceState) { getWindow().setStatusBarColor(getResources().getColor(R.color.google_red)); CollapsibleCalendar collapsibleCalendar = findViewById(R.id.collapsibleCalendarView); - Calendar today=new GregorianCalendar(); - collapsibleCalendar.addEventTag(today.get(Calendar.YEAR),today.get(Calendar.MONTH),today.get(Calendar.DAY_OF_MONTH)); - today.add(Calendar.DATE,1); - collapsibleCalendar.addEventTag(today.get(Calendar.YEAR),today.get(Calendar.MONTH),today.get(Calendar.DAY_OF_MONTH),Color.BLUE); + LocalDate today = LocalDate.now(); + collapsibleCalendar.addEventTag(today); + LocalDate tomorrow = today.plusDays(1); + collapsibleCalendar.addEventTag(tomorrow, Color.BLUE); - System.out.println("Testing date "+collapsibleCalendar.getSelectedDay().getDay()+"/"+collapsibleCalendar.getSelectedDay().getMonth()+"/"+collapsibleCalendar.getSelectedDay().getYear()); + Log.d("Testing date ", collapsibleCalendar.getSelectedDay().toString()); collapsibleCalendar.setCalendarListener(new CollapsibleCalendar.CalendarListener() { @Override public void onDaySelect() { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0818ea0..6b4bb8e 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -19,5 +19,6 @@ app:buttonRight_drawableTintColor="@android:color/white" app:expandIconColor="@android:color/white" app:eventColor="@android:color/white" + app:eventDotSize="small" > diff --git a/build.gradle b/build.gradle index f09a2f3..748f61c 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 { - + repositories { google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.0' - classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0' - + classpath 'com.android.tools.build:gradle:3.2.1' + 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 diff --git a/collapsiblecalendarview2/build.gradle b/collapsiblecalendarview2/build.gradle index f31a9a6..f3284bc 100644 --- a/collapsiblecalendarview2/build.gradle +++ b/collapsiblecalendarview2/build.gradle @@ -3,17 +3,15 @@ apply plugin: 'com.github.dcendents.android-maven' group = 'com.github.shrikanth7698' android { - compileSdkVersion 27 - - + compileSdkVersion 28 defaultConfig { - minSdkVersion 21 - targetSdkVersion 27 + minSdkVersion 15 + targetSdkVersion 28 versionCode 1 versionName "1.0" - testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } dexOptions { @@ -27,13 +25,19 @@ android { } } + compileOptions { + sourceCompatibility = '1.8' + targetCompatibility = '1.8' + } } dependencies { - implementation fileTree(dir: 'libs', include: ['*.jar']) + implementation 'androidx.appcompat:appcompat:1.0.2' + implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'com.jakewharton.threetenabp:threetenabp:1.1.1' - implementation 'com.android.support:appcompat-v7:27.0.2' testImplementation 'junit:junit:4.12' - androidTestImplementation 'com.android.support.test:runner:1.0.1' - androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' + + androidTestImplementation 'androidx.test:runner:1.1.0' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' } diff --git a/collapsiblecalendarview2/src/androidTest/java/com/shrikanthravi/collapsiblecalendarview/ExampleInstrumentedTest.java b/collapsiblecalendarview2/src/androidTest/java/com/shrikanthravi/collapsiblecalendarview/ExampleInstrumentedTest.java index 2671c9b..49806aa 100644 --- a/collapsiblecalendarview2/src/androidTest/java/com/shrikanthravi/collapsiblecalendarview/ExampleInstrumentedTest.java +++ b/collapsiblecalendarview2/src/androidTest/java/com/shrikanthravi/collapsiblecalendarview/ExampleInstrumentedTest.java @@ -1,8 +1,8 @@ package com.shrikanthravi.collapsiblecalendarview; import android.content.Context; -import android.support.test.InstrumentationRegistry; -import android.support.test.runner.AndroidJUnit4; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; import org.junit.Test; import org.junit.runner.RunWith; diff --git a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/data/CalendarAdapter.java b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/data/CalendarAdapter.java index 5f3351a..23d05e1 100644 --- a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/data/CalendarAdapter.java +++ b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/data/CalendarAdapter.java @@ -1,36 +1,42 @@ package com.shrikanthravi.collapsiblecalendarview.data; import android.content.Context; -import android.graphics.Color; import android.graphics.PorterDuff; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.TextView; +import com.jakewharton.threetenabp.AndroidThreeTen; import com.shrikanthravi.collapsiblecalendarview.R; +import com.shrikanthravi.collapsiblecalendarview.widget.UICalendar; + +import org.threeten.bp.DayOfWeek; +import org.threeten.bp.LocalDate; import java.util.ArrayList; -import java.util.Calendar; import java.util.List; +import static org.threeten.bp.Month.DECEMBER; +import static org.threeten.bp.Month.JANUARY; + /** * Created by shrikanthravi on 06/03/18. */ public class CalendarAdapter { - private int mFirstDayOfWeek = 0; - private Calendar mCal; + private DayOfWeek mFirstDayOfWeek = DayOfWeek.MONDAY; + private LocalDate mCal; private LayoutInflater mInflater; + private int mEventDotSize = UICalendar.EVENT_DOT_BIG; - List mItemList = new ArrayList<>(); - List mViewList = new ArrayList<>(); - List mEventList = new ArrayList<>(); - - public CalendarAdapter(Context context, Calendar cal) { - this.mCal = (Calendar) cal.clone(); - this.mCal.set(Calendar.DAY_OF_MONTH, 1); + private List mItemList = new ArrayList<>(); + private List mViewList = new ArrayList<>(); + private List mEventList = new ArrayList<>(); + public CalendarAdapter(Context context) { + AndroidThreeTen.init(context); + this.mCal = LocalDate. now().withDayOfMonth(1); mInflater = LayoutInflater.from(context); refresh(); @@ -41,7 +47,7 @@ public int getCount() { return mItemList.size(); } - public Day getItem(int position) { + public LocalDate getItem(int position) { return mItemList.get(position); } @@ -49,11 +55,27 @@ public View getView(final int position) { return mViewList.get(position); } - public void setFirstDayOfWeek(int firstDayOfWeek) { + public void nextMonth() { + mCal = mCal.plusMonths(1); + } + + public void previousMonth() { + mCal = mCal.minusMonths(1); + } + + public void setDate(LocalDate date) { + mCal = date; + } + + public void setFirstDayOfWeek(DayOfWeek firstDayOfWeek) { mFirstDayOfWeek = firstDayOfWeek; } - public Calendar getCalendar() { + public void setEventDotSize(int eventDotSize) { + mEventDotSize = eventDotSize; + } + + public LocalDate getCalendar() { return mCal; } @@ -67,42 +89,41 @@ public void refresh() { mViewList.clear(); // set calendar - int year = mCal.get(Calendar.YEAR); - int month = mCal.get(Calendar.MONTH); + int year = mCal.getYear(); + int month = mCal.getMonthValue(); - mCal.set(year, month, 1); + mCal = LocalDate.of(year, month, 1); - int lastDayOfMonth = mCal.getActualMaximum(Calendar.DAY_OF_MONTH); - int firstDayOfWeek = mCal.get(Calendar.DAY_OF_WEEK) - 1; + int lastDayOfMonth = mCal.lengthOfMonth(); + DayOfWeek firstDayOfWeek = mCal.getDayOfWeek(); // generate day list - int offset = 0 - (firstDayOfWeek - mFirstDayOfWeek) + 1; - int length = (int) Math.ceil((float) (lastDayOfMonth - offset + 1) / 7) * 7; + int offset = 0 - (firstDayOfWeek.getValue() - mFirstDayOfWeek.getValue()); + if (offset > 0) offset += -7; + int length = (int) Math.ceil((float) (lastDayOfMonth - offset) / 7) * 7; for (int i = offset; i < length + offset; i++) { int numYear; int numMonth; int numDay; - Calendar tempCal = Calendar.getInstance(); if (i <= 0) { // prev month - if (month == 0) { + if (month == JANUARY.getValue()) { numYear = year - 1; - numMonth = 11; + numMonth = DECEMBER.getValue(); } else { numYear = year; numMonth = month - 1; } - tempCal.set(numYear, numMonth, 1); - numDay = tempCal.getActualMaximum(Calendar.DAY_OF_MONTH) + i; + LocalDate tempCal = LocalDate.of(numYear, numMonth, 1); + numDay = tempCal.lengthOfMonth() + i; } else if (i > lastDayOfMonth) { // next month - if (month == 11) { + if (month == DECEMBER.getValue()) { numYear = year + 1; - numMonth = 0; + numMonth = JANUARY.getValue(); } else { numYear = year; - numMonth = month + 1; + numMonth = month; } - tempCal.set(numYear, numMonth, 1); numDay = i - lastDayOfMonth; } else { numYear = year; @@ -110,24 +131,27 @@ public void refresh() { numDay = i; } - Day day = new Day(numYear, numMonth, numDay); + LocalDate day = LocalDate.of(numYear, numMonth, numDay); + View view; + if (mEventDotSize == UICalendar.EVENT_DOT_SMALL) { + view = mInflater.inflate(R.layout.day_layout_small, null); + } else { + view = mInflater.inflate(R.layout.day_layout, null); + } - View view = mInflater.inflate(R.layout.day_layout, null); - TextView txtDay = (TextView) view.findViewById(R.id.txt_day); - ImageView imgEventTag = (ImageView) view.findViewById(R.id.img_event_tag); + TextView txtDay = view.findViewById(R.id.txt_day); + ImageView imgEventTag = view.findViewById(R.id.img_event_tag); - txtDay.setText(String.valueOf(day.getDay())); - if (day.getMonth() != mCal.get(Calendar.MONTH)) { + txtDay.setText(String.valueOf(day.getDayOfMonth())); + if (day.getMonth() != mCal.getMonth()) { txtDay.setAlpha(0.3f); } for (int j = 0; j < mEventList.size(); j++) { Event event = mEventList.get(j); - if (day.getYear() == event.getYear() - && day.getMonth() == event.getMonth() - && day.getDay() == event.getDay()) { + if (day.equals(event.getDate())) { imgEventTag.setVisibility(View.VISIBLE); - imgEventTag.setColorFilter(event.getColor(),PorterDuff.Mode.SRC_ATOP); + imgEventTag.setColorFilter(event.getColor(), PorterDuff.Mode.SRC_ATOP); } } diff --git a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/data/Day.java b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/data/Day.java deleted file mode 100644 index 0c2b1a5..0000000 --- a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/data/Day.java +++ /dev/null @@ -1,67 +0,0 @@ -package com.shrikanthravi.collapsiblecalendarview.data; - -import android.content.Intent; -import android.os.Parcel; -import android.os.Parcelable; - -/** - * Created by shrikanthravi on 06/03/18. - */ - -public class Day implements Parcelable{ - - private int mYear; - private int mMonth; - private int mDay; - - public Day(int year, int month, int day){ - this.mYear = year; - this.mMonth = month; - this.mDay = day; - } - - public int getMonth(){ - return mMonth; - } - - public int getYear(){ - return mYear; - } - - public int getDay(){ - return mDay; - } - - - - public Day(Parcel in){ - int[] data = new int[3]; - in.readIntArray(data); - this.mYear = data[0]; - this.mMonth = data[1]; - this.mYear = data[2]; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeIntArray(new int[] {this.mYear, - this.mMonth, - this.mDay}); - } - public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { - public Day createFromParcel(Parcel in) { - return new Day(in); - } - - public Day[] newArray(int size) { - return new Day[size]; - } - }; - - -} diff --git a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/data/Event.java b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/data/Event.java index 4ace985..51970bf 100644 --- a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/data/Event.java +++ b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/data/Event.java @@ -1,38 +1,27 @@ package com.shrikanthravi.collapsiblecalendarview.data; +import org.threeten.bp.LocalDate; + /** * Created by shrikanthravi on 06/03/18. */ public class Event { - private int mYear; - private int mMonth; - private int mDay; - private int mColor; - - public Event(int year, int month, int day){ - this.mYear = year; - this.mMonth = month; - this.mDay = day; - } + private final LocalDate date; - public Event(int year, int month, int day, int color){ - this.mYear = year; - this.mMonth = month; - this.mDay = day; - this.mColor=color; - } + private int mColor; - public int getMonth(){ - return mMonth; + public Event(LocalDate date) { + this.date = date; } - public int getYear(){ - return mYear; + public Event(LocalDate date, int color) { + this.date = date; + this.mColor = color; } - public int getDay(){ - return mDay; + public LocalDate getDate() { + return date; } public int getColor() { diff --git a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/listener/OnSwipeTouchListener.java b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/listener/OnSwipeTouchListener.java new file mode 100644 index 0000000..86d3912 --- /dev/null +++ b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/listener/OnSwipeTouchListener.java @@ -0,0 +1,75 @@ +package com.shrikanthravi.collapsiblecalendarview.listener; + +import android.content.Context; +import android.view.GestureDetector; +import android.view.GestureDetector.SimpleOnGestureListener; +import android.view.MotionEvent; +import android.view.View; +import android.view.View.OnTouchListener; + +public class OnSwipeTouchListener implements OnTouchListener { + + private final GestureDetector gestureDetector; + + public OnSwipeTouchListener (Context ctx){ + gestureDetector = new GestureDetector(ctx, new GestureListener()); + } + + @Override + public boolean onTouch(View v, MotionEvent event) { + return gestureDetector.onTouchEvent(event); + } + + private final class GestureListener extends SimpleOnGestureListener { + + private static final int SWIPE_THRESHOLD = 100; + private static final int SWIPE_VELOCITY_THRESHOLD = 100; + + @Override + public boolean onDown(MotionEvent e) { + return false; + } + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { + boolean result = false; + try { + float diffY = e2.getY() - e1.getY(); + float diffX = e2.getX() - e1.getX(); + if (Math.abs(diffX) > Math.abs(diffY)) { + if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) { + if (diffX > 0) { + onSwipeRight(); + } else { + onSwipeLeft(); + } + result = true; + } + } + else if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) { + if (diffY > 0) { + onSwipeBottom(); + } else { + onSwipeTop(); + } + result = true; + } + } catch (Exception exception) { + exception.printStackTrace(); + } + return result; + } + } + + public void onSwipeRight() { + } + + public void onSwipeLeft() { + } + + public void onSwipeTop() { + } + + public void onSwipeBottom() { + } +} \ No newline at end of file diff --git a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/view/ExpandIconView.java b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/view/ExpandIconView.java index 44ace25..8130db2 100644 --- a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/view/ExpandIconView.java +++ b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/view/ExpandIconView.java @@ -28,10 +28,10 @@ import android.graphics.Path; import android.graphics.Point; import android.os.Build; -import android.support.annotation.FloatRange; -import android.support.annotation.IntDef; -import android.support.annotation.NonNull; -import android.support.annotation.Nullable; +import androidx.annotation.FloatRange; +import androidx.annotation.IntDef; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import android.util.AttributeSet; import android.view.View; import android.view.animation.DecelerateInterpolator; diff --git a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/view/LockScrollView.java b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/view/LockScrollView.java index 5f8397e..353ea5e 100644 --- a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/view/LockScrollView.java +++ b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/view/LockScrollView.java @@ -3,13 +3,14 @@ import android.content.Context; import android.util.AttributeSet; import android.view.MotionEvent; +import android.view.View; import android.widget.ScrollView; /** * Created by shrikanthravi on 07/03/18. */ -public class LockScrollView extends ScrollView { +public class LockScrollView extends ScrollView { public LockScrollView(Context context) { super(context); } diff --git a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/widget/CollapsibleCalendar.java b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/widget/CollapsibleCalendar.java index 5c1a972..3df0a47 100644 --- a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/widget/CollapsibleCalendar.java +++ b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/widget/CollapsibleCalendar.java @@ -9,8 +9,6 @@ import android.graphics.Color; import android.os.Handler; import android.util.AttributeSet; -import android.view.GestureDetector; -import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; import android.view.animation.Animation; @@ -20,26 +18,27 @@ import android.widget.TableRow; import android.widget.TextView; - import com.shrikanthravi.collapsiblecalendarview.R; import com.shrikanthravi.collapsiblecalendarview.data.CalendarAdapter; -import com.shrikanthravi.collapsiblecalendarview.data.Day; import com.shrikanthravi.collapsiblecalendarview.data.Event; +import com.shrikanthravi.collapsiblecalendarview.listener.OnSwipeTouchListener; import com.shrikanthravi.collapsiblecalendarview.view.ExpandIconView; -import java.text.SimpleDateFormat; -import java.util.Calendar; +import org.threeten.bp.LocalDate; +import org.threeten.bp.format.DateTimeFormatter; + +import androidx.annotation.NonNull; public class CollapsibleCalendar extends UICalendar { - private CalendarAdapter mAdapter; + private CalendarAdapter mAdapter; private CalendarListener mListener; - private boolean expanded=false; + private boolean expanded = false; private int mInitHeight = 0; - private Handler mHandler = new Handler(); + private Handler mHandler = new Handler(); private boolean mIsWaitingForUpdate = false; private int mCurrentWeekIndex; @@ -61,16 +60,14 @@ protected void init(Context context) { super.init(context); - - Calendar cal = Calendar.getInstance(); - CalendarAdapter adapter = new CalendarAdapter(context, cal); - setAdapter(adapter); - - + int size = getEventDotSize(); + CalendarAdapter adapter = new CalendarAdapter(context); + adapter.setEventDotSize(getEventDotSize()); + setAdapter(adapter); // bind events - + mLayoutRoot.setOnTouchListener(getSwipeTouchListener()); mBtnPrevMonth.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -99,16 +96,15 @@ public void onClick(View v) { } }); - expandIconView.setState(ExpandIconView.MORE,true); + expandIconView.setState(ExpandIconView.MORE, true); expandIconView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - if(expanded){ + if (expanded) { collapse(400); - } - else{ + } else { expand(400); } } @@ -122,7 +118,36 @@ public void run() { }); + } + + private OnSwipeTouchListener getSwipeTouchListener() { + return new OnSwipeTouchListener(getContext()) { + public void onSwipeTop() { + collapse(400); + + } + + public void onSwipeLeft() { + if (getState() == STATE_COLLAPSED) { + nextWeek(); + } else if (getState() == STATE_EXPANDED) { + nextMonth(); + } + } + + public void onSwipeRight() { + if (getState() == STATE_COLLAPSED) { + prevWeek(); + } else if (getState() == STATE_EXPANDED) { + prevMonth(); + } + } + + public void onSwipeBottom() { + expand(400); + } + }; } @Override @@ -158,9 +183,9 @@ protected void redraw() { // redraw all views of day if (mAdapter != null) { for (int i = 0; i < mAdapter.getCount(); i++) { - Day day = mAdapter.getItem(i); + LocalDate day = mAdapter.getItem(i); View view = mAdapter.getView(i); - TextView txtDay = (TextView) view.findViewById(R.id.txt_day); + TextView txtDay = view.findViewById(R.id.txt_day); txtDay.setBackgroundColor(Color.TRANSPARENT); txtDay.setTextColor(getTextColor()); @@ -182,12 +207,13 @@ protected void redraw() { @Override protected void reload() { if (mAdapter != null) { + mAdapter.setEventDotSize(getEventDotSize()); mAdapter.refresh(); // reset UI - SimpleDateFormat dateFormat = new SimpleDateFormat("MMM yyyy"); - dateFormat.setTimeZone(mAdapter.getCalendar().getTimeZone()); - mTxtTitle.setText(dateFormat.format(mAdapter.getCalendar().getTime())); + DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("MMMM YYYY"); + String formattedDate = dateFormat.format(mAdapter.getCalendar()); + mTxtTitle.setText(formattedDate); mTableHead.removeAllViews(); mTableBody.removeAllViews(); @@ -210,7 +236,7 @@ protected void reload() { for (int i = 0; i < 7; i++) { View view = mInflater.inflate(R.layout.layout_day_of_week, null); TextView txtDayOfWeek = (TextView) view.findViewById(R.id.txt_day_of_week); - txtDayOfWeek.setText(dayOfWeekIds[(i + getFirstDayOfWeek()) % 7]); + txtDayOfWeek.setText(dayOfWeekIds[(i + getFirstDayOfWeek().getValue()) % 7]); view.setLayoutParams(new TableRow.LayoutParams( 0, ViewGroup.LayoutParams.WRAP_CONTENT, @@ -235,6 +261,7 @@ protected void reload() { 0, ViewGroup.LayoutParams.WRAP_CONTENT, 1)); + view.setOnTouchListener(getSwipeTouchListener()); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -265,17 +292,18 @@ private int getSuitableRowIndex() { } } - public void onItemClicked(View view, Day day) { + public void onItemClicked(View view, LocalDate day) { select(day); - Calendar cal = mAdapter.getCalendar(); + LocalDate cal = mAdapter.getCalendar(); int newYear = day.getYear(); - int newMonth = day.getMonth(); - int oldYear = cal.get(Calendar.YEAR); - int oldMonth = cal.get(Calendar.MONTH); + int newMonth = day.getMonthValue() - 1; + int oldYear = cal.getYear(); + int oldMonth = cal.getMonthValue(); if (newMonth != oldMonth) { - cal.set(day.getYear(), day.getMonth(), 1); + LocalDate d = day.withDayOfMonth(1); + mAdapter.setDate(d); if (newYear > oldYear || newMonth > oldMonth) { mCurrentWeekIndex = 0; @@ -305,25 +333,20 @@ public void setAdapter(CalendarAdapter adapter) { mCurrentWeekIndex = getSuitableRowIndex(); } - public void addEventTag(int numYear, int numMonth, int numDay) { - mAdapter.addEvent(new Event(numYear, numMonth, numDay,getEventColor())); + public void addEventTag(LocalDate date) { + mAdapter.addEvent(new Event(date, getEventColor())); reload(); } - public void addEventTag(int numYear, int numMonth, int numDay,int color) { - mAdapter.addEvent(new Event(numYear, numMonth, numDay,color)); + public void addEventTag(LocalDate date, int color) { + mAdapter.addEvent(new Event(date, color)); reload(); } public void prevMonth() { - Calendar cal = mAdapter.getCalendar(); - if (cal.get(Calendar.MONTH) == cal.getActualMinimum(Calendar.MONTH)) { - cal.set((cal.get(Calendar.YEAR) - 1), cal.getActualMaximum(Calendar.MONTH), 1); - } else { - cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) - 1); - } + mAdapter.previousMonth(); reload(); if (mListener != null) { mListener.onMonthChange(); @@ -331,12 +354,7 @@ public void prevMonth() { } public void nextMonth() { - Calendar cal = mAdapter.getCalendar(); - if (cal.get(Calendar.MONTH) == cal.getActualMaximum(Calendar.MONTH)) { - cal.set((cal.get(Calendar.YEAR) + 1), cal.getActualMinimum(Calendar.MONTH), 1); - } else { - cal.set(Calendar.MONTH, cal.get(Calendar.MONTH) + 1); - } + mAdapter.nextMonth(); reload(); if (mListener != null) { mListener.onMonthChange(); @@ -363,51 +381,25 @@ public void nextWeek() { } } - public int getYear() { - return mAdapter.getCalendar().get(Calendar.YEAR); - } - - public int getMonth() { - return mAdapter.getCalendar().get(Calendar.MONTH); - } - - public Day getSelectedDay() { - if (getSelectedItem()==null){ - Calendar cal = Calendar.getInstance(); - int day = cal.get(Calendar.DAY_OF_MONTH); - int month = cal.get(Calendar.MONTH); - int year = cal.get(Calendar.YEAR); - return new Day( - year, - month+1, - day); + public LocalDate getSelectedDay() { + if (getSelectedItem() == null) { + return LocalDate.now(); } - return new Day( - getSelectedItem().getYear(), - getSelectedItem().getMonth(), - getSelectedItem().getDay()); + return getSelectedItem(); } - public boolean isSelectedDay(Day day) { - return day != null - && getSelectedItem() != null - && day.getYear() == getSelectedItem().getYear() - && day.getMonth() == getSelectedItem().getMonth() - && day.getDay() == getSelectedItem().getDay(); + public boolean isSelectedDay(@NonNull LocalDate day) { + return day.equals(getSelectedItem()); } - public boolean isToady(Day day) { - Calendar todayCal = Calendar.getInstance(); - return day != null - && day.getYear() == todayCal.get(Calendar.YEAR) - && day.getMonth() == todayCal.get(Calendar.MONTH) - && day.getDay() == todayCal.get(Calendar.DAY_OF_MONTH); + public boolean isToady(@NonNull LocalDate day) { + return LocalDate.now().equals(day); } public int getSelectedItemPosition() { int position = -1; for (int i = 0; i < mAdapter.getCount(); i++) { - Day day = mAdapter.getItem(i); + LocalDate day = mAdapter.getItem(i); if (isSelectedDay(day)) { position = i; @@ -420,7 +412,7 @@ public int getSelectedItemPosition() { public int getTodayItemPosition() { int position = -1; for (int i = 0; i < mAdapter.getCount(); i++) { - Day day = mAdapter.getItem(i); + LocalDate day = mAdapter.getItem(i); if (isToady(day)) { position = i; @@ -477,7 +469,7 @@ protected void applyTransformation(float interpolatedTime, Transformation t) { startAnimation(anim); } - expandIconView.setState(ExpandIconView.MORE,true); + expandIconView.setState(ExpandIconView.MORE, true); } private void collapseTo(int index) { @@ -544,22 +536,22 @@ protected void applyTransformation(float interpolatedTime, Transformation t) { startAnimation(anim); } - expandIconView.setState(ExpandIconView.LESS,true); + expandIconView.setState(ExpandIconView.LESS, true); } @Override public void setState(int state) { super.setState(state); - if(state == STATE_COLLAPSED) { + if (state == STATE_COLLAPSED) { expanded = false; } - if(state == STATE_EXPANDED) { + if (state == STATE_EXPANDED) { expanded = true; } } - public void select(Day day) { - setSelectedItem(new Day(day.getYear(), day.getMonth(), day.getDay())); + public void select(LocalDate day) { + setSelectedItem(day); redraw(); @@ -601,6 +593,5 @@ public interface CalendarListener { } - } diff --git a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/widget/UICalendar.java b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/widget/UICalendar.java index 8c9bc4a..fd5f736 100644 --- a/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/widget/UICalendar.java +++ b/collapsiblecalendarview2/src/main/java/com/shrikanthravi/collapsiblecalendarview/widget/UICalendar.java @@ -1,16 +1,13 @@ package com.shrikanthravi.collapsiblecalendarview.widget; import android.content.Context; -import android.content.res.ColorStateList; import android.content.res.TypedArray; import android.graphics.Color; import android.graphics.PorterDuff; -import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.View; -import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; @@ -18,26 +15,21 @@ import android.widget.TextView; import com.shrikanthravi.collapsiblecalendarview.R; -import com.shrikanthravi.collapsiblecalendarview.data.Day; import com.shrikanthravi.collapsiblecalendarview.view.ExpandIconView; import com.shrikanthravi.collapsiblecalendarview.view.LockScrollView; +import org.threeten.bp.DayOfWeek; +import org.threeten.bp.LocalDate; -public abstract class UICalendar extends LinearLayout { +public abstract class UICalendar extends LinearLayout { - // Day of Week - public static final int SUNDAY = 0; - public static final int MONDAY = 1; - public static final int TUESDAY = 2; - public static final int WEDNESDAY = 3; - public static final int THURSDAY = 4; - public static final int FRIDAY = 5; - public static final int SATURDAY = 6; // State public static final int STATE_EXPANDED = 0; public static final int STATE_COLLAPSED = 1; public static final int STATE_PROCESSING = 2; + public static final int EVENT_DOT_BIG = 0; + public static final int EVENT_DOT_SMALL = 1; protected Context mContext; protected LayoutInflater mInflater; @@ -57,9 +49,9 @@ public abstract class UICalendar extends LinearLayout { protected ExpandIconView expandIconView; // Attributes - private boolean mShowWeek = true; - private int mFirstDayOfWeek = SUNDAY; - private int mState = STATE_COLLAPSED; + private boolean mShowWeek = true; + private DayOfWeek mFirstDayOfWeek = DayOfWeek.SUNDAY; + private int mState = STATE_COLLAPSED; private int mTextColor = Color.BLACK; private int mPrimaryColor = Color.WHITE; @@ -76,7 +68,7 @@ public abstract class UICalendar extends LinearLayout { private Drawable mButtonRightDrawable = getResources().getDrawable(R.drawable.right_icon); - private Day mSelectedItem = null; + private LocalDate mSelectedItem = null; private int mButtonLeftDrawableTintColor=Color.BLACK; private int mButtonRightDrawableTintColor=Color.BLACK; @@ -84,6 +76,8 @@ public abstract class UICalendar extends LinearLayout { private int mExpandIconColor = Color.BLACK; private int mEventColor=Color.BLACK; + private int mEventDotSize=EVENT_DOT_BIG; + public UICalendar(Context context) { this(context, null); } @@ -126,24 +120,21 @@ protected void init(Context context) { mBtnPrevWeek = rootView.findViewById(R.id.btn_prev_week); mBtnNextWeek = rootView.findViewById(R.id.btn_next_week); expandIconView = rootView.findViewById(R.id.expandIcon); - - - - } protected void setAttributes(TypedArray attrs) { // set attributes by the values from XML //setStyle(attrs.getInt(R.styleable.UICalendar_style, mStyle)); setShowWeek(attrs.getBoolean(R.styleable.UICalendar_showWeek, mShowWeek)); - setFirstDayOfWeek(attrs.getInt(R.styleable.UICalendar_firstDayOfWeek, mFirstDayOfWeek)); + int dayOfWeekValue = attrs.getInt(R.styleable.UICalendar_firstDayOfWeek, mFirstDayOfWeek.getValue()); + setFirstDayOfWeek(DayOfWeek.of(dayOfWeekValue)); setState(attrs.getInt(R.styleable.UICalendar_state, mState)); setTextColor(attrs.getColor(R.styleable.UICalendar_textColor, mTextColor)); setPrimaryColor(attrs.getColor(R.styleable.UICalendar_primaryColor, mPrimaryColor)); setEventColor(attrs.getColor(R.styleable.UICalendar_eventColor, mEventColor)); - + setEventDotSize(attrs.getInt(R.styleable.UICalendar_eventDotSize, mEventDotSize)); setTodayItemTextColor(attrs.getColor( R.styleable.UICalendar_todayItem_textColor, mTodayItemTextColor)); @@ -184,7 +175,7 @@ protected void setAttributes(TypedArray attrs) { setButtonLeftDrawableTintColor(attrs.getColor(R.styleable.UICalendar_buttonLeft_drawableTintColor,mButtonLeftDrawableTintColor)); setButtonRightDrawableTintColor(attrs.getColor(R.styleable.UICalendar_buttonRight_drawableTintColor,mButtonRightDrawableTintColor)); setExpandIconColor(attrs.getColor(R.styleable.UICalendar_expandIconColor,mExpandIconColor)); - Day selectedItem = null; + mSelectedItem = null; } public void setButtonLeftDrawableTintColor(int color){ @@ -221,11 +212,11 @@ public void setShowWeek(boolean showWeek) { } } - public int getFirstDayOfWeek() { + public DayOfWeek getFirstDayOfWeek() { return mFirstDayOfWeek; } - public void setFirstDayOfWeek(int firstDayOfWeek) { + public void setFirstDayOfWeek(DayOfWeek firstDayOfWeek) { this.mFirstDayOfWeek = firstDayOfWeek; reload(); } @@ -273,6 +264,17 @@ private void setEventColor(int eventColor) { this.mEventColor = eventColor; redraw(); + } + + private void setEventDotSize(int eventDotSize) { + this.mEventDotSize = eventDotSize; + redraw(); + + } + + public int getEventDotSize() { + return mEventDotSize; + } public int getEventColor() { return mEventColor; @@ -314,32 +316,24 @@ public void setSelectedItemBackgroundDrawable(Drawable selectedItemBackground) { redraw(); } - public Drawable getButtonLeftDrawable() { - return mButtonLeftDrawable; - } - public void setButtonLeftDrawable(Drawable buttonLeftDrawable) { this.mButtonLeftDrawable = buttonLeftDrawable; mBtnPrevMonth.setImageDrawable(buttonLeftDrawable); mBtnPrevWeek.setImageDrawable(buttonLeftDrawable); } - public Drawable getButtonRightDrawable() { - return mButtonRightDrawable; - } - public void setButtonRightDrawable(Drawable buttonRightDrawable) { this.mButtonRightDrawable = buttonRightDrawable; mBtnNextMonth.setImageDrawable(buttonRightDrawable); mBtnNextWeek.setImageDrawable(buttonRightDrawable); } - public Day getSelectedItem() { + public LocalDate getSelectedItem() { return mSelectedItem; } - public void setSelectedItem(Day selectedItem) { - this.mSelectedItem = selectedItem; + public void setSelectedItem(LocalDate selectedDate) { + this.mSelectedItem = selectedDate; } diff --git a/collapsiblecalendarview2/src/main/res/layout/day_layout.xml b/collapsiblecalendarview2/src/main/res/layout/day_layout.xml index b94b72e..7e01250 100644 --- a/collapsiblecalendarview2/src/main/res/layout/day_layout.xml +++ b/collapsiblecalendarview2/src/main/res/layout/day_layout.xml @@ -1,35 +1,43 @@ - - + android:paddingRight="5dp" + android:paddingBottom="2dp" + android:textColor="@android:color/black" + android:textSize="13sp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + - + - - \ No newline at end of file + \ No newline at end of file diff --git a/collapsiblecalendarview2/src/main/res/layout/day_layout_small.xml b/collapsiblecalendarview2/src/main/res/layout/day_layout_small.xml new file mode 100644 index 0000000..3338e21 --- /dev/null +++ b/collapsiblecalendarview2/src/main/res/layout/day_layout_small.xml @@ -0,0 +1,43 @@ + + + + + + + + + + \ No newline at end of file diff --git a/collapsiblecalendarview2/src/main/res/values/attrs.xml b/collapsiblecalendarview2/src/main/res/values/attrs.xml index 2caaecb..4523f0d 100644 --- a/collapsiblecalendarview2/src/main/res/values/attrs.xml +++ b/collapsiblecalendarview2/src/main/res/values/attrs.xml @@ -35,7 +35,10 @@ - + + + + diff --git a/gradle.properties b/gradle.properties index aac7c9b..9e6fce1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,6 +9,8 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. +android.enableJetifier=true +android.useAndroidX=true org.gradle.jvmargs=-Xmx1536m # When configured, Gradle will run in incubating parallel mode. diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 06e2a04..e556ab6 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Mar 06 20:01:26 IST 2018 +#Fri Nov 09 15:35:52 CET 2018 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip diff --git a/issue_template.md b/issue_template.md new file mode 100644 index 0000000..4647433 --- /dev/null +++ b/issue_template.md @@ -0,0 +1,5 @@ +## Issue title +### Expected behavior and actual behavior: +### Steps to reproduce the problem: +### Specifications (like the version of the project, operating system, or hardware): +### Screenshots: