Linjiajia
2023-08-27 1df231fd6aafa221aef3532d069c7e27d4331be7
app/src/main/java/com/application/zhangshi_app_android/ui/function/FamilyMemorabiliaDetailActivity.java
@@ -1,12 +1,16 @@
package com.application.zhangshi_app_android.ui.function;
import android.graphics.drawable.ColorDrawable;
import android.view.LayoutInflater;
import android.app.Activity;
import android.content.ClipData;
import android.content.Intent;
import android.net.Uri;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.PopupWindow;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.recyclerview.widget.GridLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
@@ -14,27 +18,28 @@
import com.android.app_base.base.adapter.BaseRVAdapter;
import com.android.app_base.base.dialog.BaseDialog;
import com.android.app_base.base.dialog.UIDialog;
import com.android.app_base.base.view.BaseActivity;
import com.android.app_base.base.dialog.WaitDialog;
import com.android.app_base.manager.UserManager;
import com.android.app_base.utils.GetFilePathFromUri;
import com.android.app_base.utils.ScreenSizeUtils;
import com.android.app_base.utils.Utils;
import com.application.zhangshi_app_android.BR;
import com.application.zhangshi_app_android.R;
import com.application.zhangshi_app_android.adapter.ImageRvAdapter;
import com.application.zhangshi_app_android.adapter.ElectronicFileAddAdapter;
import com.application.zhangshi_app_android.bean.FamilyMemorabiliaBean;
import com.application.zhangshi_app_android.bean.LittleDoctorBean;
import com.application.zhangshi_app_android.databinding.ActivityFamilyMemorabiliaDetailBinding;
import com.application.zhangshi_app_android.ui.DLBaseActivity;
import com.github.gzuliyujiang.wheelpicker.DatePicker;
import com.github.gzuliyujiang.wheelpicker.OptionPicker;
import com.github.gzuliyujiang.wheelpicker.contract.OnDatePickedListener;
import com.github.gzuliyujiang.wheelpicker.contract.OnOptionPickedListener;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.interfaces.OnResultCallbackListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.function.Consumer;
/**
@@ -45,8 +50,9 @@
public class FamilyMemorabiliaDetailActivity extends DLBaseActivity<ActivityFamilyMemorabiliaDetailBinding, FamilyMemorabiliaDetailActivityViewModel> {
    private int type;// 0 查看可修改删除 1 新增 2 直接修改
    private PopupWindow popupWindow;
    private ImageRvAdapter adapter;
    private ElectronicFileAddAdapter adapter;
    private BaseDialog mWaitDialog;
    private ActivityResultLauncher<Intent> activityResultLauncher;
    @Override
    public int getLayoutId() {
        return R.layout.activity_family_memorabilia_detail;
@@ -63,54 +69,79 @@
        if (type == 0 || type == 2){
            FamilyMemorabiliaBean bean = (FamilyMemorabiliaBean) getIntent().getSerializableExtra("bean");
            if (bean !=null){
                viewModel.getBeanMutableLiveData().setValue(bean);
                viewModel.getBeanLiveData().setValue(bean);
            }
        }
    }
    @Override
    public void initView() {
        adapter = new ImageRvAdapter(this);
        adapter = new ElectronicFileAddAdapter(this);
        GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
        binding.rvImage.setLayoutManager(gridLayoutManager);
        binding.rvImage.setNestedScrollingEnabled(false);
        View footerView = View.inflate(this,R.layout.item_image_footer,null);
        binding.rvImage.addFooterView(footerView);
        binding.rvImage.requestLayout();
        footerView.setOnClickListener(new View.OnClickListener() {
        adapter.setItemAndAddClickListener(new ElectronicFileAddAdapter.OnItemAndAddClickListener() {
            @Override
            public void onClick(View v) {
                UserManager.getInstance().selectImage(getSelfActivity(), 9, new OnResultCallbackListener<LocalMedia>() {
            public void onItemClick(View v, int position) {
            }
            @Override
            public void onAddClick() {
                OptionPicker picker = getOptionPicker(Arrays.asList("图片视频","其他文件"));
                picker.setTitle("选择文件类型");
                picker.setOnOptionPickedListener(new OnOptionPickedListener() {
                    @Override
                    public void onResult(ArrayList<LocalMedia> result) {
                        if (result.size() == 0) return;
                        for (LocalMedia media : result) {
                            String path = media.getRealPath();
                            File file = new File(path);
                            if (file.exists()) {
                                viewModel.uploadFile(file);
                            }
                    public void onOptionPicked(int position, Object item) {
                        if (item.equals("图片视频")) {
                            UserManager.getInstance().selectImage(getSelfActivity(), 0,9, new OnResultCallbackListener<LocalMedia>() {
                                @Override
                                public void onResult(ArrayList<LocalMedia> result) {
                                    if (result.size() == 0) return;
                                    for (LocalMedia media : result) {
                                        String path = media.getRealPath();
                                        if (path!=null){
                                            viewModel.addUploadFile(path);
                                            FamilyMemorabiliaBean bean = viewModel.getBeanLiveData().getValue();
                                            if (bean !=null){
                                                List<String> urlList = Utils.splitString2List(bean.getUrl(),",");
                                                urlList.add(path);
                                                bean.setUrl(Utils.appendList2String(urlList,","));
                                            }
                                            viewModel.getBeanLiveData().setValue(bean);
                                        }
                                    }
                                }
                                @Override
                                public void onCancel() {
                                }
                            });
                        }else {
                            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
//                            Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
                            intent.setType("*/*"); // 限制文件类型
                            intent.addCategory(Intent.CATEGORY_OPENABLE); // 添加 CATEGORY_OPENABLE 分类,告诉系统要选择的内容可以被打开,这样系统会过滤掉不能被应用打开的文件,以提供更好的用户体验。
                            intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true); // 允许多选
                            activityResultLauncher.launch(intent);
                        }
                    }
                    @Override
                    public void onCancel() {
                    }
                });
                picker.show();
            }
        });
        adapter.setOnChildClickListener(R.id.iv_delete, new BaseRVAdapter.OnChildClickListener() {
            @Override
            public void onChildClick(RecyclerView recyclerView, View childView, int position) {
                FamilyMemorabiliaBean bean = viewModel.getBeanMutableLiveData().getValue();
                FamilyMemorabiliaBean bean = viewModel.getBeanLiveData().getValue();
                if (bean !=null){
                    List<String> urlList = Utils.splitString2List(bean.getUrl(),",");
                    urlList.remove(adapter.getItem(position));
                    bean.setUrl(Utils.appendList2String(urlList,","));
                }
                adapter.removeItem(position);
                viewModel.getBeanMutableLiveData().setValue(bean);
                viewModel.getBeanLiveData().setValue(bean);
            }
        });
        binding.rvImage.setAdapter(adapter);
@@ -169,6 +200,51 @@
            }
        });
        activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                if (result.getResultCode() == Activity.RESULT_OK) {
                    if (result.getData() == null){
                        return;
                    }
                    // 获取选中的多个文件的 URI
                    ClipData clipData = result.getData().getClipData();
                    if (clipData != null) {
                        int itemCount = clipData.getItemCount();
                        for (int i = 0; i < itemCount; i++) {
                            Uri uri = clipData.getItemAt(i).getUri();
                            // 使用选中的文件 URI 进行后续操作,比如读取文件内容等
                            String path = GetFilePathFromUri.getFileAbsolutePath(getSelfActivity(),uri);
                            if (path!=null){
                                viewModel.addUploadFile(path);
                                FamilyMemorabiliaBean bean = viewModel.getBeanLiveData().getValue();
                                if (bean !=null){
                                    List<String> urlList = Utils.splitString2List(bean.getUrl(),",");
                                    urlList.add(path);
                                    bean.setUrl(Utils.appendList2String(urlList,","));
                                }
                                viewModel.getBeanLiveData().setValue(bean);
                            }
                        }
                    }else {
                        // 获取选中的单个文件的 URI
                        Uri selectedFileUri = result.getData().getData();
                        String path = GetFilePathFromUri.getFileAbsolutePath(getSelfActivity(),selectedFileUri);
                        if (path!=null){
                            viewModel.addUploadFile(path);
                            FamilyMemorabiliaBean bean = viewModel.getBeanLiveData().getValue();
                            if (bean !=null){
                                List<String> urlList = Utils.splitString2List(bean.getUrl(),",");
                                urlList.add(path);
                                bean.setUrl(Utils.appendList2String(urlList,","));
                            }
                            viewModel.getBeanLiveData().setValue(bean);
                        }
                    }
                }
            }
        });
    }
    @Override
@@ -179,7 +255,7 @@
    @Override
    public void initLiveDataObserve() {
        viewModel.getBeanMutableLiveData().observe(this,bean -> {
        viewModel.getBeanLiveData().observe(this, bean -> {
            if (bean!=null){
                List<String> urlList = Utils.splitString2List(bean.getUrl(),",");
                adapter.setData(urlList);
@@ -196,22 +272,10 @@
                        viewModel.update();
                    });
                }
                binding.rvImage.getFooterViews().forEach(new Consumer<View>() {
                    @Override
                    public void accept(View view) {
                        view.setVisibility(View.VISIBLE);
                    }
                });
                setIsEdited(true);
            }else {
                binding.ivOperate.setOnClickListener(v -> {
                    popupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,85) +binding.ivOperate.getWidth(),0);
                });
                binding.rvImage.getFooterViews().forEach(new Consumer<View>() {
                    @Override
                    public void accept(View view) {
                        view.setVisibility(View.GONE);
                    }
                });
                setIsEdited(false);
            }
@@ -221,4 +285,26 @@
    public void setIsEdited(boolean isEdited){
        adapter.setIsEdited(isEdited);
    }
    @Override
    protected void dialogLoading() {
        if (mWaitDialog == null) {
            mWaitDialog = new WaitDialog.Builder(this)
                    // 消息文本可以不用填写
                    .setMessage("正在上传")
                    .create();
        }
        if (!mWaitDialog.isShowing()) {
            mWaitDialog.show();
        }
    }
    @Override
    protected void dialogDismiss() {
        if (mWaitDialog != null && mWaitDialog.isShowing()) {
            mWaitDialog.dismiss();
            mWaitDialog = null;
        }
    }
}