feat : 將 圖片選擇功能, 不用第三方,純用 系統自帶的 資源選擇器來實現, 並統一到一個入口 (IM模塊 單獨 處理)
This commit is contained in:
@@ -137,10 +137,6 @@ public class ErbanTakePhotoActivity extends TakePhotoActivity {
|
||||
getTakePhoto().onPickMultipleWithCrop(limit, options);
|
||||
}
|
||||
|
||||
private void checkPermissionAndStartCamera() {
|
||||
//低版本授权检查
|
||||
checkPermission(checkPermissionListener, R.string.ask_camera, android.Manifest.permission.CAMERA);
|
||||
}
|
||||
|
||||
PermissionActivity.CheckPermListener checkPermissionListener = new PermissionActivity.CheckPermListener() {
|
||||
@Override
|
||||
|
@@ -1,16 +1,12 @@
|
||||
package com.chwl.app.avroom.activity;
|
||||
|
||||
|
||||
import android.Manifest;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.TimePickerDialog;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.graphics.Bitmap;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.text.SpannableString;
|
||||
import android.text.TextUtils;
|
||||
import android.view.View;
|
||||
@@ -18,49 +14,21 @@ import android.widget.CompoundButton;
|
||||
import android.widget.ImageView;
|
||||
import android.widget.RelativeLayout;
|
||||
|
||||
import androidx.activity.result.ActivityResultCallback;
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.PickVisualMediaRequest;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.core.content.ContextCompat;
|
||||
import androidx.databinding.DataBindingUtil;
|
||||
|
||||
import com.chwl.app.application.App;
|
||||
import com.chwl.app.common.util.BitmapUtil;
|
||||
import com.chwl.app.ui.widget.dialog.CommonTipDialog;
|
||||
import com.chwl.core.file.FileModel;
|
||||
import com.chwl.core.user.UserModel;
|
||||
import com.chwl.core.utils.CoreLogger;
|
||||
import com.chwl.core.utils.DialogUtil;
|
||||
import com.chwl.core.utils.LogUtils;
|
||||
import com.chwl.library.common.file.FileHelper;
|
||||
import com.chwl.library.common.photo.PhotoProvider;
|
||||
import com.chwl.library.common.util.PhotoCompressCallback;
|
||||
import com.chwl.library.common.util.PhotoCompressUtil;
|
||||
import com.chwl.library.common.util.SPUtils;
|
||||
import com.chwl.library.constants.ConstantsLib;
|
||||
import com.chwl.library.easypermisssion.EasyPermissions;
|
||||
|
||||
import com.chwl.app.avroom.giftvalue.GiftValueDialogUiHelper;
|
||||
import com.chwl.app.ui.user.adapter.UserPhotoAdapter;
|
||||
import com.chwl.core.super_admin.util.SuperAdminUtil;
|
||||
import com.chwl.core.utils.net.DontWarnObserver;
|
||||
import com.chwl.core.utils.net.RxHelper;
|
||||
import com.chwl.library.easyphoto.models.album.entity.Photo;
|
||||
import com.chwl.library.utils.SingleToastUtil;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.netease.nim.uikit.StatusBarUtil;
|
||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper;
|
||||
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder;
|
||||
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.app.application.App;
|
||||
import com.chwl.app.avroom.dialog.SelectLabelDialog;
|
||||
import com.chwl.app.avroom.giftvalue.GiftValueDialogUiHelper;
|
||||
import com.chwl.app.avroom.presenter.RoomSettingPresenter;
|
||||
import com.chwl.app.avroom.view.IRoomSettingView;
|
||||
import com.chwl.app.avroom.widget.EditRoomTitleDialog;
|
||||
import com.chwl.app.base.BaseMvpActivity;
|
||||
import com.chwl.app.base.PhotoPickActivity;
|
||||
import com.chwl.app.common.util.BitmapUtil;
|
||||
import com.chwl.app.common.widget.dialog.DialogManager;
|
||||
import com.chwl.app.databinding.ActivityRoomSettingBinding;
|
||||
import com.chwl.app.ui.webview.CommonWebViewActivity;
|
||||
@@ -69,6 +37,7 @@ import com.chwl.core.UriProvider;
|
||||
import com.chwl.core.auth.AuthModel;
|
||||
import com.chwl.core.auth.event.KickOutEvent;
|
||||
import com.chwl.core.bean.RoomQueueInfo;
|
||||
import com.chwl.core.file.FileModel;
|
||||
import com.chwl.core.im.custom.bean.CustomAttachment;
|
||||
import com.chwl.core.im.custom.bean.RoomNoticeAttachment;
|
||||
import com.chwl.core.kick.KickModel;
|
||||
@@ -84,21 +53,33 @@ import com.chwl.core.room.giftvalue.helper.GiftValueMrg;
|
||||
import com.chwl.core.room.model.AvRoomModel;
|
||||
import com.chwl.core.room.model.RoomSettingModel;
|
||||
import com.chwl.core.room.queue.bean.MicMemberInfo;
|
||||
import com.chwl.core.super_admin.util.SuperAdminUtil;
|
||||
import com.chwl.core.utils.LogUtils;
|
||||
import com.chwl.core.utils.MyUriUtils;
|
||||
import com.chwl.core.utils.net.BeanObserver;
|
||||
import com.chwl.core.utils.net.DontWarnObserver;
|
||||
import com.chwl.core.utils.net.RxHelper;
|
||||
import com.chwl.library.base.factory.CreatePresenter;
|
||||
import com.chwl.library.common.file.FileHelper;
|
||||
import com.chwl.library.common.util.PhotoCompressCallback;
|
||||
import com.chwl.library.common.util.PhotoCompressUtil;
|
||||
import com.chwl.library.net.rxnet.callback.CallBack;
|
||||
import com.chwl.library.utils.CommonUtils;
|
||||
import com.chwl.library.utils.JavaUtil;
|
||||
import com.chwl.library.utils.ListUtils;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
import com.chwl.library.utils.SingleToastUtil;
|
||||
import com.chwl.library.utils.codec.DESUtils;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.netease.nim.uikit.StatusBarUtil;
|
||||
import com.netease.nimlib.sdk.chatroom.ChatRoomMessageBuilder;
|
||||
import com.netease.nimlib.sdk.chatroom.model.ChatRoomMessage;
|
||||
import com.yalantis.ucrop.UCrop;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
import org.greenrobot.eventbus.Subscribe;
|
||||
import org.greenrobot.eventbus.ThreadMode;
|
||||
|
||||
import java.io.FileNotFoundException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
@@ -113,7 +94,7 @@ import kotlinx.coroutines.Job;
|
||||
* @date 2017/9/26
|
||||
*/
|
||||
@CreatePresenter(RoomSettingPresenter.class)
|
||||
public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomSettingPresenter> implements View.OnClickListener, IRoomSettingView, EasyPermissions.PermissionCallbacks {
|
||||
public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomSettingPresenter> implements View.OnClickListener, IRoomSettingView {
|
||||
|
||||
private RelativeLayout managerLayout;
|
||||
private RelativeLayout blackLayout;
|
||||
@@ -133,7 +114,6 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
||||
|
||||
private ActivityRoomSettingBinding binding;
|
||||
|
||||
private ActivityResultLauncher<PickVisualMediaRequest> pickMedia;
|
||||
private Uri mUri;
|
||||
private Job mJob;
|
||||
private final int PERMISSION_CODE_STORAGE = 12;
|
||||
@@ -185,16 +165,6 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
||||
.filter(roomEvent -> roomEvent.getEvent() == RoomEvent.ROOM_INFO_UPDATE)
|
||||
.subscribe(roomEvent -> updateRoomInfoView());
|
||||
|
||||
//todo do photoPick
|
||||
pickMedia = registerForActivityResult(new ActivityResultContracts.PickVisualMedia(), new ActivityResultCallback<Uri>() {
|
||||
@Override
|
||||
public void onActivityResult(Uri uri) {
|
||||
if (uri != null && mUri != null) {
|
||||
crop(uri, 1, mUri);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -618,67 +588,8 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
||||
}
|
||||
|
||||
private void checkStoragePermission() {
|
||||
if (Build.VERSION.SDK_INT >= 29){
|
||||
DialogUtil.INSTANCE.getDialog(this, new EasyAlertDialogHelper.OnDialogActionListener() {
|
||||
@Override
|
||||
public void doCancelAction() {}
|
||||
@Override
|
||||
public void doOkAction() {
|
||||
mUri = Uri.parse("file://"+ FileHelper.getRootCacheDir().getPath()+"/"+System.nanoTime()+".jpg");
|
||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true);
|
||||
pickMedia.launch(new PickVisualMediaRequest.Builder().setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE).build());
|
||||
PhotoPickActivity.start(this, PhotoPickActivity.IMG);
|
||||
}
|
||||
});
|
||||
}else{
|
||||
if (!EasyPermissions.hasPermissions(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
|
||||
EasyPermissions.requestPermissions(this, getString(R.string.permission_storage_rationale), PERMISSION_CODE_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE);
|
||||
} else {
|
||||
mUri = Uri.parse("file://"+ FileHelper.getRootCacheDir().getPath()+"/"+System.nanoTime()+".jpg");
|
||||
PhotoProvider.photoProvider(this, 1,false,REQUEST_CODE_OPEN_PHOTO_PROVIDER, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
|
||||
if (requestCode == PERMISSION_CODE_STORAGE) {
|
||||
checkStoragePermission();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
|
||||
if (requestCode == PERMISSION_CODE_STORAGE) {
|
||||
String requestTip = getString(R.string.permission_storage_denied);
|
||||
CommonTipDialog mPrivacyDialog = new CommonTipDialog(context);
|
||||
mPrivacyDialog.setTipMsg(requestTip);
|
||||
mPrivacyDialog.setOkText(getString(R.string.room_perform_go_update));
|
||||
mPrivacyDialog.setOnActionListener(new CommonTipDialog.OnActionListener() {
|
||||
@Override
|
||||
public void onOk() {
|
||||
//同意跳到应用详情页面
|
||||
Uri packageUri = Uri.parse("package:${packageName}");
|
||||
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageUri);
|
||||
startActivityForResult(intent, REQUEST_CODE_STORAGE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel() {
|
||||
//取消跳到应用详情页面
|
||||
ToastUtils.show(getString(R.string.permission_storage_refused));
|
||||
}
|
||||
});
|
||||
mPrivacyDialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private void switchGiftValue() {
|
||||
@@ -1024,18 +935,17 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == REQUEST_CODE_STORAGE) {
|
||||
checkStoragePermission();
|
||||
} else if (resultCode == RESULT_OK) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
switch (requestCode) {
|
||||
case REQUEST_CODE_OPEN_PHOTO_PROVIDER:
|
||||
case PhotoPickActivity.PICK_ACT_RESULT:
|
||||
if (data != null) {
|
||||
List<Photo> photos = PhotoProvider.getResultPhotoList(data);
|
||||
if (photos != null && !photos.isEmpty()) {
|
||||
Photo photo = photos.get(0);
|
||||
crop(photo.uri, photo.size, mUri);
|
||||
} else {
|
||||
toast(R.string.empty_data);
|
||||
Uri uri = data.getData();
|
||||
mUri = Uri.parse("file://" + FileHelper.getRootCacheDir().getPath() + "/" + System.nanoTime() + ".jpg");
|
||||
if (uri != null && mUri != null) {
|
||||
boolean isCopy = MyUriUtils.INSTANCE.copyFileToUrl(this, uri, mUri);
|
||||
if (isCopy) {
|
||||
crop(mUri, 1, mUri);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -1064,6 +974,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFail(@NonNull Throwable e) {
|
||||
toast(e.getMessage());
|
||||
|
@@ -14,26 +14,22 @@ import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||
import com.chad.library.adapter.base.BaseViewHolder;
|
||||
import com.chwl.app.avroom.activity.RoomTypeSwitchActivity;
|
||||
import com.coorchice.library.utils.LogUtils;
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.chwl.app.sadmin.RoomSAdminManagerActivity;
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.app.UIHelper;
|
||||
import com.chwl.app.avroom.activity.CreatePKActivity;
|
||||
import com.chwl.app.avroom.activity.RoomSettingActivity;
|
||||
import com.chwl.app.avroom.activity.RoomTypeSwitchActivity;
|
||||
import com.chwl.app.avroom.anotherroompk.RoomPKCreateActivity;
|
||||
import com.chwl.app.avroom.giftvalue.GiftValueDialogUiHelper;
|
||||
import com.chwl.app.avroom.room_album.RoomAlbumActivity;
|
||||
import com.chwl.app.avroom.singleroompk.SingleRoomPKCreateActivity;
|
||||
import com.chwl.library.common.util.Utils;
|
||||
import com.chwl.app.common.widget.dialog.DialogManager;
|
||||
import com.chwl.app.room_chat.activity.RoomInviteFansActivity;
|
||||
import com.chwl.app.sadmin.RoomSAdminManagerActivity;
|
||||
import com.chwl.app.ui.widget.ButtonItem;
|
||||
import com.chwl.app.ui.widget.recyclerview.decoration.ColorDecoration;
|
||||
import com.chwl.app.ui.widget.recyclerview.layoutmanager.FullyGridLayoutManager;
|
||||
import com.chwl.app.vip.dialog.VipBroadcastDialog;
|
||||
import com.chwl.app.room_chat.activity.RoomInviteFansActivity;
|
||||
import com.chwl.core.XConstants;
|
||||
import com.chwl.core.auth.AuthModel;
|
||||
import com.chwl.core.im.custom.bean.RoomPkBean;
|
||||
@@ -55,8 +51,12 @@ import com.chwl.core.utils.CurrentTimeUtils;
|
||||
import com.chwl.core.utils.net.BeanObserver;
|
||||
import com.chwl.core.utils.net.DontWarnObserver;
|
||||
import com.chwl.core.utils.net.RxHelper;
|
||||
import com.chwl.library.common.util.Utils;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
import com.chwl.library.utils.SingleToastUtil;
|
||||
import com.coorchice.library.utils.LogUtils;
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialog;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
|
||||
import org.greenrobot.eventbus.EventBus;
|
||||
|
||||
@@ -78,6 +78,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
private OptAdapter optAdapter;
|
||||
private OnActionListener onActionListener;
|
||||
private CallBack callBack;
|
||||
|
||||
public void setCallBack(CallBack callBack) {
|
||||
this.callBack = callBack;
|
||||
}
|
||||
@@ -172,7 +173,6 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
R.drawable.ic_room_opt_in_pk;
|
||||
|
||||
|
||||
|
||||
optAdapter.addData(new OptAction(icon, str, () -> {
|
||||
if (AvRoomDataManager.get().isDatingMode()) {
|
||||
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_01));
|
||||
@@ -215,7 +215,6 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
R.drawable.ic_room_opt_another_pk_open;
|
||||
|
||||
|
||||
|
||||
optAdapter.addData(new OptAction(icon, str, () -> {
|
||||
if (AvRoomDataManager.get().isDatingMode()) {
|
||||
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_05));
|
||||
@@ -268,7 +267,6 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
||||
String finalStr = str;
|
||||
|
||||
|
||||
|
||||
optAdapter.addData(new OptAction(icon, str, () -> {
|
||||
if (pkBean != null && ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_011).equals(finalStr)) {
|
||||
SingleRoomPKModel.INSTANCE
|
||||
|
@@ -25,6 +25,7 @@ import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.titles.Col
|
||||
class RoomAlbumActivity : BaseViewBindingActivity<ActivityRoomAlbumBinding>() {
|
||||
|
||||
val viewModel: RoomAlbumViewModel by viewModels()
|
||||
var loadDialog: UploadRoomAlbumDialogFragment? = null
|
||||
|
||||
override fun init() {
|
||||
initTitleBar(getString(R.string.room_album))
|
||||
@@ -97,13 +98,19 @@ class RoomAlbumActivity : BaseViewBindingActivity<ActivityRoomAlbumBinding>() {
|
||||
}
|
||||
|
||||
binding.tvUpload.setOnClickListener {
|
||||
UploadRoomAlbumDialogFragment().show(
|
||||
loadDialog = UploadRoomAlbumDialogFragment()
|
||||
loadDialog?.show(
|
||||
supportFragmentManager,
|
||||
UploadRoomAlbumDialogFragment::class.java.simpleName
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
loadDialog?.onActivityResult(requestCode, resultCode, data)
|
||||
}
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun start(context: Context) {
|
||||
|
@@ -1,45 +1,33 @@
|
||||
package com.chwl.app.avroom.room_album
|
||||
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.app.AlertDialog
|
||||
import android.app.Dialog
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.PickVisualMediaRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
|
||||
import com.chad.library.adapter.base.BaseViewHolder
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.PhotoPickActivity
|
||||
import com.chwl.app.common.widget.dialog.DialogManager
|
||||
import com.chwl.app.databinding.DialogRoomAlbumUploadBinding
|
||||
import com.chwl.app.ui.utils.ImageLoadUtilsV2
|
||||
import com.chwl.app.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration
|
||||
import com.chwl.core.Constants
|
||||
import com.chwl.core.gift.bean.GiftInfo
|
||||
import com.chwl.core.utils.DialogUtil
|
||||
import com.chwl.core.utils.MyUriUtils
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.photo.PhotoProvider.photoProvider
|
||||
import com.chwl.library.common.util.PhotoCompressUtil.compress
|
||||
import com.chwl.library.common.util.PhotoCompressUtil.getCompressCachePath
|
||||
import com.chwl.library.common.util.PhotosCompressCallback
|
||||
import com.chwl.library.common.util.SPUtils
|
||||
import com.chwl.library.constants.ConstantsLib
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import com.hjq.toast.ToastUtils
|
||||
import kotlinx.coroutines.Job
|
||||
|
||||
class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
||||
@@ -54,7 +42,6 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
||||
private var unlockedGift: GiftInfo? = null
|
||||
|
||||
private var compressJob: Job? = null
|
||||
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
|
||||
val dialogManager by lazy {
|
||||
DialogManager(context)
|
||||
}
|
||||
@@ -64,21 +51,6 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setStyle(STYLE_NO_TITLE, R.style.ErbanBottomSheetDialog)
|
||||
|
||||
//todo do photoPick
|
||||
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
||||
uri?.let {
|
||||
if (MyUriUtils.isGif(requireContext(), uri)) {
|
||||
ToastUtils.show(R.string.error_file_type)
|
||||
return@let
|
||||
}
|
||||
val file = MyUriUtils.copyFile(requireContext(),uri)
|
||||
if (file != null) {
|
||||
compressPhotos(mutableListOf(file.path))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
@@ -243,37 +215,7 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
||||
}
|
||||
|
||||
private fun checkStoragePermission() {
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 29){
|
||||
DialogUtil.getDialog(requireActivity(),object : EasyAlertDialogHelper.OnDialogActionListener {
|
||||
override fun doCancelAction() {
|
||||
|
||||
}
|
||||
override fun doOkAction() {
|
||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
|
||||
pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
|
||||
}
|
||||
})
|
||||
}else{
|
||||
if (!EasyPermissions.hasPermissions(requireContext(),Manifest.permission.READ_EXTERNAL_STORAGE)) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
100,
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
photoProvider(
|
||||
this,
|
||||
7 - photoAdapter.data.size,
|
||||
true,
|
||||
200,
|
||||
true
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
PhotoPickActivity.start(requireActivity(), PhotoPickActivity.IMG)
|
||||
}
|
||||
|
||||
@Deprecated("Deprecated in Java")
|
||||
@@ -282,10 +224,17 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
||||
if (resultCode != Activity.RESULT_OK) {
|
||||
return
|
||||
}
|
||||
if (requestCode == 200) {
|
||||
PhotoProvider.getResultPathListAsync(data) {
|
||||
it?.mapNotNull { it.path }?.let { paths ->
|
||||
compressPhotos(paths.toMutableList())
|
||||
|
||||
if (requestCode == PhotoPickActivity.PICK_ACT_RESULT) {
|
||||
val uri = data?.data
|
||||
uri?.let {
|
||||
if (MyUriUtils.isGif(requireContext(), uri)) {
|
||||
ToastUtils.show(R.string.error_file_type)
|
||||
return@let
|
||||
}
|
||||
val file = MyUriUtils.copyFile(requireContext(), uri)
|
||||
if (file != null) {
|
||||
compressPhotos(mutableListOf(file.path))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -66,10 +66,7 @@ public abstract class BaseBindingTakePhotoActivity<V extends ViewDataBinding> ex
|
||||
getDialogManager().showCommonPopupDialog(buttonItems, ResUtil.getString(R.string.erban_base_basebindingtakephotoactivity_03), false);
|
||||
}
|
||||
|
||||
private void checkPermissionAndStartCamera() {
|
||||
//低版本授权检查
|
||||
checkPermission(this::takePhoto, R.string.ask_camera, android.Manifest.permission.CAMERA);
|
||||
}
|
||||
|
||||
|
||||
private void takePhoto() {
|
||||
String mCameraCapturingName = CAMERA_PREFIX + System.currentTimeMillis() + ".jpg";
|
||||
|
@@ -66,10 +66,7 @@ public abstract class BaseMvpTakePhotoActivity<V extends IMvpBaseView, P extends
|
||||
getDialogManager().showCommonPopupDialog(buttonItems, ResUtil.getString(R.string.erban_base_basemvptakephotoactivity_03), false);
|
||||
}
|
||||
|
||||
private void checkPermissionAndStartCamera() {
|
||||
//低版本授权检查
|
||||
checkPermission(checkPermissionListener, R.string.ask_camera, android.Manifest.permission.CAMERA);
|
||||
}
|
||||
|
||||
|
||||
PermissionActivity.CheckPermListener checkPermissionListener = () -> takePhoto();
|
||||
|
||||
|
@@ -1,24 +1,169 @@
|
||||
package com.chwl.app.base
|
||||
|
||||
import android.Manifest
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.PickVisualMediaRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.ui.widget.dialog.CommonTipDialog
|
||||
import com.chwl.core.utils.DialogUtil
|
||||
import com.chwl.library.common.util.SPUtils
|
||||
import com.chwl.library.constants.ConstantsLib
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
||||
|
||||
class PhotoPickActivity : ComponentActivity() {
|
||||
class PhotoPickActivity : ComponentActivity(), EasyPermissions.PermissionCallbacks {
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun start(act: Activity, mediaType: String) {
|
||||
val intent = Intent(act, PhotoPickActivity::class.java)
|
||||
intent.putExtra(PICK_ACT_TYPE, mediaType)
|
||||
act.startActivityForResult(intent, PICK_ACT_RESULT)
|
||||
}
|
||||
|
||||
const val PICK_ACT_RESULT = 1234566789;
|
||||
private const val PERMISSION_RESULT = 123;
|
||||
private const val PICK_ACT_TYPE = "PICK_ACT_TYPE";
|
||||
|
||||
const val IMG = "image/*"
|
||||
const val GIF = "image/gif"
|
||||
}
|
||||
|
||||
|
||||
var pickMedia: ActivityResultLauncher<PickVisualMediaRequest>? = null
|
||||
|
||||
var pickMediaForDocument: ActivityResultLauncher<Array<String>>? = null
|
||||
var mMediaType = IMG
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.activity_photo_pick)
|
||||
// setContentView(R.layout.activity_photo_pick)
|
||||
window?.setDimAmount(0f)
|
||||
mMediaType = intent?.getStringExtra(PICK_ACT_TYPE) ?: IMG
|
||||
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
||||
if (uri != null) {
|
||||
val intent = Intent()
|
||||
intent.setData(uri)
|
||||
setResult(RESULT_OK, intent)
|
||||
// 接收方 用 intent.data 来获取
|
||||
finish()
|
||||
} else {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
pickMediaForDocument = registerForActivityResult(ActivityResultContracts.OpenDocument()) {
|
||||
if (it != null) {
|
||||
val intent = Intent()
|
||||
intent.setData(it)
|
||||
setResult(RESULT_OK, intent)
|
||||
}
|
||||
finish()
|
||||
}
|
||||
|
||||
|
||||
checkStoragePermission()
|
||||
}
|
||||
|
||||
|
||||
private fun checkStoragePermission() {
|
||||
if (Build.VERSION.SDK_INT >= 29) {
|
||||
DialogUtil.getDialog(this, object : EasyAlertDialogHelper.OnDialogActionListener {
|
||||
override fun doCancelAction() {
|
||||
finish()
|
||||
}
|
||||
|
||||
override fun doOkAction() {
|
||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img, true)
|
||||
pickMedia?.launch(
|
||||
PickVisualMediaRequest(
|
||||
ActivityResultContracts.PickVisualMedia.SingleMimeType(
|
||||
mMediaType
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
if (!EasyPermissions.hasPermissions(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
PERMISSION_RESULT,
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
// val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
|
||||
// intent.setType("*/*")
|
||||
// intent.putExtra(Intent.EXTRA_MIME_TYPES,mMediaType)
|
||||
pickMediaForDocument?.launch(arrayOf(mMediaType))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
// super.onActivityResult(requestCode, resultCode, data)
|
||||
// if (requestCode == PICK_ACT_RESULT && resultCode == RESULT_OK) {
|
||||
// val uri = data?.data
|
||||
// if (uri != null) {
|
||||
// val intent = Intent()
|
||||
// intent.setData(uri)
|
||||
// setResult(RESULT_OK, intent)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
override fun onRequestPermissionsResult(
|
||||
requestCode: Int,
|
||||
permissions: Array<out String>,
|
||||
grantResults: IntArray
|
||||
) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
|
||||
}
|
||||
|
||||
override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_RESULT) {
|
||||
val requestTip = getString(R.string.permission_storage_denied)
|
||||
val mPrivacyDialog = CommonTipDialog(this)
|
||||
mPrivacyDialog.setTipMsg(requestTip)
|
||||
mPrivacyDialog.setOkText(getString(R.string.room_perform_go_update))
|
||||
mPrivacyDialog.setOnActionListener(
|
||||
object : CommonTipDialog.OnActionListener {
|
||||
override fun onOk() {
|
||||
//同意跳到应用详情页面
|
||||
val packageUri = Uri.parse("package:${packageName}")
|
||||
val intent =
|
||||
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, packageUri)
|
||||
startActivity(intent)
|
||||
finish()
|
||||
}
|
||||
|
||||
override fun onCancel() {
|
||||
super.onCancel()
|
||||
//取消跳到应用详情页面
|
||||
ToastUtils.show(getString(R.string.permission_storage_refused))
|
||||
finish()
|
||||
}
|
||||
}
|
||||
)
|
||||
mPrivacyDialog.show()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_RESULT) {
|
||||
checkStoragePermission()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@@ -17,9 +17,9 @@ import com.chwl.app.UIHelper
|
||||
import com.chwl.app.application.IReportConstants
|
||||
import com.chwl.app.application.ReportManager
|
||||
import com.chwl.app.avroom.activity.AVRoomActivity
|
||||
import com.chwl.app.avroom.dialog.RoomBoomRewardDialog
|
||||
import com.chwl.app.base.BaseActivity
|
||||
import com.chwl.app.base.BaseFragment
|
||||
import com.chwl.app.base.PhotoPickActivity
|
||||
import com.chwl.app.databinding.FragmentMeBinding
|
||||
import com.chwl.app.home.HomeViewModel
|
||||
import com.chwl.app.home.MeViewModel
|
||||
@@ -33,18 +33,13 @@ import com.chwl.app.support.FragmentVisibleStateHelper
|
||||
import com.chwl.app.ui.im.RouterHandler
|
||||
import com.chwl.app.ui.relation.AttentionListActivity
|
||||
import com.chwl.app.ui.relation.FansListActivity
|
||||
import com.chwl.app.ui.setting.VipSetActivity
|
||||
import com.chwl.app.ui.utils.ImageLoadUtils
|
||||
import com.chwl.app.ui.wallet.WalletActivity
|
||||
import com.chwl.app.ui.webview.CommonWebViewActivity
|
||||
import com.chwl.app.ui.widget.UserInfoDialog
|
||||
import com.chwl.app.view.GenderAgeTextView
|
||||
import com.chwl.app.vip.VipCenterActivity
|
||||
import com.chwl.app.vip.VipSettingActivity
|
||||
import com.chwl.app.vip.VipViewModel
|
||||
import com.chwl.app.vip.dialog.VipUpgradeDialog
|
||||
import com.chwl.core.auth.AuthModel
|
||||
import com.chwl.core.gift.bean.BoomMsgAwardBean
|
||||
import com.chwl.core.initial.InitialModel
|
||||
import com.chwl.core.level.UserLevelVo
|
||||
import com.chwl.core.manager.IMNetEaseManager
|
||||
@@ -61,13 +56,11 @@ import com.chwl.core.user.UserModel
|
||||
import com.chwl.core.user.bean.UserInfo
|
||||
import com.chwl.core.user.event.LoginUserInfoUpdateEvent
|
||||
import com.chwl.core.utils.CoreLogger
|
||||
import com.chwl.core.utils.WLog
|
||||
import com.chwl.core.vip.bean.VipInfo
|
||||
import com.example.lib_utils.ktx.singleClick
|
||||
import org.greenrobot.eventbus.EventBus
|
||||
import org.greenrobot.eventbus.Subscribe
|
||||
import org.greenrobot.eventbus.ThreadMode
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
* @description: 我的 界面
|
||||
@@ -208,7 +201,8 @@ class MeFragment : BaseFragment(), View.OnClickListener {
|
||||
if (diamondList?.contains(userInfo.erbanNo) == true
|
||||
|| giftList?.contains(userInfo.erbanNo) == true
|
||||
|| levelSep >= (initInfo?.giveDiamondExperLevel ?: 0)
|
||||
|| levelSep >= (initInfo?.giveGiftExperLevel ?: 0)) {
|
||||
|| levelSep >= (initInfo?.giveGiftExperLevel ?: 0)
|
||||
) {
|
||||
meViewModel.updateDonationMenuVisible(true)
|
||||
} else {
|
||||
meViewModel.updateDonationMenuVisible(false)
|
||||
@@ -377,7 +371,7 @@ class MeFragment : BaseFragment(), View.OnClickListener {
|
||||
R.id.tv_user_name -> {
|
||||
//todo do 测试按钮
|
||||
if (BuildConfig.DEBUG) {
|
||||
VipSetActivity.start(requireActivity());
|
||||
PhotoPickActivity.start(requireActivity(), PhotoPickActivity.GIF)
|
||||
}
|
||||
}
|
||||
|
||||
|
@@ -16,6 +16,7 @@ import com.example.lib_utils.ktx.getColorById
|
||||
import com.example.lib_utils.ktx.singleClick
|
||||
import com.example.lib_utils.spannable.SpannableTextBuilder
|
||||
|
||||
//todo do VIP 送礼飘屏
|
||||
class GiftNotify(context: Context) : BaseFloatView(context) {
|
||||
private val view = TextView(context)
|
||||
|
||||
|
@@ -1,37 +1,24 @@
|
||||
package com.chwl.app.ui.feedback
|
||||
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.widget.ImageView.ScaleType
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.PickVisualMediaRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.activity.viewModels
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.lifecycle.repeatOnLifecycle
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.base.BaseViewBindingActivity
|
||||
import com.chwl.app.base.PhotoPickActivity
|
||||
import com.chwl.app.databinding.FeedbackActivityBinding
|
||||
import com.chwl.app.ui.utils.load
|
||||
import com.chwl.app.ui.widget.dialog.CommonTipDialog
|
||||
import com.chwl.core.file.FileModel
|
||||
import com.chwl.core.home.bean.FeedbackTypeBean
|
||||
import com.chwl.core.utils.DialogUtil
|
||||
import com.chwl.core.utils.MyUriUtils
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.photo.PhotoProvider.photoProvider
|
||||
import com.chwl.library.common.util.PhotoCompressUtil
|
||||
import com.chwl.library.common.util.PhotosCompressCallback
|
||||
import com.chwl.library.common.util.SPUtils
|
||||
import com.chwl.library.constants.ConstantsLib
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
import com.chwl.library.easyphoto.utils.settings.SettingsUtils
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.chwl.library.utils.SingleToastUtil
|
||||
import com.example.lib_utils.SolveEditTextScrollClash
|
||||
import com.example.lib_utils.ktx.getColorById
|
||||
import com.example.lib_utils.ktx.setOnInputChangedListener
|
||||
@@ -43,13 +30,11 @@ import com.google.android.flexbox.FlexboxLayoutManager
|
||||
import com.google.android.flexbox.JustifyContent
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.netease.nim.uikit.StatusBarUtil
|
||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.flow.collectLatest
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>(),
|
||||
EasyPermissions.PermissionCallbacks {
|
||||
class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>() {
|
||||
|
||||
private val PERMISSION_CODE_STORAGE = 12
|
||||
private val REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111 // 从相册中选择
|
||||
@@ -61,21 +46,11 @@ class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>(),
|
||||
private var imagePath: String? = null
|
||||
private var imageUrl: String? = null
|
||||
|
||||
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
}
|
||||
|
||||
//todo do photoPick
|
||||
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
||||
uri?.let {
|
||||
val file = MyUriUtils.copyFile(this,uri)
|
||||
if (file != null) {
|
||||
compressPhotos(mutableListOf(file.path))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
override fun init() {
|
||||
initWhiteTitleBar(ResUtil.getString(R.string.feedback_title))
|
||||
initView()
|
||||
@@ -243,81 +218,27 @@ class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>(),
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private fun uploadImage(path: String, success: (String) -> Unit, failed: (Throwable?) -> Unit) {
|
||||
FileModel.get()
|
||||
.uploadFile(path)
|
||||
.compose(bindToLifecycle())
|
||||
.subscribe { url: String?, throwable: Throwable? ->
|
||||
if (url != null) {
|
||||
success.invoke(url)
|
||||
} else {
|
||||
failed.invoke(throwable)
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkStoragePermission() {
|
||||
PhotoPickActivity.start(this, PhotoPickActivity.IMG)
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
if (resultCode == RESULT_OK) {
|
||||
if (requestCode == REQUEST_CODE_OPEN_PHOTO_PROVIDER) {
|
||||
if (requestCode == PhotoPickActivity.PICK_ACT_RESULT) {
|
||||
if (data == null) {
|
||||
return
|
||||
}
|
||||
PhotoProvider.getResultPathListAsync(data) { list ->
|
||||
if (list.isNullOrEmpty()) {
|
||||
SingleToastUtil.showToastShort(com.netease.nim.uikit.R.string.picker_image_error)
|
||||
return@getResultPathListAsync
|
||||
}
|
||||
val paths = list.map { it.path }.toMutableList()
|
||||
compressPhotos(paths)
|
||||
val uri = data.data
|
||||
uri?.let {
|
||||
val file = MyUriUtils.copyFile(this, uri)
|
||||
if (file != null) {
|
||||
compressPhotos(mutableListOf(file.path))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(
|
||||
requestCode: Int,
|
||||
permissions: Array<String?>,
|
||||
grantResults: IntArray
|
||||
) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
|
||||
}
|
||||
|
||||
private fun checkStoragePermission() {
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 29){
|
||||
DialogUtil.getDialog(this,object : EasyAlertDialogHelper.OnDialogActionListener {
|
||||
override fun doCancelAction() {
|
||||
}
|
||||
|
||||
override fun doOkAction() {
|
||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
|
||||
pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
|
||||
}
|
||||
})
|
||||
}else{
|
||||
if (!EasyPermissions.hasPermissions(
|
||||
this,Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
PERMISSION_CODE_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
photoProvider(
|
||||
this,
|
||||
1,
|
||||
true,
|
||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER,
|
||||
true,
|
||||
true
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun compressPhotos(paths: MutableList<String>) {
|
||||
@@ -338,6 +259,20 @@ class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>(),
|
||||
)
|
||||
}
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
private fun uploadImage(path: String, success: (String) -> Unit, failed: (Throwable?) -> Unit) {
|
||||
FileModel.get()
|
||||
.uploadFile(path)
|
||||
.compose(bindToLifecycle())
|
||||
.subscribe { url: String?, throwable: Throwable? ->
|
||||
if (url != null) {
|
||||
success.invoke(url)
|
||||
} else {
|
||||
failed.invoke(throwable)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun needSteepStateBar(): Boolean {
|
||||
return true
|
||||
}
|
||||
@@ -348,36 +283,6 @@ class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>(),
|
||||
StatusBarUtil.StatusBarLightMode(this)
|
||||
}
|
||||
|
||||
override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_CODE_STORAGE) {
|
||||
checkStoragePermission()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_CODE_STORAGE) {
|
||||
val requestTip = getString(R.string.permission_storage_denied)
|
||||
val mPrivacyDialog = CommonTipDialog(context)
|
||||
mPrivacyDialog.setTipMsg(requestTip)
|
||||
mPrivacyDialog.setOkText(getString(R.string.room_perform_go_update))
|
||||
mPrivacyDialog.setOnActionListener(object : CommonTipDialog.OnActionListener {
|
||||
override fun onOk() {
|
||||
//同意跳到应用详情页面
|
||||
SettingsUtils.startMyApplicationDetailsForResult(
|
||||
this@FeedbackActivity,
|
||||
packageName
|
||||
)
|
||||
}
|
||||
|
||||
override fun onCancel() {
|
||||
super.onCancel()
|
||||
//取消跳到应用详情页面
|
||||
ToastUtils.show(getString(R.string.permission_storage_refused))
|
||||
}
|
||||
})
|
||||
mPrivacyDialog.show()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
@@ -1,25 +1,20 @@
|
||||
package com.chwl.app.ui.user.activity
|
||||
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.graphics.Bitmap
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.text.TextUtils
|
||||
import android.view.View
|
||||
import android.widget.ImageView
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.PickVisualMediaRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.UIHelper
|
||||
import com.chwl.app.application.App
|
||||
import com.chwl.app.base.BaseViewBindingActivity
|
||||
import com.chwl.app.base.PhotoPickActivity
|
||||
import com.chwl.app.common.util.BitmapUtil
|
||||
import com.chwl.app.constants.UserInfoConstants
|
||||
import com.chwl.app.databinding.ActivityUserInfoModifyBinding
|
||||
@@ -29,7 +24,6 @@ import com.chwl.app.ui.user.adapter.UserPhotoAdapter.ImageClickListener
|
||||
import com.chwl.app.ui.user.dialog.UserAreaDialog
|
||||
import com.chwl.app.ui.utils.ImageLoadUtils
|
||||
import com.chwl.app.ui.widget.ButtonItem
|
||||
import com.chwl.app.ui.widget.dialog.CommonTipDialog
|
||||
import com.chwl.app.utils.RegexUtil
|
||||
import com.chwl.app.vip.util.VipHelper
|
||||
import com.chwl.core.auth.AuthModel
|
||||
@@ -39,22 +33,16 @@ import com.chwl.core.user.bean.RegionInfoBean
|
||||
import com.chwl.core.user.bean.UserInfo
|
||||
import com.chwl.core.user.bean.UserPhoto
|
||||
import com.chwl.core.utils.CoreLogger
|
||||
import com.chwl.core.utils.DialogUtil
|
||||
import com.chwl.core.utils.MyUriUtils
|
||||
import com.chwl.library.common.file.FileHelper
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.util.PhotoCompressCallback
|
||||
import com.chwl.library.common.util.PhotoCompressUtil
|
||||
import com.chwl.library.common.util.SPUtils
|
||||
import com.chwl.library.constants.ConstantsLib
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.chwl.library.utils.TimeUtils
|
||||
import com.example.lib_utils.ktx.getString
|
||||
import com.fourmob.datetimepicker.date.DatePickerDialog
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.netease.nim.uikit.StatusBarUtil
|
||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
||||
import com.netease.nim.uikit.common.util.sys.TimeUtil
|
||||
import com.sleepbot.datetimepicker.time.RadialPickerLayout
|
||||
import com.sleepbot.datetimepicker.time.TimePickerDialog
|
||||
@@ -76,8 +64,7 @@ import java.util.concurrent.TimeUnit
|
||||
*/
|
||||
class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBinding>(),
|
||||
View.OnClickListener,
|
||||
TimePickerDialog.OnTimeSetListener, DatePickerDialog.OnDateSetListener, ImageClickListener,
|
||||
EasyPermissions.PermissionCallbacks {
|
||||
TimePickerDialog.OnTimeSetListener, DatePickerDialog.OnDateSetListener, ImageClickListener {
|
||||
private var datePickerDialog: DatePickerDialog? = null
|
||||
private var mUserInfo: UserInfo? = null
|
||||
private var userId: Long = 0
|
||||
@@ -108,32 +95,11 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
userId = intent.getLongExtra("userId", 0)
|
||||
}
|
||||
|
||||
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
UserModel.get().getUserInfo(userId).subscribe(userInfoUpdateObserver)
|
||||
PhotoCompressUtil.clearCompressCache()
|
||||
|
||||
//todo do photoPick
|
||||
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
||||
if (uri != null) {
|
||||
mUri?.let {
|
||||
if (isGif) {
|
||||
if (MyUriUtils.isGif(context, uri)){
|
||||
val isCopy = MyUriUtils.copyFileToUrl(this,uri, it)
|
||||
if (isCopy) {
|
||||
onActivityResult(UCrop.REQUEST_CROP,RESULT_OK,null)
|
||||
}
|
||||
}else{
|
||||
ToastUtils.show(R.string.error_file_type)
|
||||
}
|
||||
} else {
|
||||
crop(uri, 1, it)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
override fun click(position: Int, userPhoto: UserPhoto, isOwner: Boolean) {
|
||||
@@ -146,7 +112,10 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
|
||||
private fun initData(userInfo: UserInfo?) {
|
||||
if (null != userInfo) {
|
||||
ImageLoadUtils.loadAvatar(if (!TextUtils.isEmpty(userInfo.newAvatar)) userInfo.newAvatar else userInfo.avatar, binding.civAvatar)
|
||||
ImageLoadUtils.loadAvatar(
|
||||
if (!TextUtils.isEmpty(userInfo.newAvatar)) userInfo.newAvatar else userInfo.avatar,
|
||||
binding.civAvatar
|
||||
)
|
||||
binding.tvAvatarAuditing.visibility = if (userInfo.isReview) View.VISIBLE else View.GONE
|
||||
binding.ivAvatarAuditing.visibility = if (userInfo.isReview) View.VISIBLE else View.GONE
|
||||
val birth = TimeUtil.getChinaDateTimeString(userInfo.birth, "yyyy-MM-dd")
|
||||
@@ -259,6 +228,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
}
|
||||
selectAvatarType()
|
||||
}
|
||||
|
||||
R.id.tv_birth -> {
|
||||
if (mUserInfo != null) {
|
||||
var year = TimeUtils.getYear(
|
||||
@@ -283,21 +253,25 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
show(supportFragmentManager, "DATEPICKER_TAG_1")
|
||||
}
|
||||
}
|
||||
|
||||
R.id.tv_nick -> UIHelper.showModifyInfoAct(
|
||||
this@UserInfoModifyActivity,
|
||||
Method.NICK,
|
||||
ModifyInfoActivity.NICK_MODIFY
|
||||
)
|
||||
|
||||
R.id.ll_desc -> UIHelper.showModifyInfoAct(
|
||||
this@UserInfoModifyActivity,
|
||||
Method.DESC,
|
||||
ModifyInfoActivity.CONTENT_MODIFY
|
||||
)
|
||||
|
||||
R.id.layout_photos -> UserModifyPhotosActivity.startForResult(
|
||||
this@UserInfoModifyActivity,
|
||||
userId,
|
||||
Method.PHOTO
|
||||
)
|
||||
|
||||
R.id.layout_area -> {
|
||||
dialogManager.showProgressDialog(
|
||||
this@UserInfoModifyActivity,
|
||||
@@ -332,6 +306,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
R.id.swCpAnim -> {
|
||||
postUpDateCpSwitch(binding.swCpAnim, UserInfoConstants.CpSet.cpAnim)
|
||||
}
|
||||
@@ -339,6 +314,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
R.id.swCpShow -> {
|
||||
postUpDateCpSwitch(binding.swCpShow, UserInfoConstants.CpSet.cpAvatar)
|
||||
}
|
||||
|
||||
else -> {}
|
||||
}
|
||||
}
|
||||
@@ -389,50 +365,6 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
})
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(
|
||||
requestCode: Int, permissions: Array<out String>, grantResults: IntArray
|
||||
) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
|
||||
}
|
||||
|
||||
override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_CODE_STORAGE) {
|
||||
checkStoragePermission()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_CODE_STORAGE) {
|
||||
val requestTip = getString(R.string.permission_storage_denied)
|
||||
val mPrivacyDialog = CommonTipDialog(context)
|
||||
mPrivacyDialog.setTipMsg(requestTip)
|
||||
mPrivacyDialog.setOkText(getString(R.string.room_perform_go_update))
|
||||
mPrivacyDialog.setOnActionListener(
|
||||
object : CommonTipDialog.OnActionListener {
|
||||
override fun onOk() {
|
||||
//同意跳到应用详情页面
|
||||
val packageUri =
|
||||
Uri.parse("package:${packageName}")
|
||||
val intent = Intent(
|
||||
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
||||
packageUri
|
||||
)
|
||||
startActivityForResult(
|
||||
intent, REQUEST_CODE_STORAGE
|
||||
)
|
||||
}
|
||||
|
||||
override fun onCancel() {
|
||||
super.onCancel()
|
||||
//取消跳到应用详情页面
|
||||
ToastUtils.show(getString(R.string.permission_storage_refused))
|
||||
}
|
||||
}
|
||||
)
|
||||
mPrivacyDialog.show()
|
||||
}
|
||||
}
|
||||
|
||||
private fun selectAvatarType() {
|
||||
val list = ArrayList<ButtonItem>()
|
||||
@@ -457,31 +389,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
}
|
||||
|
||||
private fun checkStoragePermission() {
|
||||
|
||||
val fileWith = if (isGif)".gif" else ".jpg"
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 29){
|
||||
DialogUtil.getDialog(this,object : EasyAlertDialogHelper.OnDialogActionListener {
|
||||
override fun doCancelAction() {
|
||||
}
|
||||
|
||||
override fun doOkAction() {
|
||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
|
||||
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}$fileWith")
|
||||
val type = if (isGif) ActivityResultContracts.PickVisualMedia.SingleMimeType("image/gif") else ActivityResultContracts.PickVisualMedia.ImageOnly
|
||||
pickMedia?.launch(PickVisualMediaRequest(type))
|
||||
}
|
||||
})
|
||||
}else{
|
||||
if (!EasyPermissions.hasPermissions(this,Manifest.permission.READ_EXTERNAL_STORAGE)) {
|
||||
EasyPermissions.requestPermissions(this, getString(R.string.permission_storage_rationale), PERMISSION_CODE_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}$fileWith")
|
||||
PhotoProvider.photoProvider(this, resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER, canChooseGif = isGif)
|
||||
}
|
||||
}
|
||||
|
||||
PhotoPickActivity.start(this, if (isGif) PhotoPickActivity.GIF else PhotoPickActivity.IMG)
|
||||
}
|
||||
|
||||
private fun getNowTime(): String {
|
||||
@@ -492,9 +400,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
if (requestCode == REQUEST_CODE_STORAGE) {
|
||||
checkStoragePermission()
|
||||
} else if (resultCode == RESULT_OK) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
when (requestCode) {
|
||||
Method.NICK -> {
|
||||
data?.let {
|
||||
@@ -511,6 +417,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
.subscribe(userInfoUpdateObserver)
|
||||
}
|
||||
}
|
||||
|
||||
Method.DESC -> {
|
||||
data?.let {
|
||||
dialogManager.showProgressDialog(
|
||||
@@ -526,6 +433,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
.subscribe(userInfoUpdateObserver)
|
||||
}
|
||||
}
|
||||
|
||||
Method.PHOTO -> {
|
||||
data?.let {
|
||||
val isChanged =
|
||||
@@ -534,29 +442,32 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
||||
.subscribe(userInfoUpdateObserver)
|
||||
}
|
||||
}
|
||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER -> data?.let {
|
||||
val photos = PhotoProvider.getResultPhotoList(it)
|
||||
if (!photos.isNullOrEmpty()) {
|
||||
val photo = photos[0]
|
||||
|
||||
PhotoPickActivity.PICK_ACT_RESULT -> {
|
||||
val uri = data?.data
|
||||
if (uri != null) {
|
||||
val fileWith = if (isGif) ".gif" else ".jpg"
|
||||
mUri =
|
||||
Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}$fileWith")
|
||||
if (isGif) {
|
||||
mUri?.let {
|
||||
if (MyUriUtils.isGif(context,photo.uri)){
|
||||
val isCopy = MyUriUtils.copyFileToUrl(this,photo.uri, it)
|
||||
if (MyUriUtils.isGif(context, uri)) {
|
||||
val isCopy = MyUriUtils.copyFileToUrl(this, uri, mUri!!)
|
||||
if (isCopy) {
|
||||
onActivityResult(UCrop.REQUEST_CROP, RESULT_OK, null)
|
||||
}
|
||||
} else {
|
||||
ToastUtils.show(R.string.error_file_type)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
crop(photo.uri, photo.size, mUri)
|
||||
val copyFileToUrl = MyUriUtils.copyFileToUrl(this, uri, mUri!!)
|
||||
if (copyFileToUrl) {
|
||||
crop(mUri, 1, mUri)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
toast(R.string.empty_data)
|
||||
}
|
||||
}
|
||||
|
||||
UCrop.REQUEST_CROP -> mUri?.path?.let {
|
||||
try {
|
||||
mJob?.cancel()
|
||||
|
@@ -1,59 +1,46 @@
|
||||
package com.chwl.app.ui.user.activity
|
||||
|
||||
import android.Manifest
|
||||
import android.annotation.SuppressLint
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.graphics.Bitmap
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.view.View
|
||||
import android.widget.GridView
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.PickVisualMediaRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.core.content.ContextCompat
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.jph.takephoto.app.TakePhotoActivity
|
||||
import com.netease.nim.uikit.StatusBarUtil
|
||||
import com.orhanobut.logger.Logger
|
||||
import com.trello.rxlifecycle3.android.ActivityEvent
|
||||
import com.yalantis.ucrop.UCrop
|
||||
import com.chwl.app.R
|
||||
import com.chwl.app.application.App
|
||||
import com.chwl.app.base.PhotoPickActivity
|
||||
import com.chwl.app.base.TitleBar
|
||||
import com.chwl.app.common.util.BitmapUtil
|
||||
import com.chwl.app.ui.user.adapter.UserModifyPhotosAdapter
|
||||
import com.chwl.app.ui.user.adapter.UserModifyPhotosAdapter.PhotoItemClickListener
|
||||
import com.chwl.app.ui.widget.dialog.CommonTipDialog
|
||||
import com.chwl.core.file.FileModel
|
||||
import com.chwl.core.user.UserModel
|
||||
import com.chwl.core.user.bean.UserInfo
|
||||
import com.chwl.core.user.bean.UserPhoto
|
||||
import com.chwl.core.utils.CoreLogger
|
||||
import com.chwl.core.utils.DialogUtil
|
||||
import com.chwl.core.utils.MyUriUtils
|
||||
import com.chwl.core.utils.net.BeanObserver
|
||||
import com.chwl.library.common.file.FileHelper
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.util.PhotoCompressCallback
|
||||
import com.chwl.library.common.util.PhotoCompressUtil
|
||||
import com.chwl.library.common.util.SPUtils
|
||||
import com.chwl.library.constants.ConstantsLib
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
||||
import com.jph.takephoto.app.TakePhotoActivity
|
||||
import com.netease.nim.uikit.StatusBarUtil
|
||||
import com.orhanobut.logger.Logger
|
||||
import com.trello.rxlifecycle3.android.ActivityEvent
|
||||
import com.yalantis.ucrop.UCrop
|
||||
import kotlinx.coroutines.Job
|
||||
import java.io.FileNotFoundException
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.*
|
||||
import java.util.Date
|
||||
|
||||
/**
|
||||
* Created by chenran on 2017/7/24.
|
||||
*/
|
||||
class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
||||
EasyPermissions.PermissionCallbacks {
|
||||
class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener {
|
||||
private var userId: Long = 0
|
||||
private var userInfo: UserInfo? = null
|
||||
private var photoGridView: GridView? = null
|
||||
@@ -64,7 +51,6 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
||||
private var mUri: Uri? = null
|
||||
private var mJob: Job? = null
|
||||
|
||||
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
|
||||
|
||||
companion object {
|
||||
const val FLAG_CHANGE = "isChanged"
|
||||
@@ -104,14 +90,6 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
||||
if (userInfo != null) {
|
||||
updateView()
|
||||
}
|
||||
|
||||
//todo do photoPick
|
||||
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
||||
uri?.let {
|
||||
crop(it, 0, mUri)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private fun initView() {
|
||||
@@ -190,84 +168,8 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
||||
}
|
||||
}
|
||||
|
||||
override fun onRequestPermissionsResult(
|
||||
requestCode: Int, permissions: Array<out String>, grantResults: IntArray
|
||||
) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
|
||||
}
|
||||
|
||||
override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_CODE_STORAGE) {
|
||||
checkStoragePermission()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_CODE_STORAGE) {
|
||||
val requestTip = getString(R.string.permission_storage_denied)
|
||||
val mPrivacyDialog = CommonTipDialog(context)
|
||||
mPrivacyDialog.setTipMsg(requestTip)
|
||||
mPrivacyDialog.setOkText(getString(R.string.room_perform_go_update))
|
||||
mPrivacyDialog.setOnActionListener(
|
||||
object : CommonTipDialog.OnActionListener {
|
||||
override fun onOk() {
|
||||
//同意跳到应用详情页面
|
||||
val packageUri =
|
||||
Uri.parse("package:${packageName}")
|
||||
val intent = Intent(
|
||||
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
||||
packageUri
|
||||
)
|
||||
startActivityForResult(
|
||||
intent, REQUEST_CODE_STORAGE
|
||||
)
|
||||
}
|
||||
|
||||
override fun onCancel() {
|
||||
super.onCancel()
|
||||
//取消跳到应用详情页面
|
||||
ToastUtils.show(getString(R.string.permission_storage_refused))
|
||||
}
|
||||
}
|
||||
)
|
||||
mPrivacyDialog.show()
|
||||
}
|
||||
}
|
||||
|
||||
private fun checkStoragePermission() {
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 29){
|
||||
DialogUtil.getDialog(this,object : EasyAlertDialogHelper.OnDialogActionListener {
|
||||
override fun doCancelAction() {
|
||||
}
|
||||
|
||||
override fun doOkAction() {
|
||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
|
||||
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
|
||||
pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
|
||||
}
|
||||
})
|
||||
}else{
|
||||
if (!EasyPermissions.hasPermissions(
|
||||
this, Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
PERMISSION_CODE_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
|
||||
PhotoProvider.photoProvider(
|
||||
this,
|
||||
resultCode = REQUEST_CODE_OPEN_PHOTO_PROVIDER
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
PhotoPickActivity.start(this@UserModifyPhotosActivity, PhotoPickActivity.IMG)
|
||||
}
|
||||
|
||||
private fun getNowTime(): String {
|
||||
@@ -278,17 +180,20 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
super.onActivityResult(requestCode, resultCode, data)
|
||||
if (requestCode == REQUEST_CODE_STORAGE) {
|
||||
checkStoragePermission()
|
||||
} else if (resultCode == RESULT_OK) {
|
||||
if (resultCode == RESULT_OK) {
|
||||
when (requestCode) {
|
||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER -> data?.let {
|
||||
val photos = PhotoProvider.getResultPhotoList(data) ?: return
|
||||
if (photos.isNotEmpty()) {
|
||||
val photo = photos[0]
|
||||
crop(photo.uri, photo.size, mUri)
|
||||
|
||||
PhotoPickActivity.PICK_ACT_RESULT -> data?.data?.let { uri ->
|
||||
mUri =
|
||||
Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
|
||||
val isCopy =
|
||||
MyUriUtils.copyFileToUrl(this@UserModifyPhotosActivity, uri, mUri!!)
|
||||
if (isCopy) {
|
||||
crop(mUri, 0, mUri)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
UCrop.REQUEST_CROP -> mUri?.path?.let {
|
||||
try {
|
||||
mJob?.cancel()
|
||||
|
@@ -1,13 +1,8 @@
|
||||
|
||||
package com.chwl.app.community.publish.view;
|
||||
|
||||
import static androidx.core.content.ContentProviderCompat.requireContext;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.text.Editable;
|
||||
import android.text.TextUtils;
|
||||
@@ -21,37 +16,19 @@ import android.widget.LinearLayout;
|
||||
import android.widget.RelativeLayout;
|
||||
import android.widget.TextView;
|
||||
|
||||
import androidx.activity.result.ActivityResultCallback;
|
||||
import androidx.activity.result.ActivityResultLauncher;
|
||||
import androidx.activity.result.PickVisualMediaRequest;
|
||||
import androidx.activity.result.contract.ActivityResultContracts;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.core.app.ActivityOptionsCompat;
|
||||
import androidx.recyclerview.widget.GridLayoutManager;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.chwl.app.photo.BigPhotoActivity;
|
||||
import com.chwl.app.photo.PagerOption;
|
||||
import com.chwl.core.utils.CoreTextUtils;
|
||||
import com.chwl.core.utils.DialogUtil;
|
||||
import com.chwl.core.utils.MyUriUtils;
|
||||
import com.chwl.library.common.util.SPUtils;
|
||||
import com.chwl.library.constants.ConstantsLib;
|
||||
import com.example.matisse.Matisse;
|
||||
import com.google.android.flexbox.FlexboxLayout;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.netease.nim.uikit.StatusBarUtil;
|
||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper;
|
||||
import com.netease.nim.uikit.common.util.log.LogUtil;
|
||||
import com.trello.rxlifecycle3.android.ActivityEvent;
|
||||
import com.chwl.app.R;
|
||||
import com.chwl.app.base.BaseMvpActivity;
|
||||
import com.chwl.app.base.PhotoPickActivity;
|
||||
import com.chwl.app.common.widget.dialog.DialogManager;
|
||||
import com.chwl.app.community.ConstantValue;
|
||||
import com.chwl.app.community.publish.ImageAdapter;
|
||||
import com.chwl.app.community.publish.presenter.PublishPresenter;
|
||||
import com.chwl.app.community.utils.ObjectTypeHelper;
|
||||
import com.chwl.app.ui.widget.dialog.CommonTipDialog;
|
||||
import com.chwl.app.photo.BigPhotoActivity;
|
||||
import com.chwl.app.photo.PagerOption;
|
||||
import com.chwl.app.ui.widget.recyclerview.decoration.GridSpacingItemDecoration;
|
||||
import com.chwl.core.Constants;
|
||||
import com.chwl.core.auth.AuthModel;
|
||||
@@ -60,18 +37,21 @@ import com.chwl.core.community.bean.PublishItem;
|
||||
import com.chwl.core.miniworld.model.MiniWorldModel;
|
||||
import com.chwl.core.user.UserModel;
|
||||
import com.chwl.core.user.bean.UserInfo;
|
||||
import com.chwl.core.utils.CoreTextUtils;
|
||||
import com.chwl.core.utils.MyUriUtils;
|
||||
import com.chwl.core.utils.SharedPreferenceUtils;
|
||||
import com.chwl.core.utils.net.DontWarnObserver;
|
||||
import com.chwl.library.base.factory.CreatePresenter;
|
||||
import com.chwl.library.common.photo.PhotoProvider;
|
||||
import com.chwl.library.common.util.PhotoCompressUtil;
|
||||
import com.chwl.library.common.util.PhotosCompressCallback;
|
||||
import com.chwl.library.easypermisssion.EasyPermissions;
|
||||
import com.chwl.library.easyphoto.models.album.entity.Photo;
|
||||
import com.chwl.library.easyphoto.utils.settings.SettingsUtils;
|
||||
import com.chwl.library.utils.ResUtil;
|
||||
import com.chwl.library.utils.SingleToastUtil;
|
||||
import com.example.matisse.internal.entity.CustomItem;
|
||||
import com.google.android.flexbox.FlexboxLayout;
|
||||
import com.hjq.toast.ToastUtils;
|
||||
import com.netease.nim.uikit.StatusBarUtil;
|
||||
import com.netease.nim.uikit.common.util.log.LogUtil;
|
||||
import com.trello.rxlifecycle3.android.ActivityEvent;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.ArrayList;
|
||||
@@ -80,8 +60,6 @@ import java.util.concurrent.TimeUnit;
|
||||
|
||||
import io.reactivex.Single;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import kotlin.Unit;
|
||||
import kotlin.jvm.functions.Function1;
|
||||
import kotlinx.coroutines.Job;
|
||||
|
||||
/**
|
||||
@@ -89,7 +67,7 @@ import kotlinx.coroutines.Job;
|
||||
*/
|
||||
@CreatePresenter(PublishPresenter.class)
|
||||
public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresenter>
|
||||
implements IPublishView, WorldsChooseFrg.ChooseWorldCallback, EasyPermissions.PermissionCallbacks,
|
||||
implements IPublishView, WorldsChooseFrg.ChooseWorldCallback,
|
||||
View.OnClickListener {
|
||||
|
||||
private final static String KEY_SP_ORIGINAL_IMAGE = "key_sp_original_image";
|
||||
@@ -126,8 +104,6 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
|
||||
private Job mJob = null;
|
||||
|
||||
|
||||
private ActivityResultLauncher<PickVisualMediaRequest> pickMedia;
|
||||
|
||||
public static void start(DialogManager manager, long worldId) {
|
||||
if (beforeStart(manager)) {
|
||||
return;
|
||||
@@ -194,70 +170,6 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
|
||||
// }
|
||||
rlChooseGroup.setVisibility(View.GONE);
|
||||
flGroup.setVisibility(View.GONE);
|
||||
|
||||
//todo do photoPick
|
||||
pickMedia = registerForActivityResult(new ActivityResultContracts.PickVisualMedia(), new ActivityResultCallback<Uri>() {
|
||||
@Override
|
||||
public void onActivityResult(Uri uri) {
|
||||
if (uri != null && uri.getPath() != null){
|
||||
|
||||
if (MyUriUtils.INSTANCE.isGif(context, uri)) {
|
||||
ToastUtils.show(R.string.error_file_type);
|
||||
return;
|
||||
}
|
||||
|
||||
File file = MyUriUtils.INSTANCE.copyFile(PublishActivity.this, uri);
|
||||
if (file != null) {
|
||||
LogUtil.e("选择 file = "+file.getName());
|
||||
LogUtil.e("选择 file = "+file.getPath());
|
||||
|
||||
if (mJob != null) {
|
||||
mJob.cancel(null);
|
||||
}
|
||||
ArrayList<String> pathList = new ArrayList<>();
|
||||
pathList.add(file.getPath());
|
||||
|
||||
mJob = PhotoCompressUtil.compress(PublishActivity.this, pathList,
|
||||
PhotoCompressUtil.getCompressCachePath("publish")
|
||||
, new PhotosCompressCallback() {
|
||||
@Override
|
||||
public void onSuccess(@NonNull ArrayList<String> compressedImgList) {
|
||||
List<CustomItem> pathResult = new ArrayList<>();
|
||||
for (int i = 0; i < compressedImgList.size(); i++) {
|
||||
if (i < pathList.size()) {
|
||||
List<String> fileInfo = MyUriUtils.INSTANCE.getFileInfo(file);
|
||||
if (fileInfo != null) {
|
||||
pathResult.add(new CustomItem(compressedImgList.get(i), CustomItem.IMAGE_NORMAL, fileInfo.get(2), Integer.parseInt(fileInfo.get(0)), Integer.parseInt(fileInfo.get(1))));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (pathResult.size() == 0) {
|
||||
return;
|
||||
}
|
||||
LogUtil.print(pathResult);
|
||||
|
||||
uploadList.addAll(pathResult);
|
||||
updateImagesData();
|
||||
|
||||
isOriginalImage = false;
|
||||
LogUtil.print("isOriginalImage:" + isOriginalImage);
|
||||
SharedPreferenceUtils.put(KEY_SP_ORIGINAL_IMAGE, isOriginalImage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFail(@NonNull Throwable e) {
|
||||
toast(getString(R.string.picker_image_error));
|
||||
}
|
||||
}, 200, false, Constants.UPLOAD_IMAGE_MAX_SIZE, Constants.UPLOAD_IMAGE_MAX_FILE_LENGTH);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
private void findView() {
|
||||
@@ -395,102 +307,6 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == REQUEST_CODE_STORAGE) {
|
||||
checkStoragePermission();
|
||||
} else if (resultCode == RESULT_OK) {
|
||||
switch (requestCode) {
|
||||
case REQUEST_CODE_OPEN_PHOTO_PROVIDER:
|
||||
if (data == null) {
|
||||
return;
|
||||
}
|
||||
PhotoProvider.getResultPathListAsync(data, new Function1<List<? extends Photo>, Unit>() {
|
||||
@Override
|
||||
public Unit invoke(List<? extends Photo> list) {
|
||||
if (list.isEmpty()) {
|
||||
return null;
|
||||
} else {
|
||||
if (mJob != null) {
|
||||
mJob.cancel(null);
|
||||
}
|
||||
ArrayList<String> pathList = new ArrayList<>();
|
||||
for (Photo photo : list) {
|
||||
pathList.add(photo.path);
|
||||
}
|
||||
mJob = PhotoCompressUtil.compress(PublishActivity.this, pathList,
|
||||
PhotoCompressUtil.getCompressCachePath("publish")
|
||||
, new PhotosCompressCallback() {
|
||||
@Override
|
||||
public void onSuccess(@NonNull ArrayList<String> compressedImgList) {
|
||||
List<CustomItem> pathResult = new ArrayList<>();
|
||||
for (int i = 0; i < compressedImgList.size(); i++) {
|
||||
if (i < list.size()) {
|
||||
Photo photo = list.get(i);
|
||||
String format = "image/jpeg";
|
||||
if (photo.type != null) {
|
||||
format = photo.type;
|
||||
}
|
||||
pathResult.add(new CustomItem(compressedImgList.get(i), CustomItem.IMAGE_NORMAL, format, photo.width, photo.height));
|
||||
}
|
||||
}
|
||||
if (pathResult.size() == 0) {
|
||||
return;
|
||||
}
|
||||
LogUtil.print(pathResult);
|
||||
|
||||
uploadList.addAll(pathResult);
|
||||
updateImagesData();
|
||||
|
||||
isOriginalImage = false;
|
||||
LogUtil.print("isOriginalImage:" + isOriginalImage);
|
||||
SharedPreferenceUtils.put(KEY_SP_ORIGINAL_IMAGE, isOriginalImage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFail(@NonNull Throwable e) {
|
||||
toast(getString(R.string.picker_image_error));
|
||||
}
|
||||
}, 200, false, Constants.UPLOAD_IMAGE_MAX_SIZE, Constants.UPLOAD_IMAGE_MAX_FILE_LENGTH);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
});
|
||||
break;
|
||||
|
||||
case ConstantValue.CODE_CHOOSE_PHOTO:
|
||||
String mimeType = Matisse.obtainMineResult(data);
|
||||
List<CustomItem> pathResult = Matisse.obtainPathResult(data);
|
||||
if ("video".equals(mimeType)) {
|
||||
toast(ResUtil.getString(R.string.publish_view_publishactivity_04));
|
||||
return;
|
||||
}
|
||||
if (pathResult == null) {
|
||||
return;
|
||||
}
|
||||
LogUtil.print(pathResult);
|
||||
|
||||
uploadList.addAll(pathResult);
|
||||
updateImagesData();
|
||||
|
||||
isOriginalImage = Matisse.obtainOriginalImageResult(data);
|
||||
LogUtil.print("isOriginalImage:" + isOriginalImage);
|
||||
SharedPreferenceUtils.put(KEY_SP_ORIGINAL_IMAGE, isOriginalImage);
|
||||
|
||||
break;
|
||||
|
||||
case BigPhotoActivity.CODE_DELETE_PHOTO:
|
||||
List<CustomItem> newList = data.getParcelableArrayListExtra(
|
||||
BigPhotoActivity.KEY_IMG_URL);
|
||||
uploadList.clear();
|
||||
uploadList.addAll(newList);
|
||||
updateImagesData();
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPublishSuccess() {
|
||||
@@ -663,75 +479,79 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
|
||||
StatusBarUtil.StatusBarLightMode(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
|
||||
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
|
||||
if (requestCode == PERMISSION_CODE_STORAGE) {
|
||||
checkStoragePermission();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
|
||||
if (requestCode == PERMISSION_CODE_STORAGE) {
|
||||
String requestTip = getString(R.string.permission_storage_denied);
|
||||
CommonTipDialog mPrivacyDialog = new CommonTipDialog(context);
|
||||
mPrivacyDialog.setTipMsg(requestTip);
|
||||
mPrivacyDialog.setOkText(getString(R.string.room_perform_go_update));
|
||||
mPrivacyDialog.setOnActionListener(new CommonTipDialog.OnActionListener() {
|
||||
@Override
|
||||
public void onOk() {
|
||||
//同意跳到应用详情页面
|
||||
SettingsUtils.startMyApplicationDetailsForResult(PublishActivity.this,
|
||||
getPackageName());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCancel() {
|
||||
CommonTipDialog.OnActionListener.super.onCancel();
|
||||
//取消跳到应用详情页面
|
||||
ToastUtils.show(getString(R.string.permission_storage_refused));
|
||||
}
|
||||
});
|
||||
mPrivacyDialog.show();
|
||||
}
|
||||
}
|
||||
|
||||
private void checkStoragePermission() {
|
||||
PhotoPickActivity.start(this, PhotoPickActivity.IMG);
|
||||
}
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 29){
|
||||
if (pickMedia != null){
|
||||
DialogUtil.INSTANCE.getDialog(this,new EasyAlertDialogHelper.OnDialogActionListener() {
|
||||
@Override
|
||||
public void doCancelAction() {}
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (resultCode == RESULT_OK) {
|
||||
switch (requestCode) {
|
||||
case PhotoPickActivity.PICK_ACT_RESULT:
|
||||
if (data == null) {
|
||||
return;
|
||||
}
|
||||
Uri uri = data.getData();
|
||||
if (uri != null && uri.getPath() != null) {
|
||||
|
||||
if (MyUriUtils.INSTANCE.isGif(context, uri)) {
|
||||
ToastUtils.show(R.string.error_file_type);
|
||||
return;
|
||||
}
|
||||
|
||||
File file = MyUriUtils.INSTANCE.copyFile(PublishActivity.this, uri);
|
||||
if (file != null) {
|
||||
LogUtil.e("选择 file = " + file.getName());
|
||||
LogUtil.e("选择 file = " + file.getPath());
|
||||
|
||||
if (mJob != null) {
|
||||
mJob.cancel(null);
|
||||
}
|
||||
ArrayList<String> pathList = new ArrayList<>();
|
||||
pathList.add(file.getPath());
|
||||
|
||||
mJob = PhotoCompressUtil.compress(PublishActivity.this, pathList,
|
||||
PhotoCompressUtil.getCompressCachePath("publish")
|
||||
, new PhotosCompressCallback() {
|
||||
@Override
|
||||
public void doOkAction() {
|
||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true);
|
||||
pickMedia.launch(new PickVisualMediaRequest.Builder().setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE).build());
|
||||
public void onSuccess(@NonNull ArrayList<String> compressedImgList) {
|
||||
List<CustomItem> pathResult = new ArrayList<>();
|
||||
for (int i = 0; i < compressedImgList.size(); i++) {
|
||||
if (i < pathList.size()) {
|
||||
List<String> fileInfo = MyUriUtils.INSTANCE.getFileInfo(file);
|
||||
if (fileInfo != null) {
|
||||
pathResult.add(new CustomItem(compressedImgList.get(i), CustomItem.IMAGE_NORMAL, fileInfo.get(2), Integer.parseInt(fileInfo.get(0)), Integer.parseInt(fileInfo.get(1))));
|
||||
}
|
||||
});
|
||||
}
|
||||
}else{
|
||||
if (!EasyPermissions.hasPermissions(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.permission_storage_rationale),
|
||||
PERMISSION_CODE_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
);
|
||||
} else {
|
||||
PhotoProvider.photoProvider(
|
||||
this,
|
||||
maxSelect - uploadList.size(),
|
||||
true,
|
||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER,
|
||||
true,
|
||||
true
|
||||
);
|
||||
}
|
||||
if (pathResult.size() == 0) {
|
||||
return;
|
||||
}
|
||||
LogUtil.print(pathResult);
|
||||
|
||||
uploadList.addAll(pathResult);
|
||||
updateImagesData();
|
||||
|
||||
isOriginalImage = false;
|
||||
LogUtil.print("isOriginalImage:" + isOriginalImage);
|
||||
SharedPreferenceUtils.put(KEY_SP_ORIGINAL_IMAGE, isOriginalImage);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onFail(@NonNull Throwable e) {
|
||||
toast(getString(R.string.picker_image_error));
|
||||
}
|
||||
}, 200, false, Constants.UPLOAD_IMAGE_MAX_SIZE, Constants.UPLOAD_IMAGE_MAX_FILE_LENGTH);
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -5,12 +5,13 @@ import android.database.Cursor
|
||||
import android.graphics.BitmapFactory
|
||||
import android.net.Uri
|
||||
import android.provider.MediaStore
|
||||
import androidx.activity.result.ActivityResultCallback
|
||||
import android.provider.OpenableColumns
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
|
||||
object MyUriUtils {
|
||||
|
||||
|
||||
fun getName(context: Context, uri: Uri): String? {
|
||||
var fileName: String? = null
|
||||
val projection = arrayOf(MediaStore.MediaColumns.DISPLAY_NAME)
|
||||
@@ -24,7 +25,8 @@ object MyUriUtils {
|
||||
try {
|
||||
cursor?.use {
|
||||
if (it.moveToFirst()) {
|
||||
fileName = it.getString(it.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME))
|
||||
fileName =
|
||||
it.getString(it.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME))
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
@@ -60,6 +62,27 @@ object MyUriUtils {
|
||||
return type
|
||||
}
|
||||
|
||||
fun getFileSize(context: Context, uri: Uri): Long {
|
||||
var size = -1L
|
||||
try {
|
||||
context.contentResolver?.let {
|
||||
val pro = arrayOf(OpenableColumns.SIZE)
|
||||
val cursor = it.query(uri, pro, null, null, null)
|
||||
cursor?.let { c ->
|
||||
if (c.moveToFirst()) {
|
||||
val sizeIndex = c.getColumnIndexOrThrow(OpenableColumns.SIZE)
|
||||
size = c.getLong(sizeIndex)
|
||||
}
|
||||
c.close()
|
||||
}
|
||||
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
return size
|
||||
}
|
||||
|
||||
|
||||
fun isGif(context: Context, uri: Uri): Boolean {
|
||||
return getFileType(context, uri) == "image/gif"
|
||||
}
|
||||
|
@@ -1,12 +1,13 @@
|
||||
package com.netease.nim.uikit.business.session.actions
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import android.database.Cursor
|
||||
import android.net.Uri
|
||||
import android.provider.MediaStore
|
||||
import android.text.TextUtils
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import com.chwl.library.common.application.BaseApp
|
||||
import com.chwl.library.common.base.BaseDialogFragment
|
||||
import com.chwl.library.common.photo.PhotoProvider
|
||||
import com.chwl.library.common.util.PhotoCompressUtil
|
||||
import com.chwl.library.common.util.PhotosCompressCallback
|
||||
import com.chwl.library.utils.ResUtil
|
||||
@@ -15,20 +16,16 @@ import com.netease.nim.uikit.R
|
||||
import com.netease.nim.uikit.business.session.helper.SendImageHelper
|
||||
import com.netease.nim.uikit.common.activity.NimPhotoPickActivity
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
|
||||
|
||||
/**
|
||||
* Created by zhoujianghua on 2015/7/31.
|
||||
*/
|
||||
abstract class PickImageActionNew protected constructor(
|
||||
iconResId: Int,
|
||||
titleId: Int,
|
||||
private val multiSelect: Boolean
|
||||
iconResId: Int, titleId: Int, private val multiSelect: Boolean
|
||||
) : BaseAction(iconResId, titleId) {
|
||||
|
||||
companion object {
|
||||
private const val REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111 // 从相册中选择
|
||||
}
|
||||
|
||||
protected abstract fun onPicked(file: File)
|
||||
|
||||
@@ -37,29 +34,21 @@ abstract class PickImageActionNew protected constructor(
|
||||
}
|
||||
|
||||
private fun checkStoragePermission() {
|
||||
if (Build.VERSION.SDK_INT >= 29) {
|
||||
activity.startActivityForResult(Intent(activity,NimPhotoPickActivity::class.java),makeRequestCode(REQUEST_CODE_OPEN_PHOTO_PROVIDER))
|
||||
} else {
|
||||
PhotoProvider.photoProvider(
|
||||
activity,
|
||||
maxSelect = 9,
|
||||
resultCode = makeRequestCode(REQUEST_CODE_OPEN_PHOTO_PROVIDER)
|
||||
)
|
||||
}
|
||||
NimPhotoPickActivity.start(activity, NimPhotoPickActivity.IMG)
|
||||
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||
if (resultCode == BaseDialogFragment.RESULT_OK) {
|
||||
when (requestCode) {
|
||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER -> {
|
||||
NimPhotoPickActivity.PICK_ACT_RESULT and 0xff -> {
|
||||
if (data == null) return
|
||||
PhotoProvider.getResultPathListAsync(data) { list ->
|
||||
val paths = list?.map { it.path }?.toMutableList() ?: ArrayList()
|
||||
if (paths.isEmpty()) {
|
||||
SingleToastUtil.showToastShort(R.string.picker_image_error)
|
||||
} else {
|
||||
PhotoCompressUtil.compress(
|
||||
BaseApp.getContext(),
|
||||
val uri = data.data
|
||||
if (uri != null) {
|
||||
val file = copyFile(activity, uri)
|
||||
file?.path?.let { path ->
|
||||
val paths = mutableListOf(path)
|
||||
PhotoCompressUtil.compress(BaseApp.getContext(),
|
||||
paths,
|
||||
PhotoCompressUtil.getCompressCachePath(),
|
||||
object : PhotosCompressCallback {
|
||||
@@ -68,7 +57,11 @@ abstract class PickImageActionNew protected constructor(
|
||||
for (path in compressedImgList) {
|
||||
val file = File(path)
|
||||
if (TextUtils.isEmpty(path) || !file.exists()) {
|
||||
SingleToastUtil.showToastShort(path + ResUtil.getString(R.string.xchat_android_core_file_filemodel_01))
|
||||
SingleToastUtil.showToastShort(
|
||||
path + ResUtil.getString(
|
||||
R.string.xchat_android_core_file_filemodel_01
|
||||
)
|
||||
)
|
||||
return
|
||||
}
|
||||
onPicked(file)
|
||||
@@ -78,15 +71,14 @@ abstract class PickImageActionNew protected constructor(
|
||||
override fun onFail(e: Throwable) {
|
||||
SingleToastUtil.showToastShort(R.string.picker_image_error)
|
||||
}
|
||||
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
@@ -94,10 +86,47 @@ abstract class PickImageActionNew protected constructor(
|
||||
*/
|
||||
private fun sendImageAfterSelfImagePicker(compressedImgList: List<String>) {
|
||||
SendImageHelper.sendImageAfterSelfImagePickerNew(
|
||||
activity,
|
||||
compressedImgList
|
||||
activity, compressedImgList
|
||||
) { file, isOrig ->
|
||||
onPicked(file)
|
||||
}
|
||||
}
|
||||
|
||||
fun copyFile(context: Context, uri: Uri): File? {
|
||||
val fileName = getName(context, uri) ?: "defName.jpg"
|
||||
|
||||
val outPutDir = context.getExternalFilesDir(null) ?: return null
|
||||
|
||||
val outPutFile = File(outPutDir, fileName)
|
||||
|
||||
if (!outPutDir.exists()) {
|
||||
outPutDir.mkdirs()
|
||||
}
|
||||
|
||||
context.contentResolver.openInputStream(uri)?.use { inS ->
|
||||
FileOutputStream(outPutFile).use { outS ->
|
||||
inS.copyTo(outS)
|
||||
}
|
||||
return outPutFile
|
||||
} ?: return null
|
||||
|
||||
}
|
||||
|
||||
fun getName(context: Context, uri: Uri): String? {
|
||||
var fileName: String? = null
|
||||
val projection = arrayOf(MediaStore.MediaColumns.DISPLAY_NAME)
|
||||
val cursor: Cursor? = context.contentResolver.query(
|
||||
uri, projection, null, null, null
|
||||
)
|
||||
try {
|
||||
cursor?.use {
|
||||
if (it.moveToFirst()) {
|
||||
fileName =
|
||||
it.getString(it.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME))
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
}
|
||||
return fileName
|
||||
}
|
||||
}
|
@@ -1,73 +1,87 @@
|
||||
package com.netease.nim.uikit.common.activity
|
||||
|
||||
import android.Manifest
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.database.Cursor
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.provider.MediaStore
|
||||
import android.view.Window
|
||||
import android.view.WindowManager
|
||||
import androidx.activity.ComponentActivity
|
||||
import androidx.activity.result.ActivityResultLauncher
|
||||
import androidx.activity.result.PickVisualMediaRequest
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.chwl.library.common.util.SPUtils
|
||||
import com.chwl.library.constants.ConstantsLib
|
||||
import com.chwl.library.easyphoto.EasyPhotos
|
||||
import com.chwl.library.easyphoto.models.album.entity.Photo
|
||||
import com.chwl.library.easyphoto.setting.Setting
|
||||
import com.chwl.library.easypermisssion.EasyPermissions
|
||||
import com.chwl.library.utils.ResUtil
|
||||
import com.example.lib_utils.AppUtils
|
||||
import com.hjq.toast.ToastUtils
|
||||
import com.netease.nim.uikit.R
|
||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialog
|
||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
||||
import java.io.File
|
||||
import java.io.FileOutputStream
|
||||
|
||||
class NimPhotoPickActivity : AppCompatActivity() {
|
||||
class NimPhotoPickActivity : ComponentActivity(), EasyPermissions.PermissionCallbacks {
|
||||
|
||||
companion object {
|
||||
@JvmStatic
|
||||
fun start(act: Activity, mediaType: String) {
|
||||
val intent = Intent(act, NimPhotoPickActivity::class.java)
|
||||
intent.putExtra(PICK_ACT_TYPE, mediaType)
|
||||
act.startActivityForResult(intent, PICK_ACT_RESULT)
|
||||
}
|
||||
|
||||
const val PICK_ACT_RESULT = 333;
|
||||
private const val PERMISSION_RESULT = 123;
|
||||
private const val PICK_ACT_TYPE = "PICK_ACT_TYPE";
|
||||
|
||||
const val IMG = "image/*"
|
||||
const val GIF = "image/gif"
|
||||
}
|
||||
|
||||
|
||||
var pickMedia: ActivityResultLauncher<PickVisualMediaRequest>? = null
|
||||
var pickMediaForDocument: ActivityResultLauncher<Array<String>>? = null
|
||||
var mMediaType = IMG
|
||||
var dialog: EasyAlertDialog? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
setContentView(R.layout.nim_photo_pick_activity)
|
||||
|
||||
// requestWindowFeature(Window.FEATURE_NO_TITLE)
|
||||
// window.setFlags(
|
||||
// WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
||||
// WindowManager.LayoutParams.FLAG_FULLSCREEN
|
||||
// )
|
||||
|
||||
//todo do photoPick
|
||||
// setContentView(R.layout.activity_photo_pick)
|
||||
window?.setDimAmount(0f)
|
||||
mMediaType = intent?.getStringExtra(PICK_ACT_TYPE) ?: IMG
|
||||
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
||||
if (uri != null) {
|
||||
val file = copyFile(this@NimPhotoPickActivity, uri)
|
||||
if (file != null) {
|
||||
val resultList = ArrayList<Photo>()
|
||||
val data = Intent()
|
||||
resultList.add(Photo(file.path))
|
||||
data.putParcelableArrayListExtra(EasyPhotos.RESULT_PHOTOS, resultList)
|
||||
setResult(RESULT_OK, data)
|
||||
val intent = Intent()
|
||||
intent.setData(uri)
|
||||
setResult(RESULT_OK, intent)
|
||||
// 接收方 用 intent.data 来获取
|
||||
finish()
|
||||
}
|
||||
} else {
|
||||
finish()
|
||||
}
|
||||
}
|
||||
|
||||
pickMediaForDocument = registerForActivityResult(ActivityResultContracts.OpenDocument()) {
|
||||
if (it != null) {
|
||||
val intent = Intent()
|
||||
intent.setData(it)
|
||||
setResult(RESULT_OK, intent)
|
||||
}
|
||||
|
||||
var isFirst = true
|
||||
var dialog : EasyAlertDialog ?=null
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
|
||||
if (!isFirst) {
|
||||
finish()
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
checkStoragePermission()
|
||||
}
|
||||
|
||||
|
||||
private fun checkStoragePermission() {
|
||||
if (Build.VERSION.SDK_INT >= 29) {
|
||||
|
||||
if (!SPUtils.getBoolean(ConstantsLib.Key.Permissions_Img, false)) {
|
||||
dialog = EasyAlertDialogHelper.createOkCancelDiolag(
|
||||
this,
|
||||
@@ -86,7 +100,11 @@ class NimPhotoPickActivity : AppCompatActivity() {
|
||||
|
||||
override fun doOkAction() {
|
||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img, true)
|
||||
pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
|
||||
PickVisualMediaRequest(
|
||||
ActivityResultContracts.PickVisualMedia.SingleMimeType(
|
||||
mMediaType
|
||||
)
|
||||
)
|
||||
}
|
||||
})
|
||||
if (dialog?.isShowing == false) {
|
||||
@@ -95,9 +113,43 @@ class NimPhotoPickActivity : AppCompatActivity() {
|
||||
} else {
|
||||
pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
|
||||
}
|
||||
isFirst = false
|
||||
|
||||
} else {
|
||||
if (!EasyPermissions.hasPermissions(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
|
||||
EasyPermissions.requestPermissions(
|
||||
this,
|
||||
getString(R.string.dialot_permission_tips_nim),
|
||||
PERMISSION_RESULT,
|
||||
Manifest.permission.READ_EXTERNAL_STORAGE
|
||||
)
|
||||
} else {
|
||||
pickMediaForDocument?.launch(arrayOf(mMediaType))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
override fun onRequestPermissionsResult(
|
||||
requestCode: Int,
|
||||
permissions: Array<out String>,
|
||||
grantResults: IntArray
|
||||
) {
|
||||
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
|
||||
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this)
|
||||
}
|
||||
|
||||
override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_RESULT) {
|
||||
ToastUtils.show(getString(R.string.no_permission))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {
|
||||
if (requestCode == PERMISSION_RESULT) {
|
||||
checkStoragePermission()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private fun getName(context: Context, uri: Uri): String? {
|
||||
var fileName: String? = null
|
||||
@@ -112,7 +164,8 @@ class NimPhotoPickActivity : AppCompatActivity() {
|
||||
try {
|
||||
cursor?.use {
|
||||
if (it.moveToFirst()) {
|
||||
fileName = it.getString(it.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME))
|
||||
fileName =
|
||||
it.getString(it.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME))
|
||||
}
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
|
Reference in New Issue
Block a user