feat : 將 圖片選擇功能, 不用第三方,純用 系統自帶的 資源選擇器來實現, 並統一到一個入口 (IM模塊 單獨 處理)
This commit is contained in:
@@ -137,10 +137,6 @@ public class ErbanTakePhotoActivity extends TakePhotoActivity {
|
|||||||
getTakePhoto().onPickMultipleWithCrop(limit, options);
|
getTakePhoto().onPickMultipleWithCrop(limit, options);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void checkPermissionAndStartCamera() {
|
|
||||||
//低版本授权检查
|
|
||||||
checkPermission(checkPermissionListener, R.string.ask_camera, android.Manifest.permission.CAMERA);
|
|
||||||
}
|
|
||||||
|
|
||||||
PermissionActivity.CheckPermListener checkPermissionListener = new PermissionActivity.CheckPermListener() {
|
PermissionActivity.CheckPermListener checkPermissionListener = new PermissionActivity.CheckPermListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@@ -1,16 +1,12 @@
|
|||||||
package com.chwl.app.avroom.activity;
|
package com.chwl.app.avroom.activity;
|
||||||
|
|
||||||
|
|
||||||
import android.Manifest;
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.TimePickerDialog;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
|
||||||
import android.text.SpannableString;
|
import android.text.SpannableString;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@@ -18,49 +14,21 @@ import android.widget.CompoundButton;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.RelativeLayout;
|
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.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
import androidx.core.content.ContextCompat;
|
import androidx.core.content.ContextCompat;
|
||||||
import androidx.databinding.DataBindingUtil;
|
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.R;
|
||||||
|
import com.chwl.app.application.App;
|
||||||
import com.chwl.app.avroom.dialog.SelectLabelDialog;
|
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.presenter.RoomSettingPresenter;
|
||||||
import com.chwl.app.avroom.view.IRoomSettingView;
|
import com.chwl.app.avroom.view.IRoomSettingView;
|
||||||
import com.chwl.app.avroom.widget.EditRoomTitleDialog;
|
import com.chwl.app.avroom.widget.EditRoomTitleDialog;
|
||||||
import com.chwl.app.base.BaseMvpActivity;
|
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.common.widget.dialog.DialogManager;
|
||||||
import com.chwl.app.databinding.ActivityRoomSettingBinding;
|
import com.chwl.app.databinding.ActivityRoomSettingBinding;
|
||||||
import com.chwl.app.ui.webview.CommonWebViewActivity;
|
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.AuthModel;
|
||||||
import com.chwl.core.auth.event.KickOutEvent;
|
import com.chwl.core.auth.event.KickOutEvent;
|
||||||
import com.chwl.core.bean.RoomQueueInfo;
|
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.CustomAttachment;
|
||||||
import com.chwl.core.im.custom.bean.RoomNoticeAttachment;
|
import com.chwl.core.im.custom.bean.RoomNoticeAttachment;
|
||||||
import com.chwl.core.kick.KickModel;
|
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.AvRoomModel;
|
||||||
import com.chwl.core.room.model.RoomSettingModel;
|
import com.chwl.core.room.model.RoomSettingModel;
|
||||||
import com.chwl.core.room.queue.bean.MicMemberInfo;
|
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.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.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.net.rxnet.callback.CallBack;
|
||||||
import com.chwl.library.utils.CommonUtils;
|
import com.chwl.library.utils.CommonUtils;
|
||||||
import com.chwl.library.utils.JavaUtil;
|
import com.chwl.library.utils.JavaUtil;
|
||||||
import com.chwl.library.utils.ListUtils;
|
import com.chwl.library.utils.ListUtils;
|
||||||
import com.chwl.library.utils.ResUtil;
|
import com.chwl.library.utils.ResUtil;
|
||||||
|
import com.chwl.library.utils.SingleToastUtil;
|
||||||
import com.chwl.library.utils.codec.DESUtils;
|
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 com.yalantis.ucrop.UCrop;
|
||||||
|
|
||||||
import org.greenrobot.eventbus.EventBus;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
import org.greenrobot.eventbus.Subscribe;
|
import org.greenrobot.eventbus.Subscribe;
|
||||||
import org.greenrobot.eventbus.ThreadMode;
|
import org.greenrobot.eventbus.ThreadMode;
|
||||||
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@@ -113,7 +94,7 @@ import kotlinx.coroutines.Job;
|
|||||||
* @date 2017/9/26
|
* @date 2017/9/26
|
||||||
*/
|
*/
|
||||||
@CreatePresenter(RoomSettingPresenter.class)
|
@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 managerLayout;
|
||||||
private RelativeLayout blackLayout;
|
private RelativeLayout blackLayout;
|
||||||
@@ -133,13 +114,12 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
|||||||
|
|
||||||
private ActivityRoomSettingBinding binding;
|
private ActivityRoomSettingBinding binding;
|
||||||
|
|
||||||
private ActivityResultLauncher<PickVisualMediaRequest> pickMedia;
|
|
||||||
private Uri mUri;
|
private Uri mUri;
|
||||||
private Job mJob;
|
private Job mJob;
|
||||||
private final int PERMISSION_CODE_STORAGE = 12;
|
private final int PERMISSION_CODE_STORAGE = 12;
|
||||||
private final int REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111; // 从相册中选择
|
private final int REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111; // 从相册中选择
|
||||||
private final int REQUEST_CODE_STORAGE = 42;
|
private final int REQUEST_CODE_STORAGE = 42;
|
||||||
private final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 剪切的图片最大为100 MB
|
private final int MAX_BITMAP_SIZE = 100 * 1024 * 1024; // 剪切的图片最大为100 MB
|
||||||
|
|
||||||
public static void start(Context context) {
|
public static void start(Context context) {
|
||||||
Intent intent = new Intent(context, RoomSettingActivity.class);
|
Intent intent = new Intent(context, RoomSettingActivity.class);
|
||||||
@@ -178,23 +158,13 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
|||||||
binding.layoutSingleRoomSort.setVisibility(
|
binding.layoutSingleRoomSort.setVisibility(
|
||||||
AvRoomDataManager.get().isRoomOwner() && AvRoomDataManager.get().isSingleRoom()
|
AvRoomDataManager.get().isRoomOwner() && AvRoomDataManager.get().isSingleRoom()
|
||||||
? View.VISIBLE : View.GONE);
|
? View.VISIBLE : View.GONE);
|
||||||
binding.setRoomAvatar.setVisibility(( AvRoomDataManager.get().isRoomOwner() || AvRoomDataManager.get().isRoomAdmin()) ? View.VISIBLE : View.GONE);
|
binding.setRoomAvatar.setVisibility((AvRoomDataManager.get().isRoomOwner() || AvRoomDataManager.get().isRoomAdmin()) ? View.VISIBLE : View.GONE);
|
||||||
//调用更改房间信息接口后,会发消息ROOM_INFO_UPDATE,在此处接收ui改动
|
//调用更改房间信息接口后,会发消息ROOM_INFO_UPDATE,在此处接收ui改动
|
||||||
IMNetEaseManager.get().getChatRoomEventObservable()
|
IMNetEaseManager.get().getChatRoomEventObservable()
|
||||||
.compose(bindToLifecycle())
|
.compose(bindToLifecycle())
|
||||||
.filter(roomEvent -> roomEvent.getEvent() == RoomEvent.ROOM_INFO_UPDATE)
|
.filter(roomEvent -> roomEvent.getEvent() == RoomEvent.ROOM_INFO_UPDATE)
|
||||||
.subscribe(roomEvent -> updateRoomInfoView());
|
.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
|
@Override
|
||||||
@@ -256,7 +226,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void loadGiftValueState(){
|
private void loadGiftValueState() {
|
||||||
if (SuperAdminUtil.isSuperAdmin()) {
|
if (SuperAdminUtil.isSuperAdmin()) {
|
||||||
binding.layoutGiftValue.setVisibility(View.GONE);
|
binding.layoutGiftValue.setVisibility(View.GONE);
|
||||||
return;
|
return;
|
||||||
@@ -318,7 +288,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void save(final String name, final String pwd, String label) {
|
private void save(final String name, final String pwd, String label) {
|
||||||
save(name,null, pwd, label, false, roomInfo.isHasAnimationEffect());
|
save(name, null, pwd, label, false, roomInfo.isHasAnimationEffect());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -330,7 +300,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
|||||||
* @param isUpdateGiftEffect 是否改动了礼物特效
|
* @param isUpdateGiftEffect 是否改动了礼物特效
|
||||||
* @param giftEffect 是否开启礼物特效
|
* @param giftEffect 是否开启礼物特效
|
||||||
*/
|
*/
|
||||||
private void save(final String name,final String avatar, final String pwd, String label, boolean isUpdateGiftEffect,
|
private void save(final String name, final String avatar, final String pwd, String label, boolean isUpdateGiftEffect,
|
||||||
boolean giftEffect) {
|
boolean giftEffect) {
|
||||||
String desc = null;
|
String desc = null;
|
||||||
getDialogManager().showProgressDialog(this, ResUtil.getString(R.string.avroom_activity_roomsettingactivity_06));
|
getDialogManager().showProgressDialog(this, ResUtil.getString(R.string.avroom_activity_roomsettingactivity_06));
|
||||||
@@ -357,7 +327,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
if (AvRoomDataManager.get().isRoomOwner()) {
|
if (AvRoomDataManager.get().isRoomOwner()) {
|
||||||
model.updateRoomInfo(name, avatar,desc, roomInfo.getIntroduction(), pwd, label, id,
|
model.updateRoomInfo(name, avatar, desc, roomInfo.getIntroduction(), pwd, label, id,
|
||||||
AuthModel.get().getCurrentUid(),
|
AuthModel.get().getCurrentUid(),
|
||||||
AuthModel.get().getTicket(),
|
AuthModel.get().getTicket(),
|
||||||
giftEffect,
|
giftEffect,
|
||||||
@@ -369,7 +339,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
|||||||
.compose(bindToLifecycle())
|
.compose(bindToLifecycle())
|
||||||
.subscribe(observer);
|
.subscribe(observer);
|
||||||
} else if (AvRoomDataManager.get().isRoomAdmin()) {
|
} else if (AvRoomDataManager.get().isRoomAdmin()) {
|
||||||
model.updateByAdmin(roomInfo.getUid(),name,avatar,desc, roomInfo.getIntroduction(), pwd, label, id,
|
model.updateByAdmin(roomInfo.getUid(), name, avatar, desc, roomInfo.getIntroduction(), pwd, label, id,
|
||||||
AuthModel.get().getCurrentUid(),
|
AuthModel.get().getCurrentUid(),
|
||||||
AuthModel.get().getTicket(),
|
AuthModel.get().getTicket(),
|
||||||
giftEffect,
|
giftEffect,
|
||||||
@@ -462,13 +432,13 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onOk() {
|
public void onOk() {
|
||||||
save(null,null,null, null, true, false);
|
save(null, null, null, null, true, false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
//开启礼物特效
|
//开启礼物特效
|
||||||
save(null,null, null, null, true, true);
|
save(null, null, null, null, true, true);
|
||||||
break;
|
break;
|
||||||
case R.id.switch_screen:
|
case R.id.switch_screen:
|
||||||
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
|
RoomInfo roomInfo = AvRoomDataManager.get().mCurrentRoomInfo;
|
||||||
@@ -618,70 +588,11 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void checkStoragePermission() {
|
private void checkStoragePermission() {
|
||||||
if (Build.VERSION.SDK_INT >= 29){
|
PhotoPickActivity.start(this, PhotoPickActivity.IMG);
|
||||||
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());
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}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() {
|
||||||
|
|
||||||
private void switchGiftValue(){
|
|
||||||
if (AvRoomDataManager.get().isCpRoom()) {
|
if (AvRoomDataManager.get().isCpRoom()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1024,18 +935,17 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
|||||||
@Override
|
@Override
|
||||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
if (requestCode == REQUEST_CODE_STORAGE) {
|
if (resultCode == RESULT_OK) {
|
||||||
checkStoragePermission();
|
|
||||||
} else if (resultCode == RESULT_OK) {
|
|
||||||
switch (requestCode) {
|
switch (requestCode) {
|
||||||
case REQUEST_CODE_OPEN_PHOTO_PROVIDER:
|
case PhotoPickActivity.PICK_ACT_RESULT:
|
||||||
if (data != null) {
|
if (data != null) {
|
||||||
List<Photo> photos = PhotoProvider.getResultPhotoList(data);
|
Uri uri = data.getData();
|
||||||
if (photos != null && !photos.isEmpty()) {
|
mUri = Uri.parse("file://" + FileHelper.getRootCacheDir().getPath() + "/" + System.nanoTime() + ".jpg");
|
||||||
Photo photo = photos.get(0);
|
if (uri != null && mUri != null) {
|
||||||
crop(photo.uri, photo.size, mUri);
|
boolean isCopy = MyUriUtils.INSTANCE.copyFileToUrl(this, uri, mUri);
|
||||||
} else {
|
if (isCopy) {
|
||||||
toast(R.string.empty_data);
|
crop(mUri, 1, mUri);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1064,6 +974,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFail(@NonNull Throwable e) {
|
public void onFail(@NonNull Throwable e) {
|
||||||
toast(e.getMessage());
|
toast(e.getMessage());
|
||||||
@@ -1095,7 +1006,7 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
|||||||
UCrop.Options options = new UCrop.Options();
|
UCrop.Options options = new UCrop.Options();
|
||||||
options.setCompressionQuality(100);
|
options.setCompressionQuality(100);
|
||||||
options.setShowCropGrid(false);
|
options.setShowCropGrid(false);
|
||||||
options.setToolbarColor(ContextCompat.getColor(App.gContext,android.R.color.black));
|
options.setToolbarColor(ContextCompat.getColor(App.gContext, android.R.color.black));
|
||||||
options.setStatusBarColor(ContextCompat.getColor(App.gContext, android.R.color.black));
|
options.setStatusBarColor(ContextCompat.getColor(App.gContext, android.R.color.black));
|
||||||
options.setHideBottomControls(true);
|
options.setHideBottomControls(true);
|
||||||
options.setCompressionFormat(Bitmap.CompressFormat.JPEG);
|
options.setCompressionFormat(Bitmap.CompressFormat.JPEG);
|
||||||
@@ -1107,12 +1018,12 @@ public class RoomSettingActivity extends BaseMvpActivity<IRoomSettingView, RoomS
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void onUpload(String url) {
|
private void onUpload(String url) {
|
||||||
LogUtils.d(" 请求接口 更新房间封面 url = "+url);
|
LogUtils.d(" 请求接口 更新房间封面 url = " + url);
|
||||||
save(null,url,null,null,false,roomInfo.isHasAnimationEffect());
|
save(null, url, null, null, false, roomInfo.isHasAnimationEffect());
|
||||||
}
|
}
|
||||||
|
|
||||||
private void onUploadFail(Throwable throwable) {
|
private void onUploadFail(Throwable throwable) {
|
||||||
toast(ResUtil.getString(R.string.ui_user_userinfomodifyactivity_08) + ":"+throwable.getMessage());
|
toast(ResUtil.getString(R.string.ui_user_userinfomodifyactivity_08) + ":" + throwable.getMessage());
|
||||||
getDialogManager().dismissDialog();
|
getDialogManager().dismissDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -14,26 +14,22 @@ import androidx.recyclerview.widget.RecyclerView;
|
|||||||
|
|
||||||
import com.chad.library.adapter.base.BaseQuickAdapter;
|
import com.chad.library.adapter.base.BaseQuickAdapter;
|
||||||
import com.chad.library.adapter.base.BaseViewHolder;
|
import com.chad.library.adapter.base.BaseViewHolder;
|
||||||
import com.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.R;
|
||||||
import com.chwl.app.UIHelper;
|
import com.chwl.app.UIHelper;
|
||||||
import com.chwl.app.avroom.activity.CreatePKActivity;
|
import com.chwl.app.avroom.activity.CreatePKActivity;
|
||||||
import com.chwl.app.avroom.activity.RoomSettingActivity;
|
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.anotherroompk.RoomPKCreateActivity;
|
||||||
import com.chwl.app.avroom.giftvalue.GiftValueDialogUiHelper;
|
import com.chwl.app.avroom.giftvalue.GiftValueDialogUiHelper;
|
||||||
import com.chwl.app.avroom.room_album.RoomAlbumActivity;
|
import com.chwl.app.avroom.room_album.RoomAlbumActivity;
|
||||||
import com.chwl.app.avroom.singleroompk.SingleRoomPKCreateActivity;
|
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.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.ButtonItem;
|
||||||
import com.chwl.app.ui.widget.recyclerview.decoration.ColorDecoration;
|
import com.chwl.app.ui.widget.recyclerview.decoration.ColorDecoration;
|
||||||
import com.chwl.app.ui.widget.recyclerview.layoutmanager.FullyGridLayoutManager;
|
import com.chwl.app.ui.widget.recyclerview.layoutmanager.FullyGridLayoutManager;
|
||||||
import com.chwl.app.vip.dialog.VipBroadcastDialog;
|
import com.chwl.app.vip.dialog.VipBroadcastDialog;
|
||||||
import com.chwl.app.room_chat.activity.RoomInviteFansActivity;
|
|
||||||
import com.chwl.core.XConstants;
|
import com.chwl.core.XConstants;
|
||||||
import com.chwl.core.auth.AuthModel;
|
import com.chwl.core.auth.AuthModel;
|
||||||
import com.chwl.core.im.custom.bean.RoomPkBean;
|
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.BeanObserver;
|
||||||
import com.chwl.core.utils.net.DontWarnObserver;
|
import com.chwl.core.utils.net.DontWarnObserver;
|
||||||
import com.chwl.core.utils.net.RxHelper;
|
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.ResUtil;
|
||||||
import com.chwl.library.utils.SingleToastUtil;
|
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;
|
import org.greenrobot.eventbus.EventBus;
|
||||||
|
|
||||||
@@ -78,11 +78,12 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
|||||||
private OptAdapter optAdapter;
|
private OptAdapter optAdapter;
|
||||||
private OnActionListener onActionListener;
|
private OnActionListener onActionListener;
|
||||||
private CallBack callBack;
|
private CallBack callBack;
|
||||||
|
|
||||||
public void setCallBack(CallBack callBack) {
|
public void setCallBack(CallBack callBack) {
|
||||||
this.callBack = callBack;
|
this.callBack = callBack;
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface CallBack{
|
public interface CallBack {
|
||||||
void onCLick(int Type);
|
void onCLick(int Type);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -172,7 +173,6 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
|||||||
R.drawable.ic_room_opt_in_pk;
|
R.drawable.ic_room_opt_in_pk;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
optAdapter.addData(new OptAction(icon, str, () -> {
|
optAdapter.addData(new OptAction(icon, str, () -> {
|
||||||
if (AvRoomDataManager.get().isDatingMode()) {
|
if (AvRoomDataManager.get().isDatingMode()) {
|
||||||
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_01));
|
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_01));
|
||||||
@@ -189,7 +189,7 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 跨房PK
|
* 跨房PK
|
||||||
*
|
*
|
||||||
* @param optAdapter
|
* @param optAdapter
|
||||||
*/
|
*/
|
||||||
@@ -215,7 +215,6 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
|||||||
R.drawable.ic_room_opt_another_pk_open;
|
R.drawable.ic_room_opt_another_pk_open;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
optAdapter.addData(new OptAction(icon, str, () -> {
|
optAdapter.addData(new OptAction(icon, str, () -> {
|
||||||
if (AvRoomDataManager.get().isDatingMode()) {
|
if (AvRoomDataManager.get().isDatingMode()) {
|
||||||
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_05));
|
SingleToastUtil.showToast(ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_05));
|
||||||
@@ -268,7 +267,6 @@ public class RoomOperationDialog extends BottomSheetDialog {
|
|||||||
String finalStr = str;
|
String finalStr = str;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
optAdapter.addData(new OptAction(icon, str, () -> {
|
optAdapter.addData(new OptAction(icon, str, () -> {
|
||||||
if (pkBean != null && ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_011).equals(finalStr)) {
|
if (pkBean != null && ResUtil.getString(R.string.avroom_dialog_roomoperationdialog_011).equals(finalStr)) {
|
||||||
SingleRoomPKModel.INSTANCE
|
SingleRoomPKModel.INSTANCE
|
||||||
|
@@ -25,6 +25,7 @@ import com.chwl.app.ui.widget.magicindicator.buildins.commonnavigator.titles.Col
|
|||||||
class RoomAlbumActivity : BaseViewBindingActivity<ActivityRoomAlbumBinding>() {
|
class RoomAlbumActivity : BaseViewBindingActivity<ActivityRoomAlbumBinding>() {
|
||||||
|
|
||||||
val viewModel: RoomAlbumViewModel by viewModels()
|
val viewModel: RoomAlbumViewModel by viewModels()
|
||||||
|
var loadDialog: UploadRoomAlbumDialogFragment? = null
|
||||||
|
|
||||||
override fun init() {
|
override fun init() {
|
||||||
initTitleBar(getString(R.string.room_album))
|
initTitleBar(getString(R.string.room_album))
|
||||||
@@ -97,13 +98,19 @@ class RoomAlbumActivity : BaseViewBindingActivity<ActivityRoomAlbumBinding>() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
binding.tvUpload.setOnClickListener {
|
binding.tvUpload.setOnClickListener {
|
||||||
UploadRoomAlbumDialogFragment().show(
|
loadDialog = UploadRoomAlbumDialogFragment()
|
||||||
|
loadDialog?.show(
|
||||||
supportFragmentManager,
|
supportFragmentManager,
|
||||||
UploadRoomAlbumDialogFragment::class.java.simpleName
|
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 {
|
companion object {
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun start(context: Context) {
|
fun start(context: Context) {
|
||||||
|
@@ -1,45 +1,33 @@
|
|||||||
package com.chwl.app.avroom.room_album
|
package com.chwl.app.avroom.room_album
|
||||||
|
|
||||||
import android.Manifest
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.app.AlertDialog
|
|
||||||
import android.app.Dialog
|
import android.app.Dialog
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Build
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.view.WindowManager
|
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.core.content.ContextCompat
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import androidx.recyclerview.widget.GridLayoutManager
|
import androidx.recyclerview.widget.GridLayoutManager
|
||||||
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
|
import com.chad.library.adapter.base.BaseMultiItemQuickAdapter
|
||||||
import com.chad.library.adapter.base.BaseViewHolder
|
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.R
|
||||||
|
import com.chwl.app.base.PhotoPickActivity
|
||||||
import com.chwl.app.common.widget.dialog.DialogManager
|
import com.chwl.app.common.widget.dialog.DialogManager
|
||||||
import com.chwl.app.databinding.DialogRoomAlbumUploadBinding
|
import com.chwl.app.databinding.DialogRoomAlbumUploadBinding
|
||||||
import com.chwl.app.ui.utils.ImageLoadUtilsV2
|
import com.chwl.app.ui.utils.ImageLoadUtilsV2
|
||||||
import com.chwl.app.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration
|
import com.chwl.app.ui.widget.recyclerview.decoration.GridSpacingItemNewDecoration
|
||||||
import com.chwl.core.Constants
|
import com.chwl.core.Constants
|
||||||
import com.chwl.core.gift.bean.GiftInfo
|
import com.chwl.core.gift.bean.GiftInfo
|
||||||
import com.chwl.core.utils.DialogUtil
|
|
||||||
import com.chwl.core.utils.MyUriUtils
|
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.compress
|
||||||
import com.chwl.library.common.util.PhotoCompressUtil.getCompressCachePath
|
import com.chwl.library.common.util.PhotoCompressUtil.getCompressCachePath
|
||||||
import com.chwl.library.common.util.PhotosCompressCallback
|
import com.chwl.library.common.util.PhotosCompressCallback
|
||||||
import com.chwl.library.common.util.SPUtils
|
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||||
import com.chwl.library.constants.ConstantsLib
|
import com.hjq.toast.ToastUtils
|
||||||
import com.chwl.library.easypermisssion.EasyPermissions
|
|
||||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
|
|
||||||
class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
||||||
@@ -54,7 +42,6 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
|||||||
private var unlockedGift: GiftInfo? = null
|
private var unlockedGift: GiftInfo? = null
|
||||||
|
|
||||||
private var compressJob: Job? = null
|
private var compressJob: Job? = null
|
||||||
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
|
|
||||||
val dialogManager by lazy {
|
val dialogManager by lazy {
|
||||||
DialogManager(context)
|
DialogManager(context)
|
||||||
}
|
}
|
||||||
@@ -64,21 +51,6 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
|||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setStyle(STYLE_NO_TITLE, R.style.ErbanBottomSheetDialog)
|
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 {
|
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||||
@@ -243,37 +215,7 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun checkStoragePermission() {
|
private fun checkStoragePermission() {
|
||||||
|
PhotoPickActivity.start(requireActivity(), PhotoPickActivity.IMG)
|
||||||
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
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated("Deprecated in Java")
|
@Deprecated("Deprecated in Java")
|
||||||
@@ -282,10 +224,17 @@ class UploadRoomAlbumDialogFragment : BottomSheetDialogFragment() {
|
|||||||
if (resultCode != Activity.RESULT_OK) {
|
if (resultCode != Activity.RESULT_OK) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
if (requestCode == 200) {
|
|
||||||
PhotoProvider.getResultPathListAsync(data) {
|
if (requestCode == PhotoPickActivity.PICK_ACT_RESULT) {
|
||||||
it?.mapNotNull { it.path }?.let { paths ->
|
val uri = data?.data
|
||||||
compressPhotos(paths.toMutableList())
|
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);
|
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() {
|
private void takePhoto() {
|
||||||
String mCameraCapturingName = CAMERA_PREFIX + System.currentTimeMillis() + ".jpg";
|
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);
|
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();
|
PermissionActivity.CheckPermListener checkPermissionListener = () -> takePhoto();
|
||||||
|
|
||||||
|
@@ -1,24 +1,169 @@
|
|||||||
package com.chwl.app.base
|
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.os.Bundle
|
||||||
|
import android.provider.Settings
|
||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.result.ActivityResultLauncher
|
import androidx.activity.result.ActivityResultLauncher
|
||||||
import androidx.activity.result.PickVisualMediaRequest
|
import androidx.activity.result.PickVisualMediaRequest
|
||||||
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import com.chwl.app.R
|
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)
|
||||||
|
}
|
||||||
|
|
||||||
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
|
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/*"
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
const val GIF = "image/gif"
|
||||||
super.onCreate(savedInstanceState)
|
|
||||||
setContentView(R.layout.activity_photo_pick)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
||||||
|
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.IReportConstants
|
||||||
import com.chwl.app.application.ReportManager
|
import com.chwl.app.application.ReportManager
|
||||||
import com.chwl.app.avroom.activity.AVRoomActivity
|
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.BaseActivity
|
||||||
import com.chwl.app.base.BaseFragment
|
import com.chwl.app.base.BaseFragment
|
||||||
|
import com.chwl.app.base.PhotoPickActivity
|
||||||
import com.chwl.app.databinding.FragmentMeBinding
|
import com.chwl.app.databinding.FragmentMeBinding
|
||||||
import com.chwl.app.home.HomeViewModel
|
import com.chwl.app.home.HomeViewModel
|
||||||
import com.chwl.app.home.MeViewModel
|
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.im.RouterHandler
|
||||||
import com.chwl.app.ui.relation.AttentionListActivity
|
import com.chwl.app.ui.relation.AttentionListActivity
|
||||||
import com.chwl.app.ui.relation.FansListActivity
|
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.utils.ImageLoadUtils
|
||||||
import com.chwl.app.ui.wallet.WalletActivity
|
import com.chwl.app.ui.wallet.WalletActivity
|
||||||
import com.chwl.app.ui.webview.CommonWebViewActivity
|
import com.chwl.app.ui.webview.CommonWebViewActivity
|
||||||
import com.chwl.app.ui.widget.UserInfoDialog
|
|
||||||
import com.chwl.app.view.GenderAgeTextView
|
import com.chwl.app.view.GenderAgeTextView
|
||||||
import com.chwl.app.vip.VipCenterActivity
|
import com.chwl.app.vip.VipCenterActivity
|
||||||
import com.chwl.app.vip.VipSettingActivity
|
|
||||||
import com.chwl.app.vip.VipViewModel
|
import com.chwl.app.vip.VipViewModel
|
||||||
import com.chwl.app.vip.dialog.VipUpgradeDialog
|
|
||||||
import com.chwl.core.auth.AuthModel
|
import com.chwl.core.auth.AuthModel
|
||||||
import com.chwl.core.gift.bean.BoomMsgAwardBean
|
|
||||||
import com.chwl.core.initial.InitialModel
|
import com.chwl.core.initial.InitialModel
|
||||||
import com.chwl.core.level.UserLevelVo
|
import com.chwl.core.level.UserLevelVo
|
||||||
import com.chwl.core.manager.IMNetEaseManager
|
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.bean.UserInfo
|
||||||
import com.chwl.core.user.event.LoginUserInfoUpdateEvent
|
import com.chwl.core.user.event.LoginUserInfoUpdateEvent
|
||||||
import com.chwl.core.utils.CoreLogger
|
import com.chwl.core.utils.CoreLogger
|
||||||
import com.chwl.core.utils.WLog
|
|
||||||
import com.chwl.core.vip.bean.VipInfo
|
import com.chwl.core.vip.bean.VipInfo
|
||||||
import com.example.lib_utils.ktx.singleClick
|
import com.example.lib_utils.ktx.singleClick
|
||||||
import org.greenrobot.eventbus.EventBus
|
import org.greenrobot.eventbus.EventBus
|
||||||
import org.greenrobot.eventbus.Subscribe
|
import org.greenrobot.eventbus.Subscribe
|
||||||
import org.greenrobot.eventbus.ThreadMode
|
import org.greenrobot.eventbus.ThreadMode
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description: 我的 界面
|
* @description: 我的 界面
|
||||||
@@ -110,7 +103,7 @@ class MeFragment : BaseFragment(), View.OnClickListener {
|
|||||||
|
|
||||||
mCenterAdapter.setOnItemClickListener { adapter, view, position ->
|
mCenterAdapter.setOnItemClickListener { adapter, view, position ->
|
||||||
mCenterAdapter.getItem(position)?.let {
|
mCenterAdapter.getItem(position)?.let {
|
||||||
RouterHandler.handle(mContext, it.skipType?:-1, it.centerUrl)
|
RouterHandler.handle(mContext, it.skipType ?: -1, it.centerUrl)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -208,7 +201,8 @@ class MeFragment : BaseFragment(), View.OnClickListener {
|
|||||||
if (diamondList?.contains(userInfo.erbanNo) == true
|
if (diamondList?.contains(userInfo.erbanNo) == true
|
||||||
|| giftList?.contains(userInfo.erbanNo) == true
|
|| giftList?.contains(userInfo.erbanNo) == true
|
||||||
|| levelSep >= (initInfo?.giveDiamondExperLevel ?: 0)
|
|| levelSep >= (initInfo?.giveDiamondExperLevel ?: 0)
|
||||||
|| levelSep >= (initInfo?.giveGiftExperLevel ?: 0)) {
|
|| levelSep >= (initInfo?.giveGiftExperLevel ?: 0)
|
||||||
|
) {
|
||||||
meViewModel.updateDonationMenuVisible(true)
|
meViewModel.updateDonationMenuVisible(true)
|
||||||
} else {
|
} else {
|
||||||
meViewModel.updateDonationMenuVisible(false)
|
meViewModel.updateDonationMenuVisible(false)
|
||||||
@@ -326,7 +320,7 @@ class MeFragment : BaseFragment(), View.OnClickListener {
|
|||||||
|
|
||||||
override fun onClick(v: View) {
|
override fun onClick(v: View) {
|
||||||
when (v.id) {
|
when (v.id) {
|
||||||
R.id.iv_user_head, R.id.rl_user_info ->{
|
R.id.iv_user_head, R.id.rl_user_info -> {
|
||||||
mUserInfo?.let { UIHelper.showUserInfoAct(mContext, it.uid) }
|
mUserInfo?.let { UIHelper.showUserInfoAct(mContext, it.uid) }
|
||||||
}
|
}
|
||||||
//
|
//
|
||||||
@@ -377,7 +371,7 @@ class MeFragment : BaseFragment(), View.OnClickListener {
|
|||||||
R.id.tv_user_name -> {
|
R.id.tv_user_name -> {
|
||||||
//todo do 测试按钮
|
//todo do 测试按钮
|
||||||
if (BuildConfig.DEBUG) {
|
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.ktx.singleClick
|
||||||
import com.example.lib_utils.spannable.SpannableTextBuilder
|
import com.example.lib_utils.spannable.SpannableTextBuilder
|
||||||
|
|
||||||
|
//todo do VIP 送礼飘屏
|
||||||
class GiftNotify(context: Context) : BaseFloatView(context) {
|
class GiftNotify(context: Context) : BaseFloatView(context) {
|
||||||
private val view = TextView(context)
|
private val view = TextView(context)
|
||||||
|
|
||||||
|
@@ -1,37 +1,24 @@
|
|||||||
package com.chwl.app.ui.feedback
|
package com.chwl.app.ui.feedback
|
||||||
|
|
||||||
import android.Manifest
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.os.Build
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.widget.ImageView.ScaleType
|
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.activity.viewModels
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.lifecycle.repeatOnLifecycle
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
import com.chwl.app.R
|
import com.chwl.app.R
|
||||||
import com.chwl.app.base.BaseViewBindingActivity
|
import com.chwl.app.base.BaseViewBindingActivity
|
||||||
|
import com.chwl.app.base.PhotoPickActivity
|
||||||
import com.chwl.app.databinding.FeedbackActivityBinding
|
import com.chwl.app.databinding.FeedbackActivityBinding
|
||||||
import com.chwl.app.ui.utils.load
|
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.file.FileModel
|
||||||
import com.chwl.core.home.bean.FeedbackTypeBean
|
import com.chwl.core.home.bean.FeedbackTypeBean
|
||||||
import com.chwl.core.utils.DialogUtil
|
|
||||||
import com.chwl.core.utils.MyUriUtils
|
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.PhotoCompressUtil
|
||||||
import com.chwl.library.common.util.PhotosCompressCallback
|
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.ResUtil
|
||||||
import com.chwl.library.utils.SingleToastUtil
|
|
||||||
import com.example.lib_utils.SolveEditTextScrollClash
|
import com.example.lib_utils.SolveEditTextScrollClash
|
||||||
import com.example.lib_utils.ktx.getColorById
|
import com.example.lib_utils.ktx.getColorById
|
||||||
import com.example.lib_utils.ktx.setOnInputChangedListener
|
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.google.android.flexbox.JustifyContent
|
||||||
import com.hjq.toast.ToastUtils
|
import com.hjq.toast.ToastUtils
|
||||||
import com.netease.nim.uikit.StatusBarUtil
|
import com.netease.nim.uikit.StatusBarUtil
|
||||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>(),
|
class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>() {
|
||||||
EasyPermissions.PermissionCallbacks {
|
|
||||||
|
|
||||||
private val PERMISSION_CODE_STORAGE = 12
|
private val PERMISSION_CODE_STORAGE = 12
|
||||||
private val REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111 // 从相册中选择
|
private val REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111 // 从相册中选择
|
||||||
@@ -61,21 +46,11 @@ class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>(),
|
|||||||
private var imagePath: String? = null
|
private var imagePath: String? = null
|
||||||
private var imageUrl: String? = null
|
private var imageUrl: String? = null
|
||||||
|
|
||||||
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
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() {
|
override fun init() {
|
||||||
initWhiteTitleBar(ResUtil.getString(R.string.feedback_title))
|
initWhiteTitleBar(ResUtil.getString(R.string.feedback_title))
|
||||||
initView()
|
initView()
|
||||||
@@ -243,83 +218,29 @@ class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>(),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("CheckResult")
|
|
||||||
private fun uploadImage(path: String, success: (String) -> Unit, failed: (Throwable?) -> Unit) {
|
private fun checkStoragePermission() {
|
||||||
FileModel.get()
|
PhotoPickActivity.start(this, PhotoPickActivity.IMG)
|
||||||
.uploadFile(path)
|
|
||||||
.compose(bindToLifecycle())
|
|
||||||
.subscribe { url: String?, throwable: Throwable? ->
|
|
||||||
if (url != null) {
|
|
||||||
success.invoke(url)
|
|
||||||
} else {
|
|
||||||
failed.invoke(throwable)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
super.onActivityResult(requestCode, resultCode, data)
|
||||||
if (resultCode == RESULT_OK) {
|
if (resultCode == RESULT_OK) {
|
||||||
if (requestCode == REQUEST_CODE_OPEN_PHOTO_PROVIDER) {
|
if (requestCode == PhotoPickActivity.PICK_ACT_RESULT) {
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
PhotoProvider.getResultPathListAsync(data) { list ->
|
val uri = data.data
|
||||||
if (list.isNullOrEmpty()) {
|
uri?.let {
|
||||||
SingleToastUtil.showToastShort(com.netease.nim.uikit.R.string.picker_image_error)
|
val file = MyUriUtils.copyFile(this, uri)
|
||||||
return@getResultPathListAsync
|
if (file != null) {
|
||||||
|
compressPhotos(mutableListOf(file.path))
|
||||||
}
|
}
|
||||||
val paths = list.map { it.path }.toMutableList()
|
|
||||||
compressPhotos(paths)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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>) {
|
private fun compressPhotos(paths: MutableList<String>) {
|
||||||
compressJob?.cancel(null)
|
compressJob?.cancel(null)
|
||||||
compressJob = PhotoCompressUtil.compress(
|
compressJob = PhotoCompressUtil.compress(
|
||||||
@@ -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 {
|
override fun needSteepStateBar(): Boolean {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@@ -348,36 +283,6 @@ class FeedbackActivity : BaseViewBindingActivity<FeedbackActivityBinding>(),
|
|||||||
StatusBarUtil.StatusBarLightMode(this)
|
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() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
|
@@ -1,25 +1,20 @@
|
|||||||
package com.chwl.app.ui.user.activity
|
package com.chwl.app.ui.user.activity
|
||||||
|
|
||||||
import android.Manifest
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.provider.Settings
|
|
||||||
import android.text.TextUtils
|
import android.text.TextUtils
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.ImageView
|
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.core.content.ContextCompat
|
||||||
import androidx.recyclerview.widget.LinearLayoutManager
|
import androidx.recyclerview.widget.LinearLayoutManager
|
||||||
import com.chwl.app.R
|
import com.chwl.app.R
|
||||||
import com.chwl.app.UIHelper
|
import com.chwl.app.UIHelper
|
||||||
import com.chwl.app.application.App
|
import com.chwl.app.application.App
|
||||||
import com.chwl.app.base.BaseViewBindingActivity
|
import com.chwl.app.base.BaseViewBindingActivity
|
||||||
|
import com.chwl.app.base.PhotoPickActivity
|
||||||
import com.chwl.app.common.util.BitmapUtil
|
import com.chwl.app.common.util.BitmapUtil
|
||||||
import com.chwl.app.constants.UserInfoConstants
|
import com.chwl.app.constants.UserInfoConstants
|
||||||
import com.chwl.app.databinding.ActivityUserInfoModifyBinding
|
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.user.dialog.UserAreaDialog
|
||||||
import com.chwl.app.ui.utils.ImageLoadUtils
|
import com.chwl.app.ui.utils.ImageLoadUtils
|
||||||
import com.chwl.app.ui.widget.ButtonItem
|
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.utils.RegexUtil
|
||||||
import com.chwl.app.vip.util.VipHelper
|
import com.chwl.app.vip.util.VipHelper
|
||||||
import com.chwl.core.auth.AuthModel
|
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.UserInfo
|
||||||
import com.chwl.core.user.bean.UserPhoto
|
import com.chwl.core.user.bean.UserPhoto
|
||||||
import com.chwl.core.utils.CoreLogger
|
import com.chwl.core.utils.CoreLogger
|
||||||
import com.chwl.core.utils.DialogUtil
|
|
||||||
import com.chwl.core.utils.MyUriUtils
|
import com.chwl.core.utils.MyUriUtils
|
||||||
import com.chwl.library.common.file.FileHelper
|
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.PhotoCompressCallback
|
||||||
import com.chwl.library.common.util.PhotoCompressUtil
|
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.ResUtil
|
||||||
import com.chwl.library.utils.TimeUtils
|
import com.chwl.library.utils.TimeUtils
|
||||||
import com.example.lib_utils.ktx.getString
|
import com.example.lib_utils.ktx.getString
|
||||||
import com.fourmob.datetimepicker.date.DatePickerDialog
|
import com.fourmob.datetimepicker.date.DatePickerDialog
|
||||||
import com.hjq.toast.ToastUtils
|
import com.hjq.toast.ToastUtils
|
||||||
import com.netease.nim.uikit.StatusBarUtil
|
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.netease.nim.uikit.common.util.sys.TimeUtil
|
||||||
import com.sleepbot.datetimepicker.time.RadialPickerLayout
|
import com.sleepbot.datetimepicker.time.RadialPickerLayout
|
||||||
import com.sleepbot.datetimepicker.time.TimePickerDialog
|
import com.sleepbot.datetimepicker.time.TimePickerDialog
|
||||||
@@ -76,8 +64,7 @@ import java.util.concurrent.TimeUnit
|
|||||||
*/
|
*/
|
||||||
class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBinding>(),
|
class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBinding>(),
|
||||||
View.OnClickListener,
|
View.OnClickListener,
|
||||||
TimePickerDialog.OnTimeSetListener, DatePickerDialog.OnDateSetListener, ImageClickListener,
|
TimePickerDialog.OnTimeSetListener, DatePickerDialog.OnDateSetListener, ImageClickListener {
|
||||||
EasyPermissions.PermissionCallbacks {
|
|
||||||
private var datePickerDialog: DatePickerDialog? = null
|
private var datePickerDialog: DatePickerDialog? = null
|
||||||
private var mUserInfo: UserInfo? = null
|
private var mUserInfo: UserInfo? = null
|
||||||
private var userId: Long = 0
|
private var userId: Long = 0
|
||||||
@@ -108,32 +95,11 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
|||||||
userId = intent.getLongExtra("userId", 0)
|
userId = intent.getLongExtra("userId", 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
|
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
UserModel.get().getUserInfo(userId).subscribe(userInfoUpdateObserver)
|
UserModel.get().getUserInfo(userId).subscribe(userInfoUpdateObserver)
|
||||||
PhotoCompressUtil.clearCompressCache()
|
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) {
|
override fun click(position: Int, userPhoto: UserPhoto, isOwner: Boolean) {
|
||||||
@@ -146,7 +112,10 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
|||||||
|
|
||||||
private fun initData(userInfo: UserInfo?) {
|
private fun initData(userInfo: UserInfo?) {
|
||||||
if (null != 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.tvAvatarAuditing.visibility = if (userInfo.isReview) View.VISIBLE else View.GONE
|
||||||
binding.ivAvatarAuditing.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")
|
val birth = TimeUtil.getChinaDateTimeString(userInfo.birth, "yyyy-MM-dd")
|
||||||
@@ -170,8 +139,8 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
|||||||
|
|
||||||
//cp 设置获取
|
//cp 设置获取
|
||||||
UserModel.get().getUserInfoDetail(userId).compose(bindToLifecycle()).doOnSuccess {
|
UserModel.get().getUserInfoDetail(userId).compose(bindToLifecycle()).doOnSuccess {
|
||||||
setSwitchView(binding.swCpShow,it?.data?.relationUserVO?.showCpAvatar?:false)
|
setSwitchView(binding.swCpShow, it?.data?.relationUserVO?.showCpAvatar ?: false)
|
||||||
setSwitchView(binding.swCpAnim,it?.data?.relationUserVO?.showCpAnim?:false)
|
setSwitchView(binding.swCpAnim, it?.data?.relationUserVO?.showCpAnim ?: false)
|
||||||
}.subscribe()
|
}.subscribe()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -259,6 +228,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
|||||||
}
|
}
|
||||||
selectAvatarType()
|
selectAvatarType()
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.tv_birth -> {
|
R.id.tv_birth -> {
|
||||||
if (mUserInfo != null) {
|
if (mUserInfo != null) {
|
||||||
var year = TimeUtils.getYear(
|
var year = TimeUtils.getYear(
|
||||||
@@ -283,21 +253,25 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
|||||||
show(supportFragmentManager, "DATEPICKER_TAG_1")
|
show(supportFragmentManager, "DATEPICKER_TAG_1")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.tv_nick -> UIHelper.showModifyInfoAct(
|
R.id.tv_nick -> UIHelper.showModifyInfoAct(
|
||||||
this@UserInfoModifyActivity,
|
this@UserInfoModifyActivity,
|
||||||
Method.NICK,
|
Method.NICK,
|
||||||
ModifyInfoActivity.NICK_MODIFY
|
ModifyInfoActivity.NICK_MODIFY
|
||||||
)
|
)
|
||||||
|
|
||||||
R.id.ll_desc -> UIHelper.showModifyInfoAct(
|
R.id.ll_desc -> UIHelper.showModifyInfoAct(
|
||||||
this@UserInfoModifyActivity,
|
this@UserInfoModifyActivity,
|
||||||
Method.DESC,
|
Method.DESC,
|
||||||
ModifyInfoActivity.CONTENT_MODIFY
|
ModifyInfoActivity.CONTENT_MODIFY
|
||||||
)
|
)
|
||||||
|
|
||||||
R.id.layout_photos -> UserModifyPhotosActivity.startForResult(
|
R.id.layout_photos -> UserModifyPhotosActivity.startForResult(
|
||||||
this@UserInfoModifyActivity,
|
this@UserInfoModifyActivity,
|
||||||
userId,
|
userId,
|
||||||
Method.PHOTO
|
Method.PHOTO
|
||||||
)
|
)
|
||||||
|
|
||||||
R.id.layout_area -> {
|
R.id.layout_area -> {
|
||||||
dialogManager.showProgressDialog(
|
dialogManager.showProgressDialog(
|
||||||
this@UserInfoModifyActivity,
|
this@UserInfoModifyActivity,
|
||||||
@@ -319,7 +293,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
|||||||
setAction {
|
setAction {
|
||||||
val find = areaList.find { data -> data.name == it }
|
val find = areaList.find { data -> data.name == it }
|
||||||
if (find != null) {
|
if (find != null) {
|
||||||
reportArea(it,find.id)
|
reportArea(it, find.id)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}.show(this@UserInfoModifyActivity)
|
}.show(this@UserInfoModifyActivity)
|
||||||
@@ -332,32 +306,34 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.swCpAnim -> {
|
R.id.swCpAnim -> {
|
||||||
postUpDateCpSwitch(binding.swCpAnim,UserInfoConstants.CpSet.cpAnim)
|
postUpDateCpSwitch(binding.swCpAnim, UserInfoConstants.CpSet.cpAnim)
|
||||||
}
|
}
|
||||||
|
|
||||||
R.id.swCpShow -> {
|
R.id.swCpShow -> {
|
||||||
postUpDateCpSwitch(binding.swCpShow,UserInfoConstants.CpSet.cpAvatar)
|
postUpDateCpSwitch(binding.swCpShow, UserInfoConstants.CpSet.cpAvatar)
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {}
|
else -> {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//post update set
|
//post update set
|
||||||
private fun postUpDateCpSwitch(view: ImageView,type:Int){
|
private fun postUpDateCpSwitch(view: ImageView, type: Int) {
|
||||||
val tag = view.tag
|
val tag = view.tag
|
||||||
if (tag != null && tag is Boolean){
|
if (tag != null && tag is Boolean) {
|
||||||
val tagVal = !tag
|
val tagVal = !tag
|
||||||
UserModel.get().userCpSettingUpdate(type,tagVal)
|
UserModel.get().userCpSettingUpdate(type, tagVal)
|
||||||
.compose(bindToLifecycle())
|
.compose(bindToLifecycle())
|
||||||
.doOnSuccess {
|
.doOnSuccess {
|
||||||
setSwitchView(view,tagVal,true)
|
setSwitchView(view, tagVal, true)
|
||||||
}.subscribe()
|
}.subscribe()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set view
|
// set view
|
||||||
private fun setSwitchView(view: ImageView, on:Boolean,notify:Boolean=false){
|
private fun setSwitchView(view: ImageView, on: Boolean, notify: Boolean = false) {
|
||||||
view.setImageResource(if (on) R.drawable.ic_user_edit_sw_on else R.drawable.ic_user_edit_sw_off)
|
view.setImageResource(if (on) R.drawable.ic_user_edit_sw_on else R.drawable.ic_user_edit_sw_off)
|
||||||
view.tag = on
|
view.tag = on
|
||||||
if (notify) {
|
if (notify) {
|
||||||
@@ -366,7 +342,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun reportArea(area: String, id:Long) {
|
private fun reportArea(area: String, id: Long) {
|
||||||
binding.tvArea.text = area
|
binding.tvArea.text = area
|
||||||
dialogManager.showProgressDialog(
|
dialogManager.showProgressDialog(
|
||||||
this@UserInfoModifyActivity,
|
this@UserInfoModifyActivity,
|
||||||
@@ -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() {
|
private fun selectAvatarType() {
|
||||||
val list = ArrayList<ButtonItem>()
|
val list = ArrayList<ButtonItem>()
|
||||||
@@ -457,31 +389,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun checkStoragePermission() {
|
private fun checkStoragePermission() {
|
||||||
|
PhotoPickActivity.start(this, if (isGif) PhotoPickActivity.GIF else PhotoPickActivity.IMG)
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getNowTime(): String {
|
private fun getNowTime(): String {
|
||||||
@@ -492,9 +400,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
|||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
super.onActivityResult(requestCode, resultCode, data)
|
||||||
if (requestCode == REQUEST_CODE_STORAGE) {
|
if (resultCode == RESULT_OK) {
|
||||||
checkStoragePermission()
|
|
||||||
} else if (resultCode == RESULT_OK) {
|
|
||||||
when (requestCode) {
|
when (requestCode) {
|
||||||
Method.NICK -> {
|
Method.NICK -> {
|
||||||
data?.let {
|
data?.let {
|
||||||
@@ -511,6 +417,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
|||||||
.subscribe(userInfoUpdateObserver)
|
.subscribe(userInfoUpdateObserver)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Method.DESC -> {
|
Method.DESC -> {
|
||||||
data?.let {
|
data?.let {
|
||||||
dialogManager.showProgressDialog(
|
dialogManager.showProgressDialog(
|
||||||
@@ -526,6 +433,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
|||||||
.subscribe(userInfoUpdateObserver)
|
.subscribe(userInfoUpdateObserver)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Method.PHOTO -> {
|
Method.PHOTO -> {
|
||||||
data?.let {
|
data?.let {
|
||||||
val isChanged =
|
val isChanged =
|
||||||
@@ -534,29 +442,32 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
|
|||||||
.subscribe(userInfoUpdateObserver)
|
.subscribe(userInfoUpdateObserver)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER -> data?.let {
|
|
||||||
val photos = PhotoProvider.getResultPhotoList(it)
|
PhotoPickActivity.PICK_ACT_RESULT -> {
|
||||||
if (!photos.isNullOrEmpty()) {
|
val uri = data?.data
|
||||||
val photo = photos[0]
|
if (uri != null) {
|
||||||
|
val fileWith = if (isGif) ".gif" else ".jpg"
|
||||||
|
mUri =
|
||||||
|
Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}$fileWith")
|
||||||
if (isGif) {
|
if (isGif) {
|
||||||
mUri?.let {
|
if (MyUriUtils.isGif(context, uri)) {
|
||||||
if (MyUriUtils.isGif(context,photo.uri)){
|
val isCopy = MyUriUtils.copyFileToUrl(this, uri, mUri!!)
|
||||||
val isCopy = MyUriUtils.copyFileToUrl(this,photo.uri, it)
|
if (isCopy) {
|
||||||
if (isCopy) {
|
onActivityResult(UCrop.REQUEST_CROP, RESULT_OK, null)
|
||||||
onActivityResult(UCrop.REQUEST_CROP,RESULT_OK,null)
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
ToastUtils.show(R.string.error_file_type)
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
ToastUtils.show(R.string.error_file_type)
|
||||||
}
|
}
|
||||||
} else {
|
} 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 {
|
UCrop.REQUEST_CROP -> mUri?.path?.let {
|
||||||
try {
|
try {
|
||||||
mJob?.cancel()
|
mJob?.cancel()
|
||||||
|
@@ -1,59 +1,46 @@
|
|||||||
package com.chwl.app.ui.user.activity
|
package com.chwl.app.ui.user.activity
|
||||||
|
|
||||||
import android.Manifest
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.provider.Settings
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.GridView
|
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 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.R
|
||||||
import com.chwl.app.application.App
|
import com.chwl.app.application.App
|
||||||
|
import com.chwl.app.base.PhotoPickActivity
|
||||||
import com.chwl.app.base.TitleBar
|
import com.chwl.app.base.TitleBar
|
||||||
import com.chwl.app.common.util.BitmapUtil
|
import com.chwl.app.common.util.BitmapUtil
|
||||||
import com.chwl.app.ui.user.adapter.UserModifyPhotosAdapter
|
import com.chwl.app.ui.user.adapter.UserModifyPhotosAdapter
|
||||||
import com.chwl.app.ui.user.adapter.UserModifyPhotosAdapter.PhotoItemClickListener
|
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.file.FileModel
|
||||||
import com.chwl.core.user.UserModel
|
import com.chwl.core.user.UserModel
|
||||||
import com.chwl.core.user.bean.UserInfo
|
import com.chwl.core.user.bean.UserInfo
|
||||||
import com.chwl.core.user.bean.UserPhoto
|
import com.chwl.core.user.bean.UserPhoto
|
||||||
import com.chwl.core.utils.CoreLogger
|
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.core.utils.net.BeanObserver
|
||||||
import com.chwl.library.common.file.FileHelper
|
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.PhotoCompressCallback
|
||||||
import com.chwl.library.common.util.PhotoCompressUtil
|
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.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 kotlinx.coroutines.Job
|
||||||
import java.io.FileNotFoundException
|
import java.io.FileNotFoundException
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.Date
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by chenran on 2017/7/24.
|
* Created by chenran on 2017/7/24.
|
||||||
*/
|
*/
|
||||||
class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener {
|
||||||
EasyPermissions.PermissionCallbacks {
|
|
||||||
private var userId: Long = 0
|
private var userId: Long = 0
|
||||||
private var userInfo: UserInfo? = null
|
private var userInfo: UserInfo? = null
|
||||||
private var photoGridView: GridView? = null
|
private var photoGridView: GridView? = null
|
||||||
@@ -64,7 +51,6 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
|||||||
private var mUri: Uri? = null
|
private var mUri: Uri? = null
|
||||||
private var mJob: Job? = null
|
private var mJob: Job? = null
|
||||||
|
|
||||||
var pickMedia : ActivityResultLauncher<PickVisualMediaRequest>?=null
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val FLAG_CHANGE = "isChanged"
|
const val FLAG_CHANGE = "isChanged"
|
||||||
@@ -104,14 +90,6 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
|||||||
if (userInfo != null) {
|
if (userInfo != null) {
|
||||||
updateView()
|
updateView()
|
||||||
}
|
}
|
||||||
|
|
||||||
//todo do photoPick
|
|
||||||
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
|
||||||
uri?.let {
|
|
||||||
crop(it, 0, mUri)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun initView() {
|
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() {
|
private fun checkStoragePermission() {
|
||||||
|
PhotoPickActivity.start(this@UserModifyPhotosActivity, PhotoPickActivity.IMG)
|
||||||
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
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getNowTime(): String {
|
private fun getNowTime(): String {
|
||||||
@@ -278,17 +180,20 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
|
|||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
super.onActivityResult(requestCode, resultCode, data)
|
super.onActivityResult(requestCode, resultCode, data)
|
||||||
if (requestCode == REQUEST_CODE_STORAGE) {
|
if (resultCode == RESULT_OK) {
|
||||||
checkStoragePermission()
|
|
||||||
} else if (resultCode == RESULT_OK) {
|
|
||||||
when (requestCode) {
|
when (requestCode) {
|
||||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER -> data?.let {
|
|
||||||
val photos = PhotoProvider.getResultPhotoList(data) ?: return
|
PhotoPickActivity.PICK_ACT_RESULT -> data?.data?.let { uri ->
|
||||||
if (photos.isNotEmpty()) {
|
mUri =
|
||||||
val photo = photos[0]
|
Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg")
|
||||||
crop(photo.uri, photo.size, mUri)
|
val isCopy =
|
||||||
|
MyUriUtils.copyFileToUrl(this@UserModifyPhotosActivity, uri, mUri!!)
|
||||||
|
if (isCopy) {
|
||||||
|
crop(mUri, 0, mUri)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
UCrop.REQUEST_CROP -> mUri?.path?.let {
|
UCrop.REQUEST_CROP -> mUri?.path?.let {
|
||||||
try {
|
try {
|
||||||
mJob?.cancel()
|
mJob?.cancel()
|
||||||
|
@@ -1,13 +1,8 @@
|
|||||||
|
|
||||||
package com.chwl.app.community.publish.view;
|
package com.chwl.app.community.publish.view;
|
||||||
|
|
||||||
import static androidx.core.content.ContentProviderCompat.requireContext;
|
|
||||||
|
|
||||||
import android.Manifest;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
@@ -21,37 +16,19 @@ import android.widget.LinearLayout;
|
|||||||
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout;
|
||||||
import android.widget.TextView;
|
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.annotation.NonNull;
|
||||||
import androidx.core.app.ActivityOptionsCompat;
|
|
||||||
import androidx.recyclerview.widget.GridLayoutManager;
|
import androidx.recyclerview.widget.GridLayoutManager;
|
||||||
import androidx.recyclerview.widget.RecyclerView;
|
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.R;
|
||||||
import com.chwl.app.base.BaseMvpActivity;
|
import com.chwl.app.base.BaseMvpActivity;
|
||||||
|
import com.chwl.app.base.PhotoPickActivity;
|
||||||
import com.chwl.app.common.widget.dialog.DialogManager;
|
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.ImageAdapter;
|
||||||
import com.chwl.app.community.publish.presenter.PublishPresenter;
|
import com.chwl.app.community.publish.presenter.PublishPresenter;
|
||||||
import com.chwl.app.community.utils.ObjectTypeHelper;
|
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.app.ui.widget.recyclerview.decoration.GridSpacingItemDecoration;
|
||||||
import com.chwl.core.Constants;
|
import com.chwl.core.Constants;
|
||||||
import com.chwl.core.auth.AuthModel;
|
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.miniworld.model.MiniWorldModel;
|
||||||
import com.chwl.core.user.UserModel;
|
import com.chwl.core.user.UserModel;
|
||||||
import com.chwl.core.user.bean.UserInfo;
|
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.SharedPreferenceUtils;
|
||||||
import com.chwl.core.utils.net.DontWarnObserver;
|
import com.chwl.core.utils.net.DontWarnObserver;
|
||||||
import com.chwl.library.base.factory.CreatePresenter;
|
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.PhotoCompressUtil;
|
||||||
import com.chwl.library.common.util.PhotosCompressCallback;
|
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.ResUtil;
|
||||||
import com.chwl.library.utils.SingleToastUtil;
|
import com.chwl.library.utils.SingleToastUtil;
|
||||||
import com.example.matisse.internal.entity.CustomItem;
|
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.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -80,8 +60,6 @@ import java.util.concurrent.TimeUnit;
|
|||||||
|
|
||||||
import io.reactivex.Single;
|
import io.reactivex.Single;
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||||
import kotlin.Unit;
|
|
||||||
import kotlin.jvm.functions.Function1;
|
|
||||||
import kotlinx.coroutines.Job;
|
import kotlinx.coroutines.Job;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -89,7 +67,7 @@ import kotlinx.coroutines.Job;
|
|||||||
*/
|
*/
|
||||||
@CreatePresenter(PublishPresenter.class)
|
@CreatePresenter(PublishPresenter.class)
|
||||||
public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresenter>
|
public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresenter>
|
||||||
implements IPublishView, WorldsChooseFrg.ChooseWorldCallback, EasyPermissions.PermissionCallbacks,
|
implements IPublishView, WorldsChooseFrg.ChooseWorldCallback,
|
||||||
View.OnClickListener {
|
View.OnClickListener {
|
||||||
|
|
||||||
private final static String KEY_SP_ORIGINAL_IMAGE = "key_sp_original_image";
|
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 Job mJob = null;
|
||||||
|
|
||||||
|
|
||||||
private ActivityResultLauncher<PickVisualMediaRequest> pickMedia;
|
|
||||||
|
|
||||||
public static void start(DialogManager manager, long worldId) {
|
public static void start(DialogManager manager, long worldId) {
|
||||||
if (beforeStart(manager)) {
|
if (beforeStart(manager)) {
|
||||||
return;
|
return;
|
||||||
@@ -194,70 +170,6 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
|
|||||||
// }
|
// }
|
||||||
rlChooseGroup.setVisibility(View.GONE);
|
rlChooseGroup.setVisibility(View.GONE);
|
||||||
flGroup.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() {
|
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
|
@Override
|
||||||
public void onPublishSuccess() {
|
public void onPublishSuccess() {
|
||||||
@@ -663,75 +479,79 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
|
|||||||
StatusBarUtil.StatusBarLightMode(this);
|
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() {
|
private void checkStoragePermission() {
|
||||||
|
PhotoPickActivity.start(this, PhotoPickActivity.IMG);
|
||||||
|
}
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= 29){
|
@Override
|
||||||
if (pickMedia != null){
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||||
DialogUtil.INSTANCE.getDialog(this,new EasyAlertDialogHelper.OnDialogActionListener() {
|
super.onActivityResult(requestCode, resultCode, data);
|
||||||
@Override
|
if (resultCode == RESULT_OK) {
|
||||||
public void doCancelAction() {}
|
switch (requestCode) {
|
||||||
@Override
|
case PhotoPickActivity.PICK_ACT_RESULT:
|
||||||
public void doOkAction() {
|
if (data == null) {
|
||||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true);
|
return;
|
||||||
pickMedia.launch(new PickVisualMediaRequest.Builder().setMediaType(ActivityResultContracts.PickVisualMedia.ImageOnly.INSTANCE).build());
|
|
||||||
}
|
}
|
||||||
});
|
Uri uri = data.getData();
|
||||||
}
|
if (uri != null && uri.getPath() != null) {
|
||||||
}else{
|
|
||||||
if (!EasyPermissions.hasPermissions(this, Manifest.permission.READ_EXTERNAL_STORAGE)) {
|
if (MyUriUtils.INSTANCE.isGif(context, uri)) {
|
||||||
EasyPermissions.requestPermissions(
|
ToastUtils.show(R.string.error_file_type);
|
||||||
this,
|
return;
|
||||||
getString(R.string.permission_storage_rationale),
|
}
|
||||||
PERMISSION_CODE_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE
|
|
||||||
);
|
File file = MyUriUtils.INSTANCE.copyFile(PublishActivity.this, uri);
|
||||||
} else {
|
if (file != null) {
|
||||||
PhotoProvider.photoProvider(
|
LogUtil.e("选择 file = " + file.getName());
|
||||||
this,
|
LogUtil.e("选择 file = " + file.getPath());
|
||||||
maxSelect - uploadList.size(),
|
|
||||||
true,
|
if (mJob != null) {
|
||||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER,
|
mJob.cancel(null);
|
||||||
true,
|
}
|
||||||
true
|
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);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -5,16 +5,17 @@ import android.database.Cursor
|
|||||||
import android.graphics.BitmapFactory
|
import android.graphics.BitmapFactory
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import androidx.activity.result.ActivityResultCallback
|
import android.provider.OpenableColumns
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileOutputStream
|
import java.io.FileOutputStream
|
||||||
|
|
||||||
object MyUriUtils {
|
object MyUriUtils {
|
||||||
|
|
||||||
fun getName(context: Context, uri: Uri) : String?{
|
|
||||||
var fileName:String?=null
|
fun getName(context: Context, uri: Uri): String? {
|
||||||
|
var fileName: String? = null
|
||||||
val projection = arrayOf(MediaStore.MediaColumns.DISPLAY_NAME)
|
val projection = arrayOf(MediaStore.MediaColumns.DISPLAY_NAME)
|
||||||
val cursor : Cursor ? = context.contentResolver.query(
|
val cursor: Cursor? = context.contentResolver.query(
|
||||||
uri,
|
uri,
|
||||||
projection,
|
projection,
|
||||||
null,
|
null,
|
||||||
@@ -24,7 +25,8 @@ object MyUriUtils {
|
|||||||
try {
|
try {
|
||||||
cursor?.use {
|
cursor?.use {
|
||||||
if (it.moveToFirst()) {
|
if (it.moveToFirst()) {
|
||||||
fileName = it.getString(it.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME))
|
fileName =
|
||||||
|
it.getString(it.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
@@ -32,19 +34,19 @@ object MyUriUtils {
|
|||||||
return fileName
|
return fileName
|
||||||
}
|
}
|
||||||
|
|
||||||
fun copyFile(context: Context, uri: Uri) : File?{
|
fun copyFile(context: Context, uri: Uri): File? {
|
||||||
val fileName = getName(context, uri)?:"defName.jpg"
|
val fileName = getName(context, uri) ?: "defName.jpg"
|
||||||
|
|
||||||
val outPutDir = context.getExternalFilesDir(null)?:return null
|
val outPutDir = context.getExternalFilesDir(null) ?: return null
|
||||||
|
|
||||||
val outPutFile = File(outPutDir,fileName)
|
val outPutFile = File(outPutDir, fileName)
|
||||||
|
|
||||||
if (!outPutDir.exists()) {
|
if (!outPutDir.exists()) {
|
||||||
outPutDir.mkdirs()
|
outPutDir.mkdirs()
|
||||||
}
|
}
|
||||||
|
|
||||||
context.contentResolver.openInputStream(uri)?.use { inS->
|
context.contentResolver.openInputStream(uri)?.use { inS ->
|
||||||
FileOutputStream(outPutFile).use{ outS->
|
FileOutputStream(outPutFile).use { outS ->
|
||||||
inS.copyTo(outS)
|
inS.copyTo(outS)
|
||||||
}
|
}
|
||||||
return outPutFile
|
return outPutFile
|
||||||
@@ -52,7 +54,7 @@ object MyUriUtils {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getFileType(context: Context, uri: Uri) : String {
|
fun getFileType(context: Context, uri: Uri): String {
|
||||||
var type = ""
|
var type = ""
|
||||||
context.contentResolver?.let {
|
context.contentResolver?.let {
|
||||||
type = it.getType(uri).toString()
|
type = it.getType(uri).toString()
|
||||||
@@ -60,14 +62,35 @@ object MyUriUtils {
|
|||||||
return type
|
return type
|
||||||
}
|
}
|
||||||
|
|
||||||
fun isGif(context: Context, uri: Uri) :Boolean{
|
fun getFileSize(context: Context, uri: Uri): Long {
|
||||||
return getFileType(context,uri) == "image/gif"
|
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 copyFileToUrl(context: Context, uri: Uri,outUri:Uri) : Boolean{
|
|
||||||
|
fun isGif(context: Context, uri: Uri): Boolean {
|
||||||
|
return getFileType(context, uri) == "image/gif"
|
||||||
|
}
|
||||||
|
|
||||||
|
fun copyFileToUrl(context: Context, uri: Uri, outUri: Uri): Boolean {
|
||||||
val contentResolver = context.contentResolver
|
val contentResolver = context.contentResolver
|
||||||
contentResolver?.openInputStream(uri)?.use { uriStream ->
|
contentResolver?.openInputStream(uri)?.use { uriStream ->
|
||||||
contentResolver?.openOutputStream(outUri,"wt")?.use { outStream->
|
contentResolver?.openOutputStream(outUri, "wt")?.use { outStream ->
|
||||||
uriStream.copyTo(outStream)
|
uriStream.copyTo(outStream)
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
@@ -75,29 +98,29 @@ object MyUriUtils {
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getFileInfo(file: File) : MutableList<String>?{
|
fun getFileInfo(file: File): MutableList<String>? {
|
||||||
var width = 0
|
var width = 0
|
||||||
var height = 0
|
var height = 0
|
||||||
var minType = "image/jpeg"
|
var minType = "image/jpeg"
|
||||||
var data : MutableList<String> ?= null
|
var data: MutableList<String>? = null
|
||||||
|
|
||||||
BitmapFactory.Options().apply {
|
BitmapFactory.Options().apply {
|
||||||
inJustDecodeBounds = true
|
inJustDecodeBounds = true
|
||||||
BitmapFactory.decodeFile(file.absolutePath,this)
|
BitmapFactory.decodeFile(file.absolutePath, this)
|
||||||
width = outWidth
|
width = outWidth
|
||||||
height = outHeight
|
height = outHeight
|
||||||
minType = outMimeType
|
minType = outMimeType
|
||||||
}.let {
|
}.let {
|
||||||
data =mutableListOf(width.toString(),height.toString(),minType)
|
data = mutableListOf(width.toString(), height.toString(), minType)
|
||||||
}
|
}
|
||||||
return data
|
return data
|
||||||
}
|
}
|
||||||
|
|
||||||
fun copyFile(file:File,dir:File){
|
fun copyFile(file: File, dir: File) {
|
||||||
if (!dir.exists()) {
|
if (!dir.exists()) {
|
||||||
dir.mkdirs()
|
dir.mkdirs()
|
||||||
}
|
}
|
||||||
file.copyTo(dir,true)
|
file.copyTo(dir, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,12 +1,13 @@
|
|||||||
package com.netease.nim.uikit.business.session.actions
|
package com.netease.nim.uikit.business.session.actions
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
import android.content.Intent
|
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 android.text.TextUtils
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
|
||||||
import com.chwl.library.common.application.BaseApp
|
import com.chwl.library.common.application.BaseApp
|
||||||
import com.chwl.library.common.base.BaseDialogFragment
|
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.PhotoCompressUtil
|
||||||
import com.chwl.library.common.util.PhotosCompressCallback
|
import com.chwl.library.common.util.PhotosCompressCallback
|
||||||
import com.chwl.library.utils.ResUtil
|
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.business.session.helper.SendImageHelper
|
||||||
import com.netease.nim.uikit.common.activity.NimPhotoPickActivity
|
import com.netease.nim.uikit.common.activity.NimPhotoPickActivity
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.io.FileOutputStream
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Created by zhoujianghua on 2015/7/31.
|
* Created by zhoujianghua on 2015/7/31.
|
||||||
*/
|
*/
|
||||||
abstract class PickImageActionNew protected constructor(
|
abstract class PickImageActionNew protected constructor(
|
||||||
iconResId: Int,
|
iconResId: Int, titleId: Int, private val multiSelect: Boolean
|
||||||
titleId: Int,
|
|
||||||
private val multiSelect: Boolean
|
|
||||||
) : BaseAction(iconResId, titleId) {
|
) : BaseAction(iconResId, titleId) {
|
||||||
|
|
||||||
companion object {
|
|
||||||
private const val REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111 // 从相册中选择
|
|
||||||
}
|
|
||||||
|
|
||||||
protected abstract fun onPicked(file: File)
|
protected abstract fun onPicked(file: File)
|
||||||
|
|
||||||
@@ -37,29 +34,21 @@ abstract class PickImageActionNew protected constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun checkStoragePermission() {
|
private fun checkStoragePermission() {
|
||||||
if (Build.VERSION.SDK_INT >= 29) {
|
NimPhotoPickActivity.start(activity, NimPhotoPickActivity.IMG)
|
||||||
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)
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
if (resultCode == BaseDialogFragment.RESULT_OK) {
|
if (resultCode == BaseDialogFragment.RESULT_OK) {
|
||||||
when (requestCode) {
|
when (requestCode) {
|
||||||
REQUEST_CODE_OPEN_PHOTO_PROVIDER -> {
|
NimPhotoPickActivity.PICK_ACT_RESULT and 0xff -> {
|
||||||
if (data == null) return
|
if (data == null) return
|
||||||
PhotoProvider.getResultPathListAsync(data) { list ->
|
val uri = data.data
|
||||||
val paths = list?.map { it.path }?.toMutableList() ?: ArrayList()
|
if (uri != null) {
|
||||||
if (paths.isEmpty()) {
|
val file = copyFile(activity, uri)
|
||||||
SingleToastUtil.showToastShort(R.string.picker_image_error)
|
file?.path?.let { path ->
|
||||||
} else {
|
val paths = mutableListOf(path)
|
||||||
PhotoCompressUtil.compress(
|
PhotoCompressUtil.compress(BaseApp.getContext(),
|
||||||
BaseApp.getContext(),
|
|
||||||
paths,
|
paths,
|
||||||
PhotoCompressUtil.getCompressCachePath(),
|
PhotoCompressUtil.getCompressCachePath(),
|
||||||
object : PhotosCompressCallback {
|
object : PhotosCompressCallback {
|
||||||
@@ -68,7 +57,11 @@ abstract class PickImageActionNew protected constructor(
|
|||||||
for (path in compressedImgList) {
|
for (path in compressedImgList) {
|
||||||
val file = File(path)
|
val file = File(path)
|
||||||
if (TextUtils.isEmpty(path) || !file.exists()) {
|
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
|
return
|
||||||
}
|
}
|
||||||
onPicked(file)
|
onPicked(file)
|
||||||
@@ -78,26 +71,62 @@ abstract class PickImageActionNew protected constructor(
|
|||||||
override fun onFail(e: Throwable) {
|
override fun onFail(e: Throwable) {
|
||||||
SingleToastUtil.showToastShort(R.string.picker_image_error)
|
SingleToastUtil.showToastShort(R.string.picker_image_error)
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 发送图片
|
* 发送图片
|
||||||
*/
|
*/
|
||||||
private fun sendImageAfterSelfImagePicker(compressedImgList: List<String>) {
|
private fun sendImageAfterSelfImagePicker(compressedImgList: List<String>) {
|
||||||
SendImageHelper.sendImageAfterSelfImagePickerNew(
|
SendImageHelper.sendImageAfterSelfImagePickerNew(
|
||||||
activity,
|
activity, compressedImgList
|
||||||
compressedImgList
|
|
||||||
) { file, isOrig ->
|
) { file, isOrig ->
|
||||||
onPicked(file)
|
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,108 +1,160 @@
|
|||||||
package com.netease.nim.uikit.common.activity
|
package com.netease.nim.uikit.common.activity
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.database.Cursor
|
import android.database.Cursor
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.provider.MediaStore
|
import android.provider.MediaStore
|
||||||
import android.view.Window
|
import androidx.activity.ComponentActivity
|
||||||
import android.view.WindowManager
|
|
||||||
import androidx.activity.result.ActivityResultLauncher
|
import androidx.activity.result.ActivityResultLauncher
|
||||||
import androidx.activity.result.PickVisualMediaRequest
|
import androidx.activity.result.PickVisualMediaRequest
|
||||||
import androidx.activity.result.contract.ActivityResultContracts
|
import androidx.activity.result.contract.ActivityResultContracts
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
|
||||||
import com.chwl.library.common.util.SPUtils
|
import com.chwl.library.common.util.SPUtils
|
||||||
import com.chwl.library.constants.ConstantsLib
|
import com.chwl.library.constants.ConstantsLib
|
||||||
import com.chwl.library.easyphoto.EasyPhotos
|
import com.chwl.library.easypermisssion.EasyPermissions
|
||||||
import com.chwl.library.easyphoto.models.album.entity.Photo
|
|
||||||
import com.chwl.library.easyphoto.setting.Setting
|
|
||||||
import com.chwl.library.utils.ResUtil
|
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.R
|
||||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialog
|
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialog
|
||||||
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
import com.netease.nim.uikit.common.ui.dialog.EasyAlertDialogHelper
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.FileOutputStream
|
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 pickMedia: ActivityResultLauncher<PickVisualMediaRequest>? = null
|
||||||
|
var pickMediaForDocument: ActivityResultLauncher<Array<String>>? = null
|
||||||
|
var mMediaType = IMG
|
||||||
|
var dialog: EasyAlertDialog? = null
|
||||||
|
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
setContentView(R.layout.nim_photo_pick_activity)
|
// setContentView(R.layout.activity_photo_pick)
|
||||||
|
window?.setDimAmount(0f)
|
||||||
// requestWindowFeature(Window.FEATURE_NO_TITLE)
|
mMediaType = intent?.getStringExtra(PICK_ACT_TYPE) ?: IMG
|
||||||
// window.setFlags(
|
|
||||||
// WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
|
||||||
// WindowManager.LayoutParams.FLAG_FULLSCREEN
|
|
||||||
// )
|
|
||||||
|
|
||||||
//todo do photoPick
|
|
||||||
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
pickMedia = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) { uri ->
|
||||||
if (uri != null) {
|
if (uri != null) {
|
||||||
val file = copyFile(this@NimPhotoPickActivity, uri)
|
val intent = Intent()
|
||||||
if (file != null) {
|
intent.setData(uri)
|
||||||
val resultList = ArrayList<Photo>()
|
setResult(RESULT_OK, intent)
|
||||||
val data = Intent()
|
// 接收方 用 intent.data 来获取
|
||||||
resultList.add(Photo(file.path))
|
finish()
|
||||||
data.putParcelableArrayListExtra(EasyPhotos.RESULT_PHOTOS, resultList)
|
|
||||||
setResult(RESULT_OK, data)
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
finish()
|
finish()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
var isFirst = true
|
pickMediaForDocument = registerForActivityResult(ActivityResultContracts.OpenDocument()) {
|
||||||
var dialog : EasyAlertDialog ?=null
|
if (it != null) {
|
||||||
override fun onResume() {
|
val intent = Intent()
|
||||||
super.onResume()
|
intent.setData(it)
|
||||||
|
setResult(RESULT_OK, intent)
|
||||||
if (!isFirst) {
|
|
||||||
finish()
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!SPUtils.getBoolean(ConstantsLib.Key.Permissions_Img,false)){
|
|
||||||
dialog = EasyAlertDialogHelper.createOkCancelDiolag(
|
|
||||||
this,
|
|
||||||
null,
|
|
||||||
ResUtil.getString(
|
|
||||||
R.string.dialot_permission_tips_nim,
|
|
||||||
ResUtil.getString(R.string.app_name)
|
|
||||||
),
|
|
||||||
ResUtil.getString(R.string.Allow_nim),
|
|
||||||
ResUtil.getString(R.string.No_nim),
|
|
||||||
false,
|
|
||||||
object : EasyAlertDialogHelper.OnDialogActionListener {
|
|
||||||
override fun doCancelAction() {
|
|
||||||
finish()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun doOkAction() {
|
|
||||||
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img,true)
|
|
||||||
pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
|
|
||||||
}
|
|
||||||
})
|
|
||||||
if (dialog?.isShowing == false) {
|
|
||||||
dialog?.show()
|
|
||||||
}
|
}
|
||||||
}else{
|
finish()
|
||||||
pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
|
|
||||||
}
|
}
|
||||||
isFirst = false
|
|
||||||
|
|
||||||
|
|
||||||
|
checkStoragePermission()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun getName(context: Context, uri: Uri) : String?{
|
|
||||||
var fileName:String?=null
|
private fun checkStoragePermission() {
|
||||||
|
if (Build.VERSION.SDK_INT >= 29) {
|
||||||
|
|
||||||
|
if (!SPUtils.getBoolean(ConstantsLib.Key.Permissions_Img, false)) {
|
||||||
|
dialog = EasyAlertDialogHelper.createOkCancelDiolag(
|
||||||
|
this,
|
||||||
|
null,
|
||||||
|
ResUtil.getString(
|
||||||
|
R.string.dialot_permission_tips_nim,
|
||||||
|
ResUtil.getString(R.string.app_name)
|
||||||
|
),
|
||||||
|
ResUtil.getString(R.string.Allow_nim),
|
||||||
|
ResUtil.getString(R.string.No_nim),
|
||||||
|
false,
|
||||||
|
object : EasyAlertDialogHelper.OnDialogActionListener {
|
||||||
|
override fun doCancelAction() {
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun doOkAction() {
|
||||||
|
SPUtils.putBoolean(ConstantsLib.Key.Permissions_Img, true)
|
||||||
|
PickVisualMediaRequest(
|
||||||
|
ActivityResultContracts.PickVisualMedia.SingleMimeType(
|
||||||
|
mMediaType
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
if (dialog?.isShowing == false) {
|
||||||
|
dialog?.show()
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
pickMedia?.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
|
||||||
|
}
|
||||||
|
|
||||||
|
} 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
|
||||||
val projection = arrayOf(MediaStore.MediaColumns.DISPLAY_NAME)
|
val projection = arrayOf(MediaStore.MediaColumns.DISPLAY_NAME)
|
||||||
val cursor : Cursor? = context.contentResolver.query(
|
val cursor: Cursor? = context.contentResolver.query(
|
||||||
uri,
|
uri,
|
||||||
projection,
|
projection,
|
||||||
null,
|
null,
|
||||||
@@ -112,7 +164,8 @@ class NimPhotoPickActivity : AppCompatActivity() {
|
|||||||
try {
|
try {
|
||||||
cursor?.use {
|
cursor?.use {
|
||||||
if (it.moveToFirst()) {
|
if (it.moveToFirst()) {
|
||||||
fileName = it.getString(it.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME))
|
fileName =
|
||||||
|
it.getString(it.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
@@ -120,19 +173,19 @@ class NimPhotoPickActivity : AppCompatActivity() {
|
|||||||
return fileName
|
return fileName
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun copyFile(context: Context, uri: Uri) : File?{
|
private fun copyFile(context: Context, uri: Uri): File? {
|
||||||
val fileName = getName(context, uri)?:"defName.jpg"
|
val fileName = getName(context, uri) ?: "defName.jpg"
|
||||||
|
|
||||||
val outPutDir = context.getExternalFilesDir(null)?:return null
|
val outPutDir = context.getExternalFilesDir(null) ?: return null
|
||||||
|
|
||||||
val outPutFile = File(outPutDir,fileName)
|
val outPutFile = File(outPutDir, fileName)
|
||||||
|
|
||||||
if (!outPutDir.exists()) {
|
if (!outPutDir.exists()) {
|
||||||
outPutDir.mkdirs()
|
outPutDir.mkdirs()
|
||||||
}
|
}
|
||||||
|
|
||||||
context.contentResolver.openInputStream(uri)?.use { inS->
|
context.contentResolver.openInputStream(uri)?.use { inS ->
|
||||||
FileOutputStream(outPutFile).use{ outS->
|
FileOutputStream(outPutFile).use { outS ->
|
||||||
inS.copyTo(outS)
|
inS.copyTo(outS)
|
||||||
}
|
}
|
||||||
return outPutFile
|
return outPutFile
|
||||||
|
Reference in New Issue
Block a user