package com.taiyi.zhimai.ui.activity; import static android.bluetooth.BluetoothAdapter.ACTION_REQUEST_ENABLE; import android.Manifest; import android.annotation.SuppressLint; import android.app.Dialog; import android.bluetooth.BluetoothGatt; import android.content.Intent; import android.content.pm.PackageManager; import android.graphics.Color; import android.os.Build; import android.os.Handler; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.animation.ScaleAnimation; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.viewpager.widget.ViewPager; import com.blelib.bean.BleDeviceD; import com.blelib.ble.BleController; import com.blelib.ble.BleEvent; import com.blelib.ble.IDeviceInterface; import com.google.android.material.tabs.TabLayout; import com.jakewharton.rxbinding2.view.RxView; import com.taiyi.pulse.fastble.BleManager; import com.taiyi.pulse.fastble.callback.BleGattCallback; import com.taiyi.pulse.fastble.callback.BleScanCallback; import com.taiyi.pulse.fastble.data.BleDevice; import com.taiyi.pulse.fastble.exception.BleException; import com.taiyi.pulse.fastble.scan.BleScanRuleConfig; import com.taiyi.tyusbsdk.ResultListener; import com.taiyi.tyusbsdk.USBDataTemp; import com.taiyi.tyusbsdk.pulse.TaiyiManager; import com.taiyi.tyusbsdk.pulse.bean.PulseResult; import com.taiyi.tyusbsdk.pulse.net.HttpImpl; import com.taiyi.tyusbsdk.pulse.net.HttpUtil; import com.taiyi.tyusbsdk.pulse.net.TokenOverDueHttpImpl; import com.taiyi.tyusbsdk.pulse.ui.SuccessActivity; import com.taiyi.tyusbsdk.pulse.util.AppManager; import com.taiyi.tyusbsdk.pulse.util.DialogTipUtil; import com.taiyi.tyusbsdk.pulse.util.LogUtil; import com.taiyi.tyusbsdk.pulse.util.ProgressDialogUtil; import com.taiyi.tyusbsdk.pulse.util.QTimeUtil; import com.taiyi.tyusbsdk.pulse.util.ToastUtil; import com.taiyi.zhimai.R; import com.taiyi.zhimai.common.util.DialogTipsUtil; import com.taiyi.zhimai.ui.DeviceSAdapter; import com.taiyi.zhimai.ui.activity.measure.BleMeasureFlowActivity; import com.taiyi.zhimai.ui.activity.measure.Measure3Activity; import org.greenrobot.eventbus.EventBus; import java.util.ArrayList; import java.util.List; import java.util.UUID; import java.util.concurrent.TimeUnit; import io.reactivex.functions.Consumer; public class MeasureMainActivity extends BleStateActivity implements ResultListener { private int retryType = 0; private final static int RETRY_LEFT = 201; private final static int RETRY_RIGHT = 202; private final static int RETRY_SAVE = 203; public static final int REQUEST_ENABLE_BT = 100; public static final int REQUEST_MEASURE_LEFT = 101; public static final int REQUEST_MEASURE_RIGHT = 102; public static final int REQUEST_TO_RESULT = 103; public static final int RESULT_MEASURE_FAIL = 203; private static final int REQUEST_PERMISSION_CODE = 106; public static final int CONNECT_MODE_USB = 1; public static final int CONNECT_MODE_BLE = 2; private int connect_mode; private ImageView ivBack; private TextView mTvScan; private TabLayout mTl; private ViewPager mVp; private ConstraintLayout mClMain; private ConstraintLayout mClSecond; private ImageView mIvBg; private LinearLayout mLlBack; private ImageView mIvDevice; private TextView mTvLeft; private TextView mTvRight; private TextView mtvTypeLeft; private TextView mtvTypeRight; private TextView mTvSubmit; private RecyclerView mRecyclerView; private TextView mTvConnect; private Dialog mDialog; private DeviceSAdapter mDeviceSAdapter; private ScaleAnimation scaleAnimation; private List mTabTitle; private ArrayList mMissPermissions = new ArrayList<>(); private int currentDeviceType = 3; private String leftMaiId; private String rightMaiId; @Override protected int initLayoutResId() { return R.layout.activity_measure_main; } @Override protected void init() { connect_mode = CONNECT_MODE_BLE; initViews(); setDeviceStatusListener(); resetToMeasure(); getToken(); if (BleController.getInstance().isConnected()) { mClMain.setVisibility(View.GONE); mClSecond.setVisibility(View.VISIBLE); mIvBg.setVisibility(View.GONE); mIvDevice.setImageResource(R.drawable.device_7); currentDeviceType = 7; BleController.getInstance().setConnectedDeviceType(7); } } private void initViews() { ivBack = findViewById(R.id.iv_back); mIvDevice = findViewById(R.id.iv_device); mTvScan = findViewById(R.id.tv_scan); mClMain = findViewById(R.id.cl_main); mClSecond = findViewById(R.id.cl_second); mIvBg = findViewById(R.id.iv_bg); mTvSubmit = findViewById(R.id.tv_submit); mLlBack = findViewById(R.id.ll_back); mTvLeft = findViewById(R.id.tv_left); mtvTypeLeft = findViewById(R.id.tv_type_left); mTvRight = findViewById(R.id.tv_right); mtvTypeRight = findViewById(R.id.tv_type_right); mTvSubmit.setOnClickListener(v -> { submit(); }); mTvScan.setOnClickListener(v -> { doConnect(); }); mLlBack.setOnClickListener(v -> { clearDeviceSAdapter(); TaiyiManager.getInstance().clearMeasure(); TaiyiManager.getInstance().onSkip(); finish(); }); ivBack.setColorFilter(Color.WHITE); ivBack.setOnClickListener(v -> { TaiyiManager.getInstance().clearMeasure(); TaiyiManager.getInstance().onSkip(); finish(); }); } private void getToken() { HttpUtil.getInstance().getRequestQueue(this).check(new HttpImpl() { @Override public void showError(String error) { DialogTipUtil.showSelectDialog(MeasureMainActivity.this, getString(R.string.dialog_tip_tip), getString(R.string.measure_skip_tip_1), R.string.measure_skip, R.string.dialog_tip_retry, new DialogTipUtil.OptionClickCallback_I() { @Override public void leftClick() { TaiyiManager.getInstance().clearMeasure(); TaiyiManager.getInstance().onSkip(); finish(); } @Override public void rightClick() { getToken(); } }); } @Override public void showResponse(String response) { HttpUtil.AuthorizationValue = response; switch (retryType) { case RETRY_LEFT: getLeftUUID(); break; case RETRY_RIGHT: getRightUUID(); break; case RETRY_SAVE: saveMai(); break; default: BleController controller = BleController.getInstance(); controller.cancelDelayDisconnect(); if (controller.isConnected()) { BleDevice device = controller.getBleDevice(); connectDevice(device); } else { controller.init(getApplication()); doConnect(); } } } }); } private void initDeviceDialog() { mDialog = new Dialog(this, R.style.simpleDialogStyle); View view = LayoutInflater.from(this).inflate(R.layout.layout_device_choose, null); ImageView iv_cancel = view.findViewById(R.id.iv_cancel); iv_cancel.setColorFilter(ContextCompat.getColor(this, R.color.gray)); iv_cancel.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (connect_mode == CONNECT_MODE_BLE) { BleController.getInstance().cancelScan(); } clearDeviceSAdapter(); mDialog.dismiss(); } }); mRecyclerView = view.findViewById(R.id.recycler); mTvConnect = view.findViewById(R.id.tv_connect); mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); mDialog.setContentView(view); mDialog.setCancelable(false); } private void setDeviceStatusListener() { BleController.getInstance().setIBLEInterface(new IDeviceInterface() { @Override public void onStatus(int status, int battery) { if (BleController.getInstance().getYjversion() == 0) { BleController.getInstance().getVersion(); } // EventBus.getDefault().post(new BatteryEvent(battery)); } @Override public void onVersion(int hardware, int firmware, int data, int channel) { LogUtil.w("MainActivity", "硬件版本:" + hardware + ",固件版本:" + firmware + ",数据版本:" + data); BleController.getInstance().getStatus(); if (hardware > 7000) { mIvDevice.setImageResource(R.drawable.device_7); currentDeviceType = 7; BleController.getInstance().setConnectedDeviceType(7); } else { Toast.makeText(MeasureMainActivity.this, "设备硬件版本(" + hardware + ")过低不支持", Toast.LENGTH_SHORT).show(); return; } mIvDevice.setVisibility(View.VISIBLE); } @Override public void onLowPowerNotify(int battery) { // String msg = String.format(getString(R.string.device_low_power), battery); String msg = getString(R.string.device_low_power_1); if (AppManager.getAppManager().currentActivity() instanceof Measure3Activity) { LogUtil.w("MainActivity", "Measure3Activity need not tip"); } else { DialogTipUtil.showIKnow(AppManager.getAppManager().currentActivity(), msg); LogUtil.w("MainActivity", "tip power:" + msg); } } @Override public void onInitSensorFailed() { if (AppManager.getAppManager().currentActivity() instanceof MeasureMainActivity) { DialogTipUtil.showIKnow(MeasureMainActivity.this, getString(R.string.device_fault)); } else { EventBus.getDefault().post(new BleEvent(BleEvent.TYPE_SENSOR_ERROR)); } } }); } private void doConnect() { if (connect_mode == CONNECT_MODE_BLE) { initDeviceDialog(); setScanRule(); } } private void setScanRule() { BleScanRuleConfig scanRuleConfig = new BleScanRuleConfig.Builder().setServiceUuids( new UUID[]{UUID.fromString(BleController.DEV_SERVICE_UUID)}) // 只扫描指定的服务的设备,可选 .setDeviceName(true, "TY") // 只扫描指定广播名的设备,可选 .setScanTimeOut(Integer.MAX_VALUE) // 扫描超时时间,可选,默认10秒 .build(); BleManager.getInstance().initScanRule(scanRuleConfig); checkAndRequestPermissions(); } private void checkAndRequestPermissions() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { //小于23版本直接使用 scan(); } else if (Build.VERSION.SDK_INT < 31) { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { scan(); } else { mMissPermissions.add(Manifest.permission.ACCESS_FINE_LOCATION); popupPermissionTip(mMissPermissions, R.string.permission_ble, REQUEST_PERMISSION_CODE); } } else { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED) { scan(); } else { if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { mMissPermissions.add(Manifest.permission.ACCESS_FINE_LOCATION); } if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) != PackageManager.PERMISSION_GRANTED) { mMissPermissions.add(Manifest.permission.BLUETOOTH_SCAN); mMissPermissions.add(Manifest.permission.BLUETOOTH_CONNECT); mMissPermissions.add(Manifest.permission.BLUETOOTH_ADVERTISE); } LogUtil.w(TAG, "mMissPermissions:" + mMissPermissions); popupPermissionTip(mMissPermissions, R.string.permission_ble_1, REQUEST_PERMISSION_CODE); } } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { if (grantResults.length != 0 && requestCode == REQUEST_PERMISSION_CODE) { for (int i = grantResults.length - 1; i >= 0; i--) { if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { mMissPermissions.remove(permissions[i]); } } if (!mMissPermissions.isEmpty()) { if (mMissPermissions.contains(Manifest.permission.ACCESS_FINE_LOCATION)) { Toast.makeText(MeasureMainActivity.this, getString(R.string.ble_permission_disabled), Toast.LENGTH_SHORT).show(); } else if (mMissPermissions.contains(Manifest.permission.BLUETOOTH_SCAN)) { Toast.makeText(MeasureMainActivity.this, getString(R.string.permission_ble_1), Toast.LENGTH_SHORT).show(); } checkAndRequestPermissions(); } else { scan(); } } } private void scan() { if (mDeviceSAdapter == null) { mDeviceSAdapter = new DeviceSAdapter(); } if (BleManager.getInstance().isBlueEnable()) { BleManager.getInstance().scan(new BleScanCallback() { @Override public void onScanStarted(boolean success) { clearDeviceSAdapter(); } @Override public void onLeScan(BleDevice bleDevice) { super.onLeScan(bleDevice); } @Override public void onScanning(BleDevice bleDevice) { BleDeviceD s = new BleDeviceD(); s.mDevice = bleDevice; mDeviceSAdapter.addData(s); } @Override public void onScanFinished(List scanResultList) { } }); setDialogData(mDeviceSAdapter, new DialogTipsUtil.DeviceSelectCallback() { @Override public void onSuccess(BleDevice bleDevice) { BleManager.getInstance().cancelScan(); connectDevice(bleDevice); } }); } else { enableBLE(); } } /** * 开启蓝牙 */ private void enableBLE() { Intent enableBtIntent = new Intent(ACTION_REQUEST_ENABLE); if (ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) != PackageManager.PERMISSION_GRANTED) { // TODO: Consider calling // ActivityCompat#requestPermissions // here to request the missing permissions, and then overriding // public void onRequestPermissionsResult(int requestCode, String[] permissions, // int[] grantResults) // to handle the case where the user grants the permission. See the documentation // for ActivityCompat#requestPermissions for more details. return; } startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_ENABLE_BT) { if (resultCode == AppCompatActivity.RESULT_OK) { scan(); } else { Toast.makeText(MeasureMainActivity.this, R.string.ble_unable, Toast.LENGTH_SHORT).show(); } } else if (requestCode == REQUEST_MEASURE_LEFT) { if (resultCode == AppCompatActivity.RESULT_OK) { if (connect_mode == CONNECT_MODE_USB) { leftMaiId = USBDataTemp.getInstance().measure_id; } else if (connect_mode == CONNECT_MODE_BLE) { leftMaiId = BleController.getInstance().getUuid(); } mtvTypeLeft.setText(R.string.measure_succeed_tip); mtvTypeLeft.setBackground(ContextCompat.getDrawable(this, R.drawable.bg_green_border_3dp)); } else if (resultCode == RESULT_MEASURE_FAIL) { mtvTypeLeft.setText(R.string.measure_failed_tip); mtvTypeLeft.setBackground(ContextCompat.getDrawable(this, R.drawable.bg_red_border_3dp)); } updateMeasureStatus(); } else if (requestCode == REQUEST_MEASURE_RIGHT) { if (resultCode == AppCompatActivity.RESULT_OK) { if (connect_mode == CONNECT_MODE_USB) { rightMaiId = USBDataTemp.getInstance().measure_id; } else if (connect_mode == CONNECT_MODE_BLE) { rightMaiId = BleController.getInstance().getUuid(); } mtvTypeRight.setText(R.string.measure_succeed_tip); mtvTypeRight.setBackground(ContextCompat.getDrawable(this, R.drawable.bg_green_border_3dp)); } else if (resultCode == RESULT_MEASURE_FAIL) { mtvTypeRight.setText(R.string.measure_failed_tip); mtvTypeRight.setBackground(ContextCompat.getDrawable(this, R.drawable.bg_red_border_3dp)); } updateMeasureStatus(); } } @SuppressLint("MissingPermission") private void connectDevice(BleDevice bleDevice) { BleManager.getInstance().connect(bleDevice, new BleGattCallback() { @Override public void onStartConnect() { ProgressDialogUtil.show(MeasureMainActivity.this, getString(R.string.ble_connecting)); BleController.getInstance().cancelScan(); } @Override public void onConnectFail(BleDevice bleDevice, BleException exception) { ProgressDialogUtil.close(); ToastUtil.show(MeasureMainActivity.this, R.string.ble_connect_failed); BleController.getInstance().setConnected(false); clearDeviceSAdapter(); scan(); } @Override public void onConnectSuccess(BleDevice bleDevice, BluetoothGatt gatt, int status) { ProgressDialogUtil.close(); mClMain.setVisibility(View.GONE); mClSecond.setVisibility(View.VISIBLE); mIvBg.setVisibility(View.GONE); BleController.getInstance().setBleDevice(bleDevice); BleController.getInstance().setConnected(true); getDeviceState(); } @Override public void onDisConnected(boolean isActiveDisConnected, BleDevice bleDevice, BluetoothGatt gatt, int status) { BleController.getInstance().recycle(); ProgressDialogUtil.close(); BleController.getInstance().setConnectedDeviceType(-1); BleController.getInstance().setConnected(false); clearDeviceSAdapter(); resetUI(); if (AppManager.getAppManager().currentActivity() != null && AppManager.getAppManager().currentActivity() instanceof MeasureMainActivity && !isFinishing()) { DialogTipUtil.showIKnow(MeasureMainActivity.this, getString(R.string.device_disconnect), msg -> doConnect()); } else { EventBus.getDefault().post(new BleEvent(BleEvent.TYPE_DISCONNECT)); } } }); } private void getDeviceState() { new Handler().postDelayed(new Runnable() { @Override public void run() { BleController.getInstance().getStatus(); } }, 400); } private void setDialogData(final DeviceSAdapter adapter, final DialogTipsUtil.DeviceSelectCallback callbackI) { if (adapter == null) { return; } adapter.setRecycler(mRecyclerView); adapter.setPosition(0); adapter.setOnConnectClickListener(() -> { if (mTvConnect != null) mTvConnect.performClick(); }); mTvConnect.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { int posClick = adapter.getPosition(); if (posClick == -1) { Toast.makeText(MeasureMainActivity.this, getString(R.string.device_select_one), Toast.LENGTH_SHORT).show(); return; } if (adapter.getData().isEmpty()) { Toast.makeText(MeasureMainActivity.this, getString(R.string.device_scan_null), Toast.LENGTH_SHORT).show(); return; } callbackI.onSuccess(adapter.getData().get(posClick).mDevice); mDialog.dismiss(); } }); mRecyclerView.setAdapter(adapter); if (!isFinishing() && !isDestroyed()) mDialog.show(); } private void clearDeviceSAdapter() { if (mDeviceSAdapter != null && mDeviceSAdapter.getData() != null) { mDeviceSAdapter.getData().clear(); mDeviceSAdapter.setPosition(-1); mDeviceSAdapter.notifyDataSetChanged(); } } private void resetUI() { if (mIvDevice != null) { mIvDevice.setImageResource(0); } USBDataTemp.getInstance().clear(); if (mClMain != null) { mClMain.setVisibility(View.VISIBLE); } if (mClSecond != null) { mClSecond.setVisibility(View.GONE); } if (mIvBg != null) { mIvBg.setVisibility(View.VISIBLE); } resetToMeasure(); } private void resetToMeasure() { leftMaiId = null; rightMaiId = null; mtvTypeLeft.setText(""); mtvTypeLeft.setBackground(null); mtvTypeRight.setText(""); mtvTypeRight.setBackground(null); updateMeasureStatus(); } @SuppressLint("CheckResult") private void updateMeasureStatus() { if (!TextUtils.isEmpty(leftMaiId) && !TextUtils.isEmpty(rightMaiId)) { mTvLeft.setEnabled(false); mTvRight.setEnabled(false); leftDark(); rightDark(); mTvSubmit.setEnabled(true); } else if (!TextUtils.isEmpty(leftMaiId)) { mTvLeft.setEnabled(true); mTvRight.setEnabled(true); leftDark(); rightLight(); RxView.clicks(mTvLeft).throttleFirst(1, TimeUnit.SECONDS).subscribe(new Consumer() { @Override public void accept(Object o) throws Exception { Toast.makeText(MeasureMainActivity.this, getString(com.taiyi.tyusbsdk.R.string.measure_right_tip_1), Toast.LENGTH_SHORT).show(); } }); RxView.clicks(mTvRight).throttleFirst(1, TimeUnit.SECONDS).subscribe(new Consumer() { @Override public void accept(Object o) throws Exception { getRightUUID(); } }); mTvSubmit.setEnabled(true); } else if (!TextUtils.isEmpty(rightMaiId)) { LogUtil.w("MainActivityB updateMeasureStatus DOUBLE", "left null"); mTvLeft.setEnabled(true); mTvRight.setEnabled(true); leftLight(); rightDark(); RxView.clicks(mTvLeft).throttleFirst(1, TimeUnit.SECONDS).subscribe(new Consumer() { @Override public void accept(Object o) throws Exception { getLeftUUID(); } }); RxView.clicks(mTvRight).throttleFirst(1, TimeUnit.SECONDS).subscribe(new Consumer() { @Override public void accept(Object o) throws Exception { Toast.makeText(MeasureMainActivity.this, getString(com.taiyi.tyusbsdk.R.string.measure_left_tip_1), Toast.LENGTH_SHORT).show(); } }); mTvSubmit.setEnabled(true); } else { LogUtil.w("MainActivityB updateMeasureStatus DOUBLE", "left null"); mTvLeft.setEnabled(true); mTvRight.setEnabled(true); leftLight(); rightLight(); RxView.clicks(mTvLeft).throttleFirst(1, TimeUnit.SECONDS).subscribe(new Consumer() { @Override public void accept(Object o) throws Exception { getLeftUUID(); } }); RxView.clicks(mTvRight).throttleFirst(1, TimeUnit.SECONDS).subscribe(new Consumer() { @Override public void accept(Object o) throws Exception { getRightUUID(); } }); mTvSubmit.setEnabled(false); } } private void leftLight() { mTvLeft.setTextColor(ContextCompat.getColor(this, com.taiyi.tyusbsdk.R.color.white)); mTvLeft.setBackground(ContextCompat.getDrawable(this, com.taiyi.tyusbsdk.R.drawable.bg_fab_orange_normal)); } private void leftDark() { mTvLeft.setTextColor(ContextCompat.getColor(this, com.taiyi.tyusbsdk.R.color.violet)); mTvLeft.setBackground(ContextCompat.getDrawable(this, com.taiyi.tyusbsdk.R.drawable.bg_fab_orange_border)); } private void rightLight() { mTvRight.setTextColor(ContextCompat.getColor(this, com.taiyi.tyusbsdk.R.color.white)); mTvRight.setBackground(ContextCompat.getDrawable(this, com.taiyi.tyusbsdk.R.drawable.bg_fab_orange_normal)); } private void rightDark() { mTvRight.setTextColor(ContextCompat.getColor(this, com.taiyi.tyusbsdk.R.color.violet)); mTvRight.setBackground(ContextCompat.getDrawable(this, com.taiyi.tyusbsdk.R.drawable.bg_fab_orange_border)); } private void getLeftUUID() { HttpUtil.getInstance().getUUID(new TokenOverDueHttpImpl() { @Override public void overdue() { retryType = RETRY_LEFT; getToken(); } @Override public void showError(String error) { retryType = RETRY_LEFT; DialogTipUtil.showSelectDialog(MeasureMainActivity.this, getString(com.taiyi.tyusbsdk.R.string.dialog_tip_tip), getString(com.taiyi.tyusbsdk.R.string.measure_skip_tip_1), com.taiyi.tyusbsdk.R.string.measure_skip, com.taiyi.tyusbsdk.R.string.dialog_tip_retry, new DialogTipUtil.OptionClickCallback_I() { @Override public void leftClick() { TaiyiManager.getInstance().clearMeasure(); TaiyiManager.getInstance().onSkip(); finish(); } @Override public void rightClick() { getLeftUUID(); } }); } @Override public void showResponse(String response) { retryType = 0; BleController.getInstance().setUuid(response); BleController.getInstance().setHand(BleController.HAND_LEFT); Intent intent = new Intent(MeasureMainActivity.this, BleMeasureFlowActivity.class); intent.putExtra("measureId", response); intent.putExtra("hand", 0); startActivityForResult(intent, REQUEST_MEASURE_LEFT); } }); } private void getRightUUID() { HttpUtil.getInstance().getUUID(new TokenOverDueHttpImpl() { @Override public void showResponse(String response) { retryType = 0; BleController.getInstance().setUuid(response); BleController.getInstance().setHand(BleController.HAND_RIGHT); Intent intent = new Intent(MeasureMainActivity.this, BleMeasureFlowActivity.class); intent.putExtra("measureId", response); intent.putExtra("hand", 1); startActivityForResult(intent, REQUEST_MEASURE_RIGHT); } @Override public void overdue() { retryType = RETRY_RIGHT; getToken(); } @Override public void showError(String error) { retryType = RETRY_RIGHT; DialogTipUtil.showSelectDialog(MeasureMainActivity.this, getString(com.taiyi.tyusbsdk.R.string.dialog_tip_tip), getString(com.taiyi.tyusbsdk.R.string.measure_skip_tip_1), com.taiyi.tyusbsdk.R.string.measure_skip, com.taiyi.tyusbsdk.R.string.dialog_tip_retry, new DialogTipUtil.OptionClickCallback_I() { @Override public void leftClick() { TaiyiManager.getInstance().clearMeasure(); TaiyiManager.getInstance().onSkip(); finish(); } @Override public void rightClick() { getRightUUID(); } }); } }); } private void submit() { if (leftMaiId == null || rightMaiId == null) { DialogTipUtil.showSingleHandDialog(this, new DialogTipUtil.OptionClickCallback_I() { @Override public void leftClick() { saveMai(); } @Override public void rightClick() { } }); } else { saveMai(); } } private void saveMai() { HttpUtil.getInstance().saveCombined(leftMaiId, rightMaiId, new TokenOverDueHttpImpl() { @Override public void overdue() { retryType = RETRY_SAVE; getToken(); } @Override public void showError(String error) { retryType = RETRY_SAVE; DialogTipUtil.showSelectDialog(MeasureMainActivity.this, getString(com.taiyi.tyusbsdk.R.string.dialog_tip_tip), getString(com.taiyi.tyusbsdk.R.string.measure_skip_tip_1), com.taiyi.tyusbsdk.R.string.measure_skip, com.taiyi.tyusbsdk.R.string.dialog_tip_retry, new DialogTipUtil.OptionClickCallback_I() { @Override public void leftClick() { TaiyiManager.getInstance().clearMeasure(); TaiyiManager.getInstance().onSkip(); finish(); } @Override public void rightClick() { saveMai(); } }); } @Override public void showResponse(String measureId) { retryType = 0; getCombinedReportDesc(measureId); } }); } public void getCombinedReportDesc(String combiledId) { HttpUtil.getInstance().getGetCombined(combiledId, new TokenOverDueHttpImpl() { @Override public void overdue() { } @Override public void showError(String error) { DialogTipUtil.showSelectDialog(MeasureMainActivity.this, getString(com.taiyi.tyusbsdk.R.string.dialog_tip_tip), getString(com.taiyi.tyusbsdk.R.string.measure_skip_tip_1), com.taiyi.tyusbsdk.R.string.measure_skip, com.taiyi.tyusbsdk.R.string.dialog_tip_retry, new DialogTipUtil.OptionClickCallback_I() { @Override public void leftClick() { TaiyiManager.getInstance().clearMeasure(); TaiyiManager.getInstance().onSkip(); finish(); } @Override public void rightClick() { getCombinedReportDesc(combiledId); } }); } @Override public void showResponse(String response) { TaiyiManager instance = TaiyiManager.getInstance(); instance.setPulseReport(response); String pulseUrl = instance.getUrl(combiledId); String handStyle = ""; if (leftMaiId != null && rightMaiId != null) { handStyle = "DOUBLE"; } else if (leftMaiId != null) { handStyle = "LEFT"; } else if (rightMaiId != null) { handStyle = "RIGHT"; } String pr = PulseResult.create(combiledId, pulseUrl, handStyle, QTimeUtil.toDatetimeStr(), "").toString(); TaiyiManager.getInstance().setPulseResult(pr); resetToMeasure(); if (TaiyiManager.getConfig().skipReport) { instance.onResult(pr, combiledId, response); finish(); } else { Intent intent = new Intent(MeasureMainActivity.this, SuccessActivity.class); intent.putExtra("measureId", combiledId); intent.putExtra("pulseUrl", pulseUrl); startActivity(intent); } } }); } @Override public void onBackPressed() { TaiyiManager.getInstance().onSkip(); super.onBackPressed(); } protected void onDestroy() { // SubscriptionManager.getInstance().cancelall(); if (mDialog != null) { mDialog.dismiss(); } super.onDestroy(); if (BleController.getInstance().isConnected()) { BleController.getInstance().delayDisconnect(); } if (EventBus.getDefault().isRegistered(this)) { EventBus.getDefault().unregister(this); } } @Override public void onResult(String pr, String measureId, String reportData) { } }