Skip to content

Commit

Permalink
优化相册选择图片和相册编辑图片后的逻辑
Browse files Browse the repository at this point in the history
  • Loading branch information
aaatttcccc committed Feb 11, 2022
1 parent 84a484b commit ab04939
Show file tree
Hide file tree
Showing 8 changed files with 200 additions and 93 deletions.
6 changes: 3 additions & 3 deletions LOGIC.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,14 @@

录制界面:
1. 拍照图片时,会保存当前临时文件到Cache文件夹
1.1 编辑后并且保存图片:编辑后的图片临时保存到Cache文件夹 - 压缩到LuBanCache文件夹 - 复制LuBanCache文件到设置目录下,并且加入相册,返回设置目录文件
1.2 保存图片:压缩到LuBanCache文件夹 - 复制LuBanCache文件到设置目录下,并且加入相册,返回设置目录文件
1.1 编辑后并且保存图片:编辑后的图片临时保存到Cache文件夹 - 压缩到LuBanCache文件夹 - 复制LuBanCache文件到设置目录下 - 加入相册 - 返回设置目录文件
1.2 保存图片:压缩到LuBanCache文件夹 - 复制LuBanCache文件到设置目录下 - 加入相册 - 返回设置目录文件
1.3 不保存图片,关闭窗口: 会保留中途操作过的Cache文件,所以如果有必要可以选择清楚缓存

相册界面:
1. 相册选择图片
1.1 相册选择图片并且在预览中编辑图片:
编辑后的图片临时保存到Cache文件夹 - 压缩到LuBanCache文件夹 - 复制LuBanCache文件到设置目录下,如果是编辑并且确认后,最终会加入相册,返回设置目录文件
编辑后的图片临时保存到Cache文件夹 - 如果是编辑并且确认后,最终会压缩到LuBanCache文件夹 - 复制LuBanCache文件到设置目录下 - 加入相册 - 返回设置目录文件
1.2 相册选择图片:压缩到LuBanCache文件夹 - 复制LuBanCache文件到设置目录下,返回设置目录文件
这个跟别的有点特殊,会先判断设置目录文件夹下是否有该文件,如果有就不经过上述步骤,直接返回,文件规则名称是:图片相册id_CMP.xxx
1.3 不选择图片,关闭窗口: 不产生任何Cache文件
Original file line number Diff line number Diff line change
Expand Up @@ -69,24 +69,29 @@ public ArrayList<LocalFile> compressFileTaskDoInBackground(ArrayList<LocalFile>
File newFile = getNewFile(item, path, newFileName);

if (newFile.exists()) {
LocalFile localFile = new LocalFile(mContext, mPictureMediaStoreCompat, item, newFile);
LocalFile localFile;
if (item.isImage()) {
localFile = new LocalFile(mContext, mPictureMediaStoreCompat, item, newFile);
} else {
localFile = new LocalFile(mContext, mVideoMediaStoreCompat, item, newFile);
}
newLocalFiles.add(localFile);
Log.d(mTag, "存在直接使用");
} else {
if (item.isImage()) {
// 处理是否压缩图片
File compressionFile = handleImage(path);
// 移动到新的文件夹
FileUtil.copy(compressionFile, newFile);
newLocalFiles.add(new LocalFile(mContext, mPictureMediaStoreCompat, item, newFile));
Log.d(mTag, "不存在新建文件");
} else if (item.isVideo()) {
if (mGlobalSpec.isCompressEnable()) {
// 压缩视频
newFile = mVideoMediaStoreCompat.createFile(newFileName, 1, false);
File finalNewFile = newFile;
mGlobalSpec.videoCompressCoordinator.setVideoCompressListener(mClsKey, new VideoEditListener() {
@Override
public void onFinish() {
LocalFile localFile = new LocalFile(mContext, mPictureMediaStoreCompat, item, finalNewFile);
LocalFile localFile = new LocalFile(mContext, mVideoMediaStoreCompat, item, newFile);
newLocalFiles.add(localFile);
Log.d(mTag, "不存在新建文件");
}
Expand Down Expand Up @@ -195,6 +200,20 @@ public String getNewFileName(LocalFile item, String path) {
return newFileName;
}

/**
* @return 获取后缀名
*/
public String getNameSuffix(String path) {
// 获取文件名称
String newFileName = path.substring(path.lastIndexOf(File.separator));
String[] newFileNames = newFileName.split("\\.");
if (newFileNames.length > 1) {
// 返回后缀名
return newFileNames[1];
}
return "";
}

/**
* 返回迁移后的file
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1086,12 +1086,7 @@ public ArrayList<LocalFile> doInBackground() {
Uri uri = MediaStoreUtils.displayToGallery(getContext(), new File(item.getPath()), TYPE_PICTURE, -1, item.getWidth(), item.getHeight(),
mPictureMediaStoreCompat.getSaveStrategy().getDirectory(), mPictureMediaStoreCompat);
// 加入相册后的最后是id,直接使用该id
String uriPath = uri.getPath();
try {
item.setId(Long.parseLong(uriPath.substring(uriPath.lastIndexOf("/") + 1)));
} catch (Exception exception) {
item.setId(0);
}
item.setId(MediaStoreUtils.getId(uri));
item.setMimeType(MimeType.JPEG.getMimeTypeName());
item.setUri(mPictureMediaStoreCompat.getUri(item.getPath()));
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -254,7 +254,7 @@ public File doInBackground() {
// 获取文件名称
String newFileName = mLocalFile.getPath().substring(mLocalFile.getPath().lastIndexOf(File.separator));
File newFile = mVideoMediaStoreCompat.createFile(newFileName, 1, false);
FileUtil.copy(new File(mLocalFile.getPath()), newFile);
FileUtil.move(new File(mLocalFile.getPath()), newFile);
return newFile;
}

Expand Down Expand Up @@ -287,12 +287,7 @@ private void confirm(File newFile) {
mLocalFile.getWidth(), mLocalFile.getHeight(),
mVideoMediaStoreCompat.getSaveStrategy().getDirectory(), mVideoMediaStoreCompat);
// 加入相册后的最后是id,直接使用该id
String uriPath = uri.getPath();
try {
mLocalFile.setId(Long.parseLong(uriPath.substring(uriPath.lastIndexOf("/") + 1)));
} catch (Exception exception) {
mLocalFile.setId(0);
}
mLocalFile.setId(MediaStoreUtils.getId(uri));
mLocalFile.setPath(newFile.getPath());
mLocalFile.setUri(mVideoMediaStoreCompat.getUri(newFile.getPath()));
mLocalFile.setSize(newFile.length());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,18 @@ public static boolean copy(final File src,
return copy(src, dest, null, null);
}

/**
* Move the directory or file.
*
* @param src The source.
* @param dest The destination.
* @return {@code true}: success<br>{@code false}: fail
*/
public static boolean move(final File src,
final File dest) {
return move(src, dest, null, null);
}

/**
* Copy the directory or file.
*
Expand All @@ -60,6 +72,27 @@ public static boolean copy(final File src,
return copyFile(src, dest, listener, onProgressUpdateListener);
}

/**
* Move the directory or file.
*
* @param src The source.
* @param dest The destination.
* @param listener The replace listener.
* @return {@code true}: success<br>{@code false}: fail
*/
public static boolean move(final File src,
final File dest,
final OnReplaceListener listener,
final FileIOUtils.OnProgressUpdateListener onProgressUpdateListener) {
if (src == null) {
return false;
}
if (src.isDirectory()) {
return moveDir(src, dest, listener, onProgressUpdateListener);
}
return moveFile(src, dest, listener, onProgressUpdateListener);
}

/**
* Copy the directory.
*
Expand All @@ -72,7 +105,7 @@ private static boolean copyDir(final File srcDir,
final File destDir,
final OnReplaceListener listener,
final FileIOUtils.OnProgressUpdateListener onProgressUpdateListener) {
return copyOrMoveDir(srcDir, destDir, listener, onProgressUpdateListener, true);
return copyOrMoveDir(srcDir, destDir, listener, onProgressUpdateListener, false);
}

/**
Expand All @@ -87,6 +120,36 @@ private static boolean copyFile(final File srcFile,
final File destFile,
final OnReplaceListener listener,
final FileIOUtils.OnProgressUpdateListener onProgressUpdateListener) {
return copyOrMoveFile(srcFile, destFile, listener, onProgressUpdateListener, false);
}

/**
* Move the directory.
*
* @param srcDir The source directory.
* @param destDir The destination directory.
* @param listener The replace listener.
* @return {@code true}: success<br>{@code false}: fail
*/
public static boolean moveDir(final File srcDir,
final File destDir,
final OnReplaceListener listener,
final FileIOUtils.OnProgressUpdateListener onProgressUpdateListener) {
return copyOrMoveDir(srcDir, destDir, listener, onProgressUpdateListener, true);
}

/**
* Move the file.
*
* @param srcFile The source file.
* @param destFile The destination file.
* @param listener The replace listener.
* @return {@code true}: success<br>{@code false}: fail
*/
public static boolean moveFile(final File srcFile,
final File destFile,
final OnReplaceListener listener,
final FileIOUtils.OnProgressUpdateListener onProgressUpdateListener) {
return copyOrMoveFile(srcFile, destFile, listener, onProgressUpdateListener, true);
}

Expand Down
Loading

0 comments on commit ab04939

Please sign in to comment.