diff --git a/app/src/main/java/com/yizhuan/erban/common/util/PhotoCompressUtil.kt b/app/src/main/java/com/yizhuan/erban/common/util/PhotoCompressUtil.kt index e1cba7cb0..f4e377b8c 100644 --- a/app/src/main/java/com/yizhuan/erban/common/util/PhotoCompressUtil.kt +++ b/app/src/main/java/com/yizhuan/erban/common/util/PhotoCompressUtil.kt @@ -168,6 +168,7 @@ object PhotoCompressUtil { private fun getCompressLocationPath(tag: String): String { return "${FileHelper.getRootFilesDir(Environment.DIRECTORY_PICTURES).absolutePath}/compress/${tag}/" } + } interface PhotosCompressCallback { diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoModifyActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoModifyActivity.kt index fd7c58689..a36653d72 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoModifyActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/ui/user/UserInfoModifyActivity.kt @@ -44,7 +44,6 @@ import com.yizhuan.xchat_android_core.utils.Logger import com.yizhuan.xchat_android_library.easypermisssion.EasyPermissions import com.yizhuan.xchat_android_library.utils.ResUtil import com.yizhuan.xchat_android_library.utils.TimeUtils -import com.yizhuan.xchat_android_library.utils.log.MLog import io.reactivex.Completable import io.reactivex.SingleObserver import io.reactivex.disposables.Disposable @@ -303,18 +302,19 @@ class UserInfoModifyActivity : BaseViewBindingActivity data?.let { - val photos = PhotoProvider.getResultPhotoList(data) ?: return - if (photos.isNotEmpty()) { - val photo = photos[0] - crop(photo.uri, photo.size, mUri) + if (requestCode == REQUEST_CODE_STORAGE) { + checkStoragePermission() + } else if (resultCode == RESULT_OK) { + when (requestCode) { + Method.NICK -> { + data?.let { + dialogManager.showProgressDialog( + this@UserInfoModifyActivity, + ResUtil.getString(R.string.ui_user_userinfomodifyactivity_01) + ) + val stringExtra = it.getStringExtra(ModifyInfoActivity.CONTENT_NICK) + binding.tvNick.text = stringExtra + val user = UserInfo() + user.uid = AuthModel.get().currentUid + user.nick = stringExtra + UserModel.get().requestUpdateUserInfo(user) + .subscribe(userInfoUpdateObserver) + } } - } - UCrop.REQUEST_CROP -> mUri?.path?.let { - try { - mJob?.cancel() - mJob = PhotoCompressUtil.compress( - XChatApplication.gContext, - it, - PhotoCompressUtil.getCompressCachePath(), - object : PhotoCompressCallback { - @SuppressLint("CheckResult") - override fun onSuccess(compressedImg: String) { - dialogManager.showProgressDialog( - this@UserInfoModifyActivity, - ResUtil.getString(R.string.ui_user_userinfomodifyactivity_09) - ) - FileModel.get() - .uploadFile(compressedImg) - .compose(bindToLifecycle()) - .subscribe { url: String?, throwable: Throwable? -> - if (throwable != null) { - onUploadFail() - } else { - onUpload(url) - } - } - } + Method.DESC -> { + data?.let { + dialogManager.showProgressDialog( + this@UserInfoModifyActivity, + ResUtil.getString(R.string.ui_user_userinfomodifyactivity_02) + ) + val stringExtra = it.getStringExtra(ModifyInfoActivity.CONTENT) + setTvDesc(stringExtra) + val user = UserInfo() + user.uid = AuthModel.get().currentUid + user.userDesc = stringExtra + UserModel.get().requestUpdateUserInfo(user) + .subscribe(userInfoUpdateObserver) + } + } + Method.AUDIO -> {// 刷新声音资源 + data?.let { + // 传给上个页面 + setResult(RESULT_OK, it) - override fun onFail(e: Throwable) { - toast(e.message) - } - }, - mostCompressSize = IMAGE_MOST_COMPRESS_SIZE - ) - } catch (e: FileNotFoundException) { - Logger.error(TAG, e.message) + // 获取数据并刷新显示 + audioFileUrl = it.getStringExtra(RecordingVoiceActivity.AUDIO_FILE) + val audioDuration = it.getIntExtra(RecordingVoiceActivity.AUDIO_DURA, 0) + + // 更新用户信息 + val user = UserInfo() + user.uid = AuthModel.get().currentUid + user.userVoice = audioFileUrl + user.voiceDura = audioDuration + UserModel.get().requestUpdateUserInfo(user) + .subscribe(userInfoUpdateObserver) + } + } + Method.PHOTO -> { + data?.let { + val isChanged = + it.getBooleanExtra(UserModifyPhotosActivity.FLAG_CHANGE, false) + if (isChanged) UserModel.get().getUserInfo(userId) + .subscribe(userInfoUpdateObserver) + } + } + REQUEST_CODE_OPEN_PHOTO_PROVIDER -> data?.let { + val photos = PhotoProvider.getResultPhotoList(it) ?: return + if (photos.isNotEmpty()) { + val photo = photos[0] + crop(photo.uri, photo.size, mUri) + } + } + UCrop.REQUEST_CROP -> mUri?.path?.let { + try { + mJob?.cancel() + mJob = PhotoCompressUtil.compress( + this, + it, + PhotoCompressUtil.getCompressCachePath(), + object : PhotoCompressCallback { + @SuppressLint("CheckResult") + override fun onSuccess(compressedImg: String) { + dialogManager.showProgressDialog( + this@UserInfoModifyActivity, + ResUtil.getString(R.string.ui_user_userinfomodifyactivity_09) + ) + FileModel.get() + .uploadFile(compressedImg) + .compose(bindToLifecycle()) + .subscribe { url: String?, throwable: Throwable? -> + if (throwable != null) { + onUploadFail() + } else { + onUpload(url) + } + } + } + + override fun onFail(e: Throwable) { + toast(e.message) + } + }, + mostCompressSize = IMAGE_MOST_COMPRESS_SIZE + ) + } catch (e: FileNotFoundException) { + Logger.error(TAG, e.message) + } } } } diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosActivity.kt b/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosActivity.kt index 66cf31e45..26c490384 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosActivity.kt +++ b/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosActivity.kt @@ -1,47 +1,40 @@ package com.yizhuan.erban.ui.user import android.Manifest -import com.jph.takephoto.app.TakePhotoActivity -import com.yizhuan.erban.ui.user.UserModifyPhotosAdapter.PhotoItemClickListener -import android.widget.GridView -import com.yizhuan.erban.ui.user.UserModifyPhotosAdapter -import com.yizhuan.erban.ui.user.UserModifyPhotosActivity -import android.os.Bundle -import com.yizhuan.erban.R -import com.yizhuan.xchat_android_core.user.UserModel -import com.yizhuan.xchat_android_core.user.bean.UserPhoto -import com.yizhuan.xchat_android_library.utils.ResUtil -import com.yizhuan.erban.base.TitleBar -import com.yizhuan.xchat_android_library.utils.file.JXFileUtils -import com.jph.takephoto.compress.CompressConfig -import com.yizhuan.erban.common.permission.PermissionActivity.CheckPermListener -import com.yizhuan.xchat_android_core.utils.net.BeanObserver -import android.content.Intent -import com.yizhuan.erban.ui.user.ShowPhotoActivity import android.annotation.SuppressLint -import com.jph.takephoto.model.TResult -import com.yizhuan.xchat_android_core.file.FileModel import android.app.Activity +import android.content.Intent import android.graphics.Bitmap import android.net.Uri +import android.os.Bundle import android.provider.Settings import android.view.View +import android.widget.GridView 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.yizhuan.erban.R import com.yizhuan.erban.application.XChatApplication +import com.yizhuan.erban.base.TitleBar import com.yizhuan.erban.common.file.FileHelper import com.yizhuan.erban.common.photo.PhotoProvider import com.yizhuan.erban.common.util.BitmapUtil import com.yizhuan.erban.common.util.PhotoCompressCallback import com.yizhuan.erban.common.util.PhotoCompressUtil +import com.yizhuan.erban.ui.user.UserModifyPhotosActivity +import com.yizhuan.erban.ui.user.UserModifyPhotosAdapter.PhotoItemClickListener import com.yizhuan.erban.ui.widget.dialog.CommonTipDialog +import com.yizhuan.xchat_android_core.file.FileModel +import com.yizhuan.xchat_android_core.user.UserModel import com.yizhuan.xchat_android_core.user.bean.UserInfo +import com.yizhuan.xchat_android_core.user.bean.UserPhoto +import com.yizhuan.xchat_android_core.utils.net.BeanObserver import com.yizhuan.xchat_android_library.easypermisssion.EasyPermissions -import com.yizhuan.xchat_android_library.utils.log.MLog +import com.yizhuan.xchat_android_library.utils.ResUtil import kotlinx.coroutines.Job import java.io.FileNotFoundException import java.text.SimpleDateFormat @@ -50,7 +43,8 @@ import java.util.* /** * Created by chenran on 2017/7/24. */ -class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener, EasyPermissions.PermissionCallbacks { +class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener, + EasyPermissions.PermissionCallbacks { private var userId: Long = 0 private var userInfo: UserInfo? = null private var photoGridView: GridView? = null @@ -218,18 +212,19 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener, Ea } private fun checkStoragePermission() { - if (context?.let { - EasyPermissions.hasPermissions( - it, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE - ) - } == false) { - context?.getString(R.string.permission_storage_rationale)?.let { - EasyPermissions.requestPermissions( - this, it, PERMISSION_CODE_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, - Manifest.permission.READ_EXTERNAL_STORAGE - ) - } + if (!EasyPermissions.hasPermissions( + this, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE + ) + ) { + EasyPermissions.requestPermissions( + this, + getString(R.string.permission_storage_rationale), + PERMISSION_CODE_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE + ) } else { mUri = Uri.parse("file://${FileHelper.getRootCacheDir()?.path}/${getNowTime()}.jpg") PhotoProvider.photoProvider( @@ -247,52 +242,52 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener, Ea override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) - if (resultCode != RESULT_OK) { - MLog.info(this, "return is not ok,resultCode=%d", resultCode) - return - } - when (requestCode) { - REQUEST_CODE_OPEN_PHOTO_PROVIDER -> data?.let { - val photos = PhotoProvider.getResultPhotoList(data) ?: return - if (photos.isNotEmpty()) { - val photo = photos[0] - crop(photo.uri, photo.size, mUri) + if (requestCode == REQUEST_CODE_STORAGE) { + checkStoragePermission() + } else if (resultCode == RESULT_OK) { + when (requestCode) { + REQUEST_CODE_OPEN_PHOTO_PROVIDER -> data?.let { + val photos = PhotoProvider.getResultPhotoList(data) ?: return + if (photos.isNotEmpty()) { + val photo = photos[0] + crop(photo.uri, photo.size, mUri) + } } - } - UCrop.REQUEST_CROP -> mUri?.path?.let { - try { - mJob?.cancel() - mJob = PhotoCompressUtil.compress( - XChatApplication.gContext, - it, - PhotoCompressUtil.getCompressCachePath(), - object : PhotoCompressCallback { - @SuppressLint("CheckResult") - override fun onSuccess(compressedImg: String) { - dialogManager.showProgressDialog( - this@UserModifyPhotosActivity, - ResUtil.getString(R.string.ui_user_userinfomodifyactivity_09) - ) - FileModel.get() - .uploadFile(compressedImg) - .compose(bindToLifecycle()) - .subscribe { url: String?, throwable: Throwable? -> - if (throwable != null) { - onUploadFail() - } else { - onUpload(url) + UCrop.REQUEST_CROP -> mUri?.path?.let { + try { + mJob?.cancel() + mJob = PhotoCompressUtil.compress( + XChatApplication.gContext, + it, + PhotoCompressUtil.getCompressCachePath(), + object : PhotoCompressCallback { + @SuppressLint("CheckResult") + override fun onSuccess(compressedImg: String) { + dialogManager.showProgressDialog( + this@UserModifyPhotosActivity, + ResUtil.getString(R.string.ui_user_userinfomodifyactivity_09) + ) + FileModel.get() + .uploadFile(compressedImg) + .compose(bindToLifecycle()) + .subscribe { url: String?, throwable: Throwable? -> + if (throwable != null) { + onUploadFail() + } else { + onUpload(url) + } } - } - } + } - override fun onFail(e: Throwable) { - toast(e.message) - } - }, - mostCompressSize = IMAGE_MOST_COMPRESS_SIZE - ) - } catch (e: FileNotFoundException) { - com.yizhuan.xchat_android_core.utils.Logger.error(TAG, e.message) + override fun onFail(e: Throwable) { + toast(e.message) + } + }, + mostCompressSize = IMAGE_MOST_COMPRESS_SIZE + ) + } catch (e: FileNotFoundException) { + com.yizhuan.xchat_android_core.utils.Logger.error(TAG, e.message) + } } } } @@ -347,7 +342,7 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener, Ea .withMaxResultSize(800, 800).start(this) } - private fun onUpload(url: String?) { + private fun onUpload(url: String?) { Logger.d("onUploadPhoto:$url") UserModel.get().requestAddPhoto(url) .compose(bindUntilEvent(ActivityEvent.DESTROY)) diff --git a/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosAdapter.java b/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosAdapter.java index ad4201fb8..13f784205 100644 --- a/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosAdapter.java +++ b/app/src/main/java/com/yizhuan/erban/ui/user/UserModifyPhotosAdapter.java @@ -90,7 +90,7 @@ public class UserModifyPhotosAdapter extends BaseAdapter{ UserPhoto userPhoto = photoUrls.get(position-1); GlideApp.with(mContext) .load(userPhoto.getPhotoUrl()) - .placeholder(R.drawable.default_avatar) + .placeholder(R.drawable.default_cover) .dontAnimate() .into(holder.imageView); if (isEditMode) { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cbb6b8197..099df2029 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -4960,8 +4960,8 @@ 所屬廳 送礼物 去設置 - 請您再次考慮一下授予PEKO存儲空間權限,否則PEKO將無法正常加載您本地的文件內容。 - 請您再次考慮一下授予PEKO攝像頭權限,否則PEKO將無法取得您拍攝的內容。 + 請您再次考慮授予PEKO存儲空間權限,否則PEKO將無法正常加載您本地的文件內容。 + 請您再次考慮授予PEKO攝像頭權限,否則PEKO將無法取得您拍攝的內容。 為了能正常加載您本地的文件內容,請前往應用權限設置界面打開存儲空間權限。 為了能取得您拍攝的內容,請前往應用權限設置界面打開攝像頭權限。 您已拒絕提供存儲空間權限,PEKO將無法正常加載您本地的文件內容。 diff --git a/app/src/module_album/java/com/zhihu/matisse/internal/entity/CustomItem.java b/app/src/module_album/java/com/zhihu/matisse/internal/entity/CustomItem.java index 77faba0ed..2296967f6 100644 --- a/app/src/module_album/java/com/zhihu/matisse/internal/entity/CustomItem.java +++ b/app/src/module_album/java/com/zhihu/matisse/internal/entity/CustomItem.java @@ -36,6 +36,14 @@ public class CustomItem implements Parcelable, Serializable { private String format; + public String getPath(){ + return path; + } + + public int getFileType(){ + return fileType; + } + public boolean isImage() { return fileType == IMAGE_NORMAL; } diff --git a/app/src/module_community/java/com/yizhuan/erban/community/publish/view/PublishActivity.java b/app/src/module_community/java/com/yizhuan/erban/community/publish/view/PublishActivity.java index 5c8e23d9a..8faabe530 100644 --- a/app/src/module_community/java/com/yizhuan/erban/community/publish/view/PublishActivity.java +++ b/app/src/module_community/java/com/yizhuan/erban/community/publish/view/PublishActivity.java @@ -3,7 +3,9 @@ package com.yizhuan.erban.community.publish.view; import android.Manifest; import android.content.Context; import android.content.Intent; +import android.net.Uri; import android.os.Bundle; +import android.provider.Settings; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; @@ -16,15 +18,20 @@ import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; +import androidx.annotation.NonNull; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; 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 com.yizhuan.erban.R; import com.yizhuan.erban.base.BaseMvpActivity; +import com.yizhuan.erban.common.photo.PhotoProvider; +import com.yizhuan.erban.common.util.PhotoCompressUtil; +import com.yizhuan.erban.common.util.PhotosCompressCallback; import com.yizhuan.erban.common.widget.dialog.ChooseWorldsDialog; import com.yizhuan.erban.common.widget.dialog.DialogManager; import com.yizhuan.erban.community.ConstantValue; @@ -32,9 +39,8 @@ import com.yizhuan.erban.community.photo.BigPhotoActivity; import com.yizhuan.erban.community.photo.PagerOption; import com.yizhuan.erban.community.publish.ImageAdapter; import com.yizhuan.erban.community.publish.presenter.PublishPresenter; -import com.yizhuan.erban.community.utils.Glide4Engine; import com.yizhuan.erban.community.utils.ObjectTypeHelper; -import com.yizhuan.erban.ui.login.BindPhoneActivity; +import com.yizhuan.erban.ui.widget.dialog.CommonTipDialog; import com.yizhuan.erban.ui.widget.recyclerview.decoration.GridSpacingItemDecoration; import com.yizhuan.xchat_android_constants.XChatConstants; import com.yizhuan.xchat_android_core.Constants; @@ -49,15 +55,15 @@ import com.yizhuan.xchat_android_core.user.bean.UserInfo; import com.yizhuan.xchat_android_core.utils.SharedPreferenceUtils; import com.yizhuan.xchat_android_core.utils.net.DontWarnObserver; import com.yizhuan.xchat_android_library.base.factory.CreatePresenter; +import com.yizhuan.xchat_android_library.easypermisssion.EasyPermissions; import com.yizhuan.xchat_android_library.utils.ResUtil; import com.yizhuan.xchat_android_library.utils.SingleToastUtil; -import com.yizhuan.xchat_android_library.utils.config.BasicConfig; import com.zhihu.matisse.Matisse; -import com.zhihu.matisse.MimeType; -import com.zhihu.matisse.internal.entity.CaptureStrategy; import com.zhihu.matisse.internal.entity.CustomItem; +import java.text.SimpleDateFormat; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; @@ -66,14 +72,21 @@ import butterknife.ButterKnife; import butterknife.OnClick; import io.reactivex.Single; import io.reactivex.android.schedulers.AndroidSchedulers; +import kotlin.Unit; +import kotlin.jvm.functions.Function1; +import kotlinx.coroutines.Job; /** * create by lvzebiao @2019/11/11 */ @CreatePresenter(PublishPresenter.class) -public class PublishActivity extends BaseMvpActivity implements IPublishView, WorldsChooseFrg.ChooseWorldCallback { +public class PublishActivity extends BaseMvpActivity + implements IPublishView, WorldsChooseFrg.ChooseWorldCallback, EasyPermissions.PermissionCallbacks { private final static String KEY_SP_ORIGINAL_IMAGE = "key_sp_original_image"; + private final static int PERMISSION_CODE_STORAGE = 12; + private final static int REQUEST_CODE_STORAGE = 42; + private final static int REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111; // 从相册中选择 @BindView(R.id.rv_images) RecyclerView rvImages; @@ -113,6 +126,8 @@ public class PublishActivity extends BaseMvpActivity { PublishItem item = imageShowList.get(position); if (item.isAddItem()) { - checkPermission(() -> { - CaptureStrategy captureStrategy = new CaptureStrategy(true, context.getPackageName()+".fileprovider", - BasicConfig.INSTANCE.getImageDir().getAbsolutePath()); - int maxCanSelect = 9 - uploadList.size(); - Matisse.from(PublishActivity.this) - .choose(MimeType.ofImage()) - .showSingleMediaType(true) - .capture(true) - .spanCount(4) - .captureStrategy(captureStrategy) - .countable(true) - .maxSelectable(maxCanSelect) - .originalEnable(false) - .maxOriginalSize(10) - .imageEngine(new Glide4Engine()) - .setType(2) - .setOriginalImagee(isOriginalImage) - .forResult(ConstantValue.CODE_CHOOSE_PHOTO); - }, R.string.ask_storage, Manifest.permission.READ_EXTERNAL_STORAGE); - +// checkPermission(() -> { +// CaptureStrategy captureStrategy = new CaptureStrategy(true, context.getPackageName() + ".fileprovider", +// BasicConfig.INSTANCE.getImageDir().getAbsolutePath()); +// int maxCanSelect = 9 - uploadList.size(); +// Matisse.from(PublishActivity.this) +// .choose(MimeType.ofImage()) +// .showSingleMediaType(true) +// .capture(true) +// .spanCount(4) +// .captureStrategy(captureStrategy) +// .countable(true) +// .maxSelectable(maxCanSelect) +// .originalEnable(false) +// .maxOriginalSize(10) +// .imageEngine(new Glide4Engine()) +// .setType(2) +// .setOriginalImagee(isOriginalImage) +// .forResult(ConstantValue.CODE_CHOOSE_PHOTO); +// }, R.string.ask_storage, Manifest.permission.READ_EXTERNAL_STORAGE); + checkStoragePermission(); } else { BigPhotoActivity.startCanDelete(PublishActivity.this, (ArrayList) uploadList, position, new PagerOption().setDelete(true)); @@ -315,7 +330,7 @@ public class PublishActivity extends BaseMvpActivity 0) { MiniWorldModel.getInstance().getWorldDetailInfo(String.valueOf(worldId), - String.valueOf(AuthModel.get().getCurrentUid())) + String.valueOf(AuthModel.get().getCurrentUid())) .compose(bindUntilEvent(ActivityEvent.DESTROY)) .doOnSuccess(info -> { if (info != null && !TextUtils.isEmpty(info.getName())) { @@ -329,8 +344,45 @@ public class PublishActivity extends BaseMvpActivity, Unit>() { + @Override + public Unit invoke(List list) { + List paths = list; + if (paths.isEmpty()) { + return null; + } else { + if (mJob != null) { + mJob.cancel(null); + } else { + mJob = PhotoCompressUtil.compress(PublishActivity.this, paths, + PhotoCompressUtil.getCompressCachePath("publish") + , new PhotosCompressCallback() { + @Override + public void onSuccess(@NonNull ArrayList compressedImgList) { + List pathResult = compressedImgList; + LogUtil.print(pathResult); + } + + @Override + public void onFail(@NonNull Throwable e) { + + } + }, 200, false, Constants.UPLOAD_IMAGE_MAX_SIZE, Constants.UPLOAD_IMAGE_MAX_FILE_LENGTH); + } + } + return null; + } + }); + break; + case ConstantValue.CODE_CHOOSE_PHOTO: String mimeType = Matisse.obtainMineResult(data); List pathResult = Matisse.obtainPathResult(data); @@ -544,4 +596,75 @@ public class PublishActivity extends BaseMvpActivity perms) { + if (requestCode == PERMISSION_CODE_STORAGE) { + checkStoragePermission(); + } + } + + @Override + public void onPermissionsDenied(int requestCode, @NonNull List perms) { + if (requestCode == PERMISSION_CODE_STORAGE) { + String requestTip = getString(R.string.permission_storage_denied); + CommonTipDialog mPrivacyDialog = new CommonTipDialog(context); + mPrivacyDialog.setTipMsg(requestTip); + mPrivacyDialog.setOkText(getString(R.string.room_perform_go_update)); + mPrivacyDialog.setOnActionListener(new CommonTipDialog.OnActionListener() { + @Override + public void onOk() { + //同意跳到应用详情页面 + Uri packageUri = Uri.parse("package:${packageName}"); + Intent intent = new Intent( + Settings.ACTION_APPLICATION_DETAILS_SETTINGS, + packageUri + ); + startActivityForResult( + intent, REQUEST_CODE_STORAGE + ); + } + + @Override + public void onCancel() { + CommonTipDialog.OnActionListener.super.onCancel(); + //取消跳到应用详情页面 + ToastUtils.show(getString(R.string.permission_storage_refused)); + } + }); + mPrivacyDialog.show(); + } + } + + private void checkStoragePermission() { + if (!EasyPermissions.hasPermissions( + this, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE + ) + ) { + EasyPermissions.requestPermissions( + this, + getString(R.string.permission_storage_rationale), + PERMISSION_CODE_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.READ_EXTERNAL_STORAGE + ); + } else { + PhotoProvider.photoProvider( + this, + 9, + true, + REQUEST_CODE_OPEN_PHOTO_PROVIDER, + true + ); + } + } + } diff --git a/app/src/module_community/res/values/strings.xml b/app/src/module_community/res/values/strings.xml index 57fd7a169..dd73b1c29 100644 --- a/app/src/module_community/res/values/strings.xml +++ b/app/src/module_community/res/values/strings.xml @@ -1,6 +1,6 @@ - 圖文發布 + 圖文發佈 發布 記錄你此刻生活,分享給有趣的人看... 發表評論 diff --git a/library/src/module_easypermission/res/drawable/bg_common_cancel.xml b/library/src/module_easypermission/res/drawable/bg_common_cancel.xml new file mode 100644 index 000000000..760a11915 --- /dev/null +++ b/library/src/module_easypermission/res/drawable/bg_common_cancel.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/library/src/module_easypermission/res/drawable/bg_common_confirm_normal.xml b/library/src/module_easypermission/res/drawable/bg_common_confirm_normal.xml new file mode 100644 index 000000000..060b3dcd8 --- /dev/null +++ b/library/src/module_easypermission/res/drawable/bg_common_confirm_normal.xml @@ -0,0 +1,13 @@ + + + + + + + \ No newline at end of file diff --git a/library/src/module_easypermission/res/drawable/shape_white_20dp_round.xml b/library/src/module_easypermission/res/drawable/shape_white_20dp_round.xml new file mode 100644 index 000000000..db705e3b3 --- /dev/null +++ b/library/src/module_easypermission/res/drawable/shape_white_20dp_round.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/library/src/module_easypermission/res/layout/layout_permission_rationale_dialog.xml b/library/src/module_easypermission/res/layout/layout_permission_rationale_dialog.xml index 1ce5520e5..447742d3c 100644 --- a/library/src/module_easypermission/res/layout/layout_permission_rationale_dialog.xml +++ b/library/src/module_easypermission/res/layout/layout_permission_rationale_dialog.xml @@ -3,49 +3,51 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="vertical"> + android:background="@drawable/shape_white_20dp_round" + android:orientation="vertical" + tools:background="@color/black_transparent_10">