From c10aa4af68f1a110065700b4d72904dd94aa7231 Mon Sep 17 00:00:00 2001 From: wushaocheng <15876365887@163.com> Date: Thu, 1 Dec 2022 20:35:52 +0800 Subject: [PATCH] =?UTF-8?q?[Modify]=E4=BF=AE=E6=94=B9=E5=9B=BE=E7=89=87?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 3 - .../erban/application/XChatApplication.java | 6 +- .../adapter/CreateRoomGameGuideAdapter.kt | 2 +- .../erban/common/dialog/PhotoDialog.kt | 2 +- .../erban/common/photo/PhotoProvider.kt | 14 +- .../erban/common/util/PhotoCompressUtil.kt | 2 +- .../yizhuan/erban/ui/setting/LabActivity.java | 2 +- .../erban/ui/user/UserInfoModifyActivity.kt | 4 +- .../erban/ui/user/UserModifyPhotosActivity.kt | 5 +- .../erban/ui/widget/UserInfoDialog.java | 1 - .../publish/view/PublishActivity.java | 2 +- .../xchat_android_core/UriProvider.java | 2 +- .../manager/zego/ZegoEngineManager.java | 2 +- .../yizhuan/xchat_android_core/Constants.java | 1 + library/build.gradle | 8 +- .../common/application/BaseApp.java | 38 +++ .../common/application}/Env.java | 3 +- .../common/application/IAppLifeCycle.java | 12 + .../common/delegate/SpDelegate.kt | 10 +- .../common/file/FileHelper.java | 22 +- .../common/glide/GlideEngine.java | 2 +- .../common/glide/GlideUtils.kt | 10 +- .../common/photo/PhotoProvider.kt | 226 ++++++++++++++++++ .../transform/AssignScaleTransformation.kt | 2 +- .../transform/ComplexTransformation.java | 2 +- .../common/util/Config.java | 2 +- .../common/util/SPUtils.java | 6 +- .../src/module_common/res/values/strings.xml | 3 + .../business/session/actions/ImageAction.java | 3 +- .../session/actions/PickImageAction.java | 3 - .../session/actions/PickImageActionNew.kt | 99 ++++++++ 31 files changed, 440 insertions(+), 59 deletions(-) create mode 100644 library/src/module_common/java/com/yizhuan/xchat_android_library/common/application/BaseApp.java rename {core/src/main/java/com/yizhuan/xchat_android_core => library/src/module_common/java/com/yizhuan/xchat_android_library/common/application}/Env.java (96%) create mode 100644 library/src/module_common/java/com/yizhuan/xchat_android_library/common/application/IAppLifeCycle.java rename {app/src/main/java/com/yizhuan/erban => library/src/module_common/java/com/yizhuan/xchat_android_library}/common/delegate/SpDelegate.kt (85%) rename {app/src/main/java/com/yizhuan/erban => library/src/module_common/java/com/yizhuan/xchat_android_library}/common/file/FileHelper.java (97%) rename {app/src/main/java/com/yizhuan/erban => library/src/module_common/java/com/yizhuan/xchat_android_library}/common/glide/GlideEngine.java (97%) rename {app/src/main/java/com/yizhuan/erban => library/src/module_common/java/com/yizhuan/xchat_android_library}/common/glide/GlideUtils.kt (99%) create mode 100644 library/src/module_common/java/com/yizhuan/xchat_android_library/common/photo/PhotoProvider.kt rename {app/src/main/java/com/yizhuan/erban => library/src/module_common/java/com/yizhuan/xchat_android_library}/common/transform/AssignScaleTransformation.kt (98%) rename {app/src/main/java/com/yizhuan/erban => library/src/module_common/java/com/yizhuan/xchat_android_library}/common/transform/ComplexTransformation.java (98%) rename {app/src/main/java/com/yizhuan/erban => library/src/module_common/java/com/yizhuan/xchat_android_library}/common/util/Config.java (98%) rename {app/src/main/java/com/yizhuan/erban => library/src/module_common/java/com/yizhuan/xchat_android_library}/common/util/SPUtils.java (93%) create mode 100644 nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt diff --git a/app/build.gradle b/app/build.gradle index 87211500f..ef254b6d2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -261,9 +261,6 @@ dependencies { //Google Play Referrer API implementation 'com.android.installreferrer:installreferrer:2.2' - //mmkv - implementation 'com.tencent:mmkv:1.2.13' - implementation 'com.github.yalantis:ucrop:2.2.7' } diff --git a/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java b/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java index b156b8ae7..2a5b5729b 100644 --- a/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java +++ b/app/src/main/java/com/yizhuan/erban/application/XChatApplication.java @@ -58,7 +58,7 @@ import com.yizhuan.erban.utils.PushMessageHandler; import com.yizhuan.xchat_android_constants.XChatConstants; import com.yizhuan.xchat_android_core.Constants; import com.yizhuan.xchat_android_core.DemoCache; -import com.yizhuan.xchat_android_core.Env; +import com.yizhuan.xchat_android_library.common.application.Env; import com.yizhuan.xchat_android_core.UriProvider; import com.yizhuan.xchat_android_core.auth.AuthModel; import com.yizhuan.xchat_android_core.bean.response.ServiceResult; @@ -85,6 +85,7 @@ import com.yizhuan.xchat_android_core.user.UserModel; import com.yizhuan.xchat_android_core.user.event.NeedCompleteInfoEvent; import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils; import com.yizhuan.xchat_android_core.utils.net.ServerException; +import com.yizhuan.xchat_android_library.common.application.BaseApp; import com.yizhuan.xchat_android_library.net.rxnet.RxNet; import com.yizhuan.xchat_android_library.net.rxnet.converter.GsonConverterPlugins; import com.yizhuan.xchat_android_library.utils.AppMetaDataUtil; @@ -113,7 +114,7 @@ import io.realm.RealmConfiguration; * @date 2017/2/11 */ -public class XChatApplication extends Application { +public class XChatApplication extends BaseApp { public static final String TAG = "XChatApplication"; public static Application gContext; private static final MessageNotifierCustomization messageNotifierCustomization = new MessageNotifierCustomization() { @@ -528,6 +529,7 @@ public class XChatApplication extends Application { initOtherSDK(); } initContext(this); + BaseApp.init(this); } /** diff --git a/app/src/main/java/com/yizhuan/erban/avroom/adapter/CreateRoomGameGuideAdapter.kt b/app/src/main/java/com/yizhuan/erban/avroom/adapter/CreateRoomGameGuideAdapter.kt index 9c3fdb310..cb6d86110 100644 --- a/app/src/main/java/com/yizhuan/erban/avroom/adapter/CreateRoomGameGuideAdapter.kt +++ b/app/src/main/java/com/yizhuan/erban/avroom/adapter/CreateRoomGameGuideAdapter.kt @@ -3,7 +3,7 @@ package com.yizhuan.erban.avroom.adapter import com.chad.library.adapter.base.BaseQuickAdapter import com.chad.library.adapter.base.BaseViewHolder import com.yizhuan.erban.R -import com.yizhuan.erban.common.glide.GlideUtils +import com.yizhuan.xchat_android_library.common.glide.GlideUtils import com.yizhuan.erban.ui.utils.ImageLoadUtilsV2 import com.yizhuan.xchat_android_core.room.game.GameInfo 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 e4d2ca97c..e3a7b3d85 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.photo.PhotoProvider 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 /** * 该对话框的功能提供拍摄和选择图片 diff --git a/app/src/main/java/com/yizhuan/erban/common/photo/PhotoProvider.kt b/app/src/main/java/com/yizhuan/erban/common/photo/PhotoProvider.kt index 1ebeabc3a..ecb3e5c8f 100644 --- a/app/src/main/java/com/yizhuan/erban/common/photo/PhotoProvider.kt +++ b/app/src/main/java/com/yizhuan/erban/common/photo/PhotoProvider.kt @@ -1,4 +1,4 @@ -package com.yizhuan.erban.common.photo +package com.yizhuan.xchat_android_library.common.photo import android.app.Activity import android.content.Intent @@ -7,14 +7,14 @@ import android.os.Build import android.os.Environment import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentActivity +import com.yizhuan.xchat_android_library.common.application.BaseApp +import com.yizhuan.xchat_android_library.common.delegate.SpDelegate +import com.yizhuan.xchat_android_library.common.file.FileHelper +import com.yizhuan.xchat_android_library.common.glide.GlideEngine +import com.yizhuan.xchat_android_library.common.util.Logger import com.yizhuan.xchat_android_library.easyphoto.EasyPhotos import com.yizhuan.xchat_android_library.easyphoto.constant.Type.* import com.yizhuan.xchat_android_library.easyphoto.models.album.entity.Photo -import com.yizhuan.erban.application.XChatApplication -import com.yizhuan.erban.common.delegate.SpDelegate -import com.yizhuan.erban.common.file.FileHelper -import com.yizhuan.erban.common.glide.GlideEngine -import com.yizhuan.xchat_android_core.utils.Logger import com.yizhuan.xchat_android_library.utils.TimeUtils import com.yizhuan.xchat_android_library.utils.TimeUtils.TIME_FORMAT import kotlinx.coroutines.* @@ -45,7 +45,7 @@ object PhotoProvider { withContext(Dispatchers.IO) { clearCache() } } EasyPhotos.createCamera(fragment, false)//参数说明:上下文,是否使用宽高数据(false时宽高数据为0,扫描速度更快) - .setFileProviderAuthority("${XChatApplication.getApplication().packageName}.fileprovider")//参数说明:见下方`FileProvider的配置` + .setFileProviderAuthority("${BaseApp.getApplication().packageName}.fileprovider")//参数说明:见下方`FileProvider的配置` .start(resultCode) } } diff --git a/app/src/main/java/com/yizhuan/erban/common/util/PhotoCompressUtil.kt b/app/src/main/java/com/yizhuan/erban/common/util/PhotoCompressUtil.kt index f4e377b8c..ef2e72419 100644 --- a/app/src/main/java/com/yizhuan/erban/common/util/PhotoCompressUtil.kt +++ b/app/src/main/java/com/yizhuan/erban/common/util/PhotoCompressUtil.kt @@ -6,7 +6,7 @@ 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.erban.common.file.FileHelper +import com.yizhuan.xchat_android_library.common.file.FileHelper import com.yizhuan.xchat_android_core.Constants import kotlinx.coroutines.* import java.io.File diff --git a/app/src/main/java/com/yizhuan/erban/ui/setting/LabActivity.java b/app/src/main/java/com/yizhuan/erban/ui/setting/LabActivity.java index 6dc3cc401..088cfebfa 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/setting/LabActivity.java +++ b/app/src/main/java/com/yizhuan/erban/ui/setting/LabActivity.java @@ -8,7 +8,7 @@ import android.widget.RadioGroup; import com.yizhuan.erban.R; import com.yizhuan.erban.base.BaseActivity; import com.yizhuan.erban.ui.utils.ImageLoadKt; -import com.yizhuan.xchat_android_core.Env; +import com.yizhuan.xchat_android_library.common.application.Env; import com.yizhuan.xchat_android_core.auth.AuthModel; import com.yizhuan.xchat_android_library.utils.ResUtil; 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 a36653d72..6b41cb6af 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 @@ -24,8 +24,7 @@ import com.yizhuan.erban.UIHelper import com.yizhuan.erban.application.XChatApplication import com.yizhuan.erban.audio.RecordingVoiceActivity import com.yizhuan.erban.base.BaseViewBindingActivity -import com.yizhuan.erban.common.file.FileHelper -import com.yizhuan.erban.common.photo.PhotoProvider +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 @@ -41,6 +40,7 @@ import com.yizhuan.xchat_android_core.user.UserModel 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.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 26c490384..525310383 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 @@ -20,12 +20,10 @@ import com.yalantis.ucrop.UCrop import com.yizhuan.erban.R import com.yizhuan.erban.application.XChatApplication import com.yizhuan.erban.base.TitleBar -import com.yizhuan.erban.common.file.FileHelper -import com.yizhuan.erban.common.photo.PhotoProvider +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.UserModifyPhotosActivity import com.yizhuan.erban.ui.user.UserModifyPhotosAdapter.PhotoItemClickListener import com.yizhuan.erban.ui.widget.dialog.CommonTipDialog import com.yizhuan.xchat_android_core.file.FileModel @@ -33,6 +31,7 @@ import com.yizhuan.xchat_android_core.user.UserModel 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.easypermisssion.EasyPermissions import com.yizhuan.xchat_android_library.utils.ResUtil import kotlinx.coroutines.Job diff --git a/app/src/main/java/com/yizhuan/erban/ui/widget/UserInfoDialog.java b/app/src/main/java/com/yizhuan/erban/ui/widget/UserInfoDialog.java index 88367a193..8678cbc49 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/widget/UserInfoDialog.java +++ b/app/src/main/java/com/yizhuan/erban/ui/widget/UserInfoDialog.java @@ -89,7 +89,6 @@ import com.yizhuan.xchat_android_core.utils.net.DontWarnObserver; import com.yizhuan.xchat_android_core.utils.net.RxHelper; import com.yizhuan.xchat_android_library.net.rxnet.callback.CallBack; import com.yizhuan.xchat_android_library.utils.ListUtils; -import com.yizhuan.xchat_android_library.utils.ResUtil; import com.yizhuan.xchat_android_library.utils.SingleToastUtil; import com.yizhuan.xchat_android_library.utils.config.BasicConfig; 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 8faabe530..5bf545b29 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,7 +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.photo.PhotoProvider; import com.yizhuan.erban.common.util.PhotoCompressUtil; import com.yizhuan.erban.common.util.PhotosCompressCallback; import com.yizhuan.erban.common.widget.dialog.ChooseWorldsDialog; @@ -55,6 +54,7 @@ import com.yizhuan.xchat_android_core.user.bean.UserInfo; 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.easypermisssion.EasyPermissions; import com.yizhuan.xchat_android_library.utils.ResUtil; import com.yizhuan.xchat_android_library.utils.SingleToastUtil; diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/UriProvider.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/UriProvider.java index 196b8cb76..fd33b1299 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/UriProvider.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/UriProvider.java @@ -3,7 +3,7 @@ package com.yizhuan.xchat_android_core; import android.text.TextUtils; import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; -import com.yizhuan.xchat_android_core.utils.Logger; +import com.yizhuan.xchat_android_library.common.application.Env; /** * 请求接口接口地址 diff --git a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/zego/ZegoEngineManager.java b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/zego/ZegoEngineManager.java index a0819344c..2a4e17ed5 100644 --- a/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/zego/ZegoEngineManager.java +++ b/core/src/diff_src_erban/java/com/yizhuan/xchat_android_core/manager/zego/ZegoEngineManager.java @@ -6,7 +6,7 @@ import android.util.Log; import com.tencent.bugly.crashreport.CrashReport; import com.yizhuan.xchat_android_constants.XChatConstants; import com.yizhuan.xchat_android_core.BuildConfig; -import com.yizhuan.xchat_android_core.Env; +import com.yizhuan.xchat_android_library.common.application.Env; import com.yizhuan.xchat_android_core.auth.AuthModel; import com.yizhuan.xchat_android_core.manager.AvRoomDataManager; import com.yizhuan.xchat_android_core.manager.BaseEngine; diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/Constants.java b/core/src/main/java/com/yizhuan/xchat_android_core/Constants.java index c925439ce..56ecce202 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/Constants.java +++ b/core/src/main/java/com/yizhuan/xchat_android_core/Constants.java @@ -1,6 +1,7 @@ package com.yizhuan.xchat_android_core; import com.yizhuan.xchat_android_constants.XChatConstants; +import com.yizhuan.xchat_android_library.common.application.Env; import com.yizhuan.xchat_android_library.utils.config.BasicConfig; import com.yizhuan.xchat_android_library.utils.pref.CommonPref; diff --git a/library/build.gradle b/library/build.gradle index c20c6582f..d91433837 100644 --- a/library/build.gradle +++ b/library/build.gradle @@ -60,7 +60,7 @@ android { dependencies { - def glideVersion = "4.13.1" + def glideVersion = "4.13.2" def retrofitVersion = "2.9.0" def okhttp3 = "4.9.3" def okio = "2.8.0" @@ -73,6 +73,7 @@ dependencies { def SmartRefreshLayoutVersion = "1.0.3" def eventbusVersion = "3.0.0" def fragment_version = "1.3.6" + def GlideTransformationsVersion = "3.0.1" implementation fileTree(dir: 'libs', include: ['*.jar']) testImplementation 'junit:junit:4.13.2' @@ -124,6 +125,11 @@ dependencies { api 'com.davemorrissey.labs:subsampling-scale-image-view-androidx:3.10.0' api 'com.github.chrisbanes:PhotoView:2.3.0' + //mmkv + api 'com.tencent:mmkv:1.2.13' + + api "jp.wasabeef:glide-transformations:${GlideTransformationsVersion}" + } repositories { mavenCentral() diff --git a/library/src/module_common/java/com/yizhuan/xchat_android_library/common/application/BaseApp.java b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/application/BaseApp.java new file mode 100644 index 000000000..58ee9d3b5 --- /dev/null +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/application/BaseApp.java @@ -0,0 +1,38 @@ +package com.yizhuan.xchat_android_library.common.application; + +import android.app.Application; +import android.content.Context; + +/** + * Application的代理类 + */ +public abstract class BaseApp extends Application{ + private static final String TAG = "BaseApp"; + public static Application gContext; + + /** + * @return 获取Application上下文对象 + */ + public static Context getContext() { + return gContext; + } + + /** + * @return 获取Application实例 + */ + public static Application getApplication() { + return gContext; + } + + public static void init(Application application) { + gContext = application; + } + + /** + * debug 环境 受到实验室模式影响 + */ + public static boolean isDebug() { + return Env.isDebug(); + } + +} diff --git a/core/src/main/java/com/yizhuan/xchat_android_core/Env.java b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/application/Env.java similarity index 96% rename from core/src/main/java/com/yizhuan/xchat_android_core/Env.java rename to library/src/module_common/java/com/yizhuan/xchat_android_library/common/application/Env.java index 8a4eccd81..b46e05e53 100644 --- a/core/src/main/java/com/yizhuan/xchat_android_core/Env.java +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/application/Env.java @@ -1,5 +1,6 @@ -package com.yizhuan.xchat_android_core; +package com.yizhuan.xchat_android_library.common.application; +import com.yizhuan.xchat_android_library.R; import com.yizhuan.xchat_android_library.utils.ResUtil; import com.yizhuan.xchat_android_library.utils.config.BasicConfig; import com.yizhuan.xchat_android_library.utils.pref.CommonPref; diff --git a/library/src/module_common/java/com/yizhuan/xchat_android_library/common/application/IAppLifeCycle.java b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/application/IAppLifeCycle.java new file mode 100644 index 000000000..1bbfa3573 --- /dev/null +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/application/IAppLifeCycle.java @@ -0,0 +1,12 @@ +package com.yizhuan.xchat_android_library.common.application; + +import android.app.Application; +import android.content.Context; +import android.content.res.Configuration; + +public interface IAppLifeCycle { + + void init(Application application); + +} + diff --git a/app/src/main/java/com/yizhuan/erban/common/delegate/SpDelegate.kt b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/delegate/SpDelegate.kt similarity index 85% rename from app/src/main/java/com/yizhuan/erban/common/delegate/SpDelegate.kt rename to library/src/module_common/java/com/yizhuan/xchat_android_library/common/delegate/SpDelegate.kt index 582ce13b5..a607c75cc 100644 --- a/app/src/main/java/com/yizhuan/erban/common/delegate/SpDelegate.kt +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/delegate/SpDelegate.kt @@ -1,7 +1,7 @@ -package com.yizhuan.erban.common.delegate +package com.yizhuan.xchat_android_library.common.delegate -import com.yizhuan.erban.application.XChatApplication -import com.yizhuan.erban.common.util.SPUtils +import com.yizhuan.xchat_android_library.common.application.BaseApp +import com.yizhuan.xchat_android_library.common.util.SPUtils import kotlin.properties.ReadWriteProperty import kotlin.reflect.KProperty @@ -21,7 +21,7 @@ class SpDelegate(private val key: String, private val default: T) : ReadWrite is Double -> SPUtils.getDouble(key, default) is ByteArray -> SPUtils.getBytes(key, default) else -> { - if (XChatApplication.isDebug()) { + if (BaseApp.isDebug()) { throw IllegalArgumentException("SpDelegate: this type is no supported") } else { null @@ -41,7 +41,7 @@ class SpDelegate(private val key: String, private val default: T) : ReadWrite is Double -> SPUtils.putDouble(key, value) is ByteArray -> SPUtils.putBytes(key, value) else -> { - if (XChatApplication.isDebug()) { + if (BaseApp.isDebug()) { throw IllegalArgumentException("SpDelegate: this type is no supported") } } diff --git a/app/src/main/java/com/yizhuan/erban/common/file/FileHelper.java b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/file/FileHelper.java similarity index 97% rename from app/src/main/java/com/yizhuan/erban/common/file/FileHelper.java rename to library/src/module_common/java/com/yizhuan/xchat_android_library/common/file/FileHelper.java index d2ae9b5cd..24bc5948d 100644 --- a/app/src/main/java/com/yizhuan/erban/common/file/FileHelper.java +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/file/FileHelper.java @@ -1,13 +1,13 @@ -package com.yizhuan.erban.common.file; +package com.yizhuan.xchat_android_library.common.file; import android.graphics.Bitmap; import android.net.Uri; import android.os.Environment; import android.text.TextUtils; -import com.yizhuan.erban.application.XChatApplication; -import com.yizhuan.erban.common.util.StringUtils; -import com.yizhuan.xchat_android_core.utils.Logger; +import com.qiniu.android.utils.StringUtils; +import com.yizhuan.xchat_android_library.common.application.BaseApp; +import com.yizhuan.xchat_android_library.common.util.Logger; import com.yizhuan.xchat_android_library.utils.FP; import java.io.BufferedInputStream; @@ -66,7 +66,7 @@ public class FileHelper { return rootCacheDir; } if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { - File file = XChatApplication.gContext.getExternalCacheDir(); + File file = BaseApp.getContext().getExternalCacheDir(); if (file != null) { createNoMediaFile(file); //因为频繁调用getExternalCacheDir方法会在某些机器上面出现ANR,所以这里降低频率调用。 @@ -74,7 +74,7 @@ public class FileHelper { return file; } } - File file = XChatApplication.gContext.getCacheDir(); + File file = BaseApp.getContext().getCacheDir(); createNoMediaFile(file); //因为频繁调用getExternalCacheDir方法会在某些机器上面出现ANR,所以这里降低频率调用。 rootCacheDir = file; @@ -114,7 +114,7 @@ public class FileHelper { } } if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { - File file = XChatApplication.gContext.getExternalFilesDir(dirName); + File file = BaseApp.getContext().getExternalFilesDir(dirName); if (file != null) { createNoMediaFile(file); //因为频繁调用getExternalFilesDir方法会在某些机器上面出现ANR,所以这里降低频率调用。 @@ -126,7 +126,7 @@ public class FileHelper { return file; } } - File file = XChatApplication.gContext.getFilesDir(); + File file = BaseApp.getContext().getFilesDir(); createNoMediaFile(file); //因为频繁调用getExternalFilesDir方法会在某些机器上面出现ANR,所以这里降低频率调用。 rootFileDirMap.put("empty", file); @@ -623,7 +623,7 @@ public class FileHelper { public static String getStringFromAssets(String fileName) { String result = ""; try { - InputStream is = XChatApplication.gContext.getAssets().open(fileName); + InputStream is = BaseApp.getContext().getAssets().open(fileName); int length = is.available(); byte[] buffer = new byte[length]; is.read(buffer); @@ -654,7 +654,7 @@ public class FileHelper { return false; } file.createNewFile(); - InputStream in = XChatApplication.gContext.getAssets().open(fileName); + InputStream in = BaseApp.getContext().getAssets().open(fileName); OutputStream out = new FileOutputStream(file); byte[] buffer = new byte[4096]; int n; @@ -793,7 +793,7 @@ public class FileHelper { if (!FileHelper.ensureDirExists(file.getParentFile().getAbsolutePath())) { return false; } - InputStream stream = XChatApplication.gContext.getContentResolver().openInputStream(uri); + InputStream stream = BaseApp.getContext().getContentResolver().openInputStream(uri); if (stream != null) { file.createNewFile(); OutputStream out = new FileOutputStream(file); diff --git a/app/src/main/java/com/yizhuan/erban/common/glide/GlideEngine.java b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/glide/GlideEngine.java similarity index 97% rename from app/src/main/java/com/yizhuan/erban/common/glide/GlideEngine.java rename to library/src/module_common/java/com/yizhuan/xchat_android_library/common/glide/GlideEngine.java index ac1168816..09f4bf804 100644 --- a/app/src/main/java/com/yizhuan/erban/common/glide/GlideEngine.java +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/glide/GlideEngine.java @@ -1,4 +1,4 @@ -package com.yizhuan.erban.common.glide; +package com.yizhuan.xchat_android_library.common.glide; import android.content.Context; import android.graphics.Bitmap; diff --git a/app/src/main/java/com/yizhuan/erban/common/glide/GlideUtils.kt b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/glide/GlideUtils.kt similarity index 99% rename from app/src/main/java/com/yizhuan/erban/common/glide/GlideUtils.kt rename to library/src/module_common/java/com/yizhuan/xchat_android_library/common/glide/GlideUtils.kt index 759fa91ef..7dab6fd28 100644 --- a/app/src/main/java/com/yizhuan/erban/common/glide/GlideUtils.kt +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/glide/GlideUtils.kt @@ -1,4 +1,4 @@ -package com.yizhuan.erban.common.glide +package com.yizhuan.xchat_android_library.common.glide import android.app.Activity import android.app.Application @@ -27,11 +27,11 @@ import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.target.DrawableImageViewTarget import com.bumptech.glide.request.target.Target -import com.yizhuan.erban.common.transform.AssignScaleTransformation -import com.yizhuan.erban.common.transform.ComplexTransformation +import com.yizhuan.xchat_android_library.common.transform.AssignScaleTransformation +import com.yizhuan.xchat_android_library.common.transform.ComplexTransformation import com.yizhuan.xchat_android_library.common.util.ActivityHelper -import com.yizhuan.erban.common.util.Utils -import com.yizhuan.xchat_android_core.utils.Logger +import com.yizhuan.xchat_android_library.common.util.Logger +import com.yizhuan.xchat_android_library.common.util.Utils import jp.wasabeef.glide.transformations.RoundedCornersTransformation import java.io.File diff --git a/library/src/module_common/java/com/yizhuan/xchat_android_library/common/photo/PhotoProvider.kt b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/photo/PhotoProvider.kt new file mode 100644 index 000000000..ecb3e5c8f --- /dev/null +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/photo/PhotoProvider.kt @@ -0,0 +1,226 @@ +package com.yizhuan.xchat_android_library.common.photo + +import android.app.Activity +import android.content.Intent +import android.net.Uri +import android.os.Build +import android.os.Environment +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentActivity +import com.yizhuan.xchat_android_library.common.application.BaseApp +import com.yizhuan.xchat_android_library.common.delegate.SpDelegate +import com.yizhuan.xchat_android_library.common.file.FileHelper +import com.yizhuan.xchat_android_library.common.glide.GlideEngine +import com.yizhuan.xchat_android_library.common.util.Logger +import com.yizhuan.xchat_android_library.easyphoto.EasyPhotos +import com.yizhuan.xchat_android_library.easyphoto.constant.Type.* +import com.yizhuan.xchat_android_library.easyphoto.models.album.entity.Photo +import com.yizhuan.xchat_android_library.utils.TimeUtils +import com.yizhuan.xchat_android_library.utils.TimeUtils.TIME_FORMAT +import kotlinx.coroutines.* +import java.io.File + +/** + * Created by wushaocheng on 2022/11/15 + * Desc:图片选择二次封装 + */ +object PhotoProvider { + private const val TAG = "PhotoProvider" + + //上一次选择的时间,避免用户连续进入选择图片页导致删除缓存 + private var mLastSelectTime: Long by SpDelegate("PhotoProvider_last_select_time", 0L) + + /** + * easyPhoto库选择文件copy到内部的目录名 + */ + private const val FOLD_EASY_PHOTO_INTERNAL = "selectPhotoTemp" + private var mPhotoJob: Job? = null + + @JvmStatic + @JvmOverloads + fun photoCamera(fragment: Fragment, resultCode: Int, isClearCache: Boolean = true) { + cancelJop() + mPhotoJob = MainScope().launch { + if (isClearCache && isClearByTime()) { + withContext(Dispatchers.IO) { clearCache() } + } + EasyPhotos.createCamera(fragment, false)//参数说明:上下文,是否使用宽高数据(false时宽高数据为0,扫描速度更快) + .setFileProviderAuthority("${BaseApp.getApplication().packageName}.fileprovider")//参数说明:见下方`FileProvider的配置` + .start(resultCode) + } + } + + /** + * 喵圈发布动态专用,去掉bmp格式的图片 + */ + @JvmStatic + @JvmOverloads + fun photoProviderPublish(activity: Activity, maxSelect: Int = 1, canChooseGif: Boolean = false, resultCode: Int, isClearCache: Boolean = true) { + cancelJop() + mPhotoJob = MainScope().launch { + if (isClearCache && isClearByTime()) { + withContext(Dispatchers.IO) { clearCache() } + } + EasyPhotos.createAlbum(activity, false, false, GlideEngine())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93) + .setCount(maxSelect)//参数说明:最大可选数,默认1 + .setGif(canChooseGif) + .filter(JPEG, JPG, PNG, WEBP) + .setPuzzleMenu(false) + .setCleanMenu(false) + .start(resultCode) + } + } + + @JvmStatic + @JvmOverloads + fun videoProvider(activity: Activity, maxSelect: Int = 1, resultCode: Int, isClearCache: Boolean = true) { + cancelJop() + mPhotoJob = MainScope().launch { + if (isClearCache && isClearByTime()) { + withContext(Dispatchers.IO) { clearCache() } + } + EasyPhotos.createAlbum(activity, false, false, GlideEngine()) + .setCount(maxSelect)//参数说明:最大可选数,默认1 + .setPuzzleMenu(false) + .onlyVideo() + .setCleanMenu(false) + .start(resultCode) + } + } + + @JvmStatic + @JvmOverloads + fun photoProvider(activity: Activity, maxSelect: Int = 1, canChooseGif: Boolean = false, resultCode: Int, isClearCache: Boolean = true) { + cancelJop() + mPhotoJob = MainScope().launch { + if (isClearCache && isClearByTime()) { + withContext(Dispatchers.IO) { clearCache() } + } + EasyPhotos.createAlbum(activity, false, false, GlideEngine())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93) + .setCount(maxSelect)//参数说明:最大可选数,默认1 + .setGif(canChooseGif) + .setPuzzleMenu(false) + .setCleanMenu(false) + .start(resultCode) + } + } + + @JvmStatic + @JvmOverloads + fun photoProvider(activity: FragmentActivity, maxSelect: Int = 1, canChooseGif: Boolean = false, resultCode: Int, isClearCache: Boolean = true) { + cancelJop() + mPhotoJob = MainScope().launch { + if (isClearCache && isClearByTime()) { + withContext(Dispatchers.IO) { clearCache() } + } + EasyPhotos.createAlbum(activity, false, false, GlideEngine())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93) + .setCount(maxSelect)//参数说明:最大可选数,默认1 + .setGif(canChooseGif) + .setPuzzleMenu(false) + .setCleanMenu(false) + .start(resultCode) + } + } + + @JvmStatic + @JvmOverloads + fun photoProvider(fragment: Fragment, maxSelect: Int = 1, canChooseGif: Boolean = false, resultCode: Int, isClearCache: Boolean = true, minFileSize: Long = 0L) { + cancelJop() + mPhotoJob = MainScope().launch { + if (isClearCache && isClearByTime()) { + withContext(Dispatchers.IO) { clearCache() } + } + EasyPhotos.createAlbum(fragment, false, false, GlideEngine())//参数说明:上下文,是否显示相机按钮,是否使用宽高数据(false时宽高数据为0,扫描速度更快),[配置Glide为图片加载引擎](https://github.com/HuanTanSheng/EasyPhotos/wiki/12-%E9%85%8D%E7%BD%AEImageEngine%EF%BC%8C%E6%94%AF%E6%8C%81%E6%89%80%E6%9C%89%E5%9B%BE%E7%89%87%E5%8A%A0%E8%BD%BD%E5%BA%93) + .setCount(maxSelect)//参数说明:最大可选数,默认1 + .setGif(canChooseGif) + .setMinFileSize(minFileSize) + .setPuzzleMenu(false) + .setCleanMenu(false) + .start(resultCode) + } + } + + @JvmStatic + fun getResultUriList(data: Intent?): List? { + val list: List? = data?.getParcelableArrayListExtra(EasyPhotos.RESULT_PHOTOS) + return list?.takeIf { it.isNotEmpty() }?.map { it.uri } + } + + @JvmStatic + fun getResultPhotoList(data: Intent?): List? { + return data?.getParcelableArrayListExtra(EasyPhotos.RESULT_PHOTOS) + } + + @JvmStatic + fun getResultPathListAsync(data: Intent?, resultListener: ((List?) -> Unit)) { + cancelJop() + mPhotoJob = MainScope().launch { + val list: List? = data?.getParcelableArrayListExtra(EasyPhotos.RESULT_PHOTOS) + val result = withContext(Dispatchers.IO) { copyToInternalCache(list) } + resultListener.invoke(result) + } + } + + /** + * 外部的文件复制到项目目录下,再获取对应路径 + * 修改方案原因: + * 1. android Q 外部文件path变更为类似这种结构:/external/images/media/{文件id},导致无法通过path读取文件信息,文件名字及格式 + * 2. android Q 支持Uri获取文件,但uri获取不到文件类型及不少自身或者sdk的函数从参数需要用到path + * 3. 原本项目功能逻辑很多用到了path(包括不仅仅文件大小,文件类型,作为参数传给其他函数使用(比如BitmapFactory.decodeFile)),直接全局替换为Uri,影响面过大,直接copy一份到自己内部,返回内部的路径,使得外部调用无感知 + * + * 发现几个重点问题: + * 1. 项目使用到BitmapFactory.decodeFile(imgPath, options)之类的方法,该方法在android Q直接使用外部path测试中发现,获取图片信息失败 + * + */ + private fun copyToInternalCache(photos: List?): List? { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val foldPath = getInternalPath() + File.separator + val newPaths = ArrayList() + photos?.forEach { + if (it.uri != null && !it.name.isNullOrEmpty()) { + val path = "$foldPath${it.name}" + if (FileHelper.copyFileFromUri(it.uri, path, true)) { + newPaths.add(path) + Logger.debug(TAG, "path: ${it.path} , displayName: ${it.name} , newPath: $path ") + } + } + } + newPaths + } else { + photos?.takeIf { it.isNotEmpty() }?.map { it.path } + } + } + + /** + * 清除复制缓存 + */ + fun clearCache() { + Logger.debug( + TAG, "clearCache => mLastSelectTime: ${TimeUtils.getDateTimeString( + mLastSelectTime, TIME_FORMAT)}") + FileHelper.removeAllFile(getInternalPath() + File.separator) + } + + /** + * 检查时间,判断是否要删除缓冲 + */ + private fun isClearByTime(): Boolean { + val currentTime = System.currentTimeMillis() + val isClear = currentTime - mLastSelectTime > 10 * 60 * 1000 + mLastSelectTime = currentTime + return isClear + } + + private fun cancelJop() { + if (mPhotoJob?.isActive == true) { + mPhotoJob?.cancel() + } + } + + /** + * easyPhoto内部复制缓存的路径 + */ + private fun getInternalPath(): String { + return ("${FileHelper.getRootFilesDir(Environment.DIRECTORY_PICTURES).absolutePath}${File.separator}$FOLD_EASY_PHOTO_INTERNAL") + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yizhuan/erban/common/transform/AssignScaleTransformation.kt b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/transform/AssignScaleTransformation.kt similarity index 98% rename from app/src/main/java/com/yizhuan/erban/common/transform/AssignScaleTransformation.kt rename to library/src/module_common/java/com/yizhuan/xchat_android_library/common/transform/AssignScaleTransformation.kt index c10cb6a53..c0886fe2f 100644 --- a/app/src/main/java/com/yizhuan/erban/common/transform/AssignScaleTransformation.kt +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/transform/AssignScaleTransformation.kt @@ -1,4 +1,4 @@ -package com.yizhuan.erban.common.transform +package com.yizhuan.xchat_android_library.common.transform import android.graphics.Bitmap import android.graphics.Canvas diff --git a/app/src/main/java/com/yizhuan/erban/common/transform/ComplexTransformation.java b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/transform/ComplexTransformation.java similarity index 98% rename from app/src/main/java/com/yizhuan/erban/common/transform/ComplexTransformation.java rename to library/src/module_common/java/com/yizhuan/xchat_android_library/common/transform/ComplexTransformation.java index 7e27e4dc5..e8132cedc 100644 --- a/app/src/main/java/com/yizhuan/erban/common/transform/ComplexTransformation.java +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/transform/ComplexTransformation.java @@ -1,4 +1,4 @@ -package com.yizhuan.erban.common.transform; +package com.yizhuan.xchat_android_library.common.transform; import android.graphics.Bitmap; import android.graphics.BitmapShader; diff --git a/app/src/main/java/com/yizhuan/erban/common/util/Config.java b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/util/Config.java similarity index 98% rename from app/src/main/java/com/yizhuan/erban/common/util/Config.java rename to library/src/module_common/java/com/yizhuan/xchat_android_library/common/util/Config.java index 10b1c879f..78478aa2a 100644 --- a/app/src/main/java/com/yizhuan/erban/common/util/Config.java +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/util/Config.java @@ -1,4 +1,4 @@ -package com.yizhuan.erban.common.util; +package com.yizhuan.xchat_android_library.common.util; import android.content.Context; import android.content.SharedPreferences; diff --git a/app/src/main/java/com/yizhuan/erban/common/util/SPUtils.java b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/util/SPUtils.java similarity index 93% rename from app/src/main/java/com/yizhuan/erban/common/util/SPUtils.java rename to library/src/module_common/java/com/yizhuan/xchat_android_library/common/util/SPUtils.java index 4e9340d5c..e62f9dfbd 100644 --- a/app/src/main/java/com/yizhuan/erban/common/util/SPUtils.java +++ b/library/src/module_common/java/com/yizhuan/xchat_android_library/common/util/SPUtils.java @@ -1,8 +1,8 @@ -package com.yizhuan.erban.common.util; +package com.yizhuan.xchat_android_library.common.util; import android.os.Parcelable; -import com.yizhuan.erban.application.XChatApplication; +import com.yizhuan.xchat_android_library.common.application.BaseApp; import com.yizhuan.xchat_android_library.utils.TimeUtils; import java.util.Date; @@ -15,7 +15,7 @@ import java.util.Set; */ public class SPUtils { - private static Config sConfig = Config.getInstance(XChatApplication.gContext); + private static Config sConfig = Config.getInstance(BaseApp.getContext()); public static void putBytes(String key, byte[] bytes) { sConfig.putBytes(key, bytes); diff --git a/library/src/module_common/res/values/strings.xml b/library/src/module_common/res/values/strings.xml index 1ab4d7a7f..695890b7f 100644 --- a/library/src/module_common/res/values/strings.xml +++ b/library/src/module_common/res/values/strings.xml @@ -1,4 +1,7 @@ 上傳失敗,圖片太大啦~ 上傳圖片不能小於20kb + 請輸入正確的環境 + 請輸入正確的環境 + 請先初始化環境 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 ea1f84fd3..f251c3172 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 @@ -14,7 +14,7 @@ import java.io.File; /** * Created by hzxuwen on 2015/6/12. */ -public class ImageAction extends PickImageAction { +public class ImageAction extends PickImageActionNew{ public ImageAction() { super(R.drawable.chat_icon_photo, R.string.input_panel_photo, true); @@ -32,5 +32,6 @@ public class ImageAction extends PickImageAction { EventBus.getDefault().post(new ActiveEvent()); } + } diff --git a/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageAction.java b/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageAction.java index ae3fb1335..991dd4c9f 100644 --- a/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageAction.java +++ b/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageAction.java @@ -44,8 +44,6 @@ public abstract class PickImageAction extends BaseAction { public void onClick() { int requestCode = makeRequestCode(RequestCode.PICK_IMAGE); showSelector(getTitleId(), requestCode, multiSelect, tempFile()); - - } private String tempFile() { @@ -111,7 +109,6 @@ public abstract class PickImageAction extends BaseAction { private boolean handleImagePath(Intent intent, Intent data) { String photoPath = data.getStringExtra(Extras.EXTRA_FILE_PATH); if (TextUtils.isEmpty(photoPath)) { -// Toast.makeText(getActivity(), R.string.picker_image_error, Toast.LENGTH_LONG).show(); SingleToastUtil.showToastShort(R.string.picker_image_error); return false; } 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 new file mode 100644 index 000000000..f5cc47deb --- /dev/null +++ b/nim_uikit/src/com/netease/nim/uikit/business/session/actions/PickImageActionNew.kt @@ -0,0 +1,99 @@ +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.utils.SingleToastUtil +import java.io.File + +/** + * Created by zhoujianghua on 2015/7/31. + */ +abstract class PickImageActionNew protected constructor( + iconResId: Int, + titleId: Int, + private val multiSelect: Boolean +) : BaseAction(iconResId, titleId), EasyPermissions.PermissionCallbacks { + + companion object{ + private const val REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111 // 从相册中选择 + } + + protected abstract fun onPicked(file: File) + + override fun onClick() { + checkStoragePermission() + } + + 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 +// ) +// } + } + + override fun onRequestPermissionsResult( + requestCode: Int, + permissions: Array, + grantResults: IntArray + ) { + } + + override fun onPermissionsGranted(requestCode: Int, perms: List) { + + } + + 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 + ) + } + } +} \ No newline at end of file