package com.forfan.bigbang.component.activity; import android.content.DialogInterface; import android.content.Intent; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.support.v7.widget.AppCompatEditText; import android.support.v7.widget.Toolbar; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.ImageView; import com.forfan.bigbang.R; import com.forfan.bigbang.component.activity.screen.CaptureResultActivity; import com.forfan.bigbang.component.base.BaseActivity; import com.forfan.bigbang.cropper.BitmapUtil; import com.forfan.bigbang.cropper.CropHandler; import com.forfan.bigbang.cropper.CropHelper; import com.forfan.bigbang.cropper.CropParams; import com.forfan.bigbang.cropper.ImageUriUtil; import com.forfan.bigbang.cropper.handler.CropImage; import com.forfan.bigbang.entity.ImageUpload; import com.forfan.bigbang.util.ConstantUtil; import com.forfan.bigbang.util.OcrAnalsyser; import com.forfan.bigbang.util.SnackBarUtil; import com.forfan.bigbang.util.ToastUtil; import com.forfan.bigbang.util.UrlCountUtil; import com.forfan.bigbang.view.DialogFragment; import com.forfan.bigbang.view.SimpleDialog; import com.microsoft.projectoxford.vision.contract.Line; import com.microsoft.projectoxford.vision.contract.OCR; import com.microsoft.projectoxford.vision.contract.Region; import com.microsoft.projectoxford.vision.contract.Word; import com.shang.commonjar.contentProvider.SPHelper; import com.shang.utils.StatusBarCompat; import static com.forfan.bigbang.component.activity.screen.CaptureResultActivity.HTTP_IMAGE_BAIDU_COM; /** * Created by wangyan-pd on 2016/11/9. */ public class OcrActivity extends BaseActivity implements View.OnClickListener, CropHandler { private static final String TAG = OcrActivity.class.getName(); private CropParams mCropParams; private ImageView mImageView; private AppCompatEditText editText; private Button mPicReOcr; private Uri mCurrentUri; // private boolean shouldShowDialog = false; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_orc); StatusBarCompat.setupStatusBarView(this, (ViewGroup) getWindow().getDecorView(), true, R.color.colorPrimary); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); getSupportActionBar().setDisplayHomeAsUpEnabled(true); getSupportActionBar().setTitle(R.string.ocr_picture); mCropParams = new CropParams(this); mImageView = (ImageView) findViewById(R.id.image); editText = (AppCompatEditText) findViewById(R.id.result); mPicReOcr = (Button) findViewById(R.id.re_ocr); findViewById(R.id.take_pic).setOnClickListener(this); findViewById(R.id.select_pic).setOnClickListener(this); findViewById(R.id.re_ocr).setOnClickListener(this); parseIntent(getIntent()); findViewById(R.id.hint).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { UrlCountUtil.onEvent(UrlCountUtil.CLICK_OCR_TO_BIGBANG_ACTIVITY); Intent intent = new Intent(OcrActivity.this, BigBangActivity.class); intent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(BigBangActivity.TO_SPLIT_STR, editText.getText().toString()); startActivity(intent); } }); // editText.setOnTouchListener(forceTouchListener); } // final ForceTouchListener forceTouchListener = new ForceTouchListener(this, 70, 0.27f, true, true, new Callback() { // @Override // public void onForceTouch() { // //functionToInvokeOnForceTouch(); // UrlCountUtil.onEvent(UrlCountUtil.CLICK_OCR_TO_BIGBANG_ACTIVITY); // Intent intent = new Intent(OcrActivity.this, BigBangActivity.class); // intent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK); // intent.putExtra(BigBangActivity.TO_SPLIT_STR, editText.getText().toString()); // startActivity(intent); // } // // @Override // public void onNormalTouch() { // //functionToInvokeOnNormalTouch(); //// UrlCountUtil.onEvent(UrlCountUtil.CLICK_OCR_TO_BIGBANG_ACTIVITY); //// Intent intent = new Intent(OcrActivity.this, BigBangActivity.class); //// intent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK); //// intent.putExtra(BigBangActivity.TO_SPLIT_STR, editText.getText()); //// startActivity(intent); // } // }); private void parseIntent(Intent intent) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { if (intent.getClipData() != null && intent.getClipData().getItemAt(0) != null && intent.getClipData().getItemAt(0).getUri() != null) { Uri uri = intent.getClipData().getItemAt(0).getUri(); showBitmapandOcr(uri); UrlCountUtil.onEvent(UrlCountUtil.CLICK_OCR_FROM_SHARE); } } else if (intent.getData() != null) { Uri uri = intent.getData(); showBitmapandOcr(uri); UrlCountUtil.onEvent(UrlCountUtil.CLICK_OCR_FROM_SHARE); } } private void showBitmapandOcr(Uri uri) { mImageView.setVisibility(View.VISIBLE); mImageView.setImageBitmap(BitmapUtil.decodeUriAsBitmap(this, uri)); uploadImage4Ocr(uri); mCurrentUri = uri; showSearchOcr(mCurrentUri); } private void showSearchOcr(Uri uri) { String img_path = ImageUriUtil.getImageAbsolutePath(this, uri); findViewById(R.id.search).setVisibility(View.VISIBLE); findViewById(R.id.search).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { ToastUtil.show(R.string.upload_img); OcrAnalsyser.getInstance().uploadImage(OcrActivity.this, img_path, new OcrAnalsyser.ImageUploadCallBack() { @Override public void onSucess(ImageUpload imageUpload) { if(imageUpload != null && imageUpload.getData() != null && !TextUtils.isEmpty(imageUpload.getData().getUrl())){ String url = HTTP_IMAGE_BAIDU_COM + "queryImageUrl=" +imageUpload.getData().getUrl()+ "&querySign=4074500770,3618317556&fromProduct= "; Intent intent = new Intent(); intent.putExtra("url",url); intent.setClass(OcrActivity.this,WebActivity.class); startActivity(intent); }else { ToastUtil.show(R.string.upload_img_fail); } } @Override public void onFail(Throwable throwable) { ToastUtil.show(throwable.getMessage()); } }); } }); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); parseIntent(intent); } @Override protected void onResume() { super.onResume(); // if (shouldShowDialog) { // showBeyondQuoteDialog(); // } } @Override public void onClick(View v) { mCropParams.refreshUri(); switch (v.getId()) { case R.id.take_pic: try { UrlCountUtil.onEvent(UrlCountUtil.CLICK_OCR_TAKEPICTURE); mCropParams.enable = true; mCropParams.compress = false; Intent intent = CropHelper.buildCameraIntent(mCropParams); startActivityForResult(intent, CropHelper.REQUEST_CAMERA); mPicReOcr.setVisibility(View.GONE); } catch (Throwable e) { } break; case R.id.select_pic: try { UrlCountUtil.onEvent(UrlCountUtil.CLICK_OCR_PICK_FROM_GALLERY); mCropParams.enable = false; mCropParams.compress = false; Intent intent1 = CropHelper.buildGalleryIntent(mCropParams); startActivityForResult(intent1, CropHelper.REQUEST_CROP); mPicReOcr.setVisibility(View.GONE); } catch (Throwable e) { } break; case R.id.re_ocr: UrlCountUtil.onEvent(UrlCountUtil.CLICK_OCR_REOCR); if (mCurrentUri != null) uploadImage4Ocr(mCurrentUri); break; } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE && resultCode == -1) { CropImage.ActivityResult result = data.getExtras().getParcelable(CropImage.CROP_IMAGE_EXTRA_RESULT); mCurrentUri = result.getUri(); showBitmapandOcr(mCurrentUri); } else { CropHelper.handleResult(this, requestCode, resultCode, data); } if (requestCode == 1) { Log.e(TAG, ""); } } @Override protected void onDestroy() { CropHelper.clearCacheDir(); super.onDestroy(); } @Override public CropParams getCropParams() { return mCropParams; } @Override public void onPhotoCropped(Uri uri) { // Original or Cropped uri Log.d(TAG, "Crop Uri in path: " + uri.getPath()); // // if (!mCropParams.compress) { // showBitmapandOcr(uri); // // } CropImage.activity(uri) .start(OcrActivity.this); } private void showBeyondQuoteDialog() { SimpleDialog.Builder builder = new SimpleDialog.Builder(R.style.SimpleDialogLight) { @Override public void onPositiveActionClicked(DialogFragment fragment) { // 这里是保持开启 super.onPositiveActionClicked(fragment); Intent intent = new Intent(); intent.setClass(OcrActivity.this, DiyOcrKeyActivity.class); startActivity(intent); } @Override public void onDismiss(DialogInterface dialog) { super.onCancel(dialog); // shouldShowDialog = false; } }; builder.message(this.getString(R.string.ocr_quote_beyond_time)) .positiveAction(this.getString(R.string.free_use)); DialogFragment fragment = DialogFragment.newInstance(builder); fragment.show(getSupportFragmentManager(), null); } private void uploadImage4Ocr(Uri uri) { String img_path = ImageUriUtil.getImageAbsolutePath(this, uri); // VisionServiceRestClient client = new VisionServiceRestClient("00b0e581e4124a2583ea7dba57aaf281"); findViewById(R.id.hint).setVisibility(View.VISIBLE); if (SPHelper.getInt(ConstantUtil.OCR_TIME, 0) == ConstantUtil.OCR_TIME_TO_ALERT) { // showBeyondQuoteDialog(); // shouldShowDialog = true; int time = SPHelper.getInt(ConstantUtil.OCR_TIME, 0) + 1; SPHelper.save(ConstantUtil.OCR_TIME, time); return; } editText.setText(R.string.recognize); OcrAnalsyser.getInstance().analyse(this, img_path, true, new OcrAnalsyser.CallBack() { @Override public void onSucess(OCR ocr) { editText.setText(OcrAnalsyser.getInstance().getPasedMiscSoftText(ocr)); } @Override public void onFail(Throwable throwable) { if (SPHelper.getString(ConstantUtil.DIY_OCR_KEY, "").equals("")) { ToastUtil.show(getResources().getString(R.string.ocr_useup_toast)); } editText.setText(R.string.sorry_for_parse_fail); mPicReOcr.setVisibility(View.VISIBLE); } }); // RequestBody requestBody = // RequestBody.create(MediaType.parse("multipart/form-data"), file); // RetrofitHelper.getOcrService() // .uploadImage("e02e6b613488957", descriptionString, requestBody) // .compose(this.bindToLifecycle()) // .subscribeOn(Schedulers.io()) // .observeOn(AndroidSchedulers.mainThread()) // .subscribe(recommendInfo -> { // LogUtil.d(recommendInfo.toString()); // editText.setText(getPasedText(recommendInfo)); // }, throwable -> { // LogUtil.d(throwable.toString()); // editText.setText(R.string.sorry_for_parse_fail); // mPicReOcr.setVisibility(View.VISIBLE); // }); } private String getPasedMiscSoftText(OCR r) { String result = ""; for (Region reg : r.regions) { for (Line line : reg.lines) { for (Word word : line.words) { result += word.text + " "; } result += "\n"; } result += "\n\n"; } return result; } private void showBigBang(String result) { Intent intent = new Intent(this, BigBangActivity.class); intent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(BigBangActivity.TO_SPLIT_STR, result); startActivity(intent); } @Override public void onCompressed(Uri uri) { // Compressed uri mImageView.setImageBitmap(BitmapUtil.decodeUriAsBitmap(this, uri)); } @Override public void onCancel() { SnackBarUtil.show(editText, "Crop canceled!"); } @Override public void onFailed(String message) { SnackBarUtil.show(editText, "Crop failed: " + message); } @Override public void handleIntent(Intent intent, int requestCode) { try { startActivityForResult(intent, requestCode); } catch (Exception e) { e.printStackTrace(); } } }