[Modify]修改图片选择的逻辑
This commit is contained in:
@@ -261,9 +261,6 @@ dependencies {
|
|||||||
//Google Play Referrer API
|
//Google Play Referrer API
|
||||||
implementation 'com.android.installreferrer:installreferrer:2.2'
|
implementation 'com.android.installreferrer:installreferrer:2.2'
|
||||||
|
|
||||||
//mmkv
|
|
||||||
implementation 'com.tencent:mmkv:1.2.13'
|
|
||||||
|
|
||||||
implementation 'com.github.yalantis:ucrop:2.2.7'
|
implementation 'com.github.yalantis:ucrop:2.2.7'
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -58,7 +58,7 @@ import com.yizhuan.erban.utils.PushMessageHandler;
|
|||||||
import com.yizhuan.xchat_android_constants.XChatConstants;
|
import com.yizhuan.xchat_android_constants.XChatConstants;
|
||||||
import com.yizhuan.xchat_android_core.Constants;
|
import com.yizhuan.xchat_android_core.Constants;
|
||||||
import com.yizhuan.xchat_android_core.DemoCache;
|
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.UriProvider;
|
||||||
import com.yizhuan.xchat_android_core.auth.AuthModel;
|
import com.yizhuan.xchat_android_core.auth.AuthModel;
|
||||||
import com.yizhuan.xchat_android_core.bean.response.ServiceResult;
|
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.user.event.NeedCompleteInfoEvent;
|
||||||
import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils;
|
import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils;
|
||||||
import com.yizhuan.xchat_android_core.utils.net.ServerException;
|
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.RxNet;
|
||||||
import com.yizhuan.xchat_android_library.net.rxnet.converter.GsonConverterPlugins;
|
import com.yizhuan.xchat_android_library.net.rxnet.converter.GsonConverterPlugins;
|
||||||
import com.yizhuan.xchat_android_library.utils.AppMetaDataUtil;
|
import com.yizhuan.xchat_android_library.utils.AppMetaDataUtil;
|
||||||
@@ -113,7 +114,7 @@ import io.realm.RealmConfiguration;
|
|||||||
* @date 2017/2/11
|
* @date 2017/2/11
|
||||||
*/
|
*/
|
||||||
|
|
||||||
public class XChatApplication extends Application {
|
public class XChatApplication extends BaseApp {
|
||||||
public static final String TAG = "XChatApplication";
|
public static final String TAG = "XChatApplication";
|
||||||
public static Application gContext;
|
public static Application gContext;
|
||||||
private static final MessageNotifierCustomization messageNotifierCustomization = new MessageNotifierCustomization() {
|
private static final MessageNotifierCustomization messageNotifierCustomization = new MessageNotifierCustomization() {
|
||||||
@@ -528,6 +529,7 @@ public class XChatApplication extends Application {
|
|||||||
initOtherSDK();
|
initOtherSDK();
|
||||||
}
|
}
|
||||||
initContext(this);
|
initContext(this);
|
||||||
|
BaseApp.init(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -3,7 +3,7 @@ package com.yizhuan.erban.avroom.adapter
|
|||||||
import com.chad.library.adapter.base.BaseQuickAdapter
|
import com.chad.library.adapter.base.BaseQuickAdapter
|
||||||
import com.chad.library.adapter.base.BaseViewHolder
|
import com.chad.library.adapter.base.BaseViewHolder
|
||||||
import com.yizhuan.erban.R
|
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.erban.ui.utils.ImageLoadUtilsV2
|
||||||
import com.yizhuan.xchat_android_core.room.game.GameInfo
|
import com.yizhuan.xchat_android_core.room.game.GameInfo
|
||||||
|
|
||||||
|
@@ -15,12 +15,12 @@ import com.yizhuan.xchat_android_library.easypermisssion.EasyPermissions
|
|||||||
import com.yizhuan.erban.R
|
import com.yizhuan.erban.R
|
||||||
import com.yizhuan.erban.application.XChatApplication
|
import com.yizhuan.erban.application.XChatApplication
|
||||||
import com.yizhuan.xchat_android_library.common.base.BaseDialogFragment
|
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.PhotoCompressCallback
|
||||||
import com.yizhuan.erban.common.util.PhotoCompressUtil
|
import com.yizhuan.erban.common.util.PhotoCompressUtil
|
||||||
import com.yizhuan.erban.common.util.PhotosCompressCallback
|
import com.yizhuan.erban.common.util.PhotosCompressCallback
|
||||||
import com.yizhuan.erban.databinding.PhotoDialogBinding
|
import com.yizhuan.erban.databinding.PhotoDialogBinding
|
||||||
import com.yizhuan.erban.ui.widget.dialog.CommonTipDialog
|
import com.yizhuan.erban.ui.widget.dialog.CommonTipDialog
|
||||||
|
import com.yizhuan.xchat_android_library.common.photo.PhotoProvider
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 该对话框的功能提供拍摄和选择图片
|
* 该对话框的功能提供拍摄和选择图片
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
package com.yizhuan.erban.common.photo
|
package com.yizhuan.xchat_android_library.common.photo
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -7,14 +7,14 @@ import android.os.Build
|
|||||||
import android.os.Environment
|
import android.os.Environment
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.fragment.app.FragmentActivity
|
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.EasyPhotos
|
||||||
import com.yizhuan.xchat_android_library.easyphoto.constant.Type.*
|
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.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
|
||||||
import com.yizhuan.xchat_android_library.utils.TimeUtils.TIME_FORMAT
|
import com.yizhuan.xchat_android_library.utils.TimeUtils.TIME_FORMAT
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
@@ -45,7 +45,7 @@ object PhotoProvider {
|
|||||||
withContext(Dispatchers.IO) { clearCache() }
|
withContext(Dispatchers.IO) { clearCache() }
|
||||||
}
|
}
|
||||||
EasyPhotos.createCamera(fragment, false)//参数说明:上下文,是否使用宽高数据(false时宽高数据为0,扫描速度更快)
|
EasyPhotos.createCamera(fragment, false)//参数说明:上下文,是否使用宽高数据(false时宽高数据为0,扫描速度更快)
|
||||||
.setFileProviderAuthority("${XChatApplication.getApplication().packageName}.fileprovider")//参数说明:见下方`FileProvider的配置`
|
.setFileProviderAuthority("${BaseApp.getApplication().packageName}.fileprovider")//参数说明:见下方`FileProvider的配置`
|
||||||
.start(resultCode)
|
.start(resultCode)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -6,7 +6,7 @@ import android.text.TextUtils
|
|||||||
import android.util.Log
|
import android.util.Log
|
||||||
import com.yizhuan.xchat_android_library.luban.Luban
|
import com.yizhuan.xchat_android_library.luban.Luban
|
||||||
import com.yizhuan.erban.application.XChatApplication
|
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 com.yizhuan.xchat_android_core.Constants
|
||||||
import kotlinx.coroutines.*
|
import kotlinx.coroutines.*
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
@@ -8,7 +8,7 @@ import android.widget.RadioGroup;
|
|||||||
import com.yizhuan.erban.R;
|
import com.yizhuan.erban.R;
|
||||||
import com.yizhuan.erban.base.BaseActivity;
|
import com.yizhuan.erban.base.BaseActivity;
|
||||||
import com.yizhuan.erban.ui.utils.ImageLoadKt;
|
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_core.auth.AuthModel;
|
||||||
import com.yizhuan.xchat_android_library.utils.ResUtil;
|
import com.yizhuan.xchat_android_library.utils.ResUtil;
|
||||||
|
|
||||||
|
@@ -24,8 +24,7 @@ import com.yizhuan.erban.UIHelper
|
|||||||
import com.yizhuan.erban.application.XChatApplication
|
import com.yizhuan.erban.application.XChatApplication
|
||||||
import com.yizhuan.erban.audio.RecordingVoiceActivity
|
import com.yizhuan.erban.audio.RecordingVoiceActivity
|
||||||
import com.yizhuan.erban.base.BaseViewBindingActivity
|
import com.yizhuan.erban.base.BaseViewBindingActivity
|
||||||
import com.yizhuan.erban.common.file.FileHelper
|
import com.yizhuan.xchat_android_library.common.file.FileHelper
|
||||||
import com.yizhuan.erban.common.photo.PhotoProvider
|
|
||||||
import com.yizhuan.erban.common.util.BitmapUtil
|
import com.yizhuan.erban.common.util.BitmapUtil
|
||||||
import com.yizhuan.erban.common.util.PhotoCompressCallback
|
import com.yizhuan.erban.common.util.PhotoCompressCallback
|
||||||
import com.yizhuan.erban.common.util.PhotoCompressUtil
|
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.UserInfo
|
||||||
import com.yizhuan.xchat_android_core.user.bean.UserPhoto
|
import com.yizhuan.xchat_android_core.user.bean.UserPhoto
|
||||||
import com.yizhuan.xchat_android_core.utils.Logger
|
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.easypermisssion.EasyPermissions
|
||||||
import com.yizhuan.xchat_android_library.utils.ResUtil
|
import com.yizhuan.xchat_android_library.utils.ResUtil
|
||||||
import com.yizhuan.xchat_android_library.utils.TimeUtils
|
import com.yizhuan.xchat_android_library.utils.TimeUtils
|
||||||
|
@@ -20,12 +20,10 @@ import com.yalantis.ucrop.UCrop
|
|||||||
import com.yizhuan.erban.R
|
import com.yizhuan.erban.R
|
||||||
import com.yizhuan.erban.application.XChatApplication
|
import com.yizhuan.erban.application.XChatApplication
|
||||||
import com.yizhuan.erban.base.TitleBar
|
import com.yizhuan.erban.base.TitleBar
|
||||||
import com.yizhuan.erban.common.file.FileHelper
|
import com.yizhuan.xchat_android_library.common.file.FileHelper
|
||||||
import com.yizhuan.erban.common.photo.PhotoProvider
|
|
||||||
import com.yizhuan.erban.common.util.BitmapUtil
|
import com.yizhuan.erban.common.util.BitmapUtil
|
||||||
import com.yizhuan.erban.common.util.PhotoCompressCallback
|
import com.yizhuan.erban.common.util.PhotoCompressCallback
|
||||||
import com.yizhuan.erban.common.util.PhotoCompressUtil
|
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.user.UserModifyPhotosAdapter.PhotoItemClickListener
|
||||||
import com.yizhuan.erban.ui.widget.dialog.CommonTipDialog
|
import com.yizhuan.erban.ui.widget.dialog.CommonTipDialog
|
||||||
import com.yizhuan.xchat_android_core.file.FileModel
|
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.UserInfo
|
||||||
import com.yizhuan.xchat_android_core.user.bean.UserPhoto
|
import com.yizhuan.xchat_android_core.user.bean.UserPhoto
|
||||||
import com.yizhuan.xchat_android_core.utils.net.BeanObserver
|
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.easypermisssion.EasyPermissions
|
||||||
import com.yizhuan.xchat_android_library.utils.ResUtil
|
import com.yizhuan.xchat_android_library.utils.ResUtil
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
|
@@ -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_core.utils.net.RxHelper;
|
||||||
import com.yizhuan.xchat_android_library.net.rxnet.callback.CallBack;
|
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.ListUtils;
|
||||||
import com.yizhuan.xchat_android_library.utils.ResUtil;
|
|
||||||
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
|
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
|
||||||
import com.yizhuan.xchat_android_library.utils.config.BasicConfig;
|
import com.yizhuan.xchat_android_library.utils.config.BasicConfig;
|
||||||
|
|
||||||
|
@@ -29,7 +29,6 @@ import com.netease.nim.uikit.common.util.log.LogUtil;
|
|||||||
import com.trello.rxlifecycle3.android.ActivityEvent;
|
import com.trello.rxlifecycle3.android.ActivityEvent;
|
||||||
import com.yizhuan.erban.R;
|
import com.yizhuan.erban.R;
|
||||||
import com.yizhuan.erban.base.BaseMvpActivity;
|
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.PhotoCompressUtil;
|
||||||
import com.yizhuan.erban.common.util.PhotosCompressCallback;
|
import com.yizhuan.erban.common.util.PhotosCompressCallback;
|
||||||
import com.yizhuan.erban.common.widget.dialog.ChooseWorldsDialog;
|
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.SharedPreferenceUtils;
|
||||||
import com.yizhuan.xchat_android_core.utils.net.DontWarnObserver;
|
import com.yizhuan.xchat_android_core.utils.net.DontWarnObserver;
|
||||||
import com.yizhuan.xchat_android_library.base.factory.CreatePresenter;
|
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.easypermisssion.EasyPermissions;
|
||||||
import com.yizhuan.xchat_android_library.utils.ResUtil;
|
import com.yizhuan.xchat_android_library.utils.ResUtil;
|
||||||
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
|
import com.yizhuan.xchat_android_library.utils.SingleToastUtil;
|
||||||
|
@@ -3,7 +3,7 @@ package com.yizhuan.xchat_android_core;
|
|||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
|
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;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 请求接口接口地址
|
* 请求接口接口地址
|
||||||
|
@@ -6,7 +6,7 @@ import android.util.Log;
|
|||||||
import com.tencent.bugly.crashreport.CrashReport;
|
import com.tencent.bugly.crashreport.CrashReport;
|
||||||
import com.yizhuan.xchat_android_constants.XChatConstants;
|
import com.yizhuan.xchat_android_constants.XChatConstants;
|
||||||
import com.yizhuan.xchat_android_core.BuildConfig;
|
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.auth.AuthModel;
|
||||||
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
|
import com.yizhuan.xchat_android_core.manager.AvRoomDataManager;
|
||||||
import com.yizhuan.xchat_android_core.manager.BaseEngine;
|
import com.yizhuan.xchat_android_core.manager.BaseEngine;
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package com.yizhuan.xchat_android_core;
|
package com.yizhuan.xchat_android_core;
|
||||||
|
|
||||||
import com.yizhuan.xchat_android_constants.XChatConstants;
|
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.config.BasicConfig;
|
||||||
import com.yizhuan.xchat_android_library.utils.pref.CommonPref;
|
import com.yizhuan.xchat_android_library.utils.pref.CommonPref;
|
||||||
|
|
||||||
|
@@ -60,7 +60,7 @@ android {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|
||||||
def glideVersion = "4.13.1"
|
def glideVersion = "4.13.2"
|
||||||
def retrofitVersion = "2.9.0"
|
def retrofitVersion = "2.9.0"
|
||||||
def okhttp3 = "4.9.3"
|
def okhttp3 = "4.9.3"
|
||||||
def okio = "2.8.0"
|
def okio = "2.8.0"
|
||||||
@@ -73,6 +73,7 @@ dependencies {
|
|||||||
def SmartRefreshLayoutVersion = "1.0.3"
|
def SmartRefreshLayoutVersion = "1.0.3"
|
||||||
def eventbusVersion = "3.0.0"
|
def eventbusVersion = "3.0.0"
|
||||||
def fragment_version = "1.3.6"
|
def fragment_version = "1.3.6"
|
||||||
|
def GlideTransformationsVersion = "3.0.1"
|
||||||
|
|
||||||
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
||||||
testImplementation 'junit:junit:4.13.2'
|
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.davemorrissey.labs:subsampling-scale-image-view-androidx:3.10.0'
|
||||||
api 'com.github.chrisbanes:PhotoView:2.3.0'
|
api 'com.github.chrisbanes:PhotoView:2.3.0'
|
||||||
|
|
||||||
|
//mmkv
|
||||||
|
api 'com.tencent:mmkv:1.2.13'
|
||||||
|
|
||||||
|
api "jp.wasabeef:glide-transformations:${GlideTransformationsVersion}"
|
||||||
|
|
||||||
}
|
}
|
||||||
repositories {
|
repositories {
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
@@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@@ -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.ResUtil;
|
||||||
import com.yizhuan.xchat_android_library.utils.config.BasicConfig;
|
import com.yizhuan.xchat_android_library.utils.config.BasicConfig;
|
||||||
import com.yizhuan.xchat_android_library.utils.pref.CommonPref;
|
import com.yizhuan.xchat_android_library.utils.pref.CommonPref;
|
@@ -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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@@ -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.xchat_android_library.common.application.BaseApp
|
||||||
import com.yizhuan.erban.common.util.SPUtils
|
import com.yizhuan.xchat_android_library.common.util.SPUtils
|
||||||
import kotlin.properties.ReadWriteProperty
|
import kotlin.properties.ReadWriteProperty
|
||||||
import kotlin.reflect.KProperty
|
import kotlin.reflect.KProperty
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@ class SpDelegate<T>(private val key: String, private val default: T) : ReadWrite
|
|||||||
is Double -> SPUtils.getDouble(key, default)
|
is Double -> SPUtils.getDouble(key, default)
|
||||||
is ByteArray -> SPUtils.getBytes(key, default)
|
is ByteArray -> SPUtils.getBytes(key, default)
|
||||||
else -> {
|
else -> {
|
||||||
if (XChatApplication.isDebug()) {
|
if (BaseApp.isDebug()) {
|
||||||
throw IllegalArgumentException("SpDelegate: this type is no supported")
|
throw IllegalArgumentException("SpDelegate: this type is no supported")
|
||||||
} else {
|
} else {
|
||||||
null
|
null
|
||||||
@@ -41,7 +41,7 @@ class SpDelegate<T>(private val key: String, private val default: T) : ReadWrite
|
|||||||
is Double -> SPUtils.putDouble(key, value)
|
is Double -> SPUtils.putDouble(key, value)
|
||||||
is ByteArray -> SPUtils.putBytes(key, value)
|
is ByteArray -> SPUtils.putBytes(key, value)
|
||||||
else -> {
|
else -> {
|
||||||
if (XChatApplication.isDebug()) {
|
if (BaseApp.isDebug()) {
|
||||||
throw IllegalArgumentException("SpDelegate: this type is no supported")
|
throw IllegalArgumentException("SpDelegate: this type is no supported")
|
||||||
}
|
}
|
||||||
}
|
}
|
@@ -1,13 +1,13 @@
|
|||||||
package com.yizhuan.erban.common.file;
|
package com.yizhuan.xchat_android_library.common.file;
|
||||||
|
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
|
||||||
import com.yizhuan.erban.application.XChatApplication;
|
import com.qiniu.android.utils.StringUtils;
|
||||||
import com.yizhuan.erban.common.util.StringUtils;
|
import com.yizhuan.xchat_android_library.common.application.BaseApp;
|
||||||
import com.yizhuan.xchat_android_core.utils.Logger;
|
import com.yizhuan.xchat_android_library.common.util.Logger;
|
||||||
import com.yizhuan.xchat_android_library.utils.FP;
|
import com.yizhuan.xchat_android_library.utils.FP;
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
import java.io.BufferedInputStream;
|
||||||
@@ -66,7 +66,7 @@ public class FileHelper {
|
|||||||
return rootCacheDir;
|
return rootCacheDir;
|
||||||
}
|
}
|
||||||
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
||||||
File file = XChatApplication.gContext.getExternalCacheDir();
|
File file = BaseApp.getContext().getExternalCacheDir();
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
createNoMediaFile(file);
|
createNoMediaFile(file);
|
||||||
//因为频繁调用getExternalCacheDir方法会在某些机器上面出现ANR,所以这里降低频率调用。
|
//因为频繁调用getExternalCacheDir方法会在某些机器上面出现ANR,所以这里降低频率调用。
|
||||||
@@ -74,7 +74,7 @@ public class FileHelper {
|
|||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
File file = XChatApplication.gContext.getCacheDir();
|
File file = BaseApp.getContext().getCacheDir();
|
||||||
createNoMediaFile(file);
|
createNoMediaFile(file);
|
||||||
//因为频繁调用getExternalCacheDir方法会在某些机器上面出现ANR,所以这里降低频率调用。
|
//因为频繁调用getExternalCacheDir方法会在某些机器上面出现ANR,所以这里降低频率调用。
|
||||||
rootCacheDir = file;
|
rootCacheDir = file;
|
||||||
@@ -114,7 +114,7 @@ public class FileHelper {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
|
||||||
File file = XChatApplication.gContext.getExternalFilesDir(dirName);
|
File file = BaseApp.getContext().getExternalFilesDir(dirName);
|
||||||
if (file != null) {
|
if (file != null) {
|
||||||
createNoMediaFile(file);
|
createNoMediaFile(file);
|
||||||
//因为频繁调用getExternalFilesDir方法会在某些机器上面出现ANR,所以这里降低频率调用。
|
//因为频繁调用getExternalFilesDir方法会在某些机器上面出现ANR,所以这里降低频率调用。
|
||||||
@@ -126,7 +126,7 @@ public class FileHelper {
|
|||||||
return file;
|
return file;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
File file = XChatApplication.gContext.getFilesDir();
|
File file = BaseApp.getContext().getFilesDir();
|
||||||
createNoMediaFile(file);
|
createNoMediaFile(file);
|
||||||
//因为频繁调用getExternalFilesDir方法会在某些机器上面出现ANR,所以这里降低频率调用。
|
//因为频繁调用getExternalFilesDir方法会在某些机器上面出现ANR,所以这里降低频率调用。
|
||||||
rootFileDirMap.put("empty", file);
|
rootFileDirMap.put("empty", file);
|
||||||
@@ -623,7 +623,7 @@ public class FileHelper {
|
|||||||
public static String getStringFromAssets(String fileName) {
|
public static String getStringFromAssets(String fileName) {
|
||||||
String result = "";
|
String result = "";
|
||||||
try {
|
try {
|
||||||
InputStream is = XChatApplication.gContext.getAssets().open(fileName);
|
InputStream is = BaseApp.getContext().getAssets().open(fileName);
|
||||||
int length = is.available();
|
int length = is.available();
|
||||||
byte[] buffer = new byte[length];
|
byte[] buffer = new byte[length];
|
||||||
is.read(buffer);
|
is.read(buffer);
|
||||||
@@ -654,7 +654,7 @@ public class FileHelper {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
file.createNewFile();
|
file.createNewFile();
|
||||||
InputStream in = XChatApplication.gContext.getAssets().open(fileName);
|
InputStream in = BaseApp.getContext().getAssets().open(fileName);
|
||||||
OutputStream out = new FileOutputStream(file);
|
OutputStream out = new FileOutputStream(file);
|
||||||
byte[] buffer = new byte[4096];
|
byte[] buffer = new byte[4096];
|
||||||
int n;
|
int n;
|
||||||
@@ -793,7 +793,7 @@ public class FileHelper {
|
|||||||
if (!FileHelper.ensureDirExists(file.getParentFile().getAbsolutePath())) {
|
if (!FileHelper.ensureDirExists(file.getParentFile().getAbsolutePath())) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
InputStream stream = XChatApplication.gContext.getContentResolver().openInputStream(uri);
|
InputStream stream = BaseApp.getContext().getContentResolver().openInputStream(uri);
|
||||||
if (stream != null) {
|
if (stream != null) {
|
||||||
file.createNewFile();
|
file.createNewFile();
|
||||||
OutputStream out = new FileOutputStream(file);
|
OutputStream out = new FileOutputStream(file);
|
@@ -1,4 +1,4 @@
|
|||||||
package com.yizhuan.erban.common.glide;
|
package com.yizhuan.xchat_android_library.common.glide;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
@@ -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.Activity
|
||||||
import android.app.Application
|
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.RequestListener
|
||||||
import com.bumptech.glide.request.target.DrawableImageViewTarget
|
import com.bumptech.glide.request.target.DrawableImageViewTarget
|
||||||
import com.bumptech.glide.request.target.Target
|
import com.bumptech.glide.request.target.Target
|
||||||
import com.yizhuan.erban.common.transform.AssignScaleTransformation
|
import com.yizhuan.xchat_android_library.common.transform.AssignScaleTransformation
|
||||||
import com.yizhuan.erban.common.transform.ComplexTransformation
|
import com.yizhuan.xchat_android_library.common.transform.ComplexTransformation
|
||||||
import com.yizhuan.xchat_android_library.common.util.ActivityHelper
|
import com.yizhuan.xchat_android_library.common.util.ActivityHelper
|
||||||
import com.yizhuan.erban.common.util.Utils
|
import com.yizhuan.xchat_android_library.common.util.Logger
|
||||||
import com.yizhuan.xchat_android_core.utils.Logger
|
import com.yizhuan.xchat_android_library.common.util.Utils
|
||||||
import jp.wasabeef.glide.transformations.RoundedCornersTransformation
|
import jp.wasabeef.glide.transformations.RoundedCornersTransformation
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
|
@@ -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<Uri>? {
|
||||||
|
val list: List<Photo>? = data?.getParcelableArrayListExtra(EasyPhotos.RESULT_PHOTOS)
|
||||||
|
return list?.takeIf { it.isNotEmpty() }?.map { it.uri }
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun getResultPhotoList(data: Intent?): List<Photo>? {
|
||||||
|
return data?.getParcelableArrayListExtra(EasyPhotos.RESULT_PHOTOS)
|
||||||
|
}
|
||||||
|
|
||||||
|
@JvmStatic
|
||||||
|
fun getResultPathListAsync(data: Intent?, resultListener: ((List<String>?) -> Unit)) {
|
||||||
|
cancelJop()
|
||||||
|
mPhotoJob = MainScope().launch {
|
||||||
|
val list: List<Photo>? = 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<Photo>?): List<String>? {
|
||||||
|
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
|
||||||
|
val foldPath = getInternalPath() + File.separator
|
||||||
|
val newPaths = ArrayList<String>()
|
||||||
|
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")
|
||||||
|
}
|
||||||
|
}
|
@@ -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.Bitmap
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
@@ -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.Bitmap;
|
||||||
import android.graphics.BitmapShader;
|
import android.graphics.BitmapShader;
|
@@ -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.Context;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
@@ -1,8 +1,8 @@
|
|||||||
package com.yizhuan.erban.common.util;
|
package com.yizhuan.xchat_android_library.common.util;
|
||||||
|
|
||||||
import android.os.Parcelable;
|
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 com.yizhuan.xchat_android_library.utils.TimeUtils;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
@@ -15,7 +15,7 @@ import java.util.Set;
|
|||||||
*/
|
*/
|
||||||
public class SPUtils {
|
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) {
|
public static void putBytes(String key, byte[] bytes) {
|
||||||
sConfig.putBytes(key, bytes);
|
sConfig.putBytes(key, bytes);
|
@@ -1,4 +1,7 @@
|
|||||||
<resources>
|
<resources>
|
||||||
<string name="text_bitmap_too_large">上傳失敗,圖片太大啦~</string>
|
<string name="text_bitmap_too_large">上傳失敗,圖片太大啦~</string>
|
||||||
<string name="text_bitmap_too_small">上傳圖片不能小於20kb</string>
|
<string name="text_bitmap_too_small">上傳圖片不能小於20kb</string>
|
||||||
|
<string name="yizhuan_xchat_android_core_env_01">請輸入正確的環境</string>
|
||||||
|
<string name="yizhuan_xchat_android_core_env_02">請輸入正確的環境</string>
|
||||||
|
<string name="yizhuan_xchat_android_core_env_03">請先初始化環境</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@@ -14,7 +14,7 @@ import java.io.File;
|
|||||||
/**
|
/**
|
||||||
* Created by hzxuwen on 2015/6/12.
|
* Created by hzxuwen on 2015/6/12.
|
||||||
*/
|
*/
|
||||||
public class ImageAction extends PickImageAction {
|
public class ImageAction extends PickImageActionNew{
|
||||||
|
|
||||||
public ImageAction() {
|
public ImageAction() {
|
||||||
super(R.drawable.chat_icon_photo, R.string.input_panel_photo, true);
|
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());
|
EventBus.getDefault().post(new ActiveEvent());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -44,8 +44,6 @@ public abstract class PickImageAction extends BaseAction {
|
|||||||
public void onClick() {
|
public void onClick() {
|
||||||
int requestCode = makeRequestCode(RequestCode.PICK_IMAGE);
|
int requestCode = makeRequestCode(RequestCode.PICK_IMAGE);
|
||||||
showSelector(getTitleId(), requestCode, multiSelect, tempFile());
|
showSelector(getTitleId(), requestCode, multiSelect, tempFile());
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private String tempFile() {
|
private String tempFile() {
|
||||||
@@ -111,7 +109,6 @@ public abstract class PickImageAction extends BaseAction {
|
|||||||
private boolean handleImagePath(Intent intent, Intent data) {
|
private boolean handleImagePath(Intent intent, Intent data) {
|
||||||
String photoPath = data.getStringExtra(Extras.EXTRA_FILE_PATH);
|
String photoPath = data.getStringExtra(Extras.EXTRA_FILE_PATH);
|
||||||
if (TextUtils.isEmpty(photoPath)) {
|
if (TextUtils.isEmpty(photoPath)) {
|
||||||
// Toast.makeText(getActivity(), R.string.picker_image_error, Toast.LENGTH_LONG).show();
|
|
||||||
SingleToastUtil.showToastShort(R.string.picker_image_error);
|
SingleToastUtil.showToastShort(R.string.picker_image_error);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@@ -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<String>,
|
||||||
|
grantResults: IntArray
|
||||||
|
) {
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPermissionsGranted(requestCode: Int, perms: List<String>) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPermissionsDenied(requestCode: Int, perms: List<String>) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user