[Modify]动态页适配安卓10.0

This commit is contained in:
wushaocheng
2022-12-02 20:55:23 +08:00
parent 62702c9650
commit 7b25dfa1ef
5 changed files with 170 additions and 27 deletions

View File

@@ -9,7 +9,7 @@
android:icon="@mipmap/app_logo"
android:label="@string/app_name"
android:largeHeap="true"
android:requestLegacyExternalStorage="true"
android:requestLegacyExternalStorage="false"
android:resizeableActivity="true"
android:supportsRtl="true"
android:theme="@style/MyMaterialTheme"

View File

@@ -93,6 +93,7 @@ class UserInfoModifyActivity : BaseViewBindingActivity<ActivityUserInfoModifyBin
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
UserModel.get().getUserInfo(userId).subscribe(userInfoUpdateObserver)
PhotoCompressUtil.clearCompressCache()
}
override fun click(position: Int, userPhoto: UserPhoto, isOwner: Boolean) {

View File

@@ -78,6 +78,7 @@ class UserModifyPhotosActivity : TakePhotoActivity(), PhotoItemClickListener,
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_user_photos_modify)
PhotoCompressUtil.clearCompressCache()
initView()
mActivity = this
userId = intent.getLongExtra("userId", 0)

View File

@@ -1,9 +1,12 @@
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,10 +19,12 @@ 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;
@@ -32,8 +37,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.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;
@@ -48,12 +53,13 @@ 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.common.photo.PhotoProvider;
import com.yizhuan.xchat_android_library.common.util.PhotoCompressUtil;
import com.yizhuan.xchat_android_library.common.util.PhotosCompressCallback;
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.util.ArrayList;
@@ -65,15 +71,22 @@ 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<IPublishView, PublishPresenter>
implements IPublishView, WorldsChooseFrg.ChooseWorldCallback {
implements IPublishView, WorldsChooseFrg.ChooseWorldCallback, EasyPermissions.PermissionCallbacks {
private final static String KEY_SP_ORIGINAL_IMAGE = "key_sp_original_image";
private final static int PERMISSION_CODE_STORAGE = 12;
private final static int REQUEST_CODE_STORAGE = 42;
private final static int REQUEST_CODE_OPEN_PHOTO_PROVIDER = 111; // 从相册中选择
private final static int maxSelect = 9;
@BindView(R.id.rv_images)
RecyclerView rvImages;
@@ -113,6 +126,8 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
// 话题客态页进入(话题进入不让修改话题标签)
private boolean fromWorld;
private Job mJob = null;
public static void start(DialogManager manager, long worldId) {
if (beforeStart(manager)) {
return;
@@ -192,25 +207,26 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
imageAdapter.setOnItemClickListener((adapter, view, position) -> {
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<CustomItem>) uploadList,
position, new PagerOption().setDelete(true));
@@ -328,8 +344,56 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
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<String>, Unit>() {
@Override
public Unit invoke(List<String> list) {
if (list.isEmpty()) {
return null;
} else {
if (mJob != null) {
mJob.cancel(null);
}
mJob = PhotoCompressUtil.compress(PublishActivity.this, list,
PhotoCompressUtil.getCompressCachePath("publish")
, new PhotosCompressCallback() {
@Override
public void onSuccess(@NonNull ArrayList<String> compressedImgList) {
List<CustomItem> pathResult = new ArrayList<>();
for (String path : compressedImgList) {
pathResult.add(new CustomItem(path, CustomItem.IMAGE_NORMAL, "jpeg"));
}
if (pathResult.size() == 0) {
return;
}
LogUtil.print(pathResult);
uploadList.addAll(pathResult);
updateImagesData();
isOriginalImage = false;
LogUtil.print("isOriginalImage:" + isOriginalImage);
SharedPreferenceUtils.put(KEY_SP_ORIGINAL_IMAGE, isOriginalImage);
}
@Override
public void onFail(@NonNull Throwable e) {
toast(getString(R.string.picker_image_error));
}
}, 200, false, Constants.UPLOAD_IMAGE_MAX_SIZE, Constants.UPLOAD_IMAGE_MAX_FILE_LENGTH);
}
return null;
}
});
break;
case ConstantValue.CODE_CHOOSE_PHOTO:
String mimeType = Matisse.obtainMineResult(data);
List<CustomItem> pathResult = Matisse.obtainPathResult(data);
@@ -544,4 +608,81 @@ public class PublishActivity extends BaseMvpActivity<IPublishView, PublishPresen
StatusBarUtil.StatusBarLightMode(this);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
}
@Override
public void onPermissionsGranted(int requestCode, @NonNull List<String> perms) {
if (requestCode == PERMISSION_CODE_STORAGE) {
checkStoragePermission();
}
}
@Override
public void onPermissionsDenied(int requestCode, @NonNull List<String> perms) {
if (requestCode == PERMISSION_CODE_STORAGE) {
String requestTip = getString(R.string.permission_storage_denied);
CommonTipDialog mPrivacyDialog = new CommonTipDialog(context);
mPrivacyDialog.setTipMsg(requestTip);
mPrivacyDialog.setOkText(getString(R.string.room_perform_go_update));
mPrivacyDialog.setOnActionListener(new CommonTipDialog.OnActionListener() {
@Override
public void onOk() {
//同意跳到应用详情页面
Uri packageUri = Uri.parse("package:${packageName}");
Intent intent = new Intent(
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
packageUri
);
startActivityForResult(
intent, REQUEST_CODE_STORAGE
);
}
@Override
public void onCancel() {
CommonTipDialog.OnActionListener.super.onCancel();
//取消跳到应用详情页面
ToastUtils.show(getString(R.string.permission_storage_refused));
}
});
mPrivacyDialog.show();
}
}
private void checkStoragePermission() {
if (!EasyPermissions.hasPermissions(
this,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
)
) {
EasyPermissions.requestPermissions(
this,
getString(R.string.permission_storage_rationale),
PERMISSION_CODE_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE
);
} else {
PhotoProvider.photoProvider(
this,
maxSelect - uploadList.size(),
true,
REQUEST_CODE_OPEN_PHOTO_PROVIDER,
true
);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mJob != null) {
mJob.cancel(null);
}
}
}

View File

@@ -16,7 +16,7 @@ import java.io.File;
/**
* Created by hzxuwen on 2015/6/12.
*/
public class ImageAction extends PickImageAction {
public class ImageAction extends PickImageActionNew {
public ImageAction() {
super(R.drawable.chat_icon_photo, R.string.input_panel_photo, true);