package com.application.zhangshi_app_android.ui.function; import android.app.Activity; import android.content.ClipData; import android.content.Intent; import android.net.Uri; import android.view.View; 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.lifecycle.MutableLiveData; import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.android.app_base.base.BaseConfig; import com.android.app_base.base.adapter.BaseRVAdapter; import com.android.app_base.base.dialog.BaseDialog; 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.ElectronicFileAddAdapter; import com.application.zhangshi_app_android.bean.WebcastBean; import com.application.zhangshi_app_android.databinding.ActivityWebcastDetailBinding; 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.TimePicker; import com.github.gzuliyujiang.wheelpicker.contract.OnDatePickedListener; import com.github.gzuliyujiang.wheelpicker.contract.OnOptionPickedListener; import com.github.gzuliyujiang.wheelpicker.contract.OnTimePickedListener; import com.luck.picture.lib.entity.LocalMedia; import com.luck.picture.lib.interfaces.OnResultCallbackListener; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Locale; /** * @author Gss * @date 2023.03.25. 16:00 * @desc 直播申请 WebcastDetailActivity */ public class WebcastDetailActivity extends DLBaseActivity { private int type;// 0 查看可修改删除 1 新增 2 直接修改 private PopupWindow popupWindow; private MutableLiveData beanLiveData; private ElectronicFileAddAdapter adapter; private BaseDialog mWaitDialog; private ActivityResultLauncher activityResultLauncher; @Override public int getLayoutId() { return R.layout.activity_webcast_detail; } @Override public int getVariableId() { return BR.viewModel; } @Override public void initParam() { type = getIntent().getIntExtra(BaseConfig.EXTRA_TYPE,0); if (type == 0 || type == 2){ WebcastBean bean = (WebcastBean) getIntent().getSerializableExtra("bean"); if (bean !=null){ viewModel.getBeanLiveData().setValue(bean); } } } @Override public void initView() { adapter = new ElectronicFileAddAdapter(this); GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3); binding.rvImage.setLayoutManager(gridLayoutManager); binding.rvImage.setNestedScrollingEnabled(false); adapter.setItemAndAddClickListener(new ElectronicFileAddAdapter.OnItemAndAddClickListener() { @Override 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 onOptionPicked(int position, Object item) { if (item.equals("图片视频")) { UserManager.getInstance().selectImage(getSelfActivity(), 0,9, new OnResultCallbackListener() { @Override public void onResult(ArrayList result) { if (result.size() == 0) return; for (LocalMedia media : result) { String path = media.getRealPath(); if (path!=null){ viewModel.addUploadFile(path); WebcastBean bean = viewModel.getBeanLiveData().getValue(); if (bean !=null){ List 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); } } }); picker.show(); } }); adapter.setOnChildClickListener(R.id.iv_delete, new BaseRVAdapter.OnChildClickListener() { @Override public void onChildClick(RecyclerView recyclerView, View childView, int position) { WebcastBean bean = viewModel.getBeanLiveData().getValue(); if (bean !=null){ List urlList = Utils.splitString2List(bean.getUrl(),","); urlList.remove(adapter.getItem(position)); bean.setUrl(Utils.appendList2String(urlList,",")); } adapter.removeItem(position); viewModel.getBeanLiveData().setValue(bean); } }); binding.rvImage.setAdapter(adapter); if (type == 1){ viewModel.getTypeLiveData().setValue(true); binding.titleBar.setTitle("新增直播申请"); binding.ivOperate.setOnClickListener(v -> { viewModel.add(); }); }else if (type == 0){ popupWindow = initPopUpWindow(View.inflate(this,R.layout.pop_operate_delete,null)); popupWindow.getContentView().findViewById(R.id.tv_modify).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewModel.getTypeLiveData().postValue(true); popupWindow.dismiss(); } }); viewModel.getTypeLiveData().postValue(false); }else if (type == 2){ viewModel.getTypeLiveData().postValue(true); } binding.etStartTime.setOnClickListener(new View.OnClickListener() { private String datee; private String timee; @Override public void onClick(View v) { DatePicker picker = getDatePicker(); TimePicker picker2 = getTimePicker(); picker.setTitle("选择日期"); picker2.setTitle("选择时间"); picker.setOnDatePickedListener(new OnDatePickedListener() { @Override public void onDatePicked(int year, int month, int day) { String date = String.format(Locale.CHINA, "%d-%02d-%02d", year, month, day); datee = date; // 在日期选择后显示时间选择器 picker2.show(); } }); picker.show(); picker2.setOnTimePickedListener(new OnTimePickedListener() { @Override public void onTimePicked(int hour, int minute, int second) { String time = String.format(Locale.CHINA, "%d:%02d:%02d", hour, minute, second); timee = time; // 合并日期和时间并设置到编辑框 String starttime = datee + " " + timee; binding.etStartTime.setText(starttime); } }); } }); binding.etEndTime.setOnClickListener(new View.OnClickListener() { private String datee; private String timee; @Override public void onClick(View v) { DatePicker picker = getDatePicker(); TimePicker picker2 = getTimePicker(); picker.setTitle("选择日期"); picker2.setTitle("选择时间"); picker.setOnDatePickedListener(new OnDatePickedListener() { @Override public void onDatePicked(int year, int month, int day) { String date = String.format(Locale.CHINA, "%d-%02d-%02d", year, month, day); datee = date; // 在日期选择后显示时间选择器 picker2.show(); } }); picker.show(); picker2.setOnTimePickedListener(new OnTimePickedListener() { @Override public void onTimePicked(int hour, int minute, int second) { String time = String.format(Locale.CHINA, "%d:%02d:%02d", hour, minute, second); timee = time; // 合并日期和时间并设置到编辑框 String endtime = datee + " " + timee; binding.etEndTime.setText(endtime); } }); } }); activityResultLauncher = registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback() { @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); WebcastBean bean = viewModel.getBeanLiveData().getValue(); if (bean !=null){ List 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); WebcastBean bean = viewModel.getBeanLiveData().getValue(); if (bean !=null){ List urlList = Utils.splitString2List(bean.getUrl(),","); urlList.add(path); bean.setUrl(Utils.appendList2String(urlList,",")); } viewModel.getBeanLiveData().setValue(bean); } } } } }); } @Override public void initData() { // beanLiveData.setValue=WebcastBean; } @Override public void initLiveDataObserve() { viewModel.getBeanLiveData().observe(this, bean -> { if (bean!=null){ List urlList = Utils.splitString2List(bean.getUrl(),","); adapter.setData(urlList); } }); viewModel.getTypeLiveData().observe(this,operateType -> { if (operateType){ if (type == 1) { binding.ivOperate.setOnClickListener(v -> { viewModel.add(); }); } // else { // binding.ivOperate.setOnClickListener(v -> { // viewModel.update(); // }); // } setIsEdited(true); }else { binding.ivOperate.setOnClickListener(v -> { popupWindow.showAsDropDown(binding.ivOperate,-ScreenSizeUtils.dip2px(this,85) +binding.ivOperate.getWidth(),0); }); setIsEdited(false); } }); } 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; } } }