Commit da7093bf authored by 陈赛康's avatar 陈赛康

ocr导出+分享功能及业务完;搜索功能导出与分享待分离;

parent 0fdb8fa8
......@@ -10,8 +10,8 @@ android {
applicationId "cn.com.bril.androidocr.studio"
minSdkVersion 21
targetSdkVersion 25
versionCode 7
versionName "2.7.0"
versionCode 14
versionName "3.4.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
......
......@@ -39,6 +39,9 @@
android:name=".ui.activity.OcrRecordActivity"
android:launchMode="singleTask" />
<activity android:name=".ui.activity.SearchActivity"></activity>
</application>
</manifest>
\ No newline at end of file
......@@ -8,8 +8,8 @@ import android.os.Environment;
public class Configs {
public static String USER_NAME="部门负责人";
public static String USER_ID="12";
public static String USER_NAME="科员";
public static String USER_ID="11";
public final static String IMAGE_BASE= Environment
.getExternalStorageDirectory().getPath() + "/documentocr/images";
......@@ -17,6 +17,7 @@ public class Configs {
.getExternalStorageDirectory().getPath() + "/documentocr/pdfs";
public final static String TXT_BASE= Environment
.getExternalStorageDirectory().getPath() + "/documentocr/txts";
// public final static String TXT_BASE= "sdcard/documentocr/txts";
public final static String WORD_BASE= Environment
.getExternalStorageDirectory().getPath() + "/documentocr/docs";
}
......@@ -22,14 +22,22 @@ public class RequestConfig {
//分享记录
public static String SHARE_RECORD_URL=BASE_URL+"cc_sharing_records";
//批量导出
public static String BATCH_EXPORT_URL=BASE_URL+"cc_ocr_files/create/batch";
public static String BATCH_EXPORT_URL=BASE_URL+"cc_export_records/create/batch";
//批量删除
public static String BATCH_DELETE_URL=BASE_URL+"cc_export_records/delete/batch";
//文件下载
public static String DOWN_LOAD_URL=BASE_URL+"file_down";
//分享单个文件
public final static String SHARE_ALONE_URL=BASE_URL+"cc_sharing_records/new";
//分享列表
public final static String SHARE_LIST_URL=BASE_URL+"cc_sharing_records";
//批量分享
public final static String BATCH_SHARE_URL=BASE_URL+"cc_sharing_records/create/batch";
//批量删除分享记录
public final static String BATCH_DELETE_SHARE_URL=BASE_URL+"cc_sharing_records/delete/batch";
//批量创建文件
public final static String BATCH_CREATE_FILE_URL=BASE_URL+"cc_files/create/batch";
//创建文件
public final static String CREATE_FILE_URL=BASE_URL+"cc_files/new";
}
......@@ -13,12 +13,18 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import cn.com.bril.androidocr.studio.beans.OcrInfo;
import cn.com.bril.androidocr.studio.beans.OcrRootBean;
import cn.com.bril.androidocr.studio.beans.ShareInfo;
import cn.com.bril.androidocr.studio.configs.Configs;
import cn.com.bril.androidocr.studio.configs.RequestConfig;
import cn.com.bril.androidocr.studio.interf.HttpFileCallBack;
import cn.com.bril.androidocr.studio.interf.OnHttpListener;
import cn.com.bril.androidocr.studio.ui.activity.VertifyActivity;
import cn.com.bril.androidocr.studio.utils.GsonUtil;
import static cn.com.bril.androidocr.studio.configs.RequestConfig.CREATE_FILE_URL;
/**
* Created by sunny on 2018-3-12.
*/
......@@ -38,7 +44,7 @@ public class HttpHolder {
}
x.http().post(params,callBack);
}
//上传文件
public static void upLoadFile(String path, VertifyActivity.HttpCallBack callBack){
RequestParams params=new RequestParams(RequestConfig.UP_FILE);
List<KeyValue> list = new ArrayList<>();
......@@ -49,7 +55,6 @@ public class HttpHolder {
params.setRequestBody(body);
x.http().post(params,callBack);
};
//创建记录
public static void createFileRecord(String url,Map<String,Object> map,Callback.CommonCallback<String> listener){
RequestParams params=new RequestParams(url);
......@@ -65,18 +70,12 @@ public class HttpHolder {
}
//批量导出
/**
*
* @param infos
* @param http
*/
public static void volumeExport(List<OcrRootBean.Superior> infos, final OnHttpListener http){
RequestParams params=new RequestParams(RequestConfig.BATCH_EXPORT_URL);
params.addHeader("X-Auth-Token","ocr");
String json= GsonUtil.getInstance().toJson(infos);
params.addBodyParameter("params",json);
x.http().get(params, new Callback.CommonCallback<String>() {
x.http().post(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
http.success("",result);
......@@ -93,7 +92,7 @@ public class HttpHolder {
}
});
}
//批量删除
//批量删除导出记录
public static void volumeDelete(final List<OcrRootBean.Superior> list, final OnHttpListener listener){
JSONArray array= new JSONArray();
for(int i=0;i<list.size();i++)
......@@ -118,15 +117,79 @@ public class HttpHolder {
}
});
}
//单个下载
public static void downLoad(Map<String,String> map,MainHttpCallBack callBack){
public static void downLoad(Map<String,String> map, HttpFileCallBack callBack){
RequestParams params=new RequestParams(RequestConfig.DOWN_LOAD_URL);
Iterator<Map.Entry<String,String>> it = map.entrySet().iterator();
while (it.hasNext()){
Map.Entry<String,String> entry = it.next();
if(entry.getKey().equals("downloadName")){
if(entry.getValue().contains("doc"))
params.setSaveFilePath(Configs.WORD_BASE+"/"+entry.getValue().substring(entry.getValue().lastIndexOf("/")+1));
}
params.addBodyParameter(entry.getKey(),String.valueOf(entry.getValue()));
}
x.http().get(params,callBack);
}
//分享单个文件
public static void shareCcFile(OcrInfo info, VertifyActivity.HttpCallBack callBack){
RequestParams params=new RequestParams(RequestConfig.SHARE_ALONE_URL);
params.addHeader("X-Auth-Token","share");
params.addBodyParameter("sharingPeple", Configs.USER_NAME+"_"+Configs.USER_ID);
params.addBodyParameter("type","0");
params.addBodyParameter("fileId",info.getId());
params.addBodyParameter("fileName",info.getFileName());
params.addBodyParameter("filePath",info.getFilePath());
x.http().post(params,callBack);
}
//批量分享
public static void batchShareCcFile(List<ShareInfo> infos, MainHttpCallBack callBack) {
RequestParams params = new RequestParams(RequestConfig.BATCH_SHARE_URL);
params.addHeader("X-Auth-Token", "share");
params.addBodyParameter("params", GsonUtil.getInstance().toJson(infos));
x.http().post(params, callBack);
}
//批量删除分享记录
public static void batchDeleteShareRecord(List<ShareInfo> list,MainHttpCallBack callBack){
RequestParams params=new RequestParams(RequestConfig.BATCH_DELETE_SHARE_URL);
JSONArray array= new JSONArray();
for(int i=0;i<list.size();i++)
array.put(list.get(i).getId());
params.addBodyParameter("ids",array.toString());
x.http().post(params,callBack);
}
//批量创建文件
public static void batchCreateFiles(List<OcrRootBean.Cc_file> files,MainHttpCallBack callBack){
List<OcrRootBean.Cc_file> newFiles=new ArrayList<>();
OcrRootBean.Cc_file cc_file;
for(OcrRootBean.Cc_file file:files){
cc_file=new OcrRootBean.Cc_file(file.getFileName(),file.getFilePath(),file.getFileSuffix(),file.getUploadPeple(),file.getFileType());
newFiles.add(cc_file);
}
RequestParams params=new RequestParams(RequestConfig.BATCH_CREATE_FILE_URL);
params.addHeader("X-Auth-Token","batch_create");
params.addBodyParameter("params",GsonUtil.getInstance().toJson(newFiles));
x.http().post(params,callBack);
}
//创建文件
public static void newFileCreate(OcrRootBean.Cc_file cc_file,MainHttpCallBack callBack){
RequestParams params=new RequestParams(CREATE_FILE_URL);
params.addHeader("X-Auth-Token","new");
params.addBodyParameter("fileName",cc_file.getFileName());
params.addBodyParameter("filePath",cc_file.getFilePath());
params.addBodyParameter("fileSuffix",cc_file.getFileSuffix());
params.addBodyParameter("uploadPeple",Configs.USER_NAME+"_"+Configs.USER_ID);
params.addBodyParameter("fileType",cc_file.getFileType());
x.http().post(params,callBack);
}
//编辑分享记录
public static void editShareRecord(String id,String name,MainHttpCallBack callBack){
String url=RequestConfig.SHARE_LIST_URL+"/"+id+"/edit";
RequestParams params=new RequestParams(url);
params.addHeader("X-Auth-Token","edit");
params.addBodyParameter("fileName",name);
x.http().post(params,callBack);
}
}
package cn.com.bril.androidocr.studio.ui.activity;
import android.Manifest;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.os.RemoteException;
import android.support.annotation.IdRes;
import android.support.annotation.NonNull;
import android.support.design.widget.FloatingActionButton;
import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.PopupWindow;
......@@ -34,39 +35,26 @@ import android.widget.Toast;
import com.bril.baoding.studio.aidl.GetUserid;
import com.scanlibrary.ScanConstants;
import org.json.JSONException;
import org.json.JSONObject;
import org.xutils.http.RequestParams;
import org.xutils.x;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import cn.com.bril.androidocr.studio.OcrApplication;
import cn.com.bril.androidocr.studio.R;
import cn.com.bril.androidocr.studio.beans.OcrRootBean;
import cn.com.bril.androidocr.studio.configs.Configs;
import cn.com.bril.androidocr.studio.configs.RequestConfig;
import cn.com.bril.androidocr.studio.http.HttpHolder;
import cn.com.bril.androidocr.studio.http.MainHttpCallBack;
import cn.com.bril.androidocr.studio.interf.HandleMenuListener;
import cn.com.bril.androidocr.studio.interf.OnHttpListener;
import cn.com.bril.androidocr.studio.ui.adapter.FragmentListAdapter;
import cn.com.bril.androidocr.studio.ui.adapter.TabFragmentPagerAdapter;
import cn.com.bril.androidocr.studio.ui.fragment.ExportFragment;
import cn.com.bril.androidocr.studio.ui.fragment.ShareFragment;
import cn.com.bril.androidocr.studio.ui.widget.NoScrollViewPager;
import cn.com.bril.androidocr.studio.utils.CustomDialogUtils;
import cn.com.bril.androidocr.studio.utils.FileUtil;
import cn.com.bril.androidocr.studio.utils.ScreenUtil;
import cn.com.bril.androidocr.studio.utils.ViewUtil;
public class MainActivity extends BaseActivity implements FragmentListAdapter.ListTextClickListener, View.OnClickListener, HandleMenuListener, ExportFragment.NoticeMessageToMain, OnHttpListener {
import static cn.com.bril.androidocr.studio.configs.RequestConfig.PERMISSION_REQUEST_CODE;
public class MainActivity extends BaseActivity implements View.OnClickListener, HandleMenuListener, ExportFragment.NoticeMessageToMain {
@BindView(R.id.layout_1)
......@@ -124,21 +112,19 @@ public class MainActivity extends BaseActivity implements FragmentListAdapter.Li
private int type;//获取图片类型
private GetUserid mService;
private boolean isTabMenuShow = false;
private List<Fragment> fragmentList;
private ServiceConnection mServiceConnection = new ServiceConnection() {
@Override
public void onServiceDisconnected(ComponentName arg0) {
mService = null;
}
@Override
public void onServiceConnected(ComponentName arg0, IBinder arg1) {
mService = GetUserid.Stub.asInterface(arg1);
try {
Configs.USER_ID = mService.getUserid() + "";
Configs.USER_NAME = mService.getUsername();
Log.e("TAG", Configs.USER_ID+";"+ Configs.USER_NAME );
} catch (RemoteException e) {
e.printStackTrace();
......@@ -148,13 +134,10 @@ public class MainActivity extends BaseActivity implements FragmentListAdapter.Li
private AlertDialog dialog;
private ExportFragment exportFragment;
private ShareFragment shareFragment;
private List<OcrRootBean> selectedInfos;
private OcrRootBean clickedBean;
private EditText reNameEdit;//更改文件名
private TabFragmentPagerAdapter adapter;
private boolean isAllSelected = false;
private ArrayList<Uri> shareFileUris;
private PopupWindow rightMenuWindow;
int selectedCount=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -171,6 +154,8 @@ public class MainActivity extends BaseActivity implements FragmentListAdapter.Li
initEvents();
checkPermission();
dialog = new ProgressDialog(this);
}
......@@ -179,7 +164,20 @@ public class MainActivity extends BaseActivity implements FragmentListAdapter.Li
intent.setPackage("com.bril.baoding.studio");
bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);
}
public void checkPermission() {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
//权限还没有授予,需要在这里写申请权限的代码
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},
PERMISSION_REQUEST_CODE);
} else {
//权限已经被授予,在这里直接写要执行的相应方法即可
// creatDir(Configs.IMAGE_CACHE);
// getIntentData();
}
}
private void initViews() {
rightIv.setVisibility(View.VISIBLE);
rightTv.setVisibility(View.GONE);
......@@ -196,10 +194,6 @@ public class MainActivity extends BaseActivity implements FragmentListAdapter.Li
}
public void setIconSize() {
//设置bottom icon 大小
......@@ -260,6 +254,17 @@ public class MainActivity extends BaseActivity implements FragmentListAdapter.Li
});
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if(requestCode==PERMISSION_REQUEST_CODE){
for(int grant: grantResults){
if(grant!=PackageManager.PERMISSION_GRANTED)
Toast.makeText(this,"请开启读取与写入权限",Toast.LENGTH_SHORT).show();
}
}
}
@Override
protected void onResume() {
super.onResume();
......@@ -332,8 +337,6 @@ public class MainActivity extends BaseActivity implements FragmentListAdapter.Li
// rightMenuWindow.showAsDropDown(rightIv);
}
@Override
public void onBackPressed() {
if (tabBottom.getVisibility() == View.VISIBLE) {
......@@ -348,46 +351,27 @@ public class MainActivity extends BaseActivity implements FragmentListAdapter.Li
}
}
@Override
public void onListTextCallBack(OcrRootBean info) {
clickedBean = info;
View view = LayoutInflater.from(this).inflate(R.layout.rename_dialog_layout, null);
view.findViewById(R.id.normal_name).setOnClickListener(this);
view.findViewById(R.id.positive).setOnClickListener(this);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(view);
reNameEdit = (EditText) view.findViewById(R.id.edit);
reNameEdit.setHint(info.getIncludes().getCc_file().getFileName());
dialog = builder.create();
dialog.show();
CustomDialogUtils.setDialogSize(this, dialog);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.positive:
reNameFile();
dialog.dismiss();
break;
case R.id.normal_name:
dialog.dismiss();
break;
case R.id.export:
HttpHolder.volumeExport(reStatusList(0), this);
break;
case R.id.share:
if (selectedInfos != null && selectedInfos.size() > 0) {
// Toast.makeText(this,"正在检测需下载文件,请稍等...",Toast.LENGTH_SHORT).show();
getNotLoadFilesAndLoad(selectedInfos);
if (selectedCount> 0) {
setHandleMenu(View.GONE);
if(viewPager.getCurrentItem()==0)
exportFragment.handleShareAction();
else
shareFragment.handleShareAction();
} else
Toast.makeText(this, "请选择要分享的数据", Toast.LENGTH_SHORT).show();
break;
case R.id.delete:
if (selectedInfos != null && selectedInfos.size() > 0) {
if (selectedCount > 0) {
setHandleMenu(View.GONE);
HttpHolder.volumeDelete(reStatusList(-1), this);
if(viewPager.getCurrentItem()==0)
exportFragment.handleDeleteAction();
else
shareFragment.handleDeletAction();
} else
Toast.makeText(this, "请选择要删除的数据", Toast.LENGTH_SHORT).show();
break;
......@@ -405,26 +389,6 @@ public class MainActivity extends BaseActivity implements FragmentListAdapter.Li
}
}
public List<OcrRootBean.Superior> reStatusList(int type) {
List<OcrRootBean.Superior> list = new ArrayList<>();
for (OcrRootBean info : selectedInfos) {
if (type != -1)
info.getSuperior().setType(type);
list.add(info.getSuperior());
}
return list;
}
private void reNameFile() {
String url = RequestConfig.EDIT_FILE_URL + clickedBean.getSuperior().getFileId() + "/edit";
RequestParams params = new RequestParams(url);
params.addHeader("X-Auth-Token", "1");
String lastName=clickedBean.getIncludes().getCc_file().getFileName();
params.addBodyParameter("fileName", reNameEdit.getText().toString()+lastName.substring(lastName.indexOf(".")));
//缺少修改人
x.http().post(params, new MainHttpCallBack("edit", this));
}
@Override
public void setHandleMenu(int v) {
if (View.GONE == v) {
......@@ -433,7 +397,7 @@ public class MainActivity extends BaseActivity implements FragmentListAdapter.Li
topBarLayout.setVisibility(View.VISIBLE);
mainBottomMenu.setVisibility(View.VISIBLE);
viewPager.setScanScroll(true);
adapter.notifyDataSetChanged();
// adapter.notifyDataSetChanged();
} else {
tabHead.setVisibility(View.VISIBLE);
tabBottom.setVisibility(View.VISIBLE);
......@@ -444,122 +408,10 @@ public class MainActivity extends BaseActivity implements FragmentListAdapter.Li
}
}
private void getNotLoadFilesAndLoad(List<OcrRootBean> list) {
List<OcrRootBean> loadBeans = new ArrayList<>();
shareFileUris = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
OcrRootBean.Cc_file cc_file = list.get(i).getIncludes().getCc_file();
String type = cc_file.getFileName().substring(cc_file.getFileName().indexOf(".") + 1);
String filePath = "";
if ("doc".equals(type) || "docs".equals(type))
filePath = Configs.WORD_BASE + "/" + cc_file.getFileName();
else if ("txt".equals(type))
filePath = Configs.TXT_BASE + "/" + cc_file.getFileName();
else if ("pdf".equals(type))
filePath = Configs.PDF_BASE + "/" + cc_file.getFileName();
shareFileUris.add(Uri.parse(filePath));
if (!FileUtil.isFileExist(filePath))
loadBeans.add(selectedInfos.get(i));
}
if (loadBeans.size() != 0) {
dialog.setMessage("正在下载,请稍后");
dialog.show();
loadFile(loadBeans.get(0));
handler = new LoadFileHandler(loadBeans);
}
}
private void loadFile(OcrRootBean bean) {
Map<String, String> map = new HashMap<>();
map.put("fileName", bean.getIncludes().getCc_file().getFilePath());
map.put("downloadName", bean.getIncludes().getCc_file().getFileName());
HttpHolder.downLoad(map, new MainHttpCallBack("batch_load", this));
}
private LoadFileHandler handler;
private int loadIndex = 0;
public class LoadFileHandler extends Handler {
List<OcrRootBean> loadList;
public LoadFileHandler(List<OcrRootBean> list) {
loadList = list;
}
@Override
public void handleMessage(Message msg) {
int position = msg.arg1;
switch (msg.what) {
case 0:
Toast.makeText(MainActivity.this, loadList.get(position).getIncludes().getCc_file().getFileName() + "下载失败,请稍后重试", Toast.LENGTH_SHORT).show();
break;
case 1:
loadIndex++;
if (loadIndex < loadList.size())
loadFile(loadList.get(loadIndex));
else {
dialog.dismiss();
handleShareAction(selectedInfos);
}
break;
}
}
}
private void handleShareAction(List<OcrRootBean> rootBeen) {
//分享文件
Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);//发送多个文件
intent.setType("*/*");//多个文件格式
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, shareFileUris);//Intent.EXTRA_STREAM同于传输文件流
startActivity(Intent.createChooser(intent, "多文件分享"));
setHandleMenu(View.GONE);
}
@Override
public void noticeMessage(List<OcrRootBean> list) {
selectedInfos = list;
num.setText("已选择" + list.size() + "个");
public void noticeMessage(int size) {
selectedCount=size;
num.setText("已选择" + size + "个");
}
//xutils的接口回调
@Override
public void success(String type, String result) {
if ("edit".equals(type)) {
Toast.makeText(this, "修改成功", Toast.LENGTH_SHORT).show();
adapter.notifyDataSetChanged();
} else if ("delete".equals(type)) {
try {
JSONObject object = new JSONObject(result);
String data = object.getString("message");
if (data.contains("success")) {
Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();
adapter.notifyDataSetChanged();
}
} catch (JSONException e) {
e.printStackTrace();
}
} else if ("download".equals(type)) {
Toast.makeText(this, "下载成功,再次点击可进行查看", Toast.LENGTH_SHORT).show();
} else if ("batch_load".equals(type)) {
Message message = Message.obtain();
message.arg1 = loadIndex;
message.what = 1;
handler.sendMessage(message);
}
}
@Override
public void error(String type, Throwable t) {
if ("batch_load".equals(type)) {
Message message = Message.obtain();
message.arg1 = loadIndex;
handler.sendMessage(message);
} else
Toast.makeText(this, "网络连接异常,请调试=" + t.getMessage(), Toast.LENGTH_SHORT).show();
}
}
......@@ -44,6 +44,7 @@ import cn.com.bril.androidocr.studio.R;
import cn.com.bril.androidocr.studio.beans.ExportInfo;
import cn.com.bril.androidocr.studio.beans.Image;
import cn.com.bril.androidocr.studio.beans.OcrInfo;
import cn.com.bril.androidocr.studio.beans.ShareInfo;
import cn.com.bril.androidocr.studio.configs.Configs;
import cn.com.bril.androidocr.studio.configs.RequestConfig;
import cn.com.bril.androidocr.studio.http.HttpHolder;
......@@ -85,7 +86,7 @@ public class VertifyActivity extends AppCompatActivity {
private String statusType;
private OcrInfo ocrInfo;
File shareFile;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -236,7 +237,6 @@ public class VertifyActivity extends AppCompatActivity {
// handler.sendEmptyMessageDelayed(1,500);
statusType="0";
exportPdf();
break;
case R.id.radio1:
img.setTextColor(getResources().getColor(R.color.yellow));
......@@ -292,34 +292,35 @@ public class VertifyActivity extends AppCompatActivity {
}
private void exportDoc(String type) {
if(null==ocrInfo)
try {
String filename = image.getName().replace("jpg", "doc");
String path = Configs.WORD_BASE + "/" + filename;
String content = "检务通识别文档\n " + recogniztion;
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(recogniztion.getBytes("GB2312"));
POIFSFileSystem fileSystem = new POIFSFileSystem();
DirectoryEntry directory = fileSystem.getRoot();
directory.createDocument("WordDocument", byteArrayInputStream);
FileOutputStream fileOutputStream = new FileOutputStream(path);
fileSystem.writeFilesystem(fileOutputStream);
byteArrayInputStream.close();
fileOutputStream.close();
if("share".equals(type))
ShareUtil.shareFile(this,new File(path));
HttpHolder.upLoadFile(path, new HttpCallBack("upload"));
} catch (IOException e) {
if (null == ocrInfo){
try {
String filename = image.getName().replace("jpg", "doc");
String path = Configs.WORD_BASE + "/" + filename;
String content = "检务通识别文档\n " + recogniztion;
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(content.getBytes("GB2312"));
POIFSFileSystem fileSystem = new POIFSFileSystem();
DirectoryEntry directory = fileSystem.getRoot();
directory.createDocument("WordDocument", byteArrayInputStream);
FileOutputStream fileOutputStream = new FileOutputStream(path);
fileSystem.writeFilesystem(fileOutputStream);
byteArrayInputStream.close();
fileOutputStream.close();
shareFile = new File(path);
// if("share".equals(type))
// ShareUtil.shareFile(this,new File(path));
HttpHolder.upLoadFile(path, new HttpCallBack("upload"));
} catch (IOException e) {
Log.e("TAG", e.getMessage());
}
}else{
Map<String,Object> map=new HashMap<>();
map.put("header","X-Auth-Token");
map.put("fileId",ocrInfo.getId());
map.put("exportUser",Configs.USER_NAME + "_" + Configs.USER_ID);
map.put("type",statusType);//0导出;2分享
HttpHolder.createFileRecord(RequestConfig.EXPORT_CREATE_URL,map,new HttpCallBack(statusType));
Map<String,Object> map=new HashMap<>();
map.put("header","X-Auth-Token");
map.put("fileId",ocrInfo.getId());
map.put("exportUser",Configs.USER_NAME + "_" + Configs.USER_ID);
map.put("type",statusType);//0导出;2分享
HttpHolder.createFileRecord(RequestConfig.EXPORT_CREATE_URL,map,new HttpCallBack(statusType));
}
}
}
public class HttpCallBack implements Callback.CommonCallback<String>{
String httpType;
......@@ -333,12 +334,17 @@ public class VertifyActivity extends AppCompatActivity {
JSONObject object = new JSONObject(result);
String filePath = object.getString("message");
String fileName = filePath.substring(4);
String suffix="";
if(fileName.contains("txt"))
suffix="txt";
else if(fileName.contains("doc") || fileName.contains("docs"))
suffix="doc";
Map<String, Object> map = new HashMap<>();
map.put("header", filePath);
map.put("filePath", filePath);
map.put("fileName", fileName);
map.put("fileSuffix",fileName.substring(fileName.indexOf(".")+1));
map.put("status","ocr");
map.put("fileSuffix",suffix);
map.put("fileType","ocr");
map.put("uploadPeple", Configs.USER_NAME + "_" + Configs.USER_ID);
HttpHolder.exportFile(RequestConfig.ADD_URL, map, new HttpCallBack("create_file"));
} catch (JSONException e) {
......@@ -347,14 +353,17 @@ public class VertifyActivity extends AppCompatActivity {
}else if("create_file".equals(httpType)){
ocrInfo = GsonUtil.getInstance().fromJson(result, new TypeToken<OcrInfo>() {
}.getType());
Map<String,Object> map=new HashMap<>();
map.put("header","X-Auth-Token");
map.put("fileId",ocrInfo.getId());
map.put("exportUser",Configs.USER_NAME + "_" + Configs.USER_ID);
map.put("type",statusType);//0导出;1分享
HttpHolder.createFileRecord(RequestConfig.EXPORT_CREATE_URL,map,new HttpCallBack(statusType));
}else if("0".equals(httpType)){
if(statusType.equals("0")){
Map<String,Object> map=new HashMap<>();
map.put("header","X-Auth-Token");
map.put("fileId",ocrInfo.getId());
map.put("exportUser",Configs.USER_NAME + "_" + Configs.USER_ID);
map.put("type",statusType);//0导出;2分享
HttpHolder.createFileRecord(RequestConfig.EXPORT_CREATE_URL,map,new HttpCallBack(statusType));
}else{
HttpHolder.shareCcFile(ocrInfo,new HttpCallBack("share"));
}
}else if("0".equals(httpType)){
if(dialog!=null && dialog.isShowing())
dialog.dismiss();
ExportInfo exportInfo= GsonUtil.getInstance().fromJson(result, new TypeToken<ExportInfo>() {
......@@ -362,12 +371,14 @@ public class VertifyActivity extends AppCompatActivity {
if(null!=exportInfo){
Toast.makeText(VertifyActivity.this,"导出成功,请在文件管理/documentocr下查看",Toast.LENGTH_SHORT).show();
}
}else if ("1".equals(httpType)){
ExportInfo exportInfo= GsonUtil.getInstance().fromJson(result, new TypeToken<ExportInfo>() {
}else if ("share".equals(httpType)){
ShareInfo shareInfo= GsonUtil.getInstance().fromJson(result, new TypeToken<ShareInfo>() {
}.getType());
if(null==exportInfo){
if(null==shareInfo){
Toast.makeText(VertifyActivity.this,"分享记录提交失败,请重新尝试",Toast.LENGTH_SHORT).show();
}
}else
ShareUtil.shareFile(VertifyActivity.this,shareFile);
}
}
......
......@@ -7,6 +7,7 @@ import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
......@@ -51,6 +52,7 @@ public class FragmentListAdapter extends BaseAdapter {
}
return newInfos;
}
@Override
public int getCount() {
return infos.size();
......@@ -75,6 +77,7 @@ public class FragmentListAdapter extends BaseAdapter {
holder.title= (TextView)convertView .findViewById(R.id.title);
holder.time= (TextView) convertView.findViewById(R.id.time);
holder.radioButton= (CheckBox) convertView.findViewById(R.id.radio);
holder.iv= (ImageView) convertView.findViewById(R.id.icon);
convertView.setTag(holder);
}else
holder= (ViewHolder) convertView.getTag();
......@@ -88,6 +91,17 @@ public class FragmentListAdapter extends BaseAdapter {
else
fileName=s;
holder.title.setText(fileName);
String suffix=info.getIncludes().getCc_file().getFileSuffix();
if(suffix!=null){
if(suffix.contains("txt"))
holder.iv.setImageDrawable(context.getResources().getDrawable(R.drawable.txt));
else if(suffix.contains("doc"))
holder.iv.setImageDrawable(context.getResources().getDrawable(R.drawable.word));
else if(suffix.contains("pdf"))
holder.iv.setImageDrawable(context.getResources().getDrawable(R.drawable.word));
}else
holder.iv.setImageDrawable(context.getResources().getDrawable(R.drawable.word));
holder.title.setOnClickListener(new ListTextOnClickListener(position));
holder.radioButton.setVisibility(show);
holder.radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
......@@ -109,7 +123,7 @@ public class FragmentListAdapter extends BaseAdapter {
@Override
public void onClick(View v) {
listTextClickListener.onListTextCallBack(infos.get(position));
listTextClickListener.onListTextCallBack(position);
}
}
......@@ -118,10 +132,11 @@ public class FragmentListAdapter extends BaseAdapter {
}
public interface ListTextClickListener{
void onListTextCallBack(OcrRootBean info);
void onListTextCallBack(int postion);
}
class ViewHolder{
TextView title,time;
ImageView iv;
CheckBox radioButton;
}
}
package cn.com.bril.androidocr.studio.ui.fragment;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import com.google.gson.reflect.TypeToken;
import org.json.JSONException;
import org.json.JSONObject;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;
......@@ -27,22 +33,28 @@ import java.util.List;
import cn.com.bril.androidocr.studio.R;
import cn.com.bril.androidocr.studio.beans.OcrRootBean;
import cn.com.bril.androidocr.studio.beans.ShareInfo;
import cn.com.bril.androidocr.studio.configs.Configs;
import cn.com.bril.androidocr.studio.configs.RequestConfig;
import cn.com.bril.androidocr.studio.http.HttpHolder;
import cn.com.bril.androidocr.studio.http.MainHttpCallBack;
import cn.com.bril.androidocr.studio.interf.HandleMenuListener;
import cn.com.bril.androidocr.studio.interf.OnHttpListener;
import cn.com.bril.androidocr.studio.ui.adapter.FragmentListAdapter;
import cn.com.bril.androidocr.studio.ui.pulltorefresh.PullToRefreshBase;
import cn.com.bril.androidocr.studio.ui.pulltorefresh.PullToRefreshListView;
import cn.com.bril.androidocr.studio.utils.CustomDialogUtils;
import cn.com.bril.androidocr.studio.utils.FileType;
import cn.com.bril.androidocr.studio.utils.FileUtil;
import cn.com.bril.androidocr.studio.utils.GsonUtil;
import cn.com.bril.androidocr.studio.utils.HttpUtil;
import cn.com.bril.androidocr.studio.utils.IntentUtil;
import cn.com.bril.androidocr.studio.utils.ShareUtil;
/**
* Created by sunny on 2018-3-12.
*/
public class ExportFragment extends Fragment {
public class ExportFragment extends Fragment implements OnHttpListener,FragmentListAdapter.ListTextClickListener,View.OnClickListener {
private PullToRefreshListView pullToRefreshListView;
......@@ -58,13 +70,36 @@ public class ExportFragment extends Fragment {
private HandleMenuListener handleMenuListener;
private List<OcrRootBean> selectedInfos=new ArrayList<>();
private NoticeMessageToMain messageToMain;
private ArrayList<OcrRootBean> loadBeans;//需下载项
private int curLoadIndex;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what==1){
curLoadIndex++;
if (curLoadIndex < loadBeans.size())
downLoadFile(loadBeans.get(curLoadIndex).getIncludes().getCc_file().getFilePath(),loadBeans.get(curLoadIndex).getIncludes().getCc_file().getFileName(),"batch_load");
else {
progressDialog.dismiss();
batchShareAdd();
}
}else if(msg.what==0){
Toast.makeText(context, selectedInfos.get(curLoadIndex).getIncludes().getCc_file().getFileName() + "下载失败,请稍后重试", Toast.LENGTH_SHORT).show();
}else if(msg.what==2){
Toast.makeText(context, "下载已完成,再次点击可打开", Toast.LENGTH_SHORT).show();
}
}
};
private EditText reNameEdit;
private OcrRootBean.Cc_file clickedFileItem;
private int createCount;//分享时创建文件信息数量记录
// private List<OcrRootBean.Cc_file> shareFileInfos;
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context=context;
handleMenuListener= (HandleMenuListener) context;
listener= (FragmentListAdapter.ListTextClickListener) context;
messageToMain= (NoticeMessageToMain) context;
}
......@@ -75,7 +110,18 @@ public class ExportFragment extends Fragment {
public void setSelectedInfos(List<OcrRootBean> selectedInfos) {
this.selectedInfos = selectedInfos;
}
//批量删除
public void handleDeleteAction(){
List<OcrRootBean.Superior> superiors=new ArrayList<>();
for(OcrRootBean bean: selectedInfos){
superiors.add(bean.getSuperior());
}
HttpHolder.volumeDelete(superiors, this);
}
//批量分享响应
public void handleShareAction(){
getNotLoadFilesAndLoad(selectedInfos);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
......@@ -93,12 +139,14 @@ public class ExportFragment extends Fragment {
public void initViews(View view){
pullToRefreshListView= (PullToRefreshListView) view.findViewById(R.id.pullrefreshView);
pullToRefreshListView.setPullLoadEnabled(true);
pullToRefreshListView.setPullRefreshEnabled(true);
listView=pullToRefreshListView.getRefreshableView();
adaper=new FragmentListAdapter(context, exportInfos , listener, new FragmentListAdapter.AdapterRadioSelectedListener() {
adaper=new FragmentListAdapter(context, exportInfos , this, new FragmentListAdapter.AdapterRadioSelectedListener() {
@Override
public void adapterRadioSelectedCallBack() {
setSelectedInfos(adaper.getSelectedInfo());
messageToMain.noticeMessage(adaper.getSelectedInfo());
messageToMain.noticeMessage(adaper.getSelectedInfo().size());
}
});
listView.setAdapter(adaper);
......@@ -133,7 +181,6 @@ public class ExportFragment extends Fragment {
Toast.makeText(context,"暂无网络连接",Toast.LENGTH_LONG).show();
refreshView.onPullDownRefreshComplete();
}
}
});
......@@ -152,40 +199,83 @@ public class ExportFragment extends Fragment {
String fileName=exportInfos.get(position).getIncludes().getCc_file().getFileName();
if(fileName.contains(".pdf")){
if(FileUtil.isFileExist(Configs.PDF_BASE+"/"+fileName))
startFileIntent("pdf",fileName);
FileType.openFile(context,new File(Configs.PDF_BASE+"/"+fileName));
else{
progressDialog.setMessage("正在下载...");
progressDialog.show();
downLoadFile(path, fileName);
downLoadFile(path, fileName,"single");
}
}else if(fileName.contains(".doc")|| fileName.contains(".docs")){
if(FileUtil.isFileExist(Configs.WORD_BASE+"/"+fileName))
startFileIntent("word",fileName);
FileType.openFile(context,new File(Configs.WORD_BASE+"/"+fileName));
else
downLoadFile(path, fileName);
downLoadFile(path, fileName,"single");
}else if(fileName.contains(".txt")){
if(FileUtil.isFileExist(Configs.TXT_BASE+"/"+fileName))
startFileIntent("txt",fileName);
if(FileUtil.isFileExist(Configs.TXT_BASE+"/"+fileName)){
FileType.openFile(context,new File(Configs.TXT_BASE+"/"+fileName));
}
else
downLoadFile(path, fileName);
downLoadFile(path, fileName,"single");
}
}
});
}
private void downLoadFile(String path, String fileName) {
private ArrayList<Uri> shareFileUris;
//获取待下载项&&分享
private void getNotLoadFilesAndLoad(List<OcrRootBean> list) {
loadBeans = new ArrayList<>();
shareFileUris = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
OcrRootBean.Cc_file cc_file = list.get(i).getIncludes().getCc_file();
String type = cc_file.getFileName().substring(cc_file.getFileName().indexOf(".") + 1);
String filePath = "";
if ("doc".equals(type) || "docs".equals(type))
filePath = Configs.WORD_BASE + "/" + cc_file.getFileName();
else if ("txt".equals(type))
filePath = Configs.TXT_BASE + "/" + cc_file.getFileName();
else if ("pdf".equals(type))
filePath = Configs.PDF_BASE + "/" + cc_file.getFileName();
shareFileUris.add(FileUtil.getFileUri(context,new File(filePath)));
if (!FileUtil.isFileExist(filePath))
loadBeans.add(selectedInfos.get(i));
}
if (loadBeans.size() != 0) {
progressDialog.setMessage("正在下载,请稍后");
progressDialog.show();
curLoadIndex=0;
downLoadFile(loadBeans.get(curLoadIndex).getIncludes().getCc_file().getFilePath(),loadBeans.get(0).getIncludes().getCc_file().getFileName(),"batch_load");
}else{
// batchCreateFiles();
batchShareAdd();
}
}
private void downLoadFile(String path, String fileName, final String type) {
RequestParams params=new RequestParams(RequestConfig.DOWN_LOAD_URL);
params.addBodyParameter("fileName",path);
params.addBodyParameter("downloadName",fileName);
params.setSaveFilePath(Configs.WORD_BASE+"/"+fileName);
String url="";
if(fileName.contains("txt"))
url=Configs.TXT_BASE+"/"+fileName;
else if(fileName.contains("doc"))
url=Configs.WORD_BASE+"/"+fileName;
params.setSaveFilePath(url);
x.http().get(params, new Callback.CommonCallback<File>() {
@Override
public void onSuccess(File result) {
progressDialog.dismiss();
Toast.makeText(context,"下载成功", Toast.LENGTH_SHORT).show();
if(type.equals("batch_load")){
handler.sendEmptyMessage(1);
}else{
handler.sendEmptyMessage(2);
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Log.e("TAG", "onError: "+ex.getMessage());
handler.sendEmptyMessage(0);
}
@Override
public void onCancelled(CancelledException cex) {
......@@ -195,35 +285,10 @@ public class ExportFragment extends Fragment {
}
});
}
private void startFileIntent(String type,String path){
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
File file;
Uri uri;
if("word".equals(type)){
file= new File(Configs.WORD_BASE+"/"+path);
uri= Uri.fromFile(file);
intent.setDataAndType(uri, "application/msword");
}else if("pdf".equals(type)){
file= new File(Configs.PDF_BASE+"/"+path);
uri= Uri.fromFile(file);
intent.setDataAndType(uri, "application/pdf");
}else if("txt".equals(type)){
file= new File(Configs.TXT_BASE+"/"+path);
uri= Uri.fromFile(file);
intent.setDataAndType(uri, "text/plain");
}
if(IntentUtil.isIntentAvailable(context,intent))
startActivity(intent);
else
Toast.makeText(context,"请检测是否已安装相应的文件打开工具",Toast.LENGTH_SHORT).show();
}
//获取列表
private void getExportRecord(){
RequestParams params=new RequestParams(RequestConfig.EXPORT_RECORD_URL);
params.addBodyParameter("page",page+"");
params.addBodyParameter("pageNo",page+"");
params.addBodyParameter("sortItem","create_time");
params.addBodyParameter("sortOrder","desc");
String userInfo= Configs.USER_NAME+"_"+Configs.USER_ID;
......@@ -231,55 +296,141 @@ public class ExportFragment extends Fragment {
params.addBodyParameter("filters",json);
String json2="{\"cc_file\":{\"includes\":[\"file_id\"]}}";
params.addBodyParameter("includes",json2);
x.http().post(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
List<OcrRootBean> been=GsonUtil.getInstance().fromJson(result,new TypeToken<List<OcrRootBean>>(){}.getType());
if(isUpdate){
exportInfos.clear();
}
exportInfos.addAll(been);
if(been.size()==0){
Toast.makeText(context,"暂无数据",Toast.LENGTH_SHORT).show();
}
else if(been.size()<10&& been.size()>0){
hasMoreData=false;
// Toast.makeText(context,"无更多数据",Toast.LENGTH_SHORT).show();
}
else
hasMoreData=true;
x.http().post(params,new MainHttpCallBack("list",this));
}
adaper.notifyDataSetChanged();
//批量分享
private void batchShareAdd() {
List<ShareInfo> list=new ArrayList<>();
ShareInfo superior;
for(OcrRootBean bean: selectedInfos){
superior=new ShareInfo();
superior.setFileName(bean.getIncludes().getCc_file().getFileName());
superior.setFilePath(bean.getIncludes().getCc_file().getFilePath());
// superior.setFileId(bean.getId());
superior.setType("0");
superior.setSharingPeple(bean.getSuperior().getExportUser());
list.add(superior);
}
HttpHolder.batchShareCcFile(list,new MainHttpCallBack("batch_share",this));
}
pullToRefreshListView.onPullUpRefreshComplete();
pullToRefreshListView.onPullDownRefreshComplete();
pullToRefreshListView.setHasMoreData(hasMoreData);
}
public void setAllItemChecked(boolean flg){
adaper.setRadioAllSelected(flg);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Toast.makeText(context,"网络异常,请检测...",Toast.LENGTH_SHORT).show();
pullToRefreshListView.onPullUpRefreshComplete();
pullToRefreshListView.onPullDownRefreshComplete();
public void setCheckBoxShow(int v){
adaper.setRadioShow(v);
}
private void reNameFile() {
String url = RequestConfig.EDIT_FILE_URL + clickedFileItem.getId() + "/edit";
RequestParams params = new RequestParams(url);
params.addHeader("X-Auth-Token", "1");
String lastName=clickedFileItem.getFileName();
params.addBodyParameter("fileName", reNameEdit.getText().toString()+lastName.substring(lastName.indexOf(".")));
//缺少修改人
x.http().post(params, new MainHttpCallBack("edit", this));
}
@Override
public void success(String type, String result) {
if(type.equals("list")){
List<OcrRootBean> been=GsonUtil.getInstance().fromJson(result,new TypeToken<List<OcrRootBean>>(){}.getType());
if(isUpdate){
exportInfos.clear();
}
@Override
public void onCancelled(CancelledException cex) {
exportInfos.addAll(been);
if(been.size()==0){
Toast.makeText(context,"暂无数据",Toast.LENGTH_SHORT).show();
}
@Override
public void onFinished() {
else if(been.size()<10&& been.size()>0){
hasMoreData=false;
}
});
else
hasMoreData=true;
adaper.notifyDataSetChanged();
pullToRefreshListView.onPullUpRefreshComplete();
pullToRefreshListView.onPullDownRefreshComplete();
pullToRefreshListView.setHasMoreData(hasMoreData);
}else if ("edit".equals(type)) {
OcrRootBean.Cc_file file=GsonUtil.getInstance().fromJson(result,new TypeToken<OcrRootBean.Cc_file>(){}.getType());
if(null!=file){
Toast.makeText(context, "修改成功", Toast.LENGTH_SHORT).show();
pullToRefreshListView.doPullRefreshing(true,100);
}else
Toast.makeText(context, "修改失败,请重试", Toast.LENGTH_SHORT).show();
}else if("batch_share".equals(type)){
List<ShareInfo> info=GsonUtil.getInstance().fromJson(result,new TypeToken<List<ShareInfo>>(){}.getType());
if(info!=null ) {
adaper.setRadioShow(View.GONE);
handleMenuListener.setHandleMenu(View.GONE);
ShareUtil.batchShareFile(context,shareFileUris);
}
}else if("delete".equals(type)){
try {
JSONObject object = new JSONObject(result);
String data = object.getString("message");
if (data.contains("success")) {
Toast.makeText(context, "删除成功", Toast.LENGTH_SHORT).show();
handleMenuListener.setHandleMenu(View.GONE);
adaper.setRadioShow(View.GONE);
pullToRefreshListView.doPullRefreshing(true,100);
}
} catch (JSONException e) {
e.printStackTrace();
}
}
else if("single_create".equals(type)){
OcrRootBean.Cc_file cc_file=GsonUtil.getInstance().fromJson(result,new TypeToken<OcrRootBean.Cc_file>(){}.getType());
if(cc_file!=null){
createCount++;
// shareFileInfos.add(cc_file);
if(createCount==selectedInfos.size())
batchShareAdd();
}
}
}
public void setAllItemChecked(boolean flg){
adaper.setRadioAllSelected(flg);
@Override
public void error(String type, Throwable t) {
if(type.equals("list")){
pullToRefreshListView.onPullUpRefreshComplete();
pullToRefreshListView.onPullDownRefreshComplete();
}
}
public void setCheckBoxShow(int v){
adaper.setRadioShow(v);
@Override
public void onListTextCallBack(int postion) {
clickedFileItem=exportInfos.get(postion).getIncludes().getCc_file();
View view = LayoutInflater.from(context).inflate(R.layout.rename_dialog_layout, null);
view.findViewById(R.id.normal_name).setOnClickListener(this);
view.findViewById(R.id.positive).setOnClickListener(this);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setView(view);
reNameEdit = (EditText) view.findViewById(R.id.edit);
reNameEdit.setHint(clickedFileItem.getFileName());
dialog = builder.create();
dialog.show();
CustomDialogUtils.setDialogSize((Activity) context, dialog);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.positive:
reNameFile();
dialog.dismiss();
break;
case R.id.normal_name:
dialog.dismiss();
break;
}
}
public interface NoticeMessageToMain{
void noticeMessage(List<OcrRootBean> list);
void noticeMessage(int size);
}
}
package cn.com.bril.androidocr.studio.ui.fragment;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import com.google.gson.reflect.TypeToken;
import org.json.JSONException;
import org.json.JSONObject;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;
......@@ -26,55 +33,104 @@ import java.util.List;
import cn.com.bril.androidocr.studio.R;
import cn.com.bril.androidocr.studio.beans.OcrRootBean;
import cn.com.bril.androidocr.studio.beans.ShareInfo;
import cn.com.bril.androidocr.studio.beans.ShareRootBean;
import cn.com.bril.androidocr.studio.configs.Configs;
import cn.com.bril.androidocr.studio.configs.RequestConfig;
import cn.com.bril.androidocr.studio.http.HttpHolder;
import cn.com.bril.androidocr.studio.http.MainHttpCallBack;
import cn.com.bril.androidocr.studio.interf.HandleMenuListener;
import cn.com.bril.androidocr.studio.interf.OnHttpListener;
import cn.com.bril.androidocr.studio.ui.adapter.FragmentListAdapter;
import cn.com.bril.androidocr.studio.ui.adapter.ShareFragmentAdapter;
import cn.com.bril.androidocr.studio.ui.pulltorefresh.PullToRefreshBase;
import cn.com.bril.androidocr.studio.ui.pulltorefresh.PullToRefreshListView;
import cn.com.bril.androidocr.studio.utils.CustomDialogUtils;
import cn.com.bril.androidocr.studio.utils.FileType;
import cn.com.bril.androidocr.studio.utils.FileUtil;
import cn.com.bril.androidocr.studio.utils.GsonUtil;
import cn.com.bril.androidocr.studio.utils.HttpUtil;
import cn.com.bril.androidocr.studio.utils.IntentUtil;
import cn.com.bril.androidocr.studio.utils.ShareUtil;
/**
* Created by sunny on 2018-3-12.
*/
public class ShareFragment extends Fragment {
public class ShareFragment extends Fragment implements OnHttpListener, FragmentListAdapter.ListTextClickListener, View.OnClickListener {
private PullToRefreshListView pullToRefreshListView;
private ListView listView;
private Context context;
private FragmentListAdapter adaper;
private List<OcrRootBean> beanList=new ArrayList<>();
private ShareFragmentAdapter adaper;
private List<ShareRootBean> beanList=new ArrayList<>();
private boolean isUpdate=false,hasMoreData=false;
private int page=1,pageSize=10;
private FragmentListAdapter.ListTextClickListener listTextClickListener;
private List<OcrRootBean> selectedInfos=new ArrayList<>();
private List<ShareRootBean> selectedInfos=new ArrayList<>();
private ExportFragment.NoticeMessageToMain messageToMain;
private HandleMenuListener handleMenuListener;
private ProgressDialog dialog;
private int curLoadIndex;
List<ShareRootBean> loadBeans;
private Handler handler=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
if(msg.what==1){
curLoadIndex++;
if (curLoadIndex < loadBeans.size())
downLoadFile(loadBeans.get(curLoadIndex).getIncludes().getCc_file().getFilePath(),loadBeans.get(curLoadIndex).getIncludes().getCc_file().getFileName(),"batch");
else {
dialog.dismiss();
// batchCreateFiles();
batchShareAdd();
}
}else if(msg.what==0){
Toast.makeText(context, selectedInfos.get(curLoadIndex).getIncludes().getCc_file().getFileName() + "下载失败,请稍后重试", Toast.LENGTH_SHORT).show();
}else if(msg.what==2){
Toast.makeText(context, "下载已完成,再次点击可打开", Toast.LENGTH_SHORT).show();
}else if(msg.what==2){
Toast.makeText(context, "下载失败,请稍后重试", Toast.LENGTH_SHORT).show();
}
}
};
private ArrayList<Uri> shareFileUris;
private EditText reNameEdit;
private AlertDialog reNameDialog;
private ShareRootBean clickedFileItem;
private int createCount;//创建文件信息个数
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context=context;
listTextClickListener=(FragmentListAdapter.ListTextClickListener)context;
handleMenuListener= (HandleMenuListener) context;
messageToMain= (ExportFragment.NoticeMessageToMain) context;
}
public List<OcrRootBean> getSelectedInfos() {
public List<ShareRootBean> getSelectedInfos() {
return selectedInfos;
}
public void setSelectedInfos(List<OcrRootBean> selectedInfos) {
public void setSelectedInfos(List<ShareRootBean> selectedInfos) {
this.selectedInfos = selectedInfos;
}
public void handleDeletAction(){
List<ShareInfo> infos=new ArrayList<>();
for(ShareRootBean bean:selectedInfos)
infos.add(bean.getSuperior());
HttpHolder.batchDeleteShareRecord(infos,new MainHttpCallBack("delete",this));
}
public void handleShareAction(){
getNotLoadFilesAndLoad(selectedInfos);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
......@@ -93,13 +149,16 @@ public class ShareFragment extends Fragment {
public void initViews(View view){
pullToRefreshListView= (PullToRefreshListView) view.findViewById(R.id.pullrefreshView);
pullToRefreshListView.setPullLoadEnabled(true);
pullToRefreshListView.setPullRefreshEnabled(true);
listView=pullToRefreshListView.getRefreshableView();
pullToRefreshListView.doPullRefreshing(true,500);
adaper=new FragmentListAdapter(context, beanList, listTextClickListener, new FragmentListAdapter.AdapterRadioSelectedListener() {
adaper=new ShareFragmentAdapter(context, beanList, this, new ShareFragmentAdapter.AdapterRadioSelectedListener() {
@Override
public void adapterRadioSelectedCallBack() {
setSelectedInfos(adaper.getSelectedInfo());
messageToMain.noticeMessage(adaper.getSelectedInfo());
messageToMain.noticeMessage(adaper.getSelectedInfo().size());
}
});
listView.setAdapter(adaper);
......@@ -146,21 +205,24 @@ public class ShareFragment extends Fragment {
String path=beanList.get(position).getIncludes().getCc_file().getFilePath();
String fileName=beanList.get(position).getIncludes().getCc_file().getFileName();
if(fileName.contains(".pdf")){
if(FileUtil.isFileExist(Configs.PDF_BASE+"/"+fileName))
startFileIntent("pdf",fileName);
if(FileUtil.isFileExist(Configs.PDF_BASE+"/"+fileName)){
FileType.openFile(context,new File(Configs.PDF_BASE+"/"+fileName));
}
else{
downLoadFile(path, fileName);
downLoadFile(path, fileName,"single");
}
}else if(fileName.contains(".doc")|| fileName.contains(".docs")){
if(FileUtil.isFileExist(Configs.WORD_BASE+"/"+fileName))
startFileIntent("word",fileName);
if(FileUtil.isFileExist(Configs.WORD_BASE+"/"+fileName)){
FileType.openFile(context,new File(Configs.WORD_BASE+"/"+fileName));
}
else
downLoadFile(path, fileName);
downLoadFile(path, fileName,"single");
}else if(fileName.contains(".txt")){
if(FileUtil.isFileExist(Configs.TXT_BASE+"/"+fileName))
startFileIntent("txt",fileName);
if(FileUtil.isFileExist(Configs.TXT_BASE+"/"+fileName)){
FileType.openFile(context,new File(Configs.TXT_BASE+"/"+fileName));
}
else
downLoadFile(path, fileName);
downLoadFile(path, fileName,"single");
}
}
});
......@@ -169,59 +231,25 @@ public class ShareFragment extends Fragment {
public void setAllItemChecked(boolean flg){
adaper.setRadioAllSelected(flg);
}
public void setCheckBoxShow(int v){
adaper.setRadioShow(v);
}
//获取分享列表
private void getShareRecord(){
RequestParams params=new RequestParams(RequestConfig.EXPORT_RECORD_URL);
params.addBodyParameter("page",page+"");
RequestParams params=new RequestParams(RequestConfig.SHARE_LIST_URL);
params.addBodyParameter("pageNo",page+"");
params.addBodyParameter("sortItem","create_time");
params.addBodyParameter("sortOrder","desc");
String userInfo= Configs.USER_NAME+"_"+Configs.USER_ID;
String json="{\"cc_export_record\":{\"export_user\":{\"equalTo\":\""+userInfo+"\"},\"type\":{\"equalTo\":2}}}";
String json="{\"cc_sharing_record\":{\"sharing_peple\":{\"equalTo\":\""+userInfo+"\"},\"type\":{\"equalTo\":0}}}";
params.addBodyParameter("filters",json);
String json2="{\"cc_file\":{\"includes\":[\"file_id\"]}}";
params.addBodyParameter("includes",json2);
x.http().post(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
List<OcrRootBean> been=GsonUtil.getInstance().fromJson(result,new TypeToken<List<OcrRootBean>>(){}.getType());
if(isUpdate){
beanList.clear();
}
beanList.addAll(been);
if(been.size()==0){
Toast.makeText(context,"暂无数据",Toast.LENGTH_SHORT).show();
}
else if(been.size()<10&& been.size()>0){
hasMoreData=false;
// Toast.makeText(context,"无更多数据",Toast.LENGTH_SHORT).show();
}
else
hasMoreData=true;
adaper.notifyDataSetChanged();
pullToRefreshListView.onPullUpRefreshComplete();
pullToRefreshListView.onPullDownRefreshComplete();
pullToRefreshListView.setHasMoreData(hasMoreData);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
pullToRefreshListView.onPullUpRefreshComplete();
pullToRefreshListView.onPullDownRefreshComplete();
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
x.http().post(params,new MainHttpCallBack("list",this));
}
private void downLoadFile(String path, String fileName) {
//下载文件
private void downLoadFile(String path, String fileName, final String type) {
dialog.setMessage("正在下載...");
dialog.show();
RequestParams params=new RequestParams(RequestConfig.DOWN_LOAD_URL);
......@@ -231,10 +259,18 @@ public class ShareFragment extends Fragment {
x.http().get(params, new Callback.CommonCallback<File>() {
@Override
public void onSuccess(File result) {
Toast.makeText(context,"下载成功", Toast.LENGTH_SHORT).show();
if(type.equals("batch")){
dialog.dismiss();
handler.sendEmptyMessage(1);
}else{
handler.sendEmptyMessage(2);
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
dialog.dismiss();
handler.sendEmptyMessage(0);
Toast.makeText(context,"下载失败", Toast.LENGTH_SHORT).show();
}
@Override
public void onCancelled(CancelledException cex) {
......@@ -244,29 +280,151 @@ public class ShareFragment extends Fragment {
}
});
}
private void startFileIntent(String type,String path){
Intent intent = new Intent("android.intent.action.VIEW");
intent.addCategory("android.intent.category.DEFAULT");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
File file;
Uri uri;
if("word".equals(type)){
file= new File(Configs.WORD_BASE+"/"+path);
uri= Uri.fromFile(file);
intent.setDataAndType(uri, "application/msword");
}else if("pdf".equals(type)){
file= new File(Configs.PDF_BASE+"/"+path);
uri= Uri.fromFile(file);
intent.setDataAndType(uri, "application/pdf");
}else if("txt".equals(type)){
file= new File(Configs.TXT_BASE+"/"+path);
uri= Uri.fromFile(file);
intent.setDataAndType(uri, "text/plain");
//添加分享记录
private void batchShareAdd() {
List<ShareInfo> list=new ArrayList<>();
ShareInfo superior;
for(ShareRootBean bean: selectedInfos){
superior=new ShareInfo();
superior.setFileName(bean.getIncludes().getCc_file().getFileName());
superior.setFilePath(bean.getIncludes().getCc_file().getFilePath());
superior.setType("0");
superior.setSharingPeple(bean.getSuperior().getSharingPeple());
list.add(superior);
}
HttpHolder.batchShareCcFile(list,new MainHttpCallBack("batch_share",this));
}
//获取待下载项&&分享
private void getNotLoadFilesAndLoad(List<ShareRootBean> list) {
loadBeans = new ArrayList<>();
shareFileUris = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
OcrRootBean.Cc_file cc_file = list.get(i).getIncludes().getCc_file();
String type = cc_file.getFileName().substring(cc_file.getFileName().indexOf(".") + 1);
String filePath = "";
if ("doc".equals(type) || "docs".equals(type))
filePath = Configs.WORD_BASE + "/" + cc_file.getFileName();
else if ("txt".equals(type))
filePath = Configs.TXT_BASE + "/" + cc_file.getFileName();
else if ("pdf".equals(type))
filePath = Configs.PDF_BASE + "/" + cc_file.getFileName();
shareFileUris.add(FileUtil.getFileUri(context,new File(filePath)));
if (!FileUtil.isFileExist(filePath))
loadBeans.add(selectedInfos.get(i));
}
if (loadBeans.size() != 0) {
dialog.setMessage("正在下载,请稍后");
dialog.show();
curLoadIndex=0;
downLoadFile(loadBeans.get(curLoadIndex).getIncludes().getCc_file().getFilePath(),loadBeans.get(0).getIncludes().getCc_file().getFileName(),"batch");
}else{
batchShareAdd();
}
}
private void reNameFile() {
String newName=reNameEdit.getText().toString().trim();
if(!newName.equals(clickedFileItem.getSuperior().getFileName())){
if(!newName.contains("."))
newName=newName+clickedFileItem.getSuperior().getFileName().substring(clickedFileItem.getSuperior().getFileName().indexOf("."));
HttpHolder.editShareRecord(clickedFileItem.getSuperior().getId(),newName,new MainHttpCallBack("edit",this));
}
}
@Override
public void success(String type, String result) {
if(type.equals("list")){
List<ShareRootBean> been=GsonUtil.getInstance().fromJson(result,new TypeToken<List<ShareRootBean>>(){}.getType());
if(isUpdate){
beanList.clear();
}
beanList.addAll(been);
if(been.size()==0){
Toast.makeText(context,"暂无数据",Toast.LENGTH_SHORT).show();
}
else if(been.size()<10&& been.size()>0){
hasMoreData=false;
}
else
hasMoreData=true;
adaper.notifyDataSetChanged();
pullToRefreshListView.onPullUpRefreshComplete();
pullToRefreshListView.onPullDownRefreshComplete();
pullToRefreshListView.setHasMoreData(hasMoreData);
}else if(type.equals("batch_share")){
List<ShareInfo> info=GsonUtil.getInstance().fromJson(result,new TypeToken<List<ShareInfo>>(){}.getType());
if(info!=null ){
handleMenuListener.setHandleMenu(View.GONE);
ShareUtil.batchShareFile(context,shareFileUris);
adaper.setRadioShow(View.GONE);
}
}else if(type.equals("delete")){
try {
JSONObject object = new JSONObject(result);
String data = object.getString("message");
if (data.contains("success")) {
Toast.makeText(context, "删除成功", Toast.LENGTH_SHORT).show();
handleMenuListener.setHandleMenu(View.GONE);
adaper.setRadioShow(View.GONE);
pullToRefreshListView.doPullRefreshing(true,100);
}
} catch (JSONException e) {
e.printStackTrace();
}
}else if ("edit".equals(type)) {
OcrRootBean.Cc_file file=GsonUtil.getInstance().fromJson(result,new TypeToken<OcrRootBean.Cc_file>(){}.getType());
if(null!=file){
Toast.makeText(context, "修改成功", Toast.LENGTH_SHORT).show();
pullToRefreshListView.doPullRefreshing(true,100);
}else
Toast.makeText(context, "修改失败,请重试", Toast.LENGTH_SHORT).show();
}
else if("single_create".equals(type)){
OcrRootBean.Cc_file cc_file=GsonUtil.getInstance().fromJson(result,new TypeToken<OcrRootBean.Cc_file>(){}.getType());
if(cc_file!=null){
createCount++;
if(createCount==selectedInfos.size())
batchShareAdd();
}
}
}
@Override
public void error(String type, Throwable t) {
Log.e("TAG",t.getMessage());
if(type.equals("list")){
pullToRefreshListView.onPullUpRefreshComplete();
pullToRefreshListView.onPullDownRefreshComplete();
}
}
@Override
public void onListTextCallBack(int position) {
clickedFileItem=beanList.get(position);
View view = LayoutInflater.from(context).inflate(R.layout.rename_dialog_layout, null);
view.findViewById(R.id.normal_name).setOnClickListener(this);
view.findViewById(R.id.positive).setOnClickListener(this);
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setView(view);
reNameEdit = (EditText) view.findViewById(R.id.edit);
reNameEdit.setHint(clickedFileItem.getSuperior().getFileName());
reNameDialog = builder.create();
reNameDialog.show();
CustomDialogUtils.setDialogSize((Activity) context, dialog);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.positive:
reNameFile();
reNameDialog.dismiss();
break;
case R.id.normal_name:
reNameDialog.dismiss();
break;
}
if(IntentUtil.isIntentAvailable(context,intent))
startActivity(intent);
else
Toast.makeText(context,"请检测是否已安装相应的文件打开工具",Toast.LENGTH_SHORT).show();
}
}
......@@ -2,6 +2,9 @@ package cn.com.bril.androidocr.studio.utils;
import android.content.Context;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.support.v4.content.FileProvider;
import com.scanlibrary.ScanConstants;
......@@ -60,4 +63,16 @@ public class FileUtil {
return true;
}
public static Uri getFileUri(Context context,File file){
Uri tempFileUri=null;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
tempFileUri = FileProvider.getUriForFile(context.getApplicationContext(),
"com.scanlibrary.provider", // As defined in Manifest
file);
} else {
tempFileUri = Uri.fromFile(file);
}
return tempFileUri;
}
}
package cn.com.bril.androidocr.studio.utils;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
import android.widget.Toast;
import java.io.File;
import java.util.ArrayList;
/**
* Created by sunny on 2018-3-19.
......@@ -18,7 +20,7 @@ public class ShareUtil {
public static void shareFile(Activity activity, File file) {
if (null != file && file.exists()) {
Intent share = new Intent(Intent.ACTION_SEND);
share.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file));
share.putExtra(Intent.EXTRA_STREAM, FileUtil.getFileUri(activity,file));
share.setType(getMimeType(file.getAbsolutePath()));//此处可发送多种文件
share.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
......@@ -47,4 +49,12 @@ public class ShareUtil {
}
return mime;
}
public static void batchShareFile(Context activity, ArrayList<Uri> uris){
//分享文件
Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);//发送多个文件
intent.setType("*/*");//多个文件格式
intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);//Intent.EXTRA_STREAM同于传输文件流
activity.startActivity(Intent.createChooser(intent, "多文件分享"));
}
}
app/src/main/res/drawable/word.png

792 Bytes | W: | H:

app/src/main/res/drawable/word.png

3.43 KB | W: | H:

app/src/main/res/drawable/word.png
app/src/main/res/drawable/word.png
app/src/main/res/drawable/word.png
app/src/main/res/drawable/word.png
  • 2-up
  • Swipe
  • Onion skin
......@@ -22,7 +22,8 @@
android:id="@+id/pdfLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">
android:padding="10dp"
android:visibility="gone">
<TextView
android:id="@+id/pdf"
......
......@@ -10,7 +10,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5dp"
android:src="@drawable/word"/>
/>
<LinearLayout
android:layout_width="match_parent"
......@@ -55,16 +55,15 @@
<CheckBox
android:id="@+id/radio"
android:layout_width="18dp"
android:layout_height="18dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_marginRight="15dp"
android:button="@null"
android:focusable="false"
android:visibility="gone"
android:background="@drawable/radio_selector"/>
/>
<!--android:background="@drawable/radio_selector"-->
</RelativeLayout>
......@@ -5,9 +5,9 @@
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/normal</item>
<item name="colorAccent">@color/yellow</item>
<item name="colorAccent">@color/normal</item>
<!--Button按钮正常状态颜色-->
<item name="colorButtonNormal">@color/yellow</item>
<item name="colorButtonNormal">@color/normal</item>
<!--//colorAccent-->
</style>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment