Commit 0fdb8fa8 authored by 陈赛康's avatar 陈赛康

搜索功能添加;

parent 18f2e07c
apply plugin: 'com.android.application'
apply plugin: 'com.jakewharton.butterknife'
configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:23.1.0'
}
......@@ -57,6 +57,8 @@ dependencies {
compile files('libs/poi/poi-3.17.jar')
compile files('libs/poi/poi-scratchpad-3.17.jar')
compile project(':scanlibrary')
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
compile 'com.github.bumptech.glide:glide:4.3.1'
......@@ -64,8 +66,8 @@ dependencies {
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'org.xutils:xutils:3.5.0'
compile 'com.android.support:support-v4:25.3.1'
compile 'com.google.code.gson:gson:2.8.1'
testCompile 'junit:junit:4.12'
annotationProcessor 'com.github.bumptech.glide:compiler:4.3.1'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
compile 'com.google.code.gson:gson:2.8.1'
}
......@@ -22,7 +22,7 @@
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<!--<category android:name="android.intent.category.LAUNCHER" />-->
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".ui.activity.RecognizeActivity" />
......@@ -38,6 +38,7 @@
<activity
android:name=".ui.activity.OcrRecordActivity"
android:launchMode="singleTask" />
<activity android:name=".ui.activity.SearchActivity"></activity>
</application>
</manifest>
\ No newline at end of file
......@@ -99,12 +99,6 @@ public class OcrApplication extends Application {
}
}
public void exit(){
// for (Activity activity : activities) {
// if (activity!=null) {
// activity.finish();
// }
// }
// System.exit(1);
ActivityManager manager = (ActivityManager)getApplicationContext().getSystemService(ACTIVITY_SERVICE); //获取应用程序管理器
manager.killBackgroundProcesses(getPackageName()); //强制结束当前应用程序
}
......
......@@ -2,19 +2,42 @@ package cn.com.bril.androidocr.studio.beans;
/**
* Created by sunny on 2018-3-16.
* status 0导出;1分享
* 主文件
* status 为文件归属
*/
public class OcrInfo {
private String id;
private String fileName;
private String filePath;
private String uploadUser;
private String lastUpdateTime;
private String fileSuffix;
private String uploadPeple;
private String createTime;
private String lastUpdateTime;
private String fileType;
private String status;
private String remark;
private boolean isChecked;
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean checked) {
isChecked = checked;
}
public String getId() {
return id;
}
......@@ -39,20 +62,20 @@ public class OcrInfo {
this.filePath = filePath;
}
public String getUploadUser() {
return uploadUser;
public String getFileSuffix() {
return fileSuffix;
}
public void setUploadUser(String uploadUser) {
this.uploadUser = uploadUser;
public void setFileSuffix(String fileSuffix) {
this.fileSuffix = fileSuffix;
}
public String getLastUpdateTime() {
return lastUpdateTime;
public String getUploadPeple() {
return uploadPeple;
}
public void setLastUpdateTime(String lastUpdateTime) {
this.lastUpdateTime = lastUpdateTime;
public void setUploadPeple(String uploadPeple) {
this.uploadPeple = uploadPeple;
}
public String getCreateTime() {
......@@ -63,6 +86,22 @@ public class OcrInfo {
this.createTime = createTime;
}
public String getLastUpdateTime() {
return lastUpdateTime;
}
public void setLastUpdateTime(String lastUpdateTime) {
this.lastUpdateTime = lastUpdateTime;
}
public String getFileType() {
return fileType;
}
public void setFileType(String fileType) {
this.fileType = fileType;
}
public String getStatus() {
return status;
}
......@@ -70,4 +109,12 @@ public class OcrInfo {
public void setStatus(String status) {
this.status = status;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
......@@ -7,14 +7,27 @@ package cn.com.bril.androidocr.studio.configs;
public class RequestConfig {
public static int TAKE_PHOTO_REQUEST=1;
public static int PERMISSION_REQUEST_CODE=99;
// public static String BASE_URL="http://zjk.haomo-studio.com/zhangjiakouOA/";
public static String BASE_URL="http://192.168.1.72:8050/zhangjiakouOA/";
public static String BASE_URL="http://zjk.haomo-studio.com/zhangjiakouOA/";
// public static String BASE_URL="http://192.168.1.72:8050/zhangjiakouOA/";
//添加
public static String ADD_URL=BASE_URL+"cc_ocr_files/new?";
public static String ADD_URL=BASE_URL+"cc_files/new";
//上传文件
public static String UP_FILE=BASE_URL+"upload_ocr_file";
//编辑文件
public static String EDIT_FILE_URL=BASE_URL+"cc_files/";
//创建导出记录
public static String EXPORT_CREATE_URL=BASE_URL+"cc_export_records/new";
//导出记录
public static String EXPORT_LIST_URL=BASE_URL+"cc_ocr_files?";
public static String EXPORT_RECORD_URL=BASE_URL+"cc_export_records";
//分享记录
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_DELETE_URL=BASE_URL+"cc_export_records/delete/batch";
//文件下载
public static String DOWN_LOAD_URL=BASE_URL+"file_down";
......
package cn.com.bril.androidocr.studio.http;
import android.util.Log;
import org.json.JSONArray;
import org.xutils.common.Callback;
import org.xutils.common.util.KeyValue;
import org.xutils.http.RequestParams;
......@@ -14,10 +13,11 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import cn.com.bril.androidocr.studio.beans.OcrRootBean;
import cn.com.bril.androidocr.studio.configs.RequestConfig;
import cn.com.bril.androidocr.studio.interf.OnHttpListener;
import static com.bumptech.glide.gifdecoder.GifHeaderParser.TAG;
import cn.com.bril.androidocr.studio.ui.activity.VertifyActivity;
import cn.com.bril.androidocr.studio.utils.GsonUtil;
/**
* Created by sunny on 2018-3-12.
......@@ -26,7 +26,7 @@ import static com.bumptech.glide.gifdecoder.GifHeaderParser.TAG;
public class HttpHolder {
//add
public static void exportFile(String url,Map<String,Object> map,Callback.CommonCallback<String> callback){
public static void exportFile(String url, Map<String,Object> map, VertifyActivity.HttpCallBack callBack){
RequestParams params=new RequestParams(url);
Iterator<Map.Entry<String,Object>> it = map.entrySet().iterator();
while (it.hasNext()){
......@@ -36,56 +36,97 @@ public class HttpHolder {
else
params.addHeader("X-Auth-Token",String.valueOf(entry.getValue()));
}
x.http().post(params,callback);
x.http().post(params,callBack);
}
public static String upLoadFile(String path, final OnHttpListener listener){
String flg="";
public static void upLoadFile(String path, VertifyActivity.HttpCallBack callBack){
RequestParams params=new RequestParams(RequestConfig.UP_FILE);
params.setConnectTimeout(10000);
params.setReadTimeout(5000);
//创建List<KeyValue>对象
List<KeyValue> list = new ArrayList<>();
//给list中添加数据,filePah是上传的文件路径,比如sd卡中图片
list.add(new KeyValue("file", new File(path)));//文件流数据
// //其它参数,根据项目而定,比如我的项目中要传入的参数是json格式的
// list.add(new KeyValue("parameters", json.toString()));
//创建MultipartBody
MultipartBody body = new MultipartBody(list, "UTF-8");
//添加请求参数
params.setRequestBody(body);
//
File file=new File(path);
boolean flag=file.exists();
// params.addBodyParameter("file",file);
x.http().post(params,callBack);
};
x.http().post(params, new Callback.CommonCallback<String>() {
//创建记录
public static void createFileRecord(String url,Map<String,Object> map,Callback.CommonCallback<String> listener){
RequestParams params=new RequestParams(url);
Iterator<Map.Entry<String,Object>> it = map.entrySet().iterator();
while (it.hasNext()){
Map.Entry<String,Object> entry = it.next();
if(!"header".equals(entry.getKey()))
params.addBodyParameter(entry.getKey(),String.valueOf(entry.getValue()));
else
params.addHeader("X-Auth-Token",String.valueOf(entry.getValue()));
}
x.http().post(params,listener);
}
//批量导出
/**
*
* @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>() {
@Override
public void onSuccess(String result) {
String data=result;
listener.success(data);
http.success("",result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Log.e(TAG, "onError: "+ex.getMessage(),ex );
listener.error(ex);
http.error("",ex);
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
//批量删除
public static void volumeDelete(final List<OcrRootBean.Superior> list, final OnHttpListener listener){
JSONArray array= new JSONArray();
for(int i=0;i<list.size();i++)
array.put(list.get(i).getId());
RequestParams params=new RequestParams(RequestConfig.BATCH_DELETE_URL);
params.addBodyParameter("ids",array.toString());
return flg;
};
x.http().post(params, new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
listener.success("delete",result);
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
listener.error("",ex);
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
//单个下载
public static void downLoad(Map<String,String> map,MainHttpCallBack 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();
params.addBodyParameter(entry.getKey(),String.valueOf(entry.getValue()));
}
x.http().get(params,callBack);
}
}
......@@ -6,7 +6,7 @@ package cn.com.bril.androidocr.studio.interf;
public interface OnHttpListener {
void success(String result);
void success(String type,String result);
void error(Throwable t);
void error(String type,Throwable t);
}
......@@ -59,4 +59,6 @@ public class BaseActivity extends AppCompatActivity {
private void dispatchBadLicense() {
showDialog( BaseActivity.DIALOG_BAD_LICENSE );
}
}
package cn.com.bril.androidocr.studio.ui.activity;
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.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.Fragment;
import android.support.v4.view.ViewPager;
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;
import android.widget.RadioGroup;
import android.widget.RelativeLayout;
import android.widget.TextView;
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 {
public class MainActivity extends BaseActivity implements FragmentListAdapter.ListTextClickListener, View.OnClickListener, HandleMenuListener, ExportFragment.NoticeMessageToMain, OnHttpListener {
@BindView(R.id.layout_1)
......@@ -43,7 +76,39 @@ public class MainActivity extends BaseActivity {
@BindView(R.id.layout_3)
LinearLayout layout3;
@BindView(R.id.viewPager)
ViewPager viewPager;
NoScrollViewPager viewPager;
@BindView(R.id.num)
TextView num;
@BindView(R.id.tab_select)
TextView tabSelect;
@BindView(R.id.export)
TextView export;
@BindView(R.id.share)
TextView share;
@BindView(R.id.rename)
TextView rename;
@BindView(R.id.delete)
TextView delete;
@BindView(R.id.bottom_menu)
RelativeLayout bottomMenu;
@BindView(R.id.left_iv)
ImageView leftIv;
@BindView(R.id.tab_back)
ImageView tabBack;
// @BindView(R.id.tab_head)
// RelativeLayout tabHeader;
@BindView(R.id.topBarLayout)
RelativeLayout topBarLayout;
@BindView(R.id.tab_head)
RelativeLayout tabHead;
@BindView(R.id.head_content)
RelativeLayout headContent;
@BindView(R.id.main_bottom_menu)
LinearLayout mainBottomMenu;
@BindView(R.id.tab_bottom)
LinearLayout tabBottom;
@BindView(R.id.right_iv)
ImageView rightIv;
private String picPath;
@NonNull
@BindView(R.id.rightTv)
......@@ -59,6 +124,7 @@ public class MainActivity extends BaseActivity {
private int type;//获取图片类型
private GetUserid mService;
private boolean isTabMenuShow = false;
private List<Fragment> fragmentList;
private ServiceConnection mServiceConnection = new ServiceConnection() {
......@@ -79,7 +145,16 @@ public class MainActivity extends BaseActivity {
}
}
};
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;
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -92,8 +167,11 @@ public class MainActivity extends BaseActivity {
initViews();
setIconSize();
initEvents();
dialog = new ProgressDialog(this);
}
private void bindService() {
......@@ -103,18 +181,37 @@ public class MainActivity extends BaseActivity {
}
private void initViews() {
rightTv.setText("导入");
rightIv.setVisibility(View.VISIBLE);
rightTv.setVisibility(View.GONE);
topTitle.setText("OCR识别");
fragmentList=new ArrayList<>();
fragmentList.add(new ExportFragment());
fragmentList.add(new ShareFragment());
TabFragmentPagerAdapter adapter=new TabFragmentPagerAdapter(getSupportFragmentManager(),fragmentList);
fragmentList = new ArrayList<>();
if (exportFragment == null)
exportFragment = new ExportFragment();
if (shareFragment == null)
shareFragment = new ShareFragment();
fragmentList.add(exportFragment);
fragmentList.add(shareFragment);
adapter = new TabFragmentPagerAdapter(getSupportFragmentManager(), fragmentList);
viewPager.setAdapter(adapter);
}
public void setIconSize() {
//设置bottom icon 大小
// ViewUtil.setNavImageSize(this, export, R.drawable.export, 55, 55);//40
ViewUtil.setNavImageSize(this, share, R.drawable.share_focused, 40, 45);//40
// ViewUtil.setNavImageSize(this, rename, R.drawable.rename, 50, 50);//40
ViewUtil.setNavImageSize(this, delete, R.drawable.delete_normal, 35, 45);//32
}
private void setImageGone() {
layout1.setVisibility(View.GONE);
layout2.setVisibility(View.INVISIBLE);
layout3.setVisibility(View.INVISIBLE);
......@@ -142,7 +239,9 @@ public class MainActivity extends BaseActivity {
topTitle.setText(tag);
}
});
export.setOnClickListener(this);
share.setOnClickListener(this);
delete.setOnClickListener(this);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
......@@ -166,9 +265,9 @@ public class MainActivity extends BaseActivity {
super.onResume();
}
public void setViewShow(int position){
public void setViewShow(int position) {
setImageGone();
switch (position){
switch (position) {
case 0:
layout2.setVisibility(View.VISIBLE);
break;
......@@ -179,25 +278,288 @@ public class MainActivity extends BaseActivity {
viewPager.setCurrentItem(position);
}
@OnClick({R.id.rightTv, R.id.fabbtn})
@OnClick({R.id.right_iv, R.id.fabbtn, R.id.tab_select, R.id.tab_back})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.rightTv:
type = ScanConstants.OPEN_MEDIA;
Intent intent = new Intent(this, RecognizeActivity.class);
intent.putExtra("type", type);
startActivity(intent);
break;
case R.id.right_iv:
if(null== rightMenuWindow)
showHandleMenu();
else if(rightMenuWindow !=null&&!rightMenuWindow.isShowing())
showHandleMenu();
break;
case R.id.fabbtn:
type = ScanConstants.OPEN_CAMERA;
Intent intent2 = new Intent(this, RecognizeActivity.class);
intent2.putExtra("type", type);
startActivity(intent2);
break;
case R.id.tab_back:
setHandleMenu(View.GONE);
adapter.notifyDataSetChanged();
break;
case R.id.tab_select://全选
isAllSelected = !isAllSelected;
if (isAllSelected)
tabSelect.setText("全不选");
else
tabSelect.setText("全选");
if (viewPager.getCurrentItem() == 0)
exportFragment.setAllItemChecked(isAllSelected);
else
shareFragment.setAllItemChecked(isAllSelected);
break;
}
}
//展示工具栏
public void showHandleMenu() {
View popupWindow = LayoutInflater.from(this).inflate(R.layout.main_menu_layout, null);
rightMenuWindow = new PopupWindow(popupWindow, LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT);
popupWindow.findViewById(R.id.main_import).setOnClickListener(this);
popupWindow.findViewById(R.id.main_search).setOnClickListener(this);
rightMenuWindow.setTouchable(true);
rightMenuWindow.setOutsideTouchable(true);
rightMenuWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));
int windowPos[] = ScreenUtil.calculatePopWindowPos(this, rightIv, popupWindow);
int xoff=windowPos[0]-60;
int wid=rightIv.getMeasuredWidth()-30;
rightMenuWindow.showAtLocation(rightIv, Gravity.TOP|Gravity.LEFT,xoff,windowPos[1]);
// rightMenuWindow.showAsDropDown(rightIv);
}
@Override
public void onBackPressed() {
if (tabBottom.getVisibility() == View.VISIBLE) {
if (viewPager.getCurrentItem() == 0)
exportFragment.setCheckBoxShow(View.GONE);
else
shareFragment.setCheckBoxShow(View.GONE);
setHandleMenu(View.GONE);
} else {
OcrApplication.getInstance().exit();
super.onBackPressed();
}
}
@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);
} else
Toast.makeText(this, "请选择要分享的数据", Toast.LENGTH_SHORT).show();
break;
case R.id.delete:
if (selectedInfos != null && selectedInfos.size() > 0) {
setHandleMenu(View.GONE);
HttpHolder.volumeDelete(reStatusList(-1), this);
} else
Toast.makeText(this, "请选择要删除的数据", Toast.LENGTH_SHORT).show();
break;
case R.id.main_import:
type = ScanConstants.OPEN_MEDIA;
Intent intent = new Intent(this, RecognizeActivity.class);
intent.putExtra("type", type);
startActivity(intent);
rightMenuWindow.dismiss();
break;
case R.id.main_search:
startActivity(new Intent(this, SearchActivity.class));
rightMenuWindow.dismiss();
break;
}
}
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 onBackPressed() {
public void setHandleMenu(int v) {
if (View.GONE == v) {
tabHead.setVisibility(v);
tabBottom.setVisibility(v);
topBarLayout.setVisibility(View.VISIBLE);
mainBottomMenu.setVisibility(View.VISIBLE);
viewPager.setScanScroll(true);
adapter.notifyDataSetChanged();
} else {
tabHead.setVisibility(View.VISIBLE);
tabBottom.setVisibility(View.VISIBLE);
topBarLayout.setVisibility(View.GONE);
mainBottomMenu.setVisibility(View.GONE);
num.setText("已选择");
viewPager.setScanScroll(false);
}
}
OcrApplication.getInstance().exit();
super.onBackPressed();
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() + "个");
}
//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();
}
}
......@@ -6,10 +6,9 @@ import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.CompoundButton;
......@@ -42,19 +41,19 @@ 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.ExportInfo;
import cn.com.bril.androidocr.studio.beans.Image;
import cn.com.bril.androidocr.studio.beans.OcrInfo;
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.interf.OnHttpListener;
import cn.com.bril.androidocr.studio.utils.GsonUtil;
import cn.com.bril.androidocr.studio.utils.ItextUtils;
import cn.com.bril.androidocr.studio.utils.ScreenUtil;
import cn.com.bril.androidocr.studio.utils.ShareUtil;
public class VertifyActivity extends AppCompatActivity implements OnHttpListener {
public class VertifyActivity extends AppCompatActivity {
@BindView(R.id.left_iv)
ImageView lefIv;
......@@ -85,6 +84,7 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
private PopupWindow mPopupWindow;
private String statusType;
private OcrInfo ocrInfo;
@Override
protected void onCreate(Bundle savedInstanceState) {
......@@ -108,7 +108,7 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
return (Image) getIntent().getSerializableExtra("image");
}
@OnClick({R.id.rephoto, R.id.verrify, R.id.left_iv})
@OnClick({R.id.rephoto, R.id.verrify, R.id.left_iv,R.id.right_iv})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.left_iv:
......@@ -122,9 +122,14 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
case R.id.verrify:
Intent proofread = new Intent(this, ProofreadActivity.class);
proofread.putExtra("image", getIntentData());
// startActivity(proofread);
startActivityForResult(proofread, 10);
break;
case R.id.right_iv:
if(null== mPopupWindow )
showHandleMenu();
else if(mPopupWindow!=null&&!mPopupWindow.isShowing())
showHandleMenu();
break;
}
}
......@@ -137,11 +142,6 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
mPopupWindow.setTouchable(true);
mPopupWindow.setOutsideTouchable(true);
mPopupWindow.setBackgroundDrawable(new BitmapDrawable(getResources(), (Bitmap) null));
// mPopupWindow.showAtLocation(toolbarTitle,Gravity.TOP|Gravity.LEFT,16,-64);
int windowPos[] = ScreenUtil.calculatePopWindowPos(this, rightIv, popupWindow);
// int xOff = 40;// 可以自己调整偏移
// windowPos[0] += xOff;
// mPopupWindow.showAtLocation(topBarLayout, Gravity.TOP | Gravity.RIGHT, 10, windowPos[1]);//windowPos[0], windowPos[1]
mPopupWindow.showAsDropDown(rightIv);
// backgroundAlpha(0.5f);
}
......@@ -156,11 +156,6 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
}
}
@OnClick(R.id.right_iv)
public void onViewClicked() {
showHandleMenu();
}
//导出选择视图
private void showExportDialog() {
mPopupWindow.dismiss();
......@@ -189,6 +184,7 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
view.findViewById(R.id.txtLayout).setOnClickListener(clickListener);
}
private View.OnClickListener clickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
......@@ -212,11 +208,13 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
radio2.setEnabled(false);
break;
case R.id.export:
mPopupWindow.dismiss();
statusType="0";
showExportDialog();
break;
case R.id.share:
statusType="1";
mPopupWindow.dismiss();
statusType="2";
exportDoc("share");
break;
}
......@@ -232,19 +230,22 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
if (isChecked) {
//设置只点击一次,其余均不可点击
switch (buttonView.getId()) {
case R.id.radio:
pdf.setTextColor(getResources().getColor(R.color.yellow));
// handler.sendEmptyMessageDelayed(1,500);
statusType="0";
exportPdf();
break;
case R.id.radio1:
img.setTextColor(getResources().getColor(R.color.yellow));
// handler.sendEmptyMessageDelayed(2,500);
statusType="0";
exportDoc("export");
break;
case R.id.radio2:
statusType="0";
txt.setTextColor(getResources().getColor(R.color.yellow));
exportTxt();
break;
......@@ -262,17 +263,15 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
super.run();
boolean flg = ItextUtils.StringToPdf(recogniztion, pdfPath);
if (flg) {
handler.sendEmptyMessage(1);
HttpHolder.upLoadFile(pdfPath,VertifyActivity.this);
HttpHolder.upLoadFile(pdfPath,new HttpCallBack("upload"));
}
}
}.start();
}
private void exportTxt() {
String filename = image.getName().replace("png", "txt");
String filename = image.getName().replace("jpg", "txt");
String path = Configs.TXT_BASE + "/" + filename;
File file;
try {
......@@ -285,8 +284,7 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
FileOutputStream outStream = new FileOutputStream(file);
outStream.write(recogniztion.getBytes());
outStream.close();
HttpHolder.upLoadFile(path, VertifyActivity.this);
handler.sendEmptyMessageDelayed(3, 500);
HttpHolder.upLoadFile(path,new HttpCallBack("upload"));
} catch (IOException e) {
e.printStackTrace();
}
......@@ -294,6 +292,7 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
}
private void exportDoc(String type) {
if(null==ocrInfo)
try {
String filename = image.getName().replace("jpg", "doc");
String path = Configs.WORD_BASE + "/" + filename;
......@@ -309,45 +308,27 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
if("share".equals(type))
ShareUtil.shareFile(this,new File(path));
HttpHolder.upLoadFile(path, this);
HttpHolder.upLoadFile(path, new HttpCallBack("upload"));
} catch (IOException e) {
handler.sendEmptyMessage(5);
}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));
}
}
private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 0:
break;
case 1:
dialog.dismiss();
Toast.makeText(VertifyActivity.this, "pdf已导出,请在documentocr/pdfs下查看", Toast.LENGTH_SHORT).show();
break;
case 2:
dialog.dismiss();
Toast.makeText(VertifyActivity.this, "图片已导出,请在documentocr/images下查看", Toast.LENGTH_SHORT).show();
break;
case 3:
dialog.dismiss();
Toast.makeText(VertifyActivity.this, "txt文本已导出,请在documentocr/txts文件夹下查看", Toast.LENGTH_SHORT).show();
break;
case 4:
// dialog.dismiss();
// Toast.makeText(VertifyActivity.this, "word已导出,请在documentocr/docs文件夹下查看", Toast.LENGTH_SHORT).show();
break;
case 5:
dialog.dismiss();
Toast.makeText(VertifyActivity.this, "word导出异常,请重试", Toast.LENGTH_SHORT).show();
break;
}
public class HttpCallBack implements Callback.CommonCallback<String>{
String httpType;
public HttpCallBack(String type) {
httpType=type;
}
};
@Override
public void success(String result) {
public void onSuccess(String result) {
if("upload".equals(httpType)){
try {
JSONObject object = new JSONObject(result);
String filePath = object.getString("message");
......@@ -356,34 +337,44 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
map.put("header", filePath);
map.put("filePath", filePath);
map.put("fileName", fileName);
map.put("status", statusType);
map.put("uploadUser", Configs.USER_NAME + "_" + Configs.USER_ID);
HttpHolder.exportFile(RequestConfig.ADD_URL, map, creatListener);
map.put("fileSuffix",fileName.substring(fileName.indexOf(".")+1));
map.put("status","ocr");
map.put("uploadPeple", Configs.USER_NAME + "_" + Configs.USER_ID);
HttpHolder.exportFile(RequestConfig.ADD_URL, map, new HttpCallBack("create_file"));
} catch (JSONException e) {
e.printStackTrace();
}
}else if("create_file".equals(httpType)){
ocrInfo = GsonUtil.getInstance().fromJson(result, new TypeToken<OcrInfo>() {
}.getType());
}
@Override
public void error(Throwable t) {
}
private Callback.CommonCallback<String> creatListener = new Callback.CommonCallback<String>() {
@Override
public void onSuccess(String result) {
if(null!=dialog || dialog.isShowing())
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(dialog!=null && dialog.isShowing())
dialog.dismiss();
OcrInfo ocrInfo = GsonUtil.getInstance().fromJson(result, new TypeToken<OcrInfo>() {
ExportInfo exportInfo= GsonUtil.getInstance().fromJson(result, new TypeToken<ExportInfo>() {
}.getType());
if (null != ocrInfo.getId() || "" != ocrInfo.getId())
Toast.makeText(VertifyActivity.this, "导出成功", Toast.LENGTH_SHORT).show();
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>() {
}.getType());
if(null==exportInfo){
Toast.makeText(VertifyActivity.this,"分享记录提交失败,请重新尝试",Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Log.e("TAG",ex.toString());
Toast.makeText(VertifyActivity.this, "连接异常,请调试", Toast.LENGTH_SHORT).show();
}
@Override
......@@ -395,5 +386,7 @@ public class VertifyActivity extends AppCompatActivity implements OnHttpListener
public void onFinished() {
}
};
}
}
......@@ -5,12 +5,15 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import cn.com.bril.androidocr.studio.R;
import cn.com.bril.androidocr.studio.beans.OcrInfo;
import cn.com.bril.androidocr.studio.beans.OcrRootBean;
/**
* Created by sunny on 2018-3-19.
......@@ -19,13 +22,35 @@ import cn.com.bril.androidocr.studio.beans.OcrInfo;
public class FragmentListAdapter extends BaseAdapter {
private Context context;
private List<OcrInfo> infos;
public FragmentListAdapter(Context context, List<OcrInfo> list) {
private List<OcrRootBean> infos;
private ListTextClickListener listTextClickListener;
private int show=View.GONE;
AdapterRadioSelectedListener radioSelectedListener;
public FragmentListAdapter(Context context, List<OcrRootBean> list, ListTextClickListener listTextClickListener, AdapterRadioSelectedListener radioSelectedListener) {
this.context=context;
this.infos=list;
this.listTextClickListener=listTextClickListener;
this.radioSelectedListener=radioSelectedListener;
}
public void setRadioShow(int show){
this.show=show;
notifyDataSetChanged();
}
public void setRadioAllSelected(boolean flg){
for(OcrRootBean info:infos)
info.getSuperior().setChecked(flg);
notifyDataSetChanged();
}
public List<OcrRootBean> getSelectedInfo(){
List<OcrRootBean> newInfos=new ArrayList<>();
for(OcrRootBean info:infos){
if(info.getSuperior().isChecked())
newInfos.add(info);
}
return newInfos;
}
@Override
public int getCount() {
return infos.size();
......@@ -43,24 +68,60 @@ public class FragmentListAdapter extends BaseAdapter {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
final ViewHolder holder;
if(convertView==null){
holder=new ViewHolder();
convertView= LayoutInflater.from(context).inflate(R.layout.listview_item_layout,null);
holder.title= (TextView)convertView .findViewById(R.id.title);
holder.time= (TextView) convertView.findViewById(R.id.time);
holder.radioButton= (CheckBox) convertView.findViewById(R.id.radio);
convertView.setTag(holder);
}else
holder= (ViewHolder) convertView.getTag();
OcrInfo info=infos.get(position);
holder.time.setText(info.getLastUpdateTime());
String fileName=info.getFileName().substring(0,info.getFileName().indexOf("."));
final OcrRootBean info=infos.get(position);
holder.time.setText(info.getSuperior().getCreateTime());
String s=info.getIncludes().getCc_file().getFileName();
String fileName;
if(s.contains("."))
fileName=s.substring(0,s.indexOf("."));
else
fileName=s;
holder.title.setText(fileName);
holder.title.setOnClickListener(new ListTextOnClickListener(position));
holder.radioButton.setVisibility(show);
holder.radioButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
info.getSuperior().setChecked(isChecked);
radioSelectedListener.adapterRadioSelectedCallBack();
notifyDataSetChanged();
}
});
holder.radioButton.setChecked(info.getSuperior().isChecked());
return convertView;
}
class ListTextOnClickListener implements View.OnClickListener{
int position;
public ListTextOnClickListener(int index) {
position=index;
}
@Override
public void onClick(View v) {
listTextClickListener.onListTextCallBack(infos.get(position));
}
}
public interface AdapterRadioSelectedListener{
void adapterRadioSelectedCallBack();
}
public interface ListTextClickListener{
void onListTextCallBack(OcrRootBean info);
}
class ViewHolder{
TextView title,time;
CheckBox radioButton;
}
}
......@@ -3,6 +3,7 @@ package cn.com.bril.androidocr.studio.ui.adapter;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.view.ViewGroup;
import java.util.List;
......@@ -13,12 +14,19 @@ import java.util.List;
public class TabFragmentPagerAdapter extends FragmentPagerAdapter {
List<Fragment> fragments;
List<String> tagList;
FragmentManager manager;
public TabFragmentPagerAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
manager=fm;
this.fragments=fragments;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public Fragment getItem(int position) {
return fragments.get(position);
......@@ -28,4 +36,12 @@ public class TabFragmentPagerAdapter extends FragmentPagerAdapter {
public int getCount() {
return fragments.size();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
return super.instantiateItem(container, position);
}
}
package cn.com.bril.androidocr.studio.ui.fragment;
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.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
......@@ -16,18 +21,22 @@ import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import cn.com.bril.androidocr.studio.R;
import cn.com.bril.androidocr.studio.beans.OcrInfo;
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.interf.HandleMenuListener;
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.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;
/**
* Created by sunny on 2018-3-12.
......@@ -40,14 +49,31 @@ public class ExportFragment extends Fragment {
private ListView listView;
private Context context;
private FragmentListAdapter adaper;
private List<OcrInfo> infos;
private List<OcrRootBean> exportInfos= new ArrayList<>();
private boolean isUpdate=false,hasMoreData=false;
private int page=1,pageSize=10;
private AlertDialog dialog;//renameDialog
private ProgressDialog progressDialog;
private FragmentListAdapter.ListTextClickListener listener;
private HandleMenuListener handleMenuListener;
private List<OcrRootBean> selectedInfos=new ArrayList<>();
private NoticeMessageToMain messageToMain;
@Override
public void onAttach(Context context) {
super.onAttach(context);
this.context=context;
handleMenuListener= (HandleMenuListener) context;
listener= (FragmentListAdapter.ListTextClickListener) context;
messageToMain= (NoticeMessageToMain) context;
}
public List<OcrRootBean> getSelectedInfos() {
return selectedInfos;
}
public void setSelectedInfos(List<OcrRootBean> selectedInfos) {
this.selectedInfos = selectedInfos;
}
@Nullable
......@@ -60,6 +86,7 @@ public class ExportFragment extends Fragment {
initEvents();
progressDialog=new ProgressDialog(context);
return view;
}
......@@ -67,11 +94,16 @@ public class ExportFragment extends Fragment {
pullToRefreshListView= (PullToRefreshListView) view.findViewById(R.id.pullrefreshView);
listView=pullToRefreshListView.getRefreshableView();
pullToRefreshListView.doPullRefreshing(true,500);
adaper=new FragmentListAdapter(context,infos=new ArrayList<>());
adaper=new FragmentListAdapter(context, exportInfos , listener, new FragmentListAdapter.AdapterRadioSelectedListener() {
@Override
public void adapterRadioSelectedCallBack() {
setSelectedInfos(adaper.getSelectedInfo());
messageToMain.noticeMessage(adaper.getSelectedInfo());
}
});
listView.setAdapter(adaper);
pullToRefreshListView.doPullRefreshing(true,500);
}
public void initEvents(){
......@@ -96,6 +128,7 @@ public class ExportFragment extends Fragment {
page++;
if(HttpUtil.isNetworkConnected(context))
getExportRecord();
else{
Toast.makeText(context,"暂无网络连接",Toast.LENGTH_LONG).show();
refreshView.onPullDownRefreshComplete();
......@@ -103,33 +136,121 @@ public class ExportFragment extends Fragment {
}
});
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
handleMenuListener.setHandleMenu(View.VISIBLE);
adaper.setRadioShow(View.VISIBLE);
return true;
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String path=exportInfos.get(position).getIncludes().getCc_file().getFilePath();
String fileName=exportInfos.get(position).getIncludes().getCc_file().getFileName();
if(fileName.contains(".pdf")){
if(FileUtil.isFileExist(Configs.PDF_BASE+"/"+fileName))
startFileIntent("pdf",fileName);
else{
progressDialog.setMessage("正在下载...");
progressDialog.show();
downLoadFile(path, fileName);
}
}else if(fileName.contains(".doc")|| fileName.contains(".docs")){
if(FileUtil.isFileExist(Configs.WORD_BASE+"/"+fileName))
startFileIntent("word",fileName);
else
downLoadFile(path, fileName);
}else if(fileName.contains(".txt")){
if(FileUtil.isFileExist(Configs.TXT_BASE+"/"+fileName))
startFileIntent("txt",fileName);
else
downLoadFile(path, fileName);
}
}
});
}
private void downLoadFile(String path, String fileName) {
RequestParams params=new RequestParams(RequestConfig.DOWN_LOAD_URL);
params.addBodyParameter("fileName",path);
params.addBodyParameter("downloadName",fileName);
params.setSaveFilePath(Configs.WORD_BASE+"/"+fileName);
x.http().get(params, new Callback.CommonCallback<File>() {
@Override
public void onSuccess(File result) {
progressDialog.dismiss();
Toast.makeText(context,"下载成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
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_LIST_URL);
RequestParams params=new RequestParams(RequestConfig.EXPORT_RECORD_URL);
params.addBodyParameter("page",page+"");
params.addBodyParameter("sortItem","create_time");
params.addBodyParameter("sortOrder","desc");
String userInfo= Configs.USER_NAME+"_"+Configs.USER_ID;
String json="{\"cc_ocr_file\":{\"upload_user\":{\"equalTo\":\""+userInfo+"\"},\"status\":{\"equalTo\":\"0\"}}}";
String json="{\"cc_export_record\":{\"export_user\":{\"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) {
String data=result;
List<OcrInfo> list = GsonUtil.getInstance().fromJson(data, new TypeToken<List<OcrInfo>>() {}.getType());
if(isUpdate)
infos.clear();
infos.addAll(list);
if(list.size()<10){
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();
// Toast.makeText(context,"无更多数据",Toast.LENGTH_SHORT).show();
}
else
hasMoreData=true;
adaper.notifyDataSetChanged();
// List<OcrInfo> list=result;
pullToRefreshListView.onPullUpRefreshComplete();
pullToRefreshListView.onPullDownRefreshComplete();
pullToRefreshListView.setHasMoreData(hasMoreData);
......@@ -137,23 +258,28 @@ public class ExportFragment extends Fragment {
@Override
public void onError(Throwable ex, boolean isOnCallback) {
Toast.makeText(context,"网络异常,请检测...",Toast.LENGTH_SHORT).show();
pullToRefreshListView.onPullUpRefreshComplete();
pullToRefreshListView.onPullDownRefreshComplete();
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
public void setAllItemChecked(boolean flg){
adaper.setRadioAllSelected(flg);
}
public void setCheckBoxShow(int v){
adaper.setRadioShow(v);
}
public interface NoticeMessageToMain{
void noticeMessage(List<OcrRootBean> list);
}
}
package cn.com.bril.androidocr.studio.ui.fragment;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
......@@ -16,18 +20,22 @@ import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import cn.com.bril.androidocr.studio.R;
import cn.com.bril.androidocr.studio.beans.OcrInfo;
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.interf.HandleMenuListener;
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.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;
/**
* Created by sunny on 2018-3-12.
......@@ -40,14 +48,31 @@ public class ShareFragment extends Fragment {
private ListView listView;
private Context context;
private FragmentListAdapter adaper;
private List<OcrInfo> infos;
private List<OcrRootBean> 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 ExportFragment.NoticeMessageToMain messageToMain;
private HandleMenuListener handleMenuListener;
private ProgressDialog dialog;
@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() {
return selectedInfos;
}
public void setSelectedInfos(List<OcrRootBean> selectedInfos) {
this.selectedInfos = selectedInfos;
}
@Nullable
......@@ -60,6 +85,8 @@ public class ShareFragment extends Fragment {
initEvents();
dialog=new ProgressDialog(context);
return view;
}
......@@ -68,12 +95,15 @@ public class ShareFragment extends Fragment {
pullToRefreshListView= (PullToRefreshListView) view.findViewById(R.id.pullrefreshView);
listView=pullToRefreshListView.getRefreshableView();
pullToRefreshListView.doPullRefreshing(true,500);
adaper=new FragmentListAdapter(context,infos=new ArrayList<>());
adaper=new FragmentListAdapter(context, beanList, listTextClickListener, new FragmentListAdapter.AdapterRadioSelectedListener() {
@Override
public void adapterRadioSelectedCallBack() {
setSelectedInfos(adaper.getSelectedInfo());
messageToMain.noticeMessage(adaper.getSelectedInfo());
}
});
listView.setAdapter(adaper);
}
public void initEvents(){
pullToRefreshListView.setOnRefreshListener(new PullToRefreshBase.OnRefreshListener<ListView>() {
......@@ -100,65 +130,143 @@ public class ShareFragment extends Fragment {
Toast.makeText(context,"暂无网络连接",Toast.LENGTH_LONG).show();
refreshView.onPullDownRefreshComplete();
}
}
});
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
handleMenuListener.setHandleMenu(View.VISIBLE);
adaper.setRadioShow(View.VISIBLE);
return true;
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
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);
else{
downLoadFile(path, fileName);
}
}else if(fileName.contains(".doc")|| fileName.contains(".docs")){
if(FileUtil.isFileExist(Configs.WORD_BASE+"/"+fileName))
startFileIntent("word",fileName);
else
downLoadFile(path, fileName);
}else if(fileName.contains(".txt")){
if(FileUtil.isFileExist(Configs.TXT_BASE+"/"+fileName))
startFileIntent("txt",fileName);
else
downLoadFile(path, fileName);
}
}
});
}
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_LIST_URL);
RequestParams params=new RequestParams(RequestConfig.EXPORT_RECORD_URL);
params.addBodyParameter("page",page+"");
params.addBodyParameter("sortItem","create_time");
params.addBodyParameter("sortOrder","desc");
String userInfo= Configs.USER_NAME+"_"+Configs.USER_ID;
String json="{\"cc_ocr_file\":{\"upload_user\":{\"equalTo\":\""+userInfo+"\"},\"status\":{\"equalTo\":\"1\"}}}";
String json="{\"cc_export_record\":{\"export_user\":{\"equalTo\":\""+userInfo+"\"},\"type\":{\"equalTo\":2}}}";
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) {
String data=result;
List<OcrInfo> list = GsonUtil.getInstance().fromJson(data, new TypeToken<List<OcrInfo>>() {}.getType());
if(isUpdate)
infos.clear();
infos.addAll(list);
if(list.size()<10){
if (list.size()==0)
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{
hasMoreData=false;
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();
// List<OcrInfo> list=result;
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() {
}
});
}
private void downLoadFile(String path, String fileName) {
dialog.setMessage("正在下載...");
dialog.show();
RequestParams params=new RequestParams(RequestConfig.DOWN_LOAD_URL);
params.addBodyParameter("fileName",path);
params.addBodyParameter("downloadName",fileName);
params.setSaveFilePath(Configs.WORD_BASE+"/"+fileName);
x.http().get(params, new Callback.CommonCallback<File>() {
@Override
public void onSuccess(File result) {
Toast.makeText(context,"下载成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(Throwable ex, boolean isOnCallback) {
}
@Override
public void onCancelled(CancelledException cex) {
}
@Override
public void onFinished() {
}
});
}
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();
}
}
......@@ -42,4 +42,22 @@ public class FileUtil {
return filePic.getAbsolutePath();
}
//判断文件是否存在
public static boolean isFileExist(String path){
try
{
File f=new File(path);
if(!f.exists())
{
return false;
}
}
catch (Exception e)
{
return false;
}
return true;
}
}
......@@ -66,4 +66,12 @@ public class ScreenUtil {
}
return windowPos;
}
//清晰度设置
public static void setBackgroundAlpha(Activity context, float bgAlpha)
{
WindowManager.LayoutParams lp = context.getWindow().getAttributes();
lp.alpha = bgAlpha; //0.0-1.0
context.getWindow().setAttributes(lp);
}
}
package cn.com.bril.androidocr.studio.utils;
import android.content.Context;
import android.app.Activity;
import android.content.Intent;
import android.media.MediaMetadataRetriever;
import android.net.Uri;
......@@ -15,16 +15,17 @@ import java.io.File;
public class ShareUtil {
// 調用系統方法分享文件
public static void shareFile(Context context, File file) {
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.setType(getMimeType(file.getAbsolutePath()));//此处可发送多种文件
share.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
context.startActivity(Intent.createChooser(share, "分享文件"));
activity.startActivity(Intent.createChooser(share, "分享文件"));
// activity.startActivityForResult(share,0x00);
} else {
Toast.makeText(context,"分享文件不存在",Toast.LENGTH_SHORT).show();
Toast.makeText(activity,"分享文件不存在",Toast.LENGTH_SHORT).show();
}
}
......
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/normal" android:state_checked="true"/>
<item android:color="@color/tab_grey" android:state_checked="false"/>
<item android:color="@color/white" android:state_pressed="true"/>
<item android:color="@color/tab_grey" android:state_pressed="false"/>
</selector>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/bg_normal">
<RelativeLayout
android:id="@+id/head_content"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<include
android:id="@+id/header"
layout="@layout/top_title_layout"/>
<include
layout="@layout/bottom_tab_head_layout"
/>
</RelativeLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/fabbtn"
android:layout_width="wrap_content"
......@@ -22,18 +28,18 @@
android:src="@drawable/camera_icon"
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
android:layout_marginBottom="40dp"
android:layout_marginBottom="50dp"
android:layout_marginRight="20dp" />
<android.support.v4.view.ViewPager
<cn.com.bril.androidocr.studio.ui.widget.NoScrollViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@+id/bottom_menu"
android:layout_below="@+id/header"/>
android:layout_below="@+id/head_content"/>
<LinearLayout
<RelativeLayout
android:id="@+id/bottom_menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
......@@ -42,7 +48,10 @@
<include
layout="@layout/main_bottom_layout"
/>
</LinearLayout>
<include
layout="@layout/bottom_tab_layout"
/>
</RelativeLayout>
......
......@@ -77,7 +77,6 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:visibility="gone"
android:padding="10dp">
<TextView
......
......@@ -22,11 +22,12 @@
android:layout_toRightOf="@+id/icon">
<TextView
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="1"
android:id="@+id/title"
android:textSize="@dimen/txt16sp"
android:focusable="false"
android:textColor="@color/txtcolor33"
android:text="新文档"/>
......@@ -38,8 +39,8 @@
android:gravity="center_vertical">
<ImageView
android:layout_width="30dp"
android:layout_height="20dp"
android:layout_width="15dp"
android:layout_height="10dp"
android:src="@drawable/date"/>
<TextView
android:id="@+id/time"
......@@ -52,6 +53,18 @@
</LinearLayout>
<CheckBox
android:id="@+id/radio"
android:layout_width="18dp"
android:layout_height="18dp"
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"/>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_height="49dp"
android:id="@+id/main_bottom_menu"
android:orientation="vertical"
android:background="@color/white"
android:layout_gravity="bottom"
......
......@@ -48,8 +48,9 @@
/>
<ImageView
android:id="@+id/right_iv"
android:layout_width="5dp"
android:layout_width="30dp"
android:layout_height="20dp"
android:scaleType="centerInside"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="20dp"
......
......@@ -4,6 +4,7 @@
<dimen name="txt18sp">18sp</dimen>
<dimen name="txt16sp">16sp</dimen>
<dimen name="txt14sp">14sp</dimen>
<dimen name="txt12sp">12sp</dimen>
<!-- 下拉刷新字体 -->
<dimen name="picture_pull_to_refresh_loading_text_size">14dp</dimen>
......
......@@ -4,8 +4,12 @@
<string name="back">返回</string>
<string name="export">导出</string>
<string name="recoginize">识别</string>
<string name="share">分享</string>
<string name="rename">重命名</string>
<string name="delete">删除</string>
<string name="rerecoginize">重新拍摄</string>
<string name="vertify">校对</string>
<string name="search_content">请输入要查询的内容</string>
<string name="vertify_content">
贵阳际会峰云会议服务有限公司倾力打造中国会议策划第一品牌;
专业提供会议整体策划、场地预定、场地搭建、印刷、礼品、会议接待、专车接待、视频会议等一系列会议服务。经过10年的历练,拥有非常专业的会议策划团队;
......
......@@ -20,4 +20,16 @@
<!--引入定义的menu主题-->
</style>
<style name="action_item">
<item name="android:layout_width">0dp</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_weight">1</item>
<item name="android:gravity">center</item>
<item name="android:textSize">14sp</item>
<item name="android:drawablePadding">2dp</item>
<!--<item name="android:background">@drawable/bottom_nav_selector</item>-->
<item name="android:textColor">@color/white</item>
</style>
</resources>
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