From 7b25dfa1ef617383cc50a3aca21711b08512dadf Mon Sep 17 00:00:00 2001 From: wushaocheng <15876365887@163.com> Date: Fri, 2 Dec 2022 20:55:23 +0800 Subject: [PATCH] =?UTF-8?q?[Modify]=E5=8A=A8=E6=80=81=E9=A1=B5=E9=80=82?= =?UTF-8?q?=E9=85=8D=E5=AE=89=E5=8D=9310.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../erban/ui/user/UserInfoModifyActivity.kt | 1 + .../erban/ui/user/UserModifyPhotosActivity.kt | 1 + .../publish/view/PublishActivity.java | 191 +++++++++++++++--- .../business/session/actions/ImageAction.java | 2 +- 5 files changed, 170 insertions(+), 27 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 2c97a745b..b9b508862 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -9,7 +9,7 @@ android:icon="@mipmap/app_logo" android:label="@string/app_name" android:largeHeap="true" - android:requestLegacyExternalStorage="true" + android:requestLegacyExternalStorage="false" android:resizeableActivity="true" android:supportsRtl="true" android:theme="@style/MyMaterialTheme" diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoModifyActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoModifyActivity.kt index 2d0401597..16a88da63 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoModifyActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoModifyActivity.kt @@ -93,6 +93,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity - implements IPublishView, WorldsChooseFrg.ChooseWorldCallback { + implements IPublishView, WorldsChooseFrg.ChooseWorldCallback, EasyPermissions.PermissionCallbacks { private final static String KEY_SP_ORIGINAL_IMAGE = "key_sp_original_image"; + private final static int PERMISSION_CODE_STORAGE = 12; + private final static int REQUEST_CODE_STORAGE = 42; + private final static int REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111; // 从相册中选择 + private final static int maxSelect = 9; @BindView(R.id.rv_images) RecyclerView rvImages; @@ -113,6 +126,8 @@ public class PublishActivity extends BaseMvpActivity { PublishItem item = imageShowList.get(position); if (item.isAddItem()) { - checkPermission(() -> { - CaptureStrategy captureStrategy = new CaptureStrategy(true, context.getPackageName() + ".fileprovider", - BasicConfig.INSTANCE.getImageDir().getAbsolutePath()); - int maxCanSelect = 9 - uploadList.size(); - Matisse.from(PublishActivity.this) - .choose(MimeType.ofImage()) - .showSingleMediaType(true) - .capture(true) - .spanCount(4) - .captureStrategy(captureStrategy) - .countable(true) - .maxSelectable(maxCanSelect) - .originalEnable(false) - .maxOriginalSize(10) - .imageEngine(new Glide4Engine()) - .setType(2) - .setOriginalImagee(isOriginalImage) - .forResult(ConstantValue.CODE_CHOOSE_PHOTO); - }, R.string.ask_storage, Manifest.permission.READ_EXTERNAL_STORAGE); +// checkPermission(() -> { +// CaptureStrategy captureStrategy = new CaptureStrategy(true, context.getPackageName() + ".fileprovider", +// BasicConfig.INSTANCE.getImageDir().getAbsolutePath()); +// int maxCanSelect = 9 - uploadList.size(); +// Matisse.from(PublishActivity.this) +// .choose(MimeType.ofImage()) +// .showSingleMediaType(true) +// .capture(true) +// .spanCount(4) +// .captureStrategy(captureStrategy) +// .countable(true) +// .maxSelectable(maxCanSelect) +// .originalEnable(false) +// .maxOriginalSize(10) +// .imageEngine(new Glide4Engine()) +// .setType(2) +// .setOriginalImagee(isOriginalImage) +// .forResult(ConstantValue.CODE_CHOOSE_PHOTO); +// }, R.string.ask_storage, Manifest.permission.READ_EXTERNAL_STORAGE); + checkStoragePermission(); } else { BigPhotoActivity.startCanDelete(PublishActivity.this, (ArrayList) uploadList, position, new PagerOption().setDelete(true)); @@ -328,8 +344,56 @@ public class PublishActivity extends BaseMvpActivity, Unit>() { + @Override + public Unit invoke(List list) { + if (list.isEmpty()) { + return null; + } else { + if (mJob != null) { + mJob.cancel(null); + } + mJob = PhotoCompressUtil.compress(PublishActivity.this, list, + PhotoCompressUtil.getCompressCachePath("publish") + , new PhotosCompressCallback() { + @Override + public void onSuccess(@NonNull ArrayList compressedImgList) { + List pathResult = new ArrayList<>(); + for (String path : compressedImgList) { + pathResult.add(new CustomItem(path, CustomItem.IMAGE_NORMAL, "jpeg")); + } + 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 pathResult = Matisse.obtainPathResult(data); @@ -544,4 +608,81 @@ public class PublishActivity extends BaseMvpActivity perms) { + if (requestCode == PERMISSION_CODE_STORAGE) { + checkStoragePermission(); + } + } + + @Override + public void onPermissionsDenied(int requestCode, @NonNull List 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() { + CommonTipDialog.OnActionListener.super.onCancel(); + //取消跳到应用详情页面 + ToastUtils.show(getString(R.string.permission_storage_refused)); + } + }); + mPrivacyDialog.show(); + } + } + + private void 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, + maxSelect - uploadList.size(), + true, + REQUEST_CODE_OPEN_PHOTO_PROVIDER, + true + ); + } + } + + @Override + protected void onDestroy() { + super.onDestroy(); + if (mJob != null) { + mJob.cancel(null); + } + } } diff --git a/nim_uikit/src/com/netease/nim/uikit/business/session/actions/ImageAction.java b/nim_uikit/src/com/netease/nim/uikit/business/session/actions/ImageAction.java index 64ba77f6e..fc34952a0 100644 --- a/nim_uikit/src/com/netease/nim/uikit/business/session/actions/ImageAction.java +++ b/nim_uikit/src/com/netease/nim/uikit/business/session/actions/ImageAction.java @@ -16,7 +16,7 @@ import java.io.File; /** * Created by hzxuwen on 2015/6/12. */ -public class ImageAction extends PickImageAction { +public class ImageAction extends PickImageActionNew { public ImageAction() { super(R.drawable.chat_icon_photo, R.string.input_panel_photo, true);