diff --git a/app/build.gradle b/app/build.gradle
index ea4dafe..e788826 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -19,7 +19,12 @@ android {
}
dependencies {
+
+ implementation "androidx.appcompat:appcompat:$appCompat"
+ implementation "com.google.android.material:material:$material"
+
implementation project(":persiandatepicker")
+
}
repositories {
mavenCentral()
diff --git a/app/src/main/java/ir/hamsaa/MainActivity.java b/app/src/main/java/ir/hamsaa/MainActivity.java
index e4a8397..b69864e 100644
--- a/app/src/main/java/ir/hamsaa/MainActivity.java
+++ b/app/src/main/java/ir/hamsaa/MainActivity.java
@@ -10,12 +10,16 @@
import androidx.appcompat.app.AppCompatActivity;
+import java.text.ParseException;
+
import ir.hamsaa.persiandatepicker.Listener;
import ir.hamsaa.persiandatepicker.PersianDatePickerDialog;
import ir.hamsaa.persiandatepicker.api.PersianPickerDate;
import ir.hamsaa.persiandatepicker.api.PersianPickerListener;
+import ir.hamsaa.persiandatepicker.date.PersianDateFixedLeapYear;
import ir.hamsaa.persiandatepicker.date.PersianDateImpl;
import ir.hamsaa.persiandatepicker.util.PersianCalendar;
+import saman.zamani.persiandate.PersianDateFormat;
public class MainActivity extends AppCompatActivity {
@@ -28,6 +32,25 @@ public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
+
+
+ PersianDateFixedLeapYear persianDate = new PersianDateFixedLeapYear();
+ Log.d(TAG, "today: " + persianDate.getShDay());
+ persianDate.addDay(1);
+ Log.d(TAG, "tomorrow: " + persianDate.getShDay());
+
+
+ // format `persianDate`
+ Log.d(TAG, PersianDateFormat.format(persianDate, "Y/m/d"));
+
+ // format string persian date
+ try {
+ Log.d(TAG, PersianDateFormat.format(new PersianDateFormat("yyyy/MM/dd").parse("1401/03/16"), "y-m-d"));
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+
+
}
@@ -90,7 +113,6 @@ public void showCalendarInDarkMode(View v) {
.setPickerBackgroundDrawable(R.drawable.darkmode_bg)
.setTitleType(PersianDatePickerDialog.MONTH_YEAR)
.setShowDayPicker(false)
-
.setCancelable(false)
.setListener(new Listener() {
@Override
diff --git a/app/src/main/res/font/shabnam_light_fd.ttf b/app/src/main/res/font/shabnam_light_fd.ttf
new file mode 100644
index 0000000..38cd346
Binary files /dev/null and b/app/src/main/res/font/shabnam_light_fd.ttf differ
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 97328c2..92a5161 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,6 +1,7 @@
+
+
+
diff --git a/build.gradle b/build.gradle
index 1afece5..e6b114d 100644
--- a/build.gradle
+++ b/build.gradle
@@ -4,7 +4,7 @@ buildscript {
ext {
appCompat = '1.4.1'
material = '1.5.0'
- persianDate = '1.3.4'
+ persianDate = '1.5.0'
libraryMinSdk = 14
libraryTargetSdk = 31
@@ -15,7 +15,7 @@ buildscript {
mavenCentral()
}
dependencies {
- classpath 'com.android.tools.build:gradle:7.1.2'
+ classpath 'com.android.tools.build:gradle:7.1.3'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
diff --git a/persiandatepicker/build.gradle b/persiandatepicker/build.gradle
index 4cbee9e..d0fd22c 100644
--- a/persiandatepicker/build.gradle
+++ b/persiandatepicker/build.gradle
@@ -22,8 +22,7 @@ android {
}
dependencies {
- api "androidx.appcompat:appcompat:$appCompat"
- api "com.google.android.material:material:$material"
- implementation "com.github.samanzamani:PersianDate:$persianDate"
-
+ implementation "androidx.appcompat:appcompat:$appCompat"
+ implementation "com.google.android.material:material:$material"
+ api "com.github.samanzamani:PersianDate:$persianDate"
}
diff --git a/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/PersianDatePicker.java b/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/PersianDatePicker.java
index 4cad431..63993e2 100644
--- a/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/PersianDatePicker.java
+++ b/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/PersianDatePicker.java
@@ -16,6 +16,7 @@
import androidx.annotation.ColorInt;
import androidx.annotation.DrawableRes;
+import androidx.core.content.res.ResourcesCompat;
import java.util.Date;
@@ -27,7 +28,7 @@
import ir.hamsaa.persiandatepicker.view.PersianNumberPicker;
-class PersianDatePicker extends LinearLayout {
+public class PersianDatePicker extends LinearLayout {
private PersianPickerDate persianDate;
private int selectedMonth;
@@ -46,7 +47,7 @@ class PersianDatePicker extends LinearLayout {
private boolean displayDescription;
private final TextView descriptionTextView;
- private Typeface typeFace;
+ public static Typeface typeFace;
private int dividerColor;
private int yearRange;
@@ -61,6 +62,14 @@ public PersianDatePicker(Context context, AttributeSet attrs) {
public PersianDatePicker(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
+
+ TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.PersianDatePicker, 0, 0);
+ yearRange = a.getInteger(R.styleable.PersianDatePicker_yearRange, 10);
+
+ if (a.hasValue(R.styleable.PersianDatePicker_fontFamily))
+ typeFace = ResourcesCompat.getFont(context, a.getResourceId(R.styleable.PersianDatePicker_fontFamily, 0));
+
+
// inflate views
View view = LayoutInflater.from(context).inflate(R.layout.sl_persian_date_picker, this);
@@ -70,7 +79,6 @@ public PersianDatePicker(Context context, AttributeSet attrs, int defStyle) {
dayNumberPicker = view.findViewById(R.id.dayNumberPicker);
descriptionTextView = view.findViewById(R.id.descriptionTextView);
-
yearNumberPicker.setFormatter(new NumberPicker.Formatter() {
@Override
public String format(int i) {
@@ -95,17 +103,6 @@ public String format(int i) {
// init calendar
persianDate = new PersianDateImpl();
- // update variables from xml
- updateVariablesFromXml(context, attrs);
-
- // update view
- updateViewData();
- }
-
- private void updateVariablesFromXml(Context context, AttributeSet attrs) {
-
- TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.PersianDatePicker, 0, 0);
- yearRange = a.getInteger(R.styleable.PersianDatePicker_yearRange, 10);
/*
* Initializing yearNumberPicker min and max values If minYear and
* maxYear attributes are not set, use (current year - 10) as min and
@@ -131,6 +128,14 @@ private void updateVariablesFromXml(Context context, AttributeSet attrs) {
maxYear = selectedYear + yearRange;
}
+ if (a.hasValue(R.styleable.PersianDatePicker_background))
+ setBackgroundDrawable(a.getResourceId(R.styleable.PersianDatePicker_background, 0));
+ if (a.hasValue(R.styleable.PersianDatePicker_backgroundColor))
+ setBackgroundColor(a.getColor(R.styleable.PersianDatePicker_backgroundColor, 0));
+
+ // update view
+ updateViewData();
+
a.recycle();
}
@@ -216,11 +221,11 @@ private void updateViewData() {
dayNumberPicker.setTypeFace(typeFace);
}
- if (dividerColor > 0) {
- setDividerColor(yearNumberPicker, dividerColor);
- setDividerColor(monthNumberPicker, dividerColor);
- setDividerColor(dayNumberPicker, dividerColor);
- }
+
+ setDividerColor(yearNumberPicker, dividerColor);
+ setDividerColor(monthNumberPicker, dividerColor);
+ setDividerColor(dayNumberPicker, dividerColor);
+
yearNumberPicker.setMinValue(minYear);
yearNumberPicker.setMaxValue(maxYear);
diff --git a/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/api/PersianPickerDate.java b/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/api/PersianPickerDate.java
index 7cc4e23..6bf68e4 100644
--- a/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/api/PersianPickerDate.java
+++ b/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/api/PersianPickerDate.java
@@ -2,6 +2,8 @@
import java.util.Date;
+import ir.hamsaa.persiandatepicker.date.PersianDateFixedLeapYear;
+
public interface PersianPickerDate {
void setDate(Long timestamp);
@@ -10,6 +12,8 @@ public interface PersianPickerDate {
void setDate(int persianYear, int persianMonth, int persianDay);
+ PersianDateFixedLeapYear getPersianDate();
+
int getPersianYear();
int getPersianMonth();
diff --git a/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/date/PersianDateImpl.java b/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/date/PersianDateImpl.java
index 4268a08..22e5d76 100644
--- a/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/date/PersianDateImpl.java
+++ b/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/date/PersianDateImpl.java
@@ -33,6 +33,11 @@ public void setDate(int persianYear, int persianMonth, int persianDay) {
}
}
+ @Override
+ public PersianDateFixedLeapYear getPersianDate() {
+ return persianDate;
+ }
+
@Override
public int getPersianYear() {
return persianDate.getShYear();
diff --git a/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/util/PersianDateHelper.java b/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/util/PersianDateHelper.java
new file mode 100644
index 0000000..8e1814a
--- /dev/null
+++ b/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/util/PersianDateHelper.java
@@ -0,0 +1,66 @@
+package ir.hamsaa.persiandatepicker.util;
+
+import java.text.ParseException;
+
+import saman.zamani.persiandate.PersianDate;
+import saman.zamani.persiandate.PersianDateFormat;
+
+public class PersianDateHelper {
+
+ static public boolean isValidDate(String date) {
+ try {
+ return !parseAndFormatDate(date).isEmpty();
+ } catch (Throwable ignore) {
+
+ }
+ return false;
+ }
+
+ static public PersianDate parseDate(String date) {
+ return parseDateTime(date, "yyyy/MM/dd");
+ }
+
+ static public PersianDate parseTime(String date) {
+ return parseDateTime(date, "HH:mm:ss");
+ }
+
+ static public PersianDate parseDateTime(String datetime) {
+ return parseDateTime(datetime, "yyyy/MM/dd HH:mm:ss");
+ }
+
+ static public PersianDate parseDateTime(String date, String pattern) {
+ try {
+ return new PersianDateFormat(pattern).parse(date);
+ } catch (ParseException ignore) {
+ }
+ return null;
+ }
+
+ static public String parseAndFormatDate(String date) {
+ try {
+ return PersianDateFormat.format(parseDate(date), "Y/m/d");
+ } catch (Throwable ignore) {
+
+ }
+ return "";
+ }
+
+ static public String formatDate(PersianDate date) {
+ try {
+ return PersianDateFormat.format(date, "Y/m/d");
+ } catch (Throwable ignore) {
+
+ }
+ return "";
+ }
+
+ static public String formatTime(PersianDate time) {
+ try {
+ return PersianDateFormat.format(time, "H:i:s");
+ } catch (Throwable ignore) {
+
+ }
+ return "";
+ }
+
+}
diff --git a/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/view/PersianNumberPicker.java b/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/view/PersianNumberPicker.java
index 9fc7b12..631e705 100644
--- a/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/view/PersianNumberPicker.java
+++ b/persiandatepicker/src/main/java/ir/hamsaa/persiandatepicker/view/PersianNumberPicker.java
@@ -11,6 +11,7 @@
import java.util.ArrayList;
import java.util.List;
+import ir.hamsaa.persiandatepicker.PersianDatePicker;
import ir.hamsaa.persiandatepicker.PersianDatePickerDialog;
/**
@@ -61,6 +62,8 @@ private void updateView(View view) {
if (view instanceof TextView) {
if (PersianDatePickerDialog.typeFace != null)
((TextView) view).setTypeface(PersianDatePickerDialog.typeFace);
+ if (PersianDatePicker.typeFace != null)
+ ((TextView) view).setTypeface(PersianDatePicker.typeFace);
}
}
diff --git a/persiandatepicker/src/main/res/values/attrs.xml b/persiandatepicker/src/main/res/values/attrs.xml
index e157b3e..e5d4175 100644
--- a/persiandatepicker/src/main/res/values/attrs.xml
+++ b/persiandatepicker/src/main/res/values/attrs.xml
@@ -10,7 +10,11 @@
+
+
+
+
\ No newline at end of file