package com.mm.android.deviceaddmodule.p_inputsn; import android.content.DialogInterface; import android.content.Intent; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.google.zxing.Result; import com.lechange.opensdk.softap.LCOpenSDK_SoftAPConfig; import com.lechange.opensdk.utils.LogUtils; import com.mm.android.deviceaddmodule.R; import com.mm.android.deviceaddmodule.SearchDeviceManager; import com.mm.android.deviceaddmodule.base.BaseDevAddFragment; import com.mm.android.deviceaddmodule.contract.ScanContract; import com.mm.android.deviceaddmodule.helper.DeviceAddHelper; import com.mm.android.deviceaddmodule.helper.PageNavigationHelper; import com.mm.android.deviceaddmodule.mobilecommon.AppConsume.ScanResult; import com.mm.android.deviceaddmodule.mobilecommon.common.LCConfiguration; import com.mm.android.deviceaddmodule.mobilecommon.utils.LogUtil; import com.mm.android.deviceaddmodule.mobilecommon.utils.PreferencesHelper; import com.mm.android.deviceaddmodule.p_inputsn.scanresult.DecodeImgCallback; import com.mm.android.deviceaddmodule.p_inputsn.scanresult.DecodeImgThread; import com.mm.android.deviceaddmodule.p_inputsn.scanresult.ImageUtil; import com.mm.android.deviceaddmodule.presenter.ScanPresenter; import com.mm.android.deviceaddmodule.views.AddBoxTipDialog; import com.mm.android.dhqrscanner.BaseScannerView; import com.mm.android.dhqrscanner.DHScannerView; import static android.app.Activity.RESULT_OK; /** * 二维码扫描页 */ public class ScanFragment extends BaseDevAddFragment implements ScanContract.View, BaseScannerView.HandleDecodeResultListener , View.OnClickListener { ScanContract.Presenter mPresenter; DHScannerView mDHScannerView; //二维码扫描控件 TextView mNext, mFlashTv, mPhone; boolean isLight = false; //闪光灯是否开启 public static final int REQUEST_IMAGE = 10; public static ScanFragment newInstance() { ScanFragment fragment = new ScanFragment(); Bundle args = new Bundle(); fragment.setArguments(args); return fragment; } public void changeFlashLight() { isLight = !isLight; mDHScannerView.onFlash(isLight); Drawable drawable = getResources().getDrawable(isLight ? R.drawable.adddevice_icon_falshlight_h : R.drawable.adddevice_icon_falshlight_n); drawable.setBounds(0, 0, drawable.getMinimumWidth(), drawable.getMinimumHeight()); mFlashTv.setCompoundDrawables(null, drawable, null, null); mFlashTv.setText(isLight ? R.string.add_device_falshlight_on : R.string.add_device_falshlight_off); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment return inflater.inflate(R.layout.fragment_scan, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); } protected void initData() { mPresenter = new ScanPresenter(this); mPresenter.resetCache();//进入扫描页,清空缓存 } protected void initView(View view) { mDHScannerView = view.findViewById(R.id.dh_scanview); mDHScannerView.setHandleDecodeResuleListener(this); mDHScannerView.setScanInRect(true); mNext = view.findViewById(R.id.next_btn); mNext.setOnClickListener(this); mPhone = view.findViewById(R.id.phone_btn); mPhone.setOnClickListener(this); mFlashTv = view.findViewById(R.id.tv_flash); mFlashTv.setOnClickListener(this); } @Override public void onResume() { super.onResume(); mDHScannerView.onScanResume(); } @Override public void onPause() { super.onPause(); mDHScannerView.onScanPause(); mDHScannerView.onFlash(false); } @Override public void onDestroy() { super.onDestroy(); mPresenter.recyle(); } @Override public void onDestroyView() { super.onDestroyView(); mDHScannerView.onScanDestory(); } @Override public void handleDecodeResult(String result, byte[] bytes, int with, int height) { if(!isViewActive())return; if (TextUtils.isEmpty(result)) { mDHScannerView.onScanResume(); } else { LogUtil.debugLog("ScanFragment", "result : " + result); ScanResult scanResult = mPresenter.parseScanStr(result, ""); String sn = scanResult.getSn().trim(); if(!isLetterDigit(sn)) { toast(R.string.add_device_qrcode_error_tip); PageNavigationHelper.gotoManualInputPage(this); return; } //扫描二维码--kaede mPresenter.getDeviceInfo(scanResult.getSn().trim(), scanResult.getMode()); } } private boolean isLetterDigit(String str) { // 序列号二维码规则字母 + 数字,长度 10 - 32位 String regex = "^[a-z0-9A-Z]{10,32}$"; return str.matches(regex); } @Override public void openCamerError() { } @Override public void showToastInfo(String msg) { toast(msg); mDHScannerView.onScanResume(); } @Override public void showToastInfo(int msgId) { toast(msgId); mDHScannerView.onScanResume(); } @Override public void showToastInfo(int msgId, String msg) { if (!TextUtils.isEmpty(msg)) { toast(msg); } else { toast(msgId); } mDHScannerView.onScanResume(); } @Override public void onClick(View v) { int id = v.getId(); if (R.id.next_btn == id) { PageNavigationHelper.gotoManualInputPage(this); } else if(R.id.tv_flash == id) { changeFlashLight(); } else if(R.id.phone_btn == id) { /*打开相册*/ Intent intent = new Intent(); intent.setAction(Intent.ACTION_PICK); intent.setType("image/*"); startActivityForResult(intent, REQUEST_IMAGE); } } @Override public void goTypeChoosePage() { PageNavigationHelper.gotoTypeChoosePage(this); } @Override public void goNotSupportBindTipPage() { PageNavigationHelper.gotoErrorTipPage(this, DeviceAddHelper.ErrorCode.DEVICE_BIND_ERROR_NOT_SUPPORT_TO_BIND); } @Override public void goOtherUserBindTipPage() { PageNavigationHelper.gotoErrorTipPage(this, DeviceAddHelper.ErrorCode.INPUT_SN_ERROR_BIND_BY_OTHER); } @Override public void showAddBoxTip() { if (!PreferencesHelper.getInstance(getActivity()).getBoolean( LCConfiguration.SHOW_ADD_BOX_TIP)) { AddBoxTipDialog a = new AddBoxTipDialog(); a.setDismissListener(new DialogInterface.OnDismissListener() { @Override public void onDismiss(DialogInterface dialog) { goCloudConnectPage(); } }); a.show(getActivity().getSupportFragmentManager(), a.getClass().getName()); } else { goCloudConnectPage(); } } @Override public void goCloudConnectPage() { PageNavigationHelper.gotoCloudConnectPage(this); } @Override public void goDeviceLoginPage() { PageNavigationHelper.gotoDevLoginPage(this); } @Override public void goSecCodePage() { PageNavigationHelper.gotoDevSecCodePage(this); } @Override public void goDeviceBindPage() { PageNavigationHelper.gotoDeviceBindPage(this); } @Override public void goIMEIInputPage() { PageNavigationHelper.gotoIMEIInputPage(this); } @Override public void goBindSuceesPage() { PageNavigationHelper.gotoBindSuccessPage(this); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_IMAGE && resultCode == RESULT_OK) { String path = ImageUtil.getImageAbsolutePath(getActivity(), data.getData()); new DecodeImgThread(path, new DecodeImgCallback() { @Override public void onImageDecodeSuccess(Result result) { handleDecodeResult(result.getText(),null,0,0); } @Override public void onImageDecodeFailed() { toast(R.string.device_add_scan_error); } }).run(); } } }