优化
This commit is contained in:
1
.codex_write_test.tmp
Normal file
1
.codex_write_test.tmp
Normal file
@@ -0,0 +1 @@
|
||||
write-ok
|
||||
@@ -21,8 +21,8 @@ public class AppConfig {
|
||||
// public static boolean IS_TEST_REQUEST = true;
|
||||
|
||||
/**************************本地*******************************/
|
||||
public static String BASE_URL = "http://192.168.1.217:8082/";//后端本地测试
|
||||
// public static String BASE_URL = "http://47.97.217.123:8081/";//服务器测试
|
||||
// public static String BASE_URL = "http://192.168.1.217:8082/";//后端本地测试
|
||||
public static String BASE_URL = "http://47.97.217.123:8081/";//服务器测试
|
||||
public static String BASE_URL_TWO = BASE_URL;//测试
|
||||
public static String BASE_URL_THREE = BASE_URL;//测试
|
||||
public static boolean IS_TEST_REQUEST = true;
|
||||
|
||||
@@ -13,6 +13,8 @@ import android.content.pm.PackageManager;
|
||||
import android.graphics.drawable.AnimationDrawable;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.os.ParcelUuid;
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
@@ -66,6 +68,9 @@ import pub.devrel.easypermissions.EasyPermissions;
|
||||
public class AddDeviceActivity extends BaseActivity<AddDeviceLayoutBinding, DevicePresenter>
|
||||
implements DeviceContract.DeviceView, EasyPermissions.PermissionCallbacks {
|
||||
|
||||
public static final String EXTRA_RESTART_BLE_SCAN = "restart_ble_scan";
|
||||
private static final long BLE_RESCAN_DELAY_MS = 1800L;
|
||||
|
||||
// 蓝牙相关
|
||||
private BluetoothAdapter bluetoothAdapter;
|
||||
private static final int REQUEST_ENABLE_BT = 1001;
|
||||
@@ -75,6 +80,9 @@ public class AddDeviceActivity extends BaseActivity<AddDeviceLayoutBinding, Devi
|
||||
private String mUuid = "1775244d-6b43-439b-877c-060f2d9bed07";
|
||||
private ScanCallback mScanCallback;
|
||||
private boolean bluetoothReady = false;
|
||||
private boolean isBleScanning = false;
|
||||
private boolean restartScanOnResume = false;
|
||||
private final Handler bleScanHandler = new Handler(Looper.getMainLooper());
|
||||
private BleScanDeviceAdapter bleAdapter;
|
||||
private List<WaterDeviceEntity> mDeviceList = new ArrayList<>();
|
||||
private Set<String> discoveredMacSet = new HashSet<>();
|
||||
@@ -137,6 +145,7 @@ public class AddDeviceActivity extends BaseActivity<AddDeviceLayoutBinding, Devi
|
||||
"未知设备" : device.getDeviceName();
|
||||
// 停止扫描
|
||||
stopBleScan();
|
||||
restartScanOnResume = true;
|
||||
Bundle bundle = new Bundle();
|
||||
bundle.putInt(ConstantUtil.ACTIVITY_NAVIGATE_FLAG,100);
|
||||
bundle.putSerializable("ble_device_entity",mDeviceList.get(position));
|
||||
@@ -150,6 +159,9 @@ public class AddDeviceActivity extends BaseActivity<AddDeviceLayoutBinding, Devi
|
||||
* 开始 BLE 扫描
|
||||
*/
|
||||
private void startBleScan() {
|
||||
if (isBleScanning || !bluetoothReady || !checkBluetoothPermissions()) {
|
||||
return;
|
||||
}
|
||||
BluetoothLeScannerCompat scanner = BluetoothLeScannerCompat.getScanner();
|
||||
UUID SERVICE_UUID = UUID.fromString(mUuid);//1775244d-6b43-439b-877c-060f2d9bed07
|
||||
ParcelUuid parcelUuid = new ParcelUuid(SERVICE_UUID);
|
||||
@@ -161,6 +173,7 @@ public class AddDeviceActivity extends BaseActivity<AddDeviceLayoutBinding, Devi
|
||||
filters.add(new ScanFilter.Builder().setServiceUuid(parcelUuid).build());
|
||||
// filters.add(new ScanFilter.Builder().setDeviceName("PROV_Water_01").build());
|
||||
Log.e("TEST", "开始扫描");
|
||||
isBleScanning = true;
|
||||
mScanCallback = new ScanCallback() {
|
||||
@Override
|
||||
public void onScanResult(int callbackType, @NonNull ScanResult result) {
|
||||
@@ -210,6 +223,8 @@ public class AddDeviceActivity extends BaseActivity<AddDeviceLayoutBinding, Devi
|
||||
@Override
|
||||
public void onScanFailed(int errorCode) {
|
||||
super.onScanFailed(errorCode);
|
||||
isBleScanning = false;
|
||||
mScanCallback = null;
|
||||
Log.e("TEST", "扫描失败: " + errorCode);
|
||||
ToastUtil.showShort(mContext, "扫描失败,错误码: " + errorCode);
|
||||
}
|
||||
@@ -224,12 +239,28 @@ public class AddDeviceActivity extends BaseActivity<AddDeviceLayoutBinding, Devi
|
||||
if (mScanCallback != null) {
|
||||
BluetoothLeScannerCompat scanner = BluetoothLeScannerCompat.getScanner();
|
||||
scanner.stopScan(mScanCallback);
|
||||
mScanCallback = null;
|
||||
isBleScanning = false;
|
||||
Log.e("TEST", "停止扫描");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void restartBleScan() {
|
||||
stopBleScan();
|
||||
discoveredMacSet.clear();
|
||||
mDeviceList.clear();
|
||||
bleAdapter.notifyDataSetChanged();
|
||||
viewBinding.rvDevices.setVisibility(GONE);
|
||||
viewBinding.ivScanAnimation.setVisibility(VISIBLE);
|
||||
if (viewBinding.ivScanAnimation.getDrawable() instanceof AnimationDrawable) {
|
||||
((AnimationDrawable) viewBinding.ivScanAnimation.getDrawable()).start();
|
||||
}
|
||||
bleScanHandler.removeCallbacksAndMessages(null);
|
||||
bleScanHandler.postDelayed(this::startBleScan, BLE_RESCAN_DELAY_MS);
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化蓝牙适配器
|
||||
*/
|
||||
@@ -392,6 +423,30 @@ public class AddDeviceActivity extends BaseActivity<AddDeviceLayoutBinding, Devi
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onResume() {
|
||||
super.onResume();
|
||||
if (getIntent().getBooleanExtra(EXTRA_RESTART_BLE_SCAN, false)) {
|
||||
restartScanOnResume = true;
|
||||
getIntent().removeExtra(EXTRA_RESTART_BLE_SCAN);
|
||||
}
|
||||
if (restartScanOnResume) {
|
||||
restartScanOnResume = false;
|
||||
restartBleScan();
|
||||
} else if (bluetoothReady && !isBleScanning) {
|
||||
startBleScan();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNewIntent(Intent intent) {
|
||||
super.onNewIntent(intent);
|
||||
setIntent(intent);
|
||||
if (intent.getBooleanExtra(EXTRA_RESTART_BLE_SCAN, false)) {
|
||||
restartScanOnResume = true;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getLayoutResId(Bundle savedInstanceState) {
|
||||
return 0;
|
||||
@@ -460,6 +515,7 @@ public class AddDeviceActivity extends BaseActivity<AddDeviceLayoutBinding, Devi
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
bleScanHandler.removeCallbacksAndMessages(null);
|
||||
super.onDestroy();
|
||||
// 停止扫描
|
||||
stopBleScan();
|
||||
|
||||
@@ -217,6 +217,7 @@ public class DeviceConnectActivity extends BaseActivity<DeviceConnectLayoutBindi
|
||||
|
||||
Intent intent = new Intent(this, AddDeviceActivity.class);
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
||||
intent.putExtra(AddDeviceActivity.EXTRA_RESTART_BLE_SCAN, true);
|
||||
handler.postDelayed(() -> {
|
||||
if (!isFinishing()) {
|
||||
startActivity(intent);
|
||||
|
||||
@@ -50,6 +50,10 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
|
||||
implements DeviceContract.DeviceView {
|
||||
|
||||
private static final long BLE_CONNECT_TIMEOUT = 40 * 1000L;
|
||||
private static final long WIFI_SCAN_TIMEOUT = 15 * 1000L;
|
||||
private static final long WIFI_SCAN_SEND_RETRY_DELAY = 1200L;
|
||||
private static final int WIFI_SCAN_SEND_MAX_RETRIES = 1;
|
||||
private static final String WIFI_SCAN_SEND_FAILED_MESSAGE = "Failed to send Wi-Fi scan command.";
|
||||
//当前密码显示/隐藏
|
||||
private boolean isPasswordVisible = false;
|
||||
|
||||
@@ -70,6 +74,19 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
|
||||
private Handler bleConnectHandler = new Handler(Looper.getMainLooper());
|
||||
private AnimationDrawable animationDrawable;
|
||||
private Handler handler = new Handler(Looper.getMainLooper());
|
||||
private boolean isWifiScanning = false;
|
||||
private int wifiScanSendRetryCount = 0;
|
||||
private final Runnable wifiScanSendRetryTask = this::requestWifiScan;
|
||||
private final Runnable wifiScanTimeoutTask = () -> {
|
||||
if (!isWifiScanning || isFinishing()) {
|
||||
return;
|
||||
}
|
||||
handler.removeCallbacks(wifiScanSendRetryTask);
|
||||
isWifiScanning = false;
|
||||
hideDialogLoading();
|
||||
viewBinding.tvNext.setVisibility(View.VISIBLE);
|
||||
ToastUtil.showShort(mContext, getString(R.string.scan_failed));
|
||||
};
|
||||
private final Runnable bleConnectTask = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
@@ -96,6 +113,9 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
handler.removeCallbacks(wifiScanTimeoutTask);
|
||||
handler.removeCallbacks(wifiScanSendRetryTask);
|
||||
isWifiScanning = false;
|
||||
super.onDestroy();
|
||||
cancelBleConnectTask();
|
||||
if (WITCH_FROM_CODE == 100 && espProvisionManager != null && !keepBleConnectionForProvision) {
|
||||
@@ -417,6 +437,9 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
|
||||
}
|
||||
|
||||
private void scanWifi() {
|
||||
if (isWifiScanning) {
|
||||
return;
|
||||
}
|
||||
showLoadingDialog();
|
||||
viewBinding.tvNext.setVisibility(View.GONE);
|
||||
|
||||
@@ -426,24 +449,57 @@ public class SelectWifiActivity extends BaseActivity<DeviceResetWifiBinding, Dev
|
||||
return;
|
||||
}
|
||||
|
||||
isWifiScanning = true;
|
||||
wifiScanSendRetryCount = 0;
|
||||
handler.removeCallbacks(wifiScanTimeoutTask);
|
||||
handler.postDelayed(wifiScanTimeoutTask, WIFI_SCAN_TIMEOUT);
|
||||
|
||||
requestWifiScan();
|
||||
}
|
||||
|
||||
private void requestWifiScan() {
|
||||
if (!isWifiScanning || isFinishing()) {
|
||||
return;
|
||||
}
|
||||
espProvisionManager.scanWifiFromDevice(new WiFiScanListener() {
|
||||
|
||||
@Override
|
||||
public void onWifiListReceived(ArrayList<WiFiAccessPoint> wifiList) {
|
||||
runOnUiThread(() -> displayWifiListFromDevice(wifiList));
|
||||
runOnUiThread(() -> {
|
||||
handler.removeCallbacks(wifiScanTimeoutTask);
|
||||
handler.removeCallbacks(wifiScanSendRetryTask);
|
||||
isWifiScanning = false;
|
||||
displayWifiListFromDevice(wifiList);
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWiFiScanFailed(Exception e) {
|
||||
runOnUiThread(() -> {
|
||||
ToastUtil.showShort(mContext, getString(R.string.scan_failed) + e.getMessage());
|
||||
if (isWifiScanning && isWifiScanSendFailure(e)
|
||||
&& wifiScanSendRetryCount < WIFI_SCAN_SEND_MAX_RETRIES) {
|
||||
wifiScanSendRetryCount++;
|
||||
handler.removeCallbacks(wifiScanSendRetryTask);
|
||||
handler.postDelayed(wifiScanSendRetryTask, WIFI_SCAN_SEND_RETRY_DELAY);
|
||||
return;
|
||||
}
|
||||
handler.removeCallbacks(wifiScanTimeoutTask);
|
||||
handler.removeCallbacks(wifiScanSendRetryTask);
|
||||
isWifiScanning = false;
|
||||
String errorMessage = e == null ? "" : e.getMessage();
|
||||
ToastUtil.showShort(mContext, getString(R.string.scan_failed) + errorMessage);
|
||||
hideDialogLoading();
|
||||
viewBinding.tvNext.setVisibility(View.VISIBLE);
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
private boolean isWifiScanSendFailure(Exception e) {
|
||||
return e != null && WIFI_SCAN_SEND_FAILED_MESSAGE.equals(e.getMessage());
|
||||
}
|
||||
|
||||
private void displayWifiListFromDevice(ArrayList<WiFiAccessPoint> wifiNetworks) {
|
||||
Set<String> wifiSet = new HashSet<>();
|
||||
List<String> wifiNameList = new ArrayList<>();
|
||||
|
||||
@@ -58,11 +58,13 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
|
||||
//当前登录方式 验证码100 密码 200..
|
||||
private static int LOGIN_TYPE_STATUS_CODE = 100;
|
||||
|
||||
/** 创建登录页面对应的 Presenter。 */
|
||||
@Override
|
||||
public LoginPresenter createPresenter() {
|
||||
return new LoginPresenter(new LoginImpl());
|
||||
}
|
||||
|
||||
/** 初始化登录页面数据、状态栏、协议文本及点击事件。 */
|
||||
@Override
|
||||
public void initData(Bundle savedInstanceState) {
|
||||
super.initData(savedInstanceState);
|
||||
@@ -77,6 +79,7 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
|
||||
initListener();
|
||||
}
|
||||
|
||||
/** 初始化页面控件的点击监听事件。 */
|
||||
private void initListener() {
|
||||
setClick(viewBinding.tabCode);
|
||||
setClick(viewBinding.tabPsd);
|
||||
@@ -91,10 +94,12 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
|
||||
setClick(viewBinding.btn151);
|
||||
}
|
||||
|
||||
/** 为指定控件统一设置点击监听。 */
|
||||
private void setClick(View view) {
|
||||
view.setOnClickListener(this::onClick);
|
||||
}
|
||||
|
||||
/** 设置用户协议和隐私政策的可点击文本。 */
|
||||
private void setupAgreementText() {
|
||||
|
||||
ClickUtil.addClickPart(viewBinding.checkboxRead, 100);
|
||||
@@ -137,6 +142,7 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
|
||||
tvAgreement.setHighlightColor(Color.TRANSPARENT);
|
||||
}
|
||||
|
||||
/** 为协议文本中的指定内容添加可点击样式和响应事件。 */
|
||||
private void addClickableSpan(
|
||||
SpannableString spannableString,
|
||||
String content,
|
||||
@@ -181,6 +187,7 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
|
||||
);
|
||||
}
|
||||
|
||||
/** 统一处理登录页面各控件的点击事件。 */
|
||||
public void onClick(View v) {
|
||||
switch (v.getId()) {
|
||||
|
||||
@@ -335,6 +342,7 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
|
||||
}
|
||||
|
||||
private CountDownTimer cdTimer = new CountDownTimer(60000, 1000) {
|
||||
/** 更新验证码重新发送倒计时状态。 */
|
||||
@Override
|
||||
public void onTick(long millisUntilFinished) {
|
||||
viewBinding.tvGetVerifiCode.setText("(" + millisUntilFinished / 1000 + ") " + getString(R.string.login_resend));
|
||||
@@ -344,6 +352,7 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
|
||||
viewBinding.tvGetVerifiCode.setBackground(mContext.getResources().getDrawable(R.drawable.shape_gray_50));
|
||||
}
|
||||
|
||||
/** 倒计时结束后恢复验证码发送按钮状态。 */
|
||||
@Override
|
||||
public void onFinish() {
|
||||
viewBinding.tvGetVerifiCode.setText(getString(R.string.login_resend));
|
||||
@@ -354,6 +363,7 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
|
||||
}
|
||||
};
|
||||
|
||||
/** 切换密码输入框的明文或密文显示状态。 */
|
||||
private void togglePasswordVisibility() {
|
||||
EditText etPassword = viewBinding.etInputPsd;
|
||||
ImageView ivToggle = viewBinding.imgPsdShowHide;
|
||||
@@ -379,11 +389,13 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
|
||||
isPasswordVisible = !isPasswordVisible;
|
||||
}
|
||||
|
||||
/** 处理注册成功回调。 */
|
||||
@Override
|
||||
public void registerSuccess(BaseBean bean) {
|
||||
|
||||
}
|
||||
|
||||
/** 处理验证码发送成功回调并启动倒计时。 */
|
||||
@Override
|
||||
public void getPhoneCodeSuccess(BaseBean bean) {
|
||||
hideDialogLoading();
|
||||
@@ -391,6 +403,7 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
|
||||
cdTimer.start();
|
||||
}
|
||||
|
||||
/** 处理登录成功结果,保存登录信息并进入首页。 */
|
||||
@Override
|
||||
public void loginBySmsCodeSuccess(LoginEntity entity) {
|
||||
hideDialogLoading();
|
||||
@@ -409,22 +422,26 @@ public class LoginActivity extends BaseActivity<LoginLayoutBinding, LoginPresent
|
||||
}, 200);
|
||||
}
|
||||
|
||||
/** 处理用户密码更新成功回调。 */
|
||||
@Override
|
||||
public void updateUserPasswordSuccess(BaseBean bean) {
|
||||
|
||||
}
|
||||
|
||||
/** 获取登录页面布局资源标识。 */
|
||||
@Override
|
||||
public int getLayoutResId(Bundle savedInstanceState) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
/** 展示接口错误信息并关闭加载弹窗。 */
|
||||
@Override
|
||||
public void showError(String message) {
|
||||
hideDialogLoading();
|
||||
ToastUtil.showShort(mContext, message);
|
||||
}
|
||||
|
||||
/** 处理退出登录回调。 */
|
||||
@Override
|
||||
public void logOut(BaseBean bean) {
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user