mirror of
https://github.com/MGislv/NekoX.git
synced 2024-07-04 11:13:36 +00:00
Add jalali calendar
This commit is contained in:
parent
02a151f3d6
commit
f2379ef9f8
|
@ -141,6 +141,7 @@ import java.util.regex.Pattern;
|
||||||
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.core.util.StrUtil;
|
||||||
import kotlin.Unit;
|
import kotlin.Unit;
|
||||||
import tw.nekomimi.nekogram.BottomBuilder;
|
import tw.nekomimi.nekogram.BottomBuilder;
|
||||||
|
import tw.nekomimi.nekogram.JalaliCalendar;
|
||||||
import tw.nekomimi.nekogram.NekoConfig;
|
import tw.nekomimi.nekogram.NekoConfig;
|
||||||
import tw.nekomimi.nekogram.NekoXConfig;
|
import tw.nekomimi.nekogram.NekoXConfig;
|
||||||
import tw.nekomimi.nekogram.utils.AlertUtil;
|
import tw.nekomimi.nekogram.utils.AlertUtil;
|
||||||
|
@ -848,7 +849,7 @@ public class AndroidUtilities {
|
||||||
if (date.length > 0) {
|
if (date.length > 0) {
|
||||||
date = date[0].split("-");
|
date = date[0].split("-");
|
||||||
if (date.length == 3) {
|
if (date.length == 3) {
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
calendar.set(Calendar.YEAR, Utilities.parseInt(date[0]));
|
calendar.set(Calendar.YEAR, Utilities.parseInt(date[0]));
|
||||||
calendar.set(Calendar.MONTH, Utilities.parseInt(date[1]) - 1);
|
calendar.set(Calendar.MONTH, Utilities.parseInt(date[1]) - 1);
|
||||||
calendar.set(Calendar.DAY_OF_MONTH, Utilities.parseInt(date[2]));
|
calendar.set(Calendar.DAY_OF_MONTH, Utilities.parseInt(date[2]));
|
||||||
|
|
|
@ -43,6 +43,7 @@ import java.util.HashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.TimeZone;
|
import java.util.TimeZone;
|
||||||
|
|
||||||
|
import tw.nekomimi.nekogram.JalaliCalendar;
|
||||||
import tw.nekomimi.nekogram.NekoConfig;
|
import tw.nekomimi.nekogram.NekoConfig;
|
||||||
import tw.nekomimi.nekogram.utils.FileUtil;
|
import tw.nekomimi.nekogram.utils.FileUtil;
|
||||||
|
|
||||||
|
@ -1355,7 +1356,7 @@ public class LocaleController {
|
||||||
|
|
||||||
public static String formatDateChat(long date, boolean checkYear) {
|
public static String formatDateChat(long date, boolean checkYear) {
|
||||||
try {
|
try {
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
calendar.setTimeInMillis(System.currentTimeMillis());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
int currentYear = calendar.get(Calendar.YEAR);
|
int currentYear = calendar.get(Calendar.YEAR);
|
||||||
date *= 1000;
|
date *= 1000;
|
||||||
|
@ -1374,7 +1375,7 @@ public class LocaleController {
|
||||||
public static String formatDate(long date) {
|
public static String formatDate(long date) {
|
||||||
try {
|
try {
|
||||||
date *= 1000;
|
date *= 1000;
|
||||||
Calendar rightNow = Calendar.getInstance();
|
Calendar rightNow = JalaliCalendar.mInstance();
|
||||||
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
||||||
int year = rightNow.get(Calendar.YEAR);
|
int year = rightNow.get(Calendar.YEAR);
|
||||||
rightNow.setTimeInMillis(date);
|
rightNow.setTimeInMillis(date);
|
||||||
|
@ -1399,7 +1400,7 @@ public class LocaleController {
|
||||||
public static String formatDateAudio(long date, boolean shortFormat) {
|
public static String formatDateAudio(long date, boolean shortFormat) {
|
||||||
try {
|
try {
|
||||||
date *= 1000;
|
date *= 1000;
|
||||||
Calendar rightNow = Calendar.getInstance();
|
Calendar rightNow = JalaliCalendar.mInstance();
|
||||||
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
||||||
int year = rightNow.get(Calendar.YEAR);
|
int year = rightNow.get(Calendar.YEAR);
|
||||||
rightNow.setTimeInMillis(date);
|
rightNow.setTimeInMillis(date);
|
||||||
|
@ -1428,7 +1429,7 @@ public class LocaleController {
|
||||||
public static String formatDateCallLog(long date) {
|
public static String formatDateCallLog(long date) {
|
||||||
try {
|
try {
|
||||||
date *= 1000;
|
date *= 1000;
|
||||||
Calendar rightNow = Calendar.getInstance();
|
Calendar rightNow = JalaliCalendar.mInstance();
|
||||||
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
||||||
int year = rightNow.get(Calendar.YEAR);
|
int year = rightNow.get(Calendar.YEAR);
|
||||||
rightNow.setTimeInMillis(date);
|
rightNow.setTimeInMillis(date);
|
||||||
|
@ -1453,7 +1454,7 @@ public class LocaleController {
|
||||||
public static String formatLocationUpdateDate(long date) {
|
public static String formatLocationUpdateDate(long date) {
|
||||||
try {
|
try {
|
||||||
date *= 1000;
|
date *= 1000;
|
||||||
Calendar rightNow = Calendar.getInstance();
|
Calendar rightNow = JalaliCalendar.mInstance();
|
||||||
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
||||||
int year = rightNow.get(Calendar.YEAR);
|
int year = rightNow.get(Calendar.YEAR);
|
||||||
rightNow.setTimeInMillis(date);
|
rightNow.setTimeInMillis(date);
|
||||||
|
@ -1502,7 +1503,7 @@ public class LocaleController {
|
||||||
public static String formatDateOnline(long date) {
|
public static String formatDateOnline(long date) {
|
||||||
try {
|
try {
|
||||||
date *= 1000;
|
date *= 1000;
|
||||||
Calendar rightNow = Calendar.getInstance();
|
Calendar rightNow = JalaliCalendar.mInstance();
|
||||||
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
||||||
int year = rightNow.get(Calendar.YEAR);
|
int year = rightNow.get(Calendar.YEAR);
|
||||||
rightNow.setTimeInMillis(date);
|
rightNow.setTimeInMillis(date);
|
||||||
|
@ -1537,7 +1538,7 @@ public class LocaleController {
|
||||||
public static String formatDateJoined(long date) {
|
public static String formatDateJoined(long date) {
|
||||||
try {
|
try {
|
||||||
date *= 1000;
|
date *= 1000;
|
||||||
Calendar rightNow = Calendar.getInstance();
|
Calendar rightNow = JalaliCalendar.mInstance();
|
||||||
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
||||||
int year = rightNow.get(Calendar.YEAR);
|
int year = rightNow.get(Calendar.YEAR);
|
||||||
rightNow.setTimeInMillis(date);
|
rightNow.setTimeInMillis(date);
|
||||||
|
@ -1616,7 +1617,7 @@ public class LocaleController {
|
||||||
public static String formatSectionDate(long date) {
|
public static String formatSectionDate(long date) {
|
||||||
try {
|
try {
|
||||||
date *= 1000;
|
date *= 1000;
|
||||||
Calendar rightNow = Calendar.getInstance();
|
Calendar rightNow = JalaliCalendar.mInstance();
|
||||||
int year = rightNow.get(Calendar.YEAR);
|
int year = rightNow.get(Calendar.YEAR);
|
||||||
rightNow.setTimeInMillis(date);
|
rightNow.setTimeInMillis(date);
|
||||||
int dateYear = rightNow.get(Calendar.YEAR);
|
int dateYear = rightNow.get(Calendar.YEAR);
|
||||||
|
@ -1650,7 +1651,7 @@ public class LocaleController {
|
||||||
public static String formatDateForBan(long date) {
|
public static String formatDateForBan(long date) {
|
||||||
try {
|
try {
|
||||||
date *= 1000;
|
date *= 1000;
|
||||||
Calendar rightNow = Calendar.getInstance();
|
Calendar rightNow = JalaliCalendar.mInstance();
|
||||||
int year = rightNow.get(Calendar.YEAR);
|
int year = rightNow.get(Calendar.YEAR);
|
||||||
rightNow.setTimeInMillis(date);
|
rightNow.setTimeInMillis(date);
|
||||||
int dateYear = rightNow.get(Calendar.YEAR);
|
int dateYear = rightNow.get(Calendar.YEAR);
|
||||||
|
@ -1669,7 +1670,7 @@ public class LocaleController {
|
||||||
public static String stringForMessageListDate(long date) {
|
public static String stringForMessageListDate(long date) {
|
||||||
try {
|
try {
|
||||||
date *= 1000;
|
date *= 1000;
|
||||||
Calendar rightNow = Calendar.getInstance();
|
Calendar rightNow = JalaliCalendar.mInstance();
|
||||||
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
int day = rightNow.get(Calendar.DAY_OF_YEAR);
|
||||||
rightNow.setTimeInMillis(date);
|
rightNow.setTimeInMillis(date);
|
||||||
int dateDay = rightNow.get(Calendar.DAY_OF_YEAR);
|
int dateDay = rightNow.get(Calendar.DAY_OF_YEAR);
|
||||||
|
|
|
@ -32,6 +32,9 @@ import java.util.TimeZone;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
|
||||||
|
import tw.nekomimi.nekogram.JalaliCalendar;
|
||||||
|
import tw.nekomimi.nekogram.NekoConfig;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <p>FastDatePrinter is a fast and thread-safe version of
|
* <p>FastDatePrinter is a fast and thread-safe version of
|
||||||
* {@link java.text.SimpleDateFormat}.</p>
|
* {@link java.text.SimpleDateFormat}.</p>
|
||||||
|
@ -429,8 +432,10 @@ public class FastDatePrinter implements DatePrinter, Serializable {
|
||||||
*
|
*
|
||||||
* @return a new Calendar instance.
|
* @return a new Calendar instance.
|
||||||
*/
|
*/
|
||||||
private GregorianCalendar newCalendar() {
|
private Calendar newCalendar() {
|
||||||
// hard code GregorianCalendar
|
if (NekoConfig.usePersianCalender) {
|
||||||
|
return new JalaliCalendar(mTimeZone, mLocale);
|
||||||
|
}
|
||||||
return new GregorianCalendar(mTimeZone, mLocale);
|
return new GregorianCalendar(mTimeZone, mLocale);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -116,6 +116,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import tw.nekomimi.nekogram.JalaliCalendar;
|
||||||
import tw.nekomimi.nekogram.NekoConfig;
|
import tw.nekomimi.nekogram.NekoConfig;
|
||||||
import tw.nekomimi.nekogram.NekoXConfig;
|
import tw.nekomimi.nekogram.NekoXConfig;
|
||||||
import tw.nekomimi.nekogram.utils.AlertUtil;
|
import tw.nekomimi.nekogram.utils.AlertUtil;
|
||||||
|
@ -962,13 +963,13 @@ public class ChannelAdminLogActivity extends BaseFragment implements Notificatio
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
AndroidUtilities.hideKeyboard(searchItem.getSearchField());
|
AndroidUtilities.hideKeyboard(searchItem.getSearchField());
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
int year = calendar.get(Calendar.YEAR);
|
int year = calendar.get(Calendar.YEAR);
|
||||||
int monthOfYear = calendar.get(Calendar.MONTH);
|
int monthOfYear = calendar.get(Calendar.MONTH);
|
||||||
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
|
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
|
||||||
try {
|
try {
|
||||||
DatePickerDialog dialog = new DatePickerDialog(getParentActivity(), (view1, year1, month, dayOfMonth1) -> {
|
DatePickerDialog dialog = new DatePickerDialog(getParentActivity(), (view1, year1, month, dayOfMonth1) -> {
|
||||||
Calendar calendar1 = Calendar.getInstance();
|
Calendar calendar1 = JalaliCalendar.mInstance();
|
||||||
calendar1.clear();
|
calendar1.clear();
|
||||||
calendar1.set(year1, month, dayOfMonth1);
|
calendar1.set(year1, month, dayOfMonth1);
|
||||||
int date = (int) (calendar1.getTime().getTime() / 1000);
|
int date = (int) (calendar1.getTime().getTime() / 1000);
|
||||||
|
|
|
@ -207,6 +207,7 @@ import org.telegram.ui.Components.URLSpanUserMention;
|
||||||
import org.telegram.ui.Components.UndoView;
|
import org.telegram.ui.Components.UndoView;
|
||||||
import org.telegram.ui.Components.voip.VoIPHelper;
|
import org.telegram.ui.Components.voip.VoIPHelper;
|
||||||
|
|
||||||
|
import tw.nekomimi.nekogram.JalaliCalendar;
|
||||||
import tw.nekomimi.nekogram.MessageDetailsActivity;
|
import tw.nekomimi.nekogram.MessageDetailsActivity;
|
||||||
import tw.nekomimi.nekogram.MessageHelper;
|
import tw.nekomimi.nekogram.MessageHelper;
|
||||||
import tw.nekomimi.nekogram.NekoConfig;
|
import tw.nekomimi.nekogram.NekoConfig;
|
||||||
|
@ -4060,7 +4061,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
if (floatingDateView.getAlpha() == 0 || actionBar.isActionModeShowed()) {
|
if (floatingDateView.getAlpha() == 0 || actionBar.isActionModeShowed()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
calendar.setTimeInMillis((long) floatingDateView.getCustomDate() * 1000);
|
calendar.setTimeInMillis((long) floatingDateView.getCustomDate() * 1000);
|
||||||
int year = calendar.get(Calendar.YEAR);
|
int year = calendar.get(Calendar.YEAR);
|
||||||
int monthOfYear = calendar.get(Calendar.MONTH);
|
int monthOfYear = calendar.get(Calendar.MONTH);
|
||||||
|
@ -4076,13 +4077,13 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
AndroidUtilities.hideKeyboard(searchItem.getSearchField());
|
AndroidUtilities.hideKeyboard(searchItem.getSearchField());
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
int year = calendar.get(Calendar.YEAR);
|
int year = calendar.get(Calendar.YEAR);
|
||||||
int monthOfYear = calendar.get(Calendar.MONTH);
|
int monthOfYear = calendar.get(Calendar.MONTH);
|
||||||
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
|
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
|
||||||
try {
|
try {
|
||||||
DatePickerDialog dialog = new DatePickerDialog(getParentActivity(), (view1, year1, month, dayOfMonth1) -> {
|
DatePickerDialog dialog = new DatePickerDialog(getParentActivity(), (view1, year1, month, dayOfMonth1) -> {
|
||||||
Calendar calendar1 = Calendar.getInstance();
|
Calendar calendar1 = JalaliCalendar.mInstance();
|
||||||
calendar1.clear();
|
calendar1.clear();
|
||||||
calendar1.set(year1, month, dayOfMonth1);
|
calendar1.set(year1, month, dayOfMonth1);
|
||||||
int date = (int) (calendar1.getTime().getTime() / 1000);
|
int date = (int) (calendar1.getTime().getTime() / 1000);
|
||||||
|
@ -5766,13 +5767,13 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
AndroidUtilities.hideKeyboard(searchItem.getSearchField());
|
AndroidUtilities.hideKeyboard(searchItem.getSearchField());
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
int year = calendar.get(Calendar.YEAR);
|
int year = calendar.get(Calendar.YEAR);
|
||||||
int monthOfYear = calendar.get(Calendar.MONTH);
|
int monthOfYear = calendar.get(Calendar.MONTH);
|
||||||
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
|
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
|
||||||
try {
|
try {
|
||||||
DatePickerDialog dialog = new DatePickerDialog(getParentActivity(), (view1, year1, month, dayOfMonth1) -> {
|
DatePickerDialog dialog = new DatePickerDialog(getParentActivity(), (view1, year1, month, dayOfMonth1) -> {
|
||||||
Calendar calendar1 = Calendar.getInstance();
|
Calendar calendar1 = JalaliCalendar.mInstance();
|
||||||
calendar1.clear();
|
calendar1.clear();
|
||||||
calendar1.set(year1, month, dayOfMonth1);
|
calendar1.set(year1, month, dayOfMonth1);
|
||||||
int date = (int) (calendar1.getTime().getTime() / 1000);
|
int date = (int) (calendar1.getTime().getTime() / 1000);
|
||||||
|
@ -10337,7 +10338,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
dateMsg.message = LocaleController.formatDateChat(obj.messageOwner.date);
|
dateMsg.message = LocaleController.formatDateChat(obj.messageOwner.date);
|
||||||
}
|
}
|
||||||
dateMsg.id = 0;
|
dateMsg.id = 0;
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
calendar.setTimeInMillis(((long) obj.messageOwner.date) * 1000);
|
calendar.setTimeInMillis(((long) obj.messageOwner.date) * 1000);
|
||||||
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
calendar.set(Calendar.MINUTE, 0);
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
|
@ -11231,7 +11232,7 @@ public class ChatActivity extends BaseFragment implements NotificationCenter.Not
|
||||||
dateMsg.message = LocaleController.formatDateChat(obj.messageOwner.date);
|
dateMsg.message = LocaleController.formatDateChat(obj.messageOwner.date);
|
||||||
}
|
}
|
||||||
dateMsg.id = 0;
|
dateMsg.id = 0;
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
calendar.setTimeInMillis(((long) obj.messageOwner.date) * 1000);
|
calendar.setTimeInMillis(((long) obj.messageOwner.date) * 1000);
|
||||||
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
calendar.set(Calendar.HOUR_OF_DAY, 0);
|
||||||
calendar.set(Calendar.MINUTE, 0);
|
calendar.set(Calendar.MINUTE, 0);
|
||||||
|
|
|
@ -69,6 +69,8 @@ import androidx.recyclerview.widget.DefaultItemAnimator;
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager;
|
import androidx.recyclerview.widget.LinearLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
import androidx.recyclerview.widget.RecyclerView;
|
||||||
|
|
||||||
|
import tw.nekomimi.nekogram.JalaliCalendar;
|
||||||
|
|
||||||
public class ChatRightsEditActivity extends BaseFragment {
|
public class ChatRightsEditActivity extends BaseFragment {
|
||||||
|
|
||||||
private ListAdapter listViewAdapter;
|
private ListAdapter listViewAdapter;
|
||||||
|
@ -412,13 +414,13 @@ public class ChatRightsEditActivity extends BaseFragment {
|
||||||
listViewAdapter.notifyItemChanged(untilDateRow);
|
listViewAdapter.notifyItemChanged(untilDateRow);
|
||||||
break;
|
break;
|
||||||
case 4: {
|
case 4: {
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
int year = calendar.get(Calendar.YEAR);
|
int year = calendar.get(Calendar.YEAR);
|
||||||
int monthOfYear = calendar.get(Calendar.MONTH);
|
int monthOfYear = calendar.get(Calendar.MONTH);
|
||||||
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
|
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
|
||||||
try {
|
try {
|
||||||
DatePickerDialog dialog = new DatePickerDialog(getParentActivity(), (view1, year1, month, dayOfMonth1) -> {
|
DatePickerDialog dialog = new DatePickerDialog(getParentActivity(), (view1, year1, month, dayOfMonth1) -> {
|
||||||
Calendar calendar1 = Calendar.getInstance();
|
Calendar calendar1 = JalaliCalendar.mInstance();
|
||||||
calendar1.clear();
|
calendar1.clear();
|
||||||
calendar1.set(year1, month, dayOfMonth1);
|
calendar1.set(year1, month, dayOfMonth1);
|
||||||
final int time = (int) (calendar1.getTime().getTime() / 1000);
|
final int time = (int) (calendar1.getTime().getTime() / 1000);
|
||||||
|
@ -439,7 +441,7 @@ public class ChatRightsEditActivity extends BaseFragment {
|
||||||
|
|
||||||
final DatePicker datePicker = dialog.getDatePicker();
|
final DatePicker datePicker = dialog.getDatePicker();
|
||||||
|
|
||||||
Calendar date = Calendar.getInstance();
|
Calendar date = JalaliCalendar.mInstance();
|
||||||
date.setTimeInMillis(System.currentTimeMillis());
|
date.setTimeInMillis(System.currentTimeMillis());
|
||||||
date.set(Calendar.HOUR_OF_DAY, date.getMinimum(Calendar.HOUR_OF_DAY));
|
date.set(Calendar.HOUR_OF_DAY, date.getMinimum(Calendar.HOUR_OF_DAY));
|
||||||
date.set(Calendar.MINUTE, date.getMinimum(Calendar.MINUTE));
|
date.set(Calendar.MINUTE, date.getMinimum(Calendar.MINUTE));
|
||||||
|
|
|
@ -93,6 +93,7 @@ import java.util.concurrent.CountDownLatch;
|
||||||
|
|
||||||
import kotlin.Unit;
|
import kotlin.Unit;
|
||||||
import tw.nekomimi.nekogram.BottomBuilder;
|
import tw.nekomimi.nekogram.BottomBuilder;
|
||||||
|
import tw.nekomimi.nekogram.JalaliCalendar;
|
||||||
|
|
||||||
public class AlertsCreator {
|
public class AlertsCreator {
|
||||||
|
|
||||||
|
@ -775,7 +776,7 @@ public class AlertsCreator {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void updateDayPicker(NumberPicker dayPicker, NumberPicker monthPicker, NumberPicker yearPicker) {
|
private static void updateDayPicker(NumberPicker dayPicker, NumberPicker monthPicker, NumberPicker yearPicker) {
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
calendar.set(Calendar.MONTH, monthPicker.getValue());
|
calendar.set(Calendar.MONTH, monthPicker.getValue());
|
||||||
calendar.set(Calendar.YEAR, yearPicker.getValue());
|
calendar.set(Calendar.YEAR, yearPicker.getValue());
|
||||||
dayPicker.setMinValue(1);
|
dayPicker.setMinValue(1);
|
||||||
|
@ -783,7 +784,7 @@ public class AlertsCreator {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void checkPickerDate(NumberPicker dayPicker, NumberPicker monthPicker, NumberPicker yearPicker) {
|
private static void checkPickerDate(NumberPicker dayPicker, NumberPicker monthPicker, NumberPicker yearPicker) {
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
calendar.setTimeInMillis(System.currentTimeMillis());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
|
|
||||||
int currentYear = calendar.get(Calendar.YEAR);
|
int currentYear = calendar.get(Calendar.YEAR);
|
||||||
|
@ -1317,7 +1318,7 @@ public class AlertsCreator {
|
||||||
monthPicker.setMaxValue(11);
|
monthPicker.setMaxValue(11);
|
||||||
linearLayout.addView(monthPicker, LayoutHelper.createLinear(0, LayoutHelper.WRAP_CONTENT, 0.3f));
|
linearLayout.addView(monthPicker, LayoutHelper.createLinear(0, LayoutHelper.WRAP_CONTENT, 0.3f));
|
||||||
monthPicker.setFormatter(value -> {
|
monthPicker.setFormatter(value -> {
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
calendar.set(Calendar.DAY_OF_MONTH, 1);
|
calendar.set(Calendar.DAY_OF_MONTH, 1);
|
||||||
calendar.set(Calendar.MONTH, value);
|
calendar.set(Calendar.MONTH, value);
|
||||||
return calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.getDefault());
|
return calendar.getDisplayName(Calendar.MONTH, Calendar.SHORT, Locale.getDefault());
|
||||||
|
@ -1329,7 +1330,7 @@ public class AlertsCreator {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
calendar.setTimeInMillis(System.currentTimeMillis());
|
calendar.setTimeInMillis(System.currentTimeMillis());
|
||||||
final int currentYear = calendar.get(Calendar.YEAR);
|
final int currentYear = calendar.get(Calendar.YEAR);
|
||||||
yearPicker.setMinValue(currentYear + minYear);
|
yearPicker.setMinValue(currentYear + minYear);
|
||||||
|
@ -1372,7 +1373,7 @@ public class AlertsCreator {
|
||||||
int hour = hourPicker.getValue();
|
int hour = hourPicker.getValue();
|
||||||
int minute = minutePicker.getValue();
|
int minute = minutePicker.getValue();
|
||||||
|
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
long systemTime = System.currentTimeMillis();
|
long systemTime = System.currentTimeMillis();
|
||||||
calendar.setTimeInMillis(systemTime);
|
calendar.setTimeInMillis(systemTime);
|
||||||
int currentYear = calendar.get(Calendar.YEAR);
|
int currentYear = calendar.get(Calendar.YEAR);
|
||||||
|
@ -1527,7 +1528,7 @@ public class AlertsCreator {
|
||||||
container.addView(linearLayout, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
container.addView(linearLayout, LayoutHelper.createLinear(LayoutHelper.MATCH_PARENT, LayoutHelper.WRAP_CONTENT));
|
||||||
|
|
||||||
long currentTime = System.currentTimeMillis();
|
long currentTime = System.currentTimeMillis();
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
calendar.setTimeInMillis(currentTime);
|
calendar.setTimeInMillis(currentTime);
|
||||||
int currentYear = calendar.get(Calendar.YEAR);
|
int currentYear = calendar.get(Calendar.YEAR);
|
||||||
|
|
||||||
|
|
|
@ -140,6 +140,8 @@ import java.util.TimerTask;
|
||||||
|
|
||||||
import javax.crypto.Cipher;
|
import javax.crypto.Cipher;
|
||||||
|
|
||||||
|
import tw.nekomimi.nekogram.JalaliCalendar;
|
||||||
|
|
||||||
public class PassportActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate {
|
public class PassportActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate {
|
||||||
|
|
||||||
public final static int TYPE_REQUEST = 0;
|
public final static int TYPE_REQUEST = 0;
|
||||||
|
@ -4172,7 +4174,7 @@ public class PassportActivity extends BaseFragment implements NotificationCenter
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (event.getAction() == MotionEvent.ACTION_UP) {
|
if (event.getAction() == MotionEvent.ACTION_UP) {
|
||||||
Calendar calendar = Calendar.getInstance();
|
Calendar calendar = JalaliCalendar.mInstance();
|
||||||
int year = calendar.get(Calendar.YEAR);
|
int year = calendar.get(Calendar.YEAR);
|
||||||
int monthOfYear = calendar.get(Calendar.MONTH);
|
int monthOfYear = calendar.get(Calendar.MONTH);
|
||||||
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
|
int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
|
||||||
|
|
|
@ -113,6 +113,8 @@ import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
import tw.nekomimi.nekogram.JalaliCalendar;
|
||||||
|
|
||||||
public class PaymentFormActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate {
|
public class PaymentFormActivity extends BaseFragment implements NotificationCenter.NotificationCenterDelegate {
|
||||||
|
|
||||||
private final static int FIELD_CARD = 0;
|
private final static int FIELD_CARD = 0;
|
||||||
|
@ -1390,7 +1392,7 @@ public class PaymentFormActivity extends BaseFragment implements NotificationCen
|
||||||
if (builder.length() == 4 && args.length == 2) {
|
if (builder.length() == 4 && args.length == 2) {
|
||||||
int month = Utilities.parseInt(args[0]);
|
int month = Utilities.parseInt(args[0]);
|
||||||
int year = Utilities.parseInt(args[1]) + 2000;
|
int year = Utilities.parseInt(args[1]) + 2000;
|
||||||
Calendar rightNow = Calendar.getInstance();
|
Calendar rightNow = JalaliCalendar.mInstance();
|
||||||
int currentYear = rightNow.get(Calendar.YEAR);
|
int currentYear = rightNow.get(Calendar.YEAR);
|
||||||
int currentMonth = rightNow.get(Calendar.MONTH) + 1;
|
int currentMonth = rightNow.get(Calendar.MONTH) + 1;
|
||||||
if (year < currentYear || year == currentYear && month < currentMonth) {
|
if (year < currentYear || year == currentYear && month < currentMonth) {
|
||||||
|
|
|
@ -0,0 +1,818 @@
|
||||||
|
package tw.nekomimi.nekogram;
|
||||||
|
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.GregorianCalendar;
|
||||||
|
import java.util.Locale;
|
||||||
|
import java.util.TimeZone;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* https://github.com/amirmehdizadeh/JalaliCalendar
|
||||||
|
*/
|
||||||
|
public class JalaliCalendar extends Calendar {
|
||||||
|
|
||||||
|
public static Calendar mInstance() {
|
||||||
|
|
||||||
|
if (NekoConfig.usePersianCalender) return new JalaliCalendar();
|
||||||
|
|
||||||
|
return Calendar.getInstance();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int gregorianDaysInMonth[] = {31, 28, 31, 30, 31,
|
||||||
|
30, 31, 31, 30, 31, 30, 31};
|
||||||
|
public static int jalaliDaysInMonth[] = {31, 31, 31, 31, 31, 31,
|
||||||
|
30, 30, 30, 30, 30, 29};
|
||||||
|
|
||||||
|
public final static int FARVARDIN = 0;
|
||||||
|
public final static int ORDIBEHESHT = 1;
|
||||||
|
public final static int KHORDAD = 2;
|
||||||
|
public final static int TIR = 3;
|
||||||
|
public final static int MORDAD = 4;
|
||||||
|
public final static int SHAHRIVAR = 5;
|
||||||
|
public final static int MEHR = 6;
|
||||||
|
public final static int ABAN = 7;
|
||||||
|
public final static int AZAR = 8;
|
||||||
|
public final static int DEY = 9;
|
||||||
|
public final static int BAHMAN = 10;
|
||||||
|
public final static int ESFAND = 11;
|
||||||
|
|
||||||
|
private static TimeZone timeZone = TimeZone.getDefault();
|
||||||
|
private static boolean isTimeSeted = false;
|
||||||
|
|
||||||
|
private static final int ONE_SECOND = 1000;
|
||||||
|
private static final int ONE_MINUTE = 60 * ONE_SECOND;
|
||||||
|
private static final int ONE_HOUR = 60 * ONE_MINUTE;
|
||||||
|
private static final long ONE_DAY = 24 * ONE_HOUR;
|
||||||
|
static final int BCE = 0;
|
||||||
|
static final int CE = 1;
|
||||||
|
public static final int AD = 1;
|
||||||
|
private GregorianCalendar cal;
|
||||||
|
|
||||||
|
static final int MIN_VALUES[] = {
|
||||||
|
BCE, // ERA
|
||||||
|
1, // YEAR
|
||||||
|
FARVARDIN, // MONTH
|
||||||
|
1, // WEEK_OF_YEAR
|
||||||
|
0, // WEEK_OF_MONTH
|
||||||
|
1, // DAY_OF_MONTH
|
||||||
|
1, // DAY_OF_YEAR
|
||||||
|
SATURDAY, // DAY_OF_WEEK
|
||||||
|
1, // DAY_OF_WEEK_IN_MONTH
|
||||||
|
AM, // AM_PM
|
||||||
|
0, // HOUR
|
||||||
|
0, // HOUR_OF_DAY
|
||||||
|
0, // MINUTE
|
||||||
|
0, // SECOND
|
||||||
|
0, // MILLISECOND
|
||||||
|
-13 * ONE_HOUR, // ZONE_OFFSET (UNIX compatibility)
|
||||||
|
0 // DST_OFFSET
|
||||||
|
};
|
||||||
|
|
||||||
|
static final int LEAST_MAX_VALUES[] = {
|
||||||
|
CE, // ERA
|
||||||
|
292269054, // YEAR
|
||||||
|
ESFAND, // MONTH
|
||||||
|
52, // WEEK_OF_YEAR
|
||||||
|
4, // WEEK_OF_MONTH
|
||||||
|
28, // DAY_OF_MONTH
|
||||||
|
365, // DAY_OF_YEAR
|
||||||
|
FRIDAY, // DAY_OF_WEEK
|
||||||
|
4, // DAY_OF_WEEK_IN
|
||||||
|
PM, // AM_PM
|
||||||
|
11, // HOUR
|
||||||
|
23, // HOUR_OF_DAY
|
||||||
|
59, // MINUTE
|
||||||
|
59, // SECOND
|
||||||
|
999, // MILLISECOND
|
||||||
|
14 * ONE_HOUR, // ZONE_OFFSET
|
||||||
|
20 * ONE_MINUTE // DST_OFFSET (historical least maximum)
|
||||||
|
};
|
||||||
|
|
||||||
|
static final int MAX_VALUES[] = {
|
||||||
|
CE, // ERA
|
||||||
|
292278994, // YEAR
|
||||||
|
ESFAND, // MONTH
|
||||||
|
53, // WEEK_OF_YEAR
|
||||||
|
6, // WEEK_OF_MONTH
|
||||||
|
31, // DAY_OF_MONTH
|
||||||
|
366, // DAY_OF_YEAR
|
||||||
|
FRIDAY, // DAY_OF_WEEK
|
||||||
|
6, // DAY_OF_WEEK_IN
|
||||||
|
PM, // AM_PM
|
||||||
|
11, // HOUR
|
||||||
|
23, // HOUR_OF_DAY
|
||||||
|
59, // MINUTE
|
||||||
|
59, // SECOND
|
||||||
|
999, // MILLISECOND
|
||||||
|
14 * ONE_HOUR, // ZONE_OFFSET
|
||||||
|
2 * ONE_HOUR // DST_OFFSET (double summer time)
|
||||||
|
};
|
||||||
|
|
||||||
|
public JalaliCalendar() {
|
||||||
|
this(TimeZone.getDefault(), Locale.getDefault());
|
||||||
|
}
|
||||||
|
|
||||||
|
public JalaliCalendar(TimeZone zone) {
|
||||||
|
this(zone, Locale.getDefault());
|
||||||
|
}
|
||||||
|
|
||||||
|
public JalaliCalendar(Locale aLocale) {
|
||||||
|
this(TimeZone.getDefault(), aLocale);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JalaliCalendar(TimeZone zone, Locale aLocale) {
|
||||||
|
|
||||||
|
super(zone, aLocale);
|
||||||
|
timeZone = zone;
|
||||||
|
Calendar calendar = Calendar.getInstance(zone, aLocale);
|
||||||
|
|
||||||
|
YearMonthDate yearMonthDate = new YearMonthDate(calendar.get(YEAR), calendar.get(MONTH), calendar.get(DATE));
|
||||||
|
yearMonthDate = gregorianToJalali(yearMonthDate);
|
||||||
|
set(yearMonthDate.getYear(), yearMonthDate.getMonth(), yearMonthDate.getDate());
|
||||||
|
complete();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public JalaliCalendar(int year, int month, int dayOfMonth) {
|
||||||
|
this(year, month, dayOfMonth, 0, 0, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JalaliCalendar(int year, int month, int dayOfMonth, int hourOfDay,
|
||||||
|
int minute) {
|
||||||
|
this(year, month, dayOfMonth, hourOfDay, minute, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
public JalaliCalendar(int year, int month, int dayOfMonth, int hourOfDay,
|
||||||
|
int minute, int second) {
|
||||||
|
this(year, month, dayOfMonth, hourOfDay, minute, second, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
JalaliCalendar(int year, int month, int dayOfMonth,
|
||||||
|
int hourOfDay, int minute, int second, int millis) {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.set(YEAR, year);
|
||||||
|
this.set(MONTH, month);
|
||||||
|
this.set(DAY_OF_MONTH, dayOfMonth);
|
||||||
|
|
||||||
|
if (hourOfDay >= 12 && hourOfDay <= 23) {
|
||||||
|
|
||||||
|
this.set(AM_PM, PM);
|
||||||
|
this.set(HOUR, hourOfDay - 12);
|
||||||
|
} else {
|
||||||
|
this.set(HOUR, hourOfDay);
|
||||||
|
this.set(AM_PM, AM);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.set(HOUR_OF_DAY, hourOfDay);
|
||||||
|
this.set(MINUTE, minute);
|
||||||
|
this.set(SECOND, second);
|
||||||
|
|
||||||
|
this.set(MILLISECOND, millis);
|
||||||
|
|
||||||
|
YearMonthDate yearMonthDate = jalaliToGregorian(new YearMonthDate(fields[1], fields[2], fields[5]));
|
||||||
|
cal = new GregorianCalendar(yearMonthDate.getYear(), yearMonthDate.getMonth(), yearMonthDate.getDate(), hourOfDay,
|
||||||
|
minute, second);
|
||||||
|
time = cal.getTimeInMillis();
|
||||||
|
|
||||||
|
isTimeSeted = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static YearMonthDate gregorianToJalali(YearMonthDate gregorian) {
|
||||||
|
|
||||||
|
if (gregorian.getMonth() > 11 || gregorian.getMonth() < -11) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
int jalaliYear;
|
||||||
|
int jalaliMonth;
|
||||||
|
int jalaliDay;
|
||||||
|
|
||||||
|
int gregorianDayNo, jalaliDayNo;
|
||||||
|
int jalaliNP;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
gregorian.setYear(gregorian.getYear() - 1600);
|
||||||
|
gregorian.setDate(gregorian.getDate() - 1);
|
||||||
|
|
||||||
|
gregorianDayNo = 365 * gregorian.getYear() + (int) Math.floor((gregorian.getYear() + 3) / 4)
|
||||||
|
- (int) Math.floor((gregorian.getYear() + 99) / 100)
|
||||||
|
+ (int) Math.floor((gregorian.getYear() + 399) / 400);
|
||||||
|
for (i = 0; i < gregorian.getMonth(); ++i) {
|
||||||
|
gregorianDayNo += gregorianDaysInMonth[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gregorian.getMonth() > 1 && ((gregorian.getYear() % 4 == 0 && gregorian.getYear() % 100 != 0)
|
||||||
|
|| (gregorian.getYear() % 400 == 0))) {
|
||||||
|
++gregorianDayNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
gregorianDayNo += gregorian.getDate();
|
||||||
|
|
||||||
|
jalaliDayNo = gregorianDayNo - 79;
|
||||||
|
|
||||||
|
jalaliNP = (int) Math.floor(jalaliDayNo / 12053);
|
||||||
|
jalaliDayNo = jalaliDayNo % 12053;
|
||||||
|
|
||||||
|
jalaliYear = 979 + 33 * jalaliNP + 4 * (int) (jalaliDayNo / 1461);
|
||||||
|
jalaliDayNo = jalaliDayNo % 1461;
|
||||||
|
|
||||||
|
if (jalaliDayNo >= 366) {
|
||||||
|
jalaliYear += (int) Math.floor((jalaliDayNo - 1) / 365);
|
||||||
|
jalaliDayNo = (jalaliDayNo - 1) % 365;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < 11 && jalaliDayNo >= jalaliDaysInMonth[i]; ++i) {
|
||||||
|
jalaliDayNo -= jalaliDaysInMonth[i];
|
||||||
|
}
|
||||||
|
jalaliMonth = i;
|
||||||
|
jalaliDay = jalaliDayNo + 1;
|
||||||
|
|
||||||
|
return new YearMonthDate(jalaliYear, jalaliMonth, jalaliDay);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static YearMonthDate jalaliToGregorian(YearMonthDate jalali) {
|
||||||
|
if (jalali.getMonth() > 11 || jalali.getMonth() < -11) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
|
||||||
|
int gregorianYear;
|
||||||
|
int gregorianMonth;
|
||||||
|
int gregorianDay;
|
||||||
|
|
||||||
|
int gregorianDayNo, jalaliDayNo;
|
||||||
|
int leap;
|
||||||
|
|
||||||
|
int i;
|
||||||
|
jalali.setYear(jalali.getYear() - 979);
|
||||||
|
jalali.setDate(jalali.getDate() - 1);
|
||||||
|
|
||||||
|
jalaliDayNo = 365 * jalali.getYear() + (int) (jalali.getYear() / 33) * 8
|
||||||
|
+ (int) Math.floor(((jalali.getYear() % 33) + 3) / 4);
|
||||||
|
for (i = 0; i < jalali.getMonth(); ++i) {
|
||||||
|
jalaliDayNo += jalaliDaysInMonth[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
jalaliDayNo += jalali.getDate();
|
||||||
|
|
||||||
|
gregorianDayNo = jalaliDayNo + 79;
|
||||||
|
|
||||||
|
gregorianYear = 1600 + 400 * (int) Math.floor(gregorianDayNo / 146097); /* 146097 = 365*400 + 400/4 - 400/100 + 400/400 */
|
||||||
|
gregorianDayNo = gregorianDayNo % 146097;
|
||||||
|
|
||||||
|
leap = 1;
|
||||||
|
if (gregorianDayNo >= 36525) /* 36525 = 365*100 + 100/4 */ {
|
||||||
|
gregorianDayNo--;
|
||||||
|
gregorianYear += 100 * (int) Math.floor(gregorianDayNo / 36524); /* 36524 = 365*100 + 100/4 - 100/100 */
|
||||||
|
gregorianDayNo = gregorianDayNo % 36524;
|
||||||
|
|
||||||
|
if (gregorianDayNo >= 365) {
|
||||||
|
gregorianDayNo++;
|
||||||
|
} else {
|
||||||
|
leap = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gregorianYear += 4 * (int) Math.floor(gregorianDayNo / 1461); /* 1461 = 365*4 + 4/4 */
|
||||||
|
gregorianDayNo = gregorianDayNo % 1461;
|
||||||
|
|
||||||
|
if (gregorianDayNo >= 366) {
|
||||||
|
leap = 0;
|
||||||
|
|
||||||
|
gregorianDayNo--;
|
||||||
|
gregorianYear += (int) Math.floor(gregorianDayNo / 365);
|
||||||
|
gregorianDayNo = gregorianDayNo % 365;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; gregorianDayNo >= gregorianDaysInMonth[i] + ((i == 1 && leap == 1) ? i : 0); i++) {
|
||||||
|
gregorianDayNo -= gregorianDaysInMonth[i] + ((i == 1 && leap == 1) ? i : 0);
|
||||||
|
}
|
||||||
|
gregorianMonth = i;
|
||||||
|
gregorianDay = gregorianDayNo + 1;
|
||||||
|
|
||||||
|
return new YearMonthDate(gregorianYear, gregorianMonth, gregorianDay);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int weekOfYear(int dayOfYear, int year) {
|
||||||
|
switch (dayOfWeek(JalaliCalendar.jalaliToGregorian(new YearMonthDate(year, 0, 1)))) {
|
||||||
|
case 2:
|
||||||
|
dayOfYear++;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
dayOfYear += 2;
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
dayOfYear += 3;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
dayOfYear += 4;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
dayOfYear += 5;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
dayOfYear--;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
;
|
||||||
|
dayOfYear = (int) Math.floor(dayOfYear / 7);
|
||||||
|
return dayOfYear + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int dayOfWeek(YearMonthDate yearMonthDate) {
|
||||||
|
|
||||||
|
Calendar cal = new GregorianCalendar(yearMonthDate.getYear(), yearMonthDate.getMonth(), yearMonthDate.getDate());
|
||||||
|
return cal.get(DAY_OF_WEEK);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isLeepYear(int year) {
|
||||||
|
//Algorithm from www.wikipedia.com
|
||||||
|
if ((year % 33 == 1 || year % 33 == 5 || year % 33 == 9 || year % 33 == 13 ||
|
||||||
|
year % 33 == 17 || year % 33 == 22 || year % 33 == 26 || year % 33 == 30)) {
|
||||||
|
return true;
|
||||||
|
} else return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void computeTime() {
|
||||||
|
|
||||||
|
if (!isTimeSet && !isTimeSeted) {
|
||||||
|
Calendar cal = GregorianCalendar.getInstance(timeZone);
|
||||||
|
if (!isSet(HOUR_OF_DAY)) {
|
||||||
|
super.set(HOUR_OF_DAY, cal.get(HOUR_OF_DAY));
|
||||||
|
}
|
||||||
|
if (!isSet(HOUR)) {
|
||||||
|
super.set(HOUR, cal.get(HOUR));
|
||||||
|
}
|
||||||
|
if (!isSet(MINUTE)) {
|
||||||
|
super.set(MINUTE, cal.get(MINUTE));
|
||||||
|
}
|
||||||
|
if (!isSet(SECOND)) {
|
||||||
|
super.set(SECOND, cal.get(SECOND));
|
||||||
|
}
|
||||||
|
if (!isSet(MILLISECOND)) {
|
||||||
|
super.set(MILLISECOND, cal.get(MILLISECOND));
|
||||||
|
}
|
||||||
|
if (!isSet(ZONE_OFFSET)) {
|
||||||
|
super.set(ZONE_OFFSET, cal.get(ZONE_OFFSET));
|
||||||
|
}
|
||||||
|
if (!isSet(DST_OFFSET)) {
|
||||||
|
super.set(DST_OFFSET, cal.get(DST_OFFSET));
|
||||||
|
}
|
||||||
|
if (!isSet(AM_PM)) {
|
||||||
|
super.set(AM_PM, cal.get(AM_PM));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (internalGet(HOUR_OF_DAY) >= 12 && internalGet(HOUR_OF_DAY) <= 23) {
|
||||||
|
super.set(AM_PM, PM);
|
||||||
|
super.set(HOUR, internalGet(HOUR_OF_DAY) - 12);
|
||||||
|
} else {
|
||||||
|
super.set(HOUR, internalGet(HOUR_OF_DAY));
|
||||||
|
super.set(AM_PM, AM);
|
||||||
|
}
|
||||||
|
|
||||||
|
YearMonthDate yearMonthDate = jalaliToGregorian(new YearMonthDate(internalGet(YEAR), internalGet(MONTH), internalGet(DAY_OF_MONTH)));
|
||||||
|
cal.set(yearMonthDate.getYear(), yearMonthDate.getMonth(), yearMonthDate.getDate()
|
||||||
|
, internalGet(HOUR_OF_DAY), internalGet(MINUTE), internalGet(SECOND));
|
||||||
|
time = cal.getTimeInMillis();
|
||||||
|
|
||||||
|
} else if (!isTimeSet && isTimeSeted) {
|
||||||
|
if (internalGet(HOUR_OF_DAY) >= 12 && internalGet(HOUR_OF_DAY) <= 23) {
|
||||||
|
super.set(AM_PM, PM);
|
||||||
|
super.set(HOUR, internalGet(HOUR_OF_DAY) - 12);
|
||||||
|
} else {
|
||||||
|
super.set(HOUR, internalGet(HOUR_OF_DAY));
|
||||||
|
super.set(AM_PM, AM);
|
||||||
|
}
|
||||||
|
cal = new GregorianCalendar();
|
||||||
|
super.set(ZONE_OFFSET, timeZone.getRawOffset());
|
||||||
|
super.set(DST_OFFSET, timeZone.getDSTSavings());
|
||||||
|
YearMonthDate yearMonthDate = jalaliToGregorian(new YearMonthDate(internalGet(YEAR), internalGet(MONTH), internalGet(DAY_OF_MONTH)));
|
||||||
|
cal.set(yearMonthDate.getYear(), yearMonthDate.getMonth(), yearMonthDate.getDate(), internalGet(HOUR_OF_DAY),
|
||||||
|
internalGet(MINUTE), internalGet(SECOND));
|
||||||
|
time = cal.getTimeInMillis();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void set(int field, int value) {
|
||||||
|
switch (field) {
|
||||||
|
case DATE: {
|
||||||
|
super.set(field, 0);
|
||||||
|
add(field, value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MONTH: {
|
||||||
|
if (value > 11) {
|
||||||
|
super.set(field, 11);
|
||||||
|
add(field, value - 11);
|
||||||
|
} else if (value < 0) {
|
||||||
|
super.set(field, 0);
|
||||||
|
add(field, value);
|
||||||
|
} else {
|
||||||
|
super.set(field, value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DAY_OF_YEAR: {
|
||||||
|
if (isSet(YEAR) && isSet(MONTH) && isSet(DAY_OF_MONTH)) {
|
||||||
|
super.set(YEAR, internalGet(YEAR));
|
||||||
|
super.set(MONTH, 0);
|
||||||
|
super.set(DATE, 0);
|
||||||
|
add(field, value);
|
||||||
|
} else {
|
||||||
|
super.set(field, value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WEEK_OF_YEAR: {
|
||||||
|
if (isSet(YEAR) && isSet(MONTH) && isSet(DAY_OF_MONTH)) {
|
||||||
|
add(field, value - get(WEEK_OF_YEAR));
|
||||||
|
} else {
|
||||||
|
super.set(field, value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case WEEK_OF_MONTH: {
|
||||||
|
if (isSet(YEAR) && isSet(MONTH) && isSet(DAY_OF_MONTH)) {
|
||||||
|
add(field, value - get(WEEK_OF_MONTH));
|
||||||
|
} else {
|
||||||
|
super.set(field, value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DAY_OF_WEEK: {
|
||||||
|
if (isSet(YEAR) && isSet(MONTH) && isSet(DAY_OF_MONTH)) {
|
||||||
|
add(DAY_OF_WEEK, value % 7 - get(DAY_OF_WEEK));
|
||||||
|
} else {
|
||||||
|
super.set(field, value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HOUR_OF_DAY:
|
||||||
|
case HOUR:
|
||||||
|
case MINUTE:
|
||||||
|
case SECOND:
|
||||||
|
case MILLISECOND:
|
||||||
|
case ZONE_OFFSET:
|
||||||
|
case DST_OFFSET: {
|
||||||
|
if (isSet(YEAR) && isSet(MONTH) && isSet(DATE) && isSet(HOUR) && isSet(HOUR_OF_DAY) &&
|
||||||
|
isSet(MINUTE) && isSet(SECOND) && isSet(MILLISECOND)) {
|
||||||
|
cal = new GregorianCalendar();
|
||||||
|
YearMonthDate yearMonthDate = jalaliToGregorian(new YearMonthDate(internalGet(YEAR), internalGet(MONTH), internalGet(DATE)));
|
||||||
|
cal.set(yearMonthDate.getYear(), yearMonthDate.getMonth(), yearMonthDate.getDate(), internalGet(HOUR_OF_DAY), internalGet(MINUTE),
|
||||||
|
internalGet(SECOND));
|
||||||
|
cal.set(field, value);
|
||||||
|
yearMonthDate = gregorianToJalali(new YearMonthDate(cal.get(YEAR), cal.get(MONTH), cal.get(DATE)));
|
||||||
|
super.set(YEAR, yearMonthDate.getYear());
|
||||||
|
super.set(MONTH, yearMonthDate.getMonth());
|
||||||
|
super.set(DATE, yearMonthDate.getDate());
|
||||||
|
super.set(HOUR_OF_DAY, cal.get(HOUR_OF_DAY));
|
||||||
|
super.set(MINUTE, cal.get(MINUTE));
|
||||||
|
super.set(SECOND, cal.get(SECOND));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
super.set(field, value);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
default: {
|
||||||
|
super.set(field, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void computeFields() {
|
||||||
|
boolean temp = isTimeSet;
|
||||||
|
if (!areFieldsSet) {
|
||||||
|
setMinimalDaysInFirstWeek(1);
|
||||||
|
setFirstDayOfWeek(7);
|
||||||
|
|
||||||
|
//Day_Of_Year
|
||||||
|
int dayOfYear = 0;
|
||||||
|
int index = 0;
|
||||||
|
|
||||||
|
while (index < fields[2]) {
|
||||||
|
dayOfYear += jalaliDaysInMonth[index++];
|
||||||
|
}
|
||||||
|
dayOfYear += fields[5];
|
||||||
|
super.set(DAY_OF_YEAR, dayOfYear);
|
||||||
|
//***
|
||||||
|
|
||||||
|
//Day_of_Week
|
||||||
|
super.set(DAY_OF_WEEK, dayOfWeek(jalaliToGregorian(new YearMonthDate(fields[1], fields[2], fields[5]))));
|
||||||
|
//***
|
||||||
|
|
||||||
|
//Day_Of_Week_In_Month
|
||||||
|
if (0 < fields[5] && fields[5] < 8) {
|
||||||
|
super.set(DAY_OF_WEEK_IN_MONTH, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (7 < fields[5] && fields[5] < 15) {
|
||||||
|
super.set(DAY_OF_WEEK_IN_MONTH, 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (14 < fields[5] && fields[5] < 22) {
|
||||||
|
super.set(DAY_OF_WEEK_IN_MONTH, 3);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (21 < fields[5] && fields[5] < 29) {
|
||||||
|
super.set(DAY_OF_WEEK_IN_MONTH, 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (28 < fields[5] && fields[5] < 32) {
|
||||||
|
super.set(DAY_OF_WEEK_IN_MONTH, 5);
|
||||||
|
}
|
||||||
|
//***
|
||||||
|
|
||||||
|
//Week_Of_Year
|
||||||
|
super.set(WEEK_OF_YEAR, weekOfYear(fields[6], fields[1]));
|
||||||
|
//***
|
||||||
|
|
||||||
|
//Week_Of_Month
|
||||||
|
super.set(WEEK_OF_MONTH, weekOfYear(fields[6], fields[1]) - weekOfYear(fields[6] - fields[5], fields[1]) + 1);
|
||||||
|
//
|
||||||
|
|
||||||
|
isTimeSet = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void add(int field, int amount) {
|
||||||
|
|
||||||
|
if (field == MONTH) {
|
||||||
|
amount += get(MONTH);
|
||||||
|
add(YEAR, amount / 12);
|
||||||
|
super.set(MONTH, amount % 12);
|
||||||
|
if (get(DAY_OF_MONTH) > jalaliDaysInMonth[amount % 12]) {
|
||||||
|
super.set(DAY_OF_MONTH, jalaliDaysInMonth[amount % 12]);
|
||||||
|
if (get(MONTH) == 11 && isLeepYear(get(YEAR))) {
|
||||||
|
super.set(DAY_OF_MONTH, 30);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
complete();
|
||||||
|
|
||||||
|
} else if (field == YEAR) {
|
||||||
|
|
||||||
|
super.set(YEAR, get(YEAR) + amount);
|
||||||
|
if (get(DAY_OF_MONTH) == 30 && get(MONTH) == 11 && !isLeepYear(get(YEAR))) {
|
||||||
|
super.set(DAY_OF_MONTH, 29);
|
||||||
|
}
|
||||||
|
|
||||||
|
complete();
|
||||||
|
} else {
|
||||||
|
YearMonthDate yearMonthDate = jalaliToGregorian(new YearMonthDate(get(YEAR), get(MONTH), get(DATE)));
|
||||||
|
Calendar gc = new GregorianCalendar(yearMonthDate.getYear(), yearMonthDate.getMonth(), yearMonthDate.getDate(),
|
||||||
|
get(HOUR_OF_DAY), get(MINUTE), get(SECOND));
|
||||||
|
gc.add(field, amount);
|
||||||
|
yearMonthDate = gregorianToJalali(new YearMonthDate(gc.get(YEAR), gc.get(MONTH), gc.get(DATE)));
|
||||||
|
super.set(YEAR, yearMonthDate.getYear());
|
||||||
|
super.set(MONTH, yearMonthDate.getMonth());
|
||||||
|
super.set(DATE, yearMonthDate.getDate());
|
||||||
|
super.set(HOUR_OF_DAY, gc.get(HOUR_OF_DAY));
|
||||||
|
super.set(MINUTE, gc.get(MINUTE));
|
||||||
|
super.set(SECOND, gc.get(SECOND));
|
||||||
|
complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void roll(int field, boolean up) {
|
||||||
|
roll(field, up ? +1 : -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void roll(int field, int amount) {
|
||||||
|
if (amount == 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (field < 0 || field >= ZONE_OFFSET) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
|
||||||
|
complete();
|
||||||
|
|
||||||
|
switch (field) {
|
||||||
|
case AM_PM: {
|
||||||
|
if (amount % 2 != 0) {
|
||||||
|
if (internalGet(AM_PM) == AM) {
|
||||||
|
fields[AM_PM] = PM;
|
||||||
|
} else {
|
||||||
|
fields[AM_PM] = AM;
|
||||||
|
}
|
||||||
|
if (get(AM_PM) == AM) {
|
||||||
|
super.set(HOUR_OF_DAY, get(HOUR));
|
||||||
|
} else {
|
||||||
|
super.set(HOUR_OF_DAY, get(HOUR) + 12);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case YEAR: {
|
||||||
|
super.set(YEAR, internalGet(YEAR) + amount);
|
||||||
|
if (internalGet(MONTH) == 11 && internalGet(DAY_OF_MONTH) == 30 && !isLeepYear(internalGet(YEAR))) {
|
||||||
|
super.set(DAY_OF_MONTH, 29);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MINUTE: {
|
||||||
|
int unit = 60;
|
||||||
|
int m = (internalGet(MINUTE) + amount) % unit;
|
||||||
|
if (m < 0) {
|
||||||
|
m += unit;
|
||||||
|
}
|
||||||
|
super.set(MINUTE, m);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case SECOND: {
|
||||||
|
int unit = 60;
|
||||||
|
int s = (internalGet(SECOND) + amount) % unit;
|
||||||
|
if (s < 0) {
|
||||||
|
s += unit;
|
||||||
|
}
|
||||||
|
super.set(SECOND, s);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case MILLISECOND: {
|
||||||
|
int unit = 1000;
|
||||||
|
int ms = (internalGet(MILLISECOND) + amount) % unit;
|
||||||
|
if (ms < 0) {
|
||||||
|
ms += unit;
|
||||||
|
}
|
||||||
|
super.set(MILLISECOND, ms);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case HOUR: {
|
||||||
|
super.set(HOUR, (internalGet(HOUR) + amount) % 12);
|
||||||
|
if (internalGet(HOUR) < 0) {
|
||||||
|
fields[HOUR] += 12;
|
||||||
|
}
|
||||||
|
if (internalGet(AM_PM) == AM) {
|
||||||
|
super.set(HOUR_OF_DAY, internalGet(HOUR));
|
||||||
|
} else {
|
||||||
|
super.set(HOUR_OF_DAY, internalGet(HOUR) + 12);
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case HOUR_OF_DAY: {
|
||||||
|
fields[HOUR_OF_DAY] = (internalGet(HOUR_OF_DAY) + amount) % 24;
|
||||||
|
if (internalGet(HOUR_OF_DAY) < 0) {
|
||||||
|
fields[HOUR_OF_DAY] += 24;
|
||||||
|
}
|
||||||
|
if (internalGet(HOUR_OF_DAY) < 12) {
|
||||||
|
fields[AM_PM] = AM;
|
||||||
|
fields[HOUR] = internalGet(HOUR_OF_DAY);
|
||||||
|
} else {
|
||||||
|
fields[AM_PM] = PM;
|
||||||
|
fields[HOUR] = internalGet(HOUR_OF_DAY) - 12;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
case MONTH: {
|
||||||
|
int mon = (internalGet(MONTH) + amount) % 12;
|
||||||
|
if (mon < 0) {
|
||||||
|
mon += 12;
|
||||||
|
}
|
||||||
|
super.set(MONTH, mon);
|
||||||
|
|
||||||
|
int monthLen = jalaliDaysInMonth[mon];
|
||||||
|
if (internalGet(MONTH) == 11 && isLeepYear(internalGet(YEAR))) {
|
||||||
|
monthLen = 30;
|
||||||
|
}
|
||||||
|
if (internalGet(DAY_OF_MONTH) > monthLen) {
|
||||||
|
super.set(DAY_OF_MONTH, monthLen);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DAY_OF_MONTH: {
|
||||||
|
int unit = 0;
|
||||||
|
if (0 <= get(MONTH) && get(MONTH) <= 5) {
|
||||||
|
unit = 31;
|
||||||
|
}
|
||||||
|
if (6 <= get(MONTH) && get(MONTH) <= 10) {
|
||||||
|
unit = 30;
|
||||||
|
}
|
||||||
|
if (get(MONTH) == 11) {
|
||||||
|
if (isLeepYear(get(YEAR))) {
|
||||||
|
unit = 30;
|
||||||
|
} else {
|
||||||
|
unit = 29;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int d = (get(DAY_OF_MONTH) + amount) % unit;
|
||||||
|
if (d < 0) {
|
||||||
|
d += unit;
|
||||||
|
}
|
||||||
|
super.set(DAY_OF_MONTH, d);
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
case WEEK_OF_YEAR: {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DAY_OF_YEAR: {
|
||||||
|
int unit = (isLeepYear(internalGet(YEAR)) ? 366 : 365);
|
||||||
|
int dayOfYear = (internalGet(DAY_OF_YEAR) + amount) % unit;
|
||||||
|
dayOfYear = (dayOfYear > 0) ? dayOfYear : dayOfYear + unit;
|
||||||
|
int month = 0, temp = 0;
|
||||||
|
while (dayOfYear > temp) {
|
||||||
|
temp += jalaliDaysInMonth[month++];
|
||||||
|
}
|
||||||
|
super.set(MONTH, --month);
|
||||||
|
super.set(DAY_OF_MONTH, jalaliDaysInMonth[internalGet(MONTH)] - (temp - dayOfYear));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case DAY_OF_WEEK: {
|
||||||
|
int index = amount % 7;
|
||||||
|
if (index < 0) {
|
||||||
|
index += 7;
|
||||||
|
}
|
||||||
|
int i = 0;
|
||||||
|
while (i != index) {
|
||||||
|
if (internalGet(DAY_OF_WEEK) == FRIDAY) {
|
||||||
|
add(DAY_OF_MONTH, -6);
|
||||||
|
} else {
|
||||||
|
add(DAY_OF_MONTH, +1);
|
||||||
|
}
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMinimum(int field) {
|
||||||
|
return MIN_VALUES[field];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getMaximum(int field) {
|
||||||
|
return MAX_VALUES[field];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getGreatestMinimum(int field) {
|
||||||
|
return MIN_VALUES[field];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getLeastMaximum(int field) {
|
||||||
|
return LEAST_MAX_VALUES[field];
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class YearMonthDate {
|
||||||
|
|
||||||
|
public YearMonthDate(int year, int month, int date) {
|
||||||
|
this.year = year;
|
||||||
|
this.month = month;
|
||||||
|
this.date = date;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int year;
|
||||||
|
private int month;
|
||||||
|
private int date;
|
||||||
|
|
||||||
|
public int getYear() {
|
||||||
|
return year;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setYear(int year) {
|
||||||
|
this.year = year;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getMonth() {
|
||||||
|
return month;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMonth(int month) {
|
||||||
|
this.month = month;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDate() {
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDate(int date) {
|
||||||
|
this.date = date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return getYear() + "/" + getMonth() + "/" + getDate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -107,6 +107,7 @@ public class NekoConfig {
|
||||||
public static boolean mediaPreview;
|
public static boolean mediaPreview;
|
||||||
|
|
||||||
public static boolean proxyAutoSwitch;
|
public static boolean proxyAutoSwitch;
|
||||||
|
public static boolean usePersianCalender;
|
||||||
|
|
||||||
public static String formatLang(String name) {
|
public static String formatLang(String name) {
|
||||||
|
|
||||||
|
@ -213,6 +214,7 @@ public class NekoConfig {
|
||||||
mediaPreview = preferences.getBoolean("mediaPreview", false);
|
mediaPreview = preferences.getBoolean("mediaPreview", false);
|
||||||
|
|
||||||
proxyAutoSwitch = preferences.getBoolean("proxy_auto_switch", false);
|
proxyAutoSwitch = preferences.getBoolean("proxy_auto_switch", false);
|
||||||
|
usePersianCalender = preferences.getBoolean("usePersianCalender", false);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -708,4 +710,11 @@ public class NekoConfig {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void toggleUsePersianCalender() {
|
||||||
|
|
||||||
|
preferences.edit().putBoolean("usePersianCalender",usePersianCalender = !usePersianCalender).apply();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -109,6 +109,7 @@ public class NekoGeneralSettingsActivity extends BaseFragment {
|
||||||
private int disableNumberRoundingRow;
|
private int disableNumberRoundingRow;
|
||||||
private int openArchiveOnPullRow;
|
private int openArchiveOnPullRow;
|
||||||
private int nameOrderRow;
|
private int nameOrderRow;
|
||||||
|
private int usePersianCalenderRow;
|
||||||
private int general2Row;
|
private int general2Row;
|
||||||
|
|
||||||
private UndoView restartTooltip;
|
private UndoView restartTooltip;
|
||||||
|
@ -229,7 +230,6 @@ public class NekoGeneralSettingsActivity extends BaseFragment {
|
||||||
if (view instanceof TextCheckCell) {
|
if (view instanceof TextCheckCell) {
|
||||||
((TextCheckCell) view).setChecked(NekoConfig.typeface == 1);
|
((TextCheckCell) view).setChecked(NekoConfig.typeface == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (position == nameOrderRow) {
|
} else if (position == nameOrderRow) {
|
||||||
|
|
||||||
PopupBuilder builder = new PopupBuilder(view);
|
PopupBuilder builder = new PopupBuilder(view);
|
||||||
|
@ -450,6 +450,11 @@ public class NekoGeneralSettingsActivity extends BaseFragment {
|
||||||
}
|
}
|
||||||
ActionBarLayout.headerShadowDrawable = NekoConfig.disableAppBarShadow ? null : parentLayout.getResources().getDrawable(R.drawable.header_shadow).mutate();
|
ActionBarLayout.headerShadowDrawable = NekoConfig.disableAppBarShadow ? null : parentLayout.getResources().getDrawable(R.drawable.header_shadow).mutate();
|
||||||
parentLayout.rebuildAllFragmentViews(true, true);
|
parentLayout.rebuildAllFragmentViews(true, true);
|
||||||
|
} else if (position == usePersianCalenderRow) {
|
||||||
|
NekoConfig.toggleUsePersianCalender();
|
||||||
|
if (view instanceof TextCheckCell) {
|
||||||
|
((TextCheckCell) view).setChecked(NekoConfig.usePersianCalender);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -596,6 +601,7 @@ public class NekoGeneralSettingsActivity extends BaseFragment {
|
||||||
disableNumberRoundingRow = rowCount++;
|
disableNumberRoundingRow = rowCount++;
|
||||||
openArchiveOnPullRow = rowCount++;
|
openArchiveOnPullRow = rowCount++;
|
||||||
nameOrderRow = rowCount++;
|
nameOrderRow = rowCount++;
|
||||||
|
usePersianCalenderRow = rowCount++;
|
||||||
general2Row = rowCount++;
|
general2Row = rowCount++;
|
||||||
|
|
||||||
if (listAdapter != null) {
|
if (listAdapter != null) {
|
||||||
|
@ -678,7 +684,7 @@ public class NekoGeneralSettingsActivity extends BaseFragment {
|
||||||
value = LocaleController.getString("FirstLast", R.string.FirstLast);
|
value = LocaleController.getString("FirstLast", R.string.FirstLast);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
textCell.setTextAndValue(LocaleController.getString("NameOrder", R.string.NameOrder), value, eventTypeRow != -1);
|
textCell.setTextAndValue(LocaleController.getString("NameOrder", R.string.NameOrder), value, true);
|
||||||
} else if (position == eventTypeRow) {
|
} else if (position == eventTypeRow) {
|
||||||
String value;
|
String value;
|
||||||
switch (NekoConfig.eventType) {
|
switch (NekoConfig.eventType) {
|
||||||
|
@ -791,6 +797,8 @@ public class NekoGeneralSettingsActivity extends BaseFragment {
|
||||||
textCell.setTextAndValueAndCheck(LocaleController.getString("DisableNumberRounding", R.string.DisableNumberRounding), "4.8K -> 4777", NekoConfig.disableNumberRounding, true, true);
|
textCell.setTextAndValueAndCheck(LocaleController.getString("DisableNumberRounding", R.string.DisableNumberRounding), "4.8K -> 4777", NekoConfig.disableNumberRounding, true, true);
|
||||||
} else if (position == appBarShadowRow) {
|
} else if (position == appBarShadowRow) {
|
||||||
textCell.setTextAndCheck(LocaleController.getString("DisableAppBarShadow", R.string.DisableAppBarShadow), NekoConfig.disableAppBarShadow, eventTypeRow != -1);
|
textCell.setTextAndCheck(LocaleController.getString("DisableAppBarShadow", R.string.DisableAppBarShadow), NekoConfig.disableAppBarShadow, eventTypeRow != -1);
|
||||||
|
} else if (position == usePersianCalenderRow) {
|
||||||
|
textCell.setTextAndCheck(LocaleController.getString("UsePersianCalender", R.string.UsePersianCalender), NekoConfig.usePersianCalender, false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -219,7 +219,7 @@
|
||||||
<string name="NekoXFaq">NekoX FAQ</string>
|
<string name="NekoXFaq">NekoX FAQ</string>
|
||||||
|
|
||||||
<string name="TransSite">Translate Platform</string>
|
<string name="TransSite">Translate Platform</string>
|
||||||
<string name="NekoTrans">Translate Nekogram</string>
|
|
||||||
<string name="NekoXTrans">Translate NekoX</string>
|
<string name="NekoXTrans">Translate NekoX</string>
|
||||||
|
<string name="UsePersianCalender">Use Persian Calender</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
Loading…
Reference in New Issue
Block a user