diff --git a/TestStep.md b/TestStep.md index 6bcfe0fe..429cb64b 100644 --- a/TestStep.md +++ b/TestStep.md @@ -55,3 +55,22 @@ recyclerView版本: 2. 短时间录制看ui变化 3. 短时间录制后然后关闭本身 4. 录制一个小节点然后按收件BackPressed看看有没有问题 + +------ 修改回调后的测试示例 ------- +1. 选择照片,纯图片1张 +2. 选择照片,纯图片2张 +3. 选择视频,纯视频1个 +4. 选择视频,纯视频2个 +5. 选择图片视频,各1个 +6. 选择图片视频,2+1 +7. 选择图片视频,1+2 +8. 选择图片视频,各2个 +9. 预览去掉一个,直接确定 +10.预览去掉两个,直接确定 + +1. 拍照1张 +2. 拍照2张 +3. 录制1个 +4. 分段录制1个 + +1. 录音 \ No newline at end of file diff --git a/app/src/main/java/com/zhongjh/cameraapp/phone/MainActivity.java b/app/src/main/java/com/zhongjh/cameraapp/phone/MainActivity.java index 283b3808..7547ed95 100644 --- a/app/src/main/java/com/zhongjh/cameraapp/phone/MainActivity.java +++ b/app/src/main/java/com/zhongjh/cameraapp/phone/MainActivity.java @@ -3,21 +3,18 @@ import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; - -import androidx.appcompat.widget.PopupMenu; -import androidx.databinding.DataBindingUtil; - import android.content.pm.ActivityInfo; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; -import android.view.MenuItem; import android.view.View; import android.widget.Toast; +import androidx.appcompat.widget.PopupMenu; +import androidx.databinding.DataBindingUtil; + import com.zhongjh.albumcamerarecorder.AlbumCameraRecorderApi; import com.zhongjh.albumcamerarecorder.album.filter.BaseFilter; -import com.zhongjh.albumcamerarecorder.camera.PreviewVideoActivity; import com.zhongjh.albumcamerarecorder.camera.constants.FlashModels; import com.zhongjh.albumcamerarecorder.listener.OnResultCallbackListener; import com.zhongjh.albumcamerarecorder.settings.AlbumSetting; @@ -26,26 +23,26 @@ import com.zhongjh.albumcamerarecorder.settings.MultiMediaSetting; import com.zhongjh.albumcamerarecorder.settings.RecorderSetting; import com.zhongjh.cameraapp.BaseActivity; +import com.zhongjh.cameraapp.R; import com.zhongjh.cameraapp.configuration.CompressionLuBan; import com.zhongjh.cameraapp.configuration.GifSizeFilter; import com.zhongjh.cameraapp.configuration.Glide4Engine; -import com.zhongjh.cameraapp.R; import com.zhongjh.cameraapp.databinding.ActivityMainBinding; import com.zhongjh.common.entity.LocalFile; import com.zhongjh.common.entity.MultiMedia; +import com.zhongjh.common.entity.SaveStrategy; +import com.zhongjh.common.enums.MimeType; +import com.zhongjh.common.enums.MultimediaTypes; import com.zhongjh.progresslibrary.entity.MultiMediaView; import com.zhongjh.progresslibrary.listener.MaskProgressLayoutListener; import com.zhongjh.progresslibrary.widget.MaskProgressLayout; import com.zhongjh.videoedit.VideoEditManager; -import java.util.ArrayList; +import org.jetbrains.annotations.NotNull; + import java.util.List; import java.util.Set; -import com.zhongjh.common.entity.SaveStrategy; -import com.zhongjh.common.enums.MimeType; -import com.zhongjh.common.enums.MultimediaTypes; - /** * 配置版 * @@ -58,6 +55,7 @@ public class MainActivity extends BaseActivity { ActivityMainBinding mBinding; GlobalSetting mGlobalSetting; + AlbumSetting mAlbumSetting; @GlobalSetting.ScreenOrientation int requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT; @@ -89,7 +87,7 @@ protected void onCreate(Bundle savedInstanceState) { mBinding.mplImageList.setMaskProgressLayoutListener(new MaskProgressLayoutListener() { @Override - public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { + public void onItemAdd(@NotNull View view, @NotNull MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { // 点击添加 boolean isOk = getPermissions(false); if (isOk) { @@ -98,18 +96,17 @@ public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImage } @Override - @SuppressWarnings({"unchecked", "rawtypes"}) - public void onItemClick(View view, MultiMediaView multiMediaView) { + public void onItemClick(@NotNull View view, @NotNull MultiMediaView multiMediaView) { // 点击详情 if (multiMediaView.getType() == MultimediaTypes.PICTURE || multiMediaView.getType() == MultimediaTypes.VIDEO) { - MultiMediaSetting.openPreviewData(MainActivity.this, REQUEST_CODE_CHOOSE, + mGlobalSetting.openPreviewData(MainActivity.this, REQUEST_CODE_CHOOSE, mBinding.mplImageList.getImagesAndVideos(), mBinding.mplImageList.getImagesAndVideos().indexOf(multiMediaView)); } } @Override - public void onItemStartUploading(MultiMediaView multiMediaView) { + public void onItemStartUploading(@NotNull MultiMediaView multiMediaView) { // 开始模拟上传 - 指刚添加后的。这里可以使用你自己的上传事件 MyTask timer = new MyTask(multiMediaView); timers.put(multiMediaView, timer); @@ -117,7 +114,7 @@ public void onItemStartUploading(MultiMediaView multiMediaView) { } @Override - public void onItemClose(View view, MultiMediaView multiMediaView) { + public void onItemClose(@NotNull View view, @NotNull MultiMediaView multiMediaView) { // 停止上传 MyTask myTask = timers.get(multiMediaView); if (myTask != null) { @@ -127,12 +124,12 @@ public void onItemClose(View view, MultiMediaView multiMediaView) { } @Override - public void onItemAudioStartDownload(View view, String url) { + public void onItemAudioStartDownload(@NotNull View view, @NotNull String url) { } @Override - public boolean onItemVideoStartDownload(View view, MultiMediaView multiMediaView) { + public boolean onItemVideoStartDownload(@NotNull View view, @NotNull MultiMediaView multiMediaView) { return false; } @@ -174,7 +171,7 @@ protected void openMain(int alreadyImageCount, int alreadyVideoCount, int alread CameraSetting cameraSetting = initCameraSetting(); // 相册设置 - AlbumSetting albumSetting = initAlbumSetting(); + mAlbumSetting = initAlbumSetting(); // 录音机设置 RecorderSetting recorderSetting = new RecorderSetting(); @@ -199,7 +196,7 @@ protected void openMain(int alreadyImageCount, int alreadyVideoCount, int alread if (mBinding.cbAlbum.isChecked()) // 开启相册功能 { - mGlobalSetting.albumSetting(albumSetting); + mGlobalSetting.albumSetting(mAlbumSetting); } if (mBinding.cbCamera.isChecked()) // 开启拍摄功能 @@ -255,45 +252,61 @@ protected void openMain(int alreadyImageCount, int alreadyVideoCount, int alread if (mBinding.cbIsActivityResult.isChecked()) { mGlobalSetting.forResult(REQUEST_CODE_CHOOSE); } else { - mGlobalSetting.forResult(new OnResultCallbackListener() { + initForResult(); + } + } + + private void initForResult() { + mGlobalSetting.forResult(new OnResultCallbackListener() { - @Override - public void onResult(List result, boolean fromPreview) { + @Override + public void onResult(List result) { + for (LocalFile localFile : result) { + // 绝对路径,AndroidQ如果存在不属于自己App下面的文件夹则无效 + Log.i(TAG, "onResult 绝对路径:" + localFile.getPath()); + Log.i(TAG, "onResult Uri:" + localFile.getUri()); + Log.i(TAG, "onResult 文件大小: " + localFile.getSize()); + Log.i(TAG, "onResult 视频音频长度: " + localFile.getDuration()); + Log.i(TAG, "onResult 类型:" + localFile.getType()); + Log.i(TAG, "onResult 具体类型:" + localFile.getMimeType()); + Log.i(TAG, "onResult 宽高: " + localFile.getWidth() + "x" + localFile.getHeight()); + } + getMaskProgressLayout().addLocalFileStartUpload(result); + } + + @Override + public void onResultFromPreview(List result, boolean apply) { + for (MultiMedia multiMedia : result) { + // 绝对路径,AndroidQ如果存在不属于自己App下面的文件夹则无效 + Log.i(TAG, "onResult id:" + multiMedia.getId()); + Log.i(TAG, "onResult 绝对路径:" + multiMedia.getPath()); + Log.i(TAG, "onResult Uri:" + multiMedia.getUri()); + Log.i(TAG, "onResult 文件大小: " + multiMedia.getSize()); + Log.i(TAG, "onResult 视频音频长度: " + multiMedia.getDuration()); + Log.i(TAG, "onResult 类型:" + multiMedia.getType()); + Log.i(TAG, "onResult 具体类型:" + multiMedia.getMimeType()); + Log.i(TAG, "onResult 宽高: " + multiMedia.getWidth() + "x" + multiMedia.getHeight()); + } + // 倒数循环判断,如果不存在,则删除 + for (int i = getMaskProgressLayout().getImagesAndVideos().size() - 1; i >= 0; i--) { + int k = 0; for (LocalFile localFile : result) { - // 绝对路径,AndroidQ如果存在不属于自己App下面的文件夹则无效 - Log.i(TAG, "绝对路径:" + localFile.getPath()); - Log.i(TAG, "Uri:" + localFile.getUri()); - Log.i(TAG, "文件大小: " + localFile.getSize()); - Log.i(TAG, "视频音频长度: " + localFile.getDuration()); - Log.i(TAG, "类型:" + localFile.getType()); - Log.i(TAG, "具体类型:" + localFile.getMimeType()); - Log.i(TAG, "宽高: " + localFile.getWidth() + "x" + localFile.getHeight()); - } - if (fromPreview) { - // 循环判断,如果不存在,则删除 - for (int i = getMaskProgressLayout().getImagesAndVideos().size() - 1; i >= 0; i--) { - int k = 0; - for (LocalFile localFile : result) { - if (!getMaskProgressLayout().getImagesAndVideos().get(i).equals(localFile)) { - k++; - } - } - if (k == result.size()) { - // 所有都不符合,则删除 - getMaskProgressLayout().removePosition(i); - } + if (!getMaskProgressLayout().getImagesAndVideos().get(i).equals(localFile)) { + k++; } - } else { - getMaskProgressLayout().addLocalFileStartUpload(result); + } + if (k == result.size()) { + // 所有都不符合,则删除 + getMaskProgressLayout().removePosition(i); } } + } - @Override - public void onCancel() { + @Override + public void onCancel() { - } - }); - } + } + }); } /** diff --git a/app/src/main/java/com/zhongjh/cameraapp/phone/MainCustomCameraViewActivity.java b/app/src/main/java/com/zhongjh/cameraapp/phone/MainCustomCameraViewActivity.java index f507be19..257183d1 100644 --- a/app/src/main/java/com/zhongjh/cameraapp/phone/MainCustomCameraViewActivity.java +++ b/app/src/main/java/com/zhongjh/cameraapp/phone/MainCustomCameraViewActivity.java @@ -25,15 +25,14 @@ import com.zhongjh.cameraapp.configuration.GifSizeFilter; import com.zhongjh.cameraapp.configuration.Glide4Engine; import com.zhongjh.cameraapp.databinding.ActivityMainCustomCameraviewBinding; +import com.zhongjh.common.entity.SaveStrategy; +import com.zhongjh.common.enums.MimeType; +import com.zhongjh.common.enums.MultimediaTypes; import com.zhongjh.progresslibrary.entity.MultiMediaView; import com.zhongjh.progresslibrary.listener.MaskProgressLayoutListener; import com.zhongjh.progresslibrary.widget.MaskProgressLayout; -import java.util.ArrayList; - -import com.zhongjh.common.entity.SaveStrategy; -import com.zhongjh.common.enums.MimeType; -import com.zhongjh.common.enums.MultimediaTypes; +import org.jetbrains.annotations.NotNull; /** * 自定义CameraView @@ -66,7 +65,7 @@ protected void onCreate(Bundle savedInstanceState) { mBinding.mplImageList.setMaskProgressLayoutListener(new MaskProgressLayoutListener() { @Override - public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { + public void onItemAdd(@NotNull View view, @NotNull MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { // 点击添加 boolean isOk = getPermissions(false); if (isOk) { @@ -75,18 +74,17 @@ public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImage } @Override - @SuppressWarnings({"unchecked", "rawtypes"}) - public void onItemClick(View view, MultiMediaView multiMediaView) { + public void onItemClick(@NotNull View view, @NotNull MultiMediaView multiMediaView) { // 点击详情 if (multiMediaView.getType() == MultimediaTypes.PICTURE || multiMediaView.getType() == MultimediaTypes.VIDEO) { - MultiMediaSetting.openPreviewData(MainCustomCameraViewActivity.this, REQUEST_CODE_CHOOSE, + mGlobalSetting.openPreviewData(MainCustomCameraViewActivity.this, REQUEST_CODE_CHOOSE, mBinding.mplImageList.getImagesAndVideos(), mBinding.mplImageList.getImagesAndVideos().indexOf(multiMediaView)); } } @Override - public void onItemStartUploading(MultiMediaView multiMediaView) { + public void onItemStartUploading(@NotNull MultiMediaView multiMediaView) { // 开始模拟上传 - 指刚添加后的。这里可以使用你自己的上传事件 MyTask timer = new MyTask(multiMediaView); timers.put(multiMediaView, timer); @@ -94,19 +92,19 @@ public void onItemStartUploading(MultiMediaView multiMediaView) { } @Override - public void onItemClose(View view, MultiMediaView multiMediaView) { + public void onItemClose(@NotNull View view, @NotNull MultiMediaView multiMediaView) { // 停止上传 timers.get(multiMediaView).cancel(); timers.remove(multiMediaView); } @Override - public void onItemAudioStartDownload(View view, String url) { + public void onItemAudioStartDownload(@NotNull View view, @NotNull String url) { } @Override - public boolean onItemVideoStartDownload(View view, MultiMediaView multiMediaView) { + public boolean onItemVideoStartDownload(@NotNull View view, @NotNull MultiMediaView multiMediaView) { return false; } diff --git a/app/src/main/java/com/zhongjh/cameraapp/phone/MainListActivity.java b/app/src/main/java/com/zhongjh/cameraapp/phone/MainListActivity.java index 471ac346..3e6e70a8 100644 --- a/app/src/main/java/com/zhongjh/cameraapp/phone/MainListActivity.java +++ b/app/src/main/java/com/zhongjh/cameraapp/phone/MainListActivity.java @@ -6,6 +6,7 @@ import androidx.appcompat.app.AppCompatActivity; +import com.zhongjh.albumcamerarecorder.settings.GlobalSetting; import com.zhongjh.albumcamerarecorder.settings.MultiMediaSetting; import com.zhongjh.cameraapp.configuration.Glide4Engine; import com.zhongjh.cameraapp.R; @@ -48,14 +49,12 @@ protected void onCreate(Bundle savedInstanceState) { // 独立预览相片功能 mBinding.btnPreview.setOnClickListener(v -> { - // 这个可以放在Application初始化类型、解析图片类,也可以不需要,但是如果你要单独使用预览图功能,必须提前设置这个 - MultiMediaSetting.init().choose(MimeType.ofAll()).imageEngine(new Glide4Engine()) - // 设置路径和7.0保护路径等等,只影响录制拍照的路径,选择路径还是按照当前选择的路径 - .allStrategy(new SaveStrategy(true, "com.zhongjh.cameraapp.fileprovider", "preview")); + GlobalSetting globalSetting = MultiMediaSetting.from(MainListActivity.this).choose(MimeType.ofAll()); + globalSetting.allStrategy(new SaveStrategy(true, "com.zhongjh.cameraapp.fileprovider", "preview")); ArrayList list = new ArrayList<>(); list.add(R.drawable.ic_camera_enhance_black_24dp); list.add(R.drawable.ic_play_arrow_white_24dp); - MultiMediaSetting.openPreviewResourceId(MainListActivity.this, list, 0); + globalSetting.openPreviewResourceId(MainListActivity.this, list, 0); }); // 这是灵活配置能选择xx张图片,xx个视频,xx个音频的用法示例 diff --git a/app/src/main/java/com/zhongjh/cameraapp/phone/MainSeeActivity.java b/app/src/main/java/com/zhongjh/cameraapp/phone/MainSeeActivity.java index 4d964e44..1d7c6347 100644 --- a/app/src/main/java/com/zhongjh/cameraapp/phone/MainSeeActivity.java +++ b/app/src/main/java/com/zhongjh/cameraapp/phone/MainSeeActivity.java @@ -3,14 +3,13 @@ import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; - -import androidx.databinding.DataBindingUtil; - import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Toast; +import androidx.databinding.DataBindingUtil; + import com.zhongjh.albumcamerarecorder.album.filter.BaseFilter; import com.zhongjh.albumcamerarecorder.settings.AlbumSetting; import com.zhongjh.albumcamerarecorder.settings.CameraSetting; @@ -18,24 +17,25 @@ import com.zhongjh.albumcamerarecorder.settings.MultiMediaSetting; import com.zhongjh.albumcamerarecorder.settings.RecorderSetting; import com.zhongjh.cameraapp.BaseActivity; +import com.zhongjh.cameraapp.R; import com.zhongjh.cameraapp.configuration.GifSizeFilter; import com.zhongjh.cameraapp.configuration.Glide4Engine; -import com.zhongjh.cameraapp.R; import com.zhongjh.cameraapp.databinding.ActivityMainSeeBinding; +import com.zhongjh.common.entity.SaveStrategy; +import com.zhongjh.common.enums.MimeType; +import com.zhongjh.common.enums.MultimediaTypes; import com.zhongjh.progresslibrary.entity.MultiMediaView; import com.zhongjh.progresslibrary.listener.MaskProgressLayoutListener; import com.zhongjh.progresslibrary.widget.MaskProgressLayout; import com.zhongjh.retrofitdownloadlib.http.DownloadHelper; import com.zhongjh.retrofitdownloadlib.http.DownloadListener; +import org.jetbrains.annotations.NotNull; + import java.io.File; import java.util.ArrayList; import java.util.List; -import com.zhongjh.common.entity.SaveStrategy; -import com.zhongjh.common.enums.MimeType; -import com.zhongjh.common.enums.MultimediaTypes; - /** * 这是用于设置加载数据的 * 因为这不是重点开发加上时间因素,目前不做在线播放音频和视频。 @@ -59,7 +59,7 @@ public class MainSeeActivity extends BaseActivity implements DownloadListener { /** * 初始化下载 */ - private DownloadHelper mDownloadHelper = new DownloadHelper(this); + private final DownloadHelper mDownloadHelper = new DownloadHelper(this); ProgressDialog progressDialog; @@ -81,7 +81,7 @@ protected void onCreate(Bundle savedInstanceState) { mBinding.mplImageList.setMaskProgressLayoutListener(new MaskProgressLayoutListener() { @Override - public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { + public void onItemAdd(@NotNull View view, @NotNull MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { // 点击添加 boolean isOk = getPermissions(false); if (isOk) { @@ -90,18 +90,17 @@ public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImage } @Override - @SuppressWarnings({"unchecked", "rawtypes"}) - public void onItemClick(View view, MultiMediaView multiMediaView) { + public void onItemClick(@NotNull View view, @NotNull MultiMediaView multiMediaView) { // 点击详情 if (multiMediaView.getType() == MultimediaTypes.PICTURE || multiMediaView.getType() == MultimediaTypes.VIDEO) { - MultiMediaSetting.openPreviewData(MainSeeActivity.this, REQUEST_CODE_CHOOSE, + mGlobalSetting.openPreviewData(MainSeeActivity.this, REQUEST_CODE_CHOOSE, mBinding.mplImageList.getImagesAndVideos(), mBinding.mplImageList.getImagesAndVideos().indexOf(multiMediaView)); } } @Override - public void onItemStartUploading(MultiMediaView multiMediaView) { + public void onItemStartUploading(@NotNull MultiMediaView multiMediaView) { // 开始模拟上传 - 指刚添加后的。这里可以使用你自己的上传事件 MyTask timer = new MyTask(multiMediaView); timers.put(multiMediaView, timer); @@ -109,7 +108,7 @@ public void onItemStartUploading(MultiMediaView multiMediaView) { } @Override - public void onItemClose(View view, MultiMediaView multiMediaView) { + public void onItemClose(@NotNull View view, @NotNull MultiMediaView multiMediaView) { // 停止上传 if (timers.get(multiMediaView) != null) { timers.get(multiMediaView).cancel(); @@ -118,7 +117,7 @@ public void onItemClose(View view, MultiMediaView multiMediaView) { } @Override - public void onItemAudioStartDownload(View view, String url) { + public void onItemAudioStartDownload(@NotNull View view, @NotNull String url) { boolean isOk = getPermissions(true); if (isOk) { // 判断是否存在文件 @@ -137,7 +136,7 @@ public void onItemAudioStartDownload(View view, String url) { } @Override - public boolean onItemVideoStartDownload(View view, MultiMediaView multiMediaView) { + public boolean onItemVideoStartDownload(@NotNull View view, @NotNull MultiMediaView multiMediaView) { boolean isOk = getPermissions(true); if (isOk) { String[] fileFullPath = getFileFullPath(multiMediaView.getUrl(), 1); @@ -262,13 +261,6 @@ private void initData() { mBinding.mplImageList.setImageUrls(imageUrls); } - /** - * 重置 - */ - private void reset() { - mBinding.mplImageList.reset(); - } - @Override protected MaskProgressLayout getMaskProgressLayout() { return mBinding.mplImageList; diff --git a/app/src/main/java/com/zhongjh/cameraapp/phone/MainSimpleActivity.java b/app/src/main/java/com/zhongjh/cameraapp/phone/MainSimpleActivity.java index 2ab872a9..5f5de910 100644 --- a/app/src/main/java/com/zhongjh/cameraapp/phone/MainSimpleActivity.java +++ b/app/src/main/java/com/zhongjh/cameraapp/phone/MainSimpleActivity.java @@ -2,15 +2,13 @@ import android.app.Activity; import android.content.Intent; - -import androidx.databinding.DataBindingUtil; - import android.os.Bundle; - import android.util.Log; import android.view.View; import android.widget.Toast; +import androidx.databinding.DataBindingUtil; + import com.zhongjh.albumcamerarecorder.album.filter.BaseFilter; import com.zhongjh.albumcamerarecorder.settings.AlbumSetting; import com.zhongjh.albumcamerarecorder.settings.CameraSetting; @@ -18,19 +16,18 @@ import com.zhongjh.albumcamerarecorder.settings.MultiMediaSetting; import com.zhongjh.albumcamerarecorder.settings.RecorderSetting; import com.zhongjh.cameraapp.BaseActivity; +import com.zhongjh.cameraapp.R; import com.zhongjh.cameraapp.configuration.GifSizeFilter; import com.zhongjh.cameraapp.configuration.Glide4Engine; -import com.zhongjh.cameraapp.R; import com.zhongjh.cameraapp.databinding.ActivityMainSimpleBinding; +import com.zhongjh.common.entity.SaveStrategy; +import com.zhongjh.common.enums.MimeType; +import com.zhongjh.common.enums.MultimediaTypes; import com.zhongjh.progresslibrary.entity.MultiMediaView; import com.zhongjh.progresslibrary.listener.MaskProgressLayoutListener; import com.zhongjh.progresslibrary.widget.MaskProgressLayout; -import java.util.ArrayList; - -import com.zhongjh.common.entity.SaveStrategy; -import com.zhongjh.common.enums.MimeType; -import com.zhongjh.common.enums.MultimediaTypes; +import org.jetbrains.annotations.NotNull; /** * 简单版 @@ -61,7 +58,7 @@ protected void onCreate(Bundle savedInstanceState) { mBinding.mplImageList.setMaskProgressLayoutListener(new MaskProgressLayoutListener() { @Override - public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { + public void onItemAdd(@NotNull View view, @NotNull MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { // 点击添加 boolean isOk = getPermissions(false); if (isOk) { @@ -70,18 +67,17 @@ public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImage } @Override - @SuppressWarnings({"unchecked", "rawtypes"}) - public void onItemClick(View view, MultiMediaView multiMediaView) { + public void onItemClick(@NotNull View view, @NotNull MultiMediaView multiMediaView) { // 点击详情 if (multiMediaView.getType() == MultimediaTypes.PICTURE || multiMediaView.getType() == MultimediaTypes.VIDEO) { - MultiMediaSetting.openPreviewData(MainSimpleActivity.this, REQUEST_CODE_CHOOSE, + mGlobalSetting.openPreviewData(MainSimpleActivity.this, REQUEST_CODE_CHOOSE, mBinding.mplImageList.getImagesAndVideos(), mBinding.mplImageList.getImagesAndVideos().indexOf(multiMediaView)); } } @Override - public void onItemStartUploading(MultiMediaView multiMediaView) { + public void onItemStartUploading(@NotNull MultiMediaView multiMediaView) { // 开始模拟上传 - 指刚添加后的。这里可以使用你自己的上传事件 MyTask timer = new MyTask(multiMediaView); timers.put(multiMediaView, timer); @@ -89,7 +85,7 @@ public void onItemStartUploading(MultiMediaView multiMediaView) { } @Override - public void onItemClose(View view, MultiMediaView multiMediaView) { + public void onItemClose(@NotNull View view, @NotNull MultiMediaView multiMediaView) { // 停止上传 MyTask myTask = timers.get(multiMediaView); if (myTask != null) { @@ -99,12 +95,12 @@ public void onItemClose(View view, MultiMediaView multiMediaView) { } @Override - public void onItemAudioStartDownload(View view, String url) { + public void onItemAudioStartDownload(@NotNull View view, @NotNull String url) { } @Override - public boolean onItemVideoStartDownload(View view, MultiMediaView multiMediaView) { + public boolean onItemVideoStartDownload(@NotNull View view, @NotNull MultiMediaView multiMediaView) { return false; } diff --git a/app/src/main/java/com/zhongjh/cameraapp/phone/MainSuperSimpleActivity.java b/app/src/main/java/com/zhongjh/cameraapp/phone/MainSuperSimpleActivity.java index 00af8906..f25d08d1 100644 --- a/app/src/main/java/com/zhongjh/cameraapp/phone/MainSuperSimpleActivity.java +++ b/app/src/main/java/com/zhongjh/cameraapp/phone/MainSuperSimpleActivity.java @@ -29,6 +29,8 @@ import com.zhongjh.common.entity.SaveStrategy; import com.zhongjh.common.enums.MimeType; +import org.jetbrains.annotations.NotNull; + /** * 这是一个超级简单代码就完成的示例 * 主要优化了onActivityResult、setMaskProgressLayoutListener方面的代码 @@ -42,6 +44,7 @@ public class MainSuperSimpleActivity extends AppCompatActivity { ActivityMainSuperSimpleBinding mBinding; GlobalSetting mGlobalSetting; + AlbumSetting mAlbumSetting; Combined mCombined; /** @@ -98,7 +101,7 @@ private void init() { cameraSetting.mimeTypeSet(MimeType.ofAll()); // 相册 - AlbumSetting albumSetting = new AlbumSetting(false); + mAlbumSetting = new AlbumSetting(false); // 录音机 RecorderSetting recorderSetting = new RecorderSetting(); @@ -107,7 +110,7 @@ private void init() { mGlobalSetting = MultiMediaSetting.from(MainSuperSimpleActivity.this).choose(MimeType.ofAll()); // 开启相册功能 - mGlobalSetting.albumSetting(albumSetting); + mGlobalSetting.albumSetting(mAlbumSetting); // 开启拍摄功能 mGlobalSetting.cameraSetting(cameraSetting); // 开启录音功能 @@ -131,9 +134,9 @@ private void init() { mCombined = new Combined(MainSuperSimpleActivity.this, REQUEST_CODE_CHOOSE, mGlobalSetting, mBinding.mplImageList, new AbstractMaskProgressLayoutListener() { @Override - public void onItemStartUploading(MultiMediaView multiMediaView) { + public void onItemStartUploading(@NotNull MultiMediaView multiMediaView) { super.onItemStartUploading(multiMediaView); - Log.d("onItemStartUploading","onItemStartUploading"); + Log.d("onItemStartUploading", "onItemStartUploading"); // 开始模拟上传 - 指刚添加后的。这里可以使用你自己的上传事件 MyTask timer = new MyTask(multiMediaView); timers.put(multiMediaView, timer); @@ -141,12 +144,12 @@ public void onItemStartUploading(MultiMediaView multiMediaView) { } @Override - public void onItemClose(View view, MultiMediaView multiMediaView) { + public void onItemClose(@NotNull View view, @NotNull MultiMediaView multiMediaView) { super.onItemClose(view, multiMediaView); // 停止上传 MyTask myTask = timers.get(multiMediaView); if (myTask != null) { - Log.d("onItemClose","取消"); + Log.d("onItemClose", "取消"); myTask.cancel(); timers.remove(multiMediaView); } @@ -171,7 +174,7 @@ public void run() { runOnUiThread(() -> { percentage++; multiMedia.setPercentage(percentage); - Log.d("MyTask",multiMedia.getUri().toString() + "进度: " + percentage); + Log.d("MyTask", multiMedia.getUri().toString() + "进度: " + percentage); if (percentage == 100) { this.cancel(); } diff --git a/app/src/main/java/com/zhongjh/cameraapp/phone/MainThemeActivity.java b/app/src/main/java/com/zhongjh/cameraapp/phone/MainThemeActivity.java index 2551ea13..2588e2f3 100644 --- a/app/src/main/java/com/zhongjh/cameraapp/phone/MainThemeActivity.java +++ b/app/src/main/java/com/zhongjh/cameraapp/phone/MainThemeActivity.java @@ -2,13 +2,12 @@ import android.app.Activity; import android.content.Intent; - -import androidx.databinding.DataBindingUtil; - import android.os.Bundle; import android.view.View; import android.widget.Toast; +import androidx.databinding.DataBindingUtil; + import com.zhongjh.albumcamerarecorder.album.filter.BaseFilter; import com.zhongjh.albumcamerarecorder.settings.AlbumSetting; import com.zhongjh.albumcamerarecorder.settings.CameraSetting; @@ -16,19 +15,18 @@ import com.zhongjh.albumcamerarecorder.settings.MultiMediaSetting; import com.zhongjh.albumcamerarecorder.settings.RecorderSetting; import com.zhongjh.cameraapp.BaseActivity; +import com.zhongjh.cameraapp.R; import com.zhongjh.cameraapp.configuration.GifSizeFilter; import com.zhongjh.cameraapp.configuration.Glide4Engine; -import com.zhongjh.cameraapp.R; import com.zhongjh.cameraapp.databinding.ActivityMainThemeBinding; +import com.zhongjh.common.entity.SaveStrategy; +import com.zhongjh.common.enums.MimeType; +import com.zhongjh.common.enums.MultimediaTypes; import com.zhongjh.progresslibrary.entity.MultiMediaView; import com.zhongjh.progresslibrary.listener.MaskProgressLayoutListener; import com.zhongjh.progresslibrary.widget.MaskProgressLayout; -import java.util.ArrayList; - -import com.zhongjh.common.entity.SaveStrategy; -import com.zhongjh.common.enums.MimeType; -import com.zhongjh.common.enums.MultimediaTypes; +import org.jetbrains.annotations.NotNull; /** * 多种样式版 @@ -58,7 +56,7 @@ protected void onCreate(Bundle savedInstanceState) { mBinding.mplImageList.setMaskProgressLayoutListener(new MaskProgressLayoutListener() { @Override - public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { + public void onItemAdd(@NotNull View view, @NotNull MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { // 点击添加 boolean isOk = getPermissions(false); if (isOk) { @@ -67,18 +65,17 @@ public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImage } @Override - @SuppressWarnings({"unchecked", "rawtypes"}) - public void onItemClick(View view, MultiMediaView multiMediaView) { + public void onItemClick(@NotNull View view, @NotNull MultiMediaView multiMediaView) { // 点击详情 if (multiMediaView.getType() == MultimediaTypes.PICTURE || multiMediaView.getType() == MultimediaTypes.VIDEO) { - MultiMediaSetting.openPreviewData(MainThemeActivity.this, REQUEST_CODE_CHOOSE, + mGlobalSetting.openPreviewData(MainThemeActivity.this, REQUEST_CODE_CHOOSE, mBinding.mplImageList.getImagesAndVideos(), mBinding.mplImageList.getImagesAndVideos().indexOf(multiMediaView)); } } @Override - public void onItemStartUploading(MultiMediaView multiMediaView) { + public void onItemStartUploading(@NotNull MultiMediaView multiMediaView) { // 开始模拟上传 - 指刚添加后的。这里可以使用你自己的上传事件 MyTask timer = new MyTask(multiMediaView); timers.put(multiMediaView, timer); @@ -86,19 +83,19 @@ public void onItemStartUploading(MultiMediaView multiMediaView) { } @Override - public void onItemClose(View view, MultiMediaView multiMediaView) { + public void onItemClose(@NotNull View view, @NotNull MultiMediaView multiMediaView) { // 停止上传 timers.get(multiMediaView).cancel(); timers.remove(multiMediaView); } @Override - public void onItemAudioStartDownload(View view, String url) { + public void onItemAudioStartDownload(@NotNull View view, @NotNull String url) { } @Override - public boolean onItemVideoStartDownload(View view, MultiMediaView multiMediaView) { + public boolean onItemVideoStartDownload(@NotNull View view, @NotNull MultiMediaView multiMediaView) { return false; } diff --git a/app/src/main/java/com/zhongjh/cameraapp/phone/MainUpperLimitActivity.java b/app/src/main/java/com/zhongjh/cameraapp/phone/MainUpperLimitActivity.java index 77c7e8ac..5f85d3e5 100644 --- a/app/src/main/java/com/zhongjh/cameraapp/phone/MainUpperLimitActivity.java +++ b/app/src/main/java/com/zhongjh/cameraapp/phone/MainUpperLimitActivity.java @@ -17,21 +17,21 @@ import com.zhongjh.albumcamerarecorder.settings.MultiMediaSetting; import com.zhongjh.albumcamerarecorder.settings.RecorderSetting; import com.zhongjh.cameraapp.BaseActivity; +import com.zhongjh.cameraapp.R; import com.zhongjh.cameraapp.configuration.GifSizeFilter; import com.zhongjh.cameraapp.configuration.Glide4Engine; -import com.zhongjh.cameraapp.R; import com.zhongjh.cameraapp.databinding.ActivityMainUpperLimitBinding; import com.zhongjh.cameraapp.model.LimitModel; +import com.zhongjh.common.entity.SaveStrategy; +import com.zhongjh.common.enums.MimeType; +import com.zhongjh.common.enums.MultimediaTypes; import com.zhongjh.progresslibrary.entity.MultiMediaView; import com.zhongjh.progresslibrary.listener.MaskProgressLayoutListener; import com.zhongjh.progresslibrary.widget.MaskProgressLayout; -import java.util.ArrayList; -import java.util.Map; +import org.jetbrains.annotations.NotNull; -import com.zhongjh.common.entity.SaveStrategy; -import com.zhongjh.common.enums.MimeType; -import com.zhongjh.common.enums.MultimediaTypes; +import java.util.Map; /** * @author zhongjh @@ -71,7 +71,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { mBinding.mplImageList.setMaskProgressLayoutListener(new MaskProgressLayoutListener() { @Override - public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { + public void onItemAdd(@NotNull View view, @NotNull MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { // 点击添加 boolean isOk = getPermissions(false); if (isOk) { @@ -80,18 +80,17 @@ public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImage } @Override - @SuppressWarnings({"unchecked", "rawtypes"}) - public void onItemClick(View view, MultiMediaView multiMediaView) { + public void onItemClick(@NotNull View view, @NotNull MultiMediaView multiMediaView) { // 点击详情 if (multiMediaView.getType() == MultimediaTypes.PICTURE || multiMediaView.getType() == MultimediaTypes.VIDEO) { - MultiMediaSetting.openPreviewData(MainUpperLimitActivity.this, REQUEST_CODE_CHOOSE, + mGlobalSetting.openPreviewData(MainUpperLimitActivity.this, REQUEST_CODE_CHOOSE, mBinding.mplImageList.getImagesAndVideos(), mBinding.mplImageList.getImagesAndVideos().indexOf(multiMediaView)); } } @Override - public void onItemStartUploading(MultiMediaView multiMediaView) { + public void onItemStartUploading(@NotNull MultiMediaView multiMediaView) { // 开始模拟上传 - 指刚添加后的。这里可以使用你自己的上传事件 MyTask timer = new MyTask(multiMediaView); timers.put(multiMediaView, timer); @@ -99,19 +98,19 @@ public void onItemStartUploading(MultiMediaView multiMediaView) { } @Override - public void onItemClose(View view, MultiMediaView multiMediaView) { + public void onItemClose(@NotNull View view, @NotNull MultiMediaView multiMediaView) { // 停止上传 timers.get(multiMediaView).cancel(); timers.remove(multiMediaView); } @Override - public void onItemAudioStartDownload(View view, String url) { + public void onItemAudioStartDownload(@NotNull View view, @NotNull String url) { } @Override - public boolean onItemVideoStartDownload(View view, MultiMediaView multiMediaView) { + public boolean onItemVideoStartDownload(@NotNull View view, @NotNull MultiMediaView multiMediaView) { return false; } diff --git a/combined/src/main/java/com/zhongjh/combined/Combined.java b/combined/src/main/java/com/zhongjh/combined/Combined.java index 050a7b24..54476460 100644 --- a/combined/src/main/java/com/zhongjh/combined/Combined.java +++ b/combined/src/main/java/com/zhongjh/combined/Combined.java @@ -24,6 +24,8 @@ import com.zhongjh.common.entity.MultiMedia; import com.zhongjh.common.enums.MultimediaTypes; +import org.jetbrains.annotations.NotNull; + /** * 协调多个控件之间代码,更加简化代码 * @@ -46,7 +48,8 @@ public class Combined { * @param listener 事件 */ public Combined(Activity activity, int requestCode, - GlobalSetting globalSetting, MaskProgressLayout maskProgressLayout, + GlobalSetting globalSetting, + MaskProgressLayout maskProgressLayout, AbstractMaskProgressLayoutListener listener) { this.activity = activity; this.requestCode = requestCode; @@ -54,7 +57,7 @@ public Combined(Activity activity, int requestCode, maskProgressLayout.setMaskProgressLayoutListener(new MaskProgressLayoutListener() { @Override - public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { + public void onItemAdd(@NotNull View view, @NotNull MultiMediaView multiMediaView, int alreadyImageCount, int alreadyVideoCount, int alreadyAudioCount) { // 点击Add globalSetting.alreadyCount(alreadyImageCount, alreadyVideoCount, alreadyAudioCount); globalSetting.forResult(requestCode); @@ -62,11 +65,11 @@ public void onItemAdd(View view, MultiMediaView multiMediaView, int alreadyImage } @Override - public void onItemClick(View view, MultiMediaView multiMediaView) { + public void onItemClick(@NotNull View view, @NotNull MultiMediaView multiMediaView) { // 点击详情 if (multiMediaView.getType() == MultimediaTypes.PICTURE || multiMediaView.getType() == MultimediaTypes.VIDEO) { // 预览 - MultiMediaSetting.openPreviewData(activity, requestCode, + globalSetting.openPreviewData(activity, requestCode, maskProgressLayout.getImagesAndVideos(), maskProgressLayout.getImagesAndVideos().indexOf(multiMediaView)); } @@ -74,22 +77,22 @@ public void onItemClick(View view, MultiMediaView multiMediaView) { } @Override - public void onItemStartUploading(MultiMediaView multiMediaView) { + public void onItemStartUploading(@NotNull MultiMediaView multiMediaView) { listener.onItemStartUploading(multiMediaView); } @Override - public void onItemClose(View view, MultiMediaView multiMediaView) { + public void onItemClose(@NotNull View view, @NotNull MultiMediaView multiMediaView) { listener.onItemClose(view, multiMediaView); } @Override - public void onItemAudioStartDownload(View view, String url) { + public void onItemAudioStartDownload(@NotNull View view, @NotNull String url) { listener.onItemAudioStartDownload(view, url); } @Override - public boolean onItemVideoStartDownload(View view, MultiMediaView multiMediaView) { + public boolean onItemVideoStartDownload(@NotNull View view, @NotNull MultiMediaView multiMediaView) { return listener.onItemVideoStartDownload(view, multiMediaView); } }); diff --git a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/album/MatissFragment.java b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/album/MatissFragment.java index c1d53844..bbf4b63e 100644 --- a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/album/MatissFragment.java +++ b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/album/MatissFragment.java @@ -237,8 +237,7 @@ public void onNothingSelected(AdapterView adapterView) { ArrayList selectedPaths = (ArrayList) mSelectedCollection.asListOfString(); setResultOK(localFiles, selectedUris, selectedPaths); } else { - mGlobalSpec.onResultCallbackListener.onResult(localFiles,false); - mActivity.setResult(RESULT_OK); + mGlobalSpec.onResultCallbackListener.onResult(localFiles); } mActivity.finish(); }); @@ -358,8 +357,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { if (mGlobalSpec.onResultCallbackListener == null) { setResultOK(localFiles, selectedUris, selectedPaths); } else { - mGlobalSpec.onResultCallbackListener.onResult(localFiles, true); - mActivity.setResult(RESULT_OK); + mGlobalSpec.onResultCallbackListener.onResult(localFiles); } } mActivity.finish(); diff --git a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/camera/CameraFragment.java b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/camera/CameraFragment.java index 1f5cbe9c..194ca204 100644 --- a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/camera/CameraFragment.java +++ b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/camera/CameraFragment.java @@ -165,8 +165,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { result.putExtra(EXTRA_MULTIMEDIA_CHOICE, false); mActivity.setResult(RESULT_OK, result); } else { - mGlobalSpec.onResultCallbackListener.onResult(localFiles, false); - mActivity.setResult(RESULT_OK); + mGlobalSpec.onResultCallbackListener.onResult(localFiles); } mActivity.finish(); break; @@ -254,8 +253,7 @@ public void captureSuccess(ArrayList paths, ArrayList uris, ArrayLi result.putExtra(EXTRA_MULTIMEDIA_CHOICE, false); mActivity.setResult(RESULT_OK, result); } else { - mGlobalSpec.onResultCallbackListener.onResult(localFiles, false); - mActivity.setResult(RESULT_OK); + mGlobalSpec.onResultCallbackListener.onResult(localFiles); } mIsCommit = true; mActivity.finish(); diff --git a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/listener/OnResultCallbackListener.java b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/listener/OnResultCallbackListener.java index 35d32d61..7fc19c56 100644 --- a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/listener/OnResultCallbackListener.java +++ b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/listener/OnResultCallbackListener.java @@ -1,5 +1,8 @@ package com.zhongjh.albumcamerarecorder.listener; +import com.zhongjh.common.entity.LocalFile; +import com.zhongjh.common.entity.MultiMedia; + import java.util.List; /** @@ -7,15 +10,22 @@ * * @author zhongjh */ -public interface OnResultCallbackListener { +public interface OnResultCallbackListener { + + /** + * return LocalMedia result + * + * @param result 控件返回的相关数据 + */ + void onResult(List result); /** * return LocalMedia result * - * @param result 控件返回的相关数据 - * @param fromPreview 是否来自预览界面 + * @param result 控件返回的相关数据,跟九宫格挂钩 + * @param apply 是否预览界面点击了同意 */ - void onResult(List result, boolean fromPreview); + void onResultFromPreview(List result, boolean apply); /** * Cancel diff --git a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/preview/BasePreviewActivity.java b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/preview/BasePreviewActivity.java index 1190e0a4..e9f0c6e3 100644 --- a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/preview/BasePreviewActivity.java +++ b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/preview/BasePreviewActivity.java @@ -60,6 +60,7 @@ public class BasePreviewActivity extends AppCompatActivity implements View.OnCli public static final String ENABLE_OPERATION = "enable_operation"; public static final String IS_SELECTED_LISTENER = "is_selected_listener"; public static final String IS_SELECTED_CHECK = "is_selected_check"; + public static final String IS_EXTERNAL_USERS = "is_external_users"; protected final SelectedItemCollection mSelectedCollection = new SelectedItemCollection(this); protected GlobalSpec mGlobalSpec; @@ -93,6 +94,10 @@ public class BasePreviewActivity extends AppCompatActivity implements View.OnCli * 设置右上角是否检测类型 */ protected boolean mIsSelectedCheck = true; + /** + * 是否外部直接调用该预览窗口,如果是外部直接调用,那么可以启用回调接口,内部统一使用onActivityResult方式回调 + */ + protected boolean mIsExternalUsers = false; /** * 图片存储器 @@ -119,6 +124,7 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { mEnableOperation = getIntent().getBooleanExtra(ENABLE_OPERATION, true); mIsSelectedListener = getIntent().getBooleanExtra(IS_SELECTED_LISTENER, true); mIsSelectedCheck = getIntent().getBooleanExtra(IS_SELECTED_CHECK, true); + mIsExternalUsers = getIntent().getBooleanExtra(IS_EXTERNAL_USERS, false); // 设置图片路径 if (mGlobalSpec.pictureStrategy != null) { @@ -489,12 +495,20 @@ protected void updateSize(MultiMedia item) { */ protected void sendBackResult(boolean apply) { refreshMultiMediaItem(apply); - Intent intent = new Intent(); - intent.putExtra(EXTRA_RESULT_BUNDLE, mSelectedCollection.getDataWithBundle()); - intent.putExtra(EXTRA_RESULT_APPLY, apply); - intent.putExtra(EXTRA_RESULT_IS_EDIT, mIsEdit); - intent.putExtra(EXTRA_RESULT_ORIGINAL_ENABLE, mOriginalEnable); - setResult(Activity.RESULT_OK, intent); + if (mGlobalSpec.onResultCallbackListener == null || !mIsExternalUsers) { + Intent intent = new Intent(); + intent.putExtra(EXTRA_RESULT_BUNDLE, mSelectedCollection.getDataWithBundle()); + intent.putExtra(EXTRA_RESULT_APPLY, apply); + intent.putExtra(EXTRA_RESULT_IS_EDIT, mIsEdit); + intent.putExtra(EXTRA_RESULT_ORIGINAL_ENABLE, mOriginalEnable); + setResult(RESULT_OK, intent); + } else { + if (apply) { + mGlobalSpec.onResultCallbackListener.onResultFromPreview(mSelectedCollection.asList(), apply); + } else { + mGlobalSpec.onResultCallbackListener.onCancel(); + } + } } /** diff --git a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/recorder/SoundRecordingFragment.java b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/recorder/SoundRecordingFragment.java index 73dbbaba..d91effee 100644 --- a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/recorder/SoundRecordingFragment.java +++ b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/recorder/SoundRecordingFragment.java @@ -489,8 +489,7 @@ public Void doInBackground() { } else { ArrayList localFiles = new ArrayList<>(); localFiles.add(localFile); - mGlobalSpec.onResultCallbackListener.onResult(localFiles, false); - mActivity.setResult(RESULT_OK); + mGlobalSpec.onResultCallbackListener.onResult(localFiles); } mActivity.finish(); } diff --git a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/GlobalSetting.java b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/GlobalSetting.java index b8aa8da2..734acbe6 100644 --- a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/GlobalSetting.java +++ b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/GlobalSetting.java @@ -2,6 +2,7 @@ import android.app.Activity; import android.content.Intent; +import android.os.Bundle; import android.widget.Toast; import androidx.annotation.IntDef; @@ -16,15 +17,19 @@ import com.zhongjh.albumcamerarecorder.listener.CompressionInterface; import com.zhongjh.albumcamerarecorder.listener.OnMainListener; import com.zhongjh.albumcamerarecorder.listener.OnResultCallbackListener; +import com.zhongjh.albumcamerarecorder.preview.AlbumPreviewActivity; +import com.zhongjh.albumcamerarecorder.preview.BasePreviewActivity; import com.zhongjh.albumcamerarecorder.settings.api.GlobalSettingApi; import com.zhongjh.albumcamerarecorder.utils.SelectableUtils; import com.zhongjh.common.entity.LocalFile; +import com.zhongjh.common.entity.MultiMedia; import com.zhongjh.common.entity.SaveStrategy; import com.zhongjh.common.enums.MimeType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.ref.WeakReference; +import java.util.ArrayList; import java.util.Set; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_BEHIND; @@ -43,6 +48,9 @@ import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_USER; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_USER_LANDSCAPE; import static android.content.pm.ActivityInfo.SCREEN_ORIENTATION_USER_PORTRAIT; +import static com.zhongjh.albumcamerarecorder.album.model.SelectedItemCollection.COLLECTION_IMAGE; +import static com.zhongjh.albumcamerarecorder.album.model.SelectedItemCollection.STATE_COLLECTION_TYPE; +import static com.zhongjh.albumcamerarecorder.album.model.SelectedItemCollection.STATE_SELECTION; /** * 用于构建媒体具体公共设置 API。 @@ -260,16 +268,83 @@ public GlobalSetting setOnMainListener(@Nullable OnMainListener listener) { @Override public void forResult(int requestCode) { mGlobalSpec.requestCode = requestCode; + // 回调监听设置null + mGlobalSpec.onResultCallbackListener = null; openMain(requestCode); } @Override - public void forResult(OnResultCallbackListener listener) { + public void forResult(OnResultCallbackListener listener) { // 绑定回调监听 mGlobalSpec.onResultCallbackListener = new WeakReference<>(listener).get(); openMain(null); } + /** + * 调用打开图片、视频预览 - 主要用于配合九宫图 + * + * @param activity 窗体 + * @param requestCode 请求码 + * @param list 数据源 + * @param position 当前数据的索引 + */ + @Override + public void openPreviewData(Activity activity, int requestCode, + ArrayList list, int position) { + Bundle bundle = new Bundle(); + bundle.putParcelableArrayList(STATE_SELECTION, list); + bundle.putInt(STATE_COLLECTION_TYPE, COLLECTION_IMAGE); + + Intent intent = new Intent(activity, AlbumPreviewActivity.class); + intent.putExtra(AlbumPreviewActivity.EXTRA_ITEM, list.get(position)); + intent.putExtra(BasePreviewActivity.EXTRA_DEFAULT_BUNDLE, bundle); + intent.putExtra(BasePreviewActivity.EXTRA_RESULT_ORIGINAL_ENABLE, false); + intent.putExtra(BasePreviewActivity.EXTRA_IS_ALLOW_REPEAT, true); + intent.putExtra(BasePreviewActivity.IS_SELECTED_CHECK, false); + intent.putExtra(BasePreviewActivity.IS_EXTERNAL_USERS, true); + GlobalSpec globalSpec = GlobalSpec.getInstance(); + activity.startActivityForResult(intent, requestCode); + if (globalSpec.isCutscenes) { + activity.overridePendingTransition(R.anim.activity_open, 0); + } + } + + /** + * 调用打开图片预览 - 纯浏览不可操作 + * + * @param activity 窗体 + * @param list 资源id数据源 + * @param position 当前数据的索引 + */ + @Override + public void openPreviewResourceId(Activity activity, ArrayList list, int position) { + ArrayList multiMedias = new ArrayList<>(); + for (Integer item : list) { + MultiMedia multiMedia = new MultiMedia(); + multiMedia.setDrawableId(item); + multiMedias.add(multiMedia); + } + openPreview(activity, multiMedias, position); + } + + /** + * 调用打开图片预览 - 纯浏览不可操作 + * + * @param activity 窗体 + * @param list 文件地址的数据源 + * @param position 当前数据的索引 + */ + @Override + public void openPreviewPath(Activity activity, ArrayList list, int position) { + ArrayList multiMedias = new ArrayList<>(); + for (String item : list) { + MultiMedia multiMedia = new MultiMedia(); + multiMedia.setUrl(item); + multiMedias.add(multiMedia); + } + openPreview(activity, multiMedias, position); + } + private void openMain(Integer requestCode) { Activity activity = mMultiMediaSetting.getActivity(); if (activity == null) { @@ -320,4 +395,31 @@ private void openMain(Integer requestCode) { } } + /** + * 提供给 {@link #openPreviewResourceId} 和 {@link #openPreviewPath} 共用的方法 + * + * @param activity 窗体 + * @param multiMedias 数据源 + * @param position 当前数据的索引 + */ + private static void openPreview(Activity activity, ArrayList multiMedias, int position) { + Bundle bundle = new Bundle(); + bundle.putParcelableArrayList(STATE_SELECTION, multiMedias); + bundle.putInt(STATE_COLLECTION_TYPE, COLLECTION_IMAGE); + + Intent intent = new Intent(activity, AlbumPreviewActivity.class); + intent.putExtra(AlbumPreviewActivity.EXTRA_ITEM, multiMedias.get(position)); + intent.putExtra(BasePreviewActivity.EXTRA_DEFAULT_BUNDLE, bundle); + intent.putExtra(BasePreviewActivity.EXTRA_RESULT_ORIGINAL_ENABLE, false); + intent.putExtra(BasePreviewActivity.EXTRA_IS_ALLOW_REPEAT, true); + intent.putExtra(BasePreviewActivity.IS_SELECTED_CHECK, false); + intent.putExtra(BasePreviewActivity.ENABLE_OPERATION, false); + intent.putExtra(BasePreviewActivity.IS_EXTERNAL_USERS, true); + GlobalSpec globalSpec = GlobalSpec.getInstance(); + activity.startActivityForResult(intent, globalSpec.requestCode); + if (globalSpec.isCutscenes) { + activity.overridePendingTransition(R.anim.activity_open, 0); + } + } + } diff --git a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/GlobalSpec.java b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/GlobalSpec.java index a93b4fde..1e54ab92 100644 --- a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/GlobalSpec.java +++ b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/GlobalSpec.java @@ -11,7 +11,6 @@ import com.zhongjh.albumcamerarecorder.listener.CompressionInterface; import com.zhongjh.albumcamerarecorder.listener.OnMainListener; import com.zhongjh.albumcamerarecorder.listener.OnResultCallbackListener; -import com.zhongjh.common.entity.LocalFile; import com.zhongjh.common.entity.SaveStrategy; import com.zhongjh.common.enums.MimeType; @@ -115,7 +114,7 @@ public class GlobalSpec { /** * 回调监听 */ - public OnResultCallbackListener onResultCallbackListener; + public OnResultCallbackListener onResultCallbackListener; private GlobalSpec() { } diff --git a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/MultiMediaSetting.java b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/MultiMediaSetting.java index 1792b2e1..84e6b623 100644 --- a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/MultiMediaSetting.java +++ b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/MultiMediaSetting.java @@ -14,6 +14,7 @@ import java.util.List; import java.util.Set; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; @@ -30,6 +31,7 @@ import static com.zhongjh.albumcamerarecorder.constants.Constant.EXTRA_MULTIMEDIA_TYPES; import static com.zhongjh.albumcamerarecorder.constants.Constant.EXTRA_RESULT_RECORDING_ITEM; import static com.zhongjh.albumcamerarecorder.constants.Constant.EXTRA_RESULT_SELECTION; +import static com.zhongjh.albumcamerarecorder.constants.Constant.EXTRA_RESULT_SELECTION_LOCAL_FILE; import static com.zhongjh.albumcamerarecorder.constants.Constant.EXTRA_RESULT_SELECTION_PATH; /** @@ -40,12 +42,8 @@ */ public final class MultiMediaSetting { - private WeakReference mContext; - private WeakReference mFragment; - - private MultiMediaSetting() { - - } + private final WeakReference mContext; + private final WeakReference mFragment; private MultiMediaSetting(Activity activity) { this(activity, null); @@ -60,10 +58,6 @@ private MultiMediaSetting(Activity activity, Fragment fragment) { mFragment = new WeakReference<>(fragment); } - public static MultiMediaSetting init() { - return new MultiMediaSetting(); - } - /** * 设置由Activity打开 * @@ -96,8 +90,6 @@ public static boolean obtainMultimediaChoice(Intent data) { return data.getBooleanExtra(EXTRA_MULTIMEDIA_CHOICE, false); } - EXTRA_RESULT_SELECTION_LOCAL_FILE - /** * 获取用户确认后的多媒体类型 * @@ -109,13 +101,13 @@ public static int obtainMultimediaType(Intent data) { } /** - * 获取用户确认后的多媒体类型 + * 获取用户确认后的LocalFile多媒体数据 * - * @param data 通过以下方法获取 onActivityResult - * @return 用户确认后的多媒体类型 + * @param data 通过onActivityResult方法获取 + * @return 用户选择/拍照的媒体数据. {@link LocalFile} */ - public static int obtainMultimediaType(Intent data) { - return data.getIntExtra(EXTRA_MULTIMEDIA_TYPES, -1); + public static boolean obtainLocalFileResult(Intent data) { + return data.getBooleanExtra(EXTRA_RESULT_SELECTION_LOCAL_FILE, false); } /** @@ -172,90 +164,4 @@ Fragment getFragment() { return mFragment != null ? mFragment.get() : null; } - /** - * 调用打开图片、视频预览 - 主要用于配合九宫图 - * - * @param activity 窗体 - * @param requestCode 请求码 - * @param list 数据源 - * @param position 当前数据的索引 - */ - public static void openPreviewData(Activity activity, int requestCode, ArrayList list, int position) { - Bundle bundle = new Bundle(); - bundle.putParcelableArrayList(STATE_SELECTION, list); - bundle.putInt(STATE_COLLECTION_TYPE, COLLECTION_IMAGE); - - Intent intent = new Intent(activity, AlbumPreviewActivity.class); - intent.putExtra(AlbumPreviewActivity.EXTRA_ITEM, list.get(position)); - intent.putExtra(BasePreviewActivity.EXTRA_DEFAULT_BUNDLE, bundle); - intent.putExtra(BasePreviewActivity.EXTRA_RESULT_ORIGINAL_ENABLE, false); - intent.putExtra(BasePreviewActivity.EXTRA_IS_ALLOW_REPEAT, true); - intent.putExtra(BasePreviewActivity.IS_SELECTED_CHECK, false); - GlobalSpec globalSpec = GlobalSpec.getInstance(); - activity.startActivityForResult(intent, requestCode); - if (globalSpec.isCutscenes) { - activity.overridePendingTransition(R.anim.activity_open, 0); - } - } - - /** - * 调用打开图片预览 - 纯浏览不可操作 - * - * @param activity 窗体 - * @param list 资源id数据源 - * @param position 当前数据的索引 - */ - public static void openPreviewResourceId(Activity activity, ArrayList list, int position) { - ArrayList multiMedias = new ArrayList<>(); - for (Integer item : list) { - MultiMedia multiMedia = new MultiMedia(); - multiMedia.setDrawableId(item); - multiMedias.add(multiMedia); - } - openPreview(activity, multiMedias, position); - } - - /** - * 调用打开图片预览 - 纯浏览不可操作 - * - * @param activity 窗体 - * @param list 文件地址的数据源 - * @param position 当前数据的索引 - */ - public static void openPreviewPath(Activity activity, ArrayList list, int position) { - ArrayList multiMedias = new ArrayList<>(); - for (String item : list) { - MultiMedia multiMedia = new MultiMedia(); - multiMedia.setUrl(item); - multiMedias.add(multiMedia); - } - openPreview(activity, multiMedias, position); - } - - /** - * 提供给 {@link #openPreviewResourceId} 和 {@link #openPreviewPath} 共用的方法 - * - * @param activity 窗体 - * @param multiMedias 数据源 - * @param position 当前数据的索引 - */ - private static void openPreview(Activity activity, ArrayList multiMedias, int position) { - Bundle bundle = new Bundle(); - bundle.putParcelableArrayList(STATE_SELECTION, multiMedias); - bundle.putInt(STATE_COLLECTION_TYPE, COLLECTION_IMAGE); - - Intent intent = new Intent(activity, AlbumPreviewActivity.class); - intent.putExtra(AlbumPreviewActivity.EXTRA_ITEM, multiMedias.get(position)); - intent.putExtra(BasePreviewActivity.EXTRA_DEFAULT_BUNDLE, bundle); - intent.putExtra(BasePreviewActivity.EXTRA_RESULT_ORIGINAL_ENABLE, false); - intent.putExtra(BasePreviewActivity.EXTRA_IS_ALLOW_REPEAT, true); - intent.putExtra(BasePreviewActivity.IS_SELECTED_CHECK, false); - intent.putExtra(BasePreviewActivity.ENABLE_OPERATION, false); - GlobalSpec globalSpec = GlobalSpec.getInstance(); - activity.startActivityForResult(intent, globalSpec.requestCode); - if (globalSpec.isCutscenes) { - activity.overridePendingTransition(R.anim.activity_open, 0); - } - } - } diff --git a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/api/GlobalSettingApi.java b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/api/GlobalSettingApi.java index 794ab087..0d0f69eb 100644 --- a/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/api/GlobalSettingApi.java +++ b/multilibrary/src/main/java/com/zhongjh/albumcamerarecorder/settings/api/GlobalSettingApi.java @@ -1,5 +1,6 @@ package com.zhongjh.albumcamerarecorder.settings.api; +import android.app.Activity; import android.content.Intent; import androidx.annotation.Nullable; @@ -18,8 +19,11 @@ import com.zhongjh.albumcamerarecorder.settings.MultiMediaSetting; import com.zhongjh.albumcamerarecorder.settings.RecorderSetting; import com.zhongjh.common.entity.LocalFile; +import com.zhongjh.common.entity.MultiMedia; import com.zhongjh.common.entity.SaveStrategy; +import java.util.ArrayList; + /** * 用于构建媒体具体公共设置 API。 * @@ -211,6 +215,34 @@ GlobalSetting maxSelectablePerMediaType(Integer maxSelectable, * * @param listener 回调事件 */ - void forResult(OnResultCallbackListener listener); + void forResult(OnResultCallbackListener listener); + + /** + * 调用打开图片、视频预览 - 主要用于配合九宫图 + * + * @param activity 窗体 + * @param requestCode 请求码 + * @param list 数据源 + * @param position 当前数据的索引 + */ + void openPreviewData(Activity activity, int requestCode, + ArrayList list, int position); + + /** + * 调用打开图片预览 - 纯浏览不可操作 + * + * @param activity 窗体 + * @param list 资源id数据源 + * @param position 当前数据的索引 + */ + void openPreviewResourceId(Activity activity, ArrayList list, int position); + /** + * 调用打开图片预览 - 纯浏览不可操作 + * + * @param activity 窗体 + * @param list 文件地址的数据源 + * @param position 当前数据的索引 + */ + void openPreviewPath(Activity activity, ArrayList list, int position); }