mac
2024-04-28 b1303ee6ba15d8202f7fe95037267feaa4520fc5
2024年04月28日15:55:42

备份代码
8个文件已修改
595 ■■■■ 已修改文件
app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/home/BasicChartComposer.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/home/CustomStyleChartComposer.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/ui/home/HomePageFragment.java 368 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/utils/TimeUtils.java 125 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/fragment_home_page.xml 69 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/layout/item_data.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/res/values/strings.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/hdl/photovoltaic/other/HdlDeviceLogic.java
@@ -67,6 +67,11 @@
        return sHdlDeviceLogic;
    }
    public static final String kWp = "kWp";
    public static final String kWh = "kW.h";
    public static final String kW = "kW";
    /**
     * 获取当前住宅的逆变器列表(包括从的逆变器)
app/src/main/java/com/hdl/photovoltaic/ui/home/BasicChartComposer.java
@@ -51,6 +51,11 @@
//                .data(new Object[]{3.9, 4.2, 5.7, 8.5, 11.9, 15.2, 17.0, 16.6, 14.2, 10.3, 6.6, 4.8});
        return configureBasicOptions()
                .backgroundColor("#EDEFF2")
                .legendEnabled(false)
                .markerRadius(0)
//                .markerSymbol(AAChartSymbolType.Circle)
//                .markerSymbolStyle(AAChartSymbolStyleType.Normal)
                .chartType(AAChartType.Area)
                .categories(new String[]{"一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十月", "十一月", "十二月"})
                .series(new AASeriesElement[]{element1});
app/src/main/java/com/hdl/photovoltaic/ui/home/CustomStyleChartComposer.java
@@ -195,8 +195,7 @@
        );
        return new AAChartModel()
                .chartType(AAChartType.Column)
                .title("Colorful Column Chart")
                .subtitle("single data array colorful column chart")
                .backgroundColor("#EDEFF2")
                .colorsTheme(new String[]{"#38C494",})
                .categories(new String[]{"一月", "二月", "三月", "四月", "五月", "六月",
                        "七月", "八月", "九月", "十月", "十一月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月", "十二月",})
app/src/main/java/com/hdl/photovoltaic/ui/home/HomePageFragment.java
@@ -1,63 +1,11 @@
package com.hdl.photovoltaic.ui.home;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.adjustYAxisMaxAndMinValues;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureAreaChartThreshold;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureChartWithShadowStyle;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureColorfulChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureColorfulColumnChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureColorfulDataLabelsStepLineChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureColorfulGradientAreaChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureColorfulGradientColorAndColorfulDataLabelsStepAreaChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureColorfulGradientColorChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureColorfulGradientSplineChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureColorfulShadowSplineChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureDiscontinuousDataChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureGradientColorAreasplineChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureHexagonRadarChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureMaxAndMinDataLabelsForChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureMultiLevelStopsArrGradientColorAreasplineMixedLineChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureNightingaleRoseChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configurePentagonRadarChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureQuadrangleRadarChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureSpecialStyleColumnForNegativeDataMixedPositiveData;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureSpecialStyleColumnOfSingleDataElementChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureSpecialStyleMarkerOfSingleDataElementChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.configureTriangleRadarChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.connectNullsForSingleAASeriesElement;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.customAreasplineChartWithColorfulGradientColorZones;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.customBarChartHoverColorAndSelectColor;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.customChartHoverAndSelectHaloStyle;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.customColumnChartBorderStyleAndStatesHoverColor;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.customLineChartMarkerSymbolContent;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.customLineChartWithColorfulMarkersAndLines;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.customLineChartWithColorfulMarkersAndLines2;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.customNormalStackingChartDataLabelsContentAndStyle;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.customScatterChartMarkerSymbolContent;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.customSpecialStyleDataLabelOfSingleDataElementChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.customSplineChartMarkerStatesHoverStyle;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.customVerticalXAxisCategoriesLabelsByHTMLBreakLineTag;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.disableSomeOfLinesMouseTrackingEffect;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.disableSplineChartMarkerHoverEffect;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.doubleLayerPieChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.drawLineChartWithPointsCoordinates;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.freeStyleRoundedCornersStackingColumnChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.largeDataStackingColumnChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.lineChartsWithLargeDifferencesInTheNumberOfDataInDifferentSeriesElement;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.noMoreGroupingAndNestedColumnChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.noMoreGroupingAndOverlapEachOtherColumnChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.splineChartHoverLineWithNoChangeAndCustomMarkerStatesHoverStyle;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.topRoundedCornersStackingColumnChart;
import static com.hdl.photovoltaic.ui.home.CustomStyleChartComposer.upsideDownPyramidChart;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.provider.Settings;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
import android.view.WindowManager;
import android.widget.Toast;
import androidx.appcompat.content.res.AppCompatResources;
@@ -67,15 +15,15 @@
import com.github.AAChartModel.AAChartCore.AAChartCreator.AAChartModel;
import com.github.AAChartModel.AAChartCore.AAChartCreator.AAChartView;
import com.github.AAChartModel.AAChartCore.AAChartCreator.AAMoveOverEventMessageModel;
import com.github.AAChartModel.AAChartCore.AAChartEnum.AAChartType;
import com.hdl.photovoltaic.R;
import com.hdl.photovoltaic.base.CustomBaseFragment;
import com.hdl.photovoltaic.config.AppConfigManage;
import com.hdl.photovoltaic.config.ConstantManage;
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.databinding.FragmentHomePageBinding;
import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch;
import com.hdl.photovoltaic.other.HdlDeviceLogic;
import com.hdl.photovoltaic.other.HdlLogLogic;
import com.hdl.photovoltaic.other.HdlThreadLogic;
import com.hdl.photovoltaic.utils.TimeUtils;
import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus;
@@ -86,7 +34,6 @@
import java.util.Calendar;
import java.util.Date;
import io.dcloud.common.util.DensityUtils;
/**
 * 首页模块
@@ -116,6 +63,7 @@
        initView();
        //初始化界面监听器
        initEvent();
    }
@@ -151,8 +99,9 @@
                viewBinding.v3.setVisibility(View.VISIBLE);
                viewBinding.homePageStationSelectTimeLl.setVisibility(View.VISIBLE);
                setUpAAChartView(1);
                String dataStr = TimeUtils.getDateTimestamp(getCurrentTimestamp(), getTimeDateFormat());
                viewBinding.yearMonthDayTv.setText(dataStr);
                setUpAAChartView();
            }
        });
@@ -177,8 +126,9 @@
                viewBinding.v2.setVisibility(View.GONE);
                viewBinding.v3.setVisibility(View.VISIBLE);
                viewBinding.homePageStationSelectTimeLl.setVisibility(View.VISIBLE);
                setUpAAChartView(2);
                String dataStr = TimeUtils.getDateTimestamp(getCurrentTimestamp(), getTimeDateFormat());
                viewBinding.yearMonthDayTv.setText(dataStr);
                setUpAAChartView();
            }
@@ -204,8 +154,9 @@
                viewBinding.v2.setVisibility(View.GONE);
                viewBinding.v3.setVisibility(View.GONE);
                viewBinding.homePageStationSelectTimeLl.setVisibility(View.VISIBLE);
                setUpAAChartView(2);
                String dataStr = TimeUtils.getDateTimestamp(getCurrentTimestamp(), getTimeDateFormat());
                viewBinding.yearMonthDayTv.setText(dataStr);
                setUpAAChartView();
            }
        });
        //生命期
@@ -230,32 +181,65 @@
                viewBinding.v3.setVisibility(View.GONE);
                viewBinding.homePageStationSelectTimeLl.setVisibility(View.GONE);
                setUpAAChartView(2);
                setUpAAChartView();
            }
        });
        //上一步
        viewBinding.lastStepIv.setOnClickListener(new View.OnClickListener() {
        viewBinding.lastStepClickLl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String currDate = viewBinding.yearMonthDayTv.getText().toString();
                if (TextUtils.isEmpty(currDate)) {
                    return;
                }
                String timeDateFormat = getTimeDateFormat();
                Calendar calendar = TimeUtils.stringToCalendar(currDate, timeDateFormat);
                String time = TimeUtils.subtractDayMonthYearFromDate(calendar, 1, timeDateFormat, timeType);
                viewBinding.yearMonthDayTv.setText(time);
            }
        });
        //下一步
        viewBinding.nextStepIv.setOnClickListener(new View.OnClickListener() {
        viewBinding.nextStepClickLl.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String currDate = viewBinding.yearMonthDayTv.getText().toString();
                if (TextUtils.isEmpty(currDate)) {
                    return;
                }
                String timeDateFormat = getTimeDateFormat();
                Calendar calendar = TimeUtils.stringToCalendar(currDate, timeDateFormat);
                String time = TimeUtils.addDayMonthYearToDate(calendar, 1, timeDateFormat, timeType);
                if (TimeUtils.stringDateToTimestamp(time, timeDateFormat) > getCurrentTimestamp()) {
                    HdlThreadLogic.toast(_mActivity, getString(R.string.the_query_date_is_exceeded));
                    return;
                }
                viewBinding.yearMonthDayTv.setText(time);
            }
        });
    }
    private void initView() {
        String dataStr = TimeUtils.getDateTimestamp(System.currentTimeMillis(), TimeUtils.zhDateFormat);
        if (!UserConfigManage.getInstance().isZh()) {
            dataStr = TimeUtils.getDateTimestamp(System.currentTimeMillis(), TimeUtils.enDateFormat);
        }
        String dataStr = TimeUtils.getDateTimestamp(getCurrentTimestamp(), getTimeDateFormat());
        viewBinding.yearMonthDayTv.setText(dataStr);
        String installed_capacity = getString(R.string.installed_capacity) + "(" + HdlDeviceLogic.kWp + ")";
        viewBinding.homePageStationInfoRl1Text2Tv.setText(installed_capacity);
        String generated_power = getString(R.string.generated_power) + "(" + HdlDeviceLogic.kW + ")";
        viewBinding.homePageStationInfoRl1Text4Tv.setText(generated_power);
        String generation = getString(R.string.generation) + "(" + HdlDeviceLogic.kWp + ")";
        viewBinding.homePageStationInfoRl1TitleTv.setText(generation);
        viewBinding.homePageStationInfoRl2DayIc.dataTypeTv.setText(R.string.day_power_generation);
        viewBinding.homePageStationInfoRl2MonIc.dataTypeTv.setText(R.string.month_power_generation);
        viewBinding.homePageStationInfoRl2YearIc.dataTypeTv.setText(R.string.year_power_generation);
        viewBinding.homePageStationInfoRl2CumulativeIc.dataTypeTv.setText(R.string.cumulative_power_generation);
        viewBinding.dayTv.setBackground(AppCompatResources.getDrawable(_mActivity, R.drawable.time_selected_38c494));
        viewBinding.dayTv.setTextColor(_mActivity.getColor(R.color.text_38C494));
        viewBinding.monthTv.setBackground(AppCompatResources.getDrawable(_mActivity, R.color.text_00000000));
@@ -268,6 +252,7 @@
        viewBinding.v2.setVisibility(View.VISIBLE);
        viewBinding.v3.setVisibility(View.VISIBLE);
        viewBinding.homePageStationSelectTimeLl.setVisibility(View.VISIBLE);
        setUpAAChartView();//图表加载
    }
@@ -275,24 +260,34 @@
     * 时间选择器
     */
    private void selectedTimePickerBuilder() {
        String currDate = viewBinding.yearMonthDayTv.getText().toString();
        if (TextUtils.isEmpty(currDate)) {
            return;
        }
        //时间选择器
        Calendar selectedDate = Calendar.getInstance();
        Calendar selectedDate = TimeUtils.stringToCalendar(currDate, getTimeDateFormat());
        Calendar startDate = Calendar.getInstance();
        //startDate.set(2013,1,1);
        Calendar endDate = Calendar.getInstance();
        //endDate.set(2020,1,1);
        //正确设置方式
        startDate.set(2024, 1, 1);
        endDate.set(2025, 4, 25);
        Calendar endDate = TimeUtils.timestampToCalendar(getCurrentTimestamp());
        //设置日期【开始】和【结束】
        startDate.set(2023, 1, 1);
        endDate.set(endDate.get(Calendar.YEAR), endDate.get(Calendar.MONTH), endDate.get(Calendar.DAY_OF_MONTH));
        boolean day = true;
        boolean month = true;
        boolean year = true;
        if (timeType == TimeType.month) {
            day = false;
        } else if (timeType == TimeType.year) {
            day = false;
            month = false;
        }
        TimePickerView pvTime = new TimePickerBuilder(_mActivity, new OnTimeSelectListener() {
            @Override
            public void onTimeSelect(Date date, View v) {//选中事件回调
//                        tvTime.setText(getTime(date));
                String timeDateFormat = getTimeDateFormat();
                String time = TimeUtils.dateToString(date, timeDateFormat);
                viewBinding.yearMonthDayTv.setText(time);
            }
        })
                .setType(new boolean[]{true, true, true, false, false, false})// 默认全部显示
        }).setType(new boolean[]{year, month, day, false, false, false})// 默认全部显示
                .setCancelText(_mActivity.getString(R.string.loading_cancel))//取消按钮文字
                .setSubmitText(_mActivity.getString(R.string.loading_affirm))//确认按钮文字
                .setContentTextSize(18)//滚轮文字大小
@@ -305,159 +300,33 @@
                .setCancelColor(_mActivity.getColor(R.color.text_40000000))//取消按钮文字颜色
                .setTitleBgColor(_mActivity.getColor(R.color.text_FFFFFFFF))//标题背景颜色 Night mode
                .setBgColor(_mActivity.getColor(R.color.text_FFFFFFFF))//滚轮背景颜色 Night mode
                .setTextColorCenter(_mActivity.getColor(R.color.text_90000000))
                .setDate(selectedDate)// 如果不设置的话,默认是系统时间*/
                .setTextColorCenter(_mActivity.getColor(R.color.text_90000000)).setDate(selectedDate)// 如果不设置的话,默认是系统时间*/
                .setRangDate(startDate, endDate)//起始终止年月日设定
                .setLabel(_mActivity.getString(R.string.year), _mActivity.getString(R.string.month), _mActivity.getString(R.string.day), _mActivity.getString(R.string.hour), _mActivity.getString(R.string.minute), _mActivity.getString(R.string.succeed))//默认设置为年月日时分秒
                .setLabel(_mActivity.getString(R.string.year), _mActivity.getString(R.string.month), _mActivity.getString(R.string.day), _mActivity.getString(R.string.hour), _mActivity.getString(R.string.minute), _mActivity.getString(R.string.seconds))//默认设置为年月日时分秒
                .isCenterLabel(false) //是否只显示中间选中项的label文字,false则每项item全部都带有label。
                .isDialog(false)//是否显示为对话框样式
                .setItemVisibleCount(7)//对话框高度
                .setDividerColor(_mActivity.getColor(R.color.text_E1E1E1))
                .setLineSpacingMultiplier(3f)//
                .setDividerColor(_mActivity.getColor(R.color.text_E1E1E1)).setLineSpacingMultiplier(3f)//
                .build();
        pvTime.show();
    }
    private void setUpAAChartView(int value) {
        if (value == 1) {
            aaChartView = viewBinding.AAChartView;
            aaChartView.callBack = this;
            aaChartModel = configureAAChartModel();
            aaChartView.aa_drawChartWithChartModel(aaChartModel);
        } else if (value == 2) {
            aaChartView = viewBinding.AAChartView;
            aaChartView.callBack = this;
            aaChartModel = configureColorfulColumnChart();// configureTheAAChartModel("colorfulColumnChart");
            aaChartView.aa_drawChartWithChartModel(aaChartModel);
    /**
     * 图表加载
     */
    private void setUpAAChartView() {
        aaChartView = viewBinding.AAChartView;
        aaChartView.callBack = this;
        if (TimeType.day == timeType) {
            aaChartModel = BasicChartComposer.configureAreaChart();
        } else if (TimeType.month == timeType
                || TimeType.year == timeType
                || TimeType.lifecycle == timeType) {
            aaChartModel = configureColorfulColumnChart();
        }
        aaChartView.aa_drawChartWithChartModel(aaChartModel);
    }
    private AAChartModel configureAAChartModel() {
        String chartType = AAChartType.Area;
        int position = 0;
        aaChartModel = BasicChartComposer.configureAreaChart();
        configureTheStyleForDifferentTypeChart(chartType, position);
        return aaChartModel;
    }
    private void configureTheStyleForDifferentTypeChart(String chartType, int position) {
        if ((chartType.equals(AAChartType.Area) || chartType.equals(AAChartType.Line))
                && (position == 4 || position == 5)) {
            aaChartModel = BasicChartComposer.configureStepAreaChartAndStepLineChart();
        } else if (chartType.equals(AAChartType.Column) || chartType.equals(AAChartType.Bar)) {
            aaChartModel = BasicChartComposer.configureColumnChartAndBarChart();
        } else if (chartType.equals(AAChartType.Area) || chartType.equals(AAChartType.Areaspline)) {
            aaChartModel = BasicChartComposer.configureAreaChartAndAreasplineChartStyle(chartType);
        } else if (chartType.equals(AAChartType.Line) || chartType.equals(AAChartType.Spline)) {
            aaChartModel = BasicChartComposer.configureLineChartAndSplineChartStyle(chartType);
        }
        aaChartModel.chartType = chartType;
    }
    private AAChartModel configureTheAAChartModel(String chartType) {
        switch (chartType) {
            case "colorfulChart":
                return configureColorfulChart();
            case "gradientColorfulChart":
                return configureColorfulGradientColorChart();
            case "discontinuousDataChart":
                return configureDiscontinuousDataChart();
            case "colorfulColumnChart":
                return configureColorfulColumnChart();
            case "nightingaleRoseChart":
                return configureNightingaleRoseChart();
            case "chartWithShadowStyle":
                return configureChartWithShadowStyle();
            case "colorfulGradientAreaChart":
                return configureColorfulGradientAreaChart();
            case "colorfulGradientSplineChart":
                return configureColorfulGradientSplineChart();
            case "gradientColorAreasplineChart":
                return configureGradientColorAreasplineChart();
            case "SpecialStyleMarkerOfSingleDataElementChart":
                return configureSpecialStyleMarkerOfSingleDataElementChart();
            case "SpecialStyleColumnOfSingleDataElementChart":
                return configureSpecialStyleColumnOfSingleDataElementChart();
            case "AreaChartThreshold":
                return configureAreaChartThreshold();
            case "customScatterChartMarkerSymbolContent":
                return customScatterChartMarkerSymbolContent();
            case "customLineChartMarkerSymbolContent":
                return customLineChartMarkerSymbolContent();
            case "TriangleRadarChart":
                return configureTriangleRadarChart();
            case "QuadrangleRadarChart":
                return configureQuadrangleRadarChart();
            case "PentagonRadarChart":
                return configurePentagonRadarChart();
            case "HexagonRadarChart":
                return configureHexagonRadarChart();
            case "adjustYAxisMaxAndMinValues":
                return adjustYAxisMaxAndMinValues();
            case "customSpecialStyleDataLabelOfSingleDataElementChart":
                return customSpecialStyleDataLabelOfSingleDataElementChart();
            case "customBarChartHoverColorAndSelectColor":
                return customBarChartHoverColorAndSelectColor();
            case "customChartHoverAndSelectHaloStyle":
                return customChartHoverAndSelectHaloStyle();
            case "customSplineChartMarkerStatesHoverStyle":
                return customSplineChartMarkerStatesHoverStyle();
            case "splineChartHoverLineWithNoChangeAndCustomMarkerStatesHoverStyle":
                return splineChartHoverLineWithNoChangeAndCustomMarkerStatesHoverStyle();
            case "customNormalStackingChartDataLabelsContentAndStyle":
                return customNormalStackingChartDataLabelsContentAndStyle();
            case "upsideDownPyramidChart":
                return upsideDownPyramidChart();
            case "doubleLayerPieChart":
                return doubleLayerPieChart();
            case "disableSomeOfLinesMouseTrackingEffect":
                return disableSomeOfLinesMouseTrackingEffect();
            case "configureColorfulShadowSplineChart":
                return configureColorfulShadowSplineChart();
            case "configureColorfulDataLabelsStepLineChart":
                return configureColorfulDataLabelsStepLineChart();
            case "configureColorfulGradientColorAndColorfulDataLabelsStepAreaChart":
                return configureColorfulGradientColorAndColorfulDataLabelsStepAreaChart();
            case "disableSplineChartMarkerHoverEffect":
                return disableSplineChartMarkerHoverEffect();
            case "configureMaxAndMinDataLabelsForChart":
                return configureMaxAndMinDataLabelsForChart();
            case "customVerticalXAxisCategoriesLabelsByHTMLBreakLineTag":
                return customVerticalXAxisCategoriesLabelsByHTMLBreakLineTag();
            case "noMoreGroupingAndOverlapEachOtherColumnChart":
                return noMoreGroupingAndOverlapEachOtherColumnChart();
            case "noMoreGroupingAndNestedColumnChart":
                return noMoreGroupingAndNestedColumnChart();
            case "topRoundedCornersStackingColumnChart":
                return topRoundedCornersStackingColumnChart();
            case "freeStyleRoundedCornersStackingColumnChart":
                return freeStyleRoundedCornersStackingColumnChart();
            case "customColumnChartBorderStyleAndStatesHoverColor":
                return customColumnChartBorderStyleAndStatesHoverColor();
            case "customLineChartWithColorfulMarkersAndLines":
                return customLineChartWithColorfulMarkersAndLines();
            case "customLineChartWithColorfulMarkersAndLines2":
                return customLineChartWithColorfulMarkersAndLines2();
            case "drawLineChartWithPointsCoordinates":
                return drawLineChartWithPointsCoordinates();
            case "configureSpecialStyleColumnForNegativeDataMixedPositiveData":
                return configureSpecialStyleColumnForNegativeDataMixedPositiveData();
            case "configureMultiLevelStopsArrGradientColorAreasplineMixedLineChart":
                return configureMultiLevelStopsArrGradientColorAreasplineMixedLineChart();
            case "connectNullsForSingleAASeriesElement":
                return connectNullsForSingleAASeriesElement();
            case "lineChartsWithLargeDifferencesInTheNumberOfDataInDifferentSeriesElement":
                return lineChartsWithLargeDifferencesInTheNumberOfDataInDifferentSeriesElement();
            case "customAreasplineChartWithColorfulGradientColorZones":
                return customAreasplineChartWithColorfulGradientColorZones();
            case "largeDataStackingColumnChart":
                return largeDataStackingColumnChart();
        }
        return configureColorfulChart();
    }
    @Override
    public void chartViewDidFinishLoad(AAChartView aaChartView) {
@@ -488,10 +357,53 @@
    }
    public enum TimeType {
        day,
        month,
        year,
        lifecycle
    /**
     * 获取当前系统日期时间戳
     *
     * @return 时间戳
     */
    private long getCurrentTimestamp() {
        return new Date().getTime();
    }
    /**
     * 获取日期格式 (2024/2/09,yyyy/DD/dd)
     *
     * @return 日期格式 (2024/2/09,yyyy/DD/dd)
     */
    private String getTimeDateFormat() {
        String timeDateFormat = TimeUtils.zhDateYearMonthDayFormat;
        switch (timeType) {
            case day: {
                timeDateFormat = TimeUtils.zhDateYearMonthDayFormat;
                if (!UserConfigManage.getInstance().isZh()) {
                    timeDateFormat = TimeUtils.enDateYearMonthDayFormat;
                }
            }
            break;
            case month: {
                timeDateFormat = TimeUtils.zhDateYearMonthFormat;
                if (!UserConfigManage.getInstance().isZh()) {
                    timeDateFormat = TimeUtils.enDateYearMonthFormat;
                }
            }
            break;
            case year:
            case lifecycle: {
                timeDateFormat = TimeUtils.zhDateYearFormat;
                if (!UserConfigManage.getInstance().isZh()) {
                    timeDateFormat = TimeUtils.enDateYearFormat;
                }
            }
            break;
        }
        return timeDateFormat;
    }
    public enum TimeType {
        day, month, year, lifecycle
    }
}
app/src/main/java/com/hdl/photovoltaic/utils/TimeUtils.java
@@ -1,9 +1,11 @@
package com.hdl.photovoltaic.utils;
import android.annotation.SuppressLint;
import android.text.TextUtils;
import com.hdl.photovoltaic.config.UserConfigManage;
import com.hdl.photovoltaic.other.HdlThreadLogic;
import com.hdl.photovoltaic.ui.home.HomePageFragment;
import com.hdl.sdk.link.core.utils.LanguageUtils;
import java.text.SimpleDateFormat;
@@ -16,8 +18,13 @@
 */
public class TimeUtils {
    public static final String zhDateFormat = "yyyy/MM/dd";
    public static final String enDateFormat = "dd/MM/yyyy";
    public static final String zhDateYearMonthDayFormat = "yyyy/MM/dd";
    public static final String zhDateYearMonthFormat = "yyyy/MM";
    public static final String zhDateYearFormat = "yyyy";
    public static final String enDateYearMonthDayFormat = "dd/MM/yyyy";
    public static final String enDateYearMonthFormat = "/MM/yyyy";
    public static final String enDateYearFormat = "yyyy";
    /**
     * 获取分钟
@@ -40,7 +47,7 @@
     * 时间戳转时间(格式:yyyy-MM-dd)
     *
     * @param timestamp   时间戳
     * @param date_format 时间格式(例如"yyyy-MM-dd")
     * @param date_format 时间格式(例如"yyyy/MM/dd")
     * @return -
     */
    public static String getDateTimestamp(long timestamp, String date_format) {
@@ -100,30 +107,118 @@
    }
    /**
     * 加天数
     * 加(日,月,年)计算
     *
     * @param date      日历
     * @param daysToAdd 天数
     * @param date              日历
     * @param dayMonthYearToAdd 天数(日,月,年)
     * @return 日历
     */
    public static Calendar addDaysToDate(Calendar date, int daysToAdd) {
    public static String addDayMonthYearToDate(Calendar date, int dayMonthYearToAdd, String dateFormat, HomePageFragment.TimeType timeType) {
        Calendar newDate = (Calendar) date.clone();
        newDate.add(Calendar.DAY_OF_MONTH, daysToAdd);
        return newDate;
        if (timeType == HomePageFragment.TimeType.day) {
            newDate.add(Calendar.DAY_OF_MONTH, dayMonthYearToAdd);
        } else if (timeType == HomePageFragment.TimeType.month) {
            newDate.add(Calendar.MONTH, dayMonthYearToAdd);
        } else if (timeType == HomePageFragment.TimeType.year || timeType == HomePageFragment.TimeType.lifecycle) {
            newDate.add(Calendar.YEAR, dayMonthYearToAdd);
        }
        return calendarToString(newDate, dateFormat);
    }
    /**
     * 减天数
     * 减(日,月,年)计算
     *
     * @param date           日历
     * @param daysToSubtract 天数
     * @param date                   日历
     * @param dayMonthYearToSubtract 天数
     * @return 日历
     */
    public static Calendar subtractDaysFromDate(Calendar date, int daysToSubtract) {
    public static String subtractDayMonthYearFromDate(Calendar date, int dayMonthYearToSubtract, String dateFormat, HomePageFragment.TimeType timeType) {
        Calendar newDate = (Calendar) date.clone();
        newDate.add(Calendar.DAY_OF_MONTH, -daysToSubtract);
        return newDate;
        if (timeType == HomePageFragment.TimeType.day) {
            newDate.add(Calendar.DAY_OF_MONTH, -dayMonthYearToSubtract);
        } else if (timeType == HomePageFragment.TimeType.month) {
            newDate.add(Calendar.MONTH, -dayMonthYearToSubtract);
        } else if (timeType == HomePageFragment.TimeType.year) {
            newDate.add(Calendar.YEAR, -dayMonthYearToSubtract);
        }
        return calendarToString(newDate, dateFormat);
    }
    /**
     * 时间戳转Calendar
     *
     * @param timestamp 时间戳
     * @return Calendar对象
     */
    public static Calendar timestampToCalendar(long timestamp) {
        // 将时间戳转换为日期
        Date date = new Date(timestamp);
        // 使用Calendar类设置日期
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(date);
        return calendar;
    }
    /**
     * 字符串日期格式转Calendar
     *
     * @param dateString (2023/04/01)
     * @param dateFormat (yyyy/MM/dd)
     * @return Calendar对象
     */
    public static Calendar stringToCalendar(String dateString, String dateFormat) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, Locale.ENGLISH);
        Calendar calendar = Calendar.getInstance();
        try {
            Date date = sdf.parse(dateString);
            if (date != null) {
                calendar.setTime(date);
            }
        } catch (Exception ignored) {
        }
        return calendar;
    }
    /**
     * Calendar转字符串日期格式
     *
     * @param dateFormat (yyyy/MM/dd)
     * @return Calendar对象
     */
    public static String calendarToString(Calendar calendar, String dateFormat) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, Locale.ENGLISH);
        return sdf.format(calendar.getTime());
    }
    /**
     * Date转字符串日期格式
     *
     * @param dateFormat (yyyy/MM/dd)
     * @return Calendar对象
     */
    public static String dateToString(Date date, String dateFormat) {
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat, Locale.ENGLISH);
        return sdf.format(date.getTime());
    }
    /**
     * 字符串日期格式转时间戳
     *
     * @param dateString (2024/06/01)
     * @param dateFormat (yyyy/MM/dd)
     * @return 时间戳
     */
    public static long stringDateToTimestamp(String dateString, String dateFormat) {
        try {
            SimpleDateFormat slf = new SimpleDateFormat(dateFormat, Locale.getDefault());
            Date date = slf.parse(dateString);
            if (date == null) {
                return 0;
            }
            return date.getTime(); // 获取时间戳
        } catch (Exception ignored) {
        }
        return 0;
    }
}
app/src/main/res/layout/fragment_home_page.xml
@@ -148,7 +148,7 @@
                        android:layout_below="@+id/home_page_station_info_rl1_text1_tv"
                        android:layout_alignStart="@+id/home_page_station_info_rl1_text1_tv"
                        android:layout_marginTop="3dp"
                        android:text="kw.h" />
                        android:text="@string/installed_capacity" />
                    <TextView
                        android:id="@+id/home_page_station_info_rl1_text3_tv"
@@ -168,7 +168,7 @@
                        android:layout_below="@+id/home_page_station_info_rl1_text3_tv"
                        android:layout_alignStart="@+id/home_page_station_info_rl1_text1_tv"
                        android:layout_marginTop="3dp"
                        android:text="kw.h" />
                        android:text="@string/generated_power" />
                </RelativeLayout>
@@ -194,7 +194,7 @@
                        android:layout_height="14.5dp"
                        android:layout_marginStart="@dimen/dp_47"
                        android:layout_marginTop="17dp"
                        android:text="Electricity /kw.h"
                        android:text="@string/generation"
                        android:textColor="@color/text_191919"
                        android:textSize="@dimen/text_12" />
@@ -260,7 +260,7 @@
                    android:layout_width="wrap_content"
                    android:layout_height="18dp"
                    android:layout_marginTop="@dimen/dp_25"
                    android:text="点击测试"
                    android:text="@string/energy_generation_statistics"
                    android:textColor="@color/text_90000000"
                    android:textSize="@dimen/text_14"
                    android:textStyle="bold"
@@ -340,16 +340,31 @@
                    app:layout_constraintEnd_toEndOf="parent"
                    app:layout_constraintStart_toStartOf="parent"
                    app:layout_constraintTop_toBottomOf="@+id/home_page_station_select_time_type_ll">
                    <!--加大点击热区-->
                    <LinearLayout
                        android:id="@+id/last_step_click_ll"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:orientation="horizontal">
                    <ImageView
                        android:id="@+id/last_step_iv"
                        android:layout_width="9dp"
                        android:layout_height="15dp"
                        android:scaleType="fitCenter"
                        android:src="@drawable/last_step" />
                        <View
                            android:layout_width="@dimen/dp_16"
                            android:layout_height="match_parent" />
                        <ImageView
                            android:id="@+id/last_step_iv"
                            android:layout_width="9dp"
                            android:layout_height="15dp"
                            android:scaleType="fitCenter"
                            android:src="@drawable/last_step" />
                        <View
                            android:layout_width="@dimen/dp_16"
                            android:layout_height="match_parent" />
                    </LinearLayout>
                    <View
                        android:layout_width="@dimen/dp_32"
                        android:layout_width="@dimen/dp_16"
                        android:layout_height="match_parent" />
@@ -364,15 +379,31 @@
                        android:textStyle="bold" />
                    <View
                        android:layout_width="@dimen/dp_32"
                        android:layout_width="@dimen/dp_16"
                        android:layout_height="match_parent" />
                    <!--加大点击热区-->
                    <LinearLayout
                        android:id="@+id/next_step_click_ll"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:orientation="horizontal">
                    <ImageView
                        android:id="@+id/next_step_iv"
                        android:layout_width="9dp"
                        android:layout_height="15dp"
                        android:scaleType="fitCenter"
                        android:src="@drawable/next_step" />
                        <View
                            android:layout_width="@dimen/dp_16"
                            android:layout_height="match_parent" />
                        <ImageView
                            android:id="@+id/next_step_iv"
                            android:layout_width="9dp"
                            android:layout_height="15dp"
                            android:scaleType="fitCenter"
                            android:src="@drawable/next_step" />
                        <View
                            android:layout_width="@dimen/dp_16"
                            android:layout_height="match_parent" />
                    </LinearLayout>
                </LinearLayout>
@@ -437,7 +468,7 @@
                    android:id="@+id/social_contribution_title_tv"
                    android:layout_width="wrap_content"
                    android:layout_height="17dp"
                    android:text="Social Contribution"
                    android:text="@string/social_contribution"
                    android:textColor="@color/text_90000000"
                    android:textSize="@dimen/text_14"
                    android:textStyle="bold"
app/src/main/res/layout/item_data.xml
@@ -6,21 +6,23 @@
    <TextView
        android:id="@+id/data_tv"
        style="@style/Text20Style"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/dp_24"
        android:text="33333"
        android:textColor="@color/text_90000000"
        android:textSize="@dimen/text_20"
        android:textStyle="bold"
        android:text="33"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <TextView
        android:id="@+id/data_type_tv"
        style="@style/Text14Style"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/dp_17"
        android:layout_marginTop="3dp"
        android:text="kw.h"
        android:textColor="@color/text_40000000"
        android:textSize="@dimen/text_14"
        app:layout_constraintEnd_toEndOf="@+id/data_tv"
        app:layout_constraintStart_toStartOf="@+id/data_tv"
        app:layout_constraintTop_toBottomOf="@+id/data_tv" />
app/src/main/res/values/strings.xml
@@ -255,5 +255,15 @@
    <string name="hour">时</string>
    <string name="minutc">分</string>
    <string name="seconds">秒</string>
    <string name="the_query_date_is_exceeded">超出查询日期.</string>
    <string name="energy_generation_statistics">发电量统计</string>
    <string name="social_contribution">社会贡献</string>
    <string name="day_power_generation">当日发电量</string>
    <string name="month_power_generation">当月发电量</string>
    <string name="year_power_generation">当年发电量</string>
    <string name="cumulative_power_generation">累计发电量</string>
    <string name="generated_power">发电功率</string>
    <string name="installed_capacity">装机容量</string>
    <string name="generation">发电量</string>
</resources>