lmw
2025-04-24 718f31c92e2029d05260810435a2c70cef6e6ce5
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
package com.ypx.imagepicker.bean;
 
import android.content.Context;
 
import com.ypx.imagepicker.R;
import com.ypx.imagepicker.bean.selectconfig.BaseSelectConfig;
import com.ypx.imagepicker.presenter.IPickerPresenter;
 
import java.util.ArrayList;
 
/**
 * Time: 2019/10/18 9:18
 * Author:ypx
 * Description: 选择器Item不可选中的原因码
 */
public class PickerItemDisableCode {
    public static final int NORMAL = 0;
    public static final int DISABLE_IN_SHIELD = 1;
    public static final int DISABLE_OVER_MAX_COUNT = 2;
    public static final int DISABLE_ONLY_SELECT_IMAGE = 3;
    public static final int DISABLE_ONLY_SELECT_VIDEO = 4;
    public static final int DISABLE_VIDEO_OVER_MAX_DURATION = 5;
    public static final int DISABLE_VIDEO_LESS_MIN_DURATION = 6;
    public static final int DISABLE_VIDEO_ONLY_SINGLE_PICK = 7;
 
    public static String getMessageFormCode(Context context, int code, IPickerPresenter presenter, BaseSelectConfig selectConfig) {
        String message = "";
        switch (code) {
            case DISABLE_IN_SHIELD:
                message = context.getString(R.string.picker_str_tip_shield);
                break;
            case DISABLE_OVER_MAX_COUNT:
                presenter.overMaxCountTip(context, selectConfig.getMaxCount());
                message = "";
                break;
            case DISABLE_ONLY_SELECT_IMAGE:
                message = context.getString(R.string.picker_str_tip_only_select_image);
                break;
            case DISABLE_ONLY_SELECT_VIDEO:
                message = context.getString(R.string.picker_str_tip_only_select_video);
                break;
            case DISABLE_VIDEO_OVER_MAX_DURATION:
                message = context.getString(R.string.picker_str_str_video_over_max_duration)
                        + selectConfig.getMaxVideoDurationFormat(context);
                break;
            case DISABLE_VIDEO_LESS_MIN_DURATION:
                message = context.getString(R.string.picker_str_tip_video_less_min_duration)
                        + selectConfig.getMinVideoDurationFormat(context);
                break;
            case DISABLE_VIDEO_ONLY_SINGLE_PICK:
                message = context.getString(R.string.picker_str_tip_only_select_one_video);
                break;
        }
        return message;
    }
 
 
    public static int getItemDisableCode(ImageItem imageItem, BaseSelectConfig selectConfig,
                                         ArrayList<ImageItem> selectList,
                                         boolean isContainsThisItem) {
        boolean isItemEnable = true;
        int disableCode = PickerItemDisableCode.NORMAL;
 
        //如果在屏蔽列表中,代表不可选择
        if (selectConfig.isShieldItem(imageItem)) {
            isItemEnable = false;
            disableCode = PickerItemDisableCode.DISABLE_IN_SHIELD;
        }
 
        //如果是视频item
        if (imageItem.isVideo()) {
            //如果只能选择图片和视频类型一种,并且当前已经选择了图片,则该视频不可以选中
            if (isItemEnable
                    && selectConfig.isSinglePickImageOrVideoType()
                    && selectedFirstItemIsImage(selectList)) {
                isItemEnable = false;
                disableCode = PickerItemDisableCode.DISABLE_ONLY_SELECT_IMAGE;
            }
            //视频时长不符合选择条件
            else if (isItemEnable
                    && imageItem.duration > selectConfig.getMaxVideoDuration()) {
                isItemEnable = false;
                disableCode = PickerItemDisableCode.DISABLE_VIDEO_OVER_MAX_DURATION;
            } else if (isItemEnable
                    && imageItem.duration < selectConfig.getMinVideoDuration()) {
                isItemEnable = false;
                disableCode = PickerItemDisableCode.DISABLE_VIDEO_LESS_MIN_DURATION;
            }
            //如果视频只能单选并且已经选过视频
            else if (isItemEnable
                    && selectConfig.isVideoSinglePick()
                    && isSelectedListContainsVideo(selectList)
                    && !isContainsThisItem) {
                isItemEnable = false;
                disableCode = PickerItemDisableCode.DISABLE_VIDEO_ONLY_SINGLE_PICK;
            }
        }
        //如果是图片item
        else {
            //如果只能选择图片和视频类型一种,并且当前已经选择了视频,则该图片不可以选中
            if (selectConfig.isSinglePickImageOrVideoType()
                    && selectedFirstItemIsVideo(selectList)) {
                isItemEnable = false;
                disableCode = PickerItemDisableCode.DISABLE_ONLY_SELECT_VIDEO;
            }
        }
 
        //已经超过最大选中数量
        if (isItemEnable && hasSelectedList(selectList) && selectList.size() >= selectConfig.getMaxCount()
                && !isContainsThisItem) {
            disableCode = PickerItemDisableCode.DISABLE_OVER_MAX_COUNT;
        }
 
        return disableCode;
    }
 
    private static boolean selectedFirstItemIsVideo(ArrayList<ImageItem> selectList) {
        return hasSelectedList(selectList) && selectList.get(0) != null && selectList.get(0).isVideo();
    }
 
    private static boolean selectedFirstItemIsImage(ArrayList<ImageItem> selectList) {
        return hasSelectedList(selectList) && selectList.get(0) != null && !selectList.get(0).isVideo();
    }
 
    private static boolean hasSelectedList(ArrayList<ImageItem> selectList) {
        return selectList != null && selectList.size() > 0;
    }
 
 
    private static boolean isSelectedListContainsVideo(ArrayList<ImageItem> selectList) {
        for (ImageItem imageItem : selectList) {
            if (imageItem.isVideo()) {
                return true;
            }
        }
        return false;
    }
}