diff --git a/app/src/main/java/com/yizhuan/erban/common/dialog/PhotoDialog.kt b/app/src/main/java/com/yizhuan/erban/common/dialog/PhotoDialog.kt index e3a7b3d85..c97b0031d 100644 --- a/app/src/main/java/com/yizhuan/erban/common/dialog/PhotoDialog.kt +++ b/app/src/main/java/com/yizhuan/erban/common/dialog/PhotoDialog.kt @@ -15,12 +15,12 @@ import com.yizhuan.xchat_android_library.easypermisssion.EasyPermissions import com.yizhuan.erban.R import com.yizhuan.erban.application.XChatApplication import com.yizhuan.xchat_android_library.common.base.BaseDialogFragment -import com.yizhuan.erban.common.util.PhotoCompressCallback -import com.yizhuan.erban.common.util.PhotoCompressUtil -import com.yizhuan.erban.common.util.PhotosCompressCallback import com.yizhuan.erban.databinding.PhotoDialogBinding import com.yizhuan.erban.ui.widget.dialog.CommonTipDialog import com.yizhuan.xchat_android_library.common.photo.PhotoProvider +import com.yizhuan.xchat_android_library.common.util.PhotoCompressCallback +import com.yizhuan.xchat_android_library.common.util.PhotoCompressUtil +import com.yizhuan.xchat_android_library.common.util.PhotosCompressCallback /** * 该对话框的功能提供拍摄和选择图片 diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoModifyActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoModifyActivity.kt index 6b41cb6af..bed296baf 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoModifyActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoModifyActivity.kt @@ -26,8 +26,6 @@ import com.yizhuan.erban.audio.RecordingVoiceActivity import com.yizhuan.erban.base.BaseViewBindingActivity import com.yizhuan.xchat_android_library.common.file.FileHelper import com.yizhuan.erban.common.util.BitmapUtil -import com.yizhuan.erban.common.util.PhotoCompressCallback -import com.yizhuan.erban.common.util.PhotoCompressUtil import com.yizhuan.erban.databinding.ActivityUserInfoModifyBinding import com.yizhuan.erban.ui.login.ModifyInfoActivity import com.yizhuan.erban.ui.user.UserPhotoAdapter.ImageClickListener @@ -41,6 +39,8 @@ import com.yizhuan.xchat_android_core.user.bean.UserInfo import com.yizhuan.xchat_android_core.user.bean.UserPhoto import com.yizhuan.xchat_android_core.utils.Logger import com.yizhuan.xchat_android_library.common.photo.PhotoProvider +import com.yizhuan.xchat_android_library.common.util.PhotoCompressCallback +import com.yizhuan.xchat_android_library.common.util.PhotoCompressUtil import com.yizhuan.xchat_android_library.easypermisssion.EasyPermissions import com.yizhuan.xchat_android_library.utils.ResUtil import com.yizhuan.xchat_android_library.utils.TimeUtils diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosActivity.kt index 525310383..48d4b7e33 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosActivity.kt @@ -22,8 +22,6 @@ import com.yizhuan.erban.application.XChatApplication import com.yizhuan.erban.base.TitleBar import com.yizhuan.xchat_android_library.common.file.FileHelper import com.yizhuan.erban.common.util.BitmapUtil -import com.yizhuan.erban.common.util.PhotoCompressCallback -import com.yizhuan.erban.common.util.PhotoCompressUtil import com.yizhuan.erban.ui.user.UserModifyPhotosAdapter.PhotoItemClickListener import com.yizhuan.erban.ui.widget.dialog.CommonTipDialog import com.yizhuan.xchat_android_core.file.FileModel @@ -32,6 +30,8 @@ import com.yizhuan.xchat_android_core.user.bean.UserInfo import com.yizhuan.xchat_android_core.user.bean.UserPhoto import com.yizhuan.xchat_android_core.utils.net.BeanObserver import com.yizhuan.xchat_android_library.common.photo.PhotoProvider +import com.yizhuan.xchat_android_library.common.util.PhotoCompressCallback +import com.yizhuan.xchat_android_library.common.util.PhotoCompressUtil import com.yizhuan.xchat_android_library.easypermisssion.EasyPermissions import com.yizhuan.xchat_android_library.utils.ResUtil import kotlinx.coroutines.Job diff --git a/app/src/module_community/java/com/yizhuan/erban/community/publish/view/PublishActivity.java b/app/src/module_community/java/com/yizhuan/erban/community/publish/view/PublishActivity.java index 5bf545b29..ff47489ed 100644 --- a/app/src/module_community/java/com/yizhuan/erban/community/publish/view/PublishActivity.java +++ b/app/src/module_community/java/com/yizhuan/erban/community/publish/view/PublishActivity.java @@ -29,8 +29,6 @@ import com.netease.nim.uikit.common.util.log.LogUtil; import com.trello.rxlifecycle3.android.ActivityEvent; import com.yizhuan.erban.R; import com.yizhuan.erban.base.BaseMvpActivity; -import com.yizhuan.erban.common.util.PhotoCompressUtil; -import com.yizhuan.erban.common.util.PhotosCompressCallback; import com.yizhuan.erban.common.widget.dialog.ChooseWorldsDialog; import com.yizhuan.erban.common.widget.dialog.DialogManager; import com.yizhuan.erban.community.ConstantValue; @@ -55,6 +53,8 @@ import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils; import com.yizhuan.xchat_android_core.utils.net.DontWarnObserver; import com.yizhuan.xchat_android_library.base.factory.CreatePresenter; import com.yizhuan.xchat_android_library.common.photo.PhotoProvider; +import com.yizhuan.xchat_android_library.common.util.PhotoCompressUtil; +import com.yizhuan.xchat_android_library.common.util.PhotosCompressCallback; import com.yizhuan.xchat_android_library.easypermisssion.EasyPermissions; import com.yizhuan.xchat_android_library.utils.ResUtil; import com.yizhuan.xchat_android_library.utils.SingleToastUtil; diff --git a/library/src/module_common/java/com/yizhuan/xchat_android_library/common/Constants.java b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/Constants.java new file mode 100644 index 000000000..9012795b0 --- /dev/null +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/Constants.java @@ -0,0 +1,12 @@ +package com.yizhuan.xchat_android_library.common; + +public class Constants { + + //上传的图片 默认大小不能超过大小 640KB + public static final int UPLOAD_IMAGE_MAX_FILE_LENGTH = 640; + //上传的图片 默认宽高最大值 2340 + public static final int UPLOAD_IMAGE_MAX_SIZE = 2340; + //上传的gif 默认大小不能超过 1MB + public static final int UPLOAD_GIF_MAX_SIZE = 1 << 20; + +} diff --git a/app/src/main/java/com/yizhuan/erban/common/util/PhotoCompressUtil.kt b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/util/PhotoCompressUtil.kt similarity index 96% rename from app/src/main/java/com/yizhuan/erban/common/util/PhotoCompressUtil.kt rename to library/src/module_common/java/com/yizhuan/xchat_android_library/common/util/PhotoCompressUtil.kt index ef2e72419..1c55fc230 100644 --- a/app/src/main/java/com/yizhuan/erban/common/util/PhotoCompressUtil.kt +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/util/PhotoCompressUtil.kt @@ -1,13 +1,13 @@ -package com.yizhuan.erban.common.util +package com.yizhuan.xchat_android_library.common.util import android.content.Context import android.os.Environment import android.text.TextUtils import android.util.Log import com.yizhuan.xchat_android_library.luban.Luban -import com.yizhuan.erban.application.XChatApplication import com.yizhuan.xchat_android_library.common.file.FileHelper -import com.yizhuan.xchat_android_core.Constants +import com.yizhuan.xchat_android_library.common.Constants +import com.yizhuan.xchat_android_library.common.application.BaseApp import kotlinx.coroutines.* import java.io.File @@ -134,7 +134,7 @@ object PhotoCompressUtil { } else { var compressedFileList: MutableList? = null try { - compressedFileList = Luban.with(XChatApplication.gContext) + compressedFileList = Luban.with(BaseApp.getContext()) .load(imgPath) .ignoreBy(leastCompressSize) .setTargetDir(outPath) diff --git a/nim_uikit/res/values/strings.xml b/nim_uikit/res/values/strings.xml index e356373a0..4d923f257 100644 --- a/nim_uikit/res/values/strings.xml +++ b/nim_uikit/res/values/strings.xml @@ -429,4 +429,5 @@ [通知提醒] [機器人消息] [自定義消息] + 為空或者該文件不存在! diff --git a/nim_uikit/src/com/netease/nim/uikit/business/session/actions/ImageAction.java b/nim_uikit/src/com/netease/nim/uikit/business/session/actions/ImageAction.java index f251c3172..0f78aa00e 100644 --- a/nim_uikit/src/com/netease/nim/uikit/business/session/actions/ImageAction.java +++ b/nim_uikit/src/com/netease/nim/uikit/business/session/actions/ImageAction.java @@ -6,6 +6,7 @@ import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder; import com.netease.nimlib.sdk.msg.MessageBuilder; import com.netease.nimlib.sdk.msg.constant.SessionTypeEnum; import com.netease.nimlib.sdk.msg.model.IMMessage; +import com.yizhuan.xchat_android_library.common.util.Logger; import org.greenrobot.eventbus.EventBus; diff --git a/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt b/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt index f5cc47deb..233a36fdb 100644 --- a/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt +++ b/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt @@ -2,10 +2,12 @@ package com.netease.nim.uikit.business.session.actions import android.content.Intent import com.netease.nim.uikit.R -import com.netease.nim.uikit.business.session.constant.Extras -import com.netease.nim.uikit.business.session.constant.RequestCode import com.netease.nim.uikit.business.session.helper.SendImageHelper -import com.yizhuan.xchat_android_library.easypermisssion.EasyPermissions +import com.yizhuan.xchat_android_library.common.application.BaseApp +import com.yizhuan.xchat_android_library.common.base.BaseDialogFragment +import com.yizhuan.xchat_android_library.common.photo.PhotoProvider +import com.yizhuan.xchat_android_library.common.util.PhotoCompressUtil +import com.yizhuan.xchat_android_library.common.util.PhotosCompressCallback import com.yizhuan.xchat_android_library.utils.SingleToastUtil import java.io.File @@ -16,9 +18,9 @@ abstract class PickImageActionNew protected constructor( iconResId: Int, titleId: Int, private val multiSelect: Boolean -) : BaseAction(iconResId, titleId), EasyPermissions.PermissionCallbacks { +) : BaseAction(iconResId, titleId) { - companion object{ + companion object { private const val REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111 // 从相册中选择 } @@ -29,71 +31,61 @@ abstract class PickImageActionNew protected constructor( } private fun checkStoragePermission() { -// if (!EasyPermissions.hasPermissions( -// this, -// Manifest.permission.WRITE_EXTERNAL_STORAGE, -// Manifest.permission.READ_EXTERNAL_STORAGE -// ) -// ) { -// EasyPermissions.requestPermissions( -// this, -// getString(R.string.permission_storage_rationale), -// PERMISSION_CODE_STORAGE, -// Manifest.permission.WRITE_EXTERNAL_STORAGE, -// Manifest.permission.READ_EXTERNAL_STORAGE -// ) -// } else { -// PhotoProvider.photoProvider( -// this, -// resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER -// ) -// } + PhotoProvider.photoProvider( + activity, + maxSelect = 9, + resultCode = makeRequestCode(REQUEST_CODE_OPEN_PHOTO_PROVIDER) + ) } - override fun onRequestPermissionsResult( - requestCode: Int, - permissions: Array, - grantResults: IntArray - ) { - } + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + if (resultCode == BaseDialogFragment.RESULT_OK) { + when (requestCode) { + REQUEST_CODE_OPEN_PHOTO_PROVIDER -> { + if (data == null) return + PhotoProvider.getResultPathListAsync(data) { list -> + val paths = list?.toMutableList() ?: ArrayList() + if (paths.isEmpty()) { + SingleToastUtil.showToastShort(R.string.picker_image_error) + } else { + PhotoCompressUtil.compress( + BaseApp.getContext(), + paths, + PhotoCompressUtil.getCompressCachePath(), + object : PhotosCompressCallback { + override fun onSuccess(compressedImgList: ArrayList) { + sendImageAfterSelfImagePicker(compressedImgList) +// for (path in compressedImgList) { +// val file = File(path) +// if (TextUtils.isEmpty(path) || !file.exists()) { +// SingleToastUtil.showToastShort(path + ResUtil.getString(R.string.xchat_android_core_file_filemodel_01)) +// return +// } +// onPicked(file) +// } + } - override fun onPermissionsGranted(requestCode: Int, perms: List) { + override fun onFail(e: Throwable) { + SingleToastUtil.showToastShort(R.string.picker_image_error) + } - } - - override fun onPermissionsDenied(requestCode: Int, perms: List) { - - } - - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { - when (requestCode) { - RequestCode.PICK_IMAGE -> onPickImageActivityResult(requestCode, data) - } - } - - /** - * 图片选取回调 - */ - private fun onPickImageActivityResult(requestCode: Int, data: Intent?) { - if (data == null) { - SingleToastUtil.showToastShort(R.string.picker_image_error) - return - } - val local = data.getBooleanExtra(Extras.EXTRA_FROM_LOCAL, false) - if (local) { - // 本地相册 - sendImageAfterSelfImagePicker(data) + }) + } + } + } + } } } /** * 发送图片 */ - private fun sendImageAfterSelfImagePicker(data: Intent) { - SendImageHelper.sendImageAfterSelfImagePicker(activity, data) { file, isOrig -> - onPicked( - file - ) + private fun sendImageAfterSelfImagePicker(compressedImgList: List) { + SendImageHelper.sendImageAfterSelfImagePickerNew( + activity, + compressedImgList + ) { file, isOrig -> + onPicked(file) } } } \ No newline at end of file diff --git a/nim_uikit/src/com/netease/nim/uikit/business/session/helper/SendImageHelper.java b/nim_uikit/src/com/netease/nim/uikit/business/session/helper/SendImageHelper.java index 932f46f8f..13b4e189d 100644 --- a/nim_uikit/src/com/netease/nim/uikit/business/session/helper/SendImageHelper.java +++ b/nim_uikit/src/com/netease/nim/uikit/business/session/helper/SendImageHelper.java @@ -64,6 +64,101 @@ public class SendImageHelper { } } + public static void sendImageAfterSelfImagePickerNew(Context context, List photos, final Callback callback) { + boolean isOrig = false; + + if (photos == null) { + SingleToastUtil.showToastShort("AFAKSSLDF"); + return; + } + + for (String photoInfo : photos) { + new SendImageTaskNew(context, isOrig, photoInfo, new Callback() { + + @Override + public void sendImage(File file, boolean isOrig) { + if (callback != null) { + callback.sendImage(file, isOrig); + } + } + }).execute(); + } + } + + // 从相册选择图片进行发送(Added by NYB) + public static class SendImageTaskNew extends AsyncTask { + + private Context context; + private boolean isOrig; + private String info; + private Callback callback; + + public SendImageTaskNew(Context context, boolean isOrig, String info, + Callback callback) { + this.context = context; + this.isOrig = isOrig; + this.info = info; + this.callback = callback; + } + + @Override + protected void onPreExecute() { + super.onPreExecute(); + } + + @Override + protected File doInBackground(Void... params) { + String photoPath = info; + if (TextUtils.isEmpty(photoPath)) + return null; + String extension = FileUtil.getExtensionName(photoPath); + // gif 强制设置成原图 + boolean gif = ImageUtil.isGif(extension); + isOrig |= gif; + if (isOrig) { + // 把原图按md5存放 + String origMD5 = MD5.getStreamMD5(photoPath); + String origMD5Path = StorageUtil.getWritePath(origMD5 + "." + + extension, StorageType.TYPE_IMAGE); + AttachmentStore.copy(photoPath, origMD5Path); + // 生成缩略图 + if (!gif) { + File imageFile = new File(origMD5Path); + ImageUtil.makeThumbnail(context, imageFile); + } + return new File(origMD5Path); + } else { +// File imageFile = new File(photoPath); +// extension = FileUtil.getExtensionName(photoPath); +// imageFile = ImageUtil.getScaledImageFileWithMD5(imageFile, extension); +// if (imageFile == null) { +// new Handler(context.getMainLooper()).post(new Runnable() { +// @Override +// public void run() { +// SingleToastUtil.showToastShort("是会计法规很少看见"); +// } +// }); +// return null; +// } else { +// ImageUtil.makeThumbnail(context, imageFile); +// } + + return new File(photoPath); + } + } + + @Override + protected void onPostExecute(File result) { + super.onPostExecute(result); + + if (result != null) { + if (callback != null) { + callback.sendImage(result, isOrig); + } + } + } + } + public static void sendImageAfterSelfImagePicker(Context context, Intent data, final Callback callback) { boolean isOrig = data.getBooleanExtra(Extras.EXTRA_IS_ORIGINAL, false);