package com.yc.studytooler;
import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.OpenableColumns;
import android.provider.Settings;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.VideoView;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.lifecycle.ViewModelProvider;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.github.barteksc.pdfviewer.PDFView;
import com.yc.studytooler.adapter.AddPostImageAdapter;
import com.yc.studytooler.bean.MediaItem;
import com.yc.studytooler.bean.SubjectContent;
import com.yc.studytooler.utils.DateUtils;
import com.yc.studytooler.viewmodel.SubjectContentViewModel;
import com.yc.studytooler.viewmodel.SubjectContentViewModelFactory;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* @ClassName AddPostActivity
* @Descripttion TODO
* @Author chaoyue
* @Date 2024/4/22 14:53
* @VERSION 1.0
*/
public class AddPostActivity extends AppCompatActivity {
private static final int PERMISSION_CODE_STORAGE = 101;
private static final int PERMISSION_CODE_AUDIO = 102; // 定义一个常量作为请求码
private static final int PERMISSION_CODE_PDF = 1000;
private Toolbar tl_head;
private Spinner spinnerMediaType;
private FrameLayout frameMediaInput;
private String user_name;
private String semester_name;
private String subject_name;
private Date punch_date;
private SubjectContentViewModelFactory subjectContentViewModelFactory;
private SubjectContentViewModel subjectContentViewModel;
//添加图片的适配器
private AddPostImageAdapter adapter;
//存储内容类型
private String post_content_type;
//存储纯文本数据
private String post_content_text;
//存储非文本的留言
private String post_title;
//存储音频的文件标题
private String post_audio_title;
//存储pdf文件的文件标题
private String post_pdf_title;
//存储图片的集合
private List<Uri> imageUris;
//存储音频的路径
private String audioFilePath;
//存储视频的路径
private List<Uri> videoFileUris;
//存储PDF文件
private List<Uri> pdfFileUris;
private ActivityResultLauncher<String> Launcher_images;
private ActivityResultLauncher<String[]> Launcher_PDF;
private ActivityResultLauncher<String> mLauncher_video;
//音频
private TextView tvAudioPath;
private Button btnRecord;
private Button btnStop;
private MediaRecorder mediaRecorder;
//以下是视频视图所用到的组件
private VideoView videoPreview;
private ImageView deleteVideoButton;
//pdf
private PDFView pdfView;
private TextView pdfName;
private ImageView deletePDFButton;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add_post);
setupToolBar();
receiveDataFromSharedViewModel();
setupViewModel();
setupBasicView();
setupRegisterResultLauncher();
}
private void setupRegisterResultLauncher() {
//启动系统图库
Launcher_images = registerForActivityResult(new ActivityResultContracts.GetMultipleContents(), uris -> {
imageUris.clear();
imageUris.addAll(uris);
Log.d("AddPostActivity","进入到启动图库的启动器里:大小是"+imageUris.size());
for (Uri uri:uris){
adapter.addImage(uri);
}
});
//启动系统音频
//启动系统视频
mLauncher_video = registerForActivityResult(new ActivityResultContracts.GetContent(), uri -> {
if (uri != null) {
videoPreview.setVideoURI(uri);
videoPreview.start();
videoPreview.setVisibility(View.VISIBLE); // 确保VideoView是可见的
deleteVideoButton.setVisibility(View.VISIBLE); // Show delete button when video is loaded
videoFileUris.clear();
videoFileUris.add(uri);
}
});
//启动系统PDF文件
Launcher_PDF = registerForActivityResult(
new ActivityResultContracts.OpenDocument(),
result -> {
if (result != null) {
// 请求持久化权限
final int takeFlags = Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
pdfFileUris.clear();
try{
Log.d("AddPostActivity","程序执行0");
// 请求持久化权限
getContentResolver().takePersistableUriPermission(
result,
takeFlags
);
Log.d("AddPostActivity","程序执行1");
pdfFileUris.add(result);
// 处理选择的 PDF 文件
pdfView.fromUri(result)
.pages(0) // only display the first page
.load();
Log.d("AddPostActivity","程序执行2");
// 获取并显示文件名
Cursor cursor = getContentResolver().query(result, null, null, null, null);
String displayName = "";
if (cursor != null && cursor.moveToFirst()) {
Log.d("AddPostActivity","程序执行3");
int index = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
if (index != -1) { // 确保索引有效
Log.d("AddPostActivity","程序执行4");
displayName = cursor.getString(index);
}
cursor.close();
Log.d("AddPostActivity","程序执行5");
}
pdfName.setText(displayName);
Log.d("AddPostActivity",new File(result.getPath()).getName());
Log.d("AddPostActivity",displayName);
pdfView.setVisibility(View.VISIBLE);
deletePDFButton.setVisibility(View.VISIBLE);
}catch (SecurityException e){
Log.e("AddPostActivity", "Failed to handle PDF: ", e);