diff --git a/.idea/misc.xml b/.idea/misc.xml index fbb4b44..d7133ee 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,6 +4,7 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml index fbb4b44..d7133ee 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,6 +4,7 @@ diff --git a/app/build.gradle b/app/build.gradle index 2618027..f39e57d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -86,6 +86,8 @@ implementation 'com.google.code.gson:gson:2.9.0' //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //日期范围选择 + implementation 'com.github.applikeysolutions:cosmocalendar:1.0.4' //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 diff --git a/.idea/misc.xml b/.idea/misc.xml index fbb4b44..d7133ee 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,6 +4,7 @@ diff --git a/app/build.gradle b/app/build.gradle index 2618027..f39e57d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -86,6 +86,8 @@ implementation 'com.google.code.gson:gson:2.9.0' //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //日期范围选择 + implementation 'com.github.applikeysolutions:cosmocalendar:1.0.4' //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java index ea9b6c9..fe43ddc 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -17,6 +17,7 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.vm.DataAnalysisViewModel; +import com.casic.dcms.widgets.RangeDateActionSheet; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; @@ -39,6 +40,7 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { + private static final String TAG = "CaseResourceActivity"; private final Context context = CaseResourceActivity.this; private DataAnalysisViewModel dataAnalysisViewModel; @@ -126,7 +128,12 @@ viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - + new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() { + @Override + public void onDateRangeSelected(String startDate, String endDate) { + dataAnalysisViewModel.getCaseResource(startDate, endDate); + } + }).build().show(); } }); diff --git a/.idea/misc.xml b/.idea/misc.xml index fbb4b44..d7133ee 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,6 +4,7 @@ diff --git a/app/build.gradle b/app/build.gradle index 2618027..f39e57d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -86,6 +86,8 @@ implementation 'com.google.code.gson:gson:2.9.0' //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //日期范围选择 + implementation 'com.github.applikeysolutions:cosmocalendar:1.0.4' //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java index ea9b6c9..fe43ddc 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -17,6 +17,7 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.vm.DataAnalysisViewModel; +import com.casic.dcms.widgets.RangeDateActionSheet; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; @@ -39,6 +40,7 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { + private static final String TAG = "CaseResourceActivity"; private final Context context = CaseResourceActivity.this; private DataAnalysisViewModel dataAnalysisViewModel; @@ -126,7 +128,12 @@ viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - + new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() { + @Override + public void onDateRangeSelected(String startDate, String endDate) { + dataAnalysisViewModel.getCaseResource(startDate, endDate); + } + }).build().show(); } }); diff --git a/app/src/main/java/com/casic/dcms/widgets/RangeDateActionSheet.java b/app/src/main/java/com/casic/dcms/widgets/RangeDateActionSheet.java new file mode 100644 index 0000000..51b3c15 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/RangeDateActionSheet.java @@ -0,0 +1,91 @@ +package com.casic.dcms.widgets; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.widget.Button; + +import com.applikeysolutions.cosmocalendar.view.CalendarView; +import com.casic.dcms.R; +import com.pengxh.androidx.lite.hub.DialogHub; +import com.pengxh.androidx.lite.hub.StringHub; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.List; +import java.util.Locale; + +public class RangeDateActionSheet extends Dialog { + + private static final String TAG = "RangeDateActionSheet"; + private final Context ctx; + private final OnDateRangeSelectedListener listener; + + public static class Builder { + private Context context; + private OnDateRangeSelectedListener listener; + + public Builder setContext(Context context) { + this.context = context; + return this; + } + + public Builder setOnActionSheetListener(OnDateRangeSelectedListener listener) { + this.listener = listener; + return this; + } + + public RangeDateActionSheet build() { + return new RangeDateActionSheet(this); + } + } + + private RangeDateActionSheet(Builder builder) { + super(builder.context, R.style.UserDefinedActionStyle); + this.ctx = builder.context; + this.listener = builder.listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + DialogHub.resetParams(this, Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1); + setContentView(R.layout.range_date_action_sheet); + setCancelable(true); + setCanceledOnTouchOutside(true); + + CalendarView calendarView = findViewById(R.id.calendarView); + Button selectedButton = findViewById(R.id.selectedButton); + selectedButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + List selectedDates = calendarView.getSelectedDates(); + if (selectedDates.size() == 0) { + StringHub.show(ctx, "请选择正确的日期范围"); + return; + } + Calendar startCalendar = selectedDates.get(0); + Calendar endCalendar = selectedDates.get(selectedDates.size() - 1); + + if (listener != null) { + listener.onDateRangeSelected(getFormatDate(startCalendar), getFormatDate(endCalendar)); + dismiss(); + } else { + Log.e(TAG, "onClick: ", new NullPointerException()); + } + } + }); + } + + private String getFormatDate(Calendar calendar) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + return dateFormat.format(calendar.getTime()); + } + + public interface OnDateRangeSelectedListener { + void onDateRangeSelected(String startDate, String endDate); + } +} diff --git a/.idea/misc.xml b/.idea/misc.xml index fbb4b44..d7133ee 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -4,6 +4,7 @@ diff --git a/app/build.gradle b/app/build.gradle index 2618027..f39e57d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -86,6 +86,8 @@ implementation 'com.google.code.gson:gson:2.9.0' //日期选择器 implementation 'com.jzxiang.pickerview:TimePickerDialog:1.0.1' + //日期范围选择 + implementation 'com.github.applikeysolutions:cosmocalendar:1.0.4' //图表 implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' //Excel表格 diff --git a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java index ea9b6c9..fe43ddc 100644 --- a/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java +++ b/app/src/main/java/com/casic/dcms/view/statistics/CaseResourceActivity.java @@ -17,6 +17,7 @@ import com.casic.dcms.utils.LocaleConstant; import com.casic.dcms.utils.TimeOrDateUtil; import com.casic.dcms.vm.DataAnalysisViewModel; +import com.casic.dcms.widgets.RangeDateActionSheet; import com.github.mikephil.charting.data.PieEntry; import com.gyf.immersionbar.ImmersionBar; import com.pengxh.androidx.lite.adapter.NormalRecyclerAdapter; @@ -39,6 +40,7 @@ */ public class CaseResourceActivity extends AndroidxBaseActivity { + private static final String TAG = "CaseResourceActivity"; private final Context context = CaseResourceActivity.this; private DataAnalysisViewModel dataAnalysisViewModel; @@ -126,7 +128,12 @@ viewBinding.selectCalendarButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - + new RangeDateActionSheet.Builder().setContext(context).setOnActionSheetListener(new RangeDateActionSheet.OnDateRangeSelectedListener() { + @Override + public void onDateRangeSelected(String startDate, String endDate) { + dataAnalysisViewModel.getCaseResource(startDate, endDate); + } + }).build().show(); } }); diff --git a/app/src/main/java/com/casic/dcms/widgets/RangeDateActionSheet.java b/app/src/main/java/com/casic/dcms/widgets/RangeDateActionSheet.java new file mode 100644 index 0000000..51b3c15 --- /dev/null +++ b/app/src/main/java/com/casic/dcms/widgets/RangeDateActionSheet.java @@ -0,0 +1,91 @@ +package com.casic.dcms.widgets; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.widget.Button; + +import com.applikeysolutions.cosmocalendar.view.CalendarView; +import com.casic.dcms.R; +import com.pengxh.androidx.lite.hub.DialogHub; +import com.pengxh.androidx.lite.hub.StringHub; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.List; +import java.util.Locale; + +public class RangeDateActionSheet extends Dialog { + + private static final String TAG = "RangeDateActionSheet"; + private final Context ctx; + private final OnDateRangeSelectedListener listener; + + public static class Builder { + private Context context; + private OnDateRangeSelectedListener listener; + + public Builder setContext(Context context) { + this.context = context; + return this; + } + + public Builder setOnActionSheetListener(OnDateRangeSelectedListener listener) { + this.listener = listener; + return this; + } + + public RangeDateActionSheet build() { + return new RangeDateActionSheet(this); + } + } + + private RangeDateActionSheet(Builder builder) { + super(builder.context, R.style.UserDefinedActionStyle); + this.ctx = builder.context; + this.listener = builder.listener; + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + DialogHub.resetParams(this, Gravity.BOTTOM, R.style.ActionSheetDialogAnimation, 1); + setContentView(R.layout.range_date_action_sheet); + setCancelable(true); + setCanceledOnTouchOutside(true); + + CalendarView calendarView = findViewById(R.id.calendarView); + Button selectedButton = findViewById(R.id.selectedButton); + selectedButton.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + List selectedDates = calendarView.getSelectedDates(); + if (selectedDates.size() == 0) { + StringHub.show(ctx, "请选择正确的日期范围"); + return; + } + Calendar startCalendar = selectedDates.get(0); + Calendar endCalendar = selectedDates.get(selectedDates.size() - 1); + + if (listener != null) { + listener.onDateRangeSelected(getFormatDate(startCalendar), getFormatDate(endCalendar)); + dismiss(); + } else { + Log.e(TAG, "onClick: ", new NullPointerException()); + } + } + }); + } + + private String getFormatDate(Calendar calendar) { + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA); + return dateFormat.format(calendar.getTime()); + } + + public interface OnDateRangeSelectedListener { + void onDateRangeSelected(String startDate, String endDate); + } +} diff --git a/app/src/main/res/layout/range_date_action_sheet.xml b/app/src/main/res/layout/range_date_action_sheet.xml new file mode 100644 index 0000000..16401fc --- /dev/null +++ b/app/src/main/res/layout/range_date_action_sheet.xml @@ -0,0 +1,26 @@ + + + + + +