Skip to content

Commit 25b775a

Browse files
committed
feat(AgentWebFragment): New interface to add file compression
1 parent e45cb50 commit 25b775a

File tree

4 files changed

+34
-19
lines changed

4 files changed

+34
-19
lines changed

agentweb-core/src/main/java/com/just/agentweb/AgentWebUtils.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -559,7 +559,7 @@ static String getFileAbsolutePath(Activity context, Uri fileUri) {
559559
if (context == null || fileUri == null) {
560560
return null;
561561
}
562-
LogUtils.i(TAG, "getAuthority:" + fileUri.getAuthority() + " getHost:" + fileUri.getHost() + " getPath:" + fileUri.getPath() + " getScheme:" + fileUri.getScheme() + " query:" + fileUri.getQuery());
562+
// LogUtils.i(TAG, "getAuthority:" + fileUri.getAuthority() + " getHost:" + fileUri.getHost() + " getPath:" + fileUri.getPath() + " getScheme:" + fileUri.getScheme() + " query:" + fileUri.getQuery());
563563
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && DocumentsContract.isDocumentUri(context, fileUri)) {
564564
if (isExternalStorageDocument(fileUri)) {
565565
String docId = DocumentsContract.getDocumentId(fileUri);

agentweb-filechooser/src/main/java/com/just/agentweb/filechooser/FileChooser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -538,7 +538,7 @@ private void convertFileAndCallback(final Uri[] uris) {
538538
mJsChannelCallback.call(null);
539539
return;
540540
}
541-
FileCompressor.getInstance().fileCompress(uris, new ValueCallback<Uri[]>() {
541+
FileCompressor.getInstance().fileCompress("customize",uris, new ValueCallback<Uri[]>() {
542542
@Override
543543
public void onReceiveValue(Uri[] value) {
544544
String[] compressFilePath = AgentWebUtils.uriToPath(mActivity, value);

agentweb-filechooser/src/main/java/com/just/agentweb/filechooser/FileCompressor.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
public class FileCompressor implements Serializable {
1414

1515
private static FileCompressor sInstance = null;
16-
private FileCompressListener mFileCompressor;
16+
private FileCompressEngine mFileCompressEngine;
1717

1818
FileCompressor() {
1919
}
@@ -30,24 +30,24 @@ public static final FileCompressor getInstance() {
3030
}
3131

3232

33-
public void registerFileCompressListener(FileCompressListener valueCallback) {
34-
this.mFileCompressor = valueCallback;
33+
public void registerFileCompressEngine(FileCompressEngine valueCallback) {
34+
this.mFileCompressEngine = valueCallback;
3535
}
3636

37-
public void unregisterFileCompressListener(FileCompressListener valueCallback) {
38-
this.mFileCompressor = null;
37+
public void unregisterFileCompressEngine(FileCompressEngine valueCallback) {
38+
this.mFileCompressEngine = null;
3939
}
4040

41-
void fileCompress(Uri[] uri, ValueCallback<Uri[]> callback) {
42-
if (mFileCompressor == null) {
41+
void fileCompress(String type, Uri[] uri, ValueCallback<Uri[]> callback) {
42+
if (mFileCompressEngine == null) {
4343
callback.onReceiveValue(uri);
4444
} else {
45-
mFileCompressor.compressFile(uri, callback);
45+
mFileCompressEngine.compressFile(type, uri, callback);
4646
}
4747
}
4848

49-
public interface FileCompressListener {
50-
void compressFile(Uri[] uri, ValueCallback<Uri[]> callback);
49+
public interface FileCompressEngine {
50+
void compressFile(String type, Uri[] uri, ValueCallback<Uri[]> callback);
5151
}
5252

5353

sample/src/main/java/com/just/agentweb/sample/fragment/AgentWebFragment.java

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
import com.download.library.DownloadListenerAdapter;
4444
import com.download.library.Extra;
4545
import com.download.library.ResourceRequest;
46-
import com.download.library.Runtime;
4746
import com.ferfalk.simplesearchview.SimpleSearchView;
4847
import com.google.gson.Gson;
4948
import com.just.agentweb.AbsAgentWebSettings;
@@ -71,7 +70,6 @@
7170
import java.io.File;
7271
import java.io.IOException;
7372
import java.util.ArrayList;
74-
import java.util.Arrays;
7573
import java.util.HashMap;
7674
import java.util.List;
7775
import java.util.Locale;
@@ -83,7 +81,7 @@
8381
* source code https://github.com/Justson/AgentWeb
8482
*/
8583

86-
public class AgentWebFragment extends Fragment implements FragmentKeyDown, FileCompressor.FileCompressListener {
84+
public class AgentWebFragment extends Fragment implements FragmentKeyDown, FileCompressor.FileCompressEngine {
8785

8886
private ImageView mBackImageView;
8987
private View mLineView;
@@ -429,7 +427,7 @@ public boolean onQueryTextCleared() {
429427
}
430428
});
431429

432-
FileCompressor.getInstance().registerFileCompressListener(this);
430+
FileCompressor.getInstance().registerFileCompressEngine(this);
433431
}
434432

435433
public int getColorPrimary() {
@@ -633,7 +631,7 @@ public boolean onFragmentKeyDown(int keyCode, KeyEvent event) {
633631
@Override
634632
public void onDestroyView() {
635633
mAgentWeb.getWebLifeCycle().onDestroy();
636-
FileCompressor.getInstance().unregisterFileCompressListener(this);
634+
FileCompressor.getInstance().unregisterFileCompressEngine(this);
637635
super.onDestroyView();
638636
}
639637

@@ -688,9 +686,26 @@ protected MiddlewareWebChromeBase getMiddlewareWebChrome() {
688686
};
689687
}
690688

691-
689+
/**
690+
* 选择文件后回调该方法, 这里可以做文件压缩
691+
*
692+
* @param type customize/system , customize 表示通过js方式获取文件, 把文件
693+
* 转成base64的方式返回给js,这种方式兼容性高,但是存在文件过大转成base64时
694+
* 字符串长度过长,导致与js通信失败问题,所以很有必要压缩文件, 尽量控制字符串长度在512kb以内。
695+
* <p>
696+
* system 这种方式,是由input/file 标签触发的文件选择,这种方式缺点是在Android 4.4 不回调
697+
* fileChooser,存在兼容性问题,但是经过升级,基本可以忽略了,api 的兼容性越来越好了, 回调
698+
* 返回是于uri形式,所以不存在文件大小问题,作图片预览也很快。(推荐这种方式)
699+
* @param uri 文件的uri
700+
* @param callback
701+
*/
692702
@Override
693-
public void compressFile(Uri[] uri, ValueCallback<Uri[]> callback) {
703+
public void compressFile(String type, Uri[] uri, ValueCallback<Uri[]> callback) {
704+
if ("system".equals(type)) { // input/file 标签触发的文件选择,这种方式不存在性能问题,可压缩也可以不压缩,具体看自己业务要求
705+
callback.onReceiveValue(uri);
706+
return;
707+
}
708+
// customize.equals(type) 这种强烈方式建议压缩
694709
if (uri == null || uri.length == 0) {
695710
callback.onReceiveValue(uri);
696711
} else {

0 commit comments

Comments
 (0)