All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.luck.picture.lib.PictureSelectionModel Maven / Gradle / Ivy

The newest version!
package com.luck.picture.lib;

import static android.os.Build.VERSION_CODES.KITKAT;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.os.Build;
import android.text.TextUtils;

import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.annotation.ColorInt;
import androidx.annotation.StyleRes;
import androidx.fragment.app.Fragment;

import com.luck.picture.lib.animators.AnimationType;
import com.luck.picture.lib.camera.CustomCameraType;
import com.luck.picture.lib.config.PictureConfig;
import com.luck.picture.lib.config.PictureMimeType;
import com.luck.picture.lib.config.PictureSelectionConfig;
import com.luck.picture.lib.engine.CompressEngine;
import com.luck.picture.lib.engine.ImageEngine;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.listener.OnChooseLimitCallback;
import com.luck.picture.lib.listener.OnCustomCameraInterfaceListener;
import com.luck.picture.lib.listener.OnCustomImagePreviewCallback;
import com.luck.picture.lib.listener.OnPermissionsObtainCallback;
import com.luck.picture.lib.listener.OnResultCallbackListener;
import com.luck.picture.lib.listener.OnVideoSelectedPlayCallback;
import com.luck.picture.lib.style.PictureCropParameterStyle;
import com.luck.picture.lib.style.PictureParameterStyle;
import com.luck.picture.lib.style.PictureSelectorUIStyle;
import com.luck.picture.lib.style.PictureWindowAnimationStyle;
import com.luck.picture.lib.tools.DoubleUtils;
import com.luck.picture.lib.tools.SdkVersionUtils;
import com.yalantis.ucrop.UCrop;
import com.yalantis.ucrop.view.OverlayView;

import java.lang.ref.WeakReference;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;

/**
 * @author:luck
 * @date:2017-5-24 21:30
 * @describe:PictureSelectionModel
 */

public class PictureSelectionModel {
    private final PictureSelectionConfig selectionConfig;
    private final PictureSelector selector;

    public PictureSelectionModel(PictureSelector selector, int chooseMode) {
        this.selector = selector;
        selectionConfig = PictureSelectionConfig.getCleanInstance();
        selectionConfig.chooseMode = chooseMode;
        initCustomCameraFeatures();
    }

    public PictureSelectionModel(PictureSelector selector, int chooseMode, boolean camera) {
        this.selector = selector;
        selectionConfig = PictureSelectionConfig.getCleanInstance();
        selectionConfig.camera = camera;
        selectionConfig.chooseMode = chooseMode;
        initCustomCameraFeatures();
    }

    /**
     * @param themeStyleId PictureSelector Theme style
     * @return PictureSelectionModel
     * Use {@link R.style#picture_default_style#picture_Sina_style#picture_white_style#picture_QQ_style#picture_WeChat_style}
     */
    public PictureSelectionModel theme(@StyleRes int themeStyleId) {
        selectionConfig.themeStyleId = themeStyleId;
        return this;
    }

    /**
     * Setting PictureSelector UI Style
     *
     * @param uiStyle 

* {@link PictureSelectorUIStyle} *

* @return */ public PictureSelectionModel setPictureUIStyle(PictureSelectorUIStyle uiStyle) { if (uiStyle != null) { PictureSelectionConfig.uiStyle = uiStyle; if (!selectionConfig.isWeChatStyle) { selectionConfig.isWeChatStyle = PictureSelectionConfig.uiStyle.isNewSelectStyle; } } return this; } /** * @param locale Language * @return PictureSelectionModel */ public PictureSelectionModel setLanguage(int language) { selectionConfig.language = language; return this; } /** * Change the desired orientation of this activity. If the activity * is currently in the foreground or otherwise impacting the screen * orientation, the screen will immediately be changed (possibly causing * the activity to be restarted). Otherwise, this will be used the next * time the activity is visible. * * @param requestedOrientation An orientation constant as used in * {@link ActivityInfo#screenOrientation ActivityInfo.screenOrientation}. */ public PictureSelectionModel setRequestedOrientation(int requestedOrientation) { selectionConfig.requestedOrientation = requestedOrientation; return this; } /** * @param engine Image Load the engine * @return Use {@link .imageEngine()}. */ @Deprecated public PictureSelectionModel loadImageEngine(ImageEngine engine) { if (PictureSelectionConfig.imageEngine != engine) { PictureSelectionConfig.imageEngine = engine; } return this; } /** * @param engine Image Load the engine * @return */ public PictureSelectionModel imageEngine(ImageEngine engine) { if (PictureSelectionConfig.imageEngine != engine) { PictureSelectionConfig.imageEngine = engine; } return this; } /** * @param engine Image Compress the engine * @return */ public PictureSelectionModel compressEngine(CompressEngine engine) { if (PictureSelectionConfig.compressEngine != engine) { PictureSelectionConfig.compressEngine = engine; } return this; } /** * @param selectionMode PictureSelector Selection model and PictureConfig.MULTIPLE or PictureConfig.SINGLE * @return */ public PictureSelectionModel selectionMode(int selectionMode) { selectionConfig.selectionMode = selectionMode; return this; } /** * @param isWeChatStyle Select style with or without WeChat enabled * @return */ public PictureSelectionModel isWeChatStyle(boolean isWeChatStyle) { selectionConfig.isWeChatStyle = isWeChatStyle; return this; } /** * @param isUseCustomCamera Whether to use a custom camera * @return */ public PictureSelectionModel isUseCustomCamera(boolean isUseCustomCamera) { selectionConfig.isUseCustomCamera = Build.VERSION.SDK_INT > KITKAT && isUseCustomCamera; return this; } /** * @param callback Provide video playback control,Users are free to customize the video display interface * @return */ public PictureSelectionModel bindCustomPlayVideoCallback(OnVideoSelectedPlayCallback callback) { PictureSelectionConfig.customVideoPlayCallback = new WeakReference<>(callback).get(); return this; } /** * @param callback Custom preview callback function * @return */ public PictureSelectionModel bindCustomPreviewCallback(OnCustomImagePreviewCallback callback) { PictureSelectionConfig.onCustomImagePreviewCallback = new WeakReference<>(callback).get(); return this; } /** * # The developer provides an additional callback interface to the user where the user can perform some custom actions * {link 如果是自定义相机则必须使用.startActivityForResult(this,PictureConfig.REQUEST_CAMERA);方式启动否则PictureSelector处理不了相机后的回调} * * @param listener * @return Use ${bindCustomCameraInterfaceListener} */ @Deprecated public PictureSelectionModel bindPictureSelectorInterfaceListener(OnCustomCameraInterfaceListener listener) { PictureSelectionConfig.onCustomCameraInterfaceListener = new WeakReference<>(listener).get(); return this; } /** * # The developer provides an additional callback interface to the user where the user can perform some custom actions * {link 如果是自定义相机则必须使用.startActivityForResult(this,PictureConfig.REQUEST_CAMERA);方式启动否则PictureSelector处理不了相机后的回调} * * @param listener * @return */ public PictureSelectionModel bindCustomCameraInterfaceListener(OnCustomCameraInterfaceListener listener) { PictureSelectionConfig.onCustomCameraInterfaceListener = new WeakReference<>(listener).get(); return this; } /** * Custom Permissions callback * * @param listener * @return */ public PictureSelectionModel bindCustomPermissionsObtainListener(OnPermissionsObtainCallback listener) { PictureSelectionConfig.onPermissionsObtainCallback = new WeakReference<>(listener).get(); return this; } /** * Custom choose limit dialog callback * * @param listener * @return */ public PictureSelectionModel bindCustomChooseLimitListener(OnChooseLimitCallback listener) { PictureSelectionConfig.onChooseLimitCallback = new WeakReference<>(listener).get(); return this; } /** * @param buttonFeatures Set the record button function * # 具体参考 CustomCameraView.BUTTON_STATE_BOTH、BUTTON_STATE_ONLY_CAPTURE、BUTTON_STATE_ONLY_RECORDER * @return */ @Deprecated public PictureSelectionModel setButtonFeatures(int buttonFeatures) { selectionConfig.buttonFeatures = buttonFeatures; return this; } /** * @param buttonFeatures Set the record button function * # 具体参考 {@link CustomCameraType.BUTTON_STATE_BOTH # CustomCameraView.BUTTON_STATE_ONLY_CAPTURE # CustomCameraView.BUTTON_STATE_ONLY_RECORDER} * @return */ public PictureSelectionModel setCustomCameraFeatures(int buttonFeatures) { if (selectionConfig.chooseMode == PictureMimeType.ofImage()) { selectionConfig.buttonFeatures = CustomCameraType.BUTTON_STATE_ONLY_CAPTURE; } else if (selectionConfig.chooseMode == PictureMimeType.ofVideo()) { selectionConfig.buttonFeatures = CustomCameraType.BUTTON_STATE_ONLY_RECORDER; } else { if (selectionConfig.ofAllCameraType == PictureMimeType.ofImage()){ selectionConfig.buttonFeatures = CustomCameraType.BUTTON_STATE_ONLY_CAPTURE; } else if (selectionConfig.ofAllCameraType == PictureMimeType.ofVideo()){ selectionConfig.buttonFeatures = CustomCameraType.BUTTON_STATE_ONLY_RECORDER; } else { selectionConfig.buttonFeatures = buttonFeatures; } } return this; } /** * initCustomCameraFeatures * * @return this */ private PictureSelectionModel initCustomCameraFeatures() { if (selectionConfig.chooseMode == PictureMimeType.ofImage()) { selectionConfig.buttonFeatures = CustomCameraType.BUTTON_STATE_ONLY_CAPTURE; } else if (selectionConfig.chooseMode == PictureMimeType.ofVideo()) { selectionConfig.buttonFeatures = CustomCameraType.BUTTON_STATE_ONLY_RECORDER; } else { if (selectionConfig.ofAllCameraType == PictureMimeType.ofImage()) { selectionConfig.buttonFeatures = CustomCameraType.BUTTON_STATE_ONLY_CAPTURE; } else if (selectionConfig.ofAllCameraType == PictureMimeType.ofVideo()) { selectionConfig.buttonFeatures = CustomCameraType.BUTTON_STATE_ONLY_RECORDER; } else { selectionConfig.buttonFeatures = CustomCameraType.BUTTON_STATE_BOTH; } } return this; } /** * Set Custom Camera Photo Loading color * * @param color * @return */ public PictureSelectionModel setCaptureLoadingColor(int color) { selectionConfig.captureLoadingColor = color; return this; } /** * @param enableCrop Do you want to start cutting ? * @return Use {link .isEnableCrop()} */ @Deprecated public PictureSelectionModel enableCrop(boolean enableCrop) { selectionConfig.enableCrop = enableCrop; return this; } /** * @param enableCrop Do you want to start cutting ? * @return */ public PictureSelectionModel isEnableCrop(boolean enableCrop) { selectionConfig.enableCrop = enableCrop; return this; } /** * @param uCropOptions UCrop parameter configuration is provided * @return */ public PictureSelectionModel basicUCropConfig(UCrop.Options uCropOptions) { selectionConfig.uCropOptions = uCropOptions; return this; } /** * @param isMultipleSkipCrop Whether multiple images can be skipped when cropping * @return */ public PictureSelectionModel isMultipleSkipCrop(boolean isMultipleSkipCrop) { selectionConfig.isMultipleSkipCrop = isMultipleSkipCrop; return this; } /** * @param enablePreviewAudio {@link use isEnablePreviewAudio} * @return */ @Deprecated public PictureSelectionModel enablePreviewAudio(boolean enablePreviewAudio) { selectionConfig.enablePreviewAudio = enablePreviewAudio; return this; } /** * @param enablePreviewAudio * @return */ public PictureSelectionModel isEnablePreviewAudio(boolean enablePreviewAudio) { selectionConfig.enablePreviewAudio = enablePreviewAudio; return this; } /** * @param freeStyleCropEnabled Crop frame is move ? *

* Please Use {@link # freeStyleCropMode() } *

* @return */ @Deprecated public PictureSelectionModel freeStyleCropEnabled(boolean freeStyleCropEnabled) { selectionConfig.freeStyleCropEnabled = freeStyleCropEnabled; return this; } /** * @param freeStyleCropMode Crop freeStyleCropMode *

* Please Use {@link OverlayView.FreestyleMode #FREESTYLE_CROP_MODE_DISABLE # FREESTYLE_CROP_MODE_ENABLE # FREESTYLE_CROP_MODE_ENABLE_WITH_PASS_THROUGH} *

* @return */ public PictureSelectionModel freeStyleCropMode(int freeStyleCropMode) { selectionConfig.freeStyleCropMode = freeStyleCropMode; return this; } /** * @param isDragCenter Crop and drag automatically center * @return */ public PictureSelectionModel isCropDragSmoothToCenter(boolean isDragCenter) { selectionConfig.isDragCenter = isDragCenter; return this; } /** * @param scaleEnabled Crop frame is zoom ? * @return */ public PictureSelectionModel scaleEnabled(boolean scaleEnabled) { selectionConfig.scaleEnabled = scaleEnabled; return this; } /** * @param rotateEnabled Crop frame is rotate ? * @return */ public PictureSelectionModel rotateEnabled(boolean rotateEnabled) { selectionConfig.rotateEnabled = rotateEnabled; return this; } /** * @param circleDimmedLayer Circular head cutting * @return */ public PictureSelectionModel circleDimmedLayer(boolean circleDimmedLayer) { selectionConfig.circleDimmedLayer = circleDimmedLayer; return this; } /** * @param circleDimmedColor setCircleDimmedColor * @return */ @Deprecated public PictureSelectionModel setCircleDimmedColor(int circleDimmedColor) { selectionConfig.circleDimmedColor = circleDimmedColor; return this; } /** * @param dimmedColor * @return */ public PictureSelectionModel setCropDimmedColor(int dimmedColor) { selectionConfig.circleDimmedColor = dimmedColor; return this; } /** * @param circleDimmedBorderColor setCircleDimmedBorderColor * @return */ public PictureSelectionModel setCircleDimmedBorderColor(int circleDimmedBorderColor) { selectionConfig.circleDimmedBorderColor = circleDimmedBorderColor; return this; } /** * @param circleStrokeWidth setCircleStrokeWidth * @return */ public PictureSelectionModel setCircleStrokeWidth(int circleStrokeWidth) { selectionConfig.circleStrokeWidth = circleStrokeWidth; return this; } /** * @param showCropFrame Whether to show crop frame * @return */ public PictureSelectionModel showCropFrame(boolean showCropFrame) { selectionConfig.showCropFrame = showCropFrame; return this; } /** * @param showCropGrid Whether to show CropGrid * @return */ public PictureSelectionModel showCropGrid(boolean showCropGrid) { selectionConfig.showCropGrid = showCropGrid; return this; } /** * @param hideBottomControls Whether is Clipping function bar * 单选有效 * @return */ public PictureSelectionModel hideBottomControls(boolean hideBottomControls) { selectionConfig.hideBottomControls = hideBottomControls; return this; } /** * @param aspect_ratio_x Crop Proportion x * @param aspect_ratio_y Crop Proportion y * @return */ public PictureSelectionModel withAspectRatio(int aspect_ratio_x, int aspect_ratio_y) { selectionConfig.aspect_ratio_x = aspect_ratio_x; selectionConfig.aspect_ratio_y = aspect_ratio_y; return this; } /** * You can select pictures and videos at the same time * * @param isWithVideoImage Whether the pictures and videos can be selected together * @return */ public PictureSelectionModel isWithVideoImage(boolean isWithVideoImage) { selectionConfig.isWithVideoImage = selectionConfig.selectionMode != PictureConfig.SINGLE && selectionConfig.chooseMode == PictureMimeType.ofAll() && isWithVideoImage; return this; } /** * Choose between photographing and shooting in ofAll mode * * @param ofAllCameraType {@link PictureMimeType.ofImage or PictureMimeType.ofVideo} * The default is ofAll() mode * @return */ public PictureSelectionModel setOfAllCameraType(int ofAllCameraType) { selectionConfig.ofAllCameraType = ofAllCameraType; return this; } /** * When the maximum number of choices is reached, does the list enable the mask effect * * @param isMaxSelectEnabledMask * @return */ public PictureSelectionModel isMaxSelectEnabledMask(boolean isMaxSelectEnabledMask) { selectionConfig.isMaxSelectEnabledMask = isMaxSelectEnabledMask; return this; } /** * If SyncCover * * @param isSyncCover * @return */ public PictureSelectionModel isSyncCover(boolean isSyncCover) { selectionConfig.isSyncCover = isSyncCover; return this; } /** * @param maxSelectNum PictureSelector max selection * @return */ public PictureSelectionModel maxSelectNum(int maxSelectNum) { selectionConfig.maxSelectNum = maxSelectNum; return this; } /** * @param minSelectNum PictureSelector min selection * @return */ public PictureSelectionModel minSelectNum(int minSelectNum) { selectionConfig.minSelectNum = minSelectNum; return this; } /** * @param maxVideoSelectNum PictureSelector video max selection * @return */ public PictureSelectionModel maxVideoSelectNum(int maxVideoSelectNum) { selectionConfig.maxVideoSelectNum = selectionConfig.chooseMode == PictureMimeType.ofVideo() ? 0 : maxVideoSelectNum; return this; } /** * @param minVideoSelectNum PictureSelector video min selection * @return */ public PictureSelectionModel minVideoSelectNum(int minVideoSelectNum) { selectionConfig.minVideoSelectNum = minVideoSelectNum; return this; } /** * By clicking the title bar consecutively, RecyclerView automatically rolls back to the top * * @param isAutomaticTitleRecyclerTop * @return */ public PictureSelectionModel isAutomaticTitleRecyclerTop(boolean isAutomaticTitleRecyclerTop) { selectionConfig.isAutomaticTitleRecyclerTop = isAutomaticTitleRecyclerTop; return this; } /** * @param Select whether to return directly * @return */ public PictureSelectionModel isSingleDirectReturn(boolean isSingleDirectReturn) { selectionConfig.isSingleDirectReturn = selectionConfig.selectionMode == PictureConfig.SINGLE && isSingleDirectReturn; selectionConfig.isOriginalControl = (selectionConfig.selectionMode != PictureConfig.SINGLE || !isSingleDirectReturn) && selectionConfig.isOriginalControl; return this; } /** * Whether to turn on paging mode * * @param isPageStrategy * @param pageSize Maximum number of pages {@link PageSize is preferably no less than 20} * @return */ public PictureSelectionModel isPageStrategy(boolean isPageStrategy, int pageSize) { selectionConfig.isPageStrategy = isPageStrategy; selectionConfig.pageSize = pageSize < PictureConfig.MIN_PAGE_SIZE ? PictureConfig.MAX_PAGE_SIZE : pageSize; return this; } /** * Whether to turn on paging mode * * @param isPageStrategy * @param pageSize Maximum number of pages {@link PageSize is preferably no less than 20} * @param isFilterInvalidFile Whether to filter invalid files {@link Some of the query performance is consumed,Especially on the Q version} * @return */ public PictureSelectionModel isPageStrategy(boolean isPageStrategy, int pageSize, boolean isFilterInvalidFile) { selectionConfig.isPageStrategy = isPageStrategy; selectionConfig.pageSize = pageSize < PictureConfig.MIN_PAGE_SIZE ? PictureConfig.MAX_PAGE_SIZE : pageSize; selectionConfig.isFilterInvalidFile = isFilterInvalidFile; return this; } /** * Whether to turn on paging mode * * @param isPageStrategy * @return */ public PictureSelectionModel isPageStrategy(boolean isPageStrategy) { selectionConfig.isPageStrategy = isPageStrategy; return this; } /** * Whether to turn on paging mode * * @param isPageStrategy * @param isFilterInvalidFile Whether to filter invalid files {@link Some of the query performance is consumed,Especially on the Q version} * @return */ public PictureSelectionModel isPageStrategy(boolean isPageStrategy, boolean isFilterInvalidFile) { selectionConfig.isPageStrategy = isPageStrategy; selectionConfig.isFilterInvalidFile = isFilterInvalidFile; return this; } /** * @param videoQuality video quality and 0 or 1 * @return */ public PictureSelectionModel videoQuality(int videoQuality) { selectionConfig.videoQuality = videoQuality; return this; } /** *

* if Android SDK >=Q Please use the video/mp4 or video/jpeg ... PictureMimeType.MP4_Q or PictureMimeType.PNG_Q * else PictureMimeType.PNG or PictureMimeType.JPEG *

* * @param suffixType PictureSelector media format *

* Please Use {@link ## setCameraImageFormat # setCameraVideoFormat # setCameraAudioFormat} * @return */ @Deprecated public PictureSelectionModel imageFormat(String suffixType) { selectionConfig.suffixType = suffixType; return this; } /** * camera output image format * * @param imageFormat PictureSelector media format * @return */ public PictureSelectionModel setCameraImageFormat(String imageFormat) { selectionConfig.cameraImageFormat = imageFormat; if (SdkVersionUtils.isQ() || SdkVersionUtils.isR()) { if (TextUtils.equals(imageFormat, PictureMimeType.PNG)) { selectionConfig.cameraImageFormatForQ = PictureMimeType.PNG_Q; } if (TextUtils.equals(imageFormat, PictureMimeType.JPG) || TextUtils.equals(imageFormat, PictureMimeType.JPEG)) { selectionConfig.cameraImageFormatForQ = PictureMimeType.JPEG_Q; } } return this; } /** * camera output video format * * @param videoFormat PictureSelector media format * @return */ public PictureSelectionModel setCameraVideoFormat(String videoFormat) { selectionConfig.cameraVideoFormat = videoFormat; if (SdkVersionUtils.isQ() || SdkVersionUtils.isR()) { if (TextUtils.equals(videoFormat, PictureMimeType.MP4)) { selectionConfig.cameraVideoFormatForQ = PictureMimeType.MP4_Q; } if (TextUtils.equals(videoFormat, PictureMimeType.AVI)) { selectionConfig.cameraVideoFormatForQ = PictureMimeType.AVI_Q; } } return this; } /** * camera output audio format * * @param videoFormat PictureSelector media format * @return */ public PictureSelectionModel setCameraAudioFormat(String audioFormat) { selectionConfig.cameraAudioFormat = audioFormat; if (SdkVersionUtils.isQ() || SdkVersionUtils.isR()) { if (TextUtils.equals(audioFormat, PictureMimeType.AMR)) { selectionConfig.cameraAudioFormatForQ = PictureMimeType.AMR_Q; } if (TextUtils.equals(audioFormat, PictureMimeType.WAV)) { selectionConfig.cameraAudioFormatForQ = PictureMimeType.WAV_Q; } if (TextUtils.equals(audioFormat, PictureMimeType.MP3)) { selectionConfig.cameraAudioFormatForQ = PictureMimeType.MP3_Q; } } return this; } /** * @param cropWidth crop width * @param cropHeight crop height * @return this * @deprecated Crop image output width and height * {@link cropImageWideHigh()} */ @Deprecated public PictureSelectionModel cropWH(int cropWidth, int cropHeight) { selectionConfig.cropWidth = cropWidth; selectionConfig.cropHeight = cropHeight; return this; } /** * @param cropWidth crop width * @param cropHeight crop height * @return this */ public PictureSelectionModel cropImageWideHigh(int cropWidth, int cropHeight) { selectionConfig.cropWidth = cropWidth; selectionConfig.cropHeight = cropHeight; return this; } /** * @param videoMaxSecond selection video max second * @return */ public PictureSelectionModel videoMaxSecond(int videoMaxSecond) { selectionConfig.videoMaxSecond = (videoMaxSecond * 1000); return this; } /** * @param videoMinSecond selection video min second * @return */ public PictureSelectionModel videoMinSecond(int videoMinSecond) { selectionConfig.videoMinSecond = videoMinSecond * 1000; return this; } /** * @param recordVideoSecond video record second * @return */ public PictureSelectionModel recordVideoSecond(int recordVideoSecond) { selectionConfig.recordVideoSecond = recordVideoSecond; return this; } /** * @param recordVideoMinSecond video record second * @return */ public PictureSelectionModel recordVideoMinSecond(int recordVideoMinSecond) { selectionConfig.recordVideoMinSecond = recordVideoMinSecond; return this; } /** * @param imageSpanCount PictureSelector image span count * @return */ public PictureSelectionModel imageSpanCount(int imageSpanCount) { selectionConfig.imageSpanCount = imageSpanCount; return this; } /** * @param Less than how many KB images are not compressed * @return */ public PictureSelectionModel minimumCompressSize(int size) { selectionConfig.minimumCompressSize = size; return this; } /** * @param compressQuality crop compress quality default 90 * @return 请使用 cutOutQuality();方法 */ @Deprecated public PictureSelectionModel cropCompressQuality(int compressQuality) { selectionConfig.cropCompressQuality = compressQuality; return this; } /** * @param cutQuality crop compress quality default 90 * @return */ public PictureSelectionModel cutOutQuality(int cutQuality) { selectionConfig.cropCompressQuality = cutQuality; return this; } /** * @param cropCompressFormat crop compress format * Use {@link Bitmap.CompressFormat.JPEG | Bitmap.CompressFormat.PNG | Bitmap.CompressFormat.WEBP_LOSSLESS} * @return */ public PictureSelectionModel cutCompressFormat(String cropCompressFormat) { selectionConfig.cropCompressFormat = cropCompressFormat; return this; } /** * @param isCompress Whether to open compress * @return Use {link .isCompress()} */ @Deprecated public PictureSelectionModel compress(boolean isCompress) { selectionConfig.isCompress = isCompress; return this; } /** * @param isCompress Whether to open compress * @return */ public PictureSelectionModel isCompress(boolean isCompress) { selectionConfig.isCompress = isCompress; return this; } /** * @param compressQuality Image compressed output quality * @return */ public PictureSelectionModel compressQuality(int compressQuality) { selectionConfig.compressQuality = compressQuality; return this; } /** * @param returnEmpty No data can be returned * @return */ public PictureSelectionModel isReturnEmpty(boolean returnEmpty) { selectionConfig.returnEmpty = returnEmpty; return this; } /** * @param synOrAsy Synchronous or asynchronous compression * @return */ public PictureSelectionModel synOrAsy(boolean synOrAsy) { selectionConfig.synOrAsy = synOrAsy; return this; } /** * @param focusAlpha After compression, the transparent channel is retained *

内部会自动判断图片通道

* @return */ @Deprecated public PictureSelectionModel compressFocusAlpha(boolean focusAlpha) { selectionConfig.focusAlpha = focusAlpha; return this; } /** * After recording with the system camera, does it support playing the video immediately using the system player * * @param isQuickCapture * @return */ public PictureSelectionModel isQuickCapture(boolean isQuickCapture) { selectionConfig.isQuickCapture = isQuickCapture; return this; } /** * @param isOriginalControl Whether the original image is displayed * @return */ public PictureSelectionModel isOriginalImageControl(boolean isOriginalControl) { selectionConfig.isOriginalControl = !selectionConfig.camera && selectionConfig.chooseMode != PictureMimeType.ofVideo() && selectionConfig.chooseMode != PictureMimeType.ofAudio() && isOriginalControl; return this; } /** * @param isDisplayOriginalSize Whether the original image size is displayed * @return */ public PictureSelectionModel isDisplayOriginalSize(boolean isDisplayOriginalSize) { selectionConfig.isDisplayOriginalSize = !selectionConfig.camera && isDisplayOriginalSize; return this; } /** * @param isEditorImage is editor image * @return */ public PictureSelectionModel isEditorImage(boolean isEditorImage) { selectionConfig.isEditorImage = isEditorImage; return this; } /** * @param path save path * @return */ public PictureSelectionModel compressSavePath(String path) { selectionConfig.compressSavePath = path; return this; } /** * Camera custom local file name * # Such as xxx.png * * @param fileName * @return */ public PictureSelectionModel cameraFileName(String fileName) { selectionConfig.cameraFileName = fileName; return this; } /** * crop custom local file name * # Such as xxx.png * * @param renameCropFileName * @return */ public PictureSelectionModel renameCropFileName(String renameCropFileName) { selectionConfig.renameCropFileName = renameCropFileName; return this; } /** * custom compress local file name * # Such as xxx.png * * @param renameFile * @return */ public PictureSelectionModel renameCompressFile(String renameFile) { selectionConfig.renameCompressFileName = renameFile; return this; } /** * @param zoomAnim Picture list zoom anim * @return */ public PictureSelectionModel isZoomAnim(boolean zoomAnim) { selectionConfig.zoomAnim = zoomAnim; return this; } /** * @param previewEggs preview eggs It doesn't make much sense * @return Use {@link .isPreviewEggs()} */ @Deprecated public PictureSelectionModel previewEggs(boolean previewEggs) { selectionConfig.previewEggs = previewEggs; return this; } /** * @param previewEggs preview eggs It doesn't make much sense * @return */ public PictureSelectionModel isPreviewEggs(boolean previewEggs) { selectionConfig.previewEggs = previewEggs; return this; } /** * @param isAutoScalePreviewImage preview image width auto scale the screen * @return */ public PictureSelectionModel isAutoScalePreviewImage(boolean isAutoScalePreviewImage) { selectionConfig.isAutoScalePreviewImage = isAutoScalePreviewImage; return this; } /** * @param isCamera Whether to open camera button * @return */ public PictureSelectionModel isCamera(boolean isCamera) { selectionConfig.isCamera = isCamera; return this; } /** * @param outPutCameraPath Camera out path * @return */ public PictureSelectionModel setOutputCameraPath(String outPutCameraPath) { selectionConfig.outPutCameraPath = outPutCameraPath; return this; } /** * Query the pictures or videos in the specified directory * * @param directoryPath Camera out path *

* Normally, it should be consistent with {@link PictureSelectionConfig.setOutputCameraPath()}; *

* *

* If build.version.sdk_INT < 29,{@link PictureSelectionConfig.setQuerySandboxDirectory();} * Do not set the external storage path, * which may cause the problem of picture duplication *

* @return */ public PictureSelectionModel setQuerySandboxDirectory(String directoryPath) { selectionConfig.sandboxFolderPath = directoryPath; return this; } /** * Only the resources in the specified directory are displayed *

* Only Display setQuerySandboxDirectory(); Source *

* * @param isOnlySandboxDir true or Only Display {@link PictureSelectionConfig.setQuerySandboxDirectory();} * @return */ public PictureSelectionModel isGetOnlySandboxDirectory(boolean isOnlySandboxDir) { selectionConfig.isOnlySandboxDir = isOnlySandboxDir; return this; } /** * # file size The unit is M * * @param fileSize Filter max file size * Use {@link PictureSelectionConfig.filterMaxFileSize()} * @return */ @Deprecated public PictureSelectionModel queryFileSize(float fileMSize) { selectionConfig.filterFileSize = fileMSize; return this; } /** * # file size The unit is M * * @param fileSize Filter file size * Use {@link .filterMaxFileSize()} * @return */ @Deprecated public PictureSelectionModel queryMaxFileSize(float fileSize) { selectionConfig.filterFileSize = fileSize; return this; } /** * # file size The unit is KB * * @param fileSize Filter max file size * @return */ public PictureSelectionModel filterMaxFileSize(long fileKbSize) { if (fileKbSize >= PictureConfig.MB) { selectionConfig.filterMaxFileSize = fileKbSize; } else { selectionConfig.filterMaxFileSize = fileKbSize * 1024; } return this; } /** * # file size The unit is KB * * @param fileSize Filter min file size * @return */ public PictureSelectionModel filterMinFileSize(long fileKbSize) { if (fileKbSize >= PictureConfig.MB) { selectionConfig.filterMinFileSize = fileKbSize; } else { selectionConfig.filterMinFileSize = fileKbSize * 1024; } return this; } /** * query specified mimeType * * @param mimeTypes Use example {@link { image/jpeg or image/png ... }} * @return */ public PictureSelectionModel queryMimeTypeConditions(String... mimeTypes) { if (mimeTypes != null && mimeTypes.length > 0) { selectionConfig.queryMimeTypeHashSet = new HashSet<>(Arrays.asList(mimeTypes)); } else { selectionConfig.queryMimeTypeHashSet = null; } return this; } /** * @param isGif Whether to open gif * @return */ public PictureSelectionModel isGif(boolean isGif) { selectionConfig.isGif = isGif; return this; } /** * @param isWebp Whether to open .webp * @return */ public PictureSelectionModel isWebp(boolean isWebp) { selectionConfig.isWebp = isWebp; return this; } /** * @param isBmp Whether to open .isBmp * @return */ public PictureSelectionModel isBmp(boolean isBmp) { selectionConfig.isBmp = isBmp; return this; } /** * @param enablePreview Do you want to preview the picture? * @return Use {link .isPreviewImage()} */ @Deprecated public PictureSelectionModel previewImage(boolean enablePreview) { selectionConfig.enablePreview = enablePreview; return this; } /** * @param enablePreview Do you want to preview the picture? * @return */ public PictureSelectionModel isPreviewImage(boolean enablePreview) { selectionConfig.enablePreview = enablePreview; return this; } /** * @param enPreviewVideo Do you want to preview the video? * @return Use {link .isPreviewVideo()} */ @Deprecated public PictureSelectionModel previewVideo(boolean enPreviewVideo) { selectionConfig.enPreviewVideo = enPreviewVideo; return this; } /** * @param enPreviewVideo Do you want to preview the video? * @return */ public PictureSelectionModel isPreviewVideo(boolean enPreviewVideo) { selectionConfig.enPreviewVideo = enPreviewVideo; return this; } /** * @param isNotPreviewDownload Previews do not show downloads * @return */ public PictureSelectionModel isNotPreviewDownload(boolean isNotPreviewDownload) { selectionConfig.isNotPreviewDownload = isNotPreviewDownload; return this; } /** * @param Specify get image format * Use {@link .queryMimeTypeConditions()} * @return */ @Deprecated public PictureSelectionModel querySpecifiedFormatSuffix(String specifiedFormat) { selectionConfig.specifiedFormat = specifiedFormat; return this; } /** * @param openClickSound Whether to open click voice * @return Use {link .isOpenClickSound()} */ @Deprecated public PictureSelectionModel openClickSound(boolean openClickSound) { selectionConfig.openClickSound = !selectionConfig.camera && openClickSound; return this; } /** * @param isOpenClickSound Whether to open click voice * @return */ public PictureSelectionModel isOpenClickSound(boolean openClickSound) { selectionConfig.openClickSound = !selectionConfig.camera && openClickSound; return this; } /** * 是否可拖动裁剪框(setFreeStyleCropEnabled 为true 有效) */ public PictureSelectionModel isDragFrame(boolean isDragFrame) { selectionConfig.isDragFrame = isDragFrame; return this; } /** * Whether the multi-graph clipping list is animated or not * * @param isAnimation * @return */ public PictureSelectionModel isMultipleRecyclerAnimation(boolean isAnimation) { selectionConfig.isMultipleRecyclerAnimation = isAnimation; return this; } /** * Set camera direction (after default image) */ public PictureSelectionModel isCameraAroundState(boolean isCameraAroundState) { selectionConfig.isCameraAroundState = isCameraAroundState; return this; } /** * Camera image rotation, automatic correction */ public PictureSelectionModel isCameraRotateImage(boolean isCameraRotateImage) { selectionConfig.isCameraRotateImage = isCameraRotateImage; return this; } /** * Compress image rotation, automatic correction */ public PictureSelectionModel isAutoRotating(boolean isAutoRotating) { selectionConfig.isAutoRotating = isAutoRotating; return this; } /** * @param selectionMedia Select the selected picture set * @return Use {link .selectionData()} */ @Deprecated public PictureSelectionModel selectionMedia(List selectionMedia) { if (selectionConfig.selectionMode == PictureConfig.SINGLE && selectionConfig.isSingleDirectReturn) { selectionConfig.selectionMedias = null; } else { selectionConfig.selectionMedias = selectionMedia; } return this; } /** * @param selectionData Select the selected picture set * @return */ public PictureSelectionModel selectionData(List selectionData) { if (selectionConfig.selectionMode == PictureConfig.SINGLE && selectionConfig.isSingleDirectReturn) { selectionConfig.selectionMedias = null; } else { selectionConfig.selectionMedias = selectionData; } return this; } /** * 是否改变状态栏字段颜色(黑白字体转换) * #适合所有style使用 * * @param isChangeStatusBarFontColor * @return */ @Deprecated public PictureSelectionModel isChangeStatusBarFontColor(boolean isChangeStatusBarFontColor) { selectionConfig.isChangeStatusBarFontColor = isChangeStatusBarFontColor; return this; } /** * 选择图片样式0/9 * #适合所有style使用 * * @param isOpenStyleNumComplete * @return 使用setPictureStyle方法 */ @Deprecated public PictureSelectionModel isOpenStyleNumComplete(boolean isOpenStyleNumComplete) { selectionConfig.isOpenStyleNumComplete = isOpenStyleNumComplete; return this; } /** * 是否开启数字选择模式 * #适合qq style 样式使用 * * @param isOpenStyleCheckNumMode * @return 使用setPictureStyle方法 */ @Deprecated public PictureSelectionModel isOpenStyleCheckNumMode(boolean isOpenStyleCheckNumMode) { selectionConfig.isOpenStyleCheckNumMode = isOpenStyleCheckNumMode; return this; } /** * 设置标题栏背景色 * * @param color * @return 使用setPictureStyle方法 */ @Deprecated public PictureSelectionModel setTitleBarBackgroundColor(@ColorInt int color) { selectionConfig.titleBarBackgroundColor = color; return this; } /** * 状态栏背景色 * * @param color * @return 使用setPictureStyle方法 */ @Deprecated public PictureSelectionModel setStatusBarColorPrimaryDark(@ColorInt int color) { selectionConfig.pictureStatusBarColor = color; return this; } /** * 裁剪页面标题背景色 * * @param color * @return 使用setPictureCropStyle方法 */ @Deprecated public PictureSelectionModel setCropTitleBarBackgroundColor(@ColorInt int color) { selectionConfig.cropTitleBarBackgroundColor = color; return this; } /** * 裁剪页面状态栏背景色 * * @param color * @return 使用setPictureCropStyle方法 */ @Deprecated public PictureSelectionModel setCropStatusBarColorPrimaryDark(@ColorInt int color) { selectionConfig.cropStatusBarColorPrimaryDark = color; return this; } /** * 裁剪页面标题文字颜色 * * @param color * @return 使用setPictureCropStyle方法 */ @Deprecated public PictureSelectionModel setCropTitleColor(@ColorInt int color) { selectionConfig.cropTitleColor = color; return this; } /** * 设置相册标题右侧向上箭头图标 * * @param resId * @return 使用setPictureStyle方法 */ @Deprecated public PictureSelectionModel setUpArrowDrawable(int resId) { selectionConfig.upResId = resId; return this; } /** * 设置相册标题右侧向下箭头图标 * * @param resId * @return 使用setPictureStyle方法 */ @Deprecated public PictureSelectionModel setDownArrowDrawable(int resId) { selectionConfig.downResId = resId; return this; } /** * 动态设置裁剪主题样式 * * @param style 裁剪页主题 *

{@link PictureSelectorUIStyle} * @return */ @Deprecated public PictureSelectionModel setPictureCropStyle(PictureCropParameterStyle style) { if (style != null) { PictureSelectionConfig.cropStyle = style; } else { PictureSelectionConfig.cropStyle = PictureCropParameterStyle.ofDefaultCropStyle(); } return this; } /** * 动态设置相册主题样式 * * @param style 主题 *

{@link PictureSelectorUIStyle} * @return */ @Deprecated public PictureSelectionModel setPictureStyle(PictureParameterStyle style) { if (style != null) { PictureSelectionConfig.style = style; if (!selectionConfig.isWeChatStyle) { selectionConfig.isWeChatStyle = style.isNewSelectStyle; } } else { PictureSelectionConfig.style = PictureParameterStyle.ofDefaultStyle(); } return this; } /** * Dynamically set the album to start and exit the animation * * @param style Activity Launch exit animation theme * @return */ public PictureSelectionModel setPictureWindowAnimationStyle(PictureWindowAnimationStyle windowAnimationStyle) { if (windowAnimationStyle != null) { PictureSelectionConfig.windowAnimationStyle = windowAnimationStyle; } else { PictureSelectionConfig.windowAnimationStyle = PictureWindowAnimationStyle.ofDefaultWindowAnimationStyle(); } return this; } /** * Photo album list animation {} * Use {@link AnimationType#ALPHA_IN_ANIMATION or SLIDE_IN_BOTTOM_ANIMATION} directly. * * @param animationMode * @return */ public PictureSelectionModel setRecyclerAnimationMode(int animationMode) { selectionConfig.animationMode = animationMode; return this; } /** * # If you want to handle the Android Q path, if not, just return the uri, * The getAndroidQToPath(); field will be empty * * @param isAndroidQTransform * @return */ public PictureSelectionModel isAndroidQTransform(boolean isAndroidQTransform) { selectionConfig.isAndroidQTransform = isAndroidQTransform; return this; } /** * # 内部方法-要使用此方法时最好先咨询作者!!! * * @param isFallbackVersion 仅供特殊情况内部使用 如果某功能出错此开关可以回退至之前版本 * @return */ public PictureSelectionModel isFallbackVersion(boolean isFallbackVersion) { selectionConfig.isFallbackVersion = isFallbackVersion; return this; } /** * # 内部方法-要使用此方法时最好先咨询作者!!! * * @param isFallbackVersion 仅供特殊情况内部使用 如果某功能出错此开关可以回退至之前版本 * @return */ public PictureSelectionModel isFallbackVersion2(boolean isFallbackVersion) { selectionConfig.isFallbackVersion2 = isFallbackVersion; return this; } /** * # 内部方法-要使用此方法时最好先咨询作者!!! * * @param isFallbackVersion 仅供特殊情况内部使用 如果某功能出错此开关可以回退至之前版本 * @return */ public PictureSelectionModel isFallbackVersion3(boolean isFallbackVersion) { selectionConfig.isFallbackVersion3 = isFallbackVersion; return this; } /** * Start to select media and wait for result. * * @param requestCode Identity of the request Activity or Fragment. */ public void forResult(int requestCode) { if (!DoubleUtils.isFastDoubleClick()) { Activity activity = selector.getActivity(); if (activity == null || selectionConfig == null) { return; } if (PictureSelectionConfig.imageEngine == null){ throw new NullPointerException("api imageEngine is null,Please implement ImageEngine"); } Intent intent; if (selectionConfig.camera && selectionConfig.isUseCustomCamera) { intent = new Intent(activity, PictureCustomCameraActivity.class); } else { intent = new Intent(activity, selectionConfig.camera ? PictureSelectorCameraEmptyActivity.class : selectionConfig.isWeChatStyle ? PictureSelectorWeChatStyleActivity.class : PictureSelectorActivity.class); } selectionConfig.isCallbackMode = false; Fragment fragment = selector.getFragment(); if (fragment != null) { fragment.startActivityForResult(intent, requestCode); } else { activity.startActivityForResult(intent, requestCode); } PictureWindowAnimationStyle windowAnimationStyle = PictureSelectionConfig.windowAnimationStyle; activity.overridePendingTransition(windowAnimationStyle.activityEnterAnimation, R.anim.picture_anim_fade_in); } } /** * # replace for setPictureWindowAnimationStyle(); * Start to select media and wait for result. *

* # Use PictureWindowAnimationStyle to achieve animation effects * * @param requestCode Identity of the request Activity or Fragment. */ @Deprecated public void forResult(int requestCode, int enterAnim, int exitAnim) { if (!DoubleUtils.isFastDoubleClick()) { Activity activity = selector.getActivity(); if (activity == null || selectionConfig == null) { return; } if (PictureSelectionConfig.imageEngine == null){ throw new NullPointerException("api imageEngine is null,Please implement ImageEngine"); } Intent intent = new Intent(activity, selectionConfig.camera ? PictureSelectorCameraEmptyActivity.class : selectionConfig.isWeChatStyle ? PictureSelectorWeChatStyleActivity.class : PictureSelectorActivity.class); selectionConfig.isCallbackMode = false; Fragment fragment = selector.getFragment(); if (fragment != null) { fragment.startActivityForResult(intent, requestCode); } else { activity.startActivityForResult(intent, requestCode); } activity.overridePendingTransition(enterAnim, exitAnim); } } /** * Start to select media and wait for result. * * @param listener The resulting callback listens */ public void forResult(OnResultCallbackListener listener) { if (!DoubleUtils.isFastDoubleClick()) { Activity activity = selector.getActivity(); if (activity == null || selectionConfig == null) { return; } if (PictureSelectionConfig.imageEngine == null){ throw new NullPointerException("api imageEngine is null,Please implement ImageEngine"); } // 绑定回调监听 PictureSelectionConfig.listener = new WeakReference<>(listener).get(); selectionConfig.isCallbackMode = true; Intent intent; if (selectionConfig.camera && selectionConfig.isUseCustomCamera) { intent = new Intent(activity, PictureCustomCameraActivity.class); } else { intent = new Intent(activity, selectionConfig.camera ? PictureSelectorCameraEmptyActivity.class : selectionConfig.isWeChatStyle ? PictureSelectorWeChatStyleActivity.class : PictureSelectorActivity.class); } Fragment fragment = selector.getFragment(); if (fragment != null) { fragment.startActivity(intent); } else { activity.startActivity(intent); } PictureWindowAnimationStyle windowAnimationStyle = PictureSelectionConfig.windowAnimationStyle; activity.overridePendingTransition( windowAnimationStyle.activityEnterAnimation, R.anim.picture_anim_fade_in); } } /** * Start to select media and wait for result. * * @param launcher use {@link #registerForActivityResult(ActivityResultContract, ActivityResultCallback)} * passing in a {@link StartActivityForResult} object for the {@link ActivityResultContract}. */ public void forResult(ActivityResultLauncher launcher) { if (!DoubleUtils.isFastDoubleClick()) { Activity activity = selector.getActivity(); if (launcher == null || activity == null || selectionConfig == null) { return; } if (PictureSelectionConfig.imageEngine == null){ throw new NullPointerException("api imageEngine is null,Please implement ImageEngine"); } Intent intent; if (selectionConfig.camera && selectionConfig.isUseCustomCamera) { intent = new Intent(activity, PictureCustomCameraActivity.class); } else { intent = new Intent(activity, selectionConfig.camera ? PictureSelectorCameraEmptyActivity.class : selectionConfig.isWeChatStyle ? PictureSelectorWeChatStyleActivity.class : PictureSelectorActivity.class); } selectionConfig.isCallbackMode = false; launcher.launch(intent); PictureWindowAnimationStyle windowAnimationStyle = PictureSelectionConfig.windowAnimationStyle; activity.overridePendingTransition(windowAnimationStyle.activityEnterAnimation, R.anim.picture_anim_fade_in); } } /** * Start to select media and wait for result. * * @param requestCode Identity of the request Activity or Fragment. * @param listener The resulting callback listens */ public void forResult(int requestCode, OnResultCallbackListener listener) { if (!DoubleUtils.isFastDoubleClick()) { Activity activity = selector.getActivity(); if (activity == null || selectionConfig == null) { return; } if (PictureSelectionConfig.imageEngine == null){ throw new NullPointerException("api imageEngine is null,Please implement ImageEngine"); } // 绑定回调监听 PictureSelectionConfig.listener = new WeakReference<>(listener).get(); selectionConfig.isCallbackMode = true; Intent intent; if (selectionConfig.camera && selectionConfig.isUseCustomCamera) { intent = new Intent(activity, PictureCustomCameraActivity.class); } else { intent = new Intent(activity, selectionConfig.camera ? PictureSelectorCameraEmptyActivity.class : selectionConfig.isWeChatStyle ? PictureSelectorWeChatStyleActivity.class : PictureSelectorActivity.class); } Fragment fragment = selector.getFragment(); if (fragment != null) { fragment.startActivityForResult(intent, requestCode); } else { activity.startActivityForResult(intent, requestCode); } PictureWindowAnimationStyle windowAnimationStyle = PictureSelectionConfig.windowAnimationStyle; activity.overridePendingTransition(windowAnimationStyle.activityEnterAnimation, R.anim.picture_anim_fade_in); } } /** * 提供外部预览图片方法 * * @param position * @param medias */ public void openExternalPreview(int position, List medias) { if (selector != null) { selector.externalPicturePreview(position, medias, PictureSelectionConfig.windowAnimationStyle.activityPreviewEnterAnimation); } else { throw new NullPointerException("This PictureSelector is Null"); } } /** * 提供外部预览图片方法-带自定义下载保存路径 * # 废弃 由于Android Q沙盒机制 此方法不在需要了 * * @param position * @param medias */ @Deprecated public void openExternalPreview(int position, String directory_path, List medias) { if (selector != null) { selector.externalPicturePreview(position, directory_path, medias, PictureSelectionConfig.windowAnimationStyle.activityPreviewEnterAnimation); } else { throw new NullPointerException("This PictureSelector is Null"); } } /** * set preview video * * @param path */ public void externalPictureVideo(String path) { if (selector != null) { selector.externalPictureVideo(path); } else { throw new NullPointerException("This PictureSelector is Null"); } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy